Правила форума Гаранты форума
Размещение рекламы AMX-X компилятор

Здравствуйте, гость Вход | Регистрация

Наши новости:

14-дек
24-апр
10-апр
11-апр

Простейший мониторинг фпс

, Но крайне полезный :)
Статус пользователя karaulov
сообщение 27.11.2021, 8:49
Сообщение #1


Стаж: 15 лет

Сообщений: 1077
Благодарностей: 435
Полезность: 465

Плагин невероятно простой, и отображает полезную информацию о FPS и задержкой между кадрами. Да задержка между кадрами КРАЙНЕ ВАЖНА!


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

Важно понимать что сам плагин выполняет действия(хотя и не значительные) каждый кадр по этому он сам будет вызывать падение фпс, судя по наблюдениям максимум на 5%.
По этому устанавливать его следует только для поиска проблем в плагинах и модулях.

Код
#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++;
        }
    }
}



Плагин пишет каждые 30 секунд максимальную задержку между кадрами и минимальный/максимальный фпс за последние 30 секунд в текущий файл из amxmodx/logs .
Или же по клиентской команде say /serverfps


Повторяю использовать исключительно для отладки и поиска проблем, не рекомендую устанавливать плагин для постоянной работы!
(хотя и не несет большой нагрузки, но за последствия постоянной работы я не ручаюсь)

Отредактировал: karaulov, - 27.11.2021, 8:50
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   Цитировать сообщение
  Ответить в данную темуНачать новую тему
 
0 пользователей и 1 гостей читают эту тему: