Sessões lentas (somente jogos)

As sessões lentas são uma nova métrica do Android vitals no Google Play Console. Uma lentidão é uma sessão em que mais de 25% dos frames estão lentos. Um quadro é lento quando não é apresentado menos de 50 ms depois do frame anterior; (equivalente a 20 QPS). O Android vitals também informa uma segunda sessão lenta com uma meta de 34 ms (equivalente a 30 QPS). Com as sessões lentas, você de entender o desempenho do frame rate do jogo, o que afeta a forma suave e fluida do jogo para os usuários.

No futuro, o Google Play começará a direcionar os usuários para outros tipos de jogos que não podem a 20 QPS nos smartphones. O Android vitals só começa a monitorar depois que o jogo estiver em execução por um minuto.

Acesse a Central de Ajuda para mais detalhes. sobre a métrica.

Gráficos de pizza que mostram o número de frames lentos e frames não lentos.
Figura 1. Uma sessão lenta no Android vitals.
.

Como medir o QPS e detectar frames lentos

O comando dumpsys surfaceflinger timestats do Android fornece uma média de QPS e Histograma de tempo presente para apresentar para todas as camadas que estão sendo renderizado. O tempo do presente até o presente de um frame é o intervalo entre o frame atual e o frame anterior que estão sendo desenhados. Aqui estão Etapas por etapas para usar o comando e coletar os QPS do jogo:

  1. Execute o comando com as sinalizações enable e clear para iniciar a captura informações:

    adb shell dumpsys SurfaceFlinger --timestats -clear -enable
    
  2. Quando o jogo for jogado por tempo suficiente, execute o comando novamente com flag dump para fazer o despejo de informações:

    adb shell dumpsys SurfaceFlinger --timestats -dump
    

    As informações despejadas fornecem o total de frames e o histograma presentToPresent para todas as camadas renderizadas por SurfaceFlinger. Você deve encontrar a seção do jogo filtrando com base em layerName:

    layerName = SurfaceView[com.google.test/com.devrel.MainActivity]@0(BLAST)#132833
    

    O frame rate lento da sessão pode ser calculado com base nas informações do cada camada.

    Por exemplo, a porcentagem de frames lentos de 20 QPS é igual a (soma dos valores de 54 ms a 1.000 ms) / totalFrames x 100

    totalFrames = 274
    ...
    presentToPresent histogram is as below:
    0ms=0 1ms=0 2ms=0 3ms=0 4ms=0 5ms=0 6ms=0 7ms=0 8ms=0 9ms=0 10ms=0 11ms=0 12ms=0
    13ms=0 14ms=0 15ms=0 16ms=1 17ms=0 18ms=0 19ms=0 20ms=0 21ms=0 22ms=0 23ms=0
    24ms=0 25ms=0 26ms=0 27ms=0 28ms=0 29ms=0 30ms=0 31ms=0 32ms=0 33ms=269 34ms=0
    36ms=0 38ms=0 40ms=0 42ms=0 44ms=0 46ms=0 48ms=0 50ms=1 54ms=0 58ms=0 62ms=0
    66ms=0 70ms=1 74ms=0 78ms=0 82ms=0 86ms=0 90ms=0 94ms=0 98ms=0 102ms=0 106ms=0
    110ms=0 114ms=0 118ms=0 122ms=0 126ms=0 130ms=0 134ms=0 138ms=0 142ms=0 146ms=0
    150ms=0 200ms=0 250ms=0 300ms=0 350ms=0 400ms=0 450ms=0 500ms=0 550ms=0 600ms=0
    650ms=0 700ms=0 750ms=0 800ms=0 850ms=0 900ms=0 950ms=0 1000ms=0
    

    A média de QPS de cada camada também é mostrada no despejo:

    ...
    averageFPS = 30.179
    ...
    
  3. Depois de coletar todas as informações, desative o timestats usando a sinalização disable:

    adb shell dumpsys SurfaceFlinger --timestats -disable
    

Causas e soluções de frames lentos

Um frame pode aparecer ou ser renderizado por mais tempo na tela por vários motivos que o destino do desenvolvedor. O jogo pode estar vinculado à CPU/GPU. Ou o dispositivo está superaquecendo e ativa um estado térmico limitado. Ou há incompatibilidade entre o frame rate do jogo e a tela do dispositivo taxa de atualização.

Use o Android Frame Pacing (Swappy), Vulkan e ADPF para resolver esses problemas e melhorar o desempenho do jogo.

