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

يمكنك التعرّف على معلومات حول الضغط الحسابي في نظامك.

Kenneth Christiansen
Kenneth Christiansen
Arnaud (Arno) Mandy

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

الوضع الحالي

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

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

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

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

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

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

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

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

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

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

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

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

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

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

واجهات

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

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

تُعرّف واجهة برمجة التطبيقات Compute Pressure واجهتين جديدتين.

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

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

PressureObserver

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

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

PressureObserver(callback, options): تنشئ كائن PressureObserver جديدًا يستدعي دالة معاودة اتصال محدّدة عندما تكتشف حدوث تغيير في قيم المصدر الذي تتم ملاحظته.

تستخدم الدالة الإنشائية دالة callback الإلزامية وخيارات اختيارية كمعلَمات.

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

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

الخيارات

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

الطُرق

PressureObserver.observe(source): يخبر "PressureMonitorer" المصدر الذي يجب ملاحظته.

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

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

PressureObserver.takeRecords(): عرض سلسلة من السجلات، منذ آخر استدعاء لمعاودة الاتصال.

static PressureObserver.supportedSources() (للقراءة فقط): يعرض أنواع المصادر المتوافقة مع الجهاز.

المَعلمات

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

في الإصدار الحالي من Compute Pressure، لا يُسمح إلا بالإصدار "cpu".

PressureRecord

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

خصائص المثيل

PressureRecord.source (للقراءة فقط): تعرض سلسلة تمثّل مصدر المصدر الذي يأتي منه السجلّ.

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

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

أمثلة

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

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

تكوين مراقب الضغط

قم بإنشاء مراقب الضغط عن طريق استدعاء الدالة الإنشائية الخاصة بها مع دالة استدعاء ليتم تشغيلها كلما كان هناك تحديث للضغط:

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

ويعني الفاصل الزمني لنموذج، sampleInterval، لمدة 2000 ملي ثانية، أنّه سيتم إجراء تحديثات كل ثانيتَين على الأكثر.

إذا تعذّر على النظام عرض الفاصل الزمني المطلوب للعيّنة. سيقدم النظام عينات في أفضل فاصل مناسب موجود. على سبيل المثال، إذا تم طلب الفاصل الزمني البالغ 2000 ملي ثانية، ولكن بإمكان النظام تقديم عيّنات يبلغ الحد الأقصى لها 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");

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

تعرض الطريقة 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);

أخبرنا عن تصميم واجهة برمجة التطبيقات

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

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

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

روابط مفيدة