O Google tem o compromisso de promover a igualdade racial para as comunidades negras. Saiba como.

Inspecionar atividades de CPU com o CPU Profiler

A otimização do uso de CPU do app oferece muitas vantagens, como uma experiência do usuário mais rápida e uniforme e a preservação da duração da bateria do dispositivo.

Você pode usar o CPU Profiler para inspecionar o uso de CPU e as atividades das linhas de execução em tempo real durante a interação com o app, ou inspecionar os detalhes nos rastreamentos de método, de função e de sistema gravados.

Os tipos específicos de informações que o CPU Profiler grava e mostra são determinados pela configuração de gravação escolhida:

  • System Trace: captura dados detalhados que permitem inspecionar como o app interage com os recursos do sistema.
  • Method and function traces: para cada linha de execução no processo do app, é possível descobrir quais métodos (Java) ou funções (C/C++) são executados durante um período e os recursos de CPU que cada método ou função consome durante a execução. Você também pode usar rastreamentos de método e função para identificar autores e recebedores de chamadas. Um autor da chamada é um método ou função que invoca outro método ou função. Um recebedor da chamada é aquele invocado pelo outro método ou função. Você pode usar essas informações para determinar quais métodos ou funções são responsáveis por invocar determinadas tarefas com uso intensivo de recursos com muita frequência e otimizar o código do app para evitar trabalho desnecessário.

    Ao gravar o rastreamento do método, você pode escolher entre a gravação amostrada ou instrumentada. Ao gravar rastreamento de função, você só pode usar a gravação amostrada.

Para ver mais detalhes sobre como usar e escolher cada uma dessas opções de rastreamento, consulte Escolher uma configuração de gravação.

Visão geral do CPU Profiler

Para abrir o CPU Profiler, siga estas etapas:

  1. Selecione View > Tool Windows > Profiler ou clique em Profile na barra de ferramentas.

    Se a caixa de diálogo Select Deployment Target solicitar, selecione o dispositivo em que seu app será implantado para a criação do perfil. Se você estiver conectado a um dispositivo por USB, mas o dispositivo não for exibido na lista, verifique se a depuração de USB foi ativada.

  2. Clique em qualquer lugar da linha do tempo da CPU para abrir o CPU Profiler.

Ao ser aberto, o CPU Profiler começa imediatamente a exibir o uso de CPU e as atividades das linhas de execução do app. Você verá algo semelhante à Figura 1.

Figura 1. Linhas do tempo no CPU Profiler.

Como indicado na Figura 1, a visualização padrão do CPU Profiler inclui as seguintes linhas do tempo:

  1. Linha do tempo de eventos: mostra as atividades no app à medida que passam por estados diferentes do ciclo de vida e indica as interações do usuário com o dispositivo, incluindo eventos de rotação de tela. Para saber como ativar a linha do tempo do evento em dispositivos que executam o Android 7.1 (API de nível 25) e versões anteriores, consulte Ativar criação de perfil avançada.
  2. Linha do tempo da CPU: mostra em tempo real o uso da CPU pelo app como porcentagem do tempo total de CPU disponível e o número total de linhas de execução usadas pelo app. Além disso, a linha do tempo também mostra o uso da CPU por outros processos, como os de sistema ou de outros apps, para que você possa compará-los ao uso do seu app. É possível inspecionar dados históricos de uso de CPU movendo o mouse ao longo do eixo horizontal da linha do tempo.
  3. Linha do tempo de atividade de linhas de execução: lista cada linha de execução que pertence ao processo do app e indica as atividades dele ao longo de uma linha do tempo com as cores listadas abaixo. Após gravar um rastreamento, você poderá selecionar uma linha de execução dessa linha do tempo para inspecionar os dados dele no painel de rastreamento.
    • Verde: a linha de execução está ativa ou pronta para usar a CPU. Ou seja, está no estado "executando" ou "executável".
    • Amarelo: a linha de execução está ativa, mas aguarda uma operação de E/S, como E/S de disco ou rede, para poder concluir o trabalho.
    • Cinza: o encadeamento está suspenso e não está consumindo nenhum tempo de CPU. Às vezes, isso ocorre quando a linha de execução precisa acessar um recurso ainda não disponível. A linha de execução entra em suspensão voluntária ou é suspensa pelo kernel até que o recurso necessário fique disponível.

    O CPU Profiler também informa o uso de CPU das linhas de execução adicionadas pelo Android Studio e pela plataforma Android ao processo do app, como JDWP, Profile Saver, Studio:VMStats, Studio:Perfa e Studio:Heartbeat, embora os nomes exatos exibidos na linha do tempo de atividade da linha de execução possam variar. O Android Studio relata esses dados para que você possa identificar quando a atividades e o uso de CPU pelas linhas de execução são realmente causados pelo código do app.

