Инструмент Microprofile
UNIGINE поддерживает Microprofile, расширенный внешний встраиваемый профилировщик CPU / GPU с поддержкой покадровой проверки.
Профилировщик имеет следующее:
- Операции профилирования, выполняемые движком на CPU и GPU.
- Профилирование потоков движка.
- Профилирование до 1000 кадров.
- Вывод данных о производительности на локальный веб-сервер или в файл HTML.
Запуск Microprofile#
Инструмент Microprofile доступен только для Development сборок движка: он не будет компилироваться для сборок Debug и Release. Вы можете использовать консольную команду microprofile_info, чтобы проверить, скомпилирован ли Microprofile.
Данные о производительности, полученные Microprofile могут выводиться на локальный веб-сервер или в файл HTML.
Визуализация с использованием встроенного сервера#
Чтобы визуализировать данные о производительности с помощью локального веб-сервера, выполните следующие действия:
- В консоли установите количество кадров для профилирования с помощью консольной команды microprofile_webserver_frames . Вы можете пропустить этот шаг: по умолчанию будет профилировано 500 кадров.
- В строке меню UnigineEditor выберите Tools -> Microprofile.
Данные о производительности будут отображаться в вашем веб-браузере.
- Вы можете отображать только часть профилированных фреймов: в адресной строке веб-браузера добавьте /<number_of_frames> к текущему URL-адресу.
- Не забудьте обновить ( F5 ) страницу в веб-браузере во время сбора данных профилирования, поскольку это не выполняется автоматически.
Например, если вы укажете localhost:1337/100, будут отображаться только первые 100 кадров.
Данные о производительности#
Microprofile визуализирует подробные данные о производительности для каждого кадра операций, выполняемых движком на CPU и GPU и в потоках движка. В главном меню Microprofile вы можете изменить режим визуализации: нажмите Mode и выберите нужный. По умолчанию установлен режим Detailed.
В режиме Detailed каждая операция (функция) и поток отображаются в виде отдельной цветной области. Регионы являются иерархическими: функция, вызванная другой функцией, отображается под последней. Размер области определяется временем выполнения соответствующей операции.
На рисунке ниже функция Engine::do_render() вызывает функции RenderRenderer::renderWorld() и так далее:
Чтобы просмотреть данные об определенной операции или потоке, наведите указатель мыши на соответствующую область. Чтобы увеличить / уменьшить отображаемые области, прокрутите колесико мыши.
Данные ЦП#
В группе данных производительности Main отображается стек вызовов операций (например, update, rendering и т. д.), выполняемых движком на ЦП.
Данные GPU#
В группе данных о производительности GPU отображается стек вызовов операций, выполняемых движком на GPU. В дополнение к основным данным о производительности для каждой функции (например, рендеринга среды, рендеринга пост-материалов и т.д.) отображается количество вызовов DIP и визуализированных треугольников. Также может отображаться количество поверхностей, источников света, теней, отрендеренных этой функцией, количество используемых материалов и шейдеров; информация об узле или материале, для которого вызывается функция (идентификатор, имя и т.д.).
Когда указывается область, соответствующая определенной функции, отображается Microprofile, когда эта функция вызывается на CPU и сколько времени затрачивается на ее выполнение.
OpenGL или команды DirectX можно объединить в группы отладки графического процессора, которые создаются автоматически при определении области профилирования. Все графические ресурсы, загружаемые из внешних файлов, такие как текстуры, шейдеры, статические сетки или сетки со скинами, а также внутренние ресурсы движка имеют свои собственные имена отладки для упрощения идентификации. Эта информация может быть полезна при использовании отладчиков Graphics API, таких как NVIDIA Nsight или RenderDoc.
Данные о потоках движка#
Данные о производительности потоков движка визуализируются в группах CPUThread, SoundThread, AsyncQueueThread, WorldSpawnMeshClutterThread, WorldSpawnGrassThread.