123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409 |
- 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();
- }
- }
- }
|