Gravar rastreamentos

Para começar a gravar um rastreamento, escolha uma configuração de gravação nos menus suspensos acima ou abaixo do CPU Profiler e clique em Record.

Figura 2. O CPU Profiler exibe o status, a duração e o tipo de gravação que está sendo feita.

Interaja com o aplicativo e clique em Stop quando terminar. O criador de perfil exibe automaticamente as informações de rastreamento no painel de rastreamento, como mostrado na Figura 3:

Figura 3. O CPU Profiler após a gravação de um rastreamento de método.

  1. Intervalo selecionado: determina a parte do tempo gravado que você quer inspecionar no painel de rastreamento. No primeiro registro de um trace de um método, o CPU Profiler seleciona automaticamente toda a duração da gravação na linha do tempo da CPU. Para inspecionar apenas os dados de rastreamento de parte do intervalo de tempo gravado, clique nas arestas da região destacada e arraste-as.
  2. Seção de interação: exibe eventos de interação do usuário e eventos de ciclo de vida do app ao longo de uma linha do tempo.
  3. Seção de linhas de execução: exibe a atividade do estado da linha de execução, como em execução, em suspensão etc, e o Call Chart, ou o gráfico de eventos de rastreamento no Rastreamento do sistema, em cada linha de execução ao longo da linha do tempo.
    • Use os atalhos de mouse e teclado para navegar na linha do tempo.
    • Clique duas vezes no nome da linha de execução ou pressione Enter enquanto uma linha de execução é selecionada para expandir ou recolher uma linha.
    • Selecione uma linha de execução para ver mais informações no painel "Analysis". Mantenha a tecla Shift ou Ctrl (Command no Mac) pressionada para selecionar várias linhas de execução.
    • Selecione uma chamada de método ou evento de rastreamento no Trace System para ver mais informações no painel "Analysis".
  4. Painel de análise: exibe dados de rastreamento para o intervalo de tempo da linha de execução ou da chamada de método que você selecionou. Nesse painel, é possível selecionar a forma de visualização de cada stack trace com as guias de análise e como você quer medir o tempo de execução com o menu suspenso de referência de tempo.
  5. Guias do painel "Analysis": escolha como exibir os detalhes do rastreamento. Para ver detalhes sobre cada opção, consulte Inspecionar rastreamentos.
  6. Time reference menu: selecione uma das seguintes opções para determinar como as informações de tempo de cada chamada são medidas (só compatível com Sample/Trace Java Methods):
    • Wall clock time: as informações de tempo representam o tempo decorrido real.
    • Thread time: as informações de tempo representam o tempo decorrido real menos qualquer parte desse tempo em que a linha de execução não consumiu recursos de CPU. Para qualquer chamada, o Thread time será sempre menor ou igual ao Wall clock time. O uso do Thread time oferece melhor compreensão da forma como a maior parte do uso real de CPU por uma linha de execução é consumida por determinado método ou função.
  7. Filtro: filtra os dados de trace por função, método, classe ou nome do pacote. Por exemplo, se você quiser identificar rapidamente os dados de trace relacionados a uma chamada específica, digite o nome no campo de pesquisa. Na guia Flame Chart, as pilhas de chamadas que incluem uma chamada, um pacote ou uma classe correspondente à consulta de pesquisa são destacadas. Nas guias Top Down e Bottom Up, essas pilhas de chamada são priorizadas em relação a outros resultados de rastreamento. Também é possível ativar as seguintes opções, marcando a caixa adequada ao lado do campo de pesquisa:
    • Regex: use esta opção para incluir expressões regulares na sua pesquisa.
    • Match case: use esta opção se sua pesquisa faz distinção entre maiúsculas e minúsculas.
