Personalizando métricas de desempenho no Unity Profiler

Otimizar seu aplicativo requer ser capaz de medir com precisão como seu projeto consome recursos de hardware. Estender o Unity Profiler com suas próprias métricas de desempenho permite que você entenda melhor o histórico de desempenho exclusivo do seu aplicativo. Nesta postagem, abordaremos os novos recursos de extensibilidade do Profiler no Unity 2021 LTS.
Nossos novos contadores do Profiler fornecem um mecanismo leve para adicionar suas próprias métricas de desempenho aos seus aplicativos e pacotes do Unity . Agora você também pode visualizar suas métricas diretamente na janela do Profiler adicionando seus próprios Módulos do Profiler. Continue lendo para obter mais detalhes sobre como usar esses recursos para melhorar o desempenho do seu projeto Unity .
O Unity Profiler é uma ferramenta que você pode usar para obter informações detalhadas de desempenho sobre seu aplicativo. Ele rastreia um grande número de métricas de desempenho em diversas categorias, como memória, áudio e renderização. Essas métricas são visualizadas na janela Profiler e, em alguns casos, também podem ser consultadas no script. Usando essas informações, você pode obter insights sobre como seu aplicativo Unity usa os recursos de hardware disponíveis da plataforma de destino, o que pode ajudar a identificar onde otimizações podem ser feitas.

Os contadores do Profiler rastreiam, medem ou contam métricas no seu aplicativo Unity que são úteis para fins de análise de desempenho. Por exemplo, o Unity define um contador Profiler integrado para rastrear o número total de bytes de memória usados pelo seu aplicativo, chamado “Memória Total Usada”. Esta é uma estatística útil para avaliar o consumo de memória do seu aplicativo no dispositivo de destino. Você pode ver esse valor exibido ao longo do tempo junto com outras métricas relacionadas à memória no módulo Memória da janela Profiler, mostrado abaixo.

Ao adicionar seus próprios contadores do Profiler, você pode expor métricas de desempenho exclusivas para seus próprios sistemas e aplicativos. Essas métricas podem ser exibidas na janela Profiler junto com outros dados de desempenho, incluindo contadores integrados. Isso permite que você visualize as características de desempenho exclusivas do seu aplicativo, em contexto, diretamente na janela do Profiler.
No exemplo abaixo, um contador personalizado do Profiler foi adicionado para rastrear o número de criaturas ativas em uma cena. Ele é exibido junto com o contador integrado do Profiler, Batches Count, que rastreia o número de lotes de renderização processados em cada quadro. Isso nos permite correlacionar facilmente as duas métricas e ver o impacto da nossa contagem de criaturas no número de lotes que o renderizador deve processar.

Além disso, todos os seus contadores do Profiler estão disponíveis em Release Builds, bem como alguns dos contadores integrados, quando especificado. As compilações de lançamento são mais representativas do desempenho real do seu aplicativo do que as compilações de desenvolvimento.
No entanto, o Unity Profiler não pode ser anexado a Release Builds por motivos de otimização. Portanto, você pode monitorar seletivamente métricas importantes em Release Builds usando contadores do Profiler e consultando-as no script. Por exemplo, você pode fazer isso em testes de Integração Contínua para detectar regressões de desempenho. Ou você pode exibir algumas métricas de desempenho importantes por meio de uma interface de usuário de depuração no jogo usando um dos sistemas de interface do usuário do Unity, como no canto inferior esquerdo do exemplo abaixo. Consulte a documentação do Profiler Recorder para obter mais informações.

Se quiser que seus contadores do Profiler estejam presentes apenas em compilações de desenvolvimento, você pode excluí-los das compilações de lançamento envolvendo-os no símbolo de script DEVELOPMENT_BUILD , conforme descrito na documentação de compilação condicional.
Nossos contadores do Profiler estão disponíveis no pacote Profiling.Core , lançado no Unity 2021 LTS. O pacote está incluído no Unity 2021 LTS, mas não é instalado por padrão, então siga as instruções de instalação na documentação do pacote para adicionar este pacote do Gerenciador de Pacotes pelo nome.
Depois de ter o pacote, você pode criar um contador do Profiler, chamado na API de ProfilerCounter ou ProfilerCounterValue, e atualizá-lo da seguinte maneira.
using UnityEngine;
using Unity.Profiling;
public class CreatureCounter : MonoBehaviour
{
static readonly ProfilerCounterValue<int> k_CreatureCounter = new(ProfilerCategory.Scripts, "Creature Count",
ProfilerMarkerDataUnit.Count, ProfilerCounterOptions.FlushOnEndOfFrame);
void OnEnable()
{
k_CreatureCounter.Value += 1;
}
void OnDisable()
{
k_CreatureCounter.Value -= 1;
}
}
cs
Consulte a documentação do pacote Profiling.Core para obter mais informações.
Um módulo Profiler apresenta informações de desempenho para uma área ou fluxo de trabalho específico na janela Profiler, como memória, áudio ou renderização. Cada módulo do Profiler tem como objetivo fornecer insights sobre o perfil de desempenho do seu domínio. Por exemplo, o módulo Memory Profiler mostrado abaixo exibe sete métricas principais relacionadas ao uso de memória ao longo do tempo. Abaixo está a seção detalhada do módulo mostrando a distribuição de memória no quadro selecionado.

