Personalización de las métricas de rendimiento en el Unity Profiler

La optimización de su aplicación requiere poder medir con precisión cómo consume su proyecto los recursos de hardware. Ampliar el Unity Profiler con sus propias métricas de rendimiento le permite comprender mejor la historia única del rendimiento de su aplicación. En este post, cubriremos las nuevas características de extensibilidad del Profiler en Unity 2021 LTS.
Nuestros nuevos contadores Profiler proporcionan un mecanismo ligero para añadir sus propias métricas de rendimiento a sus aplicaciones y paquetes Unity. Ahora también puede visualizar sus métricas directamente en la ventana de Profiler añadiendo sus propios módulos de Profiler. Siga leyendo para obtener más detalles sobre cómo utilizar estas funciones para mejorar el rendimiento de su proyecto Unity.
El perfilador de Unity es una herramienta que puede utilizar para obtener información detallada sobre el rendimiento de su aplicación. Realiza un seguimiento de un gran número de métricas de rendimiento en una serie de categorías, como la memoria, el audio y el renderizado. Estas métricas se visualizan en la ventana Profiler y, en algunos casos, también pueden consultarse desde script. Utilizando esta información, puede hacerse una idea de cómo utiliza su aplicación Unity los recursos de hardware disponibles de la plataforma de destino, lo que puede ayudarle a determinar dónde podrían realizarse optimizaciones.

Los contadores del perfilador rastrean, miden o cuentan métricas en su aplicación Unity que son útiles para fines de análisis de rendimiento. Por ejemplo, Unity define un contador Profiler incorporado para rastrear el número total de bytes de memoria utilizados por su aplicación, llamado "Memoria Total Utilizada". Se trata de una estadística útil para medir la huella de memoria de su aplicación en el dispositivo de destino. Puede ver este valor mostrado a lo largo del tiempo junto con otras métricas relacionadas con la memoria en el módulo Memoria de la ventana del Profiler, que se muestra a continuación.

Añadiendo sus propios contadores Profiler, puede exponer métricas de rendimiento exclusivas de sus propios sistemas y aplicaciones. Estas métricas pueden mostrarse en la ventana Profiler junto con otros datos de rendimiento, incluidos los contadores incorporados. Esto le permite ver las características de rendimiento exclusivas de su aplicación, en contexto, directamente en la ventana de Profiler.
En el ejemplo siguiente, se ha añadido un contador Profiler personalizado para realizar un seguimiento del número de criaturas activas en una escena. Se muestra junto al contador incorporado en Profiler, Recuento de lotes, que rastrea el número de lotes de renderizado procesados en cada fotograma. Esto nos permite correlacionar fácilmente ambas métricas y ver el impacto de nuestro recuento de criaturas en el número de lotes que debe procesar el renderizador.

Además, todos los contadores de su Profiler están disponibles en las compilaciones de lanzamiento, así como algunos de los incorporados donde se especifique. Las compilaciones de lanzamiento son más representativas del rendimiento real de su aplicación que las compilaciones de desarrollo.
Sin embargo, el Unity Profiler no puede adjuntarse a las compilaciones de lanzamiento por razones de optimización. Por lo tanto, puede supervisar de forma selectiva las métricas importantes en las compilaciones de lanzamiento utilizando los contadores de Profiler y consultándolos desde el script. Por ejemplo, podría hacerlo en las pruebas de integración continua para detectar regresiones de rendimiento. O bien, podría mostrar algunas métricas de rendimiento clave a través de una interfaz de usuario de depuración en el juego utilizando uno de los sistemas de interfaz de usuario de Unity, como en la esquina inferior izquierda del ejemplo siguiente. Para más información, consulte la documentación del Profiler Recorder.

Si desea que sus contadores del Profiler sólo estén presentes en las compilaciones de desarrollo, puede excluirlos de las compilaciones de lanzamiento envolviéndolos en el símbolo de script DEVELOPMENT_BUILD, tal y como se describe en la documentación Compilación condicional.
Nuestros contadores Profiler están disponibles en el paquete Profiling.Core, publicado en Unity 2021 LTS. El paquete se incluye con Unity 2021 LTS pero no está instalado por defecto, así que siga las instrucciones de instalación de la documentación del paquete para añadirlo desde el Gestor de paquetes por su nombre.
Una vez que tenga el paquete, puede crear un contador Profiler, denominado en la API ProfilerCounter o ProfilerCounterValue, y actualizarlo del siguiente modo.
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 la documentación del paquete Profiling. Core para obtener más información.
Un módulo Profiler presenta información sobre el rendimiento de un área o flujo de trabajo específico en la ventana Profiler, como la memoria, el audio o el renderizado. Cada módulo Profiler tiene como objetivo proporcionar una visión del perfil de rendimiento de su dominio. Por ejemplo, el módulo Memory Profiler que se muestra a continuación muestra siete métricas clave relacionadas con el uso de la memoria a lo largo del tiempo. Debajo se encuentra la sección detallada del módulo que muestra la distribución de la memoria en el marco seleccionado.

