Save the date! Android Dev Summit is coming to Mountain View, CA on November 7-8, 2018.

Gerar registros de rastreamento com a instrumentação do aplicativo

Para gerar um rastreamento de um método na execução de um aplicativo, você pode instrumentar esse aplicativo usando a classe Debug . A instrumentação do aplicativo dessa forma oferece mais controle sobre o momento exato em que o dispositivo começa a gravar informações de rastreamento. O dispositivo também salva os registros de rastreamento usando os nomes especificados, o que facilita a identificação posterior dos registros. Em seguida, você pode ver cada registro de rastreamento usando o Android Studio ou o Traceview.

Outra forma de rastrear o aplicativo, que não exige a instrumentação do código do aplicativo, é o método de iniciar e interromper o rastreamento usando o CPU Profiler do Android Studio. Para saber mais, leia Inspecionar Activity de CPU e rastreamentos de métodos com o CPU Profiler.

Antes de começar a gerar registros de rastreamento, verifique se o aplicativo tem permissão para gravar no armazenamento externo (WRITE_EXTERNAL_STORAGE) para poder salvar os registros de rastreamento no dispositivo.

Instrumentar o aplicativo

Para criar registros de rastreamento, chame startMethodTracing() quando quiser que o sistema comece a gerar registros de dados de rastreamento.

Na chamada, você pode especificar o nome do arquivo .trace. O sistema salvará esse arquivo em um diretório específico do pacote, destinado a dados persistentes do aplicativo, no dispositivo de destino. É o mesmo diretório retornado por getExternalFilesDir() e, na maioria dos dispositivos, está localizado no diretório ~/sdcard/. Esse arquivo contém os dados binários de rastreamento do método e uma tabela de mapeamento com nomes de encadeamentos e métodos. Para interromper o rastreamento, chame stopMethodTracing().

O exemplo a seguir inicia e interrompe a gravação de um registro de rastreamento com o nome sample.trace:

// Starts recording a trace log with the name you provide. For example, the
// following code tells the system to start recording a .trace file to the
// device with the name "sample.trace".
Debug.startMethodTracing("sample");
...
// The system begins buffering the generated trace data, until your
// application calls stopMethodTracing(), at which time it writes
// the buffered data to the output file.
Debug.stopMethodTracing();

Observe que, se o aplicativo chamar startMethodTracing() novamente sem alterar o nome do registro de rastreamento, o registro existente salvo no dispositivo será substituído. Para saber como alterar dinamicamente o nome de cada registro de rastreamento, vá para a seção sobre salvar vários registros.

Se o sistema alcançar o tamanho máximo do buffer antes da chamada de stopMethodTracing(), interromperá o rastreamento e enviará uma notificação para o console. Os métodos que iniciam e interrompem rastreamentos funcionam durante todo o processo do aplicativo. Ou seja, é possível chamar startMethodTracing() no método onCreate(Bundle) da atividade e chamar stopMethodTracing() no método onDestroy() dessa atividade.

Observe que o aplicativo executará mais lentamente quando a criação do perfil estiver ativada. Ou seja, você não deve usar os dados da criação do perfil para determinar tempos absolutos (como, por exemplo, "método foo() demora 2,5 segundos para executar"). As informações de tempo nos registros de rastreamento são úteis apenas quando comparadas aos registros de rastreamento anteriores para que você possa ver se alterações recentes aumentaram ou reduziram o desempenho do aplicativo.

Ao implantar em dispositivos executando o Android 5.0 (API de nível 21 ou posterior), você poderá usar a criação do perfil baseada em amostra para criar um perfil com menor impacto sobre o desempenho do tempo de execução. Para ativar a criação do perfil da amostra, chame startMethodTracingSampling() (em vez de chamar startMethodTracing()) com um intervalo de amostragem especificado. O sistema coleta periodicamente as amostras até que o aplicativo chame stopMethodTracing().

Salvar vários registros

Se o aplicativo iniciar e interromper um rastreamento de método várias vezes sem especificar um novo nome para o registro de rastreamento, o dispositivo substituirá o registro de rastreamento anterior com o novo. Ou seja, somente o registro de rastreamento mais recente é mantido. Para salvar vários registros de rastreamento no dispositivo, renomeie dinamicamente o registro de rastreamento a cada vez que o aplicativo chamar startMethodTracing(). O exemplo abaixo usa a classe SimpleDateFormat para incluir a data e a hora atuais no momento da atribuição de nome a cada registro de rastreamento:

// Uses the SimpleDateFormat class to create a String with
// the current date and time.
SimpleDateFormat date =
        new SimpleDateFormat("dd_MM_yyyy_hh_mm_ss");
String logDate = date.format(new Date());
// Applies the date and time to the name of the trace log.
Debug.startMethodTracing(
        "sample-" + logDate);

Acessar registros de rastreamento no dispositivo

Depois que o sistema criar o registro de rastreamento no dispositivo, você poderá acessar o arquivo de uma das seguintes formas:

  • Use o Device File Explorer. Para abrir o Device File Explorer, clique em View > Tool Windows > Device File Explorer (ou clique no botão Device File Explorer na barra da janela da ferramenta). Como mostrado na figura 1, você pode localizar os arquivos .trace navegando para o diretório específico do pacote do aplicativo.

    Figura 1. Localização dos registros de rastreamento usando o Device File Explorer.

    • Para visualizar rapidamente o registro de rastreamento dentro da janela do editor do ambiente de desenvolvimento integrado, como mostrado na figura 2, clique duas vezes no arquivo. Você também pode clique com o botão direito no arquivo para salvá-lo no disco local e usar o Traceview para inspecionar informações mais detalhadas, como métodos principal e secundário, tempos médios de execução por chamada de método e comparação de tempo de CPU com o tempo real. Se os arquivos de registros não forem exibidos, tente clique com o botão direito no diretório onde você acredita que eles estão e selecione Synchronize.

      Figura 2. Visualização de um arquivo .trace no Android Studio.

  • Copie o arquivo para a máquina local usando o comando adb pull command. O comando abaixo copia um registro de rastreamento denominado sample.trace do dispositivo para o diretório ~/Documents/trace-logs/ da máquina local. Em seguida, você pode ver o arquivo .trace usando o Traceview.

    adb pull path-on-device/sample.trace ~/Documents/trace-logs/