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()