A Kuro Games reduziu o consumo de energia em 9,68% usando o Power Profiler do Android Studio e o ODPM para o Wuthering Waves

Wuthering Waves é um RPG de ação de alta fidelidade desenvolvido pela Kuro Games. Otimizar o consumo de energia é muito importante para oferecer uma experiência premium sustentável para sessões de jogo longas.

Figura 1. Captura de tela do Wuthering Waves

O Android Studio introduziu o Power Profiler do Hedgehog (2023.1.1), que pode ajudar os desenvolvedores a entender os dados de consumo de energia com base no On Device Power Rails Monitor (ODPM).

Com os recursos de perfil de consumo de energia no Android Studio, você também pode fazer testes A/B de consumo de energia para os recursos do app Android (como mostrado abaixo).

Figura 2. Captura de tela do Power Profiler do Android Studio

O que a equipe fez

A Kuro Games começou a usar o Power Profiler do Android Studio para entender como os comportamentos do jogo afetam o consumo de energia do dispositivo. Essa experiência levou a equipe a desenvolver uma ferramenta personalizada com base no Perfetto e no ODPM, incorporando as seguintes melhorias:

  • Visualizações personalizadas: o desenvolvedor pode filtrar trechos de energia e predefinir períodos flexíveis.
  • Melhor manutenção: o desenvolvedor pode fazer upload dos dados de consumo de energia para o sistema de controle de qualidade personalizado e comparar os dados entre as versões do jogo.

Processar dados do ODPM

Para acessar os dados do ODPM, a Kuro Games usou a API Metric do processador de rastreamento do Perfeto (Python) para processar avg_used_power_mw data de uma sessão de 30 segundos da métrica android_powerrails, que é definida como AndroidPowerRails no proto de métricas do Perfeto, neste formato:

Power Rail Qualidade gráfica QPS Brilho Consumo médio de energia Porcentagem(por trilho / total)
power.rail.cpu.big Alta 30 Baixa 474,158 mW 14,70%
power.rail.cpu.mid Alta 30 Baixa 470,916 mW 14,60%
power.rail.cpu.little Alta 30 Baixa 438,662 mW 13,60%
power.rail.gpu Alta 30 Baixa 346,761 mW 10,70%

Identificar trilhos de energia com consumo de energia alto

Não há um valor padrão para cada trilho de energia. Para identificar trilhos de energia com alto consumo de energia, a Kuro Games criou testes A/B usando diferentes casos de teste, incluindo inatividade, execução e combate. Trilhos de energia específicos com valores obviamente altos podem ser identificados comparando valores dos mesmos trilhos de energia. Ao comparar as diferenças comportamentais em vários casos de teste, a causa raiz do problema de consumo de energia será descoberta gradualmente.

Otimizações

Com os dados do ODPM, a Kuro Games pode medir a melhoria de cada cenário de otimização:

  • Como mudar a estratégia de programação de núcleos da CPU e ajustar a prioridade de linhas de execução diferentes para reduzir a carga de trabalho de núcleos grandes
  • Pré-compilação do PSO (objeto de estado do pipeline) para reduzir a carga de trabalho de compilação do sombreador de execução da CPU
  • Implementação de eliminação de PVS (conjuntos potencialmente visíveis) para reduzir a carga de trabalho de renderização da GPU
  • Criação de culling de oclusão de sombra off-line para reduzir a carga de trabalho de renderização da GPU

Para comparar os resultados do teste em condições idênticas e reproduzíveis, a Kuro Games extraiu os dados de ODPM em um caso de teste usando a mesma cena 3D e a mesma perspectiva de câmera com a mesma duração.

Resultados

Aproveitando os dados do ODPM e do perfil de energia, a Kuro Games reduziu o consumo total de energia em 9,68%, de 3.233 mW na versão de setembro (0904) para 2.920 mW na versão de novembro (1.4 final). A figura a seguir detalha essa redução de energia com configurações consistentes de FPS e gráficos.

Figura 3. Diferenças nos dados de trilho de energia entre a versão de setembro e a de novembro

No momento, os dados do ODPM estão disponíveis apenas para o Pixel 6 e dispositivos mais recentes, mas as melhorias podem ser vistas em todos os dispositivos Android por meio de outras métricas, incluindo Uso da CPU, Uso da GPU e Batterystats. Por exemplo, a Kuro Games também teve uma redução geral de 9,6% no uso da GPU na mesma cena para o Oppo Reno 5.

Primeiros passos

Você pode começar com os dados do Power Profiler ou Perfetto Power Rails para casos de uso avançados.

Os nomes dos trilhos de energia do ODPM são específicos do dispositivo. Um nome de trilho pode ser algo como "S2S_VDD_G3D". É necessário ter conhecimento específico do hardware do dispositivo para interpretar os dados correspondentes do monitor de energia. No nível 35 da API do Android, é possível usar PowerMonitor de getSupportedPowerMonitors. Com o PowerMonitor, é possível recuperar o mapeamento entre rótulos legíveis por humanos e os nomes de trilhos de energia brutos definidos por cada OEM individual.

Para verificar a melhoria em dispositivos sem o ODPM, use os clocks da CPU, da GPU e as estimativas de largura de banda de memória como um proxy para o consumo de energia.

Outros recursos

Otimizar a eficiência energética