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

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

Kenneth Christiansen
Kenneth Christiansen
Arnaud (Arno) Mandy

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

الوضع الحالي

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

تجربة Compute Pressure API

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

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

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

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

تتمثل حالات الاستخدام الأساسية التي تم تحسينها بواسطة واجهة Compute Pressure الحالية في مؤتمرات الفيديو وألعاب الفيديو.

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

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

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

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

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

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

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

واجهات

يمكن تشغيل 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 (للقراءة فقط): تعرض سلسلة تمثّل المصدر الذي يأتي منه السجلّ.

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>الأداءAPIs>ComputePressure في مربع المكونات.

الموارد