Unreal Engine 5.5–5.8Windows 64-bit

Руководство пользователя FrameDoctor

Запишите, что происходит в вашей сцене, найдите затратную работу CPU и проверьте, помогает ли изменение, внесённое вручную. Начните здесь, даже если это ваш первый проект Unreal Engine.

  1. Запишите сцену
  2. Изучите данные
  3. Внесите одно изменение
  4. Сравните прогоны
  5. Сохраните результат

Кадр — это одно изображение вашей игры. Время кадра — время, за которое игра создаёт следующий кадр. Долгие кадры ощущаются как паузы или рывки. FrameDoctor записывает трассировку — файл с событиями и их временем — и превращает эти события в график и список участков работы CPU.

  • Capture: запись работающей сцены.
  • Findings: просмотр времени кадров и изучение отдельного участка работы CPU.
  • Compare: измерение двух сохранённых сборок Development до и после изменения.
  • Runs: возврат к записям и экспорт данных.
  • Settings: сохранение профилей записи и выбор порогов.
Изменения вносите вы. FrameDoctor помогает исследовать и измерять. Он не переписывает код и не исправляет игру автоматически. Анализ выполняется локально.

Руководство переведено; элементы управления плагина здесь приведены с их английскими названиями. Переключатель языка меняет язык этого руководства. Незнакомые термины Unreal объясняет краткий словарь.

Установка и запуск FrameDoctor

FrameDoctor поддерживает Unreal Engine 5.5, 5.6, 5.7 и 5.8 на Windows 64-bit. Выберите пакет плагина для вашей версии движка.

Если вы ещё не открывали Unreal

Откройте Epic Games Launcher → Unreal Engine → Library и запустите установленный движок. Откройте существующий проект или выберите Games → Blank → Blueprint, задайте имя и папку проекта, затем нажмите Create. Проект хранит вашу игру; карта, которую также называют уровнем, хранит отдельную сцену внутри проекта.

Установка из Fab

  1. Закройте Unreal Editor. В разделе Fab Library программы запуска найдите FrameDoctor и нажмите Install to Engine.
  2. Выберите версию движка, которую использует ваш проект, и завершите установку.
  3. Откройте проект. Перейдите в Edit → Plugins, найдите FrameDoctor, включите его и перезапустите редактор, когда он предложит это сделать.
  4. Откройте Tools → FrameDoctor в главном меню редактора.

Установка из предоставленного ZIP-архива

  1. Закройте редактор и распакуйте плагин.
  2. Поместите одну папку FrameDoctor из архива в папку Plugins вашего проекта. Если папки Plugins нет, создайте её.
  3. Проверьте путь по примеру ниже. Не допускайте лишней вложенности FrameDoctor/FrameDoctor.
  4. Откройте проект, включите плагин в Edit → Plugins, перезапустите редактор, затем откройте Tools → FrameDoctor.
YourProject/
  YourProject.uproject
  Plugins/
    FrameDoctor/
      FrameDoctor.uplugin
      Content/
      Resources/
      Source/
Что делать, если Unreal предлагает скомпилировать модули?

Скомпилированный пакет также содержит папку Binaries. Для пакета только с исходным кодом нужен подходящий набор инструментов компиляции C++, даже если ваша игра использует Blueprints. Установите Visual Studio 2022 с компонентами Game development with C++ и Windows SDK, необходимым вашей версии движка. Если в проекте используются только Blueprints, выберите Tools → New C++ Class, чтобы добавить минимальный класс и создать цель сборки C++ для проекта. Закройте Unreal и соберите цель проекта Development Editor / Win64 в Visual Studio. Затем снова откройте проект. Если компиляция не удалась, прочитайте первую ошибку сборки и убедитесь, что версии движка и пакета совпадают.

Руководство Epic: включение и установка плагинов.

Ваша первая запись

Начните с одной сцены. Сценарий сообщает FrameDoctor, когда сцена готова и можно начинать измерение. Для обучения и исследования можно использовать необязательный сценарий из отдельного проекта-примера.