Dica: ao inspecionar a linha do tempo Threads, os seguintes atalhos estão disponíveis:
  • Aumentar zoom: pressione W ou role a roda do mouse enquanto mantém a tecla Ctrl (ou Command no Mac) pressionada.
  • Diminuir o zoom: pressione S ou role a roda do mouse para trás enquanto mantém a tecla Ctrl (ou Command no Mac) pressionada.
  • Mover para a esquerda: pressione A ou arraste o mouse para a direita enquanto mantém a tecla Espaço pressionada.
  • Mover para a direita: pressione D ou arraste o mouse para a esquerda enquanto mantém a tecla Espaço pressionada.
  • Expandir ou recolher uma linha de execução: clique duas vezes no nome da linha de execução ou pressione Enter enquanto uma linha de execução é selecionada.

Escolher uma configuração de gravação

Antes de começar a gravar informações de rastreamento, escolha a configuração de gravação adequada para as informações de criação de perfil que você quer capturar:

  • Sample Java Methods: captura a pilha de chamadas do app em intervalos frequentes durante a execução de código baseada em Java do app. O criador de perfil compara conjuntos de dados capturados para conseguir informações de uso de tempo e uso de recursos sobre a execução do código baseado em Java do app.

    Uma questão inerente ao rastreamento baseado em amostra é que, se o app entrar em um método após a captura da pilha de chamadas e sair desse método antes da próxima captura, essa chamada ao método não será registrada pelo criador de perfil. Se você estiver interessado em métodos de rastreamento com ciclos de vida curtos, use o rastreamento instrumentado.

  • Trace Java Methods: instrumenta seu app em tempo de execução para gravar um carimbo de data/hora no início e no término de cada chamada de método. Os carimbos de data/hora são coletados e comparados para gerar dados de rastreamento de métodos, incluindo informações sobre tempo e uso de CPU.

    Observe que a sobrecarga associada à instrumentação de cada método afeta o desempenho do tempo de execução e pode influenciar os dados de criação do perfil, o que será ainda mais perceptível para métodos com ciclos de vida relativamente breves. Além disso, se o app executar um grande número de métodos em um curto espaço de tempo, o criador de perfil poderá exceder rapidamente o limite de tamanho de arquivo e deixar de gravar outros dados de rastreamento.

  • Sample C/C++ Functions: captura os rastreamentos amostrados das linhas de execução nativas do app. Para usar essa configuração, é necessário implantar seu app em um dispositivo com o Android 8.0 (API de nível 26) ou versão mais recente.

    Internamente, essa configuração usa simpleperf para rastrear o código nativo do seu app. Caso queira especificar mais opções para simpleperf, por exemplo, amostragem de CPUs específicas do dispositivo ou especificação de durações de amostragem com alta precisão, você pode usar simpleperf na linha de comando.

  • Trace System Calls: captura dados detalhados que permitem inspecionar como o app interage com os recursos do sistema. Você pode inspecionar os tempos e as durações exatas dos estados da linha de execução, visualizar onde os gargalos da CPU estão em todos os núcleos e adicionar eventos de rastreamento personalizados para analisar. Essas informações podem ser essenciais para solucionar problemas de desempenho. Para usar essa configuração, é necessário implantar seu app em um dispositivo com o Android 7.0 (API de nível 26) ou versão mais recente.

    Ao usar essa configuração de rastreamento, você pode marcar visualmente rotinas de código importantes na linha do tempo do criador de perfil instrumentando seu código. Para instrumentar o código C/C++, use a API de rastreamento nativo fornecida por trace.h. Para instrumentar o código Java, use a classe Trace. Para mais informações, consulte Instrumentar o código do app.

    Essa configuração de rastreamento é criada no systrace. É possível usar o utilitário de linha de comando systrace para especificar opções além das fornecidas no CPU Profiler. Os outros dados no nível do sistema fornecidos por systrace podem ajudar a inspecionar processos nativos do sistema e a solucionar problemas de frames perdidos ou atrasados.

    Em dispositivos com o Android 9 (API de nível 28) ou versão mais recente, você pode usar um app do sistema chamado System Tracing para registrar os rastros do sistema em um dispositivo.

