Compute Pressure API

از فشار محاسباتی سیستم خود مطلع شوید.

کنت کریستینسن
Kenneth Christiansen
Arnaud (Arno) Mandy

Compute Pressure API حالت های سطح بالایی را ارائه می دهد که نشان دهنده فشار روی سیستم است. این به پیاده‌سازی اجازه می‌دهد تا از معیارهای سخت‌افزاری زیربنایی درست استفاده کند تا اطمینان حاصل شود که کاربران می‌توانند تا زمانی که سیستم تحت فشار غیرقابل مدیریتی قرار نگیرد، از تمام قدرت پردازشی در دسترس خود استفاده کنند.

وضعیت فعلی

گام وضعیت
1. توضیح دهنده ایجاد کنید کامل
2. پیش نویس اولیه مشخصات را ایجاد کنید کامل
3. جمع آوری بازخورد و تکرار در طراحی در حال پیش رفت
4. آزمایش مبدا کامل
5. راه اندازی کنید کامل (Chrome 125)

Compute Pressure API را امتحان کنید

برای آزمایش با Compute Pressure API به صورت محلی، این صفحه را بخوانید.

برای آزمایش اولیه ثبت نام کنید

از Chrome 115، Compute Pressure API به صورت آزمایشی اصلی در دسترس است. انتظار می رود در کروم 123 (29 مه 2024) به پایان برسد. اینجا ثبت نام کنید .

موارد استفاده

موارد استفاده اولیه افزایش یافته توسط Compute Pressure API فعلی کنفرانس ویدیویی و بازی های ویدیویی است.

این برنامه‌های محبوب بلادرنگ به عنوان نرم‌افزار طبقه‌بندی می‌شوند. به این معنا که اگر سیستم فراتر از حالت‌های خاص اعمال شود، کیفیت خدمات کاهش می‌یابد، اما منجر به خرابی کامل سیستم نمی‌شود. این برنامه‌های نرم‌افزار بلادرنگ از اینکه می‌توانند بار کاری خود را بر اساس مصرف یا فشار CPU تطبیق دهند، بسیار سود می‌برند.

به طور خاص، اولین نسخه از این API با هدف فعال کردن تصمیمات سازگاری زیر است.

کنفرانس ویدیویی

  • تعداد فیدهای ویدیویی را که در طول تماس با بسیاری از شرکت کنندگان به طور همزمان نشان داده می شوند، تنظیم کنید.
  • کاهش کیفیت پردازش ویدیو (رزولوشن ویدیو، فریم در ثانیه).
  • از پردازش غیرضروری ویدیو، مانند برخی از فیلترهای دوربین صرفنظر کنید.
  • پردازش غیرضروری صدا، مانند سرکوب نویز WebRTC را غیرفعال کنید.
  • دکمه‌های کیفیت در مقابل سرعت و اندازه در مقابل سرعت را به سمت «سرعت» در رمزگذاری ویدیو و صدا (در WebRTC، WebCodecs یا رمزگذاری نرم‌افزار) بچرخانید.

بازی های ویدیویی

  • برای ساختن ویدیوی بازی (مدل های سه بعدی، بافت ها، سایه بان ها) و صدا (صداها، جلوه های صوتی) از دارایی های با کیفیت پایین تر استفاده کنید.
  • افکت‌هایی را که منجر به جزئیات غیر ضروری کمتر واقعی می‌شوند (آب، پارچه، انیمیشن‌های آتش، درخشندگی پوست، جلوه‌های خیره کننده یا شبیه‌سازی‌های فیزیکی که بر گیم‌پلی تأثیر نمی‌گذارند) غیرفعال کنید.
  • دکمه های کیفیت در مقابل سرعت را در موتور رندر بازی (کیفیت سایه ها، فیلتر بافت، فاصله مشاهده) تغییر دهید.

از نظر فنی، اینها را می‌توان با دانستن وضعیت‌های حرارتی (مثلاً آیا سیستم به صورت غیرفعال خنک می‌شود) و فشار CPU برای رشته اصلی و کارگرانی که سایت استفاده می‌کند، انجام داد. وضعیت حرارتی سیستم یک حالت جهانی است و می تواند توسط برنامه ها و سایت هایی غیر از سایت مشاهده کننده تحت تأثیر قرار گیرد.

