SurfaceFlinger ダンプは、特定の時点の SurfaceFlinger のスナップショットを提供します。SurfaceFlinger トレースには、状態の時系列シーケンスが含まれています。これにより、ウィンドウが画面にどのように表示されるかについて貴重な分析情報を得ることができ、特定の場所のタップ レスポンスを受信するウィンドウを特定できます。この情報は、アプリがタップ操作に反応しない、動画の視聴中にちらつくなどの問題のトラブルシューティングに不可欠です。
Winscope の SurfaceFlinger ビューアには、アクティブ モードを使用して収集されたトレース、バグレポートの取得時にトランザクション トレースから生成されたトレース(デフォルトでは Droidfood 構成)、ダンプに関するこの情報が表示されます。
トレース収集の詳細については、SurfaceFlinger(レイヤ)をご覧ください。
図 1. SurfaceFlinger トレース分析。
画面の左側には、レイヤの 3D ビューが表示されます。rects ビューは、レイヤの境界、Z オーダー、不透明度、相対 Z、角の丸みを考慮します。
階層チップ
タブの中央セグメントには、次のように、レイヤ間の親子関係などの詳細情報を示すチップ付きのレイヤ階層が表示されます。
- V: 表示されているレイヤを識別します。
- RelZParent: RelZ の子を持つレイヤを識別します。
- RelZ: RelZParent を持つレイヤを識別し、階層として z 順序で描画します。
- HWC: Hardware Composer によって合成されたレイヤを識別します。
- GPU: GPU によってコンポーズされたレイヤを識別します。
画面の右側には、キュレートされたプロパティのリストと、使用可能なすべてのレイヤ プロパティのプロト ダンプが表示されます。proto ダンプ セクションの機能の詳細については、プロパティをご覧ください。
厳選された宿泊施設
デバッグを容易にするため、SurfaceFlinger ビューアには、最もよく使用される情報をより整理された形式で表示する、プロパティのキュレートされたリストが用意されています。
図 2. SurfaceFlinger のプロパティ。
このリストには、次のカテゴリが含まれます。
公開設定
このブロックには、レイヤの可視性に関する情報と、レイヤが非表示である理由の説明が含まれます。次の内容が含まれます。
フラグ: 可視性を制御します(HIDDEN
、OPAQUE
など)。
非表示の理由: レイヤまたはサーフェスが画面に表示されない理由(該当する場合)。たとえば、レイヤまたはサーフェスが自身または親によって非表示になっている、描画するバッファがないなどです。
[遮蔽]、[部分的に遮蔽]、[覆われている]:
- オクルージョン: 現在のレイヤは可視として計算されますが、その上に別の不透明レイヤが描画されるため、現在のレイヤは非表示になります。Occluded レイヤの上のレイヤは不透明です。つまり、
OPAQUE
フラグが設定されているか、ピクセル形式にアルファが含まれていないか、レイヤにアルファが設定されていません。 - 部分的に遮蔽されている: 現在のレイヤの上に描画された不透明なレイヤがレイヤを完全に覆っていないため、現在のレイヤは部分的に表示されます。部分的に遮蔽されているレイヤの上のレイヤが不透明である。つまり、
OPAQUE
フラグが設定されているか、ピクセル形式にアルファが含まれていないか、レイヤにアルファが設定されていない。 覆われている: 現在のレイヤは、不透明でないレイヤによって完全にまたは部分的に覆われていますが、画面に表示される場合があります。覆われているレイヤの上のレイヤが不透明ではありません。つまり、
OPAQUE
フラグが設定されていないか、ピクセル形式にアルファが含まれているか、レイヤにアルファが設定されています。ただし、SurfaceFlinger トレースでは、SurfaceFlinger の下のレイヤに対して、覆われているレイヤが可視として表示されます。図 3. SurfaceFlinger の覆われたレイヤ。
ジオメトリとエフェクト
このセクションでは、現在のレイヤに対してリクエストされ、計算されたジオメトリとエフェクトについて説明します。
[Requested] セクションには、レイヤに設定されているプロパティが表示されます。一方、[Calculated] セクションには、レイヤに適用されているプロパティが表示されます。この区別は、ジオメトリとエフェクトが階層に渡され、親要素から継承されるためです。
図 2 では、レイヤが [角の半径] を 0 px に設定するようリクエストしています。ただし、その親レイヤの 1 つで [角の半径] が 97.419 px に設定されており、これが適用される値になっています。
バッファ
次のプロパティには、レイヤにバッファがあるかどうか、そのサイズ、変換に関する情報が表示されます。
- フレーム番号: アプリの作成時に 1 から始まる増分数。
- 宛先フレーム: 宛先フレームで定義された境界にバッファをスケーリングするために使用されます。
階層
次のプロパティは、レイヤの階層を決定する方法を表します。
- Z オーダー: レイヤの階層では、Z オーダーによって、レイヤの兄弟レイヤに対する相対的な位置が決まります。z 値が 0 のレイヤは、親の上に配置されます。複数のレイヤが同じ Z 値を共有する場合、レイヤ ID が大きいレイヤが上に配置されます。
- 相対親: Z 順序内の相対親レイヤを示します。子要素は、非表示フラグを除き、相対親からプロパティを継承しません。
入力
次のプロパティには、タップ可能な領域とフォーカスに関する情報が含まれます。
- アイテムでタッチ領域を切り抜く: レイヤ境界を使用して、タップ可能な領域を切り抜きます。
- タップ領域を切り抜きに置き換える: 現在のレイヤの切り抜きをタップ可能な領域として使用します。