Unity 6.3
0 онлайн 67 гостей 3 в системе
Вход

ProfilerRecorder.LastValue

Declaration

public long LastValue;

Описание

Получает последнее значение, собранное ProfilerRecorder.

Используется для получения значения счетчика профилера или времени маркеров, зафиксированного в конце последнего кадра.

Непосредственное значение, которое CurrentValue предоставляет, может не быть окончательным значением счётчика на конец кадра. Например, рендеринг может произойти после того, как логика завершит вычисление кадра. Поэтому получить окончательное число вызовов отрисовки до полного рендеринга кадра невозможно. В таких случаях можно использовать свойство LastValue для быстрого доступа к окончательному значению метрики в последнем кадре. Эквивалентный вызов — GetSample(Count - 1).Value.

Примечание: Свойство требует, чтобы образец хранилища был ненулевым. Если емкость равна 0, то это свойство возвращает 0.

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"); } }

Используйте LastValue для получения времен кодов, помеченных ProfilerMarker.Auto.

using UnityEngine;
using Unity.Profiling;

public class Example { static readonly ProfilerMarker k_MyMarker = new ProfilerMarker(ProfilerCategory.Scripts, "MyMarker");

public static void TimeSynchronousMethodWithMarkers() { using (var recorder = ProfilerRecorder.StartNew(ProfilerCategory.Scripts, "MyMarker")) { using (k_MyMarker.Auto()) { // ... }

recorder.Stop(); Debug.Log("MyMarker total time, ns: " + recorder.LastValue); } } }

LastValue становится читаемым и ненулевым только после изменения кадра или после вызова метода Stop.