Apple Developer Connection
高度な検索
Member Login ログイン | ご入会 ADC連絡先

Technical Q&A QA1236
Debugging Graphics with QuartzDebug

Q:QuartzDebugを使用してグラフィックスの問題をデバッグするにはどうすればよいのでしょうか?

A:QuartzDebugは、グラフィックスの表示やパフォーマンスに関する各種の問題を突きとめるのに役立つ、いくつかの強力なツールを備えた、Quatrzグラフィックスシステム用のデバッグインターフェイスです。

Quartz Debugアプリケーションは、/Developer/Applications/Performance Tools/にあります。

Quartz Debugのオプションウインドウ

図1:Quartz Debugのメインウインドウ

図1 Quartz Debugのメインウインドウ

QuartzDebugを起動すると、オプションウインドウ(図1)が表示されます。ウインドウにはデバッグに関する4つのチェックボックスがあります(最初はすべて選択解除されています)。

  • 「Autoflush drawing」チェックボックスは、CGContextFlush()を待たずに、1回の描画操作ごとに、CoreGraphicsグラフィックスコンテキストの内容を掃き出します。これは、すべての描画操作を1つ残らず調べるときに役立ちます。

  • 「Flash screen updates」が選択されていると、これから更新されるスクリーンの領域が黄色で描画され、一時停止した後、実際にスクリーンが更新されます。これにより、スクリーンの更新が行われる様子を見ることができます。一時停止することで、黄色の領域を確認できるようになっています。一時停止しなければ、スクリーンは即座に、おそらく認識できない速さで更新されます。一時停止をオフにするには、「No delay after flash」オプションを選択します。

  • 「Flash identical updates」が選択されていると、これから更新されるけれども、ウインドウのバッキングストアの既存の内容と同じであるスクリーンの領域が赤で描画されます。その後、一時停止した後、実際にスクリーンが更新されます。これにより、内容がすでにウインドウのバッキングストアにある場合に、ウインドウのどの領域が重複して描画されているのかを見ることができます。一時停止をオフにするには、「No delay after flash」オプションを選択します。

  • 「No delay after flash」オプションが選択されていると、「Flash identical updates」と「Flash screen updates」による点滅の後に一時停止しません。

先頭に戻る

「Tools」メニューのオプション

Quartz Extreme

「Disable/Enable Quartz Extreme」メニューオプションで、システムのQuartz Extremeを無効にしたり、再度有効にしたりすることができます。詳細については、Quartz Extremeのページを参照してください。グレー表示になっている場合、当該ハードウェアではQuartz Extremeをサポートしていません。緑になっている場合、Quartz Extremeは有効です。赤になっている場合、Quartz Extremeは無効です。設定は即座に反映されます。設定はリブートをまたいで維持されません。

先頭に戻る

フレームメータ

図2:フレームメータ

図2 フレームメータ

「Show/Hide Frame Meter」(図2に示します)メニューオプションは、図3に示すパフォーマンスフレームメータの表示/非表示を切り替えます。このフレームメータは、1秒当たりのスクリーン更新回数を示します。さらに、CPUの使用量を示す小さなCPUフレームメータも含まれています。このウインドウは透過ウインドウであり、ウインドウの任意の部分をクリックしてドラッグすることによって移動できます。

先頭に戻る

User Interface Resolution

「Show User Interface Resolution」で、ユーザインターフェイスのスケール因子を設定できます。アプリケーションは再起動する必要があります。設定はリブートをまたいで引き継がれます。

先頭に戻る

Beam Sync Tools

「Show Beam Sync Tools」で、ユーザは一括更新によるアプリケーションへの影響を確認することができます。

  • Disable Beam Synchronization:一括更新機能を含め、システム内のビーム同期をすべて無効にします。描画呼び出しが直前のフラッシュ完了をブロック待機しないようになるため、視覚的なちらつきやパフォーマンスの向上が見られるかもしれません。このモードは、コードのもつ全体の(表示のフラッシュを無視した場合の)スループットを確認するベンチマーク試験に使用します。現在、一括更新機能のみを無効にする方法はありません。

  • Automatic Beam Synchronization:10.4ではデフォルトの設定です。このモードでは、ウインドウのジオメトリ変更についてビーム同期が有効となり(10.3でも同様)、一括更新機能も有効になります。後者は10.4の新規機能です。複数のアプリケーションの表示更新をウインドウサーバで取りまとめ、垂直帰線消去を待って実行するディスプレイへの単独の更新にします。これはディスプレイのリフレッシュレートに対応しており、LCDモニタ(実際には60Hzで更新される)にも適用されます。結果としてシステムのパフォーマンスが向上しますが、ディスプレイのリフレッシュよりも短時間でフラッシュを行うアプリケーションに影響が出る可能性があります。10.4上でリンクされたMach-Oアプリケーションのみが、一括更新を開始します。CFMやTiger以前のアプリケーションでは一括更新は開始されません。ただし別のアプリケーションによってVBLの一括更新が開始されると、これらのアプリケーションの更新も同様に取りまとめられます。

  • Force Beam Synchronization:これは、すべてのアプリケーションの更新を強制的に取りまとめます。開発者は、Tiger上でアプリケーションへリンクする前に、これを使ってパフォーマンスに対する機能の影響を確認できます。現時点では、初めてアプリケーションがディスプレイのリフレッシュレートよりも速くフラッシュしようとしたり、結果的に半分以上の時間をVBLの待機に費やした場合には、/var/log/windowserver.logにメッセージがログ出力されます。メッセージは次のような形式です。「"Application "SuchAndSuch" is being throttled by update coalescing."(“これこれ”のアプリケーションは、一括更新によって抑えられています。)」このメッセージは、アプリケーションごとに1回出力されます。開発者はこのログを監視し、アプリケーションが一括更新の影響を受けていないか確認する必要があります。

