واجهة برمجة تطبيقات Compute Pressure

الحصول على معلومات عن الضغط على معالجة النظام

Kenneth Christiansen
Kenneth Christiansen
Arnaud (Arno) Mandy

توفّر Compute Pressure API حالات عالية المستوى تمثّل الضغط على النظام. ويسمح هذا الإجراء للتنفيذ باستخدام مقاييس الأجهزة الأساسية المناسبة لضمان تمكّن المستخدمين من الاستفادة من كل طاقة المعالجة المتوفّرة لهم ما دام النظام غير خاضع لضغط لا يمكن إدارته.

الوضع الحالي

الخطوة الحالة
1. إنشاء فيديو توضيحي مكتمل
2. إنشاء مسودة أولية للمواصفة مكتمل
3- جمع الملاحظات وتحسين التصميم قيد التقدّم
4. مرحلة التجربة والتقييم مكتملة
5- إطلاق مكتمل (Chrome 125)

تجربة Compute Pressure API

للتجربة مع Compute Pressure API على الجهاز، يُرجى قراءة هذه الصفحة.

التسجيل في مرحلة التجربة والتقييم

اعتبارًا من الإصدار 115 من Chrome، أصبحت Compute Pressure API متاحة كأحد الميزات التجريبية. من المتوقّع أن تنتهي في Chrome 123 (29 أيار/مايو 2024). التسجيل في الفترة التجريبية الأصلية

حالات الاستخدام

إنّ حالات الاستخدام الأساسية المحسّنة من خلال Compute Pressure API الحالية هي اجتماعات الفيديوهات وألعاب الفيديو.

يتم تصنيف هذه التطبيقات الرائجة التي تعمل في الوقت الفعلي على أنّها تطبيقات خفيفة. وهذا يعني أنّه يتم خفض جودة الخدمة إذا تم تشغيل النظام خارج حالات معيّنة، ولكنّ ذلك لا يؤدي إلى تعطُّل النظام بالكامل. تستفيد هذه التطبيقات التي تعمل في الوقت الفعلي الخفيف بشكل كبير من إمكانية تعديل أحمال العمل استنادًا إلى استهلاك وحدة المعالجة المركزية أو الضغط عليها.

على وجه التحديد، يهدف الإصدار الأول من واجهة برمجة التطبيقات هذه إلى تفعيل قرارات التكيف التالية:

اجتماعات الفيديو

  • ضبط عدد خلاصات الفيديو التي يتم عرضها في الوقت نفسه أثناء المكالمات التي تضمّ العديد من المشاركين
  • خفض جودة معالجة الفيديو (دقة الفيديو، عدد اللقطات في الثانية)
  • تخطّي معالجة الفيديوهات غير الضرورية، مثل بعض فلاتر الكاميرا
  • أوقِف معالجة الصوت غير الضرورية، مثل ميزة "إلغاء الضوضاء" في WebRTC.
  • اضبط مقبضَي "الجودة مقابل السرعة" و"الحجم مقابل السرعة" على "السرعة" في ترميز الفيديو والصوت (في WebRTC أو WebCodecs أو ترميز البرامج).

ألعاب الفيديو

  • استخدِم مواد عرض ذات جودة أقل لإنشاء الفيديو الخاص باللعبة (النماذج الثلاثية الأبعاد والقوام والتأثيرات المتغيّرة) والصوت (الأصوات والتأثيرات الصوتية).
  • أوقِف التأثيرات التي تؤدي إلى ظهور تفاصيل غير ضرورية وغير واقعية (الماء، والملابس، والصور المتحركة للنار، ودرجة سطوع البشرة، وتأثيرات الوهج، أو المحاكاة الفيزيائية التي لا تؤثّر في تجربة اللعب).
  • يمكنك ضبط عناصر التحكّم في الجودة مقابل السرعة في محرّك عرض اللعبة (جودة الظلّ والتفلترة والنسيج ومدى العرض).

