Nessuna descrizione
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.

UniversalAnalytics.cs 4.0KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103
  1. using System;
  2. using System.Collections.Generic;
  3. using System.Linq;
  4. using UnityEngine.Analytics;
  5. using UnityEngine;
  6. using UnityEngine.Rendering;
  7. using UnityEngine.Rendering.Universal;
  8. using UnityEditor.Build;
  9. using UnityEditor.Build.Reporting;
  10. namespace UnityEditor.Rendering.Universal
  11. {
  12. class UniversalAnalytics : IPostprocessBuildWithReport
  13. {
  14. const int k_MaxEventsPerHour = 1000;
  15. const int k_MaxNumberOfElements = 1000;
  16. const string k_VendorKey = "unity.universal";
  17. const string k_EventName = "uUniversalRenderPipelineUsage";
  18. [AnalyticInfo(eventName: k_EventName, vendorKey: k_VendorKey, maxEventsPerHour: k_MaxEventsPerHour, maxNumberOfElements: k_MaxNumberOfElements)]
  19. class Analytic : IAnalytic
  20. {
  21. public bool TryGatherData(out IAnalytic.IData data, out Exception error)
  22. {
  23. data = null;
  24. UniversalRenderPipelineAsset rendererAsset = GraphicsSettings.currentRenderPipeline as UniversalRenderPipelineAsset;
  25. if (rendererAsset != null)
  26. {
  27. ScriptableRendererData[] rendererDataList = rendererAsset.m_RendererDataList;
  28. string mainLightMode = rendererAsset.mainLightRenderingMode.ToString();
  29. string additionalLightMode = rendererAsset.additionalLightsRenderingMode.ToString();
  30. HashSet<string> rendererDatas = new HashSet<string>();
  31. HashSet<string> renderFeatures = new HashSet<string>();
  32. int rendererDataAmount = 0;
  33. int rendererFeaturesAmount = 0;
  34. foreach (ScriptableRendererData rendererData in rendererDataList)
  35. {
  36. if (rendererData != null)
  37. {
  38. rendererDataAmount++;
  39. rendererDatas.Add(rendererData.GetType().ToString());
  40. foreach (ScriptableRendererFeature rendererFeature in rendererData.rendererFeatures)
  41. {
  42. if (rendererFeature != null)
  43. {
  44. rendererFeaturesAmount++;
  45. renderFeatures.Add(rendererFeature.GetType().ToString());
  46. }
  47. }
  48. }
  49. }
  50. data = new AnalyticsData()
  51. {
  52. renderer_data = rendererDatas.ToArray(),
  53. renderer_data_amount = rendererDataAmount,
  54. renderer_features = renderFeatures.ToArray(),
  55. renderer_features_amount = rendererFeaturesAmount,
  56. main_light_rendering_mode = mainLightMode,
  57. additional_light_rendering_mode = additionalLightMode,
  58. };
  59. }
  60. error = null;
  61. return true;
  62. }
  63. [Serializable]
  64. struct AnalyticsData : IAnalytic.IData
  65. {
  66. public string[] renderer_data;
  67. public int renderer_data_amount;
  68. public string[] renderer_features;
  69. public int renderer_features_amount;
  70. public string main_light_rendering_mode;
  71. public string additional_light_rendering_mode;
  72. }
  73. }
  74. static void SendUniversalEvent()
  75. {
  76. //The event shouldn't be able to report if this is disabled but if we know we're not going to report
  77. //Lets early out and not waste time gathering all the data
  78. if (!EditorAnalytics.enabled)
  79. return;
  80. Analytic analytic = new Analytic();
  81. EditorAnalytics.SendAnalytic(analytic);
  82. }
  83. public int callbackOrder { get; }
  84. public void OnPostprocessBuild(BuildReport report)
  85. {
  86. SendUniversalEvent();
  87. }
  88. }
  89. }