Перед шагом 1: Установите FrameDoctor для своей версии движка; рекомендуется установка в движок. Скачайте отдельный проект-пример (UE 5.5–5.8, Win64) и распакуйте его. Проект содержит только контент, требует отдельной установки плагина и привязан к UE 5.5. Для UE 5.6–5.8 сначала нажмите правой кнопкой на FrameDoctorExample.uproject, выберите Switch Unreal Engine version и укажите свой движок. Откройте FrameDoctorExample.uproject в этом движке и убедитесь, что FrameDoctor включён.

  1. Откройте и сохраните карту. В проекте-примере откройте карту или выберите File → New Level, сохраните её в папку Content проекта, затем выполните File → Save All.
  2. Запустите игру. Нажмите треугольную кнопку Play на панели инструментов редактора. Это режим Play In Editor, или PIE. Нажмите Shift + F1, чтобы освободить указатель мыши и работать с редактором, пока игра продолжает выполняться.
  3. Выберите Capture. Откройте Tools → FrameDoctor → Capture. Оставьте флажок Use a packaged Development build выключенным. PIE записывает карту, уже запущенную в Play; выбор другой карты в поле Map не переключает работающий мир.
  4. Выберите пример. В поле Scenario найдите BP_ExploratoryScenario. Чтобы найти этот ресурс, откройте Content Browser или Content Drawer сочетанием Ctrl + Space и перейдите в Content → FrameDoctorExample → Scenarios (/Game/FrameDoctorExample/Scenarios). Сценарий выбирают в FrameDoctor; перетаскивать его на уровень не нужно.
  5. Начните запись. Оставьте прогрев 10 секунд и измерение 60 секунд. Прочитайте Preflight и нажмите Capture running PIE. Не останавливайте Play и выполните действие, которое хотите исследовать. Прогрев не входит в измеряемый результат.
  6. Изучите Findings. Когда запись завершится, откройте Findings, если этот раздел ещё не выбран. Прочитайте Capture quality and unavailable reasons, затем выберите участок работы CPU, чтобы увидеть данные по нему.
Первый пример предназначен для исследования. Его описание не задаёт воспроизводимые условия игры. Трассировку можно изучать, но для подтверждения эффекта A/B используйте сценарий с полным описанием условий и две сборки Development.

Не останавливайте игру до завершения записи. Esc или кнопка Stop в редакторе могут завершить PIE и прервать запись. Чтобы отменить текущую задачу FrameDoctor, используйте в нём Cancel.

Выберите, что записывать

В Capture есть два источника записи. Если флажок Use a packaged Development build выключен, записывается текущий мир PIE. Если включён, FrameDoctor запускает отдельную упакованную игру. Для воспроизводимых измерений до и после изменения используйте упакованную сборку.

Элементы управления записью
Элемент управленияКак использовать
Baseline Development executableКнопкой Browse выберите сохранённую сборку A. Этот же путь используется в Compare.
Map and ScenarioВыберите класс сценария. Для Development укажите карту, подготовленную при упаковке, и путь к классу сценария.
WarmupВремя для стабилизации сцены после её готовности. Не входит в измерение.
MeasurementВремя, которое входит в результат. Начните с 60 секунд.
Detailed naming for investigationДобавляет больше именованных событий. Это создаёт дополнительные затраты; используйте одинаковую настройку для обеих сторон A/B.
PreflightПеред запуском проверьте выбранный режим, каналы трассировки и свободное место на диске.

Обычный профиль CPU использует cpu,frame,bookmark. События CPU описывают работу; события кадров задают их границы; закладки отмечают интервал измерения. Уже выполняющаяся внешняя запись должна завершиться до того, как FrameDoctor начнёт собственную трассировку.

Сначала ожидается готовность, затем идут прогрев и измерение. Ready timeout и Maximum trace size задаются в Settings. Отменённые и прерванные записи сохраняются вместе со статусом; они не являются завершёнными исходными записями для сравнения.

Страница Capture с целью Development, картой, сценарием, прогревом, измерением и Preflight.
Иллюстрация настройки упакованной Development-сборки. В отдельном проекте-примере используйте PIE, оставив флажок упакованной сборки выключенным.

Изучите данные CPU

Откройте существующую трассировку

Нажмите Import trace, выберите готовый файл .utrace и дождитесь открытия Findings. Перед импортом остановите запись. Храните соседний файл manifest.json и исходные файлы прогона вместе с трассировкой, если нужно сохранить сведения о её происхождении и условиях для сравнения. Прочитайте Capture quality and unavailable reasons, чтобы проверить доступные данные CPU, кадров и измерения.

