Gravar rastros

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

Figura 1. O CPU Profiler mostra 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 do rastro no painel, como mostrado na Figura 2.

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

  1. Intervalo selecionado: determina a parte do tempo gravado que você quer inspecionar no painel do rastro. No primeiro registro de um rastro, o CPU Profiler seleciona automaticamente toda a duração da gravação na linha do tempo da CPU. Para inspecionar apenas os dados de rastro 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 ciclo de vida do app ao longo de uma linha do tempo.
  3. Seção Threads:mostra a atividade do estado da linha de execução (como em execução, suspensão etc.) e Call Chart (ou gráfico de eventos de rastreamento no Rastreamento do sistema) para cada linha do tempo em uma linha do tempo.
    • Use 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 abrir ou fechar uma linha.
    • Selecione uma linha de execução para ver mais informações no painel de análise. 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 um evento de rastro no Rastreamento do sistema, para conferir mais informações no painel de análise.
  4. Painel de análise: mostra dados de rastro para o intervalo de tempo e a linha de execução ou a 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. Você também pode escolher como quer medir o tempo de execução usando o menu suspenso de referência de tempo.
  5. Guias do painel de análise: escolha como mostrar detalhes de rastros. Para ver detalhes sobre cada opção, consulte Inspecionar rastros.
  6. Menu de referência temporal:selecione uma das seguintes opções para determinar como as informações de tempo de cada chamada são medidas (compatível apenas 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 tempo da linha de execução será sempre menor ou igual ao tempo decorrido real. O uso do tempo da linha de execução 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 rastro por função, método, classe ou nome do pacote. Por exemplo, se você quiser identificar rapidamente os dados de rastro relacionados a uma chamada específica, digite o nome no campo de pesquisa. Na guia Flame Chart, são destacadas as pilhas de chamadas que incluem uma chamada, um pacote ou uma classe correspondente à consultas de pesquisa. Nas guias Top Down e Bottom Up, essas pilhas de chamada são priorizadas em relação a outros resultados de rastro. 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 (Command no Mac pressionada).
  • Diminuir zoom:pressione S ou role a roda do mouse para trás enquanto mantém a tecla Ctrl (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 rastro, 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 rastro 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ê tiver interesse em métodos de rastro com ciclos de vida curtos, use o rastreamento instrumentado.

  • Trace Java Methods: instrumenta seu app durante a 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 rastros de método, incluindo informações sobre tempo e uso de CPU.

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

  • Sample C/C++ Functions: captura os traços 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 rastro 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 (nível 24 da API) ou uma versão mais recente.

    Ao usar essa configuração de rastro, 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 nativa 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 rastro é 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 (nível 28 da API) ou versões mais recentes, você pode usar um app chamado Rastreamento do sistema 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 de cima 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. Isso cria uma nova configuração com algumas definições padrão.
  2. Atribua um nome à configuração.
  3. Selecione uma Trace Technology (tecnologia de rastro).
  4. Nas configurações de gravação de amostra, especifique o Sampling interval (intervalo de amostragem) 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 (limite de tamanho do arquivo) em megabytes (MB) para os dados gravados programados no dispositivo conectado. Quando você interromper a gravação, o Android Studio vai analisar e mostrar esses dados na janela do criador de perfil. 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 (nível 26 da API) ou versões mais recentes, não haverá limite para o tamanho do arquivo dos dados de rastro, 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 rastro grandes. Por exemplo, se você estiver gravando um rastro amostrado com um intervalo de amostragem curto ou um rastro instrumentado enquanto o app chama vários métodos em um curto período, serão gerados rapidamente arquivos de rastro 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. A gravação iniciada pela API tem suporte de apps com perfil, mas os criadores de perfil do Android Studio exigem um app depurável para mostrar o status da gravação na IU.

Importante:a API Debug precisa ser usada separadamente dos outros meios de iniciar e interromper a gravação da atividade da CPU, como os botões na interface gráfica do usuário do CPU Profiler e a configuração na configuração de gravação automática na inicialização do app.

Devido ao limite de tamanho do buffer de 8 MB, o método startMethodTracing(String tracePath) na API Debug foi projetado para intervalos curtos ou situações em que é difícil iniciar/parar a gravação manualmente. Para períodos de gravação mais longos, use a IU do criador de perfil no Android Studio.

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 o app em um dispositivo com o Android 8.0 (nível 26 da API) ou mais recente, selecionando Run > Profile.