واجهة برمجة تطبيقات 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 كإصدار تجريبي. ومن المتوقّع أن ينتهي التشغيل في Chrome 123 (في 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): تنشئ كائن PressureObserver جديدًا يستدعي دالة استدعاء محدّدة عندما تكتشف حدوث تغيير في قيم المصدر الذي يجري ملاحظته.

تستخدم الدالة الإنشائية دالة callback الإلزامية.

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

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

الطُرق

PressureObserver.observe(source, options): يخبر 'PressureMonitorer' بالمصدر الذي يجب ملاحظته وoptions اختياري، كمعلَمات.

الخيارات

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

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

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

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

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

المَعلمات

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

في الإصدار الحالي من Compute Pressure، لا يُسمح إلا بالإصدار "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> PerformanceAPIs>ComputePressure في مربع المكونات.

المراجع