Solução de problemas no AGI

Este tópico descreve como corrigir problemas comuns ao usar o Android GPU Inspector (AGI) .

Redefinindo as configurações do AGI

O AGI armazena as configurações no arquivo ~/.agic. A remoção desse arquivo exclui todas as configurações do AGI, incluindo a lista de rastros abertos recentemente e os resultados da validação do dispositivo.

O AGI falha em alguns dispositivos

Verifique se a configuração atende a todos os requisitos.

As ações a seguir também podem ajudar:

  • Interrompa todos os programas que possam interagir com o dispositivo por adb, como o Android Studio.

  • Ative a opção Stay awake (nas Opções do desenvolvedor no Android) para evitar problemas que surgem quando a tela do dispositivo é desligada devido ao modo de espera.

O criador de perfil do sistema não informa a atividade da GPU para jogos OpenGL ES

Atualmente, apenas os contadores de GPU são compatíveis ao rastrear um aplicativo OpenGL ES. As informações de atividade da GPU para aplicativos OpenGL ES estão em desenvolvimento ativo.

O Frame Profiler falha em alguns jogos Vulkan

A primeira coisa a ser verificada é se o jogo usa o Vulkan corretamente. Use a camada de validação da Vulkan e verifique se o jogo não gera erros ou avisos.

Se houver algum erro de validação do Vulkan, não é esperado que o criador de perfil de frames AGI funcione.

Falha no jogo ao criar um rastro do criador de perfil de frame

Se o jogo for executado sem o AGI, mas não for executado ao criar um rastro de perfil de frame, o jogo pode estar bifurcando um processo diferente durante a sequência de inicialização. Nesse caso, é necessário especificar o nome do processo a ser rastreado no campo "Nome do processo" nas opções de trace.

Para identificar esse problema, você pode verificar a saída do logcat ao criar um rastro e verificar se outro processo está sendo iniciado:

# Clear the logcat output
adb logcat -c

## Use AGI to attempt to create a frame profile trace

Look at the logcat output to identify the processes that are running AGI. 

adb logcat | grep "this process name"
I GAPID   : gapii [gapii/cc/spy.cpp:109] this process name: com.example.mygame
I GAPID   : gapii [gapii/cc/spy.cpp:109] this process name: com.example.mygame:GameProcess

A maioria dos jogos tem apenas um processo. O exemplo acima mostra o que esperar para um jogo com mais de um.

O jogo começa em um processo principal chamado com.example.mygame e, em seguida, bifurca um novo processo chamado com.example.mygame:GameProcess. Se a renderização real do jogo acontecer no segundo processo, você vai precisar informar ao AGI que esse é o processo que você quer rastrear. Para fazer isso, insira o nome do processo no campo Process name da caixa de diálogo de opções de rastreamento.

Falha no jogo depois de usar o AGI

Se um rastro não for encerrado corretamente, o AGI poderá deixar algumas configurações do Android em um estado que pode interromper as execuções subsequentes do app. Estas são as configurações:

  • Configurações relacionadas às camadas da Vulkan:

    • enable_gpu_debug_layers

    • gpu_debug_app

    • gpu_debug_layers

    • gpu_debug_layer_app

  • Configurações relacionadas ao ANGLE:

    • angle_debug_package

    • angle_gl_driver_selection_values

    • angle_gl_driver_selection_pkgs

Se o app tiver algum problema depois de usar o AGI, tente limpar essas configurações com os seguintes comandos adb:

# Vulkan layers
adb shell settings delete global enable_gpu_debug_layers
adb shell settings delete global gpu_debug_app
adb shell settings delete global gpu_debug_layers
adb shell settings delete global gpu_debug_layer_app
# ANGLE
adb shell settings delete global angle_debug_package
adb shell settings delete global angle_gl_driver_selection_values
adb shell settings delete global angle_gl_driver_selection_pkgs

O jogo tem um visual diferente ao ser iniciado via AGI durante a criação de um rastro de perfil do frame

Para criar um rastreamento de perfil de frame, o AGI intercepta as chamadas de API gráfica feitas pelo jogo, o que pode afetar as renderizações.

O AGI captura chamadas do Vulkan. Para jogos com OpenGL ES, o AGI depende do ANGLE para converter o OpenGL ES para o Vulkan. Se o jogo tiver um visual diferente (por exemplo, algumas cores não são as esperadas) ao lançá-lo pelo AGI, provavelmente é um bug no AGI ou no ANGLE. Para nos ajudar a entender melhor a causa raiz do problema, faça o seguinte.

Jogos Vulkan: rastreamento com todas as extensões Vulkan compatíveis

A opção de rastreamento Include Unknown Extensions controla se o AGI precisa incluir extensões Vulkan sem suporte. Procure uma lista de extensões compatíveis.

Caso o app use uma extensão sem suporte do AGI, você poderá encontrar comportamentos indesejados, incluindo erros ou falhas sutis, ao repetir o rastreamento.

Tente ativar essa opção e, em seguida, inicie outro rastro do criador de perfil de frame. Se o jogo for exibido conforme o esperado com a opção ativada, ele pode depender de uma extensão do Vulkan sem suporte do AGI.

Jogos OpenGL ES: executar somente com o ANGLE

Você pode executar seu jogo OpenGL ES com o ANGLE, mas sem o AGI, para ver se a renderização errada vem de um problema no ANGLE.

Se você já tentou criar um rastro de perfil de frame do seu jogo OpenGL ES, o AGI já instalou o ANGLE no seu dispositivo. O pacote ANGLE usado pelo AGI é chamado de org.chromium.angle.agi.

Para forçar a execução do jogo no ANGLE, use os seguintes comandos:

# Make sure that the AGI capture layer will be ignored
adb shell settings delete global enable_gpu_debug_layers
# Force the package com.example.mygame to use ANGLE
adb shell settings put global angle_debug_package org.chromium.angle.agi
adb shell settings put global angle_gl_driver_selection_values angle
adb shell settings put global angle_gl_driver_selection_pkgs com.example.mygame

Se o jogo parecer diferente com essas configurações, provavelmente é um bug no ANGLE e não no AGI. Se o jogo parece correto com essas configurações, mas parece diferente ao criar um rastro do AGI, provavelmente é um bug no AGI.

Você pode denunciar bugs do AGI criando um problema do GitHub.