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.
84 lines
2.6 KiB
84 lines
2.6 KiB
using System.Collections.Generic; |
|
using System.Linq; |
|
using UnityEngine.Analytics; |
|
using UnityEngine; |
|
|
|
namespace UnityEditor.ShaderGraph |
|
{ |
|
class ShaderGraphAnalytics |
|
{ |
|
static bool s_EventRegistered = false; |
|
const int k_MaxEventsPerHour = 1000; |
|
const int k_MaxNumberOfElements = 1000; |
|
const string k_VendorKey = "unity.shadergraph"; |
|
const string k_EventName = "uShaderGraphUsage"; |
|
|
|
static bool EnableAnalytics() |
|
{ |
|
AnalyticsResult result = EditorAnalytics.RegisterEventWithLimit(k_EventName, k_MaxEventsPerHour, k_MaxNumberOfElements, k_VendorKey); |
|
if (result == AnalyticsResult.Ok) |
|
s_EventRegistered = true; |
|
|
|
return s_EventRegistered; |
|
} |
|
|
|
struct AnalyticsData |
|
{ |
|
public string nodes; |
|
public int node_count; |
|
public string asset_guid; |
|
public int subgraph_count; |
|
} |
|
|
|
public static void SendShaderGraphEvent(string assetGuid, GraphData graph) |
|
{ |
|
//The event shouldn't be able to report if this is disabled but if we know we're not going to report |
|
//Lets early out and not waste time gathering all the data |
|
if (!EditorAnalytics.enabled) |
|
return; |
|
|
|
if (!EnableAnalytics()) |
|
return; |
|
|
|
Dictionary<string, int> nodeTypeAndCount = new Dictionary<string, int>(); |
|
var nodes = graph.GetNodes<AbstractMaterialNode>(); |
|
|
|
int subgraphCount = 0; |
|
foreach (var materialNode in nodes) |
|
{ |
|
string nType = materialNode.GetType().ToString().Split('.').Last(); |
|
|
|
if (nType == "SubGraphNode") |
|
{ |
|
subgraphCount += 1; |
|
} |
|
|
|
if (!nodeTypeAndCount.ContainsKey(nType)) |
|
{ |
|
nodeTypeAndCount[nType] = 1; |
|
} |
|
else |
|
{ |
|
nodeTypeAndCount[nType] += 1; |
|
} |
|
} |
|
var jsonRepr = DictionaryToJson(nodeTypeAndCount); |
|
|
|
var data = new AnalyticsData() |
|
{ |
|
nodes = jsonRepr, |
|
node_count = nodes.Count(), |
|
asset_guid = assetGuid, |
|
subgraph_count = subgraphCount |
|
}; |
|
|
|
EditorAnalytics.SendEventWithLimit(k_EventName, data); |
|
} |
|
|
|
static string DictionaryToJson(Dictionary<string, int> dict) |
|
{ |
|
var entries = dict.Select(d => $"\"{d.Key}\":{string.Join(",", d.Value)}"); |
|
return "{" + string.Join(",", entries) + "}"; |
|
} |
|
} |
|
}
|
|
|