Informe-se sobre a press�o de computa��o do sistema.
A API Compute Pressure oferece estados de alto n�vel que representam a press�o no sistema. Ele permite que a implementa��o use as m�tricas de hardware subjacentes corretas para garantir que os usu�rios possam aproveitar toda a capacidade de processamento dispon�vel, desde que o sistema n�o esteja sob estresse imposs�vel de gerenciar.
Status atual
Step | Status |
---|---|
1. Criar explica��o | Conclu�do |
2. Criar rascunho inicial da especifica��o | Conclu�do |
3. Reunir feedbacks e iterar no design | Em andamento |
4. Teste de origem | Completos |
5. Lan�amento | Conclu�do (Chrome 125) |
Testar a API Compute Pressure
Para testar a API Compute Pressure localmente, leia esta p�gina.
Registrar-se no teste de origem
No Chrome 115, a API Compute Pressure est� dispon�vel como um teste de origem. Ela deve terminar no Chrome 123 (29 de maio de 2024). Inscreva-se no teste de origem.
Casos de uso
Os principais casos de uso aprimorados pela API Compute Pressure atual s�o videoconfer�ncias e videogames.
Esses aplicativos conhecidos em tempo real s�o classificados como soft. Ou seja, a qualidade do servi�o diminui se o sistema for exercido al�m de determinados estados, mas n�o leva a uma falha total do sistema. Esses aplicativos flex�veis em tempo real se beneficiam muito da capacidade de adaptar as cargas de trabalho com base no consumo ou na press�o da CPU.
Especificamente, a primeira vers�o dessa API visa permitir as seguintes decis�es de adapta��o.
Videoconfer�ncias
- Ajuste o n�mero de feeds de v�deo mostrados simultaneamente durante chamadas com muitos participantes.
- Reduza a qualidade do processamento de v�deo (resolu��o de v�deo, quadros por segundo).
- Pule o processamento de v�deos n�o essenciais, como alguns filtros de c�mera.
- Desative o processamento de �udio n�o essencial, como a supress�o de ru�do WebRTC.
- Mude os bot�es de qualidade versus velocidade e tamanho versus velocidade em "velocidade" na codifica��o de v�deo e �udio (no WebRTC, WebCodecs ou codifica��o de software).
Videogames
- Use recursos de qualidade mais baixa para compor o v�deo (modelos 3D, texturas, sombreadores) e o �udio (vozes e efeitos sonoros) do jogo.
- Desative efeitos que resultem em detalhes n�o essenciais menos realistas, como �gua, pano, anima��es de fogo, lumin�ncia da pele, efeitos de reflexo ou simula��es f�sicas que n�o afetam a jogabilidade.
- Ajustes de qualidade versus velocidade no mecanismo de renderiza��o do jogo (qualidade de sombras, filtragem de textura e dist�ncia de visualiza��o).
Tecnicamente, isso pode ser feito sabendo os estados t�rmico (por exemplo, o sistema est� sendo resfriado passivamente) e os estados de press�o da CPU para a linha de execu��o principal e os workers que o site est� usando. O estado t�rmico do sistema � um estado global e pode ser afetado por apps e sites diferentes do local de observa��o.
Interfaces
A API Compute Pressure pode ser executada nos seguintes contextos:
- Linha de execu��o principal ou da janela
- Worker dedicado
- Worker compartilhado
A API Compute Pressure define duas novas interfaces.
PressureObserver
: um objeto para observar a press�o de computa��o de qualquer n�mero de
fontes em um intervalo de amostra predefinido. A primeira itera��o no Chromium exp�e
"cpu"
como source
. Consulte a se��o sobre par�metros para mais detalhes. Cada observador pode observar de maneira ass�ncrona as tend�ncias de mudan�as de press�o em um
sistema.
PressureRecord
: descreve a tend�ncia de press�o em um momento espec�fico de
transi��o. Objetos desse tipo s� podem ser recebidos de duas maneiras: como uma entrada
para o callback do PressureObserver ou chamando o m�todo takeRecords()
na
inst�ncia PressureObserver
.
PressureObserver
Quando um objeto PressureObserver
� criado, ele � configurado para monitorar a press�o das fontes com suporte em um determinado intervalo de amostragem. As fontes com suporte
podem ser observadas individualmente ou n�o a qualquer momento durante o ciclo de vida
do objeto PressureObserver
. N�o � poss�vel mudar o intervalo da amostra ap�s a cria��o do objeto.
Construtor
PressureObserver(callback)
: cria um novo objeto PressureObserver
que invoca
uma fun��o de callback especificada quando detecta que ocorreu uma mudan�a nos valores
da origem observada.
O construtor usa uma fun��o de callback obrigat�ria.
Chamada de retorno
callback()
: o callback � chamado com uma matriz de objetos PressureRecord
n�o lidos.
M�todos
PressureObserver.observe(source, options)
: informa ao "PressureObserver" qual
fonte deve ser observada e options
opcional, como par�metros.
Op��es
PressureObserverOptions
: cont�m o intervalo de amostra, sampleInterval
em milissegundos, em que o usu�rio solicita atualiza��es.
PressureObserver.unobserve(source)
: instrui o "PressureObserver" a parar
de observar uma fonte.
PressureObserver.disconnect()
: instrui o "PressureObserver" a parar de observar
todas as fontes.
PressureObserver.takeRecords()
: retorna uma sequ�ncia de registros, desde a �ltima invoca��o do callback.
static PressureObserver.knownSources()
(somente leitura): retorna os tipos de origem conhecidas
do user agent em ordem alfab�tica.
Par�metros
source
: a fonte a ser observada, por exemplo, "cpu"
. Precisa ser um dos
tipos de origem compat�veis.
Na vers�o atual do Compute Pressure, apenas "cpu"
� compat�vel.
PressureRecord
A interface PressureRecord
da API Compute Pressure descreve a
tend�ncia de press�o de uma fonte em um momento espec�fico de transi��o.
Propriedades da inst�ncia
PressureRecord.source
(somente leitura): retorna uma string que representa a fonte de origem do registro.
PressureRecord.state
(somente leitura): retorna uma string que representa o estado de press�o registrado.
PressureRecord.time
(somente leitura): retorna um n�mero que representa um carimbo de data/hora de alta resolu��o.
Exemplos
As se��es a seguir listam exemplos de uso exemplares.
Determinar o suporte � API
if ('PressureObserver' in globalThis) {
// The Compute Pressure API is supported.
}
Criar um observador de press�o
Crie o observador de press�o chamando o construtor com uma fun��o de callback a ser executada sempre que houver uma atualiza��o de press�o:
const observer = new PressureObserver((records) => {
/* ... */
});
Uso do observador de press�o
H� apenas uma maneira de iniciar um observador de press�o. Para cada chamada de origem, chame
observer.observe(source)
.
observer.observe("cpu" { sampleInterval: 2_000 });
Neste exemplo, "cpu"
� a fonte de press�o em que estamos interessados. No momento, � a �nica fonte dispon�vel. No futuro, pode haver outras fontes,
como "gpu"
, "power"
ou "thermals"
.
Um intervalo de amostra, sampleInterval
, de 2.000 ms significa que haver� atualiza��es a cada dois segundos, no m�ximo.
Se o intervalo de amostragem solicitado n�o puder ser atendido pelo sistema, ele fornecer� amostras no melhor intervalo adequado. Por exemplo, se um intervalo de 2.000 ms for solicitado, mas o sistema s� puder fornecer amostras de no m�ximo 1.000 ms, 1.000 ms ser�o selecionados.
Para deixar de observar uma origem, use o m�todo unobserve()
, como no exemplo
a seguir:
observer.unobserve('cpu');
Para deixar de observar todas as fontes de uma s� vez, use o m�todo disconnect()
, como no
exemplo abaixo:
observer.disconnect();
Recuperar registros de press�o
Os registros de press�o podem ser recuperados com uma fun��o de callback, que � invocada sempre que ocorre uma altera��o no estado de press�o.
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 });
O usu�rio tamb�m pode for�ar a leitura de PressureRecord
chamando o
m�todo takeRecords()
.
O m�todo takeRecords()
da interface PressureObserver
retorna uma matriz
de objetos PressureRecords
armazenados no observador de press�o, esvaziando-a.
O caso de uso mais comum para isso � buscar imediatamente todos os registros de press�o pendentes, ainda n�o processados pela fun��o de callback do observador, antes de desconectar o observador, para que todos os registros pendentes possam ser processados ao encerrar o observador.
Chamar esse m�todo limpa a lista de registros pendentes. Assim, o callback n�o ser� executado.
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);
Envie feedback
H� algo na API que n�o funciona como esperado? H� algum m�todo ou propriedade ausente para o uso da API? Registre um problema espec�fico ou comente sobre um problema existente no reposit�rio do GitHub correspondente.
Informar um problema com a implementa��o
Voc� encontrou um bug na implementa��o do Chromium? Ou a implementa��o � diferente da especifica��o? Registre um bug em new.crbug.com. Inclua o m�ximo de detalhes poss�vel, instru��es para reproduzir o problema e insira Blink>PerformanceAPIs>ComputePressure na caixa Componentes.
Recursos
- Especifica��es
- Explica��es p�blicas
- Demonstra��o da API Compute Pressure | Fonte da demonstra��o da API Compute Pressure
- Bug de rastreamento do Chromium
- Entrada ChromeStatus.com
- Componente Blink:
Blink>PerformanceAPIs>ComputePressure
- An�lise da TAG
- Pronto para teste
- p�gina TUTORIAL
- Inten��o de fazer experimentos