Criar, editar ou ver uma configuração de gravação

Para criar, editar e visualizar configurações de gravação, abra a caixa de diálogo CPU Recording Configurations selecionando Edit configurations no menu suspenso de configurações de gravação, na parte superior do CPU Profiler.

Para visualizar as definições de uma configuração de gravação existente, selecione-a no painel esquerdo da caixa de diálogo CPU Recording Configurations.

Para criar uma nova configuração de gravação, siga as seguintes etapas:

  1. Clique em Add no canto superior esquerdo da caixa de diálogo. Uma nova configuração com algumas definições padrão será criada.
  2. Atribua um nome à configuração.
  3. Selecione uma Trace Technology.
  4. Nas configurações de gravação de amostra, especifique o Sampling interval em microssegundos (μs). Esse valor representa a duração entre cada amostra da pilha de chamadas do app. Quanto menor o intervalo especificado, mais rápido você alcançará o limite de tamanho de arquivo para os dados gravados.
  5. Especifique o File size limit em megabytes (MB) para os dados gravados programados no dispositivo conectado. Quando você interromper a gravação, o Android Studio analisará esses dados e os exibirá na janela do criador de perfil. Portanto, se você aumentar o limite e gravar uma grande quantidade de dados, o Android Studio demorará muito mais para analisar o arquivo e poderá parar de responder.

    Observação: se você usar um dispositivo conectado executando o Android 8.0 (API nível 26) ou versões mais recentes, não haverá limite para o tamanho do arquivo dos dados de rastreamento, e esse valor será ignorado. No entanto, ainda será necessário tomar cuidado com a quantidade de dados coletada pelo dispositivo em cada gravação. O Android Studio pode ter dificuldades para analisar arquivos de rastreamento grandes. Por exemplo, se você estiver gravando um rastreamento amostrado com um intervalo de amostragem curto ou um rastreamento instrumentado enquanto o app chama vários métodos em um curto período, serão gerados rapidamente arquivos de rastreamento grandes.

  6. Para aceitar as mudanças e continuar mudando outras configurações, clique em Apply. Clique em OK para aceitar todas as mudanças aplicadas e fechar a caixa de diálogo.

Gravar a atividade da CPU com a API Debug

É possível usar a API Debug para que seu app possa iniciar e interromper a gravação da atividade da CPU no CPU Profiler.

O CPU Profiler começa a gravar quando o app chama startMethodTracing(String tracePath) e interrompe a gravação quando o app chama stopMethodTracing(). Enquanto grava a atividade da CPU que acionou o uso dessa API, o CPU Profiler mostra a API Debug como a configuração de gravação de CPU ativa.

Para controlar a gravação da atividade da CPU com a API Debug, implante seu app instrumentado em um dispositivo com o Android 8.0 (API de nível 26) ou versões mais recentes.

Para mais informações, consulte Gerar registros de rastreamento com a instrumentação do app.

Gravar a atividade da CPU durante a inicialização do app

