Как узнать, заикается ли частота кадров OpenGL ES - без инструментов? - PullRequest
2 голосов
/ 29 ноября 2011

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

Он делает игру, и иногда он испытывает задержки в частоте кадров.Как будто отбрасывается 10 или более кадров.

Функция цикла запуска вызывается CADisplayLink.

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

Может быть полезно для тестирования на различных устройствах на ходу.Как бы вы отслеживали это без подключения к Xcode?

Ответы [ 2 ]

6 голосов
/ 29 ноября 2011

Правильный путь - с дельтой (разница между lastTime и сейчас), что-то вроде этого:

    CFTimeInterval time;
    time = CACurrentMediaTime();
    if (lastTime == 0) {
        delta = 0.0;
    } else {
        delta = time - lastTime;
    }
    lastTime = time;

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

Скажем, вы хотите обновить позицию объекта, который имеет скорость, он должен выглядеть примерно так:

objectXPos.pos = delta/targetDelta*objectXSpeed;

Target Delta была бы идеальной частотой кадров, скажем, 60 кадров в секунду дали бы вам targetDelta 1/60 = 0,0167

Таким образом, игра не будет зависеть от плохой производительности.также включите аварийный режим, скажем, кровавая вещь остановилась на секунду или более, и вы можете не обновлять игровую логику, в этом случае это лучше, чем все, что происходит магическим образом для пользователя.Эта часть зависит от типа игры, секунда может быть излишней, возможно, 0,033 с уже слишком много (половина частоты кадров)

2 голосов
/ 29 ноября 2011

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

...