- Регистрация
- 5 Май 2019
- Сообщения
- 1.041
- Симпатии
- 359
- Пол
- Мужской
Плагин невероятно простой, и отображает полезную информацию о FPS и задержкой между кадрами. Да задержка между кадрами КРАЙНЕ ВАЖНА!
Его можно было бы сделать в виде модуля с таймерами очень высокого разрешения, но это слишком долго и мучительно, так что сделано в виде обычного плагина.
Важно понимать что сам плагин выполняет действия(хотя и не значительные) каждый кадр по этому он сам будет вызывать падение фпс, судя по наблюдениям максимум на 5%.
По этому устанавливать его следует только для поиска проблем в плагинах и модулях.
Плагин пишет каждые 30 секунд максимальную задержку между кадрами и минимальный/максимальный фпс за последние 30 секунд в текущий файл из amxmodx/logs .
Или же по клиентской команде say /serverfps
Повторяю использовать исключительно для отладки и поиска проблем, не рекомендую устанавливать плагин для постоянной работы!
(хотя и не несет большой нагрузки, но за последствия постоянной работы я не ручаюсь)
Его можно было бы сделать в виде модуля с таймерами очень высокого разрешения, но это слишком долго и мучительно, так что сделано в виде обычного плагина.
Важно понимать что сам плагин выполняет действия(хотя и не значительные) каждый кадр по этому он сам будет вызывать падение фпс, судя по наблюдениям максимум на 5%.
По этому устанавливать его следует только для поиска проблем в плагинах и модулях.
C++:
#include <amxmodx>
#include <engine>
new Float:max_delay = 0.0;
new Float:old_max_delay = 0.0;
new max_fps = 0;
new old_max_fps = 0;
new min_fps = 0;
new old_min_fps = 0;
new current_fps = 0;
new last_check_time = 0;
new Float:last_delay_check_time = 0.0;
public plugin_init()
{
register_plugin("Full FPS monitor", "0.1", "Karaulov");
register_clcmd("say /serverfps", "serverfps")
set_task(30.0,"max_delay_clean",1,_,_,"b")
}
public max_delay_clean(id)
{
log_amx("FPS MONITOR: Max delay: %d ms. Max fps: %d. Min fps: %d",floatround(max_delay * 1000.0),max_fps,min_fps);
old_max_delay = max_delay;
max_delay = 0.0;
old_min_fps = min_fps;
min_fps = 0;
old_max_fps = max_fps;
max_fps = 0;
}
public serverfps(id)
{
client_print_color(id,print_team_red,"Max delay: %d ms and %d ms. Max fps: %d and %d. Min fps: %d and %d",floatround(max_delay * 1000.0),
floatround(old_max_delay * 1000.0),max_fps,old_max_fps,min_fps,old_min_fps);
}
new tmpSysTime = 0;
new Float:tmpGameTime = 0.0;
public server_frame()
{
tmpSysTime = get_systime();
tmpGameTime = get_gametime();
if (last_check_time == 0)
{
last_check_time = tmpSysTime;
}
else
{
if (last_delay_check_time == 0.0)
{
last_delay_check_time = tmpGameTime;
}
else
{
if (tmpGameTime - last_delay_check_time > max_delay)
{
max_delay = tmpGameTime - last_delay_check_time;
}
last_delay_check_time = tmpGameTime;
}
if (tmpSysTime - last_check_time >= 1)
{
old_min_fps = min_fps;
old_max_fps = max_fps;
if (current_fps > max_fps || max_fps == 0)
{
max_fps = current_fps;
}
else if (current_fps < min_fps || min_fps == 0)
{
min_fps = current_fps;
}
current_fps = 0;
last_check_time = tmpSysTime;
}
else
{
current_fps++;
}
}
}
Или же по клиентской команде say /serverfps
Повторяю использовать исключительно для отладки и поиска проблем, не рекомендую устанавливать плагин для постоянной работы!
(хотя и не несет большой нагрузки, но за последствия постоянной работы я не ручаюсь)