No Unity 2021 LTS, a janela do Profiler pode ser personalizada com seus próprios módulos do Profiler. Isso permite que você apresente as métricas de desempenho dos seus próprios sistemas diretamente na janela do Profiler. Ele também oferece a oportunidade de visualização personalizada na exibição detalhada do seu módulo, permitindo que você apresente os dados de desempenho do seu sistema da maneira que desejar.
Editor do módulo Profiler
O Profiler Module Editor é recomendado para criar rapidamente módulos temporários do Profiler para seu próprio uso. Por exemplo, você pode usá-lo para criar rapidamente um módulo Profiler para verificar um novo contador do Profiler. Os módulos do Profiler criados por meio do Editor de Módulos do Profiler são locais no seu Editor e não estão disponíveis para outros usuários do projeto.

Para mais informações, consulte a documentação do Editor de Módulos.
API do módulo Profiler
A API do módulo Profiler permite que você adicione seu próprio módulo Profiler à janela Profiler para todos os usuários de um projeto ou pacote. Quando um módulo do Profiler é definido em um projeto ou pacote usando esta API, ele se torna automaticamente disponível na janela do Profiler para todos os usuários desse projeto ou pacote.
Se você for um editor da Asset Store ou um desenvolvedor de pacotes, agora poderá distribuir módulos personalizados do Profiler com seu pacote. Quando um usuário instala seu pacote, seus módulos do Profiler ficam automaticamente disponíveis na janela do Profiler para seus usuários. Isso permite que você exponha as métricas de desempenho do seu pacote diretamente na janela Profiler.
Várias equipes dentro da Unity já estão usando essa API para distribuir módulos personalizados do Profiler com seus pacotes, incluindo os pacotes Netcode for GameObjects, Adaptive Performancee Mali System Metrics .
Como usar
Para adicionar um módulo Profiler usando a API do módulo Profiler, crie um script ProfilerModule no seu projeto ou pacote, conforme mostrado abaixo.
using Unity.Profiling;
using Unity.Profiling.Editor;
[System.Serializable]
[ProfilerModuleMetadata("Creature Batches")]
public class CreatureBatchesProfilerModule : ProfilerModule
{
static readonly ProfilerCounterDescriptor[]
k_Counters = {
new("Creature Count", ProfilerCategory.Scripts),
new("Batches Count", ProfilerCategory.Render), };
public CreatureBatchesProfilerModule() : base(k_Counters) { }
}
cs
O módulo será exibido automaticamente na janela Profiler para todos os usuários do projeto ou pacote.

Para obter mais informações sobre como usar a API do módulo Profiler, consulte o Manual e a documentação da API .
A API do módulo Profiler inclui a capacidade de desenhar uma visualização personalizada dos seus dados de desempenho para o quadro selecionado usando um dos sistemas de interface de usuário do Editor do Unity, como o UI Toolkit.
Por exemplo, o módulo Profiler do pacote Adaptive Performance usa essa API para apresentar informações detalhadas de desempenho no quadro selecionado, bem como informações contextuais, como indicadores de gargalo e aviso térmico. Esses indicadores podem ajudar um usuário do pacote Adaptive Performance a ver claramente quando ele pode estar enfrentando limitação térmica, por exemplo. Você pode usar esta API para apresentar uma visualização personalizada dos dados de desempenho do seu módulo Profiler.

Talvez você queira visualizar dados adicionais e mais complexos em seus módulos do Profiler junto com seus contadores do Profiler. Por exemplo, você pode desejar exibir uma captura de tela do quadro atual na visualização detalhada do seu módulo Profiler para dar mais contexto aos dados de desempenho, conforme mostrado abaixo.

Para enviar dados de quadro adicionais ao Profiler, como uma imagem, e posteriormente recuperá-los da captura do Profiler, você pode usar as APIs de metadados de quadro, Profiler.EmitFrameMetaData e FrameDataView.GetFrameMetaData.
Se você tiver dados adicionais que só precisam ser enviados uma vez por sessão de criação de perfil, como dados de configuração, você pode usar as APIs de metadados de sessão, Profiler.EmitSessionMetaData e FrameDataView.GetSessionMetaData.
Consulte a documentação vinculada acima para obter exemplos de como e quando usar esses recursos.
Nesta postagem, abordamos como estender o Unity Profiler com suas próprias métricas de desempenho. Analisamos a adição de métricas personalizadas com nossos novos contadores do Profiler, disponíveis no pacote Profiling.Core . Em seguida, exploramos a adição de módulos personalizados do Profiler à janela do Profiler com o Profiler Module Editor e a Profiler Module API. Por fim, abordamos o envio de dados complexos adicionais ao Profiler, como uma imagem, para fornecer mais informações contextuais.
Esperamos que esses recursos de extensibilidade do Profiler adicionados no Unity 2021 LTS permitam que você avalie e entenda melhor o histórico de desempenho exclusivo do seu aplicativo. Sinta-se à vontade para entrar em contato com a equipe através da nossa página do fórum. Gostaríamos de ouvir seu feedback e saber como podemos melhorar as ferramentas de desempenho do Unity para você.