一括更新Mac OS X 10.4では、一括更新という新しい動作が導入されており、これによりQuartzは、毎回のディスプレイ更新時にフレームバッファをより効率的に更新できます。システム効率の向上に加え、一括更新は視覚的な一貫性を改善しスクロールやアニメーション中の「ちらつき」を無くします。一括更新を行うために、Quartzウインドウサーバは、スクリーンにフラッシュする前にすべてのウインドウバッファを単独のオフスクリーンフレームバッファに取りまとめます。アプリケーションからフラッシュ命令が出されても、次に利用可能なディスプレイのリフレッシュがあるまでシステムは実際にはそのコンテンツをフラッシュしません。これによって、複数のアプリケーションのすべての更新を一度に実行できます。ウインドウサーバの処理(ウインドウのサイズ変更や移動など)は同じ方法で処理され、システム全体の1回のスクリーン更新に取りまとめられます。 アプリケーションへどんな影響がありますか?一括更新によってアプリケーションのほとんどはメリットを得られます。とはいえ、パフォーマンスが低下する可能性のある状況がいくつかあります。パフォーマンス低下には、次のような2つのタイプがあります。
一括更新によってアプリケーションへ影響があったかどうかを知るために使用できるツールはありますか?10.4でビルドしてリンクしたアプリケーションが、以前のシステムでビルドしてリンクした同じアプリケーションよりも描画に時間がかかる場合、おそらく一括更新による影響です。アプリケーションが一括更新による影響を受けているかどうか確認するために使用できるツールが2つあります。Quartz DebugとSharkの2つです。 Quartz DebugQuartz Debugは、グラフィックスの表示やパフォーマンスに関する各種の問題を突きとめるのに役立つ、いくつかの強力な機能を備えた、Quatrzグラフィックスシステム用のデバッグツールです。Mac OS Xのデベロッパツールをインストールすると、Quartz Debugアプリケーションはシステムの次の場所に置かれます:/Developer/Applications/Performance Tools/。CFMアプリケーションや10.4以前のシステムの上でリンクしたアプリケーションを含む、アプリケーションに対する一括更新の効果の影響を確認するには、Quartz Debugの強制ビーム同期(Force Beam Synchronization)を有効にします。一括更新による影響を受けるアプリケーションは、ビーム同期が無効なときよりもビーム同期が有効なときの方がフレームレートが低くなり、CPU使用率が上昇します。Quartz Debugを使用して一括更新の影響を確認する詳細についてはQ&A 1236「Debugging Graphics with QuartzDebug」を参照してください。 SharkSharkは、Mac OS Xのデベロッパツールの配布版に含まれているプロファイリングツールです。Sharkを使用して、アプリケーションをプロファイルし、描画処理に過剰な時間がかかっていればアプリケーションが一括更新されていることを確認することができます。Mac OS Xのデベロッパツールをインストールすると、Sharkプロファイリングツールはシステムの次の場所に置かれます:/Developer/Applications/Performance Tools/。必要があれば、Quartz Debugを使用してビーム同期を強制的に行うようにした後、Sharkで“Time Profile (All Thread States)”モードでアプリケーションをサンプリングします。ビーム同期を無効にして行った場合よりも、 Sharkを使ったプロファイリングの詳細については、Apple Developer Connectionsのパフォーマンスページ(http://developer.apple.com/performance/)を参照してください。 推奨事項アプリケーションについては、実際のところ、するべきことはこれまでと変わりません。単に従来推奨されてきたことを適用するだけです。 一般的な推奨事項
ベストプラクティス
最後の手段上記のいずれの方法もアプリケーションで採用できない場合は、アプリケーションの一括更新を無効にできます。アプリケーションの一括更新を無効にするには、リスト1に示すように、Info.plistディクショナリのキー リスト1:アプリケーションのInfo.plistでCGDisableCoalescedUpdatesを使って、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>
重要:互換性を最大限に高めるために、10.4以前のシステムの上でリンクしたすべてのアプリケーション(10.4の上でリンクしているCFMアプリケーションを含む)では、フラッシュが単独で実行される場合、フラッシュ処理は一括更新サイクルに強制的に組み込まれません。ウインドウサーバを経由するすべてのアクセラレートされたサーフェスフラッシュは、一括更新サイクルを通じて実行されます。しかし、従来のアプリケーションまたはInfo.plistで一括更新を無効にしているアプリケーションによってフラッシュが実行されたときに、一括更新がすでに進行中の場合、そのフラッシュはその時点の一括更新に組み込まれます。つまり、視覚的な正確性を求める最新のアプリケーションは、フラッシュが早すぎる可能性のある従来のアプリケーションに優先するということです。 ドキュメント改訂履歴
掲載日: 2006-01-20 | ||||||||||||
|