من الناحية الفنية، يمكن تحقيق ذلك من خلال معرفة حالات الضغط الحراري (على سبيل المثال، ما إذا كان يتم تبريد النظام بشكل سلبي) وضغط وحدة المعالجة المركزية للسلسلة الرئيسية و العمليات التي يستخدمها الموقع الإلكتروني. الحالة الحرارية للنظام هي حالة عالمية ويمكن أن تؤثر فيها التطبيقات والمواقع الإلكترونية غير الموقع الذي يتم رصده.

واجهات

يمكن تشغيل Compute Pressure API في السياقات التالية:

  • النافذة أو سلسلة التعليمات الرئيسية
  • عامل مخصّص
  • عامل مشترَك

تحدِّد Compute Pressure API واجهتَين جديدتَين.

PressureObserver: عنصر لمراقبة الضغط الحسابي لأي عدد من المصادر في فاصل عيّنات محدّد مسبقًا. يعرِض التكرار الأول في Chromium "cpu" على أنّه source. اطّلِع على قسم المَعلمات للحصول على مزيد من التفاصيل. يمكن لكل مراقب رصد مؤشرات تغيُّرات الضغط بشكل غير متزامن في النظام.

PressureRecord: يصف مؤشر الضغط في لحظة معيّنة من الانتقال. لا يمكن الحصول على العناصر من هذا النوع إلا بطريقتَين: كمدخل إلى دالة الاستدعاء PressureObserver أو من خلال استدعاء طريقة takeRecords() في مثال PressureObserver.

PressureObserver

عند إنشاء عنصر PressureObserver، يتم ضبطه لمشاهدة الضغط من المصادر المتوافقة، في فاصل عيّنات معيّن. يمكن رصد المصادر المتوافقة individualmente أو إيقاف رصدها بشكل فردي في أي وقت خلال فترة نشاط كائن PressureObserver. لا يمكن تغيير فاصل أخذ العينات بعد إنشاء العنصر.

الشركة المصنِّعة

PressureObserver(callback): لإنشاء عنصر PressureObserver جديد، والذي بدوره سيقوم باستدعاء دالة استدعاء محدّدة عند رصد تغيير في قيم المصدر الذي يتم مراقبته.

تأخذ الدالة المنشئة دالة ردّ اتصال إلزامية.

معاودة الاتصال

callback(): يتمّ استدعاء الدالة المرجعية مع صفيف من PressureRecord العناصر غير المقروءة.

الطُرق

PressureObserver.observe(source, options): يُخبر "PressureObserver" بالمصدر الذي يجب مراقبته وoptions الاختياري، كمَعلمات.

الخيارات

PressureObserverOptions: يحتوي على فاصل أخذ العينات، sampleInterval بالملي ثانية، الذي يطلب فيه المستخدم التحديثات.

PressureObserver.unobserve(source): يطلب من "PressureObserver" التوقف عن مراقبة مصدر.

PressureObserver.disconnect(): يطلب من "PressureObserver" إيقاف مراقبة جميع المصادر.

PressureObserver.takeRecords(): تعرض تسلسلاً من السجلّات، بدءًا من آخر مرة تم فيها استدعاء دالة "معاودة الاتصال".

static PressureObserver.knownSources() (للقراءة فقط): عرض أنواع المصادر المعروفة لوكيل المستخدم بترتيب أبجدي

المعلمات

source: المصدر الذي سيتم رصده، على سبيل المثال "cpu". يجب أن يكون أحد أنواع المصادر المتوافقة.

في الإصدار الحالي من "ضغط الحوسبة"، لا يتوفّر سوى "cpu".

PressureRecord

تصف واجهة PressureRecord في Compute Pressure API مؤشر الضغط لمصدر معيّن في لحظة انتقال معيّنة.

خصائص المثيل

PressureRecord.source (للقراءة فقط): لعرض سلسلة تمثّل مصدر تسجيل المحتوى source.

