Analisar e otimizar o desempenho do jogo

Este guia descreve o processo de análise e otimização do desempenho de jogos em dispositivos Android para uma experiência do usuário tranquila. Ele aborda a identificação de gargalos de desempenho, a distinção entre problemas de CPU e GPU e a verificação dos resultados da otimização.

Não importa o quanto um jogo seja divertido ou envolvente, se ele não funcionar bem em dispositivos móveis, os jogadores não vão gostar, e ele não terá tanto sucesso. Até mesmo jogos divertidos podem ter problemas, como poucos frames por segundo (FPS) ou o dispositivo ficar muito quente. Esses problemas deixam os jogadores insatisfeitos. Portanto, melhorar a performance do jogo é essencial, e você precisa entender como otimizá-la.

O processo de otimização de performance envolve as seguintes etapas:

  1. Medir a performance geral do jogo. Quantifique a degradação da performance por cena para identificar anomalias.

  2. Verificação de vinculação de CPU e GPU. Descubra a causa, seja limitada pela CPU ou pela GPU.

    Ferramentas:Unreal Insight, Unity Profiler, Perfetto e ferramentas de medição de performance.

  3. Otimização da CPU. Corrija os gargalos de desempenho identificados.

    Ferramentas:Unreal Insight, Unity Profiler, Perfetto e Simpleperf.

  4. Otimização de GPU. Corrija os gargalos de desempenho identificados.

    Ferramentas:RenderDoc, Arm Mobile Studio, AGI, ferramenta específica do fornecedor.

  5. Teste A/B. Faça testes A/B para validar rigorosamente a eficácia das otimizações implementadas.

    Ferramentas:Unreal Insight, Unity Profiler, Perfetto e ferramentas de medição de desempenho, bloqueio de frequência da CPU ou GPU e RenderDoc.

  6. Esse processo iterativo (1 a 5) é mantido até que os parâmetros térmicos e de FPS desejados sejam alcançados.

Pré-requisitos

Analisar a performance abrangente do jogo

Verifique o desempenho geral do jogo e identifique qualquer degradação ou anormalidade de desempenho com base na cena. Antes de otimizar seu jogo, verifique o desempenho atual dele. Como os jogos incluem muitas interfaces e cenas, analise aquelas com alto uso de CPU ou GPU ou layouts com desempenho inesperado para monitorar a degradação do desempenho e a utilização de CPU ou GPU por cena.

  1. Quantifique a degradação da performance:use ferramentas de medição de performance para medir o desempenho geral do jogo. Meça a performance por cena para identificar áreas específicas com degradação ou anormalidades.
  2. Identifique cenas problemáticas:analise os dados para encontrar cenas com alto uso de CPU ou GPU ou em que os layouts de tela não geram o desempenho esperado.
  3. Reúna dados de rastreamento:use ferramentas de rastreamento para coletar dados detalhados de performance das cenas problemáticas identificadas.

Identificar gargalos de CPU ou GPU