O que é o Swappy

A biblioteca Android Frame Pacing, também conhecida como Swappy, faz parte do Bibliotecas do AGDK. O Swappy ajuda jogos OpenGL e Vulkan oferecem uma renderização suave e o ritmo correto de frames no Android.

que é a sincronização da lógica e do loop de renderização de um jogo subsistema de exibição de um SO e o hardware de exibição subjacente. O Android o subsistema de exibição foi projetado para evitar artefatos visuais (conhecidos como rupturas) que pode ocorrer quando o hardware da tela muda para um novo frame no meio do caminho por meio de uma atualização. Para evitar esses artefatos, o subsistema de exibição o seguinte:

  • Armazena frames anteriores em buffer internamente
  • Detecta envios de frames atrasados
  • Repete a exibição de frames anteriores quando frames atrasados são detectados

Como usar o Swappy em projetos nativos

Consulte os guias abaixo para integrar a biblioteca Android Frame Pacing no seu jogo:

Como usar o Swappy no mecanismo de jogo do Unity.

O Unity integrou o Android Frame Pacing ao mecanismo. Para ativar no Unity 2019.2 ou superior, marque a caixa de seleção "Optimized Frame Pacing" em Project Settings > Jogador > Configurações para Android > Resolução e apresentação:

Caixa de diálogo "Configurações do projeto".
Figura 2. Ative o Frame Pacing no Unity Engine.

Como alternativa, ative de maneira programática a opção otimizada de ritmo de frames no seu código lógico para permitir que o Unity distribua frames para ter menos variação de frame rate, criando uma jogabilidade mais suave.

Como usar o Swappy no mecanismo de jogo Unreal

O Unreal 4.25 e versões mais recentes integram a biblioteca Android Frame Pacing, que faz parte da Android Game Development Kit O artigo Mobile Frame Pacing explica como ativar o Android Biblioteca Frame Pacing e como controlar o ritmo de frames pelo código C++.

O que é o Vulkan

Vulkan é uma API moderna de gráficos 3D em várias plataformas projetada para minimizar a abstração entre o hardware gráfico do dispositivo e o seu jogo. O Vulkan é a principal API gráfica de baixo nível no Android, substituindo o OpenGL ES. O OpenGL ES ainda está disponível no Android, mas não está mais em desenvolvimento ativo de recursos.

O Vulkan oferece as seguintes vantagens sobre o OpenGL ES:

  • Uma arquitetura mais eficiente com menor overhead de CPU no driver gráfico
  • Novas estratégias de otimização para melhorar o desempenho da CPU
  • Novos recursos gráficos não disponíveis no OpenGL ES, como APIs sem vínculo e traçado de raio

Como usar o Vulkan em projetos nativos do Android

O codelab Introdução ao Vulkan no Android orienta você na configuração o pipeline de renderização do Vulkan e, em seguida, renderizando um triângulo texturizado e giratório na tela. Use o codelab para aprender a renderizar os elementos gráficos do seu jogo.

Como usar o Vulkan no mecanismo de jogo do Unity

Para ativar a seleção automática de dispositivos no Unity, siga as etapas de configuração API Auto Graphics.

Caixa de diálogo "Configurações do projeto".
Figura 3. Ative a API Unity Auto Graphics.

Como alternativa, você pode ativar o Vulkan manualmente desativando a API Auto Graphics (link em inglês), e colocar o Vulkan na prioridade mais alta na lista APIs gráficas. Se você estiver usando o Unity 2021.1 ou uma versão anterior, essa é a única maneira de usar o Vulkan.

Caixa de diálogo "Configurações do projeto".
Figura 4. Escolha manualmente o Vulkan como a API Graphics principal no Unity.

Usar o plug-in do mecanismo VkQuality Unity (link em inglês) para fornecer recomendações de tempo de inicialização da API gráfica para seu jogo usar em dispositivos específicos.

Como usar o Vulkan no mecanismo de jogo Unreal

Para ativar a API gráfica Vulkan, acesse Configurações do projeto > Plataformas > Android > Criar e selecionar Suporte para Vulkan. Quando você seleciona Suporte Vulkan e Suporte ao OpenGL ES3.2, o Unreal usa o Vulkan por padrão. Se o dispositivo não oferecer suporte ao Vulkan, o Unreal voltará para o OpenGL ES 3.2.