PressureRecord.state (للقراءة فقط): لعرض سلسلة تمثّل حالة الضغط المسجّلة

PressureRecord.time (للقراءة فقط): تعرِض هذه السمة رقمًا يمثّل طابعًا زمنيًا بدقة عالية.

أمثلة

تقدّم الأقسام التالية أمثلة على الاستخدام.

تحديد مدى توفّر واجهة برمجة التطبيقات

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

إنشاء أداة مراقبة الضغط

أنشئ مراقب الضغط من خلال استدعاء وظيفته المنشئة باستخدام دالة ردّ اتصال لتشغيلها عند توفُّر معلومات جديدة عن الضغط:

const observer = new PressureObserver((records) => {
  /* ... */
});

استخدام أداة مراقبة الضغط

هناك طريقة واحدة فقط لبدء أداة مراقبة الضغط. بالنسبة إلى كل مصدر، اتصل بالرقم observer.observe(source).

observer.observe("cpu" { sampleInterval: 2_000 });

في هذا المثال، يمثّل "cpu" مصدر الضغط الذي يهمّنا. وهو المصدر الوحيد المتاح في الوقت الحالي. في المستقبل، قد تتوفّر مصادر أخرى مثل "gpu" أو "power" أو "thermals".

إذا كان فاصل عيّنة البيانات، sampleInterval، يبلغ 2000 مللي ثانية، يعني ذلك أنّه سيتم تنفيذ تعديلات كل ثانيتَين بحد أقصى.

إذا تعذّر على النظام عرض الفاصل الزمني للعيّنة المطلوب، سيقدّم النظام عيّنات في أفضل فاصل زمني مناسب متاح. على سبيل المثال، إذا تم طلب فاصل زمني بقيمة 2000 ملي ثانية، ولكن لا يمكن للنظام تقديم عيّنات إلا بفاصل زمني بقيمة 1000 ملي ثانية كحد أقصى، سيتم اختيار 1000 ملي ثانية.

للتوقف عن مراقبة مصدر، استخدِم الطريقة 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);
await observer.observe('cpu', { sampleInterval: 1_000 });

يمكن للمستخدم أيضًا فرض قراءة PressureRecord من خلال استدعاء الأسلوب takeRecords().

تُعرِض طريقة takeRecords() لواجهة PressureObserver مصفوفة من عناصر PressureRecords المخزّنة في مراقب الضغط، ما يؤدي إلى إفراغها.

وأكثر حالات الاستخدام شيوعًا لهذا الإجراء هي جلب جميع سجلات الضغط العميق التي لم تتم معالجتها بعد من خلال دالة الاستدعاء الخاصة بالمُراقب، وذلك قبل فصل المُراقب، حتى تتم معالجة أي سجلات في انتظار المراجعة عند إغلاق المُراقب.

يؤدي استدعاء هذه الطريقة إلى محو قائمة السجلّات في انتظار المراجعة، وبالتالي لن يتم تنفيذ الدالة المُعاد الاتصال بها.

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

await observer.observe('cpu', { sampleInterval: 1_000 });

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

مشاركة ملاحظاتك

هل هناك أي مشكلة في واجهة برمجة التطبيقات لا تعمل على النحو المتوقّع؟ هل تظهر أمامك أي طريقة أو خاصية غير متوفّرة لاستخدامك لواجهة برمجة التطبيقات؟ يمكنك الإبلاغ عن مشكلة في المواصفات أو التعليق على مشكلة حالية في مستودع GitHub المقابل.

الإبلاغ عن مشكلة في التنفيذ

هل رصدت خطأ في عملية تنفيذ Chromium؟ أم هل التنفيذ مختلف عن المواصفات؟ يُرجى إرسال بلاغ عن الخطأ على الرابط new.crbug.com. احرص على تضمين أكبر قدر ممكن من التفاصيل وتعليمات لإعادة إنتاج الخطأ، ثم أدخِل Blink>PerformanceAPIs>ComputePressure في مربع Components.

الموارد