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

FrameTimingManager

класс в UnityEngine

Выполнено в:UnityEngine.CoreModule

Описание

Обеспечивает измерения времени на уровне кадра CPU и GPU.

FrameTimingManager API предназначен для использования в проигрывателях и собирает важную статистику кадров с меньшими накладными расходами на производительность по сравнению с Unity Profiler.

Используйте FrameTimingManager для:

  • Отладка или мониторинг покадровой производительности в приложении.
  • Определите, влияет ли CPU или GPU на частоту кадров.
  • Адаптируйте свои вычисления или качество графики на основе узкого места CPU или GPU. (Например, Динамическое разрешение используется на FrameTimingManager.)

Примечание: FrameTimingManager всегда активен в сборках Разработчика. Чтобы использовать эту функцию в сборках выпуска, перейдите в Изменить > Project Настройки > Игрок и включите свойство Frame Timing Stats. Это свойство остается активным, независимо от того, требуется ли оно в определенный момент времени.

Вы можете получить доступ к данным FrameTimingManager с помощью GetLatestTimings API. В качестве альтернативы вы можете использовать ProfilerRecorder для получения информации об индивидуальных показателях.

В обоих случаях результаты возвращаются с фиксированной задержкой в четыре кадра (данные для текущего кадра отсутствуют). Это происходит потому, что результаты GPU не доступны сразу в конце каждого кадра на большинстве платформ, поэтому FrameTimingManager ожидает получения синхронизированных данных CPU и GPU для кадра. Однако задержка не гарантирует, что данные GPU будут доступны для всех кадров, поскольку GPU может не иметь ресурсов для возвращения результатов или может не вернуть их правильно. В этом случае время GPU отображается как нулевой.

Когда Application.Pause приостанавливает приложение, FrameTimingManager автоматически исключает приостановленную длительность из всех измерений времени CPU. Значение cpuFrameTime, отображаемое для первого кадра после возобновления, отражает только фактическое время работы кадра, а не время, которое приложение провело в приостановленном состоянии.

using Unity.Profiling;
using UnityEngine;

public class ExampleScript : MonoBehaviour { FrameTiming[] m_FrameTimings = new FrameTiming[10];

void Update() { // Instruct FrameTimingManager to collect and cache information FrameTimingManager.CaptureFrameTimings();

// Read cached information about N last frames (10 in this example) // The returned value tells how many frames are actually returned // Element 0 of the returned array contains the data for the last fully finished frame. var ret = FrameTimingManager.GetLatestTimings((uint)m_FrameTimings.Length, m_FrameTimings); if (ret > 0) { // Your code logic here } } }

Когда ProfilerRecorder используется, FrameTimingManager включается автоматически, в том числе в сборках выпуска. Unity только принимает измерения, когда вы подключите ProfilerRecorder Этот метод рекомендуется, если вы хотите эксплицитно управлять сбором данных, а также если вы не хотите, чтобы данные собирались автоматически. GPU временны́е рамки.

using Unity.Profiling;
using UnityEngine;

public class ExampleScript : MonoBehaviour { ProfilerRecorder mainThreadTimeRecorder;

void OnEnable() { // Create ProfilerRecorder and attach it to a counter mainThreadTimeRecorder = ProfilerRecorder.StartNew(ProfilerCategory.Internal, "CPU Main Thread Frame Time"); }

void OnDisable() { // Recorders must be explicitly disposed after use mainThreadTimeRecorder.Dispose(); }

void Update() { // Read the last recorded value. Times are in nanoseconds. var frameTime = mainThreadTimeRecorder.LastValue; // Your code logic here } }

Фрейм Тайминг Менеджер поддерживает все платформы, которые поддерживаются Unity со следующими исключениями:

  • На платформах Linux, когда используется OpenGL API, время GPU не предоставляется.
  • На платформе WebGL время GPU не предоставляется.
  • На iOS и macOS, когда используется Metal API время GPU может сообщить большее измерение времени GPU, чем общее время кадра из-за поведения отложенного рендеринга на основе плиток GPUs.

Дополнительные ресурсы: Введение в Менеджер времени кадров.

Статические методы

Метод Описание
CaptureFrameTimingsЭта функция запускает FrameTimingManager для получения снимка данных FrameTiming, к которым затем может получить доступ пользователь.
GetCpuTimerFrequencyВозвращает частоту таймера CPU на текущей платформе. Если платформа не поддерживает возвращение этого значения, то возвращается 0.
GetGpuTimerFrequencyЭто возвращает частоту таймера GPU на текущей платформе. В настоящее время всегда 1000000000.
GetLatestTimingsПозволяет пользователю получить доступ к текущему записанному FrameTimings.
GetVSyncsPerSecondВозвращает число vsyncs в секунду на текущей платформе, используемое для интерпретации результатов синхронизации. Если платформа не поддерживает возвращение этого значения, возвращается 0.
IsFeatureEnabledПроверьте, включена ли статистика времени кадра.