Вообще это вещь нужная всегда. Былобы неплохо всегда иметь возможность получить информацию о производительности отдельных модулей, сколько вызовов чеголибо было произведено, чтобы можно было легко находить узкие места реализации, тормозящие все приложение.
Но сейчас пойдет речь не об общем варианте счетчика, а об одном специализированном: счетчик FPS.
К любому PerfomanceCounter, который планируется оставить в релизной версии, всегда следует применять требование быстродействия, тобишь он не должен работать медленно. Но вот критерий медленно слегка условен)
На данный момент думаю реализовать так: считать время за которое отрисуется 150 кадров. При скорости в 30 фпс это дает обновление раз в 5 секунд.
Еще была идея считать время отрисовки 1 кадра, но по моему тут будет слишком большой оверхед, хотя такой счетчик былбы удобен, если вести статистику по последним N кадрам — для определения моментов, в которые произошло «замирание».
Итак счетчик FPS:
Будет содержать 1 параметр: кол-во кадров для которых надо рассчитать время и 1 слот — новый кадр. Строить его надо явно на основе уже имеющегося scorefield, который переименовать в counter )
ИМХО, производительность отдельных модулей лучше проверяется профилированием.
Другое дело, если ты хочешь иметь статистику по производительности в релизной версии. Только такое нужно для серверной части, но совсем не обязательно для клиента или single player игры.
Замер времени отрисовки кадра — не такая уж и медленная операция по сравнению с самой прорисовкой. Тут только один нюанс — показывать скорость отрисовки последнего кадра или некоторую усреднённую, где у последнего будет больший вес. Т.е. либо мы получаем постоянно скачущее число, либо более-менее плавно изменяющееся.
admin Reply:
4 октября, 2008 at 12:08
На самом деле профайлеры, о которых я знаю — показывают среднюю статистику, тоесть с их помощью нельзя определить момент когда произошло кратковременное замирание, именно поэтому делают свои счетчики и профайлеры в играх.
Замер времени отрисовки кадра это еще и рендеринг текста и выполняется это примерно 1000 раз в секунду (ну у меня вот 1200 фпс). Рендеринг текста вещь довольно медленная и к томуже gettimeofday есть не на всех платформах (в частности отсутствует в windows)