Я делаю так:
var
fps_time: integer;
fps_cur: integer;
fps: integer;
...
procedure CountFPS;
begin
if fps_time <= GetRelativeTimeMs then
begin
fps_time := GetRelativeTimeMs + 1000;
fps := fps_cur;
fps_cur := 0;
end;
fps_cur := fps_cur + 1;
end;
...
// Инициализация:
fps_time := GetRelativeTimeMs - 1000;
...
// При каждой отрисовке
CountFPS;
...
// Выводим
DrawText('FPS: ' + IntegerToString(fps), 8, 8);