WWDC Quick Look 💓 By SwiftGGTeam
Discover Core Image debugging techniques

Discover Core Image debugging techniques

元の動画を見る

ハイライト

Apple が提供CI_PRINT_TREE環境変数を使用すると、Core Image 開発者はレンダリングされた各グラフをテキスト、PDF、または PNG として出力し、色空間変換、中間バッファリング、ROI、時間のかかる問題、およびメモリの問題を特定できます。

主要内容

Core Image の出力は多くの場合画像のように見えますが、その内部には遅延実行レシピが含まれています。開発者はフィルターを作成し、入力を設定して、outputImage当時、多くの作品はまだ実際にはレンダリングされていませんでした。問題がカラー管理、最適化リフロー、GPU パスまたはキャッシュ ヒットにある場合、最終的な画像を見ただけでは、どのステップで結果が変化したかを判断するのは困難です。

このセッションでは、次の 1 つのツールに焦点を当てます。CI_PRINT_TREE。これは、Xcode の Core Image Quick Look で使用されるものと同じインフラストラクチャに基づいています。デバッグ中にクリックCIImage横にある目のアイコンで、この画像を生成したビジュアルレシピを確認できます。環境変数をオンにすると、レンダリングするたびに Core Image グラフが自動的に出力されます。

このグラフの価値は、隠れたパイプラインを広げることです。初期ツリーで色空間を確認し、最適化されたツリーで Core Image がどのようにノードを再配置、マージ、クリップするかを確認できます。また、GPU プログラムに接続した後に必要な中間バッファの数も確認できます。写真、ビデオ、および視覚効果アプリの場合、これは、最後のフレームを見つめて理由を推測するよりも簡単です。

詳細

1. Xcode またはターミナルで CI_PRINT_TREE を開きます (01:41)

CI_PRINT_TREEは環境変数です。セッションでは、それを開く 2 つの方法が提供されています。1 つは Xcode ターゲット スキームの [Arguments] パネルに環境変数を追加する方法、もう 1 つはターミナルで環境変数を設定してからアプリの実行可能ファイルを起動する方法です。

CI_PRINT_TREE=1 /path/to/AppExecutable

キーポイント:

  • CI_PRINT_TREEこの値は、Core Image がどのグラフを出力するかを制御します。
  • 1各イメージ レンダリングの初期状態に対応して、最初に入力と色空間を確認するのが適切です。
  • この変数はデバッグ出力にのみ影響し、Core Image のフィルター アルゴリズムは変更しません。

2. 1、2、4、7 を使用してグラフのステージを選択します (02:26)

Core Image レンダリングには 3 つの観察可能なフェーズがあります。タイプ1は初期状態、タイプです2最適化されたレンダリング、タイプ4これは、Core Image がステージを GPU プログラムに連結した結果です。セッションでは、これらの値を組み合わせることができると明示的に述べていますが、7同時に出力されます12そして4

CI_PRINT_TREE=1   # initial render tree
CI_PRINT_TREE=2   # optimized render tree
CI_PRINT_TREE=4   # concatenated GPU-program tree
CI_PRINT_TREE=7   # 1 + 2 + 4

キーポイント:

  • 1レンダリング開始時に各画像やノードの状態を確認するために使用します。
  • 2Core Image がレンダリング フェーズをどのように並べ替え、結合、プルーニングするかを観察するために使用されます。
  • 4Core Image が GPU プログラムに接続された後に必要な中間バッファーを表示するために使用されます。
  • 7複雑なレンダリングの完全なトラブルシューティングに適していますが、出力ボリュームが増加します。

3. PDF、PNG、テキスト、または oslog 出力を選択します (03:13)

出力タイプは PDF または PNG です。これらのタイプを指定すると、Core Image はレンダリングごとにグラフ ドキュメントを保存します。macOS は一時項目ディレクトリに書き込みます。 iOS は最初にDocuments ディレクトリに書き込み、失敗した場合は一時ディレクトリにフォールバックします。出力タイプが指定されていない場合、Core Image はコンパクト テキストを標準出力に出力します。

export CI_LOG_FILE="oslog"

キーポイント:

  • CI_LOG_FILE="oslog"テキスト出力は Console.app に送信されるため、iOS のデバッグに便利です。
  • ノード構造、色変換、中間結果の分析に適した PDF または PNG。
  • テキスト出力は、レンダリングが実行されているかどうか、グラフが期待どおりに生成されているかどうかをすぐに確認するのに適しています。