Para começar a gravar a atividade da CPU automaticamente durante a inicialização do app, siga estas etapas:

  1. Selecione Run > Edit Configurations.
  2. Na guia Profiling, marque a caixa ao lado de Start recording a method trace on startup.
  3. Selecione uma configuração de gravação da CPU no menu.
  4. Clique em Aplicar.
  5. Implante seu app em um dispositivo com Android 8.0 (nível de API 26) ou versão posterior selecionando Run > Profile.

Exportar rastreamentos

Depois de registrar a atividade da CPU com o CPU Profiler, você pode exportar os dados como um arquivo .trace para compartilhar com outras pessoas ou inspecionar mais tarde.

Para exportar um arquivo de rastreamento da linha do tempo da CPU, faça o seguinte:

  1. Na linha do tempo da CPU, clique com o botão direito do mouse no rastreamento do método ou do sistema que você quer exportar.
  2. Selecione Export trace no menu suspenso.
  3. Navegue até o local onde você quer salvar o arquivo, especifique o nome dele e clique em OK.

Para exportar um arquivo de rastreamento do painel Sessions, faça o seguinte:

  1. No painel Sessions, clique com o botão direito do mouse no rastreamento gravado que você quer exportar.
  2. Clique no botão Export method trace ou Export system trace à direita da entrada da sessão.
  3. Navegue até o local onde você quer salvar o arquivo, especifique o nome dele e clique em OK.

Importar traces

É possível importar arquivos .trace criados com a API Debug ou o CPU Profiler.

Para importar o arquivo de rastreamento, clique em Start new profiler session no painel Sessions e selecione Load from file.

Você pode inspecionar um rastreamento importado no CPU Profiler, assim como faz com rastreamentos capturados diretamente no CPU Profiler, com as seguintes exceções:

  • A atividade da CPU não é representada ao longo da linha do tempo da CPU, exceto no Rastreamento do sistema.
  • A linha do tempo na seção Threads não mostra estados, como execução, espera ou suspensão, exceto no Rastreamento do sistema.

Inspecionar rastreamentos

A visualização de rastreamento no CPU Profiler oferece várias maneiras de visualizar informações de rastreamentos gravados.

Para rastreamentos de métodos e de funções, você pode ver Call Chart diretamente na linha do tempo Threads, e as guias Flame Chart, Top Down e Bottom Up do painel Analysis. Nos traces do sistema, é possível ver Trace Events diretamente na linha do tempo Threads, e as guias Flame Chart, Top Down e Bottom Up do painel Analysis .

Atalhos de mouse e teclado estão disponíveis para facilitar a navegação de Call Charts ou Trace Events.

Inspecionar traces usando a guia Call Chart

A guia Call Chart oferece uma representação gráfica do rastreamento de um método ou função, em que o período e o tempo de uma chamada são representados no eixo horizontal, e os recebedores da chamada são mostrados ao longo do eixo vertical. As chamadas para APIs do sistema são mostradas em laranja, as chamadas aos próprios métodos do app são mostradas em verde e as chamadas para APIs de terceiros, incluindo APIs da linguagem Java, são mostradas em azul. A Figura 4 mostra um exemplo de gráfico de chamadas e ilustra os conceitos de tempo próprio, tempo secundário e tempo total para um determinado método ou função. Saiba mais sobre esses conceitos na seção sobre como inspecionar rastreamentos usando gráficos Top Down e Bottom Up.

Figura 4. Exemplo de gráfico de chamadas que ilustra o tempo próprio, o tempo secundário e o tempo total para o método D.

Dica: para acessar o código-fonte de um método ou função, clique com o botão direito e selecione Jump to Source. Esse acesso funciona em qualquer guia do painel Analysis.

Inspecionar rastreamentos usando a guia Flame Chart

