有没有关于adb命令"dumpsys“输出的文档?
特别是,我想了解一下HWC和GLES层类型之间的区别,以及numHwLayers是什么意思?
下面是我正在讨论的dumpsys部分:
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发布于 2014-02-09 03:26:53
好的,我已经想出了足够的答案来回答我自己的问题,但是如果有人有任何额外的意见,请在评论中留言。还有一些额外的东西,我将在下面注意到,这些东西仍然不清楚。
首先,下面的链接帮助解释了一些关于图像渲染和合成是如何通过SurfaceFlinger实现的:http://source.android.com/devices/graphics.html
如果您在链接中注意到,有两种方式将图像发送到显示器。一种是在将图像发送到显示器之前用GPU对其进行处理,另一种是使用显示器的硬件覆盖来绕过GPU直接将图像发送到显示器。后一种方法的性能更好,但您仅限于一定数量的层/覆盖(通常为4个)。如果你有更多的层,就必须由GPU来处理。
在我的问题的中心,dumpsys的一部分显示了调用dumpsys时有多少层,以及这些层是由硬件编写器(HWC)还是GPU (GLES)处理的。
此外,还有“源裁剪”和“框架”坐标。源裁剪是将显示的图像的一部分。例如,如果它是跨越多个显示屏的墙纸(想想当你在屏幕上滑动时在主屏幕上看到的东西),那么在给定的时刻,你只需要显示较大的墙纸图像的一部分。这意味着源裁剪只是告诉你当前使用的是整个图像的哪个部分。它框架部分是源图像的部分将实际显示在屏幕上的位置。
它在一个名为"HWComposer::dump“的函数中
在上面提到的代码中,我看到了一个“背景”和一个"FB目标“复合类型。当你在adb中输入"dumpsys“时,FB目标似乎总是存在。我认为FB Target仅仅是完整图像将被写入的帧缓冲区(请确认一下)。
谢谢!
发布于 2016-05-18 14:57:52
我可以在上面的评论中添加一些东西。在dumpsys输出中,我们可以看到类型是GLES for imagewallpaper,luncher,status bar,导航栏,这意味着这些图层缓冲区由表面flinger和复合处理,并渲染到FB目标中。
谢谢!
https://stackoverflow.com/questions/21642734
复制相似问题