From fdfcf976aaba0ed65908d3a60b8bb44787783fb1 Mon Sep 17 00:00:00 2001 From: Rares Sebastian Popa Date: Tue, 16 Jun 2020 11:58:00 +0200 Subject: [PATCH] Improved Analytics --- Editor/EditorIterationProfilerAnalytics.cs | 23 ++++-- Editor/EditorIterationProfilerWindow.cs | 86 +++++++++++++--------- Editor/UnityProfiling.cs | 2 + 3 files changed, 72 insertions(+), 39 deletions(-) diff --git a/Editor/EditorIterationProfilerAnalytics.cs b/Editor/EditorIterationProfilerAnalytics.cs index caf1da6..9b7de01 100644 --- a/Editor/EditorIterationProfilerAnalytics.cs +++ b/Editor/EditorIterationProfilerAnalytics.cs @@ -37,18 +37,22 @@ namespace UnityEditor.EditorIterationProfiler internal enum ExportStatus { Started, - Finished + Finished, + Error } internal enum ExportType { Selected, + MultiWindow, Multi, - Captured + Captured, + CapturedAll } struct ExportEventData { + public string guid; public string format; public string type; public string status; @@ -58,9 +62,12 @@ namespace UnityEditor.EditorIterationProfiler { public bool eipState; public bool isPlaying; + public bool deepProfile; + public bool flatten; + public bool userCode; } - public static void SendExportEvent(string format, string type, string status) + public static void SendExportEvent(string format, string type, string status, string guid) { if (!UnityEngine.Analytics.Analytics.enabled || !EnableAnalytics()) { @@ -71,13 +78,14 @@ namespace UnityEditor.EditorIterationProfiler { format = format, type = type, - status = status + status = status, + guid = guid }; EditorAnalytics.SendEventWithLimit(k_ExportEventName, data); } - public static void SendInteractionEvent(bool state, bool isPlaying) + public static void SendInteractionEvent(bool state, bool isPlaying, bool deepProfile, bool flatten, bool userCode) { if (!UnityEngine.Analytics.Analytics.enabled || !EnableAnalytics()) { @@ -87,7 +95,10 @@ namespace UnityEditor.EditorIterationProfiler var data = new InteractionEventData() { eipState = state, - isPlaying = isPlaying + isPlaying = isPlaying, + deepProfile = deepProfile, + flatten = flatten, + userCode = userCode }; EditorAnalytics.SendEventWithLimit(k_InteractionEventName, data); diff --git a/Editor/EditorIterationProfilerWindow.cs b/Editor/EditorIterationProfilerWindow.cs index 87122e9..e880df5 100644 --- a/Editor/EditorIterationProfilerWindow.cs +++ b/Editor/EditorIterationProfilerWindow.cs @@ -8,8 +8,13 @@ using UnityEditor.ShortcutManagement; using UnityEditorInternal; using UnityEngine; +using ExportType = UnityEditor.EditorIterationProfiler.EditorIterationProfilerAnalytics.ExportType; +using ExportStatus = UnityEditor.EditorIterationProfiler.EditorIterationProfilerAnalytics.ExportStatus; + + namespace UnityEditor.EditorIterationProfiler { + public class EditorIterationProfilerWindow : EditorWindow { internal static class Styles @@ -95,14 +100,6 @@ namespace UnityEditor.EditorIterationProfiler } } - void OnDisable() - { - } - - void OnDestroy() - { - } - void DrawToolbar() { GUILayout.BeginHorizontal(EditorStyles.toolbar); @@ -141,8 +138,7 @@ namespace UnityEditor.EditorIterationProfiler foreach (var exporter in exporters) { - EditorIterationProfilerAnalytics.SendExportEvent(exporter.Name, EditorIterationProfilerAnalytics.ExportType.Captured.ToString(), EditorIterationProfilerAnalytics.ExportStatus.Started.ToString()); - menu.AddItem(new GUIContent(exporter.Name), false, () => ReportExtension(exporter, EditorIterationProfilerIntegration.Instance.IterationList)); + menu.AddItem(new GUIContent(exporter.Name), false, () => ReportExtension(exporter, EditorIterationProfilerIntegration.Instance.IterationList, ExportType.Captured)); } menu.AddSeparator(""); @@ -172,7 +168,6 @@ namespace UnityEditor.EditorIterationProfiler foreach (var exporter in exporters) { - EditorIterationProfilerAnalytics.SendExportEvent(exporter.Name, EditorIterationProfilerAnalytics.ExportType.Selected.ToString(), EditorIterationProfilerAnalytics.ExportStatus.Started.ToString()); menu.AddItem(new GUIContent("Selected Frame/" + exporter.Name), false, () => ReportSelectedFrame(exporter, currentFrameIndex)); } @@ -182,7 +177,6 @@ namespace UnityEditor.EditorIterationProfiler { menu.AddItem(new GUIContent("Multiple Frames/" + exporter.Name), false, () => { - EditorIterationProfilerAnalytics.SendExportEvent(exporter.Name, EditorIterationProfilerAnalytics.ExportType.Multi.ToString(), EditorIterationProfilerAnalytics.ExportStatus.Started.ToString()); var window = GetWindow(); window.Initialize(exporter); }); @@ -201,6 +195,8 @@ namespace UnityEditor.EditorIterationProfiler if (m_TreeView.UserCodeOnly != userCodeOnly) { + EditorIterationProfilerAnalytics.SendInteractionEvent(UnityProfiling.EditorProfilingEnabled, EditorApplication.isPlaying, ProfilerDriver.deepProfiling, EditorIterationProfilerIntegration.Instance.Settings.Flatten, EditorIterationProfilerIntegration.Instance.Settings.UserCode); + m_TreeView.UserCodeOnly = userCodeOnly; EditorPrefs.SetBool(Styles.k_UserCodePref, m_TreeView.UserCodeOnly); m_TreeView.Reload(); @@ -208,6 +204,8 @@ namespace UnityEditor.EditorIterationProfiler if (m_TreeView.Flatten != flatten) { + EditorIterationProfilerAnalytics.SendInteractionEvent(UnityProfiling.EditorProfilingEnabled, EditorApplication.isPlaying, ProfilerDriver.deepProfiling, EditorIterationProfilerIntegration.Instance.Settings.Flatten, EditorIterationProfilerIntegration.Instance.Settings.UserCode); + m_TreeView.Flatten = flatten; EditorPrefs.SetBool(Styles.k_FlattenPref, m_TreeView.Flatten); m_TreeView.Reload(); @@ -217,14 +215,17 @@ namespace UnityEditor.EditorIterationProfiler GUILayout.EndHorizontal(); } - public static void ReportMultipleFrames(IFileDataReporter reporter, int beginRange, int endRange) + public static void ReportMultipleFrames(IFileDataReporter reporter, int beginRange, int endRange, string guid) { + var exportType = ExportType.Multi; if (beginRange == -1) { - ReportSelectedFrame(reporter, beginRange); + ReportSelectedFrame(reporter, beginRange, exportType, guid); return; } + EditorIterationProfilerAnalytics.SendExportEvent(reporter.Name, exportType.ToString(), ExportStatus.Started.ToString(), guid); + var path = EditorUtility.SaveFolderPanel($"Export frames to folder", "", reporter.Extension); for (int i = beginRange - 1; i < endRange; ++i) @@ -238,6 +239,7 @@ namespace UnityEditor.EditorIterationProfiler if (!hfdv.valid) { + EditorIterationProfilerAnalytics.SendExportEvent(reporter.Name, exportType.ToString(), ExportStatus.Error.ToString(), guid); Debug.LogError($"There was an issue getting the frame {i}"); return; } @@ -262,18 +264,23 @@ namespace UnityEditor.EditorIterationProfiler if (path.Length != 0) { reporter.Report(list, Path.Combine(path, filename)); - EditorIterationProfilerAnalytics.SendExportEvent(reporter.Name, EditorIterationProfilerAnalytics.ExportType.Multi.ToString(), EditorIterationProfilerAnalytics.ExportStatus.Finished.ToString()); } } if (path.Length != 0) { - EditorIterationProfilerAnalytics.SendExportEvent(reporter.Name, EditorIterationProfilerAnalytics.ExportType.Multi.ToString(), EditorIterationProfilerAnalytics.ExportStatus.Finished.ToString()); + EditorIterationProfilerAnalytics.SendExportEvent(reporter.Name, exportType.ToString(), ExportStatus.Finished.ToString(), guid); } } - static void ReportSelectedFrame(IFileDataReporter exporter, int currentFrameIndex) + static void ReportSelectedFrame(IFileDataReporter reporter, int currentFrameIndex, ExportType exportType = ExportType.Selected, string guid = "") { + if (string.IsNullOrEmpty(guid)) + { + guid = Guid.NewGuid().ToString(); + EditorIterationProfilerAnalytics.SendExportEvent(reporter.Name, exportType.ToString(), ExportStatus.Started.ToString(), guid); + } + var list = new IterationList(); var hfdv = UnityProfiling.GetFrame(currentFrameIndex, 0); @@ -283,6 +290,7 @@ namespace UnityEditor.EditorIterationProfiler if (!hfdv.valid) { + EditorIterationProfilerAnalytics.SendExportEvent(reporter.Name, exportType.ToString(), ExportStatus.Error.ToString(), guid); Debug.LogError($"There was an issue getting the frame {currentFrameIndex}"); return; } @@ -302,28 +310,37 @@ namespace UnityEditor.EditorIterationProfiler lastEvent.SetStartFinishTimeFromChildren(); lastEvent.Identifier = $"Data (Frame {currentFrameIndex + 1})"; - ReportExtension(exporter, list, isExportingProfilerSelectedFrame: true); + ReportExtension(reporter, list, exportType, guid); } static void ReportAllExtensions(IIterationList iterationList) { + var guid = Guid.NewGuid().ToString(); + var path = EditorUtility.SaveFolderPanel($"Export frames to folder", "", ""); var extensions = EditorIterationProfilerIntegration.Instance.DataReporterProvider.GetAllReporters(); foreach (var extension in extensions) { - ReportExtension(extension, iterationList, path); + ReportExtension(extension, iterationList, ExportType.CapturedAll, guid, path); } } - static void ReportExtension(IFileDataReporter fileReporterType, IIterationList iterationList, string folderPath = "", bool isExportingProfilerSelectedFrame = false) + static void ReportExtension(IFileDataReporter fileReporterType, IIterationList iterationList, ExportType exportType, string guid = "", string folderPath = "") { + if (string.IsNullOrEmpty(guid)) + { + guid = Guid.NewGuid().ToString(); + } + + if(ExportType.Selected != exportType) + { + EditorIterationProfilerAnalytics.SendExportEvent(fileReporterType.Name, exportType.ToString(), ExportStatus.Started.ToString(), guid); + } + var reporter = EditorIterationProfilerIntegration.Instance.DataReporterProvider.TryGetReporter(fileReporterType.GetType()); if (reporter == null) { -#if DEVELOPMENT_BUILD - Debug.LogError($"Reporter is null! Check if type name \"{typeName}\" exists"); -#endif return; } @@ -343,14 +360,7 @@ namespace UnityEditor.EditorIterationProfiler { reporter.Report(iterationList, path); - if (isExportingProfilerSelectedFrame) - { - EditorIterationProfilerAnalytics.SendExportEvent(reporter.Name, EditorIterationProfilerAnalytics.ExportType.Selected.ToString(), EditorIterationProfilerAnalytics.ExportStatus.Finished.ToString()); - } - else - { - EditorIterationProfilerAnalytics.SendExportEvent(reporter.Name, EditorIterationProfilerAnalytics.ExportType.Captured.ToString(), EditorIterationProfilerAnalytics.ExportStatus.Finished.ToString()); - } + EditorIterationProfilerAnalytics.SendExportEvent(reporter.Name, exportType.ToString(), ExportStatus.Finished.ToString(), guid); } } @@ -382,7 +392,7 @@ namespace UnityEditor.EditorIterationProfiler void OnLostFocus() { - EditorIterationProfilerAnalytics.SendInteractionEvent(UnityProfiling.EditorProfilingEnabled, EditorApplication.isPlaying); + EditorIterationProfilerAnalytics.SendInteractionEvent(UnityProfiling.EditorProfilingEnabled, EditorApplication.isPlaying, ProfilerDriver.deepProfiling, EditorIterationProfilerIntegration.Instance.Settings.Flatten, EditorIterationProfilerIntegration.Instance.Settings.UserCode); } void OnGUI() @@ -480,6 +490,8 @@ namespace UnityEditor.EditorIterationProfiler int m_FirstRange = -1; int m_SecondRange = -1; + string m_EventGuid; + static void OpenWindow() { GetWindow(); @@ -488,6 +500,14 @@ namespace UnityEditor.EditorIterationProfiler public void Initialize(IFileDataReporter exporter) { m_Exporter = exporter; + + m_EventGuid = Guid.NewGuid().ToString(); + EditorIterationProfilerAnalytics.SendExportEvent(exporter.Name, ExportType.MultiWindow.ToString(), ExportStatus.Started.ToString(), m_EventGuid); + } + + public void OnDestroy() + { + EditorIterationProfilerAnalytics.SendExportEvent(m_Exporter.Name, ExportType.MultiWindow.ToString(), ExportStatus.Finished.ToString(), m_EventGuid); } void OnEnable() @@ -517,7 +537,7 @@ namespace UnityEditor.EditorIterationProfiler if (GUILayout.Button("Export")) { Debug.Log($"Exporting Frames [{m_FirstRange},{m_SecondRange}] ({Mathf.Abs(m_SecondRange) - Mathf.Abs(m_FirstRange) + 1} frames)"); - EditorIterationProfilerWindow.ReportMultipleFrames(m_Exporter, m_FirstRange, m_SecondRange); + EditorIterationProfilerWindow.ReportMultipleFrames(m_Exporter, m_FirstRange, m_SecondRange, m_EventGuid); Close(); } diff --git a/Editor/UnityProfiling.cs b/Editor/UnityProfiling.cs index 8fd1ec7..fc66eaf 100644 --- a/Editor/UnityProfiling.cs +++ b/Editor/UnityProfiling.cs @@ -39,6 +39,8 @@ namespace UnityEditor.EditorIterationProfiler if (doApply) { + EditorIterationProfilerAnalytics.SendInteractionEvent(EditorProfilingEnabled, EditorApplication.isPlaying, ProfilerDriver.deepProfiling, EditorIterationProfilerIntegration.Instance.Settings.Flatten, EditorIterationProfilerIntegration.Instance.Settings.UserCode); + ProfilerDriver.deepProfiling = deep; EditorPrefs.SetBool(EditorIterationProfilerWindow.Styles.k_EnableDeepProfile, deep); EditorIterationProfilerIntegration.Instance.Settings.DeepProfile = deep;