A guia Flame Chart oferece um gráfico de chamadas invertido que agrega pilhas de chamadas idênticas. Ou seja, métodos idênticos que compartilham a mesma sequência de autores da chamada são coletados e representados como uma barra mais longa em um flame chart, em vez de serem exibidos como várias barras mais curtas, como mostrado em um gráfico de chamada. Dessa forma, é mais fácil ver quais métodos ou funções consomem a maior quantidade de tempo. No entanto, isso também significa que o eixo horizontal não representa uma linha do tempo. Em vez disso, indica a quantidade relativa de tempo que cada método ou função leva para ser executado.

Para ajudar a ilustrar esse conceito, considere o gráfico de chamadas na figura 5. Observe que o método D faz várias chamadas para B (B1, B2 e B3) e que algumas chamadas para B chamam C (C1 e C3).

Figura 5. Gráfico de chamadas com várias chamadas de método que compartilham uma sequência comum de autores da chamada.

Como B1, B2 e B3 compartilham a mesma sequência de autores da chamada (A → D → B), eles são agregados, conforme mostrado na Figura 6. De forma similar, C1 e C3 são agregados porque compartilham a mesma sequência de autores da chamada (A → D → B → C). Observe que C2 não é incluído porque tem uma sequência diferente de autores da chamada (A → D → C).

Figura 6. Agregação de métodos idênticos que compartilham a mesma pilha de chamadas.

As chamadas agregadas são usadas para criar o flame chart, como mostrado na figura 7. Observe que, para qualquer chamada em um flame chart, os recebedores de chamada que consomem a maior parte de tempo de CPU são exibidos primeiro.

Figura 7. Representação do flame chart do gráfico de chamadas mostrado na Figura 5.

Inspecionar rastreamentos usando Top Down e Bottom Up

A guia Top Down exibe uma lista de chamadas de métodos em que a expansão de um nó do método ou função exibe os recebedores de chamadas. A Figura 8 mostra um gráfico de cima para baixo para o gráfico de chamadas na Figura 4. Cada seta no gráfico aponta de um autor para um recebedor da chamada.

Como mostrado na Figura 8, a expansão do nó do método A na guia Top Down exibe os recebedores de chamada, os métodos B e D. Depois disso, a expansão do nó do método D expõe os recebedores da chamada, os métodos B e C e assim por diante. De forma similar à guia Flame Chart, a árvore Top Down agrega informações de rastreamento para métodos idênticos que compartilham a mesma pilha de chamadas. Ou seja, a guia Flame Chart oferece uma representação gráfica da guia Top Down.

A guia Top Down fornece as informações a seguir para ajudar a descrever o tempo de CPU gasto em cada chamada de método, os tempos também são representados como porcentagem do tempo total da linha de execução em relação à duração do frame de tempo selecionado:

  • Self: a quantidade de tempo que a chamada do método levou para executar o próprio código, e não o código dos recebedores da chamada, como ilustrado no método D da Figura 4.
  • Children: a quantidade de tempo que a chamada do método levou para executar o código dos recebedores da chamada, e não o próprio código, como ilustrado no método D da Figura 4.
  • Total: a soma dos tempos Self e Children dos métodos. É a representação da quantidade total de tempo gasto pelo app ao executar uma chamada, conforme ilustrado na Figura 4 para o método D.

Figura 8. Uma árvore Top Down.

Figura 9. Uma árvore Bottom Up para o método C da Figura 8.

A guia Bottom Up exibe uma lista de chamadas em que a expansão de um nó do método ou função exibe os autores de chamada. Usando o rastreamento de exemplo mostrado na Figura 8, a Figura 9 mostra uma árvore Bottom Up do método C. A abertura do nó do método C na árvore Bottom Up exibe cada um dos autores da chamada exclusivos, os métodos B e D. Observe que, embora B chame C duas vezes, B é exibido apenas uma vez na expansão do nó para o método C na árvore Bottom Up. Depois disso, a expansão do nó B exibe os autores da chamada, os métodos A e D.

