Ricevi informazioni sulla pressione di calcolo del sistema.
L'API Compute Pressure offre stati di alto livello che rappresentano la pressione sul sistema. Consente all'implementazione di utilizzare le metriche hardware di base corrette per garantire che gli utenti possano sfruttare tutta la potenza di elaborazione a loro disposizione, a condizione che il sistema non sia sottoposto a uno stress incontrollabile.
Stato attuale
Passaggio | Stato |
---|---|
1. Creare un video esplicativo | Completato |
2. Creare una bozza iniziale della specifica | Completato |
3. Raccogli feedback e esegui l'iterazione sul design | In corso |
4. Prova dell'origine | Completa |
5. Lancio | Completato (Chrome 125) |
Prova l'API Compute Pressure
Per eseguire esperimenti con l'API Compute Pressure a livello 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 in Chrome 123 (29 maggio 2024). Registrati per la prova dell'origine.
Casi d'uso
I casi d'uso principali migliorati dall'attuale API Compute Pressure sono le videoconferenze e i videogiochi.
Queste applicazioni in tempo reale molto diffuse sono classificate come soft. In altre parole, la qualità del servizio peggiora se il sistema viene utilizzato oltre determinati stati, ma non comporta un guasto totale del sistema. Queste applicazioni in tempo reale graduali beneficiano notevolmente della possibilità di adattare i loro carichi di lavoro in base al consumo o alla pressione della CPU.
Nello specifico, la prima versione di questa API ha lo scopo di abilitare le seguenti decisioni di adattamento.
Videoconferenze
- Modificare il numero di feed video visualizzati contemporaneamente durante le chiamate con molti partecipanti.
- Riduci la qualità dell'elaborazione video (risoluzione video, frame al secondo).
- Salta l'elaborazione video non essenziale, ad esempio alcuni filtri della fotocamera.
- Disattiva l'elaborazione audio non essenziale, ad esempio la soppressione del rumore WebRTC.
- Regola i cursori della qualità rispetto alla velocità e delle dimensioni rispetto alla velocità in direzione di "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, shader) e l'audio (voci, effetti sonori) del gioco.
- Disattiva gli effetti che rendono meno realistici i dettagli non essenziali (acqua, vestiti, animazioni di fuochi, illuminazione della pelle, effetti di abbagliamento o simulazioni fisiche che non influiscono sul gameplay).
- Modifica i parametri di qualità e velocità nel motore di rendering del gioco (qualità delle ombre, filtri delle texture, distanza di visualizzazione).
Tecnicamente, questi obiettivi possono essere raggiunti conoscendo gli stati termici (ad esempio se il sistema è raffreddato passivamente) e di pressione della CPU 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
sorgenti a un intervallo di campionamento predefinito. La prima iterazione in Chromium espone
"cpu"
come source
. Per ulteriori dettagli, consulta la sezione sui parametri. Ogni osservatore può osservare in modo asincrono le tendenze delle variazioni di pressione in un sistema.
PressureRecord
: descrive la tendenza della pressione in un determinato momento della transizione. Gli oggetti di questo tipo possono essere ottenuti solo in due modi: come input al callback PressureObserver o chiamando il metodo takeRecords()
sull'istanza PressureObserver
.
PressureObserver
Quando viene creato un oggetto PressureObserver
, viene configurato per monitorare la pressione delle sorgenti supportate a un determinato intervallo di campionamento. Le origini supportate
possono essere osservate o non osservate singolarmente in qualsiasi momento durante la vita dell'oggetto PressureObserver
. L'intervallo di campionamento non può essere modificato dopo la
creazione dell'oggetto.
Costruttore
PressureObserver(callback)
: crea un nuovo oggetto PressureObserver
che invoca una funzione di callback specificata quando rileva una variazione dei valori della sorgente osservata.
Il costruttore accetta una funzione di callback obbligatoria.
Richiamata
callback()
: il callback viene chiamato con un array di oggetti PressureRecord
da leggere.
Metodi
PressureObserver.observe(source, options)
: indica a "PressureObserver" quale fonte osservare e options
facoltativo, come parametri.
Opzioni
PressureObserverOptions
: contiene l'intervallo di campionamento, sampleInterval
in
millisecondi, a cui l'utente richiede gli aggiornamenti.
PressureObserver.unobserve(source)
: indica a "PressureObserver" di interrompere
l'osservazione di una sorgente.
PressureObserver.disconnect()
: indica a "PressureObserver" di interrompere l'osservazione di tutte le sorgenti.
PressureObserver.takeRecords()
: restituisce una sequenza di record,
dall'ultima chiamata del callback.
static PressureObserver.knownSources()
(sola lettura): restituisce i tipi di origine
noti dell'agente utente in ordine alfabetico.
Parametri
source
: l'origine da osservare, ad esempio "cpu"
. Deve essere uno dei
tipi di origine supportati.
Nella versione corrente di Compute Pressure, è supportato solo "cpu"
.
PressureRecord
L'interfaccia PressureRecord
dell'API Compute Pressure descrive la tendenza della pressione di un'origine in un determinato momento di transizione.
Proprietà istanza
PressureRecord.source
(sola lettura): restituisce una stringa che rappresenta la fonte di origine da cui proviene il record.
PressureRecord.state
(sola lettura): restituisce una stringa che rappresenta lo stato della pressione registrato.
PressureRecord.time
(sola lettura): restituisce un numero che rappresenta un timestamp ad alta risoluzione.
Esempi
Le sezioni seguenti elencano esempi di utilizzo.
Determinare il supporto dell'API
if ('PressureObserver' in globalThis) {
// The Compute Pressure API is supported.
}
Crea un osservatore della pressione
Crea l'osservatore della pressione chiamando il relativo costruttore con una funzione di callback da eseguire ogni volta che viene eseguito un aggiornamento della pressione:
const observer = new PressureObserver((records) => {
/* ... */
});
Utilizzo dell'osservatore della pressione
Esiste un solo modo per avviare un osservatore della pressione. Per ogni chiamata di origine
observer.observe(source)
.
observer.observe("cpu" { sampleInterval: 2_000 });
In questo esempio, "cpu"
è la sorgente di pressione che ci interessa. Per ora, è l'unica fonte disponibile. In futuro, potrebbero essere disponibili altre origini, come "gpu"
, "power"
o "thermals"
.
Un intervallo di campionamento, sampleInterval
, di 2000 ms indica che ci saranno aggiornamenti al massimo ogni due secondi.
Se l'intervallo di campioni richiesto non può essere fornito dal sistema, il sistema fornirà i campioni con l'intervallo più adatto esistente. Ad esempio, se viene richiesto un intervallo di 2000 ms, ma il sistema può fornire campioni solo con un massimo di 1000 ms, verranno selezionati 1000 ms.
Per interrompere l'osservazione di un'origine, utilizza il metodo unobserve()
, come nell'esempio seguente:
observer.unobserve('cpu');
Per annullare l'osservazione di tutte le origini contemporaneamente, utilizza il metodo disconnect()
, come nell'esempio seguente:
observer.disconnect();
Recuperare i record della pressione
I record della pressione possono essere recuperati con una funzione di callback, che verrà invocata ogni volta che si verifica una modifica dello stato della 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);
await observer.observe('cpu', { sampleInterval: 1_000 });
L'utente può anche forzare la lettura di PressureRecord
chiamando il metodo
takeRecords()
.
Il metodo takeRecords()
dell'interfaccia PressureObserver
restituisce un array di oggetti PressureRecords
memorizzati nell'osservatore della pressione, svuotandolo.
Il caso d'uso più comune è recuperare immediatamente tutti i record di pressione in attesa, non ancora elaborati dalla funzione di callback dell'osservatore, prima di scollegare l'osservatore, in modo che eventuali record in attesa possano essere elaborati al momento dell'arresto dell'osservatore.
La chiamata a questo metodo cancella l'elenco dei record in attesa, pertanto il callback non verrà eseguito.
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);
Condividi il tuo feedback
C'è qualcosa nell'API che non funziona come previsto? Noti metodi o proprietà mancanti per l'utilizzo dell'API? Invia una segnalazione relativa alle specifiche o commenta una esistente nel repository GitHub corrispondente.
Segnalare un problema con l'implementazione
Hai trovato un bug nell'implementazione di Chromium? Oppure l'implementazione è diversa dalla specifica? Invia un bug all'indirizzo new.crbug.com. Assicurati di includere il maggior numero di dettagli possibile, le istruzioni per la riproduzione e inserisci Blink>PerformanceAPIs>ComputePressure nella casella Componenti.
Risorse
- Specifiche
- Spiegazione pubblica
- Demo dell'API Compute Pressure | Fonte della demo dell'API Compute Pressure
- Bug di monitoraggio di Chromium
- Voce di ChromeStatus.com
- Componente lampeggiante:
Blink>PerformanceAPIs>ComputePressure
- Revisione del TAG
- Pronto per la prova
- Pagina HOWTO
- Intento di partecipare all'esperimento