diff --git a/com.unity.render-pipelines.core/Runtime/Debugging/DebugFrameTiming.cs b/com.unity.render-pipelines.core/Runtime/Debugging/DebugFrameTiming.cs index 65023880049..3a4903ba38d 100644 --- a/com.unity.render-pipelines.core/Runtime/Debugging/DebugFrameTiming.cs +++ b/com.unity.render-pipelines.core/Runtime/Debugging/DebugFrameTiming.cs @@ -1,10 +1,10 @@ +//#define RTPROFILER_DEBUG + using System; using System.Collections.Generic; using System.Linq; using UnityEngine; -//#define RTPROFILER_DEBUG - namespace UnityEngine.Rendering { public class DebugFrameTiming @@ -13,8 +13,8 @@ public class DebugFrameTiming const string k_MsFormatString = "{0:F2}ms"; const float k_RefreshRate = 1f / 5f; - internal FrameTimeSampleHistory m_FrameHistory = new(); - internal BottleneckHistory m_BottleneckHistory = new(); + internal FrameTimeSampleHistory m_FrameHistory; + internal BottleneckHistory m_BottleneckHistory; /// /// Size of the Bottleneck History Window in number of samples. @@ -29,6 +29,12 @@ public class DebugFrameTiming FrameTiming[] m_Timing = new FrameTiming[1]; FrameTimeSample m_Sample = new FrameTimeSample(); + public DebugFrameTiming() + { + m_FrameHistory = new FrameTimeSampleHistory(sampleHistorySize); + m_BottleneckHistory = new BottleneckHistory(bottleneckHistorySize); + } + /// /// Update timing data from profiling counters. /// @@ -158,16 +164,16 @@ public void RegisterDebugUI(List list) new DebugUI.IntField { displayName = "Frame Time Sample History Size", - getter = () => SampleHistorySize, - setter = (value) => { SampleHistorySize = value; }, + getter = () => sampleHistorySize, + setter = (value) => { sampleHistorySize = value; }, min = () => 1, max = () => 100 }, new DebugUI.IntField { displayName = "Bottleneck History Size", - getter = () => BottleneckHistorySize, - setter = (value) => { BottleneckHistorySize = value; }, + getter = () => bottleneckHistorySize, + setter = (value) => { bottleneckHistorySize = value; }, min = () => 1, max = () => 100 }, diff --git a/com.unity.render-pipelines.core/Runtime/Debugging/FrameTiming/FrameTimeBottleneck.cs b/com.unity.render-pipelines.core/Runtime/Debugging/FrameTiming/FrameTimeBottleneck.cs index 9a1bf32251c..b8b817823d9 100644 --- a/com.unity.render-pipelines.core/Runtime/Debugging/FrameTiming/FrameTimeBottleneck.cs +++ b/com.unity.render-pipelines.core/Runtime/Debugging/FrameTiming/FrameTimeBottleneck.cs @@ -33,14 +33,23 @@ internal struct BottleneckHistogram /// internal class BottleneckHistory { + public BottleneckHistory(int initialCapacity) + { + m_Bottlenecks.Capacity = initialCapacity; + } + List m_Bottlenecks = new(); internal BottleneckHistogram Histogram; internal void DiscardOldSamples(int historySize) { + Debug.Assert(historySize > 0, "Invalid sampleHistorySize"); + while (m_Bottlenecks.Count >= historySize) m_Bottlenecks.RemoveAt(0); + + m_Bottlenecks.Capacity = historySize; } internal void AddBottleneckFromAveragedSample(FrameTimeSample frameHistorySampleAverage) diff --git a/com.unity.render-pipelines.core/Runtime/Debugging/FrameTiming/FrameTimeSample.cs b/com.unity.render-pipelines.core/Runtime/Debugging/FrameTiming/FrameTimeSample.cs index ac4f04177d3..3870d757afe 100644 --- a/com.unity.render-pipelines.core/Runtime/Debugging/FrameTiming/FrameTimeSample.cs +++ b/com.unity.render-pipelines.core/Runtime/Debugging/FrameTiming/FrameTimeSample.cs @@ -31,6 +31,11 @@ internal FrameTimeSample(float initValue) /// class FrameTimeSampleHistory { + public FrameTimeSampleHistory(int initialCapacity) + { + m_Samples.Capacity = initialCapacity; + } + List m_Samples = new(); internal FrameTimeSample SampleAverage; @@ -112,8 +117,12 @@ void ForEachSampleMember(ref FrameTimeSample aggregate, FrameTimeSample sample, internal void DiscardOldSamples(int sampleHistorySize) { + Debug.Assert(sampleHistorySize > 0, "Invalid sampleHistorySize"); + while (m_Samples.Count >= sampleHistorySize) m_Samples.RemoveAt(0); + + m_Samples.Capacity = sampleHistorySize; } internal void Clear()