رابط ها

Compute Pressure API را می توان در زمینه های زیر اجرا کرد:

  • پنجره یا موضوع اصلی
  • کارگر فداکار
  • کارگر مشترک

Compute Pressure API دو رابط جدید را تعریف می کند.

PressureObserver : شیئی برای مشاهده فشار محاسباتی هر تعداد منبع در یک بازه نمونه از پیش تعریف شده. اولین تکرار در Chromium "cpu" را به عنوان source نمایش می دهد. برای جزئیات بیشتر به بخش مربوط به پارامترها مراجعه کنید. هر ناظر می تواند به طور ناهمزمان روند تغییرات فشار را در یک سیستم مشاهده کند.

PressureRecord : روند فشار را در یک لحظه خاص از انتقال توصیف می کند. اشیاء از این نوع را فقط می توان به دو روش به دست آورد: به عنوان ورودی برای پاسخ به تماس PressureObserver شما، یا با فراخوانی متد takeRecords() در نمونه PressureObserver .

PressureObserver

هنگامی که یک شی PressureObserver ایجاد می شود، پیکربندی می شود تا فشار منابع پشتیبانی شده را در یک بازه زمانی مشخص مشاهده کند. منابع پشتیبانی شده را می توان در هر زمانی در طول عمر شی PressureObserver به صورت جداگانه مشاهده یا مشاهده نکرد. فاصله نمونه پس از ایجاد شی قابل تغییر نیست.

سازنده

PressureObserver(callback, options) : یک شی PressureObserver جدید ایجاد می‌کند که زمانی که تشخیص می‌دهد تغییری در مقادیر منبع مشاهده‌شده اتفاق افتاده است، یک تابع بازخوانی مشخص را فراخوانی می‌کند.

سازنده یک تابع فراخوان اجباری و گزینه های اختیاری را به عنوان پارامتر می گیرد.

پاسخ به تماس

callback() : callback با آرایه ای از اشیاء خوانده نشده PressureRecord فراخوانی می شود.

گزینه ها

PressureObserverOptions : شامل فاصله زمانی نمونه، sampleInterval بر حسب میلی ثانیه، که در آن کاربر درخواست به روز رسانی می کند.

مواد و روش ها

PressureObserver.observe(source) : به "PressureObserver" می گوید که کدام منبع را مشاهده کند.

PressureObserver.unobserve(source) : به «PressureObserver» می‌گوید که مشاهده یک منبع را متوقف کند.

PressureObserver.disconnect() : به 'PressureObserver' می گوید که مشاهده همه منابع را متوقف کند.

PressureObserver.takeRecords() : دنباله ای از رکوردها را از زمان آخرین فراخوانی برگشتی برمی گرداند.

static PressureObserver.supportedSources() (فقط خواندنی): انواع منبع پشتیبانی شده توسط سخت افزار را برمی گرداند.

مولفه های

source : منبعی که باید مشاهده شود، به عنوان مثال "cpu" . این باید یکی از انواع منبع پشتیبانی شده باشد.

در نسخه فعلی Compute Pressure، فقط "cpu" پشتیبانی می شود.

ثبت فشار

رابط PressureRecord از Compute Pressure API روند فشار یک منبع را در یک لحظه خاص از انتقال توصیف می کند.

ویژگی های نمونه

PressureRecord.source (فقط خواندنی): رشته ای را نشان می دهد که منبع مبدا را که رکورد از آن می آید، نشان می دهد.

PressureRecord.state (فقط خواندنی): رشته ای را نشان می دهد که وضعیت فشار ثبت شده را نشان می دهد.

PressureRecord.time (فقط خواندنی): عددی را برمی‌گرداند که نشان‌دهنده یک مهر زمانی با وضوح بالا است.

مثال ها

آیا Compute Pressure API پشتیبانی می شود؟

if ('PressureObserver' in globalThis) {
  // The Compute Pressure API is supported.
}

ایجاد ناظر فشار

مشاهده‌گر فشار را با فراخوانی سازنده آن با یک تابع تماس ایجاد کنید تا هر زمان که یک به‌روزرسانی فشار وجود دارد اجرا شود:

