Unity-jump-proj
This commit is contained in:
@ -0,0 +1,228 @@
|
||||
// #define COVERAGE_ANALYTICS_LOGGING
|
||||
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using UnityEditor.TestTools.CodeCoverage.Utils;
|
||||
using UnityEngine;
|
||||
using UnityEngine.Analytics;
|
||||
|
||||
namespace UnityEditor.TestTools.CodeCoverage.Analytics
|
||||
{
|
||||
[Serializable]
|
||||
internal class Timer
|
||||
{
|
||||
public void Start()
|
||||
{
|
||||
startTime = DateTime.Now;
|
||||
}
|
||||
|
||||
public long elapsedTimeMs => (long)(DateTime.Now - startTime).TotalMilliseconds;
|
||||
|
||||
[SerializeField]
|
||||
private DateTime startTime = DateTime.Now;
|
||||
}
|
||||
|
||||
[Serializable]
|
||||
internal class CoverageAnalytics : ScriptableSingleton<CoverageAnalytics>
|
||||
{
|
||||
[SerializeField]
|
||||
private bool s_Registered;
|
||||
[SerializeField]
|
||||
private List<int> s_ResultsIdsList;
|
||||
|
||||
public CoverageAnalyticsEvent CurrentCoverageEvent;
|
||||
public Timer CoverageTimer;
|
||||
|
||||
protected CoverageAnalytics() : base()
|
||||
{
|
||||
ResetEvents();
|
||||
}
|
||||
|
||||
public void ResetEvents()
|
||||
{
|
||||
CurrentCoverageEvent = new CoverageAnalyticsEvent();
|
||||
CoverageTimer = new Timer();
|
||||
s_ResultsIdsList = new List<int>();
|
||||
|
||||
CurrentCoverageEvent.actionID = ActionID.Other;
|
||||
CurrentCoverageEvent.coverageModeId = CoverageModeID.None;
|
||||
CurrentCoverageEvent.numOfIncludedPaths = 0;
|
||||
CurrentCoverageEvent.numOfExcludedPaths = 0;
|
||||
}
|
||||
|
||||
public void StartTimer()
|
||||
{
|
||||
CoverageTimer.Start();
|
||||
}
|
||||
|
||||
// See ResultsLogger.cs for details
|
||||
public void AddResult(ResultID resultId)
|
||||
{
|
||||
s_ResultsIdsList.Add((int)resultId);
|
||||
}
|
||||
|
||||
public void SendCoverageEvent(bool success)
|
||||
{
|
||||
CurrentCoverageEvent.success = success;
|
||||
CurrentCoverageEvent.duration = CoverageTimer.elapsedTimeMs;
|
||||
CurrentCoverageEvent.resultIds = s_ResultsIdsList.ToArray();
|
||||
|
||||
bool runFromCommandLine = CommandLineManager.instance.runFromCommandLine;
|
||||
bool batchmode = CommandLineManager.instance.batchmode;
|
||||
bool useProjectSettings = CommandLineManager.instance.useProjectSettings;
|
||||
|
||||
CurrentCoverageEvent.runFromCommandLine = runFromCommandLine;
|
||||
CurrentCoverageEvent.batchmode = batchmode;
|
||||
CurrentCoverageEvent.useProjectSettings = useProjectSettings;
|
||||
|
||||
if (batchmode && !useProjectSettings)
|
||||
{
|
||||
CurrentCoverageEvent.autogenerate = CommandLineManager.instance.generateBadgeReport || CommandLineManager.instance.generateHTMLReport || CommandLineManager.instance.generateAdditionalReports;
|
||||
CurrentCoverageEvent.createBadges = CommandLineManager.instance.generateBadgeReport;
|
||||
CurrentCoverageEvent.generateHistory = CommandLineManager.instance.generateHTMLReportHistory;
|
||||
CurrentCoverageEvent.generateHTMLReport = CommandLineManager.instance.generateHTMLReport;
|
||||
CurrentCoverageEvent.generateMetrics = CommandLineManager.instance.generateAdditionalMetrics;
|
||||
CurrentCoverageEvent.generateTestReferences = CommandLineManager.instance.generateTestReferences;
|
||||
CurrentCoverageEvent.generateAdditionalReports = CommandLineManager.instance.generateAdditionalReports;
|
||||
CurrentCoverageEvent.dontClear = CommandLineManager.instance.dontClear;
|
||||
CurrentCoverageEvent.useDefaultAssemblyFilters = !CommandLineManager.instance.assemblyFiltersSpecified;
|
||||
CurrentCoverageEvent.useDefaultPathFilters = !CommandLineManager.instance.pathFiltersSpecified;
|
||||
CurrentCoverageEvent.useDefaultResultsLoc = CommandLineManager.instance.coverageResultsPath.Length == 0;
|
||||
CurrentCoverageEvent.useDefaultHistoryLoc = CommandLineManager.instance.coverageHistoryPath.Length == 0;
|
||||
CurrentCoverageEvent.usePathReplacePatterns = CommandLineManager.instance.pathReplacingSpecified;
|
||||
CurrentCoverageEvent.useSourcePaths = CommandLineManager.instance.sourcePathsSpecified;
|
||||
CurrentCoverageEvent.usePathFiltersFromFile = CommandLineManager.instance.pathFiltersFromFileSpecified;
|
||||
CurrentCoverageEvent.useAssemblyFiltersFromFile = CommandLineManager.instance.assemblyFiltersFromFileSpecified;
|
||||
}
|
||||
else
|
||||
{
|
||||
CurrentCoverageEvent.autogenerate = CommandLineManager.instance.generateBadgeReport || CommandLineManager.instance.generateHTMLReport || CommandLineManager.instance.generateAdditionalReports || CoveragePreferences.instance.GetBool("AutoGenerateReport", true);
|
||||
CurrentCoverageEvent.autoOpenReport = CoveragePreferences.instance.GetBool("OpenReportWhenGenerated", true);
|
||||
CurrentCoverageEvent.createBadges = CommandLineManager.instance.generateBadgeReport || CoveragePreferences.instance.GetBool("GenerateBadge", true);
|
||||
CurrentCoverageEvent.generateHistory = CommandLineManager.instance.generateHTMLReportHistory || CoveragePreferences.instance.GetBool("IncludeHistoryInReport", true);
|
||||
CurrentCoverageEvent.generateHTMLReport = CommandLineManager.instance.generateHTMLReport || CoveragePreferences.instance.GetBool("GenerateHTMLReport", true);
|
||||
CurrentCoverageEvent.generateMetrics = CommandLineManager.instance.generateAdditionalMetrics || CoveragePreferences.instance.GetBool("GenerateAdditionalMetrics", false);
|
||||
CurrentCoverageEvent.generateTestReferences = CommandLineManager.instance.generateTestReferences || CoveragePreferences.instance.GetBool("GenerateTestReferences", false);
|
||||
CurrentCoverageEvent.generateAdditionalReports = CommandLineManager.instance.generateAdditionalReports || CoveragePreferences.instance.GetBool("GenerateAdditionalReports", false);
|
||||
CurrentCoverageEvent.dontClear = CommandLineManager.instance.dontClear;
|
||||
CurrentCoverageEvent.usePathReplacePatterns = CommandLineManager.instance.pathReplacingSpecified;
|
||||
CurrentCoverageEvent.useSourcePaths = CommandLineManager.instance.sourcePathsSpecified;
|
||||
CurrentCoverageEvent.usePathFiltersFromFile = CommandLineManager.instance.pathFiltersFromFileSpecified;
|
||||
CurrentCoverageEvent.useAssemblyFiltersFromFile = CommandLineManager.instance.assemblyFiltersFromFileSpecified;
|
||||
|
||||
|
||||
CurrentCoverageEvent.useDefaultAssemblyFilters = !CommandLineManager.instance.assemblyFiltersSpecified;
|
||||
if (!CommandLineManager.instance.assemblyFiltersSpecified)
|
||||
CurrentCoverageEvent.useDefaultAssemblyFilters = string.Equals(CoveragePreferences.instance.GetString("IncludeAssemblies", AssemblyFiltering.GetUserOnlyAssembliesString()), AssemblyFiltering.GetUserOnlyAssembliesString(), StringComparison.InvariantCultureIgnoreCase);
|
||||
|
||||
CurrentCoverageEvent.useDefaultPathFilters = !CommandLineManager.instance.pathFiltersSpecified;
|
||||
if (!CommandLineManager.instance.pathFiltersSpecified)
|
||||
CurrentCoverageEvent.useDefaultPathFilters = string.Equals(CoveragePreferences.instance.GetString("PathsToInclude", string.Empty), string.Empty) && string.Equals(CoveragePreferences.instance.GetString("PathsToExclude", string.Empty), string.Empty);
|
||||
|
||||
CurrentCoverageEvent.useDefaultResultsLoc = CommandLineManager.instance.coverageResultsPath.Length == 0;
|
||||
if (CommandLineManager.instance.coverageResultsPath.Length == 0)
|
||||
CurrentCoverageEvent.useDefaultResultsLoc = string.Equals(CoveragePreferences.instance.GetStringForPaths("Path", string.Empty), CoverageUtils.GetProjectPath(), StringComparison.InvariantCultureIgnoreCase);
|
||||
|
||||
CurrentCoverageEvent.useDefaultHistoryLoc = CommandLineManager.instance.coverageHistoryPath.Length == 0;
|
||||
if (CommandLineManager.instance.coverageHistoryPath.Length == 0)
|
||||
CurrentCoverageEvent.useDefaultHistoryLoc = string.Equals(CoveragePreferences.instance.GetStringForPaths("HistoryPath", string.Empty), CoverageUtils.GetProjectPath(), StringComparison.InvariantCultureIgnoreCase);
|
||||
}
|
||||
|
||||
#if UNITY_2020_1_OR_NEWER
|
||||
CurrentCoverageEvent.inDebugMode = Compilation.CompilationPipeline.codeOptimization == Compilation.CodeOptimization.Debug;
|
||||
#else
|
||||
CurrentCoverageEvent.inDebugMode = true;
|
||||
#endif
|
||||
if (!runFromCommandLine || (runFromCommandLine && !batchmode && !CommandLineManager.instance.assemblyFiltersSpecified))
|
||||
{
|
||||
if (CurrentCoverageEvent.actionID == ActionID.ReportOnly)
|
||||
{
|
||||
string includeAssemblies = CoveragePreferences.instance.GetString("IncludeAssemblies", AssemblyFiltering.GetUserOnlyAssembliesString());
|
||||
string[] includeAssembliesArray = includeAssemblies.Split(new[] { ',' }, StringSplitOptions.RemoveEmptyEntries);
|
||||
CurrentCoverageEvent.includedAssemblies = includeAssembliesArray;
|
||||
}
|
||||
}
|
||||
|
||||
Send(EventName.codeCoverage, CurrentCoverageEvent);
|
||||
|
||||
ResetEvents();
|
||||
}
|
||||
|
||||
public bool RegisterEvents()
|
||||
{
|
||||
if (!EditorAnalytics.enabled)
|
||||
{
|
||||
ResultsLogger.LogSessionItem("Editor analytics are disabled", LogVerbosityLevel.Info);
|
||||
return false;
|
||||
}
|
||||
|
||||
if (s_Registered)
|
||||
{
|
||||
return true;
|
||||
}
|
||||
|
||||
var allNames = Enum.GetNames(typeof(EventName));
|
||||
if (allNames.Any(eventName => !RegisterEvent(eventName)))
|
||||
{
|
||||
return false;
|
||||
}
|
||||
|
||||
s_Registered = true;
|
||||
return true;
|
||||
}
|
||||
|
||||
private bool RegisterEvent(string eventName)
|
||||
{
|
||||
const string vendorKey = "unity.testtools.codecoverage";
|
||||
var result = EditorAnalytics.RegisterEventWithLimit(eventName, 100, 1000, vendorKey);
|
||||
switch (result)
|
||||
{
|
||||
case AnalyticsResult.Ok:
|
||||
{
|
||||
#if COVERAGE_ANALYTICS_LOGGING
|
||||
ResultsLogger.LogSessionItem($"Registered analytics event: {eventName}", LogVerbosityLevel.Info);
|
||||
#endif
|
||||
return true;
|
||||
}
|
||||
case AnalyticsResult.TooManyRequests:
|
||||
// this is fine - event registration survives domain reload (native)
|
||||
return true;
|
||||
default:
|
||||
{
|
||||
ResultsLogger.LogSessionItem($"Failed to register analytics event {eventName}. Result: {result}", LogVerbosityLevel.Error);
|
||||
return false;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private void Send(EventName eventName, object eventData)
|
||||
{
|
||||
if (!RegisterEvents())
|
||||
{
|
||||
#if COVERAGE_ANALYTICS_LOGGING
|
||||
Console.WriteLine($"[{CoverageSettings.PackageName}] Analytics disabled: event='{eventName}', time='{DateTime.Now:HH:mm:ss}', payload={EditorJsonUtility.ToJson(eventData, true)}");
|
||||
#endif
|
||||
return;
|
||||
}
|
||||
try
|
||||
{
|
||||
var result = EditorAnalytics.SendEventWithLimit(eventName.ToString(), eventData);
|
||||
if (result == AnalyticsResult.Ok)
|
||||
{
|
||||
#if COVERAGE_ANALYTICS_LOGGING
|
||||
ResultsLogger.LogSessionItem($"Event={eventName}, time={DateTime.Now:HH:mm:ss}, payload={EditorJsonUtility.ToJson(eventData, true)}", LogVerbosityLevel.Info);
|
||||
#endif
|
||||
}
|
||||
else
|
||||
{
|
||||
ResultsLogger.LogSessionItem($"Failed to send analytics event {eventName}. Result: {result}", LogVerbosityLevel.Error);
|
||||
}
|
||||
}
|
||||
catch (Exception)
|
||||
{
|
||||
// ignored
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
@ -0,0 +1,11 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 712896fdadbc6744585b09d9e159c025
|
||||
MonoImporter:
|
||||
externalObjects: {}
|
||||
serializedVersion: 2
|
||||
defaultReferences: []
|
||||
executionOrder: 0
|
||||
icon: {instanceID: 0}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
@ -0,0 +1,22 @@
|
||||
namespace UnityEditor.TestTools.CodeCoverage.Analytics
|
||||
{
|
||||
internal enum EventName
|
||||
{
|
||||
codeCoverage
|
||||
}
|
||||
|
||||
internal enum ActionID
|
||||
{
|
||||
Other = 0,
|
||||
DataOnly = 1,
|
||||
ReportOnly = 2,
|
||||
DataReport = 3
|
||||
}
|
||||
|
||||
internal enum CoverageModeID
|
||||
{
|
||||
None = 0,
|
||||
TestRunner = 1,
|
||||
Recording = 2
|
||||
}
|
||||
}
|
@ -0,0 +1,11 @@
|
||||
fileFormatVersion: 2
|
||||
guid: f9bb904d2fa36b040bfc7c599e54c407
|
||||
MonoImporter:
|
||||
externalObjects: {}
|
||||
serializedVersion: 2
|
||||
defaultReferences: []
|
||||
executionOrder: 0
|
||||
icon: {instanceID: 0}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
@ -0,0 +1,111 @@
|
||||
using System;
|
||||
|
||||
namespace UnityEditor.TestTools.CodeCoverage.Analytics
|
||||
{
|
||||
[Serializable]
|
||||
internal class CoverageAnalyticsEvent
|
||||
{
|
||||
// The action performed on the event (batchmode compatible)
|
||||
public ActionID actionID;
|
||||
// Array of resultsIds (batchmode compatible)
|
||||
public int[] resultIds;
|
||||
// The coverage mode that was performed on successful action (batchmode compatible)
|
||||
public CoverageModeID coverageModeId;
|
||||
// Duration (in ms) for which the Coverage session lasted (batchmode compatible)
|
||||
public long duration;
|
||||
// Was the coverage session result a success (batchmode compatible)
|
||||
public bool success;
|
||||
// Did the user run the editor from the command line
|
||||
public bool runFromCommandLine;
|
||||
// Did the user run the editor in batch mode
|
||||
public bool batchmode;
|
||||
// Did the user pass the useProjectSettings option in batch mode (batchmode only)
|
||||
public bool useProjectSettings;
|
||||
// Did the user have Generate HTML Report selected (batchmode compatible)
|
||||
public bool generateHTMLReport;
|
||||
// Did the user have Generate History selected (batchmode compatible)
|
||||
public bool generateHistory;
|
||||
// Did the user have Generate Badges selected (batchmode compatible)
|
||||
public bool createBadges;
|
||||
// Did the user have Generate Additional Metrics selected (batchmode compatible)
|
||||
public bool generateMetrics;
|
||||
// Did the user have Generate Test Runner References selected (batchmode compatible)
|
||||
public bool generateTestReferences;
|
||||
// Did the user have Generate Additional reports selected (batchmode compatible)
|
||||
public bool generateAdditionalReports;
|
||||
// Did the user have passed the dontClear coverage option (batchmode compatible)
|
||||
public bool dontClear;
|
||||
// Did the user have Auto Generate Report selected (batchmode compatible)
|
||||
public bool autogenerate;
|
||||
// Did the user have Auto Open Report selected
|
||||
public bool autoOpenReport;
|
||||
// Did the user select the Clear Data button
|
||||
public bool clearData;
|
||||
// Did the user select the Clear History button
|
||||
public bool clearHistory;
|
||||
// Did the user select the Generate From Last button
|
||||
public bool generateFromLast;
|
||||
// Did the user switch to Debug mode (Code Optimization) in the Coverage window
|
||||
public bool switchToDebugMode;
|
||||
// Is the editor in Code Optimization: Debug mode (batchmode compatible)
|
||||
public bool inDebugMode;
|
||||
// Did the user disable Burst Compilation in the Coverage window
|
||||
public bool switchBurstOff;
|
||||
// Did the user select a new Results location or uses the default one (batchmode compatible)
|
||||
public bool useDefaultResultsLoc;
|
||||
// Did the user select a new History location or uses the default one (batchmode compatible)
|
||||
public bool useDefaultHistoryLoc;
|
||||
// Did the user specify different assemblies from the default ones (batchmode compatible)
|
||||
public bool useDefaultAssemblyFilters;
|
||||
// Did the user specify different paths filtering from the default one (batchmode compatible)
|
||||
public bool useDefaultPathFilters;
|
||||
// Did the user enter the Selected Assemblies dialog/dropdown
|
||||
public bool enterAssembliesDialog;
|
||||
// Did the user update any assemblies via the Selected Assemblies dialog/dropdown
|
||||
public bool updateAssembliesDialog;
|
||||
// Did the user update Included Paths
|
||||
public bool updateIncludedPaths;
|
||||
// Did the user select Add Folder for Included Paths
|
||||
public bool selectAddFolder_IncludedPaths;
|
||||
// Did the user select Add File for Included Paths
|
||||
public bool selectAddFile_IncludedPaths;
|
||||
// How many paths are included (batchmode compatible)
|
||||
public int numOfIncludedPaths;
|
||||
// Did the user update Excluded Paths
|
||||
public bool updateExcludedPaths;
|
||||
// Did the user select Add Folder for Excluded Paths
|
||||
public bool selectAddFolder_ExcludedPaths;
|
||||
// Did the user select Add File for Excluded Paths
|
||||
public bool selectAddFile_ExcludedPaths;
|
||||
// How many paths are excluded (batchmode compatible)
|
||||
public int numOfExcludedPaths;
|
||||
// Did the user use the Coverage API to StartRecording (batchmode compatible)
|
||||
public bool useAPI_StartRec;
|
||||
// Did the user use the Coverage API to StopRecording (batchmode compatible)
|
||||
public bool useAPI_StopRec;
|
||||
// Did the user use the Coverage API to PauseRecording (batchmode compatible)
|
||||
public bool useAPI_PauseRec;
|
||||
// Did the user use the Coverage API to UnpauseRecording (batchmode compatible)
|
||||
public bool useAPI_UnpauseRec;
|
||||
// Array of individual included assembly names (batchmode compatible)
|
||||
public string[] includedAssemblies;
|
||||
// Array of individual excluded assembly names (batchmode only)
|
||||
public string[] excludedAssemblies;
|
||||
// Did the user use the onCoverageSessionStarted event (batchmode compatible)
|
||||
public bool useEvent_onCoverageSessionStarted;
|
||||
// Did the user use the onCoverageSessionFinished event (batchmode compatible)
|
||||
public bool useEvent_onCoverageSessionFinished;
|
||||
// Did the user use the onCoverageSessionPaused event (batchmode compatible)
|
||||
public bool useEvent_onCoverageSessionPaused;
|
||||
// Did the user use the onCoverageSessionUnpaused event (batchmode compatible)
|
||||
public bool useEvent_onCoverageSessionUnpaused;
|
||||
// Did the user specify path replace patterns (command line only)
|
||||
public bool usePathReplacePatterns;
|
||||
// Did the user specify source paths (command line only)
|
||||
public bool useSourcePaths;
|
||||
// Did the user specify path filters from file option (command line only)
|
||||
public bool usePathFiltersFromFile;
|
||||
// Did the user specify assembly filters from file option (command line only)
|
||||
public bool useAssemblyFiltersFromFile;
|
||||
}
|
||||
}
|
@ -0,0 +1,11 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 7ab5c92c8c1059a4e92378da3696821e
|
||||
MonoImporter:
|
||||
externalObjects: {}
|
||||
serializedVersion: 2
|
||||
defaultReferences: []
|
||||
executionOrder: 0
|
||||
icon: {instanceID: 0}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
Reference in New Issue
Block a user