ממשק API של 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 זמין כגרסת מקור לניסיון. הוא צפוי להסתיים בגרסה 123 של Chrome (29 במאי 2024). הרשמה לגרסת המקור לניסיון.

תרחישים לדוגמה

התרחישים לדוגמה שמשופרים על ידי ה-Compute Pressure API הנוכחי הם שיחות ועידה בווידאו ומשחקי וידאו.

האפליקציות הפופולריות האלה בזמן אמת מסווגות כרכות. כלומר, אם תממשו את המערכת מעבר למצבים מסוימים, איכות השירות תיפגע, אבל היא לא תוביל לכשל במערכת. לאפליקציות רכות בזמן אמת יש יתרונות משמעותיים ביכולת להתאים את עומסי העבודה שלהן לצריכה או ללחץ של המעבד (CPU).

באופן ספציפי, הגרסה הראשונה של ה-API הזו מאפשרת לקבל את החלטות ההתאמה הבאות.

שיחת ועידה בווידאו

  • לשנות את מספר הפידים של הווידאו שמוצגים בו-זמנית במהלך שיחות עם הרבה משתתפים.
  • הפחתת האיכות של עיבוד הווידאו (רזולוציית הסרטון, פריימים לשנייה).
  • מדלגים על עיבוד וידאו לא חיוני, כמו פילטרים מסוימים במצלמה.
  • השבתת עיבוד אודיו לא חיוני, כמו ביטול רעשים ב-WebRTC.
  • אפשר לשנות את מהירות החיבור בין מהירות ביחס למהירות או ביחס לגודל מהירות ביחס ל "מהירות" בקידוד וידאו ואודיו (ב-WebRTC, ב-WebCodecs או בקידוד התוכנה).

משחקי וידאו

  • שימוש בנכסים באיכות נמוכה יותר כדי להרכיב סרטון של המשחק (דגמים תלת-ממדיים, טקסטורות, מצילים) ואודיו (קולות, אפקטים קוליים).
  • השבתת אפקטים שגורמים לפרטים פחות מציאותיים ולא חיוניים (מים, בד, אנימציות של אש, ברק העור, אפקטים של ברק או סימולציות פיזיות שלא משפיעים על מהלך המשחק).
  • אפשר לשנות את הלחצנים של איכות לעומת מהירות במנוע הרינדור של המשחק (איכות הצלליות, סינון המרקמים, הצגת המרחק).

מבחינה טכנית אפשר לדעת את הטמפרטורות התרמיות (למשל, אם המערכת מקררת באופן פסיבי) ואת מצבי הלחץ של המעבד (CPU) ב-thread הראשי ובעובדים באתר. המצב התרמי של המערכת הוא מצב גלובלי, שיכול להיות מושפע מאפליקציות ומאתרים אחרים מלבד האתר התצפית.

ממשקים

אפשר להריץ את Compute Pressure API בהקשרים הבאים:

  • חלון או thread ראשי
  • עובד ייעודי
  • עובד משותף

Compute Pressure API מגדיר שני ממשקים חדשים.

PressureObserver: אובייקט לתצפית על לחץ המחשוב של כל מספר של מקורות במרווח דגימה מוגדר מראש. איטרציה ראשונה ב-Chromium חושפת את "cpu" בתור source. ראו את הקטע על פרמטרים לפרטים נוספים. כל צופה יכול לזהות באופן אסינכרוני מגמות של שינויי לחץ במערכת.

PressureRecord: מתאר את מגמת הלחץ ברגע ספציפי של מעבר. ניתן לקבל אובייקטים מהסוג הזה רק בשתי דרכים: כקלט להתקשרות חזרה של לחץureObserver, או על ידי קריאה לשיטה takeRecords() במכונה PressureObserver.

PressureObserver

כשיוצרים אובייקט PressureObserver, הוא מוגדר לעקוב אחר הלחץ של מקורות נתמכים במרווח דגימה נתון. אפשר לראות את המקורות הנתמכים בנפרד, או לא לראות אותם בכל שלב במהלך משך החיים של האובייקט PressureObserver. אי אפשר לשנות את מרווח הדגימה אחרי יצירת האובייקט.

יצרן

PressureObserver(callback): יצירת אובייקט PressureObserver חדש שיפעיל פונקציית קריאה חוזרת ספציפית כשהיא מזהה שהתרחש שינוי בערכים של המקור שזוהה.

ה-constructor מקבל פונקציית callback הכרחית.

התקשרות חזרה

callback(): הקריאה החוזרת מתבצעת עם מערך של אובייקטים PressureRecord שלא נקראו.

שיטות

PressureObserver.observe(source, options): מציין ל-'ClickureObserver' איזה מקור לצפות, ואילו options אופציונליים, כפרמטרים.

אפשרויות

PressureObserverOptions: מכיל את מרווח הדגימה, sampleInterval באלפיות שנייה, שבו המשתמש מבקש עדכונים.

PressureObserver.unobserve(source): מורה ל-'pressureObserver' להפסיק לצפה במקור כלשהו.

PressureObserver.disconnect(): מורה ל-'pressureObserver' להפסיק לצפות בכל המקורות.

PressureObserver.takeRecords(): מחזירה רצף של רשומות, מאז הקריאה האחרונה של הקריאה החוזרת (callback).

static PressureObserver.knownSources() (לקריאה בלבד): החזרת סוגי המקור המוכרים של סוכן המשתמש בסדר אלפביתי.

פרמטרים

source: המקור שיש לבדוק, לדוגמה "cpu". זה חייב להיות אחד מסוגי המקורות הנתמכים.

בגרסה הנוכחית של לחץ Compute, יש תמיכה רק ב-"cpu".

PressureRecord

בממשק PressureRecord של Compute Pressure API מתוארת מגמת הלחץ של מקור ברגע ספציפי של מעבר.

מאפייני המכונה

PressureRecord.source (לקריאה בלבד): מחזירה מחרוזת שמייצגת את מקור המקור שממנו הרשומה מגיעה.

PressureRecord.state (לקריאה בלבד): מחזירה מחרוזת שמייצגת את מצב הלחץ שתועד.

PressureRecord.time (לקריאה בלבד): מחזירה מספר שמייצג חותמת זמן ברזולוציה גבוהה.

דוגמאות

החלקים הבאים מציגים דוגמאות לשימוש לדוגמה.

בדיקת התמיכה ב-API

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, של 2,000 אלפיות שנייה, תתבצע עדכונים לכל שתי שניות לכל היותר.

אם המערכת לא יכולה להציג את מרווח הדגימה המבוקש, המערכת תספק דגימות במרווח הזמן המתאים ביותר הקיים. לדוגמה, אם נדרש מרווח של 2,000 אלפיות השנייה, אבל המערכת יכולה לספק רק דגימות ב-1,000 אלפיות שנייה לכל היותר, ייבחרו 1,000 אלפיות שנייה.

כדי להפסיק לתעד מקור, משתמשים בשיטה 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);

משתפים משוב

האם יש משהו ב-API שלא פועל כצפוי? מצאתם שיטה או מאפיין חסרים לשימוש ב-API? דווחו על בעיה במפרט או הגיבו על בעיה קיימת במאגר GitHub המתאים.

דיווח על בעיה בהטמעה

האם מצאת באג בהטמעה של Chromium? או שההטמעה שונה מהמפרט? דווחו על באג בכתובת new.crbug.com. הקפידו לכלול כמה שיותר פרטים, הוראות לשחזור, ולהזין Blink>PerformanceAPIs>Compute Pressure בתיבה Components.

משאבים