Perfomance Counters

Вообще это вещь нужная всегда. Былобы неплохо всегда иметь возможность получить информацию о производительности отдельных модулей, сколько вызовов чеголибо было произведено, чтобы можно было легко находить узкие места реализации, тормозящие все приложение.

Но сейчас пойдет речь не об общем варианте счетчика, а об одном специализированном: счетчик  FPS.

К любому PerfomanceCounter, который планируется оставить в релизной версии, всегда следует применять требование быстродействия, тобишь он не должен работать медленно. Но вот критерий медленно слегка условен)

На данный момент думаю реализовать так: считать время за которое отрисуется  150 кадров. При скорости в 30 фпс это дает обновление  раз в 5 секунд.

Еще была идея считать время отрисовки 1 кадра, но по моему тут будет слишком большой оверхед,  хотя такой счетчик былбы удобен, если вести статистику по последним N кадрам — для определения моментов, в которые произошло «замирание».

Итак счетчик FPS:

Будет содержать 1 параметр: кол-во кадров для которых надо рассчитать время и 1 слот — новый кадр. Строить его надо явно на основе уже имеющегося scorefield, который переименовать в counter )


2 Responses to Perfomance Counters

  1. Avatar Вудруф
    Вудруф says:

    ИМХО, производительность отдельных модулей лучше проверяется профилированием.
    Другое дело, если ты хочешь иметь статистику по производительности в релизной версии. Только такое нужно для серверной части, но совсем не обязательно для клиента или single player игры.
    Замер времени отрисовки кадра — не такая уж и медленная операция по сравнению с самой прорисовкой. Тут только один нюанс — показывать скорость отрисовки последнего кадра или некоторую усреднённую, где у последнего будет больший вес. Т.е. либо мы получаем постоянно скачущее число, либо более-менее плавно изменяющееся.

    admin Reply:

    На самом деле профайлеры, о которых я знаю — показывают среднюю статистику, тоесть с их помощью нельзя определить момент когда произошло кратковременное замирание, именно поэтому делают свои счетчики и профайлеры в играх.
    Замер времени отрисовки кадра это еще и рендеринг текста и выполняется это примерно 1000 раз в секунду (ну у меня вот 1200 фпс). Рендеринг текста вещь довольно медленная и к томуже gettimeofday есть не на всех платформах (в частности отсутствует в windows)