[Unity Docs -> FrameTimingManager](https://docs.unity3d.com/2022.3/Documentation/Manual/frame-timing-manager.html?utm_source=chatgpt.com) `FrameTimingManager` возвращает данные с задержкой ~4 кадра, это нормально. FrameTimingManager — это «встроенный счётчик» Unity, предназначенный именно для быстрого съёма CPU- и GPU-таймингов кадра: - Он собирает **лишь ключевые показатели** и делает это «в движке» с микросекундным (≈1 µs) оверхедом – гораздо дешевле, чем ProfilerRecorder, который опрашивает десятки счётчиков ([Unity Docs](https://docs.unity3d.com/ScriptReference/FrameTimingManager.html?utm_source=chatgpt.com "Scripting API: FrameTimingManager - Unity - Manual")). - В Player-сборках работает только если включён флаг **Frame Timing Stats** в _Project Settings ▸ Player ▸ Other Settings_ ([docs.unity.cn](https://docs.unity.cn/Manual/frame-timing-manager.html?utm_source=chatgpt.com "Manual: FrameTimingManager - Unity")). В Development-билдe включается автоматически. - Платфор­мо-зависимые драйверы возвращают готовые значения `cpuFrameTime`, `gpuFrameTime` (в миллисекундах) — без нужды конвертировать из наносекунд ([Unity Docs](https://docs.unity3d.com/2023.2/Documentation/Manual/frame-timing-manager.html?utm_source=chatgpt.com "FrameTimingManager - Unity - Manual")). ### Его роль в нашем классе `GpuFrameTimeProvider` 1. **Главный источник данных.** В `FixedUpdate` вызывается `FrameTimingManager.CaptureFrameTimings()` → `GetLatestTimings(…)`. Если массив вернул хотя бы один кадр, берём `frameTimings[0].gpuFrameTime` — самое точное значение для текущего кадра. 2. **Выбор между FTM и ProfilerRecorder.** - При старте (`Awake`) проверяем `FrameTimingManager.IsFeatureEnabled()` — метод существует только, начиная с Unity 2022.1 ([Unity Docs](https://docs.unity3d.com/6000.0/Documentation/ScriptReference/FrameTimingManager.IsFeatureEnabled.html?utm_source=chatgpt.com "Scripting API: FrameTimingManager.IsFeatureEnabled - Unity")). - **Если флаг включён** → используем FTM. - **Если флаг выключен** или движок < 2022.1 → создаём `ProfilerRecorder` на счётчик _“GPU Frame Time”_ и читаем его как запасной вариант. 3. **Почему нужна такая «иерархия».** - **FTM**: низкий оверхед, миллисекунды «как есть», надёжно работает на поддерживаемых GPU (PC, Metal, большинство Vulkan/DirectX 12 телефонов). - **ProfilerRecorder**: универсален для всех редакций, но дороже и на некоторых мобильных драйверах в релизе даёт 0 мс; поэтому он только fallback. Таким образом, `FrameTimingManager` позволяет в релизных сборках получать **реальный GPU-кадровый тайминг с минимальным влиянием на производительность**, а `ProfilerRecorder` страхует, когда FTM недоступен.