A guia Bottom Up é útil para classificar métodos de acordo com os que consomem mais (ou menos) tempo de CPU. Você pode inspecionar cada nó para determinar quais autores da chamada gastam mais tempo de CPU invocando esses métodos ou funções. Em comparação com a árvore de cima para baixo, as informações de tempo de cada método ou função em uma árvore de baixo para cima fazem referência ao método na parte superior de cada árvore (nó superior). O tempo de CPU também é representado como porcentagem do tempo total da linha de execução durante a gravação. A tabela a seguir ajuda a explicar como interpretar as informações de tempo do nó superior e dos respectivos métodos de autores da chamada (subnós).

Self Children Total
Método ou função na parte superior da árvore de baixo para cima (nó principal) Representa o tempo total que o método ou função levou para executar o próprio código, e não o de seus recebedores da chamada. Em comparação com a árvore de cima para baixo, essas informações de tempo representam uma soma de todas as chamadas para esse método ou função durante a gravação. Representa o tempo total que o método ou a função gastou executando o código dos recebedores da chamada, e não o próprio código. Em comparação com a árvore de cima para baixo, essas informações de tempo representam a soma de todas as chamadas para os recebedores da chamada desse método ou função durante a gravação. A soma dos tempos próprios e secundários.
Autores de chamadas (subnós) Representa o total do tempo próprio do recebedor da chamada quando chamado pelo autor da chamada. Usando a árvore de baixo para cima na Figura 9 como um exemplo, o tempo próprio para o método B seria a soma de todos os tempos próprios para cada execução do método C quando chamado por B. Representa o total do tempo secundário do recebedor da chamada quando invocado pelo autor da chamada. Usando a árvore de baixo para cima na Figura 9 como um exemplo, o tempo próprio para o método B seria a soma de todos os tempos próprios para cada execução do método C quando chamado por B. A soma dos tempos próprios e secundários.

Observação: para uma determinada gravação, o Android Studio deixa de coletar novos dados quando o criador de perfil alcança o limite de tamanho de arquivo, no entanto, a gravação continua. Normalmente, isso acontece muito mais rapidamente na execução de rastreamentos instrumentados, já que esse tipo de rastreamento coleta mais dados em um período menor em comparação a um rastreamento por amostra. Se você ampliar o tempo da inspeção até conter um período da gravação após o limite ser alcançado, os dados de tempo no painel de rastreamento não serão mudados, porque não haverá novos dados disponíveis. Além disso, o painel de rastreamento exibirá NaN como informações de tempo quando você selecionar apenas a parte da gravação que não tem dados disponíveis.

Inspecionar rastreamentos do sistema

Ao inspecionar um rastreamento do sistema, você pode examinar Trace Events na linha do tempo Threads para visualizar os detalhes dos eventos que ocorrem em cada linha de execução. Passe o cursor sobre um evento para ver o nome dele e o tempo gasto em cada estado. Clique em um evento para ver mais informações no painel Analysis.

O painel CPU Cores, como mostrado na Figura 10, apresenta a atividade de linha de execução programada em cada núcleo. Passe o cursor do mouse sobre uma atividade da linha de execução para ver em qual linha esse núcleo está sendo executado naquele momento específico.

Figura 10. Visualização da atividade da CPU e eventos de rastreamento para a linha de execução de renderização.

Para saber mais sobre como inspecionar informações de rastreamento do sistema, consulte a seção Investigar problemas de desempenho da IU da documentação do systrace.

Inspecionar dados de renderização de frames

Você pode inspecionar quanto tempo o app leva para renderizar cada frame na linha de execução principal e no RenderThread para investigar os gargalos que causam instabilidade da IU e baixas taxas de frames.

Para ver dados de renderização de frame, grave um rastreamento usando uma configuração que permita rastrear chamadas do sistema com a opção Trace System Calls. Depois de gravar o rastreamento, procure informações sobre cada frame na linha do tempo Frames na seção Display, como mostrado na Figura 11.

Figura 11. Todos os frames que demoram mais de 16 ms são exibidos em vermelho.