Esempio n. 1
0
 public void StartRun(string benchmarkName, int runLength)
 {
     Stats = new PerfBasic(benchmarkName, Benchmark.UrpVersion, runLength);
     if (frametimeDisplay == null)
     {
         CreateTextGui();
     }
 }
Esempio n. 2
0
    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);
        }
    }
Esempio n. 3
0
    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";
        }
    }
Esempio n. 4
0
    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);
        }
    }
Esempio n. 5
0
    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();
    }
Esempio n. 6
0
 public void StartRun(string benchmarkName, int runLength)
 {
     Stats = new PerfBasic(benchmarkName, Benchmark.UrpVersion, runLength);
     CreateTextGui();
 }