4. コンテキスト、フレーム、中間画像を使用して調査範囲を絞り込みます (03:52)

複雑なアプリには複数のアプリがある場合がありますCIContext、ビデオアプリも多くのフレームを連続的にレンダリングします。言及されたセッションcontext==name指定した名前のコンテキストのみを記録できます。frame-number各コンテキストの n 番目のレンダリングのみを記録できます。入力画像、中間画像、出力画像をまとめてドキュメントに書き込むオプションもあります。

context==name
frame-number
dump-intermediates

キーポイント:

  • context==name特定の名前をフィルタリングするために使用されますCIContext
  • frame-number指定されたレンダリング時間をキャプチャするために使用され、ビデオまたはリアルタイム プレビューに適しています。
  • dump-intermediatesタイプ付き4組み合わせると、出力パスを除く各パスの中間バッファを表示できます。
  • 画像を含むドキュメントは生成時間とメモリを増加させるため、セッションは明示的に注意して使用する必要があります。

5. グラフから色、ROI、キャッシュ、リソースの負荷を読み取ります (05:24)

CI_PRINT_TREE ドキュメントの読み取り方向は下入力、上出力です。緑色のノードはワープ カーネルを表し、赤色のノードはカラー カーネルを表します。最初のツリーで見つけることができますcolormatchノードを使用して、入力イメージが HLG カラースペースから Core Image リニア作業スペースに転送されるかどうかを確認します。

input images: bottom
output image: top
green nodes: warp kernels
red nodes: color kernels
ROI: region of interest

キーポイント:

  • colormatchこのノードは、HDR またはビデオの色の不一致のトラブルシューティングに適した色空間変換を公開できます。
  • 各ノードには ROI (関心領域) が表示され、このレンダリングにノードのどの領域が必要であるかを示します。
  • 中間イメージがツリーに表示されない場合、Core Image は以前のレンダリングからのキャッシュを再利用することがあります。 ・ドキュメントには各パスの実行時間、ピクセル数、ピクセルフォーマットも表示できるため、時間やメモリの消費が集中している期間を判断することができます。

重要ポイント

コアイメージのデバッグスイッチ

何をすべきか: コア イメージ グラフ エクスポート スイッチをデバッグ ビルドに追加します。

実行する価値がある理由:CI_PRINT_TREEレンダーの初期ツリー、最適化ツリー、GPU プログラム ツリーは読み取り可能なドキュメントに出力できるため、チームは最終イメージのみに基づいてエラーの原因を推測する必要がありません。

開始方法: まず Xcode スキームに追加しますCI_PRINT_TREE=1、出力パスとファイルのアクセス許可を確認し、 に切り替えます。7完全なグラフをキャプチャします。

HDR カラーパイプライン監査

対処方法: 写真またはビデオ編集アプリの色空間のトラブルシューティング プロセスを実行します。

実行する価値がある理由: セッションは合格を示していますcolormatchこのノードは、HLG から Core Image への変換をリニア作業スペースで表示し、色の問題をグラフ内で直接特定できます。

始め方:グラブタイプ1の最初のツリー、findcolormatchノードとカラースペース名、入力マテリアル、ワークスペース、および出力設定を同じデバッグ レポートに記録します。

ビデオ フレーム パフォーマンスのサンプリング

何をすべきか: フレームごとにキャプチャされたパフォーマンス サンプルをリアルタイム フィルター プレビューに追加します。

実行する価値がある理由:frame-number指定されたレンダリングのみを記録できます。ドキュメントには実行時間、ピクセル数、ピクセル形式が含まれており、最も時間のかかるパスやメモリを消費するパスを示す可能性があります。

開始方法: 最初に使用しますframe-number例外フレームを一度修正して、型を再度使用します4そしてdump-intermediates中間バッファを見て、最後に UI 操作に対して同じフレームを再現します。

iOS デバイスのオンサイト診断

やるべきこと: iOS デバッグ ビルドのコア イメージ グラフを取得するプロセスを準備します。

実行する価値がある理由: セッションの説明 iOS は、ドキュメント ディレクトリまたは一時ディレクトリにドキュメントを書き込みます。CI_LOG_FILE="oslog"テキスト ログを Console.app に送信することもできます。

開始方法: iTunes ファイル共有をオンにし、グラフ ドキュメントを Finder の [ファイル] パネルから Mac にドラッグして戻します。ログ側で Console.app を使用してプロセスごとにフィルターします。

関連セッション

コメント

GitHub Issues · utterances