Informieren Sie sich über die Rechenleistung Ihres Systems.
Die Compute Pressure API bietet allgemeine Status, die die Belastung des Systems darstellen. Die Implementierung ermöglicht die Verwendung der richtigen zugrunde liegenden Hardwaremesswerte, um sicherzustellen, dass die Nutzer die gesamte ihnen zur Verfügung stehende Rechenleistung nutzen können, solange das System nicht unter unüberschaubarer Belastung steht.
Aktueller Status
Step | Status |
---|---|
1. Erklärende Erklärung erstellen | Abschließen |
2. Ersten Entwurf der Spezifikation erstellen | Abschließen |
3. Feedback einholen und Design iterieren | In Bearbeitung |
4. Ursprungstest | Abschließen |
5. Launch | Abgeschlossen (Chrome 125) |
Compute Pressure API testen
Informationen zum lokalen Experimentieren mit der Compute Pressure API finden Sie auf dieser Seite.
Für Ursprungstest registrieren
Ab Chrome 115 ist die Compute Pressure API als Ursprungstest verfügbar. Es wird voraussichtlich in Chrome 123 (29. Mai 2024) enden. Registrieren Sie sich für den Ursprungstest.
Anwendungsfälle
Die wichtigsten Anwendungsfälle, die durch die aktuelle Compute Pressure API verbessert werden, sind Videokonferenzen und Videospiele.
Diese beliebten Echtzeitanwendungen werden als Soft-Apps eingestuft. Das heißt, die Dienstqualität verschlechtert sich, wenn das System über bestimmte Status hinaus ausgelastet wird, dies aber nicht zu einem vollständigen Systemausfall führt. Diese Soft-Real-Time-Anwendungen profitieren erheblich davon, dass sie ihre Arbeitslasten auf der Grundlage von CPU-Verbrauch oder CPU-Auslastung anpassen können.
Konkret zielt die erste Version dieser API darauf ab, die folgenden Anpassungsentscheidungen zu ermöglichen.
Videokonferenzsysteme
- Passe die Anzahl der Videofeeds an, die während eines Anrufs mit vielen Teilnehmern gleichzeitig angezeigt werden.
- Verringere die Qualität der Videoverarbeitung (Videoauflösung, Bilder pro Sekunde).
- Überspringen Sie die Videoverarbeitung, die nicht notwendig ist, z. B. einige Kamerafilter.
- Deaktiviere die grundlegende Audioverarbeitung, z. B. die WebRTC-Rauschunterdrückung.
- Drehen Sie die Schieberegler für Qualität und Geschwindigkeit in Richtung „Geschwindigkeit“ bei der Video- und Audiocodierung (in WebRTC, WebCodecs oder Softwarecodierung).
Videospiele
- Verwenden Sie Assets in geringerer Qualität, um das Video (3D-Modelle, Texturen, Shader) und Audioinhalte (Stimmen, Soundeffekte) des Spiels zusammenzustellen.
- Deaktivieren Sie Effekte, die zu weniger realistischen, nicht wesentlichen Details führen (Wasser, Stoff, Feueranimationen, Hautleuchtigkeit, Blendeffekte oder physische Simulationen, die sich nicht auf das Spiel auswirken).
- Passen Sie die Steuerelemente für Qualität im Vergleich zur Geschwindigkeit in der Rendering-Engine des Spiels an (Schattenqualität, Texturfilterung, Ansichtsentfernung).
Technisch gesehen kann dies durch die Kenntnis von Temperaturzuständen (z. B. ob das System passiv gekühlt wird) und CPU-Druckstatus für den Hauptthread und die Worker, die von der Website verwendet werden, erreicht werden. Der thermische Zustand des Systems ist ein globaler Zustand, der von anderen Apps und Websites als der überwachenden Website beeinflusst werden kann.
Interfaces
Die Compute Pressure API kann in den folgenden Kontexten ausgeführt werden:
- Fenster oder Hauptthread
- Engagierte Mitarbeiter
- Shared Worker
Die Compute Pressure API definiert zwei neue Schnittstellen.
PressureObserver
: Ein Objekt, das die Auslastung einer beliebigen Anzahl von Quellen in einem vordefinierten Stichprobenintervall beobachtet. Beim ersten Durchlauf in Chromium wird "cpu"
als source
verfügbar gemacht. Weitere Informationen finden Sie im Abschnitt zu Parametern. Jeder Beobachter kann asynchron Druckänderungen in einem System beobachten.
PressureRecord
: Beschreibt den Drucktrend an einem bestimmten Zeitpunkt des Übergangs. Objekte dieses Typs können nur auf zwei Arten abgerufen werden: als Eingabe in den PressureObserver-Callback oder durch Aufrufen der Methode takeRecords()
auf der Instanz PressureObserver
.
PressureObserver
Wenn ein PressureObserver
-Objekt erstellt wird, ist es so konfiguriert, dass es die Auslastung unterstützter Quellen in einem bestimmten Stichprobenintervall überwacht. Die unterstützten Quellen können während der Lebensdauer des PressureObserver
-Objekts jederzeit einzeln oder unbeobachtet beobachtet werden. Das Stichprobenintervall kann nach dem Erstellen des Objekts nicht mehr geändert werden.
Konstruktor
PressureObserver(callback)
: Erstellt ein neues PressureObserver
-Objekt, das eine angegebene Callback-Funktion auslöst, wenn eine Änderung der Werte der beobachteten Quelle erkannt wird.
Der Konstruktor verwendet eine obligatorische Callback-Funktion.
Rückruf
callback()
: Der Callback wird mit einem Array ungelesener PressureRecord
-Objekte aufgerufen.
Methoden
PressureObserver.observe(source, options)
: Teilt dem „PressureObserver“ mit, welche Quelle beobachtet werden soll, und optional options
als Parameter.
Optionen
PressureObserverOptions
enthält das Beispielintervall sampleInterval
in Millisekunden, in dem der Nutzer Aktualisierungen anfordert.
PressureObserver.unobserve(source)
: Weist den „PressureObserver“ an, die Beobachtung einer Quelle zu beenden.
PressureObserver.disconnect()
: Weist den „PressureObserver“ an, keine Quellen mehr zu beobachten.
PressureObserver.takeRecords()
: gibt eine Folge von Datensätzen seit dem letzten Callback-Aufruf zurück.
static PressureObserver.knownSources()
(schreibgeschützt): Gibt die bekannten Quelltypen des User-Agents in alphabetischer Reihenfolge zurück.
Parameter
source
: Die zu beobachtende Quelle, z. B. "cpu"
. Dies muss einer der unterstützten Quelltypen sein.
In der aktuellen Version von Compute Pressure wird nur "cpu"
unterstützt.
PressureRecord
Die PressureRecord
-Schnittstelle der Compute Pressure API beschreibt den Drucktrend einer Quelle zu einem bestimmten Zeitpunkt des Übergangs.
Instanzeigenschaften
PressureRecord.source
(schreibgeschützt): Gibt einen String zurück, der die Ursprungsquelle darstellt, aus der der Datensatz stammt.
PressureRecord.state
(schreibgeschützt): Gibt einen String zurück, der den aufgezeichneten Druckstatus darstellt.
PressureRecord.time
(schreibgeschützt): Gibt eine Zahl zurück, die einen Zeitstempel mit hoher Auflösung darstellt.
Beispiele
In den folgenden Abschnitten finden Sie beispielhafte Anwendungsbeispiele.
API-Unterstützung bestimmen
if ('PressureObserver' in globalThis) {
// The Compute Pressure API is supported.
}
Druckbeobachter erstellen
Erstellen Sie den Auslastungsbeobachter, indem Sie dessen Konstruktor mit einer Callback-Funktion aufrufen, die bei einem Auslastungsupdate ausgeführt wird:
const observer = new PressureObserver((records) => {
/* ... */
});
Verwendung des Druckbeobachters
Es gibt nur eine Möglichkeit, einen Druckbeobachter zu starten. Rufen Sie für jede Quelle observer.observe(source)
auf.
observer.observe("cpu" { sampleInterval: 2_000 });
In diesem Beispiel ist "cpu"
die Druckquelle, an der wir interessiert sind. Derzeit ist es die einzige verfügbare Quelle. In Zukunft wird es möglicherweise weitere Quellen wie "gpu"
, "power"
oder "thermals"
geben.
Ein Stichprobenintervall sampleInterval
von 2.000 ms bedeutet, dass höchstens alle zwei Sekunden Updates erfolgen.
Wenn das angeforderte Stichprobenintervall nicht vom System bereitgestellt werden kann, stellt das System Stichproben mit dem am besten geeigneten Intervall bereit. Wenn beispielsweise ein Intervall von 2.000 ms angefordert wird, das System aber nur Stichproben mit maximal 1.000 ms bereitstellen kann, werden 1.000 ms ausgewählt.
Wenn Sie eine Quelle nicht mehr beobachten möchten, verwenden Sie die Methode unobserve()
wie im folgenden Beispiel:
observer.unobserve('cpu');
Wenn Sie die Beobachtung aller Quellen gleichzeitig aufheben möchten, verwenden Sie die Methode disconnect()
wie im folgenden Beispiel:
observer.disconnect();
Belastungsdaten abrufen
Druckdatensätze können mit einer Callback-Funktion abgerufen werden, die jedes Mal aufgerufen wird, wenn eine Änderung des Druckstatus erfolgt.
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 });
Der Nutzer kann das Lesen von PressureRecord
auch erzwingen, indem er die Methode takeRecords()
aufruft.
Die Methode takeRecords()
der PressureObserver
-Schnittstelle gibt ein Array mit PressureRecords
-Objekten zurück, die im Druckbeobachter gespeichert sind, und leert ihn.
Der häufigste Anwendungsfall dafür besteht darin, vor dem Trennen des Beobachters sofort alle ausstehenden Druckdatensätze abzurufen, die noch nicht von der Callback-Funktion des Beobachters verarbeitet wurden, damit alle ausstehenden Datensätze beim Herunterfahren des Beobachters verarbeitet werden können.
Durch den Aufruf dieser Methode wird die Liste der ausstehenden Einträge gelöscht, sodass der Callback nicht ausgeführt wird.
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);
Feedback geben
Gibt es etwas an der API, das nicht wie erwartet funktioniert? Fehlt eine Methode oder Eigenschaft für die Nutzung der API? Melden Sie ein Spezifikationsproblem oder kommentieren Sie ein vorhandenes Problem im entsprechenden GitHub-Repository.
Problem mit der Implementierung melden
Haben Sie einen Fehler bei der Implementierung von Chromium gefunden? Oder unterscheidet sich die Implementierung von der Spezifikation? Melden Sie einen Fehler unter new.crbug.com. Geben Sie so viele Details wie möglich und Anweisungen zum Reproduzieren an und geben Sie Blink>PerformanceAPIs>ComputePressure in das Feld Components ein.
Ressourcen
- Spezifikationen
- Öffentliche Erklärung
- Demoquelle zur Compute Pressure API | Demoquelle zur Compute Pressure API
- Chromium-Tracking-Programmfehler
- ChromeStatus.com-Eintrag
- Blink-Komponente:
Blink>PerformanceAPIs>ComputePressure
- TAG-Überprüfung
- Bereit für den Testzeitraum
- HOWTO-Seite
- Experimentierfreude