using UnityEditor.Rendering.Analytics; using static UnityEngine.Rendering.RenderGraphModule.RenderGraph; namespace UnityEngine.Rendering.RenderGraphModule { internal sealed class RenderGraphEditorRemoteDebugSession : RenderGraphDebugSession { public override bool isActive => false; DebugMessageHandler m_DebugMessageHandler = ScriptableObject.CreateInstance(); public RenderGraphEditorRemoteDebugSession() : base() { m_DebugMessageHandler.Register(OnMessageFromPlayer); // In the case of auto-connect profiler option, the player doesn't receive the OnEditorConnected callback. // Therefore send an explicit activation message to ensure the player becomes aware of the editor. m_DebugMessageHandler.Send(DebugMessageHandler.MessageType.Activate); } public override void Dispose() { base.Dispose(); m_DebugMessageHandler.UnregisterAll(); CoreUtils.Destroy(m_DebugMessageHandler); } void OnMessageFromPlayer(DebugMessageHandler.MessageType messageType, DebugMessageHandler.IPayload payload) { if (messageType == DebugMessageHandler.MessageType.Activate) { // In the event that the player starts after the editor, it will request activation from the editor. m_DebugMessageHandler.Send(DebugMessageHandler.MessageType.Activate); } else if (messageType == DebugMessageHandler.MessageType.DebugData) { var debugDataPayload = payload as DebugMessageHandler.DebugDataPayload; if (!debugDataPayload.isCompatible) { string errorStr = ""; RegisterAndUpdateDebugData(errorStr, EntityId.None, errorStr, null); } else { RegisterAndUpdateDebugData( debugDataPayload.graphName, debugDataPayload.executionId, debugDataPayload.debugData.executionName, debugDataPayload.debugData); } } else if (messageType == DebugMessageHandler.MessageType.AnalyticsData) { if (payload is DebugMessageHandler.AnalyticsPayload { isCompatible: true } analyticsPayload) { RenderGraphViewerSessionCreatedAnalytic.Send(RenderGraphViewerSessionCreatedAnalytic.SessionType.Remote, analyticsPayload); } } } void RegisterAndUpdateDebugData(string graphName, EntityId executionId, string executionName, DebugData debugData) { RegisterGraph(graphName); RegisterExecution(graphName, executionId, debugData.executionName); SetDebugData(graphName, executionId, debugData); } } }