7502018d20
There is an asset in the store I grabbed. the coding is WAY above my head, I got about half of it and integrated and adapted what I can to it. im going as far as I can with it and ill come back in a few month when I understand t better.
114 lines
5.8 KiB
C#
114 lines
5.8 KiB
C#
using System;
|
|
using System.Collections.Generic;
|
|
using UnityEditor.AddressableAssets.Diagnostics.GUI;
|
|
using UnityEditor.AddressableAssets.Diagnostics.GUI.Graph;
|
|
using UnityEngine;
|
|
using UnityEngine.ResourceManagement;
|
|
using UnityEngine.ResourceManagement.Diagnostics;
|
|
|
|
namespace UnityEditor.AddressableAssets.Diagnostics
|
|
{
|
|
/*
|
|
* ResourceManager specific implementation of an EventViewerWindow
|
|
*/
|
|
class ResourceProfilerWindow : EventViewerWindow
|
|
{
|
|
[MenuItem("Window/Asset Management/Addressables/Event Viewer", priority = 2051)]
|
|
internal static void ShowWindow()
|
|
{
|
|
var setting = AddressableAssetSettingsDefaultObject.Settings;
|
|
if (setting == null)
|
|
{
|
|
EditorUtility.DisplayDialog("Error", "Attempting to open Addressables Event Viewer window, but no Addressables Settings file exists. \n\nOpen 'Window/Asset Management/Addressables/Groups' for more info.", "Ok");
|
|
return;
|
|
}
|
|
var window = GetWindow<ResourceProfilerWindow>();
|
|
window.titleContent = new GUIContent("Addressables Event Viewer", "Addressables Event Viewer");
|
|
window.Show();
|
|
}
|
|
|
|
protected override bool ShowEventDetailPanel { get { return false; } }
|
|
protected override bool ShowEventPanel { get { return true; } }
|
|
|
|
protected static string GetDataStreamName(int stream)
|
|
{
|
|
return ((ResourceManager.DiagnosticEventType)stream).ToString();
|
|
}
|
|
|
|
protected override bool OnCanHandleEvent(string graph)
|
|
{
|
|
return graph == "ResourceManager";
|
|
}
|
|
|
|
protected override bool OnRecordEvent(DiagnosticEvent evt)
|
|
{
|
|
if (evt.Graph == "ResourceManager")
|
|
{
|
|
switch ((ResourceManager.DiagnosticEventType)evt.Stream)
|
|
{
|
|
case ResourceManager.DiagnosticEventType.AsyncOperationCreate:
|
|
case ResourceManager.DiagnosticEventType.AsyncOperationDestroy:
|
|
case ResourceManager.DiagnosticEventType.AsyncOperationComplete:
|
|
case ResourceManager.DiagnosticEventType.AsyncOperationFail:
|
|
return true;
|
|
}
|
|
}
|
|
return base.OnRecordEvent(evt);
|
|
}
|
|
|
|
protected override void OnDrawEventDetail(Rect rect, DiagnosticEvent evt)
|
|
{
|
|
}
|
|
|
|
protected override void OnGetColumns(List<string> columnNames, List<float> columnSizes)
|
|
{
|
|
if (columnNames == null || columnSizes == null)
|
|
return;
|
|
columnNames.AddRange(new[] { "Event", "Key" });
|
|
columnSizes.AddRange(new float[] { 150, 400 });
|
|
}
|
|
|
|
protected override bool OnDrawColumnCell(Rect cellRect, DiagnosticEvent evt, int column)
|
|
{
|
|
switch (column)
|
|
{
|
|
case 0: EditorGUI.LabelField(cellRect, ((ResourceManager.DiagnosticEventType)evt.Stream).ToString()); break;
|
|
case 1: EditorGUI.LabelField(cellRect, evt.DisplayName); break;
|
|
}
|
|
|
|
return true;
|
|
}
|
|
|
|
protected override void OnInitializeGraphView(EventGraphListView graphView)
|
|
{
|
|
if (graphView == null)
|
|
return;
|
|
|
|
Color labelBgColor = GraphColors.LabelGraphLabelBackground;
|
|
|
|
Color refCountBgColor = new Color(53 / 255f, 136 / 255f, 167 / 255f, 1);
|
|
Color loadingBgColor = Color.Lerp(refCountBgColor, GraphColors.WindowBackground, 0.5f);
|
|
Color refCountColor = new Color(123 / 255f, 158 / 255f, 6 / 255f, 1);
|
|
|
|
//Each DefineGraph call makes an association between a "name" (e.g. EventCount) and all EventDataSets with a matching "graph" member.
|
|
//These graphs are then used to determine how/what the graphView will draw when dealing with samples from its associated EventDataSets
|
|
|
|
graphView.DefineGraph("EventCount", 0, new GraphLayerVertValueLine(0, "EventCount", "Event Counts", Color.green),
|
|
new GraphLayerLabel(0, "EventCount", "Number of instantiations on current frame", refCountColor, GraphColors.LabelGraphLabelBackground, v => v.ToString()));
|
|
|
|
graphView.DefineGraph("InstantiationCount", 0, new GraphLayerVertValueLine(0, "InstantiationCount", "Instantiation Counts", Color.green),
|
|
new GraphLayerLabel(0, "InstantiationCount", "Number of instantiations on current frame", refCountColor, GraphColors.LabelGraphLabelBackground, v => v.ToString()));
|
|
|
|
graphView.DefineGraph("ResourceManager", (int)ResourceManager.DiagnosticEventType.AsyncOperationReferenceCount,
|
|
new GraphLayerBackgroundGraph((int)ResourceManager.DiagnosticEventType.AsyncOperationReferenceCount, refCountBgColor, (int)ResourceManager.DiagnosticEventType.AsyncOperationPercentComplete, loadingBgColor, "LoadPercent", "Loaded"),
|
|
new GraphLayerBarChartMesh((int)ResourceManager.DiagnosticEventType.AsyncOperationReferenceCount, "RefCount", "Reference Count", refCountColor),
|
|
new GraphLayerEventMarker((int)ResourceManager.DiagnosticEventType.AsyncOperationCreate, "", "", Color.grey, Color.grey),
|
|
new GraphLayerEventMarker((int)ResourceManager.DiagnosticEventType.AsyncOperationComplete, "", "", Color.white, Color.white),
|
|
new GraphLayerEventMarker((int)ResourceManager.DiagnosticEventType.AsyncOperationDestroy, "", "", Color.black, Color.black),
|
|
new GraphLayerEventMarker((int)ResourceManager.DiagnosticEventType.AsyncOperationFail, "", "", Color.red, Color.red),
|
|
new GraphLayerLabel((int)ResourceManager.DiagnosticEventType.AsyncOperationReferenceCount, "RefCount", "Reference Count", refCountColor, labelBgColor, v => v.ToString())
|
|
);
|
|
}
|
|
}
|
|
}
|