Техническое примечание TN2133

Объединенные обновления

Улучшение рисования производительности путем использования в своих интересах объединенных обновлений.

Объединенные обновления
Как это влияет на приложения?
Какие инструменты я могу использовать, чтобы сказать, затрагивается ли приложение объединенными обновлениями?
Рекомендации
История версии документа

Объединенные обновления

Mac OS X 10.4 представляет новое поведение объединения обновлений, который позволяет Кварцу более эффективно обновить кадровый буфер во время каждого обновления дисплея. В дополнение к увеличению системной эффективности объединение обновлений улучшает визуальную непротиворечивость и устраняет «разрыв» во время прокрутки и анимации. Для объединения обновлений сервер окна Quartz составляет все буферы окна в единственный внеэкранный кадровый буфер прежде, чем сбросить его на экран. Когда Ваши проблемы приложения команда для сбрасывания система фактически не сбрасывает то содержание до следующего доступного обновления дисплея. Это позволяет всем обновлениям для многократных приложений происходить одновременно. Операции сервера окна (окно изменяют размеры или перемещаются, например), обрабатываются таким же образом — объединенный в экранное обновление в масштабе всей системы.

Как это влияет на приложения?

Большинство приложений получает выгоду от объединенных обновлений, однако, существуют некоторые ситуации, где это может вызвать регрессии производительности. Регрессии имеют тенденцию попадать в две категории:

Какие инструменты я могу использовать, чтобы сказать, затрагивается ли приложение объединенными обновлениями?

Если приложение, созданное и соединенное на Mac OS X 10.4 и позже проводящее больше времени, таща, чем то же приложение, созданное и соединенное в предыдущей системе, то это, вероятно, затрагивается объединенными обновлениями. Существует два инструмента, которые могут использоваться, чтобы проверить, ли приложение или не затрагивается объединенными обновлениями, Кварцевой Отладкой и Инструментами.

Кварцевая отладка

Кварцевая Отладка является средством отладки для Кварцевой графической системы с несколькими мощными функциями, чтобы помочь Вам идентифицировать много графических дисплеев и проблем производительности. Как только инструменты разработчика Mac OS X были установлены, Кварцевое приложение Отладки расположено в: Инструменты/Developer/Applications/Performance/. Для наблюдения влияния эффектов объединенных обновлений на приложениях, включая приложения CFM и приложения, соединенные в системах до 10,4, включают вызванную синхронизацию луча в Кварцевой Отладке. Приложение, затрагивающееся объединенными обновлениями, будет иметь пониженную частоту кадров, когда синхронизация луча будет включена чем тогда, когда синхронизация луча отключена, и часто будет увеличивать использование CPU. Узнать больше об использовании Кварцевой Отладки, чтобы видеть, что эффект объединенных обновлений видит Вопросы и ответы 1234, Отлаживая Графику с QuartzDebug.

Инструменты

Инструменты являются профильным инструментом, включенным с распределением инструментов разработчика Mac OS X. Инструменты могут использоваться, чтобы профилировать приложение и видеть, проводится ли слишком много времени в операциях рисования, сигнализируя, что приложению объединяли его обновления. Как только инструменты разработчика Mac OS X были установлены, Инструменты, в которых профильный инструмент расположен в системе:/Developer/Applications/. В случае необходимости используйте Кварцевую Отладку, чтобы вызвать синхронизацию луча тогда, в Инструментах, выбрать Ваше приложение с помощью «инструмента» Профилировщика Времени. Если Вы видите время, больше времени потратило в CGContext операции рисования, чем Вы делают с отключенной синхронизацией луча, Вашему приложению объединяли его обновления.

Для узнавания больше об использовании Инструментов для профилирования, см. Инструментальное Руководство пользователя.

Рекомендации

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

Общие рекомендации

  • Сброс один раз на событие обновления.

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

  • В то время как приложение может получить частоту обновления текущего экрана, рекомендация состоит в том, чтобы принять частоту обновления 60 Гц.

  • Приложения в целом не должны рисовать или сбрасывать быстрее, чем видит пользователь. Для большинства анимаций только нужна частота обновления 30 кадр/с, если анимация должна обновить чаще, то таймер должен использоваться для ограничения уровней анимации частотой обновления или меньше.

  • Избегите, если это возможно, функций, запрашивающих непосредственный сброс на экран. Получение приложений с Кварцем должно использовать CGContextSynchronize вместо CGContextFlush.

  • В использовании Какао NSView setNeedsDisplay: запрашивать обновление на представление вместо более непосредственного display:, и в использовании HIToolBox Углерода HIViewSetNeedsDisplay или HIViewSetNeedsDisplayInRegion вместо непосредственного HIWindowFlush.

Методы наиболее успешной практики

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

  • Это - хорошая идея для анимаций и экранных обновлений, чтобы быть временем, базируемым и ограниченным кадром для работы лучше всего с объединенными обновлениями. Т.е. они должны сделать фиксированную сумму прогресса на единицу времени, а не на кадр, и они не должны пытаться работать на уровне, больше, чем частота обновления.

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

  • Разъедините свой механизм визуализации от Вашего механизма данных так, чтобы никакой механизм не препятствовал другому. Избегите доступа к сети или доступа к диску, который блокировал бы UI.

Последнее средство

Если Ваше приложение не может принять ни одно из вышеупомянутых решений, возможно отключить объединенные обновления для Вашего приложения. Для отключения объединенных обновлений для приложения установите ключ CGDisableCoalescedUpdates к значению CFBoolean истины в Вашем словаре Info.plist как показано в Перечислении 1. Этот ключ только отключит объединенные обновления для приложений, работающих на Mac OS X 10.4.4 или позже.

Перечисление 1  Используя CGDisableCoalescedUpdates, в приложения Info.plist, для отключения объединенных обновлений на 10.4.4 и позже.

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple Computer//DTD PLIST 1.0//EN" 
       "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
    <key>CFBundleExecutable</key>
    <string>GraphicsApp</string>
    <key>CFBundleName</key>
    <string>GraphicsApp</string>
         ...
         <key>CGDisableCoalescedUpdates</key>
         <true/>
         ...
    <key>CFBundlePackageType</key>
    <string>APPL</string>
    <key>CFBundleSignature</key>
    <string>grap</string>
    <key>CFBundleVersion</key>
    <string>1.0</string>
</dict>
</plist>


История версии документа


ДатаПримечания
31.08.2010

Передовая статья. Грамматика и написание фиксируют.

20.01.2006

Измененный значение ключа CGDisableCoalescedUpdates в Info.plist, перечисляющем к истине CFBoolean.

12.01.2006

Новый документ, описывающий, как достигнуть максимальной частоты кадров в Вашем приложении Mac OS X