Unity-jump-proj

This commit is contained in:
2024-09-09 11:07:16 +03:00
parent 2c29906bbf
commit fd96a5627d
13707 changed files with 866380 additions and 0 deletions

View File

@ -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
}
}
}
}

View File

@ -0,0 +1,11 @@
fileFormatVersion: 2
guid: 712896fdadbc6744585b09d9e159c025
MonoImporter:
externalObjects: {}
serializedVersion: 2
defaultReferences: []
executionOrder: 0
icon: {instanceID: 0}
userData:
assetBundleName:
assetBundleVariant:

View File

@ -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
}
}

View File

@ -0,0 +1,11 @@
fileFormatVersion: 2
guid: f9bb904d2fa36b040bfc7c599e54c407
MonoImporter:
externalObjects: {}
serializedVersion: 2
defaultReferences: []
executionOrder: 0
icon: {instanceID: 0}
userData:
assetBundleName:
assetBundleVariant:

View File

@ -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;
}
}

View File

@ -0,0 +1,11 @@
fileFormatVersion: 2
guid: 7ab5c92c8c1059a4e92378da3696821e
MonoImporter:
externalObjects: {}
serializedVersion: 2
defaultReferences: []
executionOrder: 0
icon: {instanceID: 0}
userData:
assetBundleName:
assetBundleVariant: