public void StartRun(string benchmarkName, int runLength) { Stats = new PerfBasic(benchmarkName, Benchmark.UrpVersion, runLength); if (frametimeDisplay == null) { CreateTextGui(); } }
private void PopulateInfoPanel(PerfBasic result = null) { var props = typeof(TestInfo).GetFields(); for (var i = 0; i < props.Length; i++) { var prop = props[i]; var info = result != null?prop.GetValue(result.info) : "---"; var text = $"<b>{prop.Name}</b>\n<i> {info}</i>"; CreateTextObject(text, infoPanel[i % 2 == 0 ? 0 : 1], prop.Name); } }
private void PopulateDataPanel(PerfBasic result) { var avg = result.RunData.Select(run => run.AvgMs).ToArray(); var min = result.RunData.Select(run => run.MinFrame).ToArray(); var max = result.RunData.Select(run => run.MaxFrame).ToArray(); var table = CreateTable(result.RunData.Length + 1, 4, dataPanel, 10); table[0][0].text = "FrameTime"; table[0][1].text = "Avg"; table[0][2].text = "Min"; table[0][3].text = "Max"; for (var run = 1; run < table.Length; run++) { table[run][0].text = $"Run {run}"; table[run][1].text = $"{avg[run-1]:F2}ms"; table[run][2].text = $"{min[run-1].ms:F2}ms"; table[run][3].text = $"{max[run-1].ms:F2}ms"; } }
private void DrawGraph(Rect rect, PerfBasic data, float minMS, float maxMS) { var values = data.RunData; var padding = 20f; rect.max -= Vector2.one * padding; rect.xMax -= 40f; rect.min += Vector2.one * padding; //draw value markers GUI.backgroundColor = new Color(0f, 0f, 0f, 1f); GUI.Box(rect, ""); //GUI.DrawTexture(rect, Texture2D.grayTexture, ScaleMode.StretchToFill); DrawGraphMarkers(rect, minMS, maxMS, 5); var c = new Color(0.129f, 0.588f, 0.952f, 1.0f); if (currentRun == 0) { var averageValue = new float[values[0].rawSamples.Length]; foreach (var frames in values) { for (int i = 0; i < averageValue.Length; i++) { averageValue[i] += frames.rawSamples[i] / values.Length; } } DrawGraphLine(rect, averageValue, minMS, maxMS, c); } else { DrawGraphLine(rect, values[currentRun - 1].rawSamples, minMS, maxMS, c); DrawMinMaxMarkers(rect, values[currentRun - 1], data.Frames); } }
private void DrawPerf(PerfBasic perfData) { EditorGUILayout.BeginVertical(EditorStyles.helpBox); var options = new string[perfData.RunData.Length + 1]; options[0] = "Smooth all runs"; for (int i = 1; i < perfData.RunData.Length + 1; i++) { options[i] = $"Run {i.ToString()}"; } resultDataHeader = EditorGUILayout.BeginFoldoutHeaderGroup(resultDataHeader, "Data"); if (resultDataHeader) { EditorGUILayout.Space(4); RunData runData; var runtime = 0.0f; var avg = 0.0f; var min = new FrameData(-1, 0f); var max = new FrameData(-1, 0f); if (currentRun > 0) { runData = perfData.RunData[currentRun - 1]; runtime = runData.RunTime; avg = runData.AvgMs; min = runData.MinFrame; max = runData.MaxFrame; } else { avg += perfData.RunData.Sum(data => data.AvgMs / perfData.RunData.Length); runtime += perfData.RunData.Sum(data => data.RunTime / perfData.RunData.Length); } EditorGUILayout.BeginHorizontal(); { EditorGUI.BeginChangeCheck(); var index = EditorGUILayout.Popup("Display", currentRun, options); if (EditorGUI.EndChangeCheck()) { currentRun = Mathf.Clamp(index, 0, options.Length + 1); } } EditorGUILayout.EndHorizontal(); var graphRect = EditorGUILayout.GetControlRect(false, 500f); DrawGraph(graphRect, perfData, 0, avg * 2f); EditorGUILayout.BeginHorizontal(); { EditorGUILayout.LabelField($"<b>Runtime:</b> {runtime:F2}s", Styles.richDefault, GUILayout.MaxWidth(120.0f)); EditorGUILayout.LabelField($"<b>Average:</b> {avg:F2}ms", Styles.richDefault, GUILayout.MaxWidth(120.0f)); EditorGUILayout.LabelField($"<b>Minimum(fastest):</b> {min.ms:F2}ms (@frame: {min.frameIndex})", Styles.richDefault); EditorGUILayout.LabelField($"<b>Maximum(slowest):</b> {max.ms:F2}ms (@frame: {max.frameIndex})", Styles.richDefault); } EditorGUILayout.EndHorizontal(); EditorGUILayout.Space(4f); } EditorGUILayout.EndFoldoutHeaderGroup(); EditorGUILayout.EndVertical(); }
public void StartRun(string benchmarkName, int runLength) { Stats = new PerfBasic(benchmarkName, Benchmark.UrpVersion, runLength); CreateTextGui(); }