Описание
Получает последнее значение, полученное ProfilerRecorder.
Используйте для получения значения счетчика профилировщика или синхронизации маркера в конце последнего кадра.
Немедленное значение, которое предоставляет CurrentValue, может не быть окончательным значением счетчика по окончании кадра. Например, рендеринг может произойти после того, как логика завершила вычисление кадра. Поэтому невозможно получить окончательное значение вызовов отрисовки, пока кадр не будет полностью отрендерен. В таких случаях вы можете использовать свойство LastValue для быстрого доступа к окончательному значению метрики в последнем кадре. Эквивалентный вызов: GetSample(Count - 1).Value
.
Примечание. Это свойство требует, чтобы хранилище сэмплов было ненулевым. Передайте значение емкости больше 0 при создании ProfilerRecorder.
using Unity.Profiling;
using UnityEngine;
public class ExampleScript : MonoBehaviour
{
ProfilerRecorder mainThreadTimeRecorder;
static double GetRecorderFrameAverage(ProfilerRecorder recorder)
{
var samplesCount = recorder.Capacity;
if (samplesCount == 0)
return 0;
double r = 0;
unsafe
{
var samples = stackalloc ProfilerRecorderSample[samplesCount];
recorder.CopyTo(samples, samplesCount);
for (var i = 0; i < samplesCount; ++i)
r += samples[i].Value;
r /= samplesCount;
}
return r;
}
void OnEnable()
{
mainThreadTimeRecorder = ProfilerRecorder.StartNew(ProfilerCategory.Internal, "Main Thread", 15);
}
void OnDisable()
{
mainThreadTimeRecorder.Dispose();
}
void Update()
{
Debug.Log($"Frame Time: {GetRecorderFrameAverage(mainThreadTimeRecorder) * (1e-6f):F1} ms");
}
}