En Unity 2021 LTS, la ventana Profiler puede personalizarse con sus propios módulos Profiler. Esto le permite presentar las métricas de rendimiento de sus propios sistemas directamente en la ventana del Profiler. También ofrece la posibilidad de una visualización personalizada en la vista detallada de su módulo, lo que le permite presentar los datos de rendimiento de su sistema como desee.
Editor de módulos Profiler
El Editor de módulos de Profiler es recomendable para crear rápidamente módulos temporales de Profiler para su propio uso. Por ejemplo, puede utilizarlo para crear rápidamente un módulo Profiler para verificar un nuevo contador Profiler. Los módulos Profiler creados a través del Editor de módulos Profiler son locales para su Editor y no están disponibles para otros usuarios del proyecto.

Para más información, consulte la documentación del Editor de módulos.
API del módulo Profiler
La API del módulo Profiler le permite añadir su propio módulo Profiler a la ventana Profiler para todos los usuarios de un proyecto o paquete. Cuando se define un módulo de Profiler en un proyecto o paquete utilizando esta API, automáticamente pasa a estar disponible en la ventana de Profiler para todos los usuarios de ese proyecto o paquete.
Si es un editor de la Tienda de Activos o un desarrollador de paquetes, ahora puede distribuir módulos personalizados de Profiler con su paquete. Cuando un usuario instale su paquete, sus módulos Profiler estarán automáticamente disponibles en la ventana Profiler para sus usuarios. Esto le permite exponer las métricas de rendimiento de su paquete directamente en la ventana del Profiler.
Varios equipos de Unity ya han estado utilizando esta API para distribuir módulos Profiler personalizados con sus paquetes, incluidos los paquetes Netcode for GameObjects, Adaptive Performance y System Metrics Mali.
Cómo utilizarlo
Para añadir un módulo Profiler utilizando la API de módulos Profiler, cree un script ProfilerModule en su proyecto o paquete, como se muestra a continuación.
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
El módulo se mostrará automáticamente en la ventana de Profiler para todos los usuarios del proyecto o paquete.

Para más información sobre el uso de la API del módulo Profiler, consulte el Manual y la documentación de la API.
La API del módulo Profiler incluye la posibilidad de dibujar una visualización personalizada de sus datos de rendimiento para el fotograma seleccionado utilizando uno de los sistemas Editor UI de Unity, como UI Toolkit.
Por ejemplo, el módulo Profiler del paquete Adaptive Performance utiliza esta API para presentar información detallada sobre el rendimiento en el marco seleccionado, así como información contextual como los indicadores de cuello de botella y de alerta térmica. Estos indicadores pueden ayudar a un usuario del paquete Adaptive Performance a ver claramente cuándo puede encontrarse con un estrangulamiento térmico, por ejemplo. Puede utilizar esta API para presentar una visualización a medida de los datos de rendimiento de su módulo Profiler.

Para más información, consulte la documentación del Manual y de la API sobre la creación de una vista personalizada de Detalles del módulo Profiler.
Puede que desee visualizar datos adicionales, más complejos, en sus módulos Profiler junto con sus contadores Profiler. Por ejemplo, puede que desee mostrar una captura de pantalla del fotograma actual en la vista detallada de su módulo Profiler para dar más contexto a los datos de rendimiento, como se muestra a continuación.

Para enviar datos de fotogramas adicionales a Profiler, como una imagen, y recuperarlos posteriormente de la captura de Profiler, puede utilizar las API de metadatos de fotogramas, Profiler.EmitFrameMetaData y FrameDataView.GetFrameMetaData.
Si tiene datos adicionales que sólo deben enviarse una vez por sesión de creación de perfiles, como datos de configuración, puede utilizar las API de metadatos de sesión, Profiler.EmitSessionMetaData y FrameDataView.GetSessionMetaData.
Consulte la documentación enlazada más arriba para ver ejemplos de cómo y cuándo utilizar estas funciones.
En este post, cubrimos cómo extender el Unity Profiler con sus propias métricas de rendimiento. Hemos visto cómo añadir métricas personalizadas con nuestros nuevos contadores Profiler, disponibles en el archivo Perfilador.Core paquete. A continuación, exploramos la posibilidad de añadir módulos personalizados de Profiler a la ventana de Profiler tanto con el Editor de módulos de Profiler como con la API de módulos de Profiler. Por último, cubrimos el envío de datos complejos adicionales al Profiler, como una imagen, para proporcionar más información contextual.
Esperamos que estas funciones de extensibilidad del perfilador añadidas en Unity 2021 LTS le permitan medir y comprender mejor la historia única del rendimiento de su aplicación. No dude en ponerse en contacto con el equipo a través de nuestra página del foro. Nos encantaría conocer su opinión y saber cómo podemos mejorar las herramientas de rendimiento de Unity para usted.