Maze / Library /PackageCache /com.unity.performance.profile-analyzer@1.2.2 /Editor /ProfileDataView.cs
| using System; | |
| using System.Collections.Generic; | |
| namespace UnityEditor.Performance.ProfileAnalyzer | |
| { | |
| [] | |
| internal class ProfileDataView | |
| { | |
| public string path; | |
| public ProfileData data; | |
| public ProfileAnalysis analysisFullNew; | |
| public ProfileAnalysis analysisFull; | |
| public ProfileAnalysis analysisNew; | |
| public ProfileAnalysis analysis; | |
| public List<int> selectedIndices = new List<int> { 0, 0 }; | |
| [] | |
| public bool inSyncWithProfilerData; | |
| public bool containsWaitForFPS { get; private set; } | |
| public bool containsWaitForPresent { get; private set; } | |
| public ProfileDataView() | |
| { | |
| } | |
| public ProfileDataView(ProfileDataView dataView) | |
| { | |
| path = dataView.path; | |
| data = dataView.data; | |
| analysisFullNew = dataView.analysisFullNew; | |
| analysisFull = dataView.analysisFull; | |
| analysisNew = dataView.analysisNew; | |
| analysis = dataView.analysis; | |
| selectedIndices = new List<int>(dataView.selectedIndices); | |
| inSyncWithProfilerData = dataView.inSyncWithProfilerData; | |
| containsWaitForFPS = dataView.containsWaitForFPS; | |
| containsWaitForPresent = dataView.containsWaitForPresent; | |
| } | |
| public void FindKeyMarkers() | |
| { | |
| containsWaitForFPS = data.GetMarkerIndex("WaitForTargetFPS") != -1; | |
| containsWaitForPresent = data.GetMarkerIndex("Gfx.WaitForPresentOnGfxThread") != -1; | |
| } | |
| public bool IsDataValid() | |
| { | |
| if (data == null) | |
| return false; | |
| if (data.GetFrameCount() == 0) | |
| return false; | |
| if (data.NeedsMarkerRebuild) | |
| { | |
| if (!ProfileData.Load(data.FilePath, out data)) | |
| { | |
| return false; | |
| } | |
| } | |
| return true; | |
| } | |
| public bool HasValidSelection() | |
| { | |
| if (selectedIndices.Count == 2 && selectedIndices[0] == 0 && selectedIndices[1] == 0) | |
| return false; | |
| return true; | |
| } | |
| public bool HasSelection() | |
| { | |
| if (selectedIndices.Count == 0) | |
| return false; | |
| if (selectedIndices.Count == data.GetFrameCount()) | |
| return false; | |
| return HasValidSelection(); | |
| } | |
| public bool AllSelected() | |
| { | |
| if (selectedIndices.Count != data.GetFrameCount()) | |
| return false; | |
| return true; | |
| } | |
| public int GetMaxDepth() | |
| { | |
| return (analysis == null) ? 1 : analysis.GetFrameSummary().maxMarkerDepth; | |
| } | |
| int Clamp(int value, int min, int max) | |
| { | |
| if (value < min) | |
| value = min; | |
| else if (value > max) | |
| value = max; | |
| return value; | |
| } | |
| public int ClampToValidDepthValue(int depthFilter) | |
| { | |
| // ProfileAnalyzer.kDepthAll is special case that we don't test for here | |
| // If we have no depth values then return -1 for all (as clamp expects min<max) | |
| int maxDepth = GetMaxDepth(); | |
| if (maxDepth < 1) | |
| return ProfileAnalyzer.kDepthAll; | |
| return Clamp(depthFilter, 1, maxDepth); | |
| } | |
| bool SelectAllFramesContainingMarker(string markerName, ProfileAnalysis inAnalysis) | |
| { | |
| if (inAnalysis == null) | |
| return false; | |
| selectedIndices.Clear(); | |
| MarkerData markerData = inAnalysis.GetMarkerByName(markerName); | |
| if (markerData == null) | |
| return true; | |
| foreach (var frameTime in markerData.frames) | |
| { | |
| selectedIndices.Add(frameTime.frameIndex); | |
| } | |
| // Order from lowest to highest so the start/end frame display makes sense | |
| selectedIndices.Sort(); | |
| return true; | |
| } | |
| public bool SelectAllFramesContainingMarker(string markerName, bool inSelection) | |
| { | |
| return SelectAllFramesContainingMarker(markerName, inSelection ? analysis : analysisFull); | |
| } | |
| int ClampToRange(int value, int min, int max) | |
| { | |
| if (value < min) | |
| value = min; | |
| if (value > max) | |
| value = max; | |
| return value; | |
| } | |
| public void ClearSelection() | |
| { | |
| selectedIndices.Clear(); | |
| } | |
| public void SelectFullRange() | |
| { | |
| selectedIndices.Clear(); | |
| if (data == null) | |
| return; | |
| for (int offset = 0; offset < data.GetFrameCount(); offset++) | |
| { | |
| selectedIndices.Add(data.OffsetToDisplayFrame(offset)); | |
| } | |
| } | |
| } | |
| } | |