Daniel_Cortez
13.11.2015, 18:33
Данный плагин помогает узнать, какие функции в скрипте выполняются дольше всего, благодаря чему можно понять, какие отрывки кода следует оптимизировать в первую очередь.
Он измеряет количество вызовов и время выполнения каждой функции. Полученная информация сохраняется в одном из поддерживаемых на данный момент форматов: 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-документе можно сортировать данные статистики, щёлкая по заголовкам колонок!!
Скачать:
https://github.com/Zeex/samp-plugin-profiler/releases
Исходный код:
https://github.com/Zeex/samp-plugin-profiler
Примечания:
Я не перевёл пункты про параметры call_graph и call_graph_format. В них было сказано о программе GraphViz (http://www.graphviz.org), ссылка на сайт которой мертва, поэтому у меня не было возможности разобраться.
Не забудьте указать "profile_gamemode 1" в server.cfg для профилирования мода, т.к. по умолчанию профилирование почему-то выключено.
Остальные пункты в принципе указывать не обязательно: при их отсутствии фильтрскрипты профилироваться не будут, а отчёт будет сохраняться в формате HTML в одной папке со скриптом мода.
Profiler не совместим с плагинами JIT и CrashDetect. Эти плагины созданы для совершенно разных целей и их использование вместе само по себе абсурдно, поэтому для использования Profiler уберите "jit(.so)" и "crashdetect(.so)" из server.cfg.
Профилируются только нативные функции, коллбэки и функции, вызываемые с помощью других нативных функций (SetTimer, SetTimerEx, CallLocalFunction, CallRemoteFunction, etc.)
Чтобы вы могли сразу увидеть плагин в действии, прикрепляю скриншот:
http://ihost.pro-pawn.ru/image.php?di=CXX4
Здесь я отсортировал данные, щёлкнув по заголовку столбца "Overall" (под "Total Time").
Впрочем, если щёлкнуть по стоблцу "%" (тоже под "Total Time"), сортировка не изменится.
Как видно, больше всего времени отнимает функция OnPlayerUpdate, следовательно код в ней следует переделать.
На втором месте OnGameModeInit, но её можно пропустить, т.к. загрузка/выгрузка мода не сильно критична по времени.
Следующие кандидаты на оптимизацию - @__CruiseControlTimer, CheckGas, CheckStatus и SyncUp. Также следует проверить все места, где используется функции GetVehicleModel и GetVehicleVelocity и по возможности убрать лишние вызовы этих функций.
Оригинал: http://forum.sa-mp.com/showthread.php?t=271129
Автор: Zeex (https://github.com/Zeex)
Перевод: Daniel_Cortez (http://pro-pawn.ru/member.php?100-Daniel_Cortez)
Специально для Pro-Pawn.ru (http://www.pro-pawn.ru)
Копирование данной статьи на других ресурсах без разрешения автора запрещено!
Он измеряет количество вызовов и время выполнения каждой функции. Полученная информация сохраняется в одном из поддерживаемых на данный момент форматов: 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-документе можно сортировать данные статистики, щёлкая по заголовкам колонок!!
Скачать:
https://github.com/Zeex/samp-plugin-profiler/releases
Исходный код:
https://github.com/Zeex/samp-plugin-profiler
Примечания:
Я не перевёл пункты про параметры call_graph и call_graph_format. В них было сказано о программе GraphViz (http://www.graphviz.org), ссылка на сайт которой мертва, поэтому у меня не было возможности разобраться.
Не забудьте указать "profile_gamemode 1" в server.cfg для профилирования мода, т.к. по умолчанию профилирование почему-то выключено.
Остальные пункты в принципе указывать не обязательно: при их отсутствии фильтрскрипты профилироваться не будут, а отчёт будет сохраняться в формате HTML в одной папке со скриптом мода.
Profiler не совместим с плагинами JIT и CrashDetect. Эти плагины созданы для совершенно разных целей и их использование вместе само по себе абсурдно, поэтому для использования Profiler уберите "jit(.so)" и "crashdetect(.so)" из server.cfg.
Профилируются только нативные функции, коллбэки и функции, вызываемые с помощью других нативных функций (SetTimer, SetTimerEx, CallLocalFunction, CallRemoteFunction, etc.)
Чтобы вы могли сразу увидеть плагин в действии, прикрепляю скриншот:
http://ihost.pro-pawn.ru/image.php?di=CXX4
Здесь я отсортировал данные, щёлкнув по заголовку столбца "Overall" (под "Total Time").
Впрочем, если щёлкнуть по стоблцу "%" (тоже под "Total Time"), сортировка не изменится.
Как видно, больше всего времени отнимает функция OnPlayerUpdate, следовательно код в ней следует переделать.
На втором месте OnGameModeInit, но её можно пропустить, т.к. загрузка/выгрузка мода не сильно критична по времени.
Следующие кандидаты на оптимизацию - @__CruiseControlTimer, CheckGas, CheckStatus и SyncUp. Также следует проверить все места, где используется функции GetVehicleModel и GetVehicleVelocity и по возможности убрать лишние вызовы этих функций.
Оригинал: http://forum.sa-mp.com/showthread.php?t=271129
Автор: Zeex (https://github.com/Zeex)
Перевод: Daniel_Cortez (http://pro-pawn.ru/member.php?100-Daniel_Cortez)
Специально для Pro-Pawn.ru (http://www.pro-pawn.ru)
Копирование данной статьи на других ресурсах без разрешения автора запрещено!