当前位置: 首页 > news >正文

aosp15实现SurfaceFlinger的dump输出带上Layer详细信息踩坑笔记

背景:

针对上一篇文章
aosp15上SurfaceFlinger的dump部分新特性-无Layer信息输出如何解决?
给大家布置了一个小作业,那就是需要实现dumpsys SurfaceFlinger相关输出中可以携带上所有的Layer的详细信息需求,今天来带大家详细实现一下这个需求。

实战踩坑过程

本来想参考以前版本方式,直接使用mDrawingState.traverse的相关方法来进行遍历每一个Layer然后输出相关的信息。

std::string compositionLayers;mDrawingState.traverseInReverseZOrder([&](Layer* layer) {//输出相关的layer信息auto* compositionState = layer->getCompositionState();android::base::StringAppendF(&compositionLayers, "* Layer %p (%s)\n", layer,layer->getDebugName() ? layer->getDebugName(): "<unknown>");compositionState->dump(compositionLayers);});

但是明显发现这个mDrawingState.traverse方法压根就不会进入对应的循环,一行代码都不会执行,所以自然没有任何输出。

其实从SurfaceFlinger.cpp的相关代码也可以看出相关的痕迹,要调用 mDrawingState.traverse相关方法一般都会有一个判断值mLayerLifecycleManagerEnabled:

if (!mLayerLifecycleManagerEnabled) {StringAppendF(&result, "Composition layers\n");mDrawingState.traverseInZOrder([&](Layer* layer) {auto* compositionState = layer->getCompositionState();if (!compositionState || !compositionState->isVisible) return;android::base::StringAppendF(&result, "* Layer %p (%s)\n", layer,layer->getDebugName() ? layer->getDebugName(): "<unknown>");compositionState->dump(result);});StringAppendF(&result, "Offscreen Layers\n");for (Layer* offscreenLayer : mOffscreenLayers) {offscreenLayer->traverse(LayerVector::StateSet::Drawing,[&](Layer* layer) { layer->dumpOffscreenDebugInfo(result); });}}

但是在aosp15版本上这个mLayerLifecycleManagerEnabled值一直都是true,所以根本不会进入执行这块的mDrawingState.traverse,也就是说在aosp15版本的SurfaceFlinger已经弃用了这个mDrawingState.traverse。

正确实战实现

代码实现:
实现要采用2种方式
方式1–采用dumpsys SurfaceFlinger --带上参数,主要是可以单独dump layer数据
代码实现如下:
在这里插入图片描述这个dumpsysAllLayer的实现代码如下:
在这里插入图片描述

方式2采用setprop方式然后控制prop可以整体进行dump
在总的dump方法最后,加入如下代码
在这里插入图片描述这样就可以实现通过prop值控制是否在正常dumpsys SurfaceFlinger输出中带上所有Layer的信息。

使用方式:
方式1

adb shell dumpsys SurfaceFlinger --all-layer

adb shell dumpsys SurfaceFlinger  --all-layer
+ Layer (Display 0 name="Built-in Screen"#43) uid=1000Region TransparentRegion (this=0 count=0)Region VisibleRegion (this=0 count=0)Region SurfaceDamageRegion (this=0 count=0)layerStack=   0, z=        0, pos=(0,0), size=(   0,   0), crop=[  0,   0,  -1,  -1], cornerRadius=0.000000, isProtected=0, isTrustedOverlay=0, isOpaque=0, invalidate=0, dataspace=BT709 sRGB Full range, defaultPixelFormat=, backgroundBlurRadius=0, color=(-1.000,-1.000,-1.000,1.000), flags=0x00000002, tr=[0.00, 0.00][0.00, 0.00]parent=nonezOrderRelativeOf=noneactiveBuffer=[   0x   0:   0,Unknown/None], tr=[0.00, 0.00][0.00, 0.00] queued-frames=0 metadata={9:4bytes}, cornerRadiusCrop=[0.00, 0.00, 0.00, 0.00],  shadowRadius=0.000, 
+ Layer (WindowedMagnification:0:31#3) uid=1000Region TransparentRegion (this=0 count=0)Region VisibleRegion (this=0 count=0)Region SurfaceDamageRegion (this=0 count=0)layerStack=   0, z=        0, pos=(0,0), size=(   0,   0), crop=[  0,   0,   0,   0], cornerRadius=0.000000, isProtected=0, isTrustedOverlay=0, isOpaque=0, invalidate=0, dataspace=BT709 sRGB Full range, defaultPixelFormat=, backgroundBlurRadius=0, color=(-1.000,-1.000,-1.000,1.000), flags=0x00000000, tr=[0.00, 0.00][0.00, 0.00]parent=Display 0 name="Built-in Screen"#43zOrderRelativeOf=noneactiveBuffer=[   0x   0:   0,Unknown/None], tr=[0.00, 0.00][0.00, 0.00] queued-frames=0 metadata={9:4bytes}, cornerRadiusCrop=[0.00, 0.00, 0.00, 0.00],  shadowRadius=0.000, 
+ Layer (HideDisplayCutout:0:14#4) uid=1000Region TransparentRegion (this=0 count=0)Region VisibleRegion (this=0 count=0)Region SurfaceDamageRegion (this=0 count=0)layerStack=   0, z=        0, pos=(0,0), size=(   0,   0), crop=[  0,   0,  -1,  -1], cornerRadius=0.000000, isProtected=0, isTrustedOverlay=0, isOpaque=0, invalidate=0, dataspace=BT709 sRGB Full range, defaultPixelFormat=, backgroundBlurRadius=0, color=(-1.000,-1.000,-1.000,1.000), flags=0x00000000, tr=[0.00, 0.00][0.00, 0.00]parent=WindowedMagnification:0:31#3zOrderRelativeOf=noneactiveBuffer=[   0x   0:   0,Unknown/None], tr=[0.00, 0.00][0.00, 0.00] queued-frames=0 metadata={9:4bytes}, cornerRadiusCrop=[0.00, 0.00, 0.00, 0.00],  shadowRadius=0.000, 
+ Layer (OneHanded:0:14#5) uid=1000Region TransparentRegion (this=0 count=0)Region VisibleRegion (this=0 count=0)Region SurfaceDamageRegion (this=0 count=0)layerStack=   0, z=        0, pos=(0,0), size=(   0,   0), crop=[  0,   0,  -1,  -1], cornerRadius=0.000000, isProtected=0, isTrustedOverlay=0, isOpaque=0, invalidate=0, dataspace=BT709 sRGB Full range, defaultPixelFormat=, backgroundBlurRadius=0, color=(-1.000,-1.000,-1.000,1.000), flags=0x00000000, tr=[0.00, 0.00][0.00, 0.00]parent=HideDisplayCutout:0:14#4zOrderRelativeOf=noneactiveBuffer=[   0x   0:   0,Unknown/None], tr=[0.00, 0.00][0.00, 0.00] queued-frames=0 metadata={9:4bytes}, cornerRadiusCrop=[0.00, 0.00, 0.00, 0.00],  shadowRadius=0.000, 
+ Layer (FullscreenMagnification:0:12#6) uid=1000Region TransparentRegion (this=0 count=0)Region VisibleRegion (this=0 count=0)Region SurfaceDamageRegion (this=0 count=0)layerStack=   0, z=        0, pos=(0,0), size=(   0,   0), crop=[  0,   0,  -1,  -1], cornerRadius=0.000000, isProtected=0, isTrustedOverlay=0, isOpaque=0, invalidate=0, dataspace=BT709 sRGB Full range, defaultPixelFormat=, backgroundBlurRadius=0, color=(-1.000,-1.000,-1.000,1.000), flags=0x00000000, tr=[0.00, 0.00][0.00, 0.00]parent=OneHanded:0:14#5zOrderRelativeOf=noneactiveBuffer=[   0x   0:   0,Unknown/None], tr=[0.00, 0.00][0.00, 0.00] queued-frames=0 metadata={9:4bytes}, cornerRadiusCrop=[0.00, 0.00, 0.00, 0.00],  shadowRadius=0.000, 
+ Layer (Leaf:0:1#7) uid=1000Region TransparentRegion (this=0 count=0)Region VisibleRegion (this=0 count=0)Region SurfaceDamageRegion (this=0 count=0)layerStack=   0, z=        0, pos=(0,0), size=(   0,   0), crop=[  0,   0,  -1,  -1], cornerRadius=0.000000, isProtected=0, isTrustedOverlay=0, isOpaque=0, invalidate=0, dataspace=BT709 sRGB Full range, defaultPixelFormat=, backgroundBlurRadius=0, color=(-1.000,-1.000,-1.000,1.000), flags=0x00000000, tr=[0.00, 0.00][0.00, 0.00]parent=FullscreenMagnification:0:12#6zOrderRelativeOf=noneactiveBuffer=[   0x   0:   0,Unknown/None], tr=[0.00, 0.00][0.00, 0.00] queued-frames=0 metadata={9:4bytes}, cornerRadiusCrop=[0.00, 0.00, 0.00, 0.00],  shadowRadius=0.000, 
+ Layer (WallpaperWindowToken{970337b token=android.os.Binder@2e0df0a}#62) uid=1000Region TransparentRegion (this=0 count=0)Region VisibleRegion (this=0 count=0)Region SurfaceDamageRegion (this=0 count=0)layerStack=   0, z=        0, pos=(0,0), size=(   0,   0), crop=[  0,   0,  -1,  -1], cornerRadius=0.000000, isProtected=0, isTrustedOverlay=0, isOpaque=0, invalidate=0, dataspace=BT709 sRGB Full range, defaultPixelFormat=, backgroundBlurRadius=0, color=(-1.000,-1.000,-1.000,1.000), flags=0x00000000, tr=[0.00, 0.00][0.00, 0.00]parent=Leaf:0:1#7zOrderRelativeOf=noneactiveBuffer=[   0x   0:   0,Unknown/None], tr=[0.00, 0.00][0.00, 0.00] queued-frames=0 metadata={9:4bytes}, cornerRadiusCrop=[0.00, 0.00, 0.00, 0.00],  shadowRadius=0.000, 

方式2
先进行prop的设置,开启dump所有的layers

adb shell setprop debug.sf.dump_all_layers true

然后再执行dumpsys SurfaceFlinger

Window Infos:max send vsync id: -1max send delay (ns): 0 nsunsent messages: 0  #正常情况下的结束地方+ Layer (Display 0 name="Built-in Screen"#43) uid=1000Region TransparentRegion (this=0 count=0)Region VisibleRegion (this=0 count=0)Region SurfaceDamageRegion (this=0 count=0)layerStack=   0, z=        0, pos=(0,0), size=(   0,   0), crop=[  0,   0,  -1,  -1], cornerRadius=0.000000, isProtected=0, isTrustedOverlay=0, isOpaque=0, invalidate=0, dataspace=BT709 sRGB Full range, defaultPixelFormat=, backgroundBlurRadius=0, color=(-1.000,-1.000,-1.000,1.000), flags=0x00000002, tr=[0.00, 0.00][0.00, 0.00]parent=nonezOrderRelativeOf=noneactiveBuffer=[   0x   0:   0,Unknown/None], tr=[0.00, 0.00][0.00, 0.00] queued-frames=0 metadata={9:4bytes}, cornerRadiusCrop=[0.00, 0.00, 0.00, 0.00],  shadowRadius=0.000, 
+ Layer (WindowedMagnification:0:31#3) uid=1000Region TransparentRegion (this=0 count=0)Region VisibleRegion (this=0 count=0)Region SurfaceDamageRegion (this=0 count=0)layerStack=   0, z=        0, pos=(0,0), size=(   0,   0), crop=[  0,   0,   0,   0], cornerRadius=0.000000, isProtected=0, isTrustedOverlay=0, isOpaque=0, invalidate=0, dataspace=BT709 sRGB Full range, defaultPixelFormat=, backgroundBlurRadius=0, color=(-1.000,-1.000,-1.000,1.000), flags=0x00000000, tr=[0.00, 0.00][0.00, 0.00]parent=Display 0 name="Built-in Screen"#43zOrderRelativeOf=noneactiveBuffer=[   0x   0:   0,Unknown/None], tr=[0.00, 0.00][0.00, 0.00] queued-frames=0 metadata={9:4bytes}, cornerRadiusCrop=[0.00, 0.00, 0.00, 0.00],  shadowRadius=0.000, 
+ Layer (HideDisplayCutout:0:14#4) uid=1000Region TransparentRegion (this=0 count=0)Region VisibleRegion (this=0 count=0)Region SurfaceDamageRegion (this=0 count=0)layerStack=   0, z=        0, pos=(0,0), size=(   0,   0), crop=[  0,   0,  -1,  -1], cornerRadius=0.000000, isProtected=0, isTrustedOverlay=0, isOpaque=0, invalidate=0, dataspace=BT709 sRGB Full range, defaultPixelFormat=, backgroundBlurRadius=0, color=(-1.000,-1.000,-1.000,1.000), flags=0x00000000, tr=[0.00, 0.00][0.00, 0.00]parent=WindowedMagnification:0:31#3zOrderRelativeOf=noneactiveBuffer=[   0x   0:   0,Unknown/None], tr=[0.00, 0.00][0.00, 0.00] queued-frames=0 metadata={9:4bytes}, cornerRadiusCrop=[0.00, 0.00, 0.00, 0.00],  shadowRadius=0.000, 
+ Layer (OneHanded:0:14#5) uid=1000Region TransparentRegion (this=0 count=0)Region VisibleRegion (this=0 count=0)Region SurfaceDamageRegion (this=0 count=0)layerStack=   0, z=        0, pos=(0,0), size=(   0,   0), crop=[  0,   0,  -1,  -1], cornerRadius=0.000000, isProtected=0, isTrustedOverlay=0, isOpaque=0, invalidate=0, dataspace=BT709 sRGB Full range, defaultPixelFormat=, backgroundBlurRadius=0, color=(-1.000,-1.000,-1.000,1.000), flags=0x00000000, tr=[0.00, 0.00][0.00, 0.00]parent=HideDisplayCutout:0:14#4zOrderRelativeOf=noneactiveBuffer=[   0x   0:   0,Unknown/None], tr=[0.00, 0.00][0.00, 0.00] queued-frames=0 metadata={9:4bytes}, cornerRadiusCrop=[0.00, 0.00, 0.00, 0.00],  shadowRadius=0.000, 
+ Layer (FullscreenMagnification:0:12#6) uid=1000Region TransparentRegion (this=0 count=0)Region VisibleRegion (this=0 count=0)Region SurfaceDamageRegion (this=0 count=0)layerStack=   0, z=        0, pos=(0,0), size=(   0,   0), crop=[  0,   0,  -1,  -1], cornerRadius=0.000000, isProtected=0, isTrustedOverlay=0, isOpaque=0, invalidate=0, dataspace=BT709 sRGB Full range, defaultPixelFormat=, backgroundBlurRadius=0, color=(-1.000,-1.000,-1.000,1.000), flags=0x00000000, tr=[0.00, 0.00][0.00, 0.00]parent=OneHanded:0:14#5zOrderRelativeOf=noneactiveBuffer=[   0x   0:   0,Unknown/None], tr=[0.00, 0.00][0.00, 0.00] queued-frames=0 metadata={9:4bytes}, cornerRadiusCrop=[0.00, 0.00, 0.00, 0.00],  shadowRadius=0.000, 
+ Layer (Leaf:0:1#7) uid=1000Region TransparentRegion (this=0 count=0)Region VisibleRegion (this=0 count=0)Region SurfaceDamageRegion (this=0 count=0)layerStack=   0, z=        0, pos=(0,0), size=(   0,   0), crop=[  0,   0,  -1,  -1], cornerRadius=0.000000, isProtected=0, isTrustedOverlay=0, isOpaque=0, invalidate=0, dataspace=BT709 sRGB Full range, defaultPixelFormat=, backgroundBlurRadius=0, color=(-1.000,-1.000,-1.000,1.000), flags=0x00000000, tr=[0.00, 0.00][0.00, 0.00]parent=FullscreenMagnification:0:12#6zOrderRelativeOf=noneactiveBuffer=[   0x   0:   0,Unknown/None], tr=[0.00, 0.00][0.00, 0.00] queued-frames=0 metadata={9:4bytes}, cornerRadiusCrop=[0.00, 0.00, 0.00, 0.00],  shadowRadius=0.000, 
+ Layer (WallpaperWindowToken{970337b token=android.os.Binder@2e0df0a}#62) uid=1000Region TransparentRegion (this=0 count=0)Region VisibleRegion (this=0 count=0)Region SurfaceDamageRegion (this=0 count=0)layerStack=   0, z=        0, pos=(0,0), size=(   0,   0), crop=[  0,   0,  -1,  -1], cornerRadius=0.000000, isProtected=0, isTrustedOverlay=0, isOpaque=0, invalidate=0, dataspace=BT709 sRGB Full range, defaultPixelFormat=, backgroundBlurRadius=0, color=(-1.000,-1.000,-1.000,1.000), flags=0x00000000, tr=[0.00, 0.00][0.00, 0.00]parent=Leaf:0:1#7zOrderRelativeOf=noneactiveBuffer=[   0x   0:   0,Unknown/None], tr=[0.00, 0.00][0.00, 0.00] queued-frames=0 metadata={9:4bytes}, cornerRadiusCrop=[0.00, 0.00, 0.00, 0.00],  shadowRadius=0.000, 

默认情况下debug.sf.dump_all_layers是false,所以不会dump
在这里插入图片描述
更多framework实战干货,请关注下面“千里马学框架”

http://www.dtcms.com/a/287135.html

相关文章:

  • 基于深度学习的图像超分辨率:从低分辨率到高分辨率的图像重建
  • PHP MySQL 读取数据
  • 代码随想录算法训练营第二十五天
  • 【Android】ListView与RecyclerView的基础使用
  • 【RK3576】【Android14】Android平台构建
  • MTF算法V1.0
  • Android无需授权直接访问Android/data目录漏洞
  • 【Linux】基本指令
  • 零基础学习性能测试-linux服务器监控:网络iftop
  • 【2025/07/19】GitHub 今日热门项目
  • Libevent(3)之使用教程(2)创建事件
  • Yakit与vps(vps为Linux使用教程)
  • 辛普森悖论
  • SLAM中的非线性优化-2D图优化之激光SLAM基于优化的前端匹配(十八)
  • 2023年CSP入门级第二轮第四题——旅游巴士
  • windows wsl2-06-docker hello world
  • 网络原理——TCP
  • 【学习记录】智能客服小桃(进度更新ing)
  • 张 关于大语言模型(LLM)置信度研究的经典与前沿论文 :温度缩放;语义熵;自一致性;事实与反思;检索增强;黑盒引导;
  • 软考 系统架构设计师系列知识点之杂项集萃(113)
  • LangGraph教程10:LangGraph ReAct应用
  • 基于Electron打包jar成Windows应用程序
  • 技术演进中的开发沉思-39 MFC系列:多重文件和多重视图
  • 安全事件响应分析--基础命令
  • 【52】MFC入门到精通——(CComboBox)下拉框选项顺序与初始化不一致,默认显示项也不一致
  • pytorch:tensorboard和transforms学习
  • HTML5中的自定义属性
  • Jenkins自动化部署.NET应用实战:Docker+私有仓库+SSH远程发布
  • mysql常用总结
  • EMC杂谈-001-基础知识