Данный плагин помогает узнать, какие функции в скрипте выполняются дольше всего, благодаря чему можно понять, какие отрывки кода следует оптимизировать в первую очередь.
Он измеряет количество вызовов и время выполнения каждой функции. Полученная информация сохраняется в одном из поддерживаемых на данный момент форматов: HTML, XML или в виде обычного текста.
Профилирование начинается при загрузке скрипта и завершается при его выгрузке (т.е., когда вы закрываете сервер или выполняете RCON-команды exit/gmx/unloadfs/reloadfs). Во время выгрузки статистические данные сохраняются в файл <имя_скрипта>-profile.<расширение>. Расширение зависит от выбранного вами формата сохраняемой информации (см. выше).
Плагину можно указать дополнительные параметры в server.cfg:
- profile_gamemode <0|1>
Если указано 1, плагин будет профилировать мод, запускаемый на сервере. Значение по умолчанию: 0.
- profile_filterscripts <fs1> <fs2>
Список фильтрскриптов, которые нужно профилировать. Может быть пустым.
- profile_format <xml|html|text>
Формат вывода статистики. Значение по умолчанию: html. Примечание: в HTML-документе можно сортировать данные статистики, щёлкая по заголовкам колонок!!
Скачать:
Исходный код:
Примечания:
- Я не перевёл пункты про параметры call_graph и call_graph_format. В них было сказано о программе GraphViz, ссылка на сайт которой мертва, поэтому у меня не было возможности разобраться.
- Не забудьте указать "profile_gamemode 1" в server.cfg для профилирования мода, т.к. по умолчанию профилирование почему-то выключено.
Остальные пункты в принципе указывать не обязательно: при их отсутствии фильтрскрипты профилироваться не будут, а отчёт будет сохраняться в формате HTML в одной папке со скриптом мода.- Profiler не совместим с плагинами JIT и CrashDetect. Эти плагины созданы для совершенно разных целей и их использование вместе само по себе абсурдно, поэтому для использования Profiler уберите "jit(.so)" и "crashdetect(.so)" из server.cfg.
- Профилируются только нативные функции, коллбэки и функции, вызываемые с помощью других нативных функций (SetTimer, SetTimerEx, CallLocalFunction, CallRemoteFunction, etc.)
- Чтобы вы могли сразу увидеть плагин в действии, прикрепляю скриншот:
Здесь я отсортировал данные, щёлкнув по заголовку столбца "Overall" (под "Total Time").
Впрочем, если щёлкнуть по стоблцу "%" (тоже под "Total Time"), сортировка не изменится.
Как видно, больше всего времени отнимает функция OnPlayerUpdate, следовательно код в ней следует переделать.
На втором месте OnGameModeInit, но её можно пропустить, т.к. загрузка/выгрузка мода не сильно критична по времени.
Следующие кандидаты на оптимизацию - @__CruiseControlTimer, CheckGas, CheckStatus и SyncUp. Также следует проверить все места, где используется функции GetVehicleModel и GetVehicleVelocity и по возможности убрать лишние вызовы этих функций.
Оригинал: http://forum.sa-mp.com/showthread.php?t=271129
Автор: Zeex
Перевод: Daniel_Cortez
Специально для Pro-Pawn.ru
Копирование данной статьи на других ресурсах без разрешения автора запрещено!