O Android inclui algumas opções do desenvolvedor no dispositivo que ajudam a visualizar onde o aplicativo pode encontrar problemas na renderização da IU, como a execução de mais trabalho de renderização que o necessário ou a execução de operações longas de encadeamento e GPU. Esta página descreve como depurar o overdraw da GPU e a criação do perfil da renderização de GPU.
Para saber mais sobre as opções do desenvolvedor no dispositivo, incluindo a forma de ativá-las, leia Configurar opções do desenvolvedor no dispositivo.
Velocidade da criação do perfil de renderização de GPU
A ferramenta Criação do perfil de renderização de GPU exibe em um histograma com rolagem uma representação visual de quanto tempo é necessário para renderizar os quadros de uma janela de IU em relação a uma referência de 16 ms por quadro.
Em GPUs menos poderosas, a taxa de preenchimento (a velocidade em que a GPU pode preencher o buffer do quadro) pode ser muito baixa. À medida que cresce o número de pixels necessários para desenhar um quadro, a GPU pode demorar mais para processar novos comandos e solicitar que o resto do sistema aguarde até conseguir concluir a atividade. A ferramenta de criação do perfil ajuda a identificar quando a GPU fica sobrecarregada tentando desenhar pixels ou por grande overdraw.
Ativar o criador de perfil
Antes de começar, verifique se está usando um dispositivo com o Android 4.1 (API de nível 16) ou mais recente e se ativou as opções do desenvolvedor. Para começar a criação do perfil de renderização da GPU do dispositivo durante o uso do aplicativo, faça o seguinte:
- No dispositivo, vá para Configurações e toque em Opções do desenvolvedor.
- Na seção Monitoramento, selecione Criação do perfil de renderização de GPU.
- Na caixa de diálogo Criação do perfil de renderização de GPU, escolha Na tela em barras para sobrepor os gráficos na tela do dispositivo.
- Abra o aplicativo para o qual você quer criar o perfil.
Inspecionar a saída
Na imagem ampliada do gráfico da Criação do perfil de renderização de GPU, mostrada na figura 1, você pode ver a seção colorida como exibida no Android 6.0 (API de nível 23).
Figura 1. Gráfico ampliado da Criação do perfil de renderização de GPU.
Veja a seguir algumas observações sobre a saída:
- A ferramenta exibe um gráfico para cada aplicativo visível.
- Cada barra vertical ao longo do eixo horizontal representa um quadro. A altura de cada barra vertical representa a quantidade de tempo necessária para a renderização do quadro (em milissegundos).
- A linha verde horizontal representa 16 milissegundos. Para alcançar 60 quadros por segundo, a barra vertical de cada quadro precisa estar acima dessa linha. A qualquer momento que uma barra ultrapassar essa linha, poderão ocorrer pausas nas animações.
- A ferramenta destaca quadros que excederam o limite de 16 milissegundos aumentando a largura da barra e reduzindo a transparência.
- Cada barra tem componentes coloridos que são mapeados a uma etapa no pipeline de renderização. O número de componentes varia de acordo com o nível de API do dispositivo.
A tabela a seguir oferece descrições de cada segmento de uma barra vertical na saída do criador de perfil ao usar um dispositivo executando Android 6.0 ou posterior.
Componente da barra | Etapa de renderização | Descrição |
---|---|---|
Swap Buffers | Representa o tempo que a CPU aguarda para que a GPU conclua seu trabalho. Se essa barra fica alta, isso significa que o aplicativo está fazendo trabalho excessivo na GPU. | |
Command Issue | Representa o tempo que o renderizador 2D do Android leva para emitir comandos para que o OpenGL desenhe e redesenhe listas de exibição. A altura dessa barra é diretamente proporcional à soma do tempo necessário para a execução de cada lista de exibição. Mais listas de exibição equivalem a uma barra vermelha mais alta. | |
Sync & Upload | Representa o tempo necessário para fazer upload das informações de bitmap para a GPU. Um segmento grande indica que o app está passando um tempo considerável carregando grandes quantidades de gráficos. | |
Draw | Representa o tempo usado para criar e atualizar as listas de exibição da visualização. Se essa parte da barra fica alta, isso indica um possível excesso de desenho de visualizações personalizadas ou muito trabalho em métodos onDraw. | |
Measure/Layout | Representa o tempo gasto em retornos de chamada OnLayout e onMeasure na hierarquia de visualização. Um segmento grande indica que o processamento da hierarquia de visualização está demorando muito. | |
Animation | Representa o tempo necessário para avaliar todos os animadores que estavam sendo executados nesse quadro. Se esse segmento estiver grande, é possível que o aplicativo esteja usando um animador personalizado com desempenho inadequado ou que algum trabalho inesperado esteja ocorrendo como resultado da atualização de propriedades. | |
Input Handling | Representa o tempo dispendido pelo aplicativo executando código dentro de um retorno de chamada de evento de entrada. Um segmento grande indica que o aplicativo está levando muito tempo para processar a entrada do usuário. Considere a transferência desse processamento para um encadeamento diferente. | |
Misc Time/VSync Delay | Representa o tempo que o aplicativo leva para executar operações entre dois quadros consecutivos. Pode ser um indicador de excesso de processamento no encadeamento de IU, que poderia ser transferido para um encadeamento diferente. |
Tabela 1. Barras de componentes no Android 6.0 ou versões mais recentes.
As versões do Android entre 4.0 (API de nível 14) e 5.0 (API de nível 21) têm segmentos azul, roxo, vermelho e laranja. As versões do Android abaixo de 4.0 têm apenas componentes azul, vermelho e laranja. A tabela a seguir mostra as barras de componentes no Android 4.0 e 5.0.
Componente da barra | Etapa de renderização | Descrição |
---|---|---|
Process | Representa o tempo que a CPU aguarda para que a GPU conclua seu trabalho. Se essa barra fica alta, isso significa que o aplicativo está fazendo trabalho excessivo na GPU. | |
Execute | Representa o tempo que o renderizador 2D do Android leva para emitir comandos para que o OpenGL desenhe e redesenhe listas de exibição. A altura dessa barra é diretamente proporcional à soma do tempo necessário para a execução de cada lista de exibição. Mais listas de exibição equivalem a uma barra vermelha mais alta. | |
XFer | Representa o tempo necessário para fazer upload das informações de bitmap para a GPU. Um segmento grande indica que o app está passando um tempo considerável carregando grandes quantidades de gráficos. Esse segmento não é visível em dispositivos executando o Android 4.0 ou versões anteriores. | |
Update | Representa o tempo usado para criar e atualizar as listas de exibição da visualização. Se essa parte da barra fica alta, isso indica um possível excesso de desenho de visualizações personalizadas ou muito trabalho em métodos onDraw. |
Tabela 2. Barras de componentes no Android 4.0 e 5.0.
Para mais informações sobre como interpretar as informações fornecidas pela ferramenta de criação do perfil, leia Analisar com a Criação do perfil de renderização de GPU.
Observação: embora essa ferramenta seja denominada Criação do perfil de renderização de GPU, todos os processos monitorados ocorrem na CPU. A renderização ocorre mediante o envio de comandos para a GPU, que gera a tela de forma assíncrona. Em algumas situações, a GPU pode ter muito trabalho para fazer, e a CPU terá de aguardar antes de enviar novos comandos. Quando isso acontecer, você verá picos nas barras laranja e vermelha, e o envio de comandos será bloqueado até que mais espaço seja liberado na fila de comandos da GPU.
Visualizar o overdraw da GPU
Outro recurso nas opções do desenvolvedor ajuda a identificar o overdraw codificando a IU em cores. O overdraw ocorre quando o app desenha o mesmo pixel mais de uma vez no mesmo frame. Dessa forma, essa visualização mostra onde o aplicativo pode estar executando mais trabalho de renderização que o necessário, o que pode ser um problema de desempenho devido ao esforço extra da GPU para renderizar pixels que não ficarão visíveis para o usuário. Portanto, é preciso corrigir eventos de overdraw sempre que possível.
Se você ainda não ativou as opções do desenvolvedor, ative-as agora. Em seguida, para visualizar o excesso de renderização no dispositivo, faça o seguinte:
- No dispositivo, vá para Configurações e toque em Opções do desenvolvedor.
- Role para baixo até a seção Renderização acelerada por hardware e selecione Depurar overdraw da GPU.
- Na caixa de diálogo Depurar overdraw da GPU, selecione Mostrar áreas de overdraw.
O Android colore os elementos de IU para identificar o volume de excesso de renderização da seguinte forma:
- Cor verdadeira: sem overdraw
Azul: overdraw (uma vez)
Verde: overdraw (duas vezes)
Rosa: overdraw (três vezes)
Vermelho: overdraw (quatro vezes)

Figura 2. Um app exibido da forma normal (esquerda) e com overdraw de GPU ativado (direita).
Observe que essas cores são semitransparentes. Portanto, a cor exata visualizada na tela depende do conteúdo da IU.
Agora que você pode reconhecer onde ocorre o overdraw no layout, leia Reduzir o overdraw.
Lembre-se de que algum excesso de renderização é inevitável. À medida que você ajusta a interface do usuário do aplicativo, tente conseguir uma visualização que mostre, na maioria, cores reais ou excesso de renderização de apenas 1 vez (azul).

Figura 3. Exemplos de um app com muito overdraw (esquerda) e com pouco overdraw (direita).