Estimar os tempos de processamento de frames da CPU e da GPU (tempos de frame) é essencial para entender a performance do app e localizar gargalos. Ao criar o perfil de um app com o AGI, o System Profiler fornece dados de trace que podem ser usados para estimar os tempos de frame.
Tempos de CPU
No AGI, é possível conferir os tempos de frame totais e ativos da CPU na faixa da CPU de um perfil do sistema.
Tempo de CPU total
Para medir o tempo total gasto da CPU,
selecione o período
que inclui o tempo entre eventos de envio de frames sucessivos. Os eventos de envio de frames são eglSwapBuffers (para OpenGL) e vkQueuePresentKHR (para Vulkan).
eglSwapBuffer.
vkQueuePresentKHR.Essa medição é uma estimativa do tempo total da CPU,mas não representa necessariamente o tempo ativo da CPU. Por exemplo, em apps vinculados à GPU, a CPU pode aguardar a conclusão do trabalho da GPU antes de enviar um novo frame. Isso geralmente acontece quando um evento dequeueBuffer, eglSwapBuffer (para OpenGL) ou vkQueuePresent (para Vulkan) ocupa uma grande parte do tempo da CPU.
O tempo de espera é incluído no tempo total da CPU, mas não no tempo ativo da CPU.
dequeueBuffer e eglSwapBuffer eventos.
Tempo ativo da CPU
O tempo ativo da CPU determina quando a CPU está executando o código do app sem estar em estado ocioso.
Para medir o tempo ativo da CPU, confira as fatias Em execução logo acima dos eventos da CPU. Conte todas as partes do trace entre os dois eventos de envio de frames que estão no estado Em execução. Inclua linhas de execução de trabalho.
Outra maneira de medir o tempo ativo da CPU é conferir as fatias do app nas faixas da CPU. Essas fatias indicam quando a CPU está em execução e correspondem às fatias Em execução.
Para ajudar a identificar fatias de apps, adicione ATrace marcadores ao seu app. Isso vai mostrar os marcadores na faixa da CPU do System Profiler.
Estimar tempos de frame da GPU
Para estimar os tempos de frame da GPU, use fatias ou contadores de GPU no System Profiler. A estimativa é mais precisa ao usar fatias de GPU.
Fatias de GPU
Se o System Profiler tiver informações de frações de GPU disponíveis, você poderá receber informações muito precisas sobre o tempo para a renderização do frame da GPU medindo o tempo total que o app gasta trabalhando em tarefas associadas a um único frame.
Dispositivos Mali
Em dispositivos Mali, as fatias de GPU têm faixas de fragmento, não fragmentadas e ocasionalmente não fragmentadas suplementares. Para frames menos complexos, o trabalho de fragmento e não fragmentado é sequencial. Portanto, é possível distinguir o trabalho de um frame de outro procurando lacunas entre o trabalho ativo da GPU.
Como alternativa, se você estiver familiarizado com o trabalho que está sendo enviado à GPU, identificar o padrão das passagens de renderização enviadas fornecerá informações sobre quando um frame começa e termina.
Para apps que têm um fluxo de trabalho de GPU mais paralelizado, é possível acessar os tempos de frame da GPU procurando todos os frames que têm o mesmo submissionID no painel Seleção de cada fatia.
Para apps baseados em Vulkan, vários envios podem ser usados para compor um frame. Acompanhe os IDs de envio usando a faixa Eventos Vulkan, que contém uma fatia para cada envio. Selecionar uma fatia de envio vai destacar todas as fatias de atividade da GPU que correspondem ao envio.
Dispositivos Adreno
Em dispositivos Adreno, as fatias de GPU aparecem na faixa GPU Queue 0 e são sempre representadas sequencialmente. Portanto, é possível conferir todas as fatias que representam as passagens de renderização de um frame e usá-las para medir os tempos de frame da GPU.
Semelhante ao cenário do Mali descrito anteriormente: se o app estiver usando o Vulkan, a faixa Eventos Vulkan vai fornecer informações sobre o trabalho enviado para executar o frame. Para destacar as passagens de renderização, clique nas fatias Eventos Vulkan associadas ao frame.
Há alguns cenários em que os limites de frame da GPU são mais difíceis de distinguir devido ao app estar fortemente vinculado à GPU. Nesses cenários, se você estiver familiarizado com o trabalho enviado à GPU, poderá identificar o padrão com que as passagens de renderização estão sendo executadas e determinar os limites de frame dessas informações.
Contadores de GPU
Se as informações de fatias de GPU não estiverem disponíveis em um trace, você poderá estimar o tempo para a renderização do frame da GPU usando as faixas do contador de GPU.
Dispositivos Mali
Em dispositivos Mali, é possível usar a faixa Utilização da GPU para estimar o tempo para a renderização do frame da GPU de um app que não é intensivo em GPU. Quando os apps são menos intensivos em GPU, eles têm períodos regulares de atividade alta e baixa da GPU, em vez de atividade consistentemente alta. Para estimar os tempos de frame da GPU usando a faixa Utilização da GPU, meça a duração dos períodos de alta atividade na faixa.
Se o app for mais intensivo em GPU, a utilização da GPU poderá ser consistentemente muito alta. Nesse caso, é possível usar as faixas Utilização da fila de fragmentos e Utilização da fila não fragmentada para monitorar a atividade da GPU e estimar os tempos de frame da GPU. Ao procurar padrões nas faixas de fragmento e não fragmentadas , é possível ter uma estimativa aproximada de onde estão os limites de um frame e usá-la para medir o tempo para a renderização do frame da GPU.
Dispositivos Adreno
Em dispositivos Adreno, se o app não for intensivo em GPU, é possível estimar os tempos de frame da GPU da mesma forma que em dispositivos Mali na seção anterior.
Se o app for mais intensivo em GPU e tiver uma porcentagem de utilização da GPU consistentemente alta, use as faixas Instruções de vértice / segundo e Instruções de fragmento / segundo para estimar os tempos de frame da GPU. Ao procurar padrões nos níveis de atividade dessas faixas, é possível ter uma estimativa aproximada de onde estão os limites de um frame e usá-la para medir o tempo para a renderização do frame da GPU.
Essas outras faixas podem fornecer informações semelhantes:
- Vértices sombreados / segundo
- Fragmentos sombreados / segundo
- % de tempo de sombreamento de vértices
- % de tempo de sombreamento de fragmentos