Estimar os tempos de processamento de frames da CPU e da GPU (tempos de frame) é essencial para entender o desempenho do app e localizar gargalos. Quando você cria um perfil de um app com o AGI, o System Profiler fornece dados de rastreamento que podem ser usados para estimar os tempos de frame.
Tempos de CPU
No AGI, você pode conferir os tempos de frame total e ativo da CPU na faixa da CPU de um perfil do sistema.
Tempo total de CPU
Para medir o tempo total gasto pela 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 esperar que a GPU conclua o trabalho antes de enviar um novo frame. Isso
acontece com frequência 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 de CPU, mas não no tempo ativo de CPU.

dequeueBuffer
e eventos eglSwapBuffer
.
Tempo de CPU ativo
O tempo ativo da CPU determina quando a CPU está executando o código do app sem estar em um estado ocioso.
Para medir o tempo de CPU ativo, confira os segmentos Running logo acima dos eventos de CPU. Conte todas as partes do rastro entre os dois eventos de envio de frame que estão no estado Running. Inclua linhas de execução de trabalho.


Outra maneira de medir o tempo de CPU ativo é conferir as fatias do app nas faixas de CPU. Essas fatias indicam quando a CPU está em execução e correspondem às fatias Running.

Para ajudar a identificar as fatias do app, adicione marcadores ATrace ao app. Isso vai mostrar os marcadores na faixa de CPU do System Profiler.

Estimar os tempos de frame da GPU
Para estimar os tempos de frame da GPU, use fatias ou contadores de GPU no Profiler do sistema. A estimativa é mais precisa ao usar fatias de GPU.
Fatias de GPU
Se o System Profiler tiver informações de fatia de GPU disponíveis, você poderá receber informações muito precisas sobre o tempo de frame da GPU medindo a quantidade total de tempo que o app passa trabalhando em tarefas associadas a um único frame.
Dispositivos Mali
Em dispositivos Mali, as fatias da GPU têm faixas fragmentadas, não fragmentadas e, ocasionalmente, não fragmentadas suplementares. Para frames menos complexos, o trabalho de fragmento e não fragmento é sequencial. Portanto, para distinguir o trabalho de um frame do outro, procure lacunas entre o trabalho de GPU ativo.
Como alternativa, se você conhece o trabalho que está sendo enviado para a GPU, identificar o padrão das transmissões de renderização enviadas fornece informações sobre quando um frame começa e termina.


Para apps com um fluxo de trabalho de GPU mais paralelizado, é possível conferir os tempos de frame da GPU procurando todos os frames com o mesmo ID de envio no painel Seleção para 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 Vulkan Events, que contém uma fatia para cada envio. A seleção de uma fatia de envio vai destacar todas as fatias de atividade da GPU que correspondem ao envio.


Dispositivos Adreno
Em dispositivos Adreno, as fatias da GPU aparecem na faixa GPU Queue 0 e são sempre representadas sequencialmente. Assim, você pode analisar todas as fatias que representam as transmissões 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 Vulkan Events vai fornecer informações sobre o trabalho que está sendo enviado para executar o frame. Para destacar as transmissões de renderização, clique nas fatias Vulkan Events associadas ao frame.

Há alguns cenários em que os limites de frame da GPU são mais difíceis de distinguir devido ao fato de o app estar fortemente vinculado à GPU. Nesses cenários, se você conhece o trabalho que está sendo enviado para a GPU, pode identificar o padrão com que as transmissões de renderização estão sendo executadas e determinar os limites do frame com base nessas informações.

Contadores de GPU
Se as informações de fatia da GPU não estiverem disponíveis em um rastro, você poderá estimar o tempo de frame da GPU usando as faixas do contador de GPU.
Dispositivos Mali
Em dispositivos Mali, use a faixa Utilização da GPU para estimar o tempo de frame da GPU de um app que não usa muito a 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 Uso da GPU, meça a duração dos períodos de alta atividade na faixa.

Se o app exigir mais da GPU, a utilização dela poderá ser consistentemente muito alta. Nesse caso, é possível usar as faixas fragment queue utilization e non-fragment queue utilization para monitorar a atividade da GPU e estimar os tempos de frame da GPU. Ao procurar padrões em faixas fragment e não fragment, é possível ter uma estimativa aproximada de onde estão os limites de um frame e usá-la para medir o tempo de frame da GPU.

Dispositivos Adreno
Em dispositivos Adreno, se o app não tiver uso intensivo de GPU, você poderá estimar os tempos de frame da GPU da mesma forma que com dispositivos Mali na seção anterior.

Se o app exigir mais da GPU e tiver uma porcentagem de uso da GPU consistentemente alta, use as faixas Vertex Instructions / Second e Fragment Instructions / Second para estimar os tempos de frame da GPU. Ao procurar padrões nos níveis de atividade dessas faixas, você pode ter uma estimativa aproximada de onde estão os limites de um frame e usá-la para medir o tempo de frame da GPU.

Essas outras faixas podem fornecer informações semelhantes:
- Vertices sombreados / segundo
- Fragments Shaded / Second
- % de tempo de sombreamento de vértices
- % de tempo de sombreamento de fragmentos