Anúncio do segundo teste de origem da pressão do Compute

Kenneth Christiansen
Kenneth Christiansen
Arnaud (Arno) Mandy

No ano passado, a Intel colaborou com o Google e outras partes na API Compute Pressure. No Chrome 115, é possível se registrar para um teste de origem (link em inglês) para ajudar a testar essa nova API. Esta postagem explica os problemas que a API foi projetada para resolver e mostra como usá-la.

O problema

A Web está se tornando uma plataforma de aplicativos importante, com novos recursos que tornam aplicativos como videoconferência não apenas possíveis, mas uma experiência agradável para os usuários. As experiências baseadas na Web são carregadas instantaneamente, podem ser acessadas de qualquer lugar e não precisam de instalação antecipada.

Os usuários querem aplicativos responsivos e de carregamento rápido. Eles também querem aproveitar o máximo possível da duração da bateria e usar dispositivos silenciosos que não estão quentes ao tocar. Às vezes, pode ser difícil conseguir esses objetivos ao criar experiências avançadas, já que animações suaves e desfoque de vídeo em segundo plano usam muita capacidade de processamento, levando o hardware ao limite e consumindo baterias.

Além disso, há uma grande variedade de dispositivos usados para acessar aplicativos da Web. Um laptop de cinco anos tem recursos muito diferentes de um computador desktop novo, mesmo com a mesma versão do navegador.

Os desenvolvedores geralmente optam por desenvolver pelo menor denominador comum, evitando o uso de alguns recursos que sobrecarregariam dispositivos mais antigos ou menos capazes. No entanto, se foi possível otimizar a experiência para usuários que tenham equipamentos capacitados e estejam no ambiente certo para se beneficiar dela, por que não fazer isso? Por exemplo, ao participar de uma videochamada no seu smartphone, ver o alto-falante atual provavelmente é a melhor experiência. No entanto, em um computador, seria bom ver todos na chamada, e o hardware geralmente é suficiente. Para fazer isso, você precisa da telemetria de hardware em tempo real, sem sacrificar a privacidade dos usuários, que pode ser usada para programar tarefas e ativar e desativar recursos progressivamente para garantir uma boa experiência do usuário. É aqui que a API Compute Pressure pode ajudar.

O que é a API Compute Pressure?

A API Compute Pressure oferece estados de alto nível que representam a pressão no sistema. Esses estados de alto nível garantem um bom equilíbrio entre privacidade (não compartilhar muitas informações específicas que possam identificar um usuário) e informações que os desenvolvedores podem considerar facilmente. Além disso, 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.

As CPUs modernas, por exemplo, são projetadas para funcionar bem com 100% de utilização na maioria das situações, em um único núcleo ou em todos os núcleos. Dessa forma, uma API que fixa no código 80% de uso como essencial pode fazer com que os desenvolvedores subutilizem os recursos do hardware e ofereçam uma experiência do usuário abaixo do ideal. Por outro lado, um sistema pode não ter o resfriamento adequado ou a temperatura ambiente pode ser muito alta como no verão, e o sistema pode estar limitando até mesmo antes de atingir a alta utilização da CPU. A API atual funciona com a pressão global da CPU, mas planejamos testar a ativação da pressão da CPU por página na linha de execução principal e nos workers.

A pressão de computação tem os seguintes estados:

  • Nominais:as cargas de trabalho atuais estão causando pressão mínima, permitindo que o sistema seja executado em uma frequência do clock menor para economizar energia.
  • Justo:o sistema está indo bem, está tudo tranquilo e ele pode assumir outros trabalhos sem problemas.
  • Sério:há uma séria pressão no sistema, mas ele é gerenciável, e o sistema está indo bem, mas pode estar se aproximando do limite:
    • A velocidade do relógio (dependendo da fonte de alimentação CA ou CC) é consistentemente alta.
    • As térmicas são altas, mas ainda são gerenciáveis e não causam limitações.

Nesse ponto, se você adicionar mais trabalho, o sistema poderá entrar em um estado crítico.

  • Crítico:o sistema está prestes a atingir os limites, mas ainda não atingiu o limite. Crítico não significa que o sistema está sendo ativamente limitado, mas esse estado não é sustentável a longo prazo e pode resultar em limitação se a carga de trabalho permanecer a mesma. Esse sinal é a última chamada para que o aplicativo da Web diminua a carga de trabalho.

Ativar a API Compute Pressure

Por padrão, a API Compute Pressure não está ativada no Chrome, mas pode ser testada no Chrome 115 ativando explicitamente a funcionalidade. É possível ativá-lo localmente ativando a sinalização enable-experimental-web-platform-features.

Com o objetivo de ativá-lo para todos os visitantes do seu app, um teste de origem está em andamento e termina no Chrome 118 (18 de julho de 2023). Para participar do teste, inscreva-se e inclua um metaelemento com o token do teste de origem no cabeçalho HTML ou HTTP. Para saber mais, consulte a postagem Primeiros passos com testes de origem.

Observar a pressão de computação

O snippet de código a seguir ilustra como monitorar e agir em relação às mudanças de pressão de computação:

// The `records` parameter is a sequence of records between two
// consecutive callbacks. Currently it contains ten entries, but
// this is an implementation detail.
function callback(records) {
  const lastRecord = records.pop();
  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, {
  // Sample rate in Hertz.
  sampleRate: 1,
});
observer.observe('cpu');

O snippet de código a seguir ilustra como usar a API Compute Pressure em um iframe:

<iframe src="https://mysite.com/" allow="compute-pressure">
  <script>
    // Use Compute Pressure API.
  </script>
</iframe>

Suporte a plataformas

A API Compute Pressure está disponível no Chrome 115 no Linux, ChromeOS, macOS e Windows.

Demonstração

Confira a demonstração incorporada abaixo para entender como o estado da pressão de computação muda com base em alguma pressão artificial.

Caso seu navegador não ofereça suporte à API, o vídeo abaixo mostra uma gravação da demonstração.

Feedback

O feedback do desenvolvedor é muito importante nesta fase. Registre problemas no GitHub com sugestões e perguntas.

Agradecimentos

A imagem principal foi criada por Robert Anasch no Unsplash (link em inglês). Este artigo foi revisado por Rachel Andrew e Thomas Steiner.