מקבלים מידע על עומס המחשוב במערכת.
ב-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 הנוכחי הם שיחות ועידה בווידאו ומשחקי וידאו.
האפליקציות הפופולריות האלה בזמן אמת מסווגות כרך. כלומר, איכות השירות פוחתת אם המערכת מופעלת מעבר למצבים מסוימים, אבל היא לא מובילה לכשל מוחלט במערכת. לאפליקציות האלה בזמן אמת רך יש יתרון משמעותי ביכולת להתאים את עומסי העבודה שלהן על סמך צריכת המעבד או הלחץ עליו.
באופן ספציפי, הגרסה הראשונה של ה-API הזה נועדה לאפשר את החלטות ההתאמה הבאות.
שיחת ועידה בווידאו
- לשנות את מספר פידים של וידאו שמוצגים בו-זמנית במהלך שיחות עם הרבה משתתפים.
- הפחתת האיכות של עיבוד הווידאו (רזולוציית הווידאו, פריימים לשנייה).
- דילוג על עיבוד סרטונים לא חיוני, כמו מסננים מסוימים במצלמה.
- להשבית עיבוד אודיו לא חיוני, כמו דיכוי רעשים של WebRTC.
- מסובבים את הלחצנים של איכות לעומת מהירות ושל גודל לעומת מהירות לכיוון 'מהירות' בקידוד וידאו ואודיו (ב-WebRTC, ב-WebCodecs או בקידוד תוכנה).
משחקי וידאו
- כדאי להשתמש בנכסים באיכות נמוכה יותר כדי ליצור את הווידאו (מודלים תלת-ממדיים, טקסטורות, שגיאות) והאודיו (קולות, אפקטים קוליים) של המשחק.
- משביתים אפקטים שמובילים לפרטים לא חיוניים פחות מציאותיים (מים, בדים, אנימציות של אש, בהירות עור, אפקטים של בוהק או סימולציות פיזיות שלא משפיעות על משחקיות).
- משנים את הלחצנים של איכות לעומת מהירות במנוע ה-rendering של המשחק (איכות הצללים, סינון הטקסטורות, מרחק התצוגה).
מבחינה טכנית, אפשר להשיג את המטרות האלה על ידי ידע לגבי מצבי הלחץ התרמי (לדוגמה, האם המערכת מקבלת קירור פסיבי) והלחץ על המעבד (CPU) של הליבה הראשית ושל משימות העבודה שבהן האתר משתמש. המצב התרמי של המערכת הוא מצב גלובלי, ויכול להיות שהוא יושפע מאפליקציות ומאתרים שאינם האתר שנמצא במעקב.
ממשקים
אפשר להריץ את Compute Pressure API בהקשרים הבאים:
- חלון או thread ראשי
- עובד ייעודי
- עובד משותף
ב-Compute Pressure API מוגדרים שני ממשקים חדשים.
PressureObserver
: אובייקט למעקב אחרי עומס המחשוב של מספר כלשהו של מקורות במרווח דגימה מוגדר מראש. האיטרציה הראשונה ב-Chromium חושפת את "cpu"
בתור source
. פרטים נוספים זמינים בקטע פרמטרים. כל משתמש יכול לצפות באופן אסינכרוני במגמות של שינויים בלחץ במערכת.
PressureRecord
: מתאר את מגמת הלחץ ברגע ספציפי של מעבר. אפשר לקבל אובייקטים מהסוג הזה רק בשתי דרכים: כקלט ל-callback של PressureObserver או על ידי קריאה לשיטה takeRecords()
במופע PressureObserver
.
PressureObserver
כשיוצרים אובייקט PressureObserver
, הוא מוגדר לעקוב אחרי הלחץ של מקורות נתמכים, במרווח דגימה נתון. אפשר לצפות במקורות הנתמכים בנפרד או להפסיק לצפות בהם בכל שלב במהלך חיי האובייקט PressureObserver
. אי אפשר לשנות את מרווח הדגימה אחרי יצירת האובייקט.
יצרן
PressureObserver(callback)
: יצירת אובייקט PressureObserver
חדש שיפעיל פונקציית קריאה חוזרת (callback) מסוימת כשיתבצע שינוי בערכים של המקור שנמצא במעקב.
ה-constructor מקבל פונקציית callback חובה.
התקשרות חזרה
callback()
: פונקציית ה-callback נקראת עם מערך של אובייקטים מסוג PressureRecord
שלא נקראו.
Methods
PressureObserver.observe(source, options)
: מגדיר ל-PressureObserver איזה מקור צריך לעקוב אחריו, וגם את הפרמטר האופציונלי options
.
אפשרויות
PressureObserverOptions
: מכיל את מרווח הדגימה, sampleInterval
באלפיות שנייה, שבו המשתמש מבקש עדכונים.
PressureObserver.unobserve(source)
: הפקודה הזו מורה ל-PressureObserver להפסיק לעקוב אחרי מקור.
PressureObserver.disconnect()
: הפקודה הזו מורה ל-'PressureObserver' להפסיק לעקוב אחרי כל המקורות.
PressureObserver.takeRecords()
: הפונקציה מחזירה רצף של רשומות, מאז ההפעלה האחרונה של הפונקציה החוזרת.
static PressureObserver.knownSources()
(לקריאה בלבד): החזרת סוגי המקור הידועים של סוכן המשתמש בסדר אלפביתי.
פרמטרים
source
: המקור שרוצים לעקוב אחריו, לדוגמה "cpu"
. הערך הזה חייב להיות אחד מסוגי המקור הנתמכים.
בגרסה הנוכחית של Compute Pressure יש תמיכה רק ב-"cpu"
.
PressureRecord
הממשק PressureRecord
של Compute Pressure API מתאר את מגמת הלחץ של מקור מסוים ברגע מעבר ספציפי.
מאפייני המכונה
PressureRecord.source
(לקריאה בלבד): מחזירה מחרוזת שמייצגת את מקור המקור שממנו מגיעה הרשומה.
PressureRecord.state
(לקריאה בלבד): מחזירה מחרוזת שמייצגת את מצב הלחץ שנרשם.
PressureRecord.time
(לקריאה בלבד): מחזירה מספר שמייצג חותמת זמן ברזולוציה גבוהה.
דוגמאות
בקטעים הבאים מפורטות דוגמאות לדוגמה לשימוש.
בדיקת התמיכה ב-API
if ('PressureObserver' in globalThis) {
// The Compute Pressure API is supported.
}
יצירת משתנה למעקב אחרי לחץ
יוצרים את משתנה הצפייה בלחץ על ידי קריאה ל-constructor שלו עם פונקציית קריאה חוזרת שתופעל בכל פעם שיש עדכון של לחץ:
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();
אחזור של רשומות לחץ
אפשר לאחזר רשומות של לחץ באמצעות פונקציית קריאה חוזרת (callback), שתופעל בכל פעם שמתבצע שינוי במצב הלחץ.
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
שמאוחסנים במעקב אחר הלחץ, ומתרוקנת אותו.
התרחיש הנפוץ ביותר לשימוש באפשרות הזו הוא אחזור מיידי של כל רשומות הלחץ בהמתנה, שעדיין לא עברו עיבוד על ידי פונקציית ה-callback של המתבונן, לפני ניתוק המתבונן, כדי שאפשר יהיה לעבד את כל הרשומות בהמתנה בזמן השבתת המתבונן.
קריאה ל-method הזה מנקה את רשימת הרשומות בהמתנה, כך שהקריאה החוזרת לא תופעל.
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>ComputePressure בתיבה Components.