SGG PerfMeter está diseñado como una capa de diagnóstico runtime de bajo overhead. No sustituye a capturas profundas de Unity Profiler, RenderDoc, Profile Analyzer o Frame Debugger.
- Target runtime soportado: Unity
6000.4+con URP17.4+Render Graph o HDRP17.4+Custom Pass integration. - Built-in Render Pipeline no está soportado ni planificado.
- HDRP overdraw y heatmap no tienen soporte. Los proyectos HDRP mantienen diagnostics de FPS, CPU, GPU, memory, sessions, alerts, camera, device, setup y MCP.
- Unity
2022.3hasta6000.3puede importar por seguridad de compilación, pero el comportamiento runtime y el target con soporte son Unity6000.4+.
- El GPU timing puede no estar disponible, llegar con retraso o ser poco fiable según la plataforma y graphics API.
CollectionFramees el frame de Unity donde PerfMeter recolectó el snapshot, no necesariamente el frame exacto de hardware representado porFrameTimingManager.- En Android conviene preferir Vulkan cuando el GPU frame timing importa.
- OpenGL/OpenGLES debe tratarse como modo degradado para GPU timing e instrumentación de overdraw.
Los profiler counters varían por plataforma, versión de Unity, configuración de render pipeline y graphics API. Usa AvailableCounters, UnavailableCounters y warnings en lugar de asumir que todos los contadores existen en todas partes.
- El coordinator permite una solicitud activa y avanza de forma determinista por
PreRoll,Capturing,PostRollyCompleted. La misma ID activa es idempotente; una ID activa diferente se rechaza por solapamiento. GenericUnityusa elExternalGPUProfilerexperimental de Unity en Editor/Development Build. Su matriz sigue siendo RenderDoc en Windows/Linux desktop con D3D11/D3D12/Vulkan y PIX en Windows desktop con D3D12; completion no autentica herramienta ni artefacto.- La ruta nativa opcional solo admite RenderDoc en el Editor Unity Windows x64 con D3D11, D3D12 o Vulkan. Development Player, Linux nativo, IL2CPP, mobile y macOS nativo no están soportados.
- El paquete UPM sigue sin binarios. El bridge fijado y separado solo usa una
renderdoc.dllya cargada y nunca instala, carga, inicia ni inyecta RenderDoc. - Native MetadataOnly usa
DoNotSharepor defecto; Copy/Embed son sensibles, tienen cuotas separadas y requierenReviewBeforeShare. Los artefactos genéricos o del caller siguen observed, no autoritativos. - La captura de timing circular nativa de PIX no esta disponible. La API de timing de Windows documentada por Microsoft admite captura hacia delante, pero ignora los controles de almacenamiento circular, limite de memoria y descarte; PerfMeter no sustituye el anillo previo a la alerta solicitado por una captura hacia delante sin un limite de almacenamiento documentado ni por una integracion privada de PIX.
- Los tests automatizados usan un fake backend. La confirmación de la herramienta externa real y del artefacto sigue siendo un release gate.
- Los correlated bundles y MCP capture control están disponibles, pero un
.rdc/.wpixproporcionado sigue siendo solo un artefacto observado y con hash: Unity no puede autenticar la herramienta conectada ni su asociación con el capture. La verificación con una herramienta real sigue siendo un release-candidate gate.
El overdraw numérico y el heatmap visual son modos de diagnóstico. Añaden trabajo de render y deben usarse en ventanas acotadas, no como UI de gameplay en estado estable.
El overdraw numérico en URP requiere:
PerfMeterRenderGraphFeatureinstalado en el URP renderer activo;- soporte de UAV/storage-buffer en fragment-stage;
- soporte de compute shader;
- graphics API compatible;
- soporte de async GPU readback.
Los targets no compatibles, incluido HDRP, informan OverdrawState.Unsupported con warnings.
El overlay está diseñado para cuidar las asignaciones y usa throttling, pero los valores numéricos cambiantes y las etiquetas de gráficos aún pueden materializar strings managed en el intervalo de refresco. Tiene dos backend paths de UI Toolkit: un host propio UIDocument en Unity 6000.4 y un host propio PanelRenderer en Unity 6000.5+. El host conserva los panel settings y children de la UI ajena y reconstruye únicamente el container propio de PerfMeter. Los valores numéricos usan numeric slots reservados estables y un numeric monospace role; FpsOnly usa un fallback determinista y acotado de dos filas cuando una fila no cabe, mientras las tarjetas y barras hacen wrap con logical widths estrechas. Esto reduce el riesgo de clipping, pero no promete todas las resoluciones o escalas arbitrarias; los diagnósticos visuales pesados, los modos con gráficos y el layout resultante deben validarse en dispositivos objetivo.
La validación actual incluye cobertura automatizada EditMode, HDRP smoke validation en Unity 6000.4.10f1 y validación smoke previa en Android S23 Vulkan/GLES. Sigue siendo útil ampliar cobertura de player builds y dispositivos antes de tratar los datos como evidencia de aprobación para release.
- La función no está disponible sin
com.unity.memoryprofiler1.1.0+en Unity6000.4+; el paquete core no instala ni requiere esa dependencia. - La captura manual es la única opción predeterminada. Los triggers de umbral de memoria del sistema y crecimiento acotado de fugas son opt-in; cada solicitud está sujeta a guards de single-flight/overlap, cooldown, espacio libre mínimo, backend y flags de captura.
- El staging
.snappropiedad de PerfMeter está bajoTemp/PerfMeter/MemorySnapshotsy se limita a 512 MiB. La evidencia solo de memoria se exporta bajoTemp/PerfMeter/CaptureBundles, con una cuota total de retención de 2 GiB. Un export correcto es de un solo uso y elimina el source de staging, con warnings explícitos si la limpieza no puede completarse. - Los snapshots pueden contener memoria sensible del proceso. Protégelos y revísalos antes de compartirlos. El bundle registra
contains_sensitive_memory, provenance de backend/flags,memory-snapshot.jsony metadatos SHA-256; no crea un artefacto GPU externo. - El borrado bloqueado por el sistema operativo y la protección portable managed frente a carreras con reparse points son best-effort. Los paths inseguros o ajenos se rechazan y los fallos de limpieza se mantienen visibles como warnings.
- La evidencia incluye memory EditMode
9/9, capture-bundle EditMode14/14, PlayMode threshold1/1, compilación opcional concom.unity.memoryprofiler@1.1.12y Unity6000.4.12f1full EditMode182/182más full PlayMode14/14. No es una afirmación sobre release-player ni comportamiento en dispositivos.
- Los markers de creación de programas GPU de shaders y de graphics pipelines son capabilities dinámicas de
ProfilerRecorder. Unity, la plataforma, la API gráfica y el estado del refresh del catálogo pueden cambiar su availability. UsaUnavailable,AvailableNoSample,AvailableSampledy la provenance; no deduzcas availability de un valor cero. - Los valores de markers conservan
UnityDataTypedel recorder y son valores crudos. No son universalmente counts de shaders o PSO y PerfMeter no los convierte a una unidad común. La metadata de capability incluye resolución exact/alias, nombres de recorders resueltos, component counts resueltos/muestreados y revisión del catálogo. - La assembly opcional
SGG.PerfMeter.GraphicsStateCollectionestá dirigida a Unity6000.4+. UsaUnityEngine.Experimental.Rendering.GraphicsStateCollectionen6000.4yUnityEngine.Rendering.GraphicsStateCollectionen6000.5+; las versiones anteriores no están soportadas para esta integración. - Un trace requiere una sesión activa de PerfMeter. En Play Mode normal los trace frames terminan después del end-of-frame y en batch mode se usa un fallback del frame siguiente. Los samples correlacionados están sujetos al warm-up, intervalo y máximo de samples de la sesión.
- Solo se admite un graphics-state flight, incluyendo preparación, finalización del trace, prewarm y cleanup. Un external GPU capture, memory snapshot o alert-capture activo también provoca rechazo por overlap.
IsBusy/is_busycubre esos flights y el cleanup persistente;HasPendingCleanup/has_pending_cleanupinforma específicamente de un artifact owned que espera retry. La cancelación coincidente es best-effort; los fallos de cleanup permanecen visibles y pueden retrasar la siguiente solicitud. StopSession()cancela un trace activo, por lo que se requiere una sesión activa durante todo el trace. Un borrado fallido del artifact owned crea un sidecar adyacente.delete-pending; se restaura y se reintenta después de un domain reload. El warning y el estado busy permanecen visibles hasta eliminar el artifact y el marker.- Prewarm acepta únicamente un artifact owned relativo al proyecto, se ejecuta de forma síncrona, conserva el artifact y puede informar de un progressive warmup incompleto. El backend de Unity no admite cache-miss tracing: la solicitud devuelve
Unavailabley no se expone evidencia de cache-miss. - Los artifacts
.graphicsstateowned se guardan bajoTemp/PerfMeter/GraphicsStateCollections, deben ser archivos regulares no vacíos y tienen un límite de 64 MiB. El trace está limitado a 600 frames y el prewarm progresivo a 1.000.000 de states. Se aplican guards de espacio libre mínimo y de paths locales al proyecto. - La evidencia final es: compile de Unity
6000.4.12f1aprobado; GSC EditMode targeted25/25,PerformanceMeterAPI EditMode47/47, capture-bundle EditMode14/14, PlayMode smoke12/12, full post-fix EditMode208/208y full post-fix PlayMode16/16. También aprobó un compile aislado del optional consumer en Unity6000.5.6f1. Los tests full de Unity6000.5, el comportamiento de release-player y de dispositivos siguen siendo release gates y no se afirman aquí.
PerfMeterRenderIntegrationSnapshotes un contrato de observación neutral respecto a la integración, no un capture profundo de Render Graph o Custom Pass. Las lecturas no inician el runtime; antes de la primera observation el pipeline actual soportado puede estarAvailableconNotObserved, y un cambio de pipeline/configuration marca la observación anterior como stale medianteObservationMatchesCurrentPipeline: false, frame/age explícitos y warning.- URP usa el
UniversalRenderingData.renderingModepúblico del frame actual e informa de los passes de PerfMeter realmente programados. HDRP informa delCustomPassreal de PerfMeter, pero el effective rendering mode sigue unavailable. - Se eliminó la reflection privada/interna de passes y recursos de Render Graph. La facade legacy mantiene
registered_pass_count,merged_pass_count,transient_resource_count,imported_resource_countyaliased_resource_counten-1porque no existe una API pública estable para ellos. - La actividad GRD usa el resultado público de
IGPUResidentRenderPipeline.IsGPUResidentDrawerEnabled()y representa el estado global del runtime, no prueba el uso de GRD por una cámara o renderer concreto. Forward+ en URP es una observación del frame actual; en HDRP la availability del rendering mode/Forward+ sigueUnknown. - La effectiveness de GRD usa contadores agregados BRG de draw calls/instancias con provenance exacta. Pueden incluir otros usuarios de
BatchRendererGroup, por lo que no demuestran participación GRD por renderer. Los valores no disponibles o aún sin sample se serializan comonull. - VRS informa del soporte de hardware autoritativo de
SystemInfo/ShadingRateInfo. Configuration y activity permanecenUnknownsalvo que un futuro typed adapter las pruebe; no se afirma actividad de VRS. - Unity no expone un viewer público estable de RenderGraph/CustomPass ni una API de pass targets. Por ello PerfMeter no añade navegación del Editor ni la promete.
- El schema de contexto de captura v1 conserva
rendery añaderender_integration; los schemas JSON/CSV de sesión no cambian. El contexto de un capture externo se congela en el primer sample deCapturing, no se reemplaza con lecturas posteriores. - Evidencia final de PM-REN-001: main compile de Unity
6000.4.12f1aprobado;PerformanceMeterApiTeststargeted53/53,PerfMeterCaptureBundleTests15/15yPerformanceMeterPlayModeSmokeTests12/12; full EditMode final215/215y full PlayMode16/16aprobados. Focused review P1/P2 resolved. La compile matrix aislada pasó en Unity6000.4.12f1URP17.4y HDRP17.4, y Unity6000.5.6f1URP17.5y HDRP17.5. La validación de release-player/dispositivos sigue pending; no se afirma ningún release. - Evidencia final de PM-GRD-001: compile de Unity
6000.4.12f1aprobado; API targeted58/58, capture-bundle15/15y PlayMode smoke12/12; full EditMode220/220y PlayMode16/16aprobados. Focused review P1/P2 resolved; aprobó la compile matrix Unity6000.4/6000.5con URP17.4/17.5y HDRP17.4/17.5. El comportamiento release-player/dispositivos sigue pending.