Ricevi informazioni sulla pressione di calcolo del tuo sistema.
L'API Compute Pressure offre stati di alto livello che rappresentano la pressione sul sistema. Consente all'implementazione di utilizzare le giuste metriche hardware di base per garantire che gli utenti possano sfruttare tutta la potenza di elaborazione a loro disposizione, purché il sistema non sia sotto stress ingestibile.
Stato attuale
Passaggio | Stato |
---|---|
1. Crea messaggio esplicativo | Completato |
2. Crea una bozza iniziale della specifica | Completato |
3. Raccogli feedback e ottimizza il design | In corso |
4. Prova dell'origine | Completo |
5. Lancio | Completata (Chrome 125) |
Prova l'API Compute Pressure
Per sperimentare con l'API Compute Pressure in locale, leggi questa pagina.
Registrati per la prova dell'origine
A partire da Chrome 115, l'API Compute Pressure è disponibile come prova dell'origine. Dovrebbe terminare con Chrome 123 (29 maggio 2024). Registrati qui.
Casi d'uso
I casi d'uso principali migliorati dall'attuale API Compute Pressure sono le videoconferenze e i videogiochi.
Queste popolari applicazioni in tempo reale sono classificate come soft. In altre parole, la qualità del servizio si deteriora se il sistema viene utilizzato al di fuori di determinati stati, ma non comporta un guasto totale del sistema. Queste applicazioni soft in tempo reale traggono grande vantaggio dalla capacità di adattare i carichi di lavoro in base al consumo o alla pressione della CPU.
In particolare, la prima versione di questa API mira a consentire le seguenti decisioni di adattamento.
Videoconferenze
- Regola il numero di feed video visualizzati contemporaneamente durante le chiamate con molti partecipanti.
- Ridurre la qualità dell'elaborazione video (risoluzione video, frame al secondo).
- Ignora l'elaborazione video non essenziale, ad esempio alcuni filtri della videocamera.
- Disattiva l'elaborazione audio non essenziale, come la soppressione del rumore WebRTC.
- Sposta le manopole qualita/velocità e dimensione/velocità verso la "velocità" nella codifica video e audio (in WebRTC, WebCodecs o codifica software).
Videogiochi
- Utilizza asset di qualità inferiore per comporre il video (modelli 3D, texture, mesh) e audio (voci, effetti sonori) del gioco.
- Disattiva gli effetti che generano dettagli non essenziali meno realistici (acqua, tessuti, animazioni di fuoco, luminanza della pelle, effetti di riflessi o simulazioni fisiche che non incidono sul gameplay).
- Modifica le manopole di qualità e velocità nel motore di rendering del gioco (qualità delle ombre, filtro delle texture, distanza di visualizzazione).
Tecnicamente, questi obiettivi possono essere raggiunti conoscendo gli stati di pressione della CPU (ad esempio, il sistema viene raffreddato passivamente) per il thread principale e i worker utilizzati dal sito. Lo stato termico del sistema è uno stato globale e può essere influenzato da app e siti diversi dal sito di osservazione.
Interfacce
L'API Compute Pressure può essere eseguita nei seguenti contesti:
- Finestra o thread principale
- Worker dedicato
- Worker condiviso
L'API Compute Pressure definisce due nuove interfacce.
PressureObserver
: un oggetto per osservare la pressione di calcolo di un numero qualsiasi di origini a un intervallo di campionamento predefinito. La prima iterazione in Chromium mostra "cpu"
come source
. Per ulteriori dettagli, consulta la sezione sui parametri. Ogni osservatore può osservare in modo asincrono
le tendenze dei cambiamenti di pressione in un sistema.
PressureRecord
: descrive la tendenza della pressione in un momento specifico di transizione. Gli oggetti di questo
tipo possono essere ottenuti solo in due modi: come input per il callback PressureObservationr o chiamando il
metodo takeRecords()
sull'istanza PressureObserver
.
PressureObserver
Quando viene creato un oggetto PressureObserver
, è configurato per osservare la pressione delle origini supportate, in un determinato intervallo di esempio. Le origini supportate possono essere osservate singolarmente o non osservate in qualsiasi momento durante il ciclo di vita dell'oggetto PressureObserver
. L'intervallo di esempio non può essere modificato
dopo la creazione dell'oggetto.
Costruttore
PressureObserver(callback, options)
: crea un nuovo oggetto PressureObserver
che richiama una funzione di callback specificata quando rileva che si è verificata una modifica nei valori dell'origine osservata.
Il costruttore prende come parametri una funzione di callback obbligatoria e opzioni facoltative.
Richiamata
callback()
: il callback viene chiamato con un array di oggetti PressureRecord
da leggere.
Opzioni
PressureObserverOptions
: contiene l'intervallo di campionamento, in millisecondi, sampleInterval
, con cui l'utente richiede gli aggiornamenti.
Metodi
PressureObserver.observe(source)
: indica a "PressureObservationr" la fonte da osservare.
PressureObserver.unobserve(source)
: comunica all'"PressureObservationr" di interrompere l'osservazione di una fonte.
PressureObserver.disconnect()
: dice a "PressureHighlightr" di interrompere l'osservazione di tutte le fonti.
PressureObserver.takeRecords()
: restituisce una sequenza di record, dall'ultima chiamata di callback.
static PressureObserver.supportedSources()
(sola lettura): restituisce i tipi di origine supportati dall'hardware.
Parametri
source
: la sorgente da osservare, ad esempio "cpu"
. Deve essere uno dei tipi di origine supportati.
Nella versione attuale di Compute Pressure, è supportato solo "cpu"
.
PressureRecord
L'interfaccia PressureRecord
dell'API Compute Pressure descrive l'andamento della pressione di una
fonte in un momento specifico della transizione.
Proprietà istanza
PressureRecord.source
(sola lettura): restituisce una stringa che rappresenta l'origine di origine da cui proviene il record.
PressureRecord.state
(sola lettura): restituisce una stringa che rappresenta lo stato di pressione registrato.
PressureRecord.time
(sola lettura): restituisce un numero che rappresenta un timestamp ad alta risoluzione.
Esempi
L'API Compute Pressure è supportata?
if ('PressureObserver' in globalThis) {
// The Compute Pressure API is supported.
}
Creare un osservatore della pressione
Crea l'osservatore della pressione chiamando il suo costruttore con una funzione di callback da eseguire ogni volta che si verifica un aggiornamento della pressione:
const observer = new PressureObserver(
(records) => { /* ... */ },
{ sampleInterval: 2000 }
);
Un intervallo di esempio, sampleInterval
, di 2000 ms, indica che ci saranno aggiornamenti al massimo ogni due secondi.
Se l'intervallo di campionamento richiesto non può essere fornito dal sistema. Il sistema fornirà i campioni all'intervallo migliore adeguato esistente. Ad esempio, se viene richiesto un intervallo di 2000 ms, ma il sistema può fornire campioni solo a un massimo di 1000 ms, verrà selezionato il valore 1000 ms.
Utilizzare un osservatore della pressione
C'è solo un modo per avviare un osservatore della pressione. Per ogni chiamata di origine
observer.observe(source)
.
observer.observe("cpu");
In questo esempio, "cpu"
è la fonte di pressione che ci interessa. Per il momento, è l'unica fonte disponibile. In futuro, potrebbero esserci altre origini, come "gpu"
, "power"
o "thermals"
.
Per interrompere l'osservazione di un'origine, usa il metodo unobserve()
, come nell'esempio seguente:
observer.unobserve("cpu");
Per non osservare tutte le origini contemporaneamente, utilizza il metodo disconnect()
, come nell'esempio seguente:
observer.disconnect();
Recupero dei dati sulle pressioni
I record di pressione possono essere recuperati con una funzione di callback, che viene richiamata ogni volta che viene apportata una modifica allo stato di pressione.
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");
L'utente può anche forzare la lettura di PressureRecord
chiamando il metodo takeRecords()
.
Il metodo takeRecords()
dell'interfaccia PressureObserver
restituisce un array di
PressureRecords
oggetti archiviati nell'osservatore della pressione, svuotandolo.
Il caso d'uso più comune è il recupero immediato di tutti i record di pressione in sospeso, non ancora elaborati dalla funzione di callback dell'osservatore, prima di disconnettere l'osservatore, in modo che eventuali record in sospeso possano essere elaborati quando si arresta l'osservatore.
La chiamata a questo metodo cancella l'elenco dei record in sospeso, quindi il callback non verrà eseguito.
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);
Parlaci della progettazione dell'API
C'è qualcosa nell'API che non funziona come previsto? Vedi qualche metodo o proprietà mancante per il tuo utilizzo dell'API? Registra un problema di specifica o commentane uno esistente nel repository GitHub corrispondente.
Segnala un problema con l'implementazione
Hai trovato un bug nell'implementazione di Chromium? Oppure l'implementazione è diversa dalle specifiche? Segnala un bug all'indirizzo new.crbug.com. Assicurati di includere il maggior numero di dettagli possibile, semplici istruzioni per la riproduzione e inserisci Blink>PerformanceAPIs>ComputePressure nella casella Componenti.