Если нет одной однозначной полной пары закладок FrameDoctor, отмечающих начало и конец измерения, вся трассировка анализируется как исследовательская запись. Если манифест прогона отсутствует или не поддерживается, полнота записи остаётся непроверенной. Доступные события можно изучать, но использовать непроверенные или исследовательские данные в качестве подтверждённой исходной записи A/B нельзя.

Начните со статуса и качества записи. Откройте Capture quality and unavailable reasons, если данные неполные или вместо значения указано Unavailable. Это значит, что значение не удалось определить; это не ноль.

  1. Посмотрите Game frame p95 и длительность измерения. Сравните кривую с целевым временем кадра.
  2. Используйте Search scopes… для поиска имени таймера или All threads для выбора потока. Поток — последовательность работы на CPU; GameThread обычно выполняет игровую логику.
  3. Нажмите строку участка работы. Панель поясняет Measured (что измерено), Interpretation (как понимать результат), Next experiment (следующий эксперимент) и Behavior risk (риск изменения поведения).
  4. Кнопка Copy evidence копирует идентификаторы выбранного таймера, потока и интервала. Кнопка Open in Insights открывает ту же трассировку в Unreal Insights; перейти к нужному интервалу нужно вручную.

Exclusive / frame — длительность участка работы после вычитания его дочерних участков в том же потоке, усреднённая по допустимым кадрам. Calls — число вызовов, начавшихся в интервале измерения. Участок может включать ожидание. Одно его название не определяет конкретный ресурс и не доказывает стоимость отдельного узла Blueprint.

У поиска есть видимое ограничение. Таблица загружает первые 250 строк, упорядоченных по рангу. Поиск и фильтр потоков применяются к этим загруженным строкам. Остальные агрегированные данные по участкам сохраняются в полном JSON анализа. Чтобы восстановить таблицу, нажмите Clear filters.

Не складывайте время вложенных участков с учётом дочерних вызовов или время параллельных потоков, чтобы оценить стоимость кадра. Игровые кадры, кадры рендеринга и контекст очереди GPU имеют разный смысл. Если достоверного значения времени кадра GPU нет, оно остаётся недоступным.

Findings с графиком кадров реальной записи, выбранным участком EnemyAwareness::Update и панелью данных по нему.
Выбранный участок связывает измеренные затраты с дальнейшим шагом исследования. Значения взяты из примера записи.

Изучите график времени кадров

По горизонтали отложено время внутри измерения; по вертикали — длительность кадра в миллисекундах. Более высокие пики означают более медленные кадры. Пунктирная линия — выбранное вами целевое время: 16.67 ms соответствует примерно 60 кадрам в секунду.

  • Масштаб: прокрутите колесо мыши над графиком или перетащите янтарные маркеры в небольшом обзорном графике под ним.
  • Перемещение: перетащите выбранный диапазон в обзорном графике. Когда основной график находится в фокусе клавиатуры, стрелки влево и вправо сдвигают видимый диапазон.
  • Просмотр значений: наведите указатель на график. Подсказка показывает время или группу объединённых отсчётов, число отсчётов и доступные минимальную и максимальную длительности.
  • Сброс: нажмите Reset view. Клавиши Home и Esc также сбрасывают вид графика, если он в фокусе.
Масштаб меняет только вид. Основное значение p95, список участков CPU и данные по ним по-прежнему используют всё измерение. При выборе узкого диапазона эти значения для него не пересчитываются.

При показе большого промежутка времени несколько кадров могут объединяться в одну группу для отрисовки. Учитывайте число отсчётов и диапазон этой группы, а не считайте её одним кадром. Если данных кадров нет, на графике остаются разрывы.

Увеличенный участок графика времени кадров: маркеры обзора, подсказка группы отсчётов и неизменные метрики полного измерения.
Обзорный график отмечает видимую часть; текст уточняет, какие значения по-прежнему описывают запись целиком.

Подготовьте две сборки Development

