Visão geral do Android Performance Tuner (Unity)

Este guia descreve como usar um plug-in do Unity para registrar e fazer upload de dados de tempo para a renderização do frame do Unity 2017.4 ou versão mais recente.

Para mecanismos de jogos que usam C ou C++, consulte o guia de mecanismos de jogos nativos.

Contexto

Um componente essencial da experiência do jogo é o desempenho de renderização. O desempenho de renderização é um resultado das duas seguintes entradas:

  • Frame rate: a frequência com que um frame é desenhado.
  • Configurações de qualidade gráfica: nível de fidelidade com que um frame é apresentado, incluindo fidelidade de simulação e gráficos.

Para jogos, um bom desempenho de renderização é definido da seguinte forma:

  • Apresentação de um frame rate consistente e estável (ou seja, o percentual de frames renderizados na frequência esperada).
  • Renderização de frames com a maior frequência possível, mantendo a estabilidade, normalmente de 30 ou 60 QPS, dependendo do tipo de jogo.
  • Maximização do nível de detalhes para um usuário de acordo com o tamanho e a densidade da tela, sem deixar de alcançar um frame rate esperado e estável.

A biblioteca Android Frame Pacing limita grande parte da variação nos tempos para a renderização de frames, proporcionando um frame rate estável para os jogos. O restante da variação nos tempos para a renderização se deve ao nível de detalhes exibido em algumas cenas do jogo e aos recursos gráficos do dispositivo. Com o Android Performance Tuner, é possível identificar os momentos do jogo em que o tempo para a renderização do frame fica mais lento ou mais rápido que o pretendido e relacionar esses problemas e oportunidades a:

  • Determinadas configurações de qualidade
  • Cenas específica no jogo
  • Determinados modelos ou especificações de dispositivo

Registrar e fazer upload de dados

A biblioteca Tuning Fork depende de uma das funções de marcação chamadas para cada frame pela biblioteca Android Frame Pacing (ou pelo mecanismo do Unity para versões mais antigas do Unity, em que a biblioteca Frame Pacing não está presente). Dentro da biblioteca, essas informações de marcação são agregadas a histogramas, que são periodicamente carregados no Google Play por um endpoint HTTP. Cada marcação é registrada como associada a uma chave de instrumento e uma anotação. As anotações são definidas com o plug-in do Unity.

Chaves de instrumento

Uma chave de instrumento indica o local do frame de onde a marcação é originada. A chave é um número inteiro que precisa ser transmitido para cada chamada de função da marcação. Isso é feito de forma automática pelo plug-in do Unity. Se a opção "Optimized Frame Pacing" estiver ativada nas configurações do Unity para seu jogo (disponível na versão 2019.3.14 ou mais recente do Unity), o Android Performance Tuner vai usar informações da biblioteca do Android Frame Pacing para informar métricas ajustadas.

Anotações

As anotações oferecem informações contextuais sobre o que o jogo está fazendo no momento que uma marcação é registrada. Por exemplo, uma anotação pode identificar qualquer um dos seguintes elementos:

  • O nível atual do jogo
  • Uma cena específica que está sendo carregada
  • Um "chefão" na tela
  • Outras informações relevantes sobre o estado do jogo

As anotações são definidas em uma caixa de diálogo apresentada pelo plug-in do Unity.

Internamente, a biblioteca Tuning Fork usa o formato de buffer de protocolo do Google para armazenar anotações e parâmetros de fidelidade. Esse é um protocolo bem definido e em vários idiomas para dados estruturados e extensíveis. Para ver mais informações, consulte a documentação dos buffers de protocolo.

Parâmetros de fidelidade

Os parâmetros de fidelidade influenciam o desempenho e a fidelidade gráfica do jogo, como nível de detalhe da malha, resolução da textura e método anti-aliasing. Assim como as anotações, os parâmetros de fidelidade são definidos em uma caixa de diálogo apresentada pelo plug-in do Unity.

Sobrecarga de memória e CPU

Toda a memória usada pela biblioteca Tuning Fork é alocada na inicialização para evitar surpresas durante o jogo. O tamanho dos dados depende do número de chaves de instrumento, do número de possíveis anotações e do número de buckets em cada histograma. O tamanho resulta da multiplicação de todos esses elementos vezes quatro bytes para cada bucket. Existem também duas cópias de todos os histogramas para permitir o envio em buffer duplo.

O envio ocorre em outra linha de execução e não bloqueia as chamadas de marcação. Se não houver uma conexão de upload disponível, o envio será colocado na fila para upload posterior.

Há pouca sobrecarga de processamento para chamar uma função de marcação: o sistema simplesmente calcula um índice na matriz de buckets de histograma e incrementa uma contagem de números inteiros.

Solicitações da Web

A biblioteca faz dois tipos de solicitação ao endpoint do servidor:

  • Uma solicitação generateTuningParameters na inicialização
  • Uma solicitação uploadTelemetry para enviar dados ao servidor, feita de forma periódica durante o jogo

Jogadores off-line

Caso não haja uma conexão disponível na inicialização, a solicitação é repetida várias vezes, com um tempo de espera crescente. Caso não haja conexão durante o upload, ele é armazenado em cache. Os uploads são armazenados como arquivos em um armazenamento temporário.

Requisitos

Para usar o plug-in no seu jogo, use uma versão compatível do Unity:

  • Versão 2017.4 ou mais recente do Unity e versão 4.6 do .NET.
  • O Unity 2018.2 é necessário para usar arquivos de expansão do APK
  • Para melhorar o ritmo de frames e as medidas da GPU, é necessário usar a versão 2019.3.14 ou mais recente do Unity
  • Para suporte a cenas do Addressables, é preciso ter o Unity 2019.3 ou mais recente e o pacote do Addressables 1.19.4 (link em inglês) ou mais recente

Integrar o Android Performance Tuner ao Unity

Para mais informações sobre como integrar o Android Performance Tuner no Unity, consulte Ativar a API.