A game about forced loneliness, made by TACStudios
1using System;
2using UnityEditor.Build;
3using UnityEditor.Build.Reporting;
4using UnityEngine.Analytics;
5using UnityEngine.Rendering;
6
7namespace UnityEditor.Rendering
8{
9 class RenderPipelineGraphicsSettingsAnalytics : IPostprocessBuildWithReport
10 {
11 const int k_MaxEventsPerHour = 1000;
12 const int k_MaxNumberOfElements = 1000;
13 const string k_VendorKey = "unity.srp";
14 const string k_EventName = "uRenderPipelineGraphicsSettingsUsage";
15
16 [AnalyticInfo(eventName: k_EventName, vendorKey: k_VendorKey, maxEventsPerHour: k_MaxEventsPerHour, maxNumberOfElements: k_MaxNumberOfElements)]
17 public class Analytic : IAnalytic
18 {
19 [Serializable]
20 public struct AnalyticsData : IAnalytic.IData
21 {
22 public string settings;
23 public string[] usage;
24 }
25
26 public bool TryGatherData(out IAnalytic.IData data, out Exception error)
27 {
28 data = GatherDataToBeSent();
29 error = null;
30 return true;
31 }
32
33 public static IAnalytic.DataList<AnalyticsData> GatherDataToBeSent()
34 {
35 using (ListPool<AnalyticsData>.Get(out var tmp))
36 {
37 GraphicsSettings.ForEach(settings =>
38 {
39 var settingsType = settings.GetType();
40 var usage = settings.ToNestedColumn(Activator.CreateInstance(settingsType));
41 if (usage.Length != 0)
42 tmp.Add(new AnalyticsData() { settings = settingsType.FullName, usage = usage });
43 });
44
45 return new IAnalytic.DataList<AnalyticsData>(tmp.ToArray());
46 }
47 }
48 }
49
50 static void SendUniversalEvent()
51 {
52 //The event shouldn't be able to report if this is disabled but if we know we're not going to report
53 //Lets early out and not waste time gathering all the data
54 if (!EditorAnalytics.enabled)
55 return;
56
57 Analytic analytic = new Analytic();
58 EditorAnalytics.SendAnalytic(analytic);
59 }
60
61 public int callbackOrder { get; }
62 public void OnPostprocessBuild(BuildReport report)
63 {
64 SendUniversalEvent();
65 }
66 }
67}