Сборка Development — упакованная игра с включёнными средствами разработки, которую можно запускать вне редактора. Baseline A — ваша исходная сборка. Candidate B содержит одно запланированное изменение. Храните каждую сборку целиком в отдельной папке.

  1. Сохраните карту и сценарий, готовый для сравнения. Включите FrameDoctor в проекте.
  2. Откройте Edit → Project Settings → Packaging. Добавьте карту в List of maps to include in a packaged build. Убедитесь, что Blueprint сценария тоже проходит подготовку ресурсов (cook): сохраните на него жёсткую ссылку из включённого содержимого или добавьте его папку в Additional Asset Directories to Cook.
  3. В элементах упаковки Platforms → Windows редактора выберите конфигурацию сборки Development, затем упакуйте проект. В разных версиях движка пункты меню могут быть сгруппированы иначе. Сохраните весь полученный комплект как сборку A.
  4. Вручную внесите одно изменение, которое хотите проверить. Сохраните и упакуйте сборку B в другой каталог. Сохраняйте одинаковыми сцену, ввод, камеру, NPC и настройки записи.
  5. В Capture включите Use a packaged Development build. Выберите исполняемый файл A, затем карту и введите путь к сгенерированному классу сценария.
Map: /Game/Maps/TestMap
Scenario: /Game/Scenarios/BP_TestScenario.BP_TestScenario_C
Executable: BuildA/Windows/YourProject/Binaries/Win64/YourProject.exe

Подставьте собственные имена ресурсов. /Game — представление папки Content проекта внутри Unreal, а не диск Windows. Имя сгенерированного класса Blueprint заканчивается на _C. Храните всю папку упакованной сборки вместе с содержимым; одного исполняемого файла недостаточно.

Preflight проверяет запрошенные настройки. Только фактическая загрузка показывает, содержит ли выбранная внешняя сборка нужные карту и сценарий. Запись предназначена для конфигураций разработки; сборки Shipping и Test не могут записывать трассировки FrameDoctor.

Руководство Epic: упаковка проекта Unreal.

Проверьте, помогло ли изменение

  1. Подготовьте A и B, как описано выше. В Compare раскройте New Development comparison.
  2. Выберите Baseline Development executable и Candidate Development executable. В Intended change точно опишите внесённое изменение.
  3. До запуска выберите Primary metric: p95GameFrame для медленных кадров, meanGameFrame для средней длительности кадра или p99GameFrame для наиболее медленной части распределения.
  4. Начните с 5 пар, прогрева 10 секунд и измерения 60 секунд. Для запланированного изменения сборки оставьте только gameBuildId в качестве обычного разрешённого различия. Установите одинаковые разрешение, графические настройки, VSync, ограничение частоты кадров, сценарий и средства сбора данных.
  5. Нажмите Launch paired Development series. FrameDoctor запускает сохранённые сборки, чередуя порядок AB/BA. Не меняйте обе папки сборок до завершения серии.
  6. Изучите вердикт и его причины, парную разницу, шум, порог и исходные данные каждой пары. Для просмотра сохранённого результата используйте Open HTML report или Open report folder.
Что означает вердикт сравнения
ВердиктСледующий шаг
ImprovedВыбранная метрика времени кадра стабильно уменьшилась больше порога подтверждения. Правильность игрового поведения проверьте отдельно.
RegressedВыбранная метрика стабильно увеличилась больше порога. Исследуйте или отмените изменение.
InconclusiveЭффект слишком мал, нестабилен или допустимых данных недостаточно. Это не доказывает равенство или отсутствие эффекта.
InvalidComparisonПрогоны не позволяют выполнить корректное сравнение. Сначала прочитайте и устраните причины несовпадений или нехватки данных.

Для подтверждения нужны не менее 5 полных пар, а в каждом прогоне — не менее 30 секунд измерения и 300 полных допустимых кадров, а также сопоставимые условия. Более короткие записи подходят для исследования. Пример исследовательского сценария не может подтвердить эффект.

Чем меньше миллисекунд, тем лучше. Парная разница — медиана разниц B − A в каждой паре. Она может отличаться от результата вычитания двух показанных медиан. Эффект должен превышать наибольшее из трёх значений: абсолютного порога, относительного порога и оценки шума; при этом не менее 80% пар должны совпадать по направлению изменения. Значения по умолчанию — 0.5 ms и 5%. Эти проверки помогают оценить стабильность, но сами по себе не устанавливают причину.

