Описание
Записывает данные метрики Profiler, которые создает маркер или счетчик Profiler.
Используйте ProfilerRecorder для доступа к показателям производительности, предоставляемым Profiler. Вы можете использовать его для унифицированного чтения данных счетчика Profiler, таких как память или статистика рендеринга, а также данных синхронизации маркеров Profiler.
Вы можете использовать этот API в сборках Editor и Player, включая Release Players. Используйте ProfilerRecorderHandle.GetAvailable, чтобы получить полный список поддерживаемых метрик. Список доступных встроенных маркеров Profiler см. в документации руководства пользователя по маркерам Profiler, модуль Rendering Profiler и модуль Virtual Texturing Profiler.
The following example demonstrates how you can use ProfilerRecorder to get memory and timing statistics.
using System.Collections.Generic;
using System.Text;
using Unity.Profiling;
using UnityEngine;
public class ExampleScript : MonoBehaviour
{
string statsText;
ProfilerRecorder systemMemoryRecorder;
ProfilerRecorder gcMemoryRecorder;
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()
{
systemMemoryRecorder = ProfilerRecorder.StartNew(ProfilerCategory.Memory, "System Used Memory");
gcMemoryRecorder = ProfilerRecorder.StartNew(ProfilerCategory.Memory, "GC Reserved Memory");
mainThreadTimeRecorder = ProfilerRecorder.StartNew(ProfilerCategory.Internal, "Main Thread", 15);
}
void OnDisable()
{
systemMemoryRecorder.Dispose();
gcMemoryRecorder.Dispose();
mainThreadTimeRecorder.Dispose();
}
void Update()
{
var sb = new StringBuilder(500);
sb.AppendLine($"Frame Time: {GetRecorderFrameAverage(mainThreadTimeRecorder) * (1e-6f):F1} ms");
sb.AppendLine($"GC Memory: {gcMemoryRecorder.LastValue / (1024 * 1024)} MB");
sb.AppendLine($"System Memory: {systemMemoryRecorder.LastValue / (1024 * 1024)} MB");
statsText = sb.ToString();
}
void OnGUI()
{
GUI.TextArea(new Rect(10, 30, 250, 50), statsText);
}
}
Note:
ProfilerRecorder выделяет неуправляемые ресурсы и реализует интерфейс IDisposable. Используйте Dispose для освобождения ресурсов, когда вам больше не нужно записывать статистику.
ProfilerRecorder предоставляет доступ к показателям Unity в двух режимах: немедленный доступ к значению счетчика и к значению счетчика по окончании кадра. Смотрите так же: CurrentValue, LastValue, GetSample, ProfilerRecorderHandle.GetAvailable.
Свойства
Capacity | Максимальное количество образцов, которое ProfilerRecorder может захватить. |
Count | Количество собранных образцов. |
CurrentValue | Получает текущее значение метрики Profiler. |
CurrentValueAsDouble | Получает текущее значение метрики Profiler в виде двойного значения. |
DataType | Тип данных значения метрики Profiler. |
IsRunning | Указывает, подключен ли ProfilerRecorder к метрике Profiler. |
LastValue | Получает последнее значение, собранное ProfilerRecorder. |
LastValueAsDouble | Получает последнее значение, собранное ProfilerRecorder, как двойное. |
UnitType | Тип объекта. |
Valid | Указывает, связан ли ProfilerRecorder с допустимым маркером или счетчиком Profiler. |
WrappedAround | Указывает, превышена ли емкость ProfilerRecorder. |
Конструкторы
ProfilerRecorder | Создает экземпляр ProfilerRecorder с именем и категорией метрики Profiler.. |
Публичные Методы
CopyTo | Копирует собранные образцы в целевой массив. |
Dispose | Выпускает неуправляемый экземпляр ProfilerRecorder. |
GetSample | Получает образцы данных. |
Reset | Очищает собранные образцы. |
Start | Начать сбор данных. |
Stop | Прекращает сбор данных. |
ToArray | Используйте для преобразования собранных образцов в массив. |
Статические Методы
StartNew | Инициализируйте новый экземпляр ProfilerRecorder и начните сбор данных. |