.vs
Assets
Library
APIUpdater
Artifacts
Bee
BuildPlayerData
PackageCache
com.unity.collab-proxy@2.5.2
com.unity.editorcoroutines@1.0.0
com.unity.ext.nunit@1.0.6
com.unity.feature.development@1.0.1
com.unity.ide.rider@3.0.31
com.unity.ide.visualstudio@2.0.22
com.unity.ide.vscode@1.2.5
com.unity.modules.ai@1.0.0
com.unity.modules.androidjni@1.0.0
com.unity.modules.animation@1.0.0
com.unity.modules.assetbundle@1.0.0
com.unity.modules.audio@1.0.0
com.unity.modules.cloth@1.0.0
com.unity.modules.director@1.0.0
com.unity.modules.imageconversion@1.0.0
com.unity.modules.imgui@1.0.0
com.unity.modules.jsonserialize@1.0.0
com.unity.modules.particlesystem@1.0.0
com.unity.modules.physics2d@1.0.0
com.unity.modules.physics@1.0.0
com.unity.modules.screencapture@1.0.0
com.unity.modules.subsystems@1.0.0
com.unity.modules.terrain@1.0.0
com.unity.modules.terrainphysics@1.0.0
com.unity.modules.tilemap@1.0.0
com.unity.modules.ui@1.0.0
com.unity.modules.uielements@1.0.0
com.unity.modules.umbra@1.0.0
com.unity.modules.unityanalytics@1.0.0
com.unity.modules.unitywebrequest@1.0.0
com.unity.modules.unitywebrequestassetbundle@1.0.0
com.unity.modules.unitywebrequestaudio@1.0.0
com.unity.modules.unitywebrequesttexture@1.0.0
com.unity.modules.unitywebrequestwww@1.0.0
com.unity.modules.vehicles@1.0.0
com.unity.modules.video@1.0.0
com.unity.modules.vr@1.0.0
com.unity.modules.wind@1.0.0
com.unity.modules.xr@1.0.0
com.unity.performance.profile-analyzer@1.2.2
Documentation~
Editor
Tests
Editor
FrameTimeGraphSelectionTests.cs
FrameTimeGraphSelectionTests.cs.meta
MarkerDataAPITests.cs
MarkerDataAPITests.cs.meta
MicrosecondsUnitsTest.cs
MicrosecondsUnitsTest.cs.meta
MillisecondsUnitsTest.cs
MillisecondsUnitsTest.cs.meta
ProfileAnalysisAPITests.cs
ProfileAnalysisAPITests.cs.meta
ProfileAnalyzerAPITests.cs
ProfileAnalyzerAPITests.cs.meta
ProfileAnalyzerBaseTest.cs
ProfileAnalyzerBaseTest.cs.meta
ProfileAnalyzerCaptureTests.cs
ProfileAnalyzerCaptureTests.cs.meta
ProfileAnalyzerEmptyTests.cs
ProfileAnalyzerEmptyTests.cs.meta
ProfileDataAPITests.cs
ProfileDataAPITests.cs.meta
ProfileDataTests.cs
ProfileDataTests.cs.meta
UnitsTestFixture.cs
UnitsTestFixture.cs.meta
Unity.Performance.Profile-Analyzer.EditorTests.asmdef
Unity.Performance.Profile-Analyzer.EditorTests.asmdef.meta
.tests.json
Editor.meta
.signature
CHANGELOG.md
CHANGELOG.md.meta
Editor.meta
LICENSE.md
LICENSE.md.meta
README.md
README.md.meta
Tests.meta
package.json
package.json.meta
com.unity.settings-manager@2.0.1
com.unity.test-framework@1.1.33
com.unity.testtools.codecoverage@1.2.6
com.unity.textmeshpro@3.0.6
com.unity.timeline@1.7.6
com.unity.ugui@1.0.0
com.unity.visualscripting@1.9.4
PackageManager
PlayModeViewStates
PlayerDataCache
ScriptAssemblies
Search
ShaderCache
SplashScreenCache
StateCache
UIElements
AnnotationManager
ArtifactDB
ArtifactDB-lock
BuildPlayer.prefs
BuildSettings.asset
EditorOnlyScriptingSettings.json
EditorOnlyVirtualTextureState.json
EditorSnapSettings.asset
EditorUserBuildSettings.asset
InspectorExpandedItems.asset
LastBuild.buildreport
LastSceneManagerSetup.txt
LibraryFormatVersion.txt
MonoManager.asset
SceneVisibilityState.asset
ScriptMapper
ShaderCache.db
SourceAssetDB
SourceAssetDB-lock
SpriteAtlasDatabase.asset
Style.catalog
expandedItems
ilpp.pid
Logs
Packages
ProjectSettings
UserSettings
obj
.vsconfig
Assembly-CSharp.Player.csproj
Assembly-CSharp.csproj
TM1.sln
Unity.CollabProxy.Editor.csproj
Unity.EditorCoroutines.Editor.csproj
Unity.Performance.Profile-Analyzer.Editor.csproj
Unity.PlasticSCM.Editor.csproj
Unity.Rider.Editor.csproj
Unity.Settings.Editor.csproj
Unity.TestTools.CodeCoverage.Editor.OpenCover.Model.csproj
Unity.TestTools.CodeCoverage.Editor.OpenCover.Mono.Reflection.csproj
Unity.TestTools.CodeCoverage.Editor.csproj
Unity.TextMeshPro.Editor.csproj
Unity.TextMeshPro.Player.csproj
Unity.TextMeshPro.csproj
Unity.Timeline.Editor.csproj
Unity.Timeline.Player.csproj
Unity.Timeline.csproj
Unity.VSCode.Editor.csproj
Unity.VisualScripting.Core.Editor.csproj
Unity.VisualScripting.Core.Player.csproj
Unity.VisualScripting.Core.csproj
Unity.VisualScripting.Flow.Editor.csproj
Unity.VisualScripting.Flow.Player.csproj
Unity.VisualScripting.Flow.csproj
Unity.VisualScripting.SettingsProvider.Editor.csproj
Unity.VisualScripting.Shared.Editor.csproj
Unity.VisualScripting.State.Editor.csproj
Unity.VisualScripting.State.Player.csproj
Unity.VisualScripting.State.csproj
Unity.VisualStudio.Editor.csproj
UnityEditor.TestRunner.csproj
UnityEditor.UI.csproj
UnityEngine.TestRunner.Player.csproj
UnityEngine.TestRunner.csproj
UnityEngine.UI.Player.csproj
UnityEngine.UI.csproj
410 lines
15 KiB
C#
410 lines
15 KiB
C#
using NUnit.Framework;
|
|
using System.Collections.Generic;
|
|
using UnityEditor.Performance.ProfileAnalyzer;
|
|
using UnityEngine;
|
|
using System.Text;
|
|
|
|
public class FrameTimeGraphSelectionTests
|
|
{
|
|
static readonly MoveTestConfiguration[] k_MoveTestConfigurations =
|
|
{
|
|
new MoveTestConfiguration(new TestConfiguration.SelectionRange[]
|
|
{
|
|
new TestConfiguration.SelectionRange(0, 10)
|
|
}, 10), // range[0-9] + 10
|
|
new MoveTestConfiguration(new TestConfiguration.SelectionRange[]
|
|
{
|
|
new TestConfiguration.SelectionRange(20, 10)
|
|
}, -10), // range[20-29] - 10
|
|
new MoveTestConfiguration(new TestConfiguration.SelectionRange[]
|
|
{
|
|
new TestConfiguration.SelectionRange(50, 10),
|
|
new TestConfiguration.SelectionRange(100, 10)
|
|
}, 10), // multi-select range[50-59][100-109] + 10
|
|
new MoveTestConfiguration(new TestConfiguration.SelectionRange[]
|
|
{
|
|
new TestConfiguration.SelectionRange(50, 10),
|
|
new TestConfiguration.SelectionRange(100, 10)
|
|
}, -10), // multi-select range[50-59][100-109] - 10
|
|
};
|
|
|
|
// Expects a 300 frame capture.
|
|
static readonly MoveTestConfiguration[] k_MoveClampToBoundsTestConfigurations =
|
|
{
|
|
new MoveTestConfiguration(new TestConfiguration.SelectionRange[]
|
|
{
|
|
new TestConfiguration.SelectionRange(0, 10)
|
|
}, -10), // range[0-9] - 10
|
|
new MoveTestConfiguration(new TestConfiguration.SelectionRange[]
|
|
{
|
|
new TestConfiguration.SelectionRange(290, 10)
|
|
}, 10), // range[290-299] + 10
|
|
new MoveTestConfiguration(new TestConfiguration.SelectionRange[]
|
|
{
|
|
new TestConfiguration.SelectionRange(0, 10),
|
|
new TestConfiguration.SelectionRange(50, 10)
|
|
}, -10), // multi-select range[0-9][50-59] - 10
|
|
new MoveTestConfiguration(new TestConfiguration.SelectionRange[]
|
|
{
|
|
new TestConfiguration.SelectionRange(0, 10),
|
|
new TestConfiguration.SelectionRange(290, 10)
|
|
}, 10), // multi-select range[0-9][290-299] + 10
|
|
};
|
|
|
|
static readonly ResizeTestConfiguration[] k_ResizeTestConfigurations =
|
|
{
|
|
new ResizeTestConfiguration(new TestConfiguration.SelectionRange[]
|
|
{
|
|
new TestConfiguration.SelectionRange(100, 100)
|
|
}, -10, 10), // range[100-199] grow [-10, 10]
|
|
new ResizeTestConfiguration(new TestConfiguration.SelectionRange[]
|
|
{
|
|
new TestConfiguration.SelectionRange(100, 100)
|
|
}, 10, -10), // range[100-199] shrink [10, -10]
|
|
new ResizeTestConfiguration(new TestConfiguration.SelectionRange[]
|
|
{
|
|
new TestConfiguration.SelectionRange(50, 50),
|
|
new TestConfiguration.SelectionRange(200, 50)
|
|
}, -10, 10), // multi-select range[50-99][200-249] grow [-10, 10]
|
|
new ResizeTestConfiguration(new TestConfiguration.SelectionRange[]
|
|
{
|
|
new TestConfiguration.SelectionRange(50, 50),
|
|
new TestConfiguration.SelectionRange(200, 50)
|
|
}, 10, -10), // multi-select range[50-99][200-249] shrink [10, -10]
|
|
new ResizeTestConfiguration(new TestConfiguration.SelectionRange[]
|
|
{
|
|
new TestConfiguration.SelectionRange(50, 50),
|
|
new TestConfiguration.SelectionRange(200, 50)
|
|
}, -10, 0), // multi-select range[50-99][200-249] grow left [-10, 0]
|
|
new ResizeTestConfiguration(new TestConfiguration.SelectionRange[]
|
|
{
|
|
new TestConfiguration.SelectionRange(50, 50),
|
|
new TestConfiguration.SelectionRange(200, 50)
|
|
}, 0, 10), // multi-select range[50-99][200-249] grow right [0, 10]
|
|
new ResizeTestConfiguration(new TestConfiguration.SelectionRange[]
|
|
{
|
|
new TestConfiguration.SelectionRange(50, 50),
|
|
new TestConfiguration.SelectionRange(200, 50)
|
|
}, 10, 0), // multi-select range[50-99][200-249] shrink left [10, 0]
|
|
new ResizeTestConfiguration(new TestConfiguration.SelectionRange[]
|
|
{
|
|
new TestConfiguration.SelectionRange(50, 50),
|
|
new TestConfiguration.SelectionRange(200, 50)
|
|
}, 0, -10), // multi-select range[50-99][200-249] shrink right [0, -10]
|
|
};
|
|
|
|
// Expects a 300 frame capture.
|
|
static readonly ResizeTestConfiguration[] k_ResizeClampToBoundsTestConfigurations =
|
|
{
|
|
new ResizeTestConfiguration(new TestConfiguration.SelectionRange[]
|
|
{
|
|
new TestConfiguration.SelectionRange(0, 10)
|
|
}, -10, 0), // range[0-9] grow left [-10, 0]
|
|
new ResizeTestConfiguration(new TestConfiguration.SelectionRange[]
|
|
{
|
|
new TestConfiguration.SelectionRange(290, 10)
|
|
}, 0, 10), // range[290-299] grow right [0, 10]
|
|
new ResizeTestConfiguration(new TestConfiguration.SelectionRange[]
|
|
{
|
|
new TestConfiguration.SelectionRange(0, 10),
|
|
new TestConfiguration.SelectionRange(50, 10)
|
|
}, -10, 0), // range[0-9][50-59] grow left [-10, 0]
|
|
new ResizeTestConfiguration(new TestConfiguration.SelectionRange[]
|
|
{
|
|
new TestConfiguration.SelectionRange(0, 10),
|
|
new TestConfiguration.SelectionRange(290, 10)
|
|
}, 0, 10), // range[0-9][290-299] grow right [0, 10]
|
|
};
|
|
|
|
FrameTimeGraph m_FrameTimeGraph;
|
|
List<int> m_ReportedSelection;
|
|
|
|
[OneTimeSetUp]
|
|
public void OneTimeSetUp()
|
|
{
|
|
var data = GenerateFrameTimeGraphData();
|
|
m_FrameTimeGraph = NewFrameTimeGraph();
|
|
m_FrameTimeGraph.SetData(data);
|
|
m_FrameTimeGraph.SetRangeCallback(OnFrameTimeGraphDidSetRange);
|
|
}
|
|
|
|
[SetUp]
|
|
public void SetUp()
|
|
{
|
|
m_ReportedSelection = new List<int>();
|
|
}
|
|
|
|
[Test]
|
|
public void FrameTimeGraph_MoveSelectedRange([ValueSource("k_MoveTestConfigurations")] MoveTestConfiguration configuration)
|
|
{
|
|
List<int> expectedSelection = ExpectedSelectedFramesForMoveTestConfiguration(configuration);
|
|
FrameTimeGraph_MoveSelectedRange(configuration, expectedSelection);
|
|
}
|
|
|
|
[Test]
|
|
public void FrameTimeGraph_MoveSelectedRange_DoesNotMovePastGraphBounds([ValueSource("k_MoveClampToBoundsTestConfigurations")] MoveTestConfiguration configuration)
|
|
{
|
|
List<int> expectedSelection = InitialSelectedFramesForTestConfiguration(configuration);
|
|
FrameTimeGraph_MoveSelectedRange(configuration, expectedSelection);
|
|
}
|
|
|
|
void FrameTimeGraph_MoveSelectedRange(MoveTestConfiguration configuration, List<int> expectedSelection)
|
|
{
|
|
var offset = configuration.offset;
|
|
int clickCount = 1;
|
|
bool singleClickAction = true;
|
|
var currentSelectionState = SelectedRangeStateFromTestConfiguration(configuration);
|
|
|
|
m_FrameTimeGraph.MoveSelectedRange(offset, clickCount, singleClickAction, FrameTimeGraph.State.None, currentSelectionState);
|
|
|
|
CollectionAssert.AreEqual(expectedSelection, m_ReportedSelection);
|
|
}
|
|
|
|
[Test]
|
|
public void FrameTimeGraph_ResizeSelectedRange([ValueSource("k_ResizeTestConfigurations")] ResizeTestConfiguration configuration)
|
|
{
|
|
List<int> expectedSelection = ExpectedSelectedFramesForResizeTestConfiguration(configuration);
|
|
FrameTimeGraph_ResizeSelectedRange(configuration, expectedSelection);
|
|
}
|
|
|
|
[Test]
|
|
public void FrameTimeGraph_ResizeSelectedRange_DoesNotMovePastGraphBounds([ValueSource("k_ResizeClampToBoundsTestConfigurations")] ResizeTestConfiguration configuration)
|
|
{
|
|
List<int> expectedSelection = InitialSelectedFramesForTestConfiguration(configuration);
|
|
FrameTimeGraph_ResizeSelectedRange(configuration, expectedSelection);
|
|
}
|
|
|
|
void FrameTimeGraph_ResizeSelectedRange(ResizeTestConfiguration configuration, List<int> expectedSelection)
|
|
{
|
|
var leftOffset = configuration.leftOffset;
|
|
var rightOffset = configuration.rightOffset;
|
|
int clickCount = 1;
|
|
bool singleClickAction = true;
|
|
var currentSelectionState = SelectedRangeStateFromTestConfiguration(configuration);
|
|
|
|
m_FrameTimeGraph.ResizeSelectedRange(leftOffset, rightOffset, clickCount, singleClickAction, FrameTimeGraph.State.None, currentSelectionState);
|
|
|
|
CollectionAssert.AreEqual(expectedSelection, m_ReportedSelection);
|
|
}
|
|
|
|
FrameTimeGraph NewFrameTimeGraph()
|
|
{
|
|
var draw2D = new Draw2D("Unlit/ProfileAnalyzerShader");
|
|
DisplayUnits displayUnits = new DisplayUnits(Units.Milliseconds);
|
|
return new FrameTimeGraph(0, draw2D, displayUnits.Units, ProfileAnalyzerWindow.UIColor.barBackground, ProfileAnalyzerWindow.UIColor.barBackgroundSelected, ProfileAnalyzerWindow.UIColor.bar, ProfileAnalyzerWindow.UIColor.barSelected, ProfileAnalyzerWindow.UIColor.marker, ProfileAnalyzerWindow.UIColor.markerSelected, ProfileAnalyzerWindow.UIColor.thread, ProfileAnalyzerWindow.UIColor.threadSelected, ProfileAnalyzerWindow.UIColor.gridLines);
|
|
}
|
|
|
|
List<FrameTimeGraph.Data> GenerateFrameTimeGraphData()
|
|
{
|
|
const int k_DataLength = 300;
|
|
var data = new List<FrameTimeGraph.Data>(k_DataLength);
|
|
int i = 0;
|
|
while (i < k_DataLength)
|
|
{
|
|
var frameData = new FrameTimeGraph.Data(Random.value * 16, i);
|
|
data.Add(frameData);
|
|
i++;
|
|
}
|
|
|
|
return data;
|
|
}
|
|
|
|
void OnFrameTimeGraphDidSetRange(List<int> selected, int clickCount, FrameTimeGraph.State inputStatus)
|
|
{
|
|
m_ReportedSelection = selected;
|
|
}
|
|
|
|
FrameTimeGraph.SelectedRangeState SelectedRangeStateFromTestConfiguration(TestConfiguration configuration)
|
|
{
|
|
List<int> selectedFrames = InitialSelectedFramesForTestConfiguration(configuration);
|
|
int currentSelectionFirstDataOffset;
|
|
int currentSelectionLastDataOffset;
|
|
int firstFrameOffset;
|
|
int lastFrameOffset;
|
|
m_FrameTimeGraph.GetSelectedRange(selectedFrames, out currentSelectionFirstDataOffset, out currentSelectionLastDataOffset, out firstFrameOffset, out lastFrameOffset);
|
|
|
|
return new FrameTimeGraph.SelectedRangeState()
|
|
{
|
|
currentSelectionFirstDataOffset = currentSelectionFirstDataOffset,
|
|
currentSelectionLastDataOffset = currentSelectionLastDataOffset,
|
|
lastSelectedFrameOffsets = selectedFrames,
|
|
};
|
|
}
|
|
|
|
List<int> InitialSelectedFramesForTestConfiguration(TestConfiguration configuration)
|
|
{
|
|
List<int> selectedFrames = new List<int>();
|
|
foreach (var selectionRange in configuration.selections)
|
|
{
|
|
var selectionFrames = GenerateListOfFrames(selectionRange.origin, selectionRange.length);
|
|
selectedFrames.AddRange(selectionFrames);
|
|
}
|
|
|
|
return selectedFrames;
|
|
}
|
|
|
|
List<int> ExpectedSelectedFramesForMoveTestConfiguration(MoveTestConfiguration configuration)
|
|
{
|
|
List<int> selectedFrames = new List<int>();
|
|
var offset = configuration.offset;
|
|
foreach (var selectionRange in configuration.selections)
|
|
{
|
|
var selectionFrames = GenerateListOfFrames(selectionRange.origin + offset, selectionRange.length);
|
|
selectedFrames.AddRange(selectionFrames);
|
|
}
|
|
|
|
return selectedFrames;
|
|
}
|
|
|
|
List<int> ExpectedSelectedFramesForResizeTestConfiguration(ResizeTestConfiguration configuration)
|
|
{
|
|
List<int> selectedFrames = new List<int>();
|
|
var leftOffset = configuration.leftOffset;
|
|
var rightOffset = configuration.rightOffset;
|
|
foreach (var selectionRange in configuration.selections)
|
|
{
|
|
var leftIndex = selectionRange.origin + leftOffset;
|
|
var rightIndex = selectionRange.LastIndex + rightOffset;
|
|
var selectionLength = rightIndex - leftIndex + 1;
|
|
var selectionFrames = GenerateListOfFrames(selectionRange.origin + leftOffset, selectionLength);
|
|
selectedFrames.AddRange(selectionFrames);
|
|
}
|
|
|
|
return selectedFrames;
|
|
}
|
|
|
|
List<int> GenerateListOfFrames(int origin, int count)
|
|
{
|
|
var frames = new List<int>();
|
|
|
|
int i = 0;
|
|
while (i < count)
|
|
{
|
|
frames.Add(origin + i);
|
|
++i;
|
|
}
|
|
|
|
return frames;
|
|
}
|
|
|
|
public class TestConfiguration
|
|
{
|
|
public SelectionRange[] selections;
|
|
|
|
public TestConfiguration(SelectionRange[] selections)
|
|
{
|
|
this.selections = selections;
|
|
}
|
|
|
|
protected string SelectionsToString()
|
|
{
|
|
var stringBuilder = new StringBuilder();
|
|
for (int i = 0; i < selections.Length; ++i)
|
|
{
|
|
var selection = selections[i];
|
|
stringBuilder.AppendFormat("[{0}-{1}]", selection.origin, selection.LastIndex);
|
|
}
|
|
|
|
return stringBuilder.ToString();
|
|
}
|
|
|
|
public struct SelectionRange
|
|
{
|
|
public int origin;
|
|
public int length;
|
|
|
|
public SelectionRange(int origin, int length)
|
|
{
|
|
this.origin = origin;
|
|
this.length = length;
|
|
}
|
|
|
|
public int LastIndex
|
|
{
|
|
get
|
|
{
|
|
return origin + length - 1;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
public class MoveTestConfiguration : TestConfiguration
|
|
{
|
|
public int offset;
|
|
|
|
public MoveTestConfiguration(SelectionRange[] selections, int offset) : base(selections)
|
|
{
|
|
this.offset = offset;
|
|
}
|
|
|
|
public override string ToString()
|
|
{
|
|
var stringBuilder = new StringBuilder();
|
|
if (selections.Length > 1)
|
|
{
|
|
stringBuilder.Append("multi-range");
|
|
}
|
|
else
|
|
{
|
|
stringBuilder.Append("range");
|
|
}
|
|
|
|
stringBuilder.Append(SelectionsToString());
|
|
stringBuilder.Append(" | ");
|
|
|
|
stringBuilder.AppendFormat("{0}[{1}]", (offset > 0) ? "right" : "left", offset);
|
|
|
|
return stringBuilder.ToString();
|
|
}
|
|
}
|
|
|
|
public class ResizeTestConfiguration : TestConfiguration
|
|
{
|
|
public int leftOffset;
|
|
public int rightOffset;
|
|
|
|
public ResizeTestConfiguration(SelectionRange[] selections, int leftOffset, int rightOffset) : base(selections)
|
|
{
|
|
this.leftOffset = leftOffset;
|
|
this.rightOffset = rightOffset;
|
|
}
|
|
|
|
public override string ToString()
|
|
{
|
|
var stringBuilder = new StringBuilder();
|
|
if (selections.Length > 1)
|
|
{
|
|
stringBuilder.Append("multi-range");
|
|
}
|
|
else
|
|
{
|
|
stringBuilder.Append("range");
|
|
}
|
|
|
|
stringBuilder.Append(SelectionsToString());
|
|
stringBuilder.Append(" | ");
|
|
|
|
bool hasLeftOffset = leftOffset != 0;
|
|
if (hasLeftOffset)
|
|
{
|
|
var leftAction = (leftOffset < 0) ? "grow-left" : "shrink-left";
|
|
stringBuilder.AppendFormat("{0}[{1}]", leftAction, leftOffset);
|
|
}
|
|
|
|
if (rightOffset != 0)
|
|
{
|
|
if (hasLeftOffset)
|
|
{
|
|
stringBuilder.Append(" ");
|
|
}
|
|
|
|
var rightAction = (rightOffset > 0) ? "grow-right" : "shrink-right";
|
|
stringBuilder.AppendFormat("{0}[{1}]", rightAction, rightOffset);
|
|
}
|
|
|
|
return stringBuilder.ToString();
|
|
}
|
|
}
|
|
}
|