Чтобы снова открыть завершённую серию, используйте Import series and export report и выберите её series.json. Разрешённые различия не могут отменить требования к совпадению средств сбора данных и методов расчёта.

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

Откройте записи снова и поделитесь данными

Откройте Runs и нажмите Refresh saved runs. Выберите строку для просмотра сведений об источнике. Дважды нажмите на прогон или нажмите Open selected evidence, чтобы снова открыть Findings. Для серии откроется отчёт по парам.

Папка вывода по умолчанию — <YourProject>/Saved/FrameDoctor; в Settings можно выбрать другую. Отдельный прогон сохраняет исходный .utrace, манифест и анализ. Серия сохраняет series.json, comparison.json, HTML-отчёт и ссылки на исходные прогоны.

  1. Загрузите серию, которой хотите поделиться.
  2. Решите, включать ли Include source traces in the export — исходные трассировки в экспорт. При необходимости оставьте включённым Remove absolute paths and username from exported JSON для удаления абсолютных путей и имени пользователя из экспортируемого JSON.
  3. Нажмите Export paired series bundle, выберите место экспорта и дождитесь завершения.
  4. Проверьте экспортированные файлы, затем отправьте весь комплект человеку, который будет оценивать результат.
Исходные трассировки сохраняют своё содержимое. Удаление личных данных из JSON не очищает пути и сообщения внутри трассировки. Оба флажка экспорта включены по умолчанию. Чтобы уменьшить комплект для просмотра, можно исключить трассировки, но для повторного подтверждения результата после переноса получателю нужны исходные допустимые прогоны и необработанные трассировки.

Promote current run to baseline сохраняет подходящий завершённый и сопоставимый прогон в <YourProject>/FrameDoctor/Baselines. Короткая или исследовательская запись для этого не подходит. Храните исходные данные, пока они могут понадобиться для изучения или повторного подтверждения.

Сохранённые завершённые прогоны, доступность исходных трассировок, параметры экспорта и выбранная исходная запись.
Доступные исходные трассировки сохраняют связь отчёта с фактической записью.

Сохраните настройки для повторного использования

Профиль — сохранённый набор настроек записи и анализа. В Settings выберите Profile ID и имя, настройте поля и нажмите Save profile. Кнопка Load profile открывает JSON-файл профиля. Храните профили в папке проекта FrameDoctor/Profiles, если хотите учитывать их в истории изменений проекта.

Настройки, с которыми стоит разобраться сначала
НастройкаЗначение
Trace channelsДля обычной записи CPU и кадров используйте cpu,frame,bookmark.
Ready timeoutСколько ждать готовности сценария до начала прогрева.
Maximum trace sizeОграничение места на диске для одной трассировки. При превышении прогон завершается ошибкой с сохранением частичных данных.
Frame budgetЦелевая длительность кадра; по умолчанию 16.67 ms.
Hitch thresholdПорог подсчёта долгих кадров; по умолчанию 50 ms.
Absolute / relative effect thresholdМинимальный эффект сравнения до проверки шума; по умолчанию 0.5 ms и 5%.
Output folderМесто хранения новых записей и отчётов. Пустое поле означает стандартную папку Saved/FrameDoctor.

Используйте один профиль для обеих сторон A/B. До начала эксперимента задайте пороги в соответствии с вашей целью. Изменение формы во время работы задачи не переписывает сохранённые настройки этой задачи. Профиль с более новой неподдерживаемой схемой открывается только для чтения; используйте совместимый плагин вместо ручного изменения номера схемы.

Страница Settings с полями профиля, ограничениями записи, порогами анализа и папкой вывода.
Сохраните профиль, чтобы последующие записи выполнялись в тех же заранее выбранных условиях.

Создайте воспроизводимый сценарий

Этот раздел нужен, когда вы готовы подтвердить результат изменения до и после. Сценарий должен задавать и описывать фактические условия камеры, ввода, NPC и случайности. Его методы можно реализовать в Blueprints; писать C++ для создания сценария необязательно.

