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

最佳答案

好的,我已经想出了足够的答案来回答我自己的问题,但是如果有人有其他意见,请在评论中保留。还有一些其他的东西,我将在下面指出,但仍然不清楚。

首先,下面的链接有助于说明有关如何通过SurfaceFlinger进行图像渲染和合成的一些信息:
http://source.android.com/devices/graphics.html

如果您在链接中注意到,则有两种方法将图像发送到显示器。一种是在将图像发送到显示器之前使用GPU处理图像,另一种是使用显示器的硬件覆盖来绕过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。我不明白的是,什么是背景类型?我什至无法猜到那个。如果您知道这是什么,请发表评论。

谢谢!

08-04 07:57