Este guia explica como navegar por um relatório do Systrace e interpretá-lo. Para interpretar um relatório do Perfetto, consulte a documentação do Trace Processor (link em inglês).
Elementos de um relatório típico
O Systrace gera um arquivo HTML de saída que contém uma série de seções. O relatório lista as linhas de execução de cada processo. Se uma determinada linha de execução renderizar frames de IU, o relatório também indicará os frames renderizados ao longo da linha do tempo. A passagem do tempo avança para frente à medida que você se desloca da esquerda para a direita no relatório.
De cima para baixo, o relatório contém as seções a seguir.
Interações do usuário
A primeira seção contém barras que representam interações do usuário específicas no seu app ou jogo, como tocar na tela do dispositivo. Essas interações servem como marcadores de tempo úteis.
Atividade da CPU
A próxima seção mostra barras que representam a atividade da linha de execução dentro de cada CPU. As barras mostram a atividade da CPU em todos os apps, incluindo seu app ou jogo.
A seção de atividade da CPU pode ser expandida, permitindo que você confira a frequência do clock de cada CPU. A Figura 1 mostra um exemplo de uma seção de atividade da CPU recolhida, e a Figura 2 mostra uma versão expandida que exibe a frequência do relógio:
Eventos do sistema
Os histogramas nesta seção mostram eventos específicos no nível do sistema, como contagens de textura e o tamanho total de objetos específicos.
Vale a pena consultar mais atentamente o histograma chamado SurfaceView. A contagem representa o número de buffers de frames compostos que foram passados para o pipeline de exibição e estão aguardando para serem exibidos na tela do dispositivo. Como a maioria dos dispositivos tem buffer duplo ou triplo, essa contagem é quase sempre 0, 1 ou 2.
Outros histogramas que representam o processo Surface Flinger, incluindo eventos de VSync e trabalho de troca de linhas de execução de IU, aparecem na Figura 3:
Frames de exibição
Esta seção, geralmente a mais alta do relatório, mostra uma linha multicolorida
seguida por pilhas de barras. Essas formas representam o status e a pilha de frames de
uma linha de execução específica que foi criada. Cada nível da pilha representa uma
chamada para beginSection()
ou o início de um evento de geração de rastros
personalizado definido para seu app
ou jogo.
A linha multicolorida acima de cada pilha de barras representa o conjunto de status de uma linha de execução específica ao longo do tempo. Cada segmento da linha pode conter uma das seguintes cores:
- Verde: em execução
- A linha de execução está concluindo um trabalho relacionado a um processo ou está respondendo a uma interrupção.
- Azul: pronto para execução
- A linha de execução está disponível para execução, mas não está programada no momento.
- Branco: em suspensão
- A linha de execução não tem nenhum trabalho a fazer, talvez porque está bloqueada em um bloqueio mutex.
- Laranja: em suspensão ininterrupta
- A linha de execução está bloqueada na E/S ou está aguardando a conclusão de uma operação de disco.
- Roxo: em suspensão passível de interrupção
- A linha de execução está bloqueada em outra operação de kernel, normalmente no gerenciamento de memória.
Atalhos do teclado
A tabela a seguir lista os atalhos de teclado disponíveis durante a visualização de um relatório do Systrace:
Chave | Descrição | |
---|---|---|
W | Aumenta o zoom na linha do tempo do rastro. | |
A | Move para a esquerda a linha do tempo do rastro. | |
S | Diminui o zoom na linha do tempo do rastro. | |
D | Move para a direita a linha do tempo do rastro. | |
E | Centraliza a linha do tempo do rastro na posição atual do mouse. | |
M | Enquadra a seleção atual. | |
1 | Altera o modelo de seleção ativo para o modo "selecionar". Corresponde ao primeiro botão na barra de ferramentas do seletor do mouse (veja a imagem à direita). |
|
2 | Altera o modelo de seleção ativo para o modo "mover". Corresponde ao segundo botão na barra de ferramentas do seletor do mouse (veja a imagem à direita). |
|
3 | Altera o modelo de seleção ativo para o modo "zoom". Corresponde ao terceiro botão na barra de ferramentas do seletor do mouse (veja a imagem à direita). |
|
4 | Altera o modelo de seleção ativo para o modo "período". Corresponde ao quarto botão na barra de ferramentas do seletor do mouse (veja a imagem à direita). |
|
G | Exibe a grade no início da tarefa selecionada. | |
Shift + G | Exibe a grade no final da tarefa selecionada. | |
Seta para a esquerda | Seleciona o evento anterior na linha do tempo selecionada. | |
Seta para a direita | Seleciona o próximo evento na linha do tempo selecionada. |
Investigar problemas de desempenho
Ao interagir com um relatório do Systrace, você pode inspecionar o uso da CPU do dispositivo durante o processo de registro. Se precisar de ajuda para navegar pelo relatório HTML, consulte a seção de atalhos do teclado ou clique no botão ? no canto superior direito do relatório.
As seções a seguir explicam como inspecionar as informações no relatório para encontrar e corrigir problemas de desempenho.
Identificar problemas de desempenho
Ao navegar por um relatório do Systrace, você pode identificar problemas de desempenho com mais facilidade realizando uma ou mais das ações a seguir:
- Selecionar um intervalo de tempo de interesse desenhando um retângulo ao redor do intervalo.
- Marcar ou destacar uma área problemática usando a ferramenta de régua.
- Exibir cada operação de atualização da tela clicando em View Options > Highlight VSync.
Inspecionar frames e alertas da IU
Conforme mostrado na Figura 4, um relatório do Systrace lista cada processo que renderiza os frames da IU e indica cada frame renderizado ao longo da linha do tempo. Os frames renderizados dentro dos 16,6 milissegundos necessários para manter um nível estável de 60 quadros por segundo são indicados com círculos de frame verdes. Os frames que levam mais de 16,6 milissegundos para renderizar são indicados com círculos de frame amarelos ou vermelhos.
![Visualização com
zoom de um frame](https://developer.android.com/static/topic/performance/images/tracing/frame-unselected.png?authuser=9&hl=pt)
Ao clicar no círculo de um frame, ele é destacado e fornece mais informações sobre o trabalho realizado pelo sistema para renderizar esse frame, incluindo alertas. O relatório também mostra os métodos que o sistema estava executando ao renderizar o frame. Você pode investigar esses métodos para determinar possíveis causas de instabilidade da IU.
![Frame
problemático selecionado](https://developer.android.com/static/topic/performance/images/tracing/frame-selected.png?authuser=9&hl=pt)
Após selecionar um frame lento, você poderá ver um alerta no painel inferior do
relatório. O alerta exibido na Figura 5 mostra que o principal problema com o
frame é que muito tempo é usado
na reciclagem e revinculação do ListView
. Há
links para os eventos relevantes no rastro que explicam melhor o que o
sistema estava fazendo durante esse período.
Para ver cada alerta que a ferramenta detectou no seu rastro, bem como o número de vezes que o dispositivo acionou cada alerta, clique na guia Alerts à direita da janela, como mostra a Figura 6. O painel Alerts ajuda a visualizar quais problemas ocorrem no rastro e com que frequência eles contribuem para a instabilidade. Você pode considerar esse painel como uma lista de bugs a serem corrigidos. Muitas vezes, uma pequena mudança ou melhoria em uma área pode remover um conjunto inteiro de alertas.
![Guia "Alert" exibida](https://developer.android.com/static/topic/performance/images/tracing/frame-selected-alert-tab.png?authuser=9&hl=pt)
Se você notar que muito trabalho está sendo realizado na linha de execução de IU, use uma das abordagens a seguir para ajudar a determinar quais métodos estão consumindo muito tempo de CPU:
- Se você imagina quais métodos podem estar causando gargalos, adicione marcadores de rastro a esses métodos. Para saber mais, consulte o guia sobre como definir eventos personalizados no seu código.
- Se você não tiver certeza sobre qual é a origem dos gargalos da IU, use o CPU Profiler disponível no Android Studio. É possível gerar registros de rastreamento, importá-los e inspecioná-los usando o CPU Profiler.