Ограничение частоты кадров в секунду на iPhone?

Как ограничить частоту кадров в моем приложении OpenGL (я использую CADisplayLink), чтобы я мог оставить ЦП для других целей?


person user642252    schedule 27.12.2011    source источник


Ответы (3)


Как правило, вы не можете контролировать частоту обновления, если используете рекомендованный Apple CADisplayLink для рисования вашего приложения. Однако вы можете установить для свойства frameInterval значение больше единицы, чтобы пропускать кадры рисования, снижая частоту кадров. Например, frameInterval = 2 должно дать примерно 30 кадров в секунду вместо 60 кадров в секунду.

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

person Adrian    schedule 27.12.2011

Хотя на это был дан ответ, я хотел бы немного расширить.

Рекомендуемый метод действительно состоит в том, чтобы использовать CADisplayLink и frameInterval для ограничения базовой частоты кадров, сам дисплей в аппаратном обеспечении имеет фиксированную частоту обновления, а метод CADisplayLink синхронизирует аппаратное обновление с вызовом наших методов рисования, чтобы у методов рисования было больше времени для выполнения. Работа.

Поскольку CADisplayLink сгенерирован аппаратно, единственное, что вы можете с ним сделать, это разделить время, для этого и предназначен frameInterval.

frameInterval = 1 дает вам 60 кадров в секунду

frameInterval = 2 дает вам 30 кадров в секунду

frameInterval = 3 дает вам 20 кадров в секунду

Например, я часто использую frameInterval = 5 для меню, это все равно дает мне 12 кадров в секунду (минимум для разумной простой анимации), а потребление батареи резко снижается.

Я также использовал динамическое изменение частоты кадров, измеряя среднюю частоту кадров и выбирая между ними значение frameInterval, которое помогает поддерживать плавность игры.

FPS за пределами этих значений не очень стабильны и обычно приводят к дрожащей анимации, временной интервал, с которым мы должны работать, составляет 1/60 с, поэтому только кратные этому значения будут давать плавную анимацию. Даже если вы не используете CADisplayLink и делаете идеальную временную маршрутизацию для доставки чего-то другого, аппаратное обеспечение все равно будет использовать этот временной интервал.

person led42    schedule 28.12.2011

Я не получил термин «ограничить скорость FPS» от функции. но чтобы ваше приложение openGL работало гладко, оно должно иметь FPS до 60 (в iOS 5), и вы должны поддерживать (я думаю, ограничение в вашем случае) этот FPS для повышения производительности.

Xcode предоставляет множество инструментов, помогающих анализировать и настраивать приложения OpenGL ES, как описано в Руководство по программированию OpenGL ES для iOS:

Определение производительности OpenGL ES. Впервые представленное в Xcode 4, средство обнаружения производительности OpenGL ES быстро помогает вам определить, является ли OpenGL ES основным узким местом в вашем приложении; это должен быть первый инструмент, который вы запускаете для тестирования кода OpenGL ES. Ключевым преимуществом OpenGL ES Performance Detective является то, что он может автоматически сразу же направить вас в критическое место в вашем приложении, которое больше всего снижает производительность OpenGL ES. Чтобы использовать OpenGL ES Performance Detective, запустите инструмент и используйте его для выбора приложения на устройстве iOS, подключенном к вашей машине для разработки. Когда ваше приложение достигнет интересующего вас места в вашем приложении, нажмите кнопку «Собрать доказательства». Детектив производительности OpenGL ES записывает команды OpenGL ES, генерируемые вашим приложением, в течение серии кадров, анализирует команды для обнаружения ключевых узких мест и предоставляет конкретные рекомендации по производительности. Детектив производительности OpenGL ES можно найти в каталоге /Developer/Applications/Graphics Tools/.

Инструменты (анализ OpenGL ES). Инструмент анализа OpenGL ES, также представленный в Xcode 4, предоставляет ряд функций, которые помогут вам изучить использование OpenGL ES вашим приложением. Инструмент анализа OpenGL ES записывает команды OpenGL ES, сгенерированные вашим приложением, и предупреждает вас, когда ваше приложение не соответствует рекомендациям, описанным в этом руководстве по программированию; он рекомендует конкретные изменения, которые вы можете внести, чтобы следовать рекомендациям. Инструмент анализа OpenGL ES позволяет увидеть все команды, используемые для создания каждого кадра анимации. Наконец, инструмент анализа OpenGL ES позволяет вам выборочно отключать части графического конвейера, чтобы определить, является ли эта часть конвейера существенным узким местом в вашем приложении. Инструмент анализа OpenGL ES предоставляет вам отличный набор инструментов для ручного анализа вашего приложения и понимания его внутренней работы. Однако он не указывает автоматически на то место, где ваше приложение в настоящее время является узким местом. Например, даже когда он предлагает, как улучшить ваши методы кодирования OpenGL ES, это предложение не означает, что изменение вашего кода автоматически повысит производительность вашего приложения.

Инструменты (драйвер OpenGL ES) — инструмент драйвера OpenGL ES предоставляется в Xcode 3 и более поздних версиях. Он не анализирует напрямую команды OpenGL ES, отправленные вашим приложением. Вместо этого он позволяет отслеживать ключевые статистические данные о том, как графическое оборудование используется вашим приложением. Например, вы можете использовать его для отслеживания количества байтов, используемых для хранения данных текстуры, и того, как эти числа меняются от кадра к кадру.

person Ajeet Pratap Maurya    schedule 27.12.2011
comment
Приложение активно использует пиксельные шейдеры. На 3gs невозможно будет достичь 60 кадров в секунду. Я знаю, что это не будет гладко. - person user642252; 27.12.2011
comment
на 3gs (с iOS4) для лучшей производительности рекомендуется 30 кадров в секунду. Хотя вы использовали тяжелую графику, вы можете использовать инструменты, которые помогут вам определить, какой рендеринг снижает ваш FPS. Я видел, как люди использовали инструмент, чтобы выяснить точную проблему падения FPS. Эти инструменты привели их к точному коду, в котором была проблема. - person Ajeet Pratap Maurya; 27.12.2011