7

adb コマンド「dumpsys SurfaceFlinger」の出力に関するドキュメントはありますか?

特に、HWC と GLES のレイヤー タイプの違いと、numHwLayers の意味を知りたいです。

これが、私が話している dumpsys SurfaceFlinger のセクションです。

  mDebugForceFakeVSync=0
  Display[0] : 768x1280, xdpi=319.790009, ydpi=318.744995, refresh=16666667
  numHwLayers=5, flags=00000000
    type    |  handle  |   hints  |   flags  | tr | blend |  format  |       source crop         |           frame           name
------------+----------+----------+----------+----+-------+----------+---------------------------+--------------------------------
       GLES | b7e1c440 | 00000002 | 00000000 | 00 | 00100 | 00000002 | [  334,   56, 1102, 1190] | [    0,   50,  768, 1184] com.android.systemui.ImageWallpaper
       GLES | b7e1d7c8 | 00000002 | 00000000 | 00 | 00105 | 00000001 | [    0,   50,  768, 1184] | [    0,   50,  768, 1184] com.android.launcher/com.android.launcher2.Launcher
       GLES | b7e701e0 | 00000002 | 00000000 | 00 | 00105 | 00000001 | [    0,    0,  768,   50] | [    0,    0,  768,   50] StatusBar
       GLES | b7e1df68 | 00000002 | 00000000 | 00 | 00100 | 00000001 | [    0,    0,  768,   96] | [    0, 1184,  768, 1280] NavigationBar
  FB TARGET | b7dd3ab0 | 00000000 | 00000000 | 00 | 00105 | 00000001 | [    0,    0,  768, 1280] | [    0,    0,  768, 1280] HWC_FRAMEBUFFER_TARGET
4

2 に答える 2

15

わかりました、私は自分の質問に答えるのに十分なことを理解しましたが、誰かが追加の意見を持っている場合は、コメントに残してください. いくつかの追加事項が発生しましたが、これらはまだ明確ではありません。

まず、以下のリンクは、SurfaceFlinger を介して画像のレンダリングと合成がどのように行われるかについてのいくつかの説明に役立ちます: http://source.android.com/devices/graphics.html

リンクで気付いた場合は、画像がディスプレイに送信される方法が 2 つあります。1 つは画像をディスプレイに送信する前に GPU で処理する方法で、もう 1 つはディスプレイのハードウェア オーバーレイを使用して GPU をバイパスし、画像をディスプレイに直接送信する方法です。後者の方法はパフォーマンスが向上しますが、特定の数のレイヤー/オーバーレイ (通常は 4) に制限されます。より多くのレイヤーがある場合は、GPU で処理する必要があります。

私の質問の中心にあった dumpsys SurfaceFlinger の部分は、dumpsys が呼び出された時点でレイヤーがいくつあるか、およびそれらのレイヤーが Hardware Composer (HWC) または GPU (GLES) によって処理されているかどうかを示します。これは、HWC と GLES の意味を説明しています。また、numHwLayers は、ディスプレイがサポートするオーバーレイの数 (通常は 4) です。

また、「ソースクロップ」と「フレーム」座標があります。ソースクロップは、表示される画像のセクションです。たとえば、複数のディスプレイ画面にまたがる壁紙の場合 (画面をスワイプしたときにホーム画面に何が表示されるかを考えてみてください)、特定の瞬間に、その大きな壁紙画像のサブセクションのみを表示する必要があります。これは、ソースクロップが、現在使用している画像全体のセクションを示しているだけであることを意味します。そのフレーム部分は、ソース画像のそのセクションが実際に画面に表示される場所です。

dumpsys SurfaceFlinger コマンドのこのセクションのコードは、\frameworks\native\services\surfaceflinger\DisplayHardware\HWComposer.cpp にあります。

「HWComposer::dump」という関数にあります

上記は私の最初の質問への回答ですが、以下は私が気付いた追加事項です。

HWC や GLES よりも多くの合成タイプがあるようです。上記のコードでは、"BACKGROUND" と "FB TARGET" の複合型が表示されます。adb で「dumpsys SurfaceFlinger」と入力すると、FB TARGET が常に存在するようです。FB Target は単に完全な画像が書き込まれるフレーム バッファだと思います (誰かがこれを確認してください)。デバイスがスリープ状態であっても、この FB TARGET が表示されます。私が理解していないのは、この背景タイプは何ですか? 私はそれについて推測することさえできません。これが何なのかわかる方コメントお願いします。

ありがとう!

于 2014-02-08T19:26:53.440 に答える