You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
95 lines
3.4 KiB
95 lines
3.4 KiB
#if !UNITY_EDITOR && DEVELOPMENT_BUILD
|
|
using UnityEngine.Networking.PlayerConnection;
|
|
using static UnityEngine.Rendering.RenderGraphModule.RenderGraph;
|
|
|
|
namespace UnityEngine.Rendering.RenderGraphModule
|
|
{
|
|
internal sealed class RenderGraphPlayerRemoteDebugSession : RenderGraphDebugSession
|
|
{
|
|
bool m_IsActive;
|
|
|
|
public override bool isActive => m_IsActive;
|
|
|
|
DebugMessageHandler m_MessageHandler = ScriptableObject.CreateInstance<DebugMessageHandler>();
|
|
|
|
public RenderGraphPlayerRemoteDebugSession() : base()
|
|
{
|
|
m_MessageHandler.Register(OnMessageFromEditor);
|
|
PlayerConnection.instance.RegisterConnection(OnEditorConnected);
|
|
PlayerConnection.instance.RegisterDisconnection(OnEditorDisconnected);
|
|
|
|
// If the editor is already connected when we get here, we request activation.
|
|
// We cannot activate the session immediately because the connection might exist because of the profiler
|
|
// or unit test runner, but Render Graph Viewer is not open.
|
|
// On the other hand, in the event of disconnection, we can deactivate the session directly.
|
|
if (PlayerConnection.instance.isConnected)
|
|
RequestActivate();
|
|
}
|
|
|
|
public override void Dispose()
|
|
{
|
|
base.Dispose();
|
|
PlayerConnection.instance.UnregisterConnection(OnEditorConnected);
|
|
PlayerConnection.instance.UnregisterDisconnection(OnEditorDisconnected);
|
|
m_MessageHandler.UnregisterAll();
|
|
CoreUtils.Destroy(m_MessageHandler);
|
|
}
|
|
|
|
void OnEditorConnected(int playerId) => RequestActivate();
|
|
|
|
void OnEditorDisconnected(int playerId) => DeactivateSession();
|
|
|
|
void RequestActivate()
|
|
{
|
|
m_MessageHandler.Send(DebugMessageHandler.MessageType.Activate);
|
|
}
|
|
|
|
void ActivateSession()
|
|
{
|
|
InvalidateData(); // Invalidate so that data gets re-sent if the session gets reactivated
|
|
if (!m_IsActive)
|
|
{
|
|
m_IsActive = true;
|
|
RegisterAllLocallyKnownGraphsAndExecutions();
|
|
onDebugDataUpdated += SendDebugDataToEditor;
|
|
|
|
SendAnalyticsDataToEditor();
|
|
}
|
|
}
|
|
|
|
void DeactivateSession()
|
|
{
|
|
if (m_IsActive)
|
|
{
|
|
m_IsActive = false;
|
|
onDebugDataUpdated -= SendDebugDataToEditor;
|
|
}
|
|
}
|
|
|
|
void OnMessageFromEditor(DebugMessageHandler.MessageType messageType, DebugMessageHandler.IPayload _)
|
|
{
|
|
if (messageType == DebugMessageHandler.MessageType.Activate)
|
|
ActivateSession();
|
|
}
|
|
|
|
void SendDebugDataToEditor(string graph, EntityId executionId)
|
|
{
|
|
var debugData = GetDebugData(graph, executionId);
|
|
|
|
DebugMessageHandler.DebugDataPayload payload = new ()
|
|
{
|
|
graphName = graph,
|
|
executionId = executionId,
|
|
debugData = debugData
|
|
};
|
|
m_MessageHandler.Send(DebugMessageHandler.MessageType.DebugData, payload);
|
|
}
|
|
|
|
void SendAnalyticsDataToEditor()
|
|
{
|
|
var payload = new DebugMessageHandler.AnalyticsPayload();
|
|
m_MessageHandler.Send(DebugMessageHandler.MessageType.AnalyticsData, payload);
|
|
}
|
|
}
|
|
}
|
|
#endif
|