Um dos problemas mais difíceis para os desenvolvedores de apps é criar animações suaves e sem falhas. Isso é especialmente difícil de depurar quando o sistema também está realizando tarefas em segundo plano que consomem muitos recursos. Pode ser difícil determinar se uma falha é causada pelo app ou pelo sistema. No entanto, uma ferramenta de criação de perfil pode ajudar a identificar a possível origem do mau comportamento.
Renderizar no ChromeOS
Um app bem ajustado, como um jogo, geralmente usa buffer duplo para manter o menor tempo de resposta do usuário possível. Ainda assim, há muitos fatores que podem prejudicar o desempenho. Por exemplo, se a renderização de um frame demorar muito, o resultado não estará pronto para a próxima troca de buffer, e o frame anterior será repetido.
Então, o renderizador não poderá começar a processar o frame seguinte, causando ainda mais problemas. Esse cenário é bastante conhecido para os desenvolvedores de dispositivos móveis Android. Quando um app é executado no ChromeOS, o contexto fica ainda mais complexo.
Um app em execução no computador não é renderizado diretamente no frame de exibição da tela. Em vez disso, os dados são renderizados em uma textura. Normalmente, há vários apps, sendo que cada um renderiza os próprios elementos gráficos em uma textura. O sistema constrói a visualização na tela usando um compositor para combinar todas as texturas em uma única imagem no computador.
O compositor funciona de maneira transparente em segundo plano, mas introduz um atraso no tempo para a renderização do frame a fim de maximizar o uso do pipeline da GPU. Esse atraso suaviza as flutuações de desempenho do sistema e ajuda a equilibrar uma carga assimétrica.
Quando o SO trabalha muito, a GPU pode ficar sobrecarregada, causando um atraso entre o momento em que um frame é renderizado e o momento em que ele aparece na tela. Dependendo do hardware, o sistema pode usar um buffer quádruplo para compensar esse cenário. Mesmo com o armazenamento em buffer mais profundo, o pipeline gráfico ainda pode falhar.
ARC graphics tracer
O ChromeOS tem uma ferramenta de criação de perfil que mostra como os buffers passam pelo sistema, quando ocorrem trocas de memória, qual é o nível de ocupação da CPU/GPU e o que seu aplicativo está fazendo em determinado momento, conforme mostrado na imagem a seguir:
Configurar o criador de perfil
Para usar o criador de perfil, execute o M75 ou mais recente. Para melhores resultados, use um dispositivo Intel.
Antes de usar o criador de perfil, propague seu app com rastros.
Adicione Trace.traceCounter(Trace.TRACE_TAG_GRAPHICS, "Event", <number>); ao seu código
sempre que quiser incluir um rastro. Use um Event que comece com
o prefixo customTrace. O prefixo não aparece na mensagem de rastreamento.
Para configurar o criador de perfil, siga estas etapas:
- Ative o modo de desenvolvedor.
- Ative as configurações do Chrome e a ferramenta de visualização de buffers gráficos do ARC.
- Navegue para
chrome://arc-graphics-tracing.
Executar o criador de perfil
- Selecione Parar em falha.
- Execute o app para Android.
- Quando o app para Android estiver ativo e com foco, pressione
Control+Shift+G.
Quando um problema ocorre, uma janela do navegador aparece. Use as teclas W e S para ampliar e reduzir a linha do tempo.