Se o jogo não atingir a meta de FPS, determine se ele está limitado pela CPU ou pela GPU. Analisar o comportamento da CPU e da GPU é crucial para encontrar oportunidades de otimização, mesmo quando o dispositivo esquenta ou usa muita energia durante o gameplay. É possível usar vários métodos para descobrir se o sistema está limitado à CPU ou à GPU.

  1. Analisar dados de rastreamento:use sua ferramenta preferida para analisar dados de rastreamento:

    • Unreal Insight (Unreal Engine): analise o rastreamento para conferir o tempo de GameThread, RenderThread e RHIThread.
      • Se GameThread ou RenderThread excederem o limite de tempo para a renderização do frame (por exemplo, 33,3 ms para 30 QPS), o jogo será limitado pela CPU.
      • Se RHIThread apresentar execução prolongada ou representar a maioria do tempo para a renderização do frame, o jogo será limitado pela GPU.
    Linha do tempo de rastreamento do Unreal Insight mostrando os tempos de execução de GameThread, RenderThread e RHIThread
    Figura 2. Unreal insight trace com GameThread, RenderThread e RHIThread (clique para ampliar).
    • Unity Profiler (Unity): se a linha de execução principal consumir muito tempo em marcadores como Gfx.WaitForPresentOnGfxThread enquanto a linha de execução de renderização mostrar Gfx.PresentFrame ou <GraphicsAPIName>.WaitForLastPresent, o jogo estará vinculado à GPU.
    Linha do tempo do Unity Profiler mostrando a linha de execução principal aguardando Gfx.WaitForPresentOnGfxThread
    Figura 3. Exemplo de vinculação de GPU para o Unity Profiler (clique para ampliar).
    • Perfetto:analise as atribuições de núcleos da CPU e os detalhes de execução de linhas de execução. Essa análise facilita a identificação de gargalos de desempenho com a revisão detalhada das informações de execução de linhas de execução.
    • Sobrecarga da CPU:o rastreamento indica que a carga de trabalho em GameThread e RenderThread, em conjunto com o VSync, é responsável por atrasos no QueuePresent da linha de execução RHI, indicando um cenário vinculado à CPU.

      Rastreamento do Perfetto mostrando os tempos de execução de GameThread, RenderThread e RHIThread
      Figura 4. Traces do Perfetto com detalhes da execução da CPU (clique para ampliar).
    • Sobrecarga da GPU:se o tempo de conclusão da GPU exceder o limite de tempo para a renderização do frame, por exemplo, 25 ms, o jogo será vinculado à GPU. O rastreamento indica que a conclusão da GPU excede 25 ms, o que significa um cenário vinculado à GPU.

      Rastreamento do Perfetto mostrando o bloco de conclusão da GPU aguardando a conclusão da GPU
      Figura 5. Rastreamentos do Perfetto com detalhes de sobrecarga da GPU (clique para ampliar).
  2. Usar comandos de estatísticas do Unreal Engine:

    • stat unit:compare o tempo alocado para as linhas de execução de jogo, desenho e RHI. Se os tempos de jogo e de renderização forem baixos, mas o tempo de RHI exceder consistentemente o limite de tempo para a renderização do frame, o jogo será limitado pela GPU. Por exemplo, se o FPS necessário for 30 (equivalente a 33,33 ms por frame) e as linhas de execução do jogo e de desenho permanecerem consistentemente dentro de um intervalo de 10 a 15 ms, mas o RHI exceder consistentemente 30 ms, isso sugere um cenário vinculado à GPU.
    Sobreposição da unidade de estatísticas mostrando os tempos de execução de Frame, Game, Draw, GPU e RHIT
    Figura 6. A unidade de estatística facilita a estimativa de condições vinculadas à GPU.
    • stat VulkanRHI:verifique as durações de envio e apresentação da fila.
    Sobreposição Stat VulkanRHI mostrando contadores de ciclo para envio e apresentação de fila
    Figura 7. O Stat VulkanRHI facilita a estimativa de condições vinculadas à GPU (clique para ampliar).
    • stat slow:analise o tempo alocado para as linhas de execução de jogo, renderização e RHI para identificar impedimentos.
  3. Verifique as métricas de performance:use os resultados da sua análise abrangente de performance do jogo. No Android:

    • Limitado pela CPU:uso da CPU (normalizado) maior que 15%, com baixo uso da GPU e baixa taxa de frames por segundo (FPS).
    • Limitado pela GPU:uso da GPU maior que 90%.

    Normalmente, se o FPS e o uso da GPU estiverem baixos enquanto o uso da CPU exceder 15%, a situação poderá ser considerada vinculada à CPU.

    Tabelas de métricas de desempenho destacando cenários vinculados à CPU e à GPU
    Figura 8. Métricas de desempenho com uso de CPU e GPU.

Otimizar o desempenho da CPU

Se a análise indicar que o jogo é vinculado à CPU, investigue mais para identificar threads ou APIs específicas que estão causando o gargalo.

Para orientações detalhadas, consulte Dicas de otimização de CPU e GPU para Android.

Otimizar o desempenho da GPU

Se a análise indicar que o jogo está vinculado à GPU, investigue mais usando depuradores de frames para analisar o pipeline de renderização e as chamadas de desenho.

Para orientações detalhadas, consulte Dicas de otimização de CPU e GPU para Android.

Verificar a eficácia da otimização

  1. Faça testes A/B:crie um build com as otimizações implementadas.
  2. Meça o desempenho:use as mesmas ferramentas e métodos da análise inicial para medir o desempenho do build otimizado.
  3. Comparar resultados:compare os novos dados de performance com os iniciais para confirmar se os gargalos identificados foram resolvidos e se as metas de FPS e térmicas foram atingidas.
  4. Iterar:repita as etapas de análise e otimização até alcançar a performance desejada.

Veja também