Caixa de diálogo "Configurações do projeto".
Figura 5. Ative o Vulkan no Unreal Engine.

Se você estiver usando recursos específicos do Vulkan que costumam apresentar mau comportamento determinados dispositivos, você pode personalizar seu arquivo BaseDeviceProfile.ini para excluir nesses dispositivos. Confira Como personalizar perfis e escalonabilidade de dispositivos para Android para saber como personalizar BaseDeviceProfile.ini. pois os novos drivers de dispositivo talvez já tenham sido corrigidos dispositivos ruins conhecidos, mantenha o arquivo BaseDeviceProfile.ini atualizado para as otimizações.

O que é o ADPF

O Android Dynamic Performance Framework (ADPF) (link em inglês) otimiza jogos com base nos recursos dinâmicos de gerenciamento de temperatura, CPU e GPU no Android. O foco são os jogos, mas você também pode usar os recursos para outros que exigem alto desempenho.

O ADPF é um conjunto de APIs que permitem que jogos e apps de alta performance interajam mais diretamente com os sistemas térmicos e de energia de dispositivos Android. Com essas APIs, você pode monitorar o comportamento dinâmico nos sistemas Android e otimizar o desempenho do jogo em um nível sustentável que não superaqueça os dispositivos.

Estes são os principais recursos do ADPF:

  • API Thermal: monitore o estado térmico de um dispositivo para que o app possa ajustar proativamente a carga de trabalho antes que ela se torne insustentável.
  • API CPU Performance Hint: fornece dicas de desempenho que permitem que o Android escolha as configurações corretas de desempenho (por exemplo, ponto operacional ou núcleo da CPU) para a carga de trabalho.
  • API Game Mode e Game State: para ativar a otimização do jogo, priorize as características de desempenho ou duração da bateria com base nas configurações do usuário e específicas do jogo.
  • Modo de desempenho fixo: ative o modo de performance fixa em um dispositivo durante a comparação para receber medições que não são alteradas pelo relógio dinâmico da CPU.
  • Modo de eficiência de energia: informa à sessão que as linhas de execução na sessão de dicas de desempenho podem ser agendadas com segurança para priorizar a eficiência energética em vez do desempenho. Disponível no Android 15 (nível 35 da API).

Como usar o ADPF em projetos nativos do Android

O codelab Como integrar recursos de adaptabilidade ao seu jogo nativo orienta você para integrar os recursos do ADPF aos seus com etapas que você pode seguir no seu próprio ritmo. No fim do ciclo de vida codelab, você terá integrado os seguintes recursos:

  • API Thermal: detecta a condição térmica do dispositivo e reage antes que ele entre no estado de limitação térmica.
  • API Game Mode: entenda as preferências de otimização dos jogadores (maximize o desempenho ou economize bateria) e faça os ajustes necessários.
  • API Game State: permite que o sistema saiba o estado do jogo (carregamento, jogo, interface etc.) para que ele possa ajustar os recursos adequadamente (aumentar E/S ou CPU, GPU etc.).
  • API Performance Hint: informe o modelo da linha de execução e a carga de trabalho para que o sistema possa alocar recursos adequadamente.

Como usar o ADPF no mecanismo de jogo do Unity.

O Desempenho adaptável do Unity é um para desenvolvedores que querem otimizar jogos em dispositivos móveis, especialmente para o ecossistema Android diversificado. A Desempenho adaptável permite seu jogo para se adaptar ao desempenho e às características térmicas do dispositivo em em tempo real, o que garante uma experiência de jogo tranquila e eficiente.

Provedor Android de desempenho adaptativo vai guiar você pelas etapas para implementar o ADPF no Unity.

Caixa de diálogo "Configurações do projeto".
Figura 6. Integre o ADPF ao Unity Engine.

Como usar o ADPF no mecanismo de jogo Unreal

Caixa de diálogo "Configurações do projeto".
Figura 7. Integre o ADPF ao Unreal Engine.
  1. Faça o download do plug-in
  2. Copie o plug-in na pasta de plug-ins do projeto.
  3. Ativar o plug-in do Unreal Engine do ADPF no editor do Unreal
  4. Reiniciar editor do Unreal
  5. Criar e preparar o jogo

Plug-in Android Dynamic Performance Framework(ADPF) para o Unreal Engine oferece desempenho estável e impede a limitação térmica. Fazer o download do plug-in do GitHub. Este plug-in altera recursos ao configurar Valores do Unreal Console (link em inglês).