const observer = new PressureObserver(
  (records) => { /* ... */ },
  { sampleInterval: 2000 }
);

فاصله زمانی نمونه، sampleInterval ، 2000 میلی‌ثانیه، به این معنی است که حداکثر هر دو ثانیه یک بار به‌روزرسانی می‌شود.

اگر فاصله نمونه درخواستی توسط سیستم قابل ارائه نباشد. این سیستم نمونه ها را در بهترین فاصله زمانی مناسب ارائه می دهد. به عنوان مثال اگر فاصله 2000 ms درخواست شود، اما سیستم فقط بتواند نمونه هایی را در حداکثر 1000 میلی ثانیه ارائه دهد، 1000 میلی ثانیه انتخاب می شود.

با استفاده از ناظر فشار

تنها یک راه برای راه اندازی ناظر فشار وجود دارد. برای هر منبع observer.observe(source) را فراخوانی کنید.

observer.observe("cpu");

در این مثال "cpu" منبع فشاری است که ما به آن علاقه مندیم. در حال حاضر، تنها منبع موجود است. در آینده، ممکن است منابع دیگری مانند "gpu" ، "power" یا "thermals" وجود داشته باشد.

برای توقف مشاهده منبع، از متد unobserve() مانند مثال زیر استفاده کنید:

observer.unobserve("cpu");

برای اینکه همه منابع را به یکباره مشاهده نکنید، از متد disconnect() مانند مثال زیر استفاده کنید:

observer.disconnect();

بازیابی سوابق فشار

رکوردهای فشار را می توان با یک تابع فراخوانی بازیابی کرد، که هر بار که تغییری در وضعیت فشار اتفاق می افتد فراخوانی می شود.

function callback(records) {
  const lastRecord = records[records.length - 1];
  console.log(`Current pressure ${lastRecord.state}`);
  if (lastRecord.state === "critical") {
    // Reduce workers load by 4.
  } else if (lastRecord.state === "serious") {
    // Reduce workers load by 2.
  } else {
    // Do not reduce.
  }
}

const observer = new PressureObserver(callback, { sampleInterval: 1000 });
await observer.observe("cpu");

کاربر همچنین می تواند با فراخوانی متد takeRecords() خواندن PressureRecord را مجبور کند.

متد takeRecords() واسط PressureObserver آرایه ای از اشیاء PressureRecords ذخیره شده در ناظر فشار را برمی گرداند و آن را خالی می کند.

متداول‌ترین مورد استفاده برای این کار این است که بلافاصله تمام رکوردهای فشار معلق را که هنوز توسط عملکرد برگشت تماس ناظر پردازش نشده‌اند، قبل از قطع ارتباط مشاهده‌گر، واکشی می‌کنیم، به طوری که هنگام خاموش کردن ناظر، می‌توان تمام رکوردهای معلق را پردازش کرد.

فراخوانی این روش لیست رکوردهای در انتظار را پاک می کند، بنابراین تماس برگشتی اجرا نمی شود.

const observer = new PressureObserver(
  (records) => { /* Do something with records. */ },
  { sampleInterval: 1000 }
);

await observer.observe("cpu");

setTimeout(() => {
  // Forced records reading.
  const records = observer.takeRecords();
  observer.disconnect();
  // Do something with last records if any.
}, 2000);

در مورد طراحی API به ما بگویید

آیا چیزی در مورد API وجود دارد که آنطور که انتظار داشتید کار نمی کند؟ آیا روش یا ویژگی گم شده ای برای استفاده خود از API می بینید؟ در مخزن GitHub مربوطه، یک مشکل مشخصات یا نظر در مورد یک موجود را ثبت کنید.

گزارش مشکل در اجرا

آیا با اجرای Chromium اشکالی پیدا کردید؟ یا اجرا با مشخصات متفاوت است؟ یک اشکال را در new.crbug.com ثبت کنید. اطمینان حاصل کنید که تا جایی که می توانید جزئیات، دستورالعمل های ساده برای بازتولید را وارد کنید و Blink>PerformanceAPIs>ComputePressure را در کادر Components وارد کنید.

لینک های مفید