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.
89 lines
2.9 KiB
89 lines
2.9 KiB
using System;
|
|
using System.Diagnostics;
|
|
using System.Linq;
|
|
using UnityEngine.Analytics;
|
|
using UnityEngine.Rendering;
|
|
using static UnityEngine.Analytics.IAnalytic;
|
|
|
|
namespace UnityEditor.Rendering.Analytics
|
|
{
|
|
// schema = com.unity3d.data.schemas.editor.analytics.uDebugManagerWindowLifetimeAnalytic_v1
|
|
// taxonomy = editor.analytics.uDebugManagerWindowLifetimeAnalytic.v1
|
|
internal class DebugManagerWindowLifetimeAnalytic
|
|
{
|
|
|
|
private static DateTime?[] timeStamps = new DateTime?[2] { null, null };
|
|
|
|
[InitializeOnLoadMethod]
|
|
static void SubscribeToDebugManagerOpenCloseWindows()
|
|
{
|
|
DebugManager.windowStateChanged += OnWindowStateChanged;
|
|
AssemblyReloadEvents.beforeAssemblyReload += OnBeforeAssemblyReload;
|
|
}
|
|
|
|
private static void OnBeforeAssemblyReload()
|
|
{
|
|
AssemblyReloadEvents.beforeAssemblyReload -= OnBeforeAssemblyReload;
|
|
DebugManager.windowStateChanged -= OnWindowStateChanged;
|
|
}
|
|
|
|
private static void OnWindowStateChanged(DebugManager.UIMode windowMode, bool open)
|
|
{
|
|
try
|
|
{
|
|
if (!timeStamps[(int)windowMode].HasValue)
|
|
{
|
|
timeStamps[(int)windowMode] = DateTime.Now;
|
|
}
|
|
else
|
|
{
|
|
Send(windowMode, timeStamps[(int)windowMode].Value);
|
|
timeStamps[(int)windowMode] = null;
|
|
}
|
|
}
|
|
catch
|
|
{
|
|
// ignored, do not let analytics throw an error
|
|
}
|
|
}
|
|
|
|
[AnalyticInfo(eventName: "uDebugManagerWindowLifetimeAnalytic", vendorKey: "unity.srp", maxEventsPerHour: 10, maxNumberOfElements: 1000)]
|
|
internal class Analytic : IAnalytic
|
|
{
|
|
public Analytic(DebugManager.UIMode windowMode, DateTime start)
|
|
{
|
|
var elapsed = DateTime.Now - start;
|
|
using (UnityEngine.Pool.GenericPool<Data>.Get(out var data))
|
|
{
|
|
data.window_mode = windowMode.ToString();
|
|
data.seconds_opened = elapsed.Seconds;
|
|
m_Data = data;
|
|
}
|
|
}
|
|
|
|
[DebuggerDisplay("{window_mode} - {seconds_opened}")]
|
|
[Serializable]
|
|
class Data : IAnalytic.IData
|
|
{
|
|
// Naming convention for analytics data
|
|
public string window_mode;
|
|
public int seconds_opened;
|
|
}
|
|
|
|
public bool TryGatherData(out IAnalytic.IData data, out Exception error)
|
|
{
|
|
data = m_Data;
|
|
error = null;
|
|
return true;
|
|
}
|
|
Data m_Data;
|
|
|
|
};
|
|
|
|
static void Send(DebugManager.UIMode windowMode, DateTime start)
|
|
{
|
|
Analytic analytic = new Analytic(windowMode, start);
|
|
EditorAnalytics.SendAnalytic(analytic);
|
|
}
|
|
};
|
|
}
|