O Profile Analyzer é um dos muitos recursos abordados no e-book Guia definitivo para criação de perfis em jogos Unity. Este guia de mais de 70 páginas reúne conhecimento avançado e conselhos de especialistas externos e internos em Unity sobre como criar o perfil de um aplicativo em Unity, gerenciar sua memória e otimizar seu consumo de energia do início ao fim.
Passo a passo do Profile Analyzer
Você quer saber onde pode melhorar o desempenho? Você precisa comparar o desempenho antes e depois de uma alteração? Você tem conhecimento do impacto de uma atualização na versão do Unity sobre o jogo? O Profile Analyzer o ajudará a responder a esse tipo de pergunta.
Embora o Unity Profiler padrão permita que você faça uma análise de quadro único, o Profile Analyzer pode agregar e visualizar dados de marcadores de perfil capturados de um conjunto de quadros do Unity Profiler.
O Profile Analyzer ajuda você a identificar onde concentrar seus esforços. Ele oferece uma maneira de comparar duas capturas de perfil de desempenho do Unity lado a lado e inspecionar os impactos de suas alterações.
O Profile Analyzer complementa a análise de quadro único já disponível no Unity Profiler. Ele agrega e visualiza dados de quadros e marcadores de uma variedade de quadros do Unity Profiler para ajudá-lo a ver padrões de alto nível de desempenho ao longo do tempo em muitos quadros.
O Profile Analyzer realiza a análise de desempenho da CPU em vários quadros dos quadros da sessão atual do Profiler ou de capturas salvas anteriormente. A ferramenta vem com estatísticas e visualizações para ajudá-lo a analisar rapidamente as informações armazenadas nas capturas. Seu recurso de filtragem abrangente também permite que você se aprofunde nas seções de seu interesse. Você pode usá-lo para comparar dois conjuntos de dados ou pode exportar dados brutos para análise com outras ferramentas.
Você pode instalar o Profile Analyzer em Window > Package Manager.
Estas dicas de criação de perfil podem ajudá-lo a começar a usar o Profile Analyzer:
Obtenha uma captura representativa e repetível.
Feche todos os outros aplicativos. Você pode usar Profiler.logFile em seus scripts C# para gravar dados de perfil diretamente do jogo em execução, o que significa que não é necessário que o Editor esteja aberto. Ele grava um arquivo .raw que você pode carregar no Unity Profiler posteriormente.
Desative todos os recursos de aumento ou dimensionamento de desempenho de hardware da CPU para que não haja alteração na frequência do clock, como o Intel SpeedStep ou o AMD Precision Boost.
O Profile Analyzer pode ajudá-lo a responder a perguntas de otimização e desempenho que podem surgir durante o ciclo de vida de desenvolvimento do seu projeto. Por exemplo, em uma captura de jogo de 300 quadros ou em uma sequência de carregamento de 20 segundos:
Quais são os maiores custos de CPU nos threads principais e de renderização?
Qual é o custo médio/mediano/total de cada um desses marcadores?
Use o Profile Analyzer para se aprofundar nas características de desempenho do seu código executado em vários quadros ou até mesmo em diferentes capturas de sessão para análise antes e depois.
Outras dicas para comparar dados com o Profile Analyzer:
Pesquise os scripts do usuário (ignorando os níveis de API do Unity Engine) selecionando um nível de profundidade de 4 (os níveis de profundidade exibem informações sobre onde os marcadores estão na hierarquia). Depois de filtrar até esse nível e observar o Profiler no modo Timeline, você pode correlacionar a profundidade da pilha de chamadas para fazer uma seleção aqui - os scripts de monocomportamento aparecerão em azul e estão no quarto nível abaixo. Essa é uma maneira rápida de ver se sua lógica específica e seus scripts de jogabilidade estão sobrecarregados por si só, sem nenhum outro "ruído".
Filtre os dados da mesma forma para outras áreas do mecanismo Unity, como animadores ou física do mecanismo, usando um nível de pilha de profundidade de 3.
No lado direito da seção Resumo do quadro, você encontrará o histograma da faixa de desempenho do método destacado. Passe o mouse sobre o número do quadro máximo (o quadro exato em que o tempo máximo foi encontrado) para obter um link clicável para visualizar a seleção de quadros no Unity Profiler. Use essa visualização para analisar outros fatores que podem contribuir para o tempo máximo de quadro elevado.
Se quiser ver como a chamada de uma função afeta o desempenho, use o Profiler do Unity ou o método Profiler.logFile para capturar seus dados. Se estiver usando o Unity Profiler, você pode clicar no botão Pull Data para carregá-lo no Profile Analyzer. Caso contrário, você pode carregar uma captura de dados salva anteriormente a partir de um arquivo.
Assim que você fizer isso, a análise começará imediatamente e os dados preencherão o gráfico de tempo do quadro. Observe as barras brancas e cianas no gráfico. As barras brancas representam as durações dos quadros e as barras cianas representam o marcador selecionado no momento. Isso permite que você compare a contribuição do marcador selecionado com o tempo total do quadro.
Você pode pesquisar marcadores usando Filtros. Os detalhes do marcador são atualizados automaticamente para refletir o subconjunto selecionado e, na coluna Count, você verá a quantidade de ocorrências. O gráfico temporal de quadros destaca o marcador. Quando você seleciona um marcador, o painel de detalhes do Resumo do marcador também é atualizado para mostrar as estatísticas de análise desse marcador específico.
Ao analisar o desempenho, você quer ter certeza de que os dados que está analisando são representativos. Se os dados apresentarem ruídos, é fácil garantir a seleção de um quadro médio usando o Frame Summary no canto superior direito — basta clicar no quadro mostrado como Median e o Profiler exibirá a análise relevante. Como alternativa, usando o gráfico de tempo de quadro, clique com o botão direito do mouse e selecione Select Median Frame (Selecionar quadro mediano).
Você também pode limitar sua análise a uma seleção de quadros. Todas as estatísticas que você vê serão atualizadas para refletir a seleção específica.
Em vez de depender de um único ponto de dados de um único quadro, você pode analisar vários pontos de dados selecionando um grupo de quadros representativos. Se você clicar com o botão direito do mouse no gráfico de tempo do quadro e ordenar por duração do quadro, poderá selecionar um conjunto de quadros em torno do quadro mediano para obter uma amostra representativa que suavize parte do ruído nos dados.
O Profile Analyzer pode ajudar a determinar a diferença de desempenho ao aplicar uma configuração em todo o projeto, como a ativação de trabalhos gráficos. Para usar esse recurso, obtenha uma captura de referência e obtenha outra após as alterações. Execute seu jogo, faça uma amostra com o Unity Profiler, traga essa captura para o Profile Analyzer e, em seguida, traga a segunda.
É possível ver os resultados das duas capturas lado a lado na seção Resumo do quadro.
Para garantir que seu desempenho não tenha gargalos, verifique o marcador Gfx.WaitForPresentOnGfxThread na thread principal. Encontre-o digitando Gfx.WaitForPresentOnGfxThread na área de filtro. Se o valor médio desse marcador for diferente de zero, então a CPU está esperando que a GPU termine sua atividade para poder continuar.
Você pode olhar para esse marcador no gráfico de tempo de quadro para ver o quanto ele contribui para o tempo de quadro. Se a CPU estiver aguardando a GPU, é provável que você esteja vinculado à GPU. Confirme esse cenário examinando seu perfil de thread de renderização para verificar a presença dos marcadores Gfx.PresentFrame ou <GraphicsAPIName>.WaitForLastPresent. Confira nosso Guia definitivo para criação de perfil em jogos Unity para obter mais ajuda, ou dê uma olhada nas ferramentas de criação de perfil de GPU para ver onde você pode fazer algumas otimizações.
Você pode gerenciar seus dados na seção superior da janela Profile Analyzer. A partir daqui, você pode abrir o Unity Profiler e "Pull Data" (Extrair dados) do Unity Profiler ou carregar um arquivo salvo anteriormente (qualquer versão do Unity).
Depois de carregar seus dados, você os verá no gráfico de tempo de quadro. Essa é uma região interativa em que você pode selecionar um intervalo de amostras; todas as informações resumidas na tabela Marker Details (Detalhes do marcador) serão atualizadas automaticamente para refletir sua seleção. Você pode acessar opções de seleção avançadas clicando com o botão direito do mouse no gráfico de tempo do quadro.
Clique no botão Save (Salvar) para salvar seus dados de análise como um arquivo .pdata. Observe que há dois tipos de formato de arquivo: um arquivo salvo do Profile Analyzer (.pdata) e um arquivo salvo do Profiler (.data ou .raw). Recomendamos salvar os dois arquivos no mesmo diretório.
O Resumo do quadro (no lado direito da janela Analisador de perfil) exibe destaques sobre o tempo do quadro, incluindo o mínimo, o máximo e a mediana, com botões que permitem que você vá para quadros específicos no Profiler. Essa área também mostra o histograma de distribuição do tempo do quadro e um gráfico de caixa e bigode.
Detalhes do marcador
Nessa seção, você encontrará a tabela de marcadores dos dados do marcador do Profiler, incluindo todas as profundidades de pilha. Os dados do Unity Profiler para todos os marcadores são agregados para fornecer a mediana e outros tempos de quadro, que também são exibidos nessa tabela. Também é possível filtrar esses detalhes para "fatias" específicas de profundidade de pilha.
Resumo do marcador
A área Resumo do marcador, à direita, contém informações agregadas sobre os marcadores selecionados e sua contribuição para o tempo do quadro. Essas informações também são apresentadas visualmente em um histograma e em um gráfico de caixa e bigode.
Na parte inferior do resumo, você encontrará os tempos mínimo e máximo para instâncias de marcadores individuais dentro do conjunto de dados agregados.
Por nome
Você pode digitar uma substring ou um conjunto de substrings para concentrar sua revisão em marcadores com um nome específico. Se o nome contiver espaços, certifique-se de colocar aspas ao redor da substring.
Você pode excluir os marcadores que não lhe interessam. Por exemplo, você pode excluir marcadores com base no tempo ocioso em trabalhos ou nos marcadores que fazem parte do próprio Profiler.
Você também pode preencher os filtros de marcadores clicando com o botão direito do mouse em um marcador de interesse na tabela e adicionando-o à seleção de filtros.
Remover filtro
Você também pode optar por ocultar dos dados um marcador e todas as amostras filhas sob esses marcadores, tanto nas tabelas quanto no gráfico. Essa é uma opção principalmente para remover o VSync/tempo de espera em dispositivos iOS e Android. Dois marcadores comuns já estão pré-configurados e podem ser escolhidos no menu suspenso Remove: Nenhum. Esses marcadores são chamados de FPS Wait e Present Wait. Para casos de uso mais avançados, você pode remover marcadores selecionando e escolhendo a opção Remove Marker (Remover marcador ) no menu de contexto do botão direito do mouse.
Só é possível remover um marcador de cada vez; você pode adicionar um marcador de volta escolhendo None (Nenhum ) no menu suspenso.
Fios
Você pode optar por ver os dados de threads de trabalho específicos. Para ver todos eles agregados, marque "All" (Todos) na parte superior da janela pop-up Select (Selecionar linha).
Profundidade
Recomendamos examinar a profundidade 3 porque a maioria dos subsistemas do Unity tem marcadores de alto nível nesse nível. Assim, você obterá a contribuição de subsistemas importantes, como renderização, animação e física. (Depth 3 é adequada para versões recentes do Unity. Para versões mais antigas, talvez você queira mudar para outra profundidade).
Pais
Para filtrar por pai, clique com o botão direito do mouse no marcador na tabela de marcadores e selecione Set as Parent Marker Filter (Definir como filtro de marcador pai).
Tipo de análise
Por padrão, o Profile Analyzer mostra o tempo total dos marcadores, mas você pode mudar para o tempo próprio. O autotempo é útil se você quiser se aprofundar nos detalhes para ver onde seu tempo é realmente gasto.
Unidades
As unidades padrão são milissegundos, mas para tempos menores, você pode mudar para microssegundos.
Essa parte da janela mostra os 10 principais marcadores para os filtros que você selecionou. A melhor maneira de usar essa ferramenta é selecionar Main Thread e Total time for Analysis Type, incluindo crianças na profundidade 3, para que você veja os subsistemas do Unity. Isso mostrará a proporção de contribuição para cada um desses sistemas importantes, como tempo de renderização em relação a física e animação.
Na visualização Compare (Comparar), use o menu suspenso Ratio (Proporção ) para ajustar como o Profile Analyzer desenha os marcadores uns contra os outros:
Normalizado exibe os dois conjuntos de dados em relação ao seu próprio tempo na profundidade selecionada.
Longest exibe a diferença absoluta entre os dois conjuntos na profundidade selecionada.
Para relatórios e análises adicionais, você pode passar o mouse sobre a barra de dados para ver as porcentagens e métricas exatas.
Na parte superior da janela Profile Analyzer, você pode alternar para a guia Compare (Comparar) para selecionar dois conjuntos de dados para análise. Um conjunto de dados é exibido em azul e o outro em laranja. Ou você pode optar por comparar duas sub-regiões de um único conjunto de dados, por exemplo, para comparar os quadros medianos com os quadros discrepantes.
A tabela Marker Comparison (Comparação de marcadores) representa visualmente os dados em azul e laranja, para que você possa verificar rapidamente qual dos dois conjuntos de dados está sendo executado mais lentamente em determinadas áreas.
Se o marcador estiver ausente em uma das varreduras, você verá um traço nessa coluna. Isso pode acontecer se o marcador tiver sido renomeado, por exemplo, se você estiver usando versões diferentes do Unity.
Lembre-se de que você pode exportar os dados do Profile Analyzer para processamento personalizado adicional no formato de arquivo CSV. Você pode exportar o conteúdo da tabela de marcadores, o gráfico de tempo de quadro, a tabela de comparação ou uma comparação de gráficos de tempo de quadro.
Se você tiver dúvidas sobre o Profile Analyzer, o Profiler ou sobre como usar seus recursos específicos em seu projeto, participe das discussões nos fóruns.
Ao traçar o perfil e aprimorar o desempenho do seu jogo em uma ampla variedade de plataformas e dispositivos, você pode planejar melhor o sucesso e expandir significativamente sua base de jogadores.
Conforme mencionado no início deste artigo, o e-book Guia definitivo para criação de perfil em jogos Unity fornece muito mais instruções sobre a criação de perfis em seus projetos Unity.
Você também pode assistir a esta sessão da Unite Copenhagen. Ele é de 2019, mas ainda fornece ótimas dicas sobre o Profile Analyzer.
Por fim, encontre todos os guias e artigos avançados da Unity no hub de práticas recomendadas.