Чтобы использовать отдельный пример в существующем проекте, откройте проект-пример, нажмите правой кнопкой на BP_ExploratoryScenario в Content Browser и выберите Asset Actions → Migrate. Укажите папку Content своего проекта как место назначения и включите в нём FrameDoctor. Либо создайте собственный сценарий по шагам ниже.

  1. В Content Browser выберите Add → Blueprint Class → All Classes. Найдите FrameDoctorScenario и создайте BP_TestScenario в содержимом проекта.
  2. Откройте этот Blueprint. В меню Overrides реализуйте перечисленные ниже методы. Это объект, выбираемый при записи, а не Actor для размещения на уровне.
  3. Скомпилируйте и сохраните Blueprint и карту. Выберите класс в FrameDoctor. Для записи упакованной сборки включите карту и сценарий в cook, как описано в разделе «Подготовка A и B».
  4. Перед долгим сравнением сделайте одну короткую исследовательскую запись, чтобы проверить готовность и очистку.
Методы сценария
МетодЧто делает ваш Blueprint
Prepare(World)Находит реальные объекты сцены, сохраняет настройки, которые вы будете менять, задаёт состояние камеры, ввода и NPC и инициализирует используемый поток случайных чисел.
IsReadyВозвращает true только после готовности необходимых объектов, ресурсов и начального состояния. По умолчанию возвращает false. Одна лишь фиксированная задержка не устанавливает готовность.
BeginMeasurementЗапускает контролируемое действие после прогрева.
EndMeasurementОстанавливает действие при завершении измерения, в том числе при отмене после его начала.
CleanupОтменяет только изменения вашего сценария. Учитывает частично выполненную подготовку и отмену.
DescribeScenarioВозвращает Frame Doctor Scenario Snapshot с описанием перечисленных ниже условий.
Заполните описание условий сценария

В DescribeScenario подключите Make Frame Doctor Scenario Snapshot к возвращаемому значению. Заполняйте поля в соответствии с действительностью:

  • ScenarioId / Revision: стабильные непустые идентификатор и версия.
  • CameraRoute: фактическая фиксированная точка обзора или воспроизводимый маршрут.
  • InputConditions: используемый ввод или способ исключения ввода игрока.
  • NpcConditions: состав и поведение NPC, в том числе явное указание их отсутствия.
  • ParametersJson: необязательный корректный JSON-объект, например {"route":"fixed","npcCount":0}, только если он действительно описывает сцену.
  • SeedPolicy / RandomSeed: Known — только если вы действительно инициализируете случайность игры этим начальным числом; NotUsed — если случайность не используется; Unknown — если условия не установлены.
  • DeclaredNondeterminism: оставшаяся изменчивость, например физика, потоковая загрузка или планирование операционной системы.

Указание начального числа само по себе не инициализирует игру. Если условия неизвестны, запись остаётся исследовательской. Доступный в отдельном проекте-примере BP_ExploratoryScenario намеренно возвращает пустое описание.

Не удаляйте объекты или запись другой системы во время Cleanup. После изменения производительности отдельно проверьте игровое поведение: одинаковые условия измерения не доказывают правильность новой логики.

Если что-то не работает

FrameDoctor отсутствует в меню Tools

Проверьте Edit → Plugins, включите FrameDoctor и перезапустите редактор. Убедитесь, что пакет соответствует движку, а FrameDoctor.uplugin находится непосредственно в папке плагина. При использовании исходного кода сначала завершите сборку Development Editor.

Capture running PIE недоступно

Запустите сцену кнопкой Play. Оставьте флажок упакованной сборки выключенным, выберите конкретный класс сценария и дождитесь завершения другой задачи. Чтобы работать со вкладкой, освободите указатель PIE сочетанием Shift+F1.

Пример сценария не виден

Необязательный пример скачивается отдельно; пакет плагина не содержит примеров Blueprint. Откройте проект-пример с установленным и включённым FrameDoctor, найдите BP_ExploratoryScenario в Content → FrameDoctorExample → Scenarios и выберите его класс в Capture. Для собственного проекта сначала перенесите ресурс через Migrate. Это не Actor для размещения на уровне.

Ready timeout — истекло время ожидания готовности

Сценарий не стал готов вовремя. Проверьте переопределение IsReady, фактические объекты и ресурсы, карту и путь подготовленного класса. Базовый класс возвращает false. Увеличьте Ready timeout, если загрузка обоснованно требует больше времени; проверка готовности должна отражать реальное состояние.

