Рассчитать частоту кадров (кадров в секунду) для приложения iphone
Я использую приложение opengl es iphone. Как наиболее точно рассчитать частоту кадров моего приложения для настройки производительности?
6 ответов
Попробуйте запустить:
Run -> Run With Performance Tool -> OpenGL ES
,
Вы должны запускать этот инструмент при подключении к устройству (что вам в любом случае явно необходимо для настройки производительности...)
Он дает вам Core Animation FPS, который может (вероятно) не соответствовать тому, что вы ищете, но он может отображать ряд других полезных статистических данных для вас, которые также могут помочь вам оптимизировать.
Я думаю, что вы хотите, это:
// fps calculation
static int m_nFps; // current FPS
static CFTimeInterval lastFrameStartTime;
static int m_nAverageFps; // the average FPS over 15 frames
static int m_nAverageFpsCounter;
static int m_nAverageFpsSum;
static UInt8* m_pRGBimage;
static void calcFps()
{
CFTimeInterval thisFrameStartTime = CFAbsoluteTimeGetCurrent();
float deltaTimeInSeconds = thisFrameStartTime - lastFrameStartTime;
m_nFps = (deltaTimeInSeconds == 0) ? 0: 1 / (deltaTimeInSeconds);
m_nAverageFpsCounter++;
m_nAverageFpsSum+=m_nFps;
if (m_nAverageFpsCounter >= 15) // calculate average FPS over 15 frames
{
m_nAverageFps = m_nAverageFpsSum/m_nAverageFpsCounter;
m_nAverageFpsCounter = 0;
m_nAverageFpsSum = 0;
}
lastFrameStartTime = thisFrameStartTime;
}
С уважением, Асаф Пинхасси.
Найдите что-то вроде таймера высокого разрешения (более 1000 тиков / секунд) и измерьте время между началом рендеринга до его появления на экране.
Разделите тики в секунду на время, которое вы только что измерили, и у вас будет FPS.
Когда вы дойдете до конца кода рисования, увеличьте счетчик.
Установите огонь NSTimer каждую секунду, отобразите счетчик и сбросьте его на ноль.
Проверьте эту тему. Там есть несколько очень полезных ссылок. Удачи!
Измерять FPS во время разработки практически бессмысленно. Измерьте время рендеринга, которое вам нужно!
Таким образом, вы получите более четкое представление о том, как ваши изменения влияют на производительность. Обычно очень полезно разделить время рендеринга на значимые фрагменты, например, "рендеринг фона", "рендеринг уровня", "рендеринг мобов" и т. Д.
Если вы все еще хотите использовать FPS, мой личный фаворит - версия Johns NSTimer, даже если она не показывает всплески.