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:
Medir a performance geral do jogo. Quantifique a degradação da performance por cena para identificar anomalias.
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.
Otimização da CPU. Corrija os gargalos de desempenho identificados.
Ferramentas:Unreal Insight, Unity Profiler, Perfetto e Simpleperf.
Otimização de GPU. Corrija os gargalos de desempenho identificados.
Ferramentas:RenderDoc, Arm Mobile Studio, AGI, ferramenta específica do fornecedor.
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.
Esse processo iterativo (1 a 5) é mantido até que os parâmetros térmicos e de FPS desejados sejam alcançados.
Pré-requisitos
Ter um build de jogo pronto para teste em um dispositivo Android.
Instale as seguintes ferramentas:
- Unreal Insight (link em inglês)
- Unity Profiler
- Perfetto
- RenderDoc
- Arm Mobile Studio (em inglês)
- Qualcomm Snapdragon Profiler
- Android GPU Inspector (AGI)
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.
- 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.
- 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.
- 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.
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,RenderThreadeRHIThread.- Se
GameThreadouRenderThreadexcederem 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
RHIThreadapresentar execução prolongada ou representar a maioria do tempo para a renderização do frame, o jogo será limitado pela GPU.
- Se
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.WaitForPresentOnGfxThreadenquanto a linha de execução de renderização mostrarGfx.PresentFrameou<GraphicsAPIName>.WaitForLastPresent, o jogo estará vinculado à GPU.
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
GameThreadeRenderThread, em conjunto com o VSync, é responsável por atrasos noQueuePresentda linha de execução RHI, indicando um cenário vinculado à CPU.
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.
Figura 5. Rastreamentos do Perfetto com detalhes de sobrecarga da GPU (clique para ampliar).
- Unreal Insight (Unreal Engine): analise o rastreamento para conferir o tempo de
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.
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.
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.
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.
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
- Faça testes A/B:crie um build com as otimizações implementadas.
- Meça o desempenho:use as mesmas ferramentas e métodos da análise inicial para medir o desempenho do build otimizado.
- 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.
- Iterar:repita as etapas de análise e otimização até alcançar a performance desejada.