先頭に戻る

Window List

ウインドウリストを確認することで、バッファされたウインドウがアプリケーションのメモリ領域に与える影響を把握できます。「Tools」>「Show Window List」を選ぶと、(図3に示すような)リストを含むシステムのすべてのウインドウが表示されます。リストはそれぞれのウインドウの所有者とウインドウが占めるメモリを示します。リストは、ウインドウの追加や削除にともなって自動的に更新されます。表1に、ウインドウリストの各カラムのデータの説明を示します。緑のウインドウは、Quartz 2D Extremeを使用したハードウェアアクセラレーションが適用されているウインドウです。グレーのウインドウは、非アクティブのため圧縮されています。リストは毎秒更新されます。これは「Preferences」で変更することができます。

「Refresh Windows List Now」で、オプションウインドウから利用可能なウインドウリストをリフレッシュします。

図3:システムのすべてのウインドウのリスト

図3 システムのすべてのウインドウのリスト

表1 Window Listのカラムの説明

QuartzDebugウインドウリストのカラムカラムの説明
CIDウインドウの接続ID。ウインドウサーバで内部的に使用されます。通常、特定のプロセスが所有するすべてのウインドウでは接続IDが同じです。
Applicationウインドウを所有するアプリケーションの名前。
WIDウインドウ自身のID。ウインドウサーバで内部的に使用されます。
kBytesウインドウバッファとその他のデータ構造体に占有されるメモリの量。キロバイト単位で表されます。バッファが無効な場合(更新する必要がある場合)、サイズに“I”の文字が追加されます。ウインドウが自動的にウインドウサーバによって圧縮されている場合、“C”の文字が追加されます。
Originスクリーンに対するウインドウの原点(ピクセル単位)。
Sizeウインドウサイズ(ピクセル単位)。
Typeバッファ対象ウインドウは共有メモリにバッファされます。すべてのグラフィックス処理がバッキングバッファに記録され、ウインドウサーバによって必要に応じてスクリーンに描画されます。保持対象ウインドウでの全体のうち、ほかのウインドウに隠されて見えない部分だけがバッファに保存されます。結果的にいくらかのメモリ節約になりますが、透過性は無効になります。保持対象外のウインドウのグラフィックス処理はまったく保存されません。
Encodingウインドウバッファの深さ(1ピクセル当たりビット数)。ウインドウバッファがアルファチャネルを持っている場合、“-A”の文字列が追加されます。ウインドウバッファにはウインドウのタイトルバーとフレーム(Carbonでいえば“ストラクチャリージョン”です)が含まれます。
On Screenウインドウが表示されていてスクリーン上にあるか、オフスクリーンで表示されていないか。
Shared共有ウインドウかそうでないか。共有ウインドウは複数のアプリケーションから操作できます。非共有ウインドウは「Application」カラムに示されているアプリケーションからのみ変更できます。
Fadeウインドウの不透明度。不透明度はウインドウのアルファチャネルとは別です。0%から100%の範囲で、0%は完全に透明なウインドウを示し、100%は完全に不透明なウインドウを示します。
Levelウインドウレベル。高レベルのウインドウは、低レベルのウインドウの裏に置かれることはありません。サポートされている値は“LONG_MIN + 1”から“LONG_MAX - 16”です。

先頭に戻る

ドキュメント改訂履歴

日付メモ
2006-01-1210.4用に更新
2003-02-25新規ドキュメント

掲載日: 2006-01-12




Did this document help you?
Yes: Tell us what works for you.

It’s good, but: Report typos, inaccuracies, and so forth.

It wasn’t helpful: Tell us what would have helped.