Время кадра или собственные затраты имеют значение Unavailable

Для времени кадров нужны события кадров и полные кадры внутри интервала измерения. Для собственных затрат CPU также нужна полная непротиворечивая иерархия участков работы. Записывайте cpu,frame,bookmark, не останавливайте прогон и прочитайте сохранённую причину. Никогда не считайте недоступное значение нулём.

Сравнение получило Inconclusive или InvalidComparison

Прочитайте причины. Проверьте статус каждого прогона, наличие пяти полных пар, 30 секунд измерения и 300 полных кадров в каждом прогоне, полное описание сценария, стабильность условий и совпадение средств сбора данных. Inconclusive не доказывает отсутствие эффекта; устраните проблемы корректности до интерпретации разницы.

Упакованная сборка не находит карту или сценарий

Упакуйте сборку Development с включённым FrameDoctor. Включите карту и сценарий в cook. Используйте пути ресурсов /Game/... и суффикс класса Blueprint _C. Выберите исполняемый файл из сохранённой полной папки сборки.

Запись завершается ошибкой, останавливается или превышает лимит диска

Прочитайте статус и причину сохранённого прогона. Проверьте свободное место, права записи, ограничение размера трассировки и наличие другого активного средства записи. Для новой записи уменьшите детализацию событий или длительность. Не останавливайте Play и не меняйте карту или настройки графики во время измерения.

Open in Insights не открывает трассировку

Установите Unreal Insights для вашей версии движка. Сохраните доступ к исходной трассировке. FrameDoctor открывает тот же источник; переход к точному таймеру, потоку и интервалу выполняется вручную. Если движок не открывает путь с символами вне ASCII, используйте рабочую папку с простым именем из ASCII, сохранив оригинальную запись.

Отчёт открывается, но исходной трассировки нет

Экспортированный отчёт может быть доступен для просмотра без трассировок, но повторное подтверждение требует исходных допустимых необработанных данных. Экспортируйте новый комплект с исходными трассировками или восстановите полные папки исходных прогонов. Удаление личных данных из JSON не создаёт отсутствующие трассировки.

Краткий словарь

Проект / карта
Рабочее пространство вашей игры / отдельный уровень или сцена внутри него.
Blueprint
Ресурс Unreal для визуального программирования. Вы соединяете узлы вместо написания C++.
PIE
Play In Editor: игра, запущенная внутри Unreal Editor.
Development / Shipping
Сборка для разработки / конфигурация для итогового распространения. Для записи упакованной игры используйте Development.
Трассировка / .utrace
Исходный файл записанных событий и их времени.
Участок работы (scope) / таймер / поток
Измеренный отрезок работы / его имя / поток работы CPU, в котором он выполнялся.
ms / FPS
Миллисекунды на кадр / кадры в секунду. При 16.67 ms на кадр игра создаёт примерно 60 кадров в секунду.
Среднее / p95 / p99
Средняя длительность кадра / длительность, которую не превышают 95% / 99% полных кадров соответственно. Более высокий процентиль акцентирует более медленные кадры.
Прогрев / измерение
Время стабилизации, исключённое из результата / интервал, по которому вычисляется результат.
Исходная сборка / кандидат / пара
Первоначальная сборка / сборка с вашим изменением / по одному прогону каждой сборки, используемые вместе.
Шум / порог
Разброс между повторениями / минимальный стабильный эффект, необходимый для подтверждения.
Cook
Подготовка ресурсов в Unreal для работы в упакованной игре.
Манифест / профиль
Сохранённые условия и статус записи / настройки, выбранные для записи.

Версия и поддержка

FrameDoctor 1.0.0 · Unreal Engine 5.5, 5.6, 5.7 и 5.8 · Windows 64-bit.

Обращаясь за помощью, укажите версии движка и плагина, режим PIE или Development, нажатую кнопку, сохранённые статус и причину, а также ожидаемый результат. При необходимости приложите снимок экрана или проверенный комплект данных. Не публикуйте личные пути и необработанные журналы, которые вы не проверили.

Если в руководстве есть ошибка или непонятная инструкция, создайте обращение по документации. Для поддержки плагина используйте контакт на странице продукта FrameDoctor или в месте покупки.