在 Android 上,dump layer 是一种调试工具,用来获取 SurfaceFlinger 的图形层数据(Layer)以排查显示问题。以下是常用的 dump Layer 方法:
1. 使用 dumpsys SurfaceFlinger
dumpsys 是 Android 提供的强大的体系调试工具,通过它可以查询 SurfaceFlinger 信息以及图形体系状态。
步骤:
- 使用 ADB 连接到设备:
- [/code] bash
- Copy code
- adb shell
- [*]运行 SurfaceFlinger 的 dumpsys 下令: [code]
复制代码 bash
Copy code
dumpsys SurfaceFlinger
- 查看输出内容,查找与 Layer 相干的信息。比方:
- 活跃 Layer 列表。
- 每个 Layer 的分辨率、状态等信息。
- 合成器的工作细节,包罗 HWC 合成和 GLES 合成。
过滤特定 Layer 信息
你可以直接筛选与 Layer 相干的部门:
- [/code] bash
- Copy code
- adb shell dumpsys SurfaceFlinger | grep -A 10 Layer
- 上面的下令会显示包罗 “Layer” 的日志,而且扩展输出上下文。
- [hr] [size=3][b]2. 使用 dumpsys gfxinfo[/b][/size]
- dumpsys gfxinfo 是 Android 提供的另一个图形相干工具,可以获取显示体系的帧率、图形性能和部门 Layer 信息。
- [size=2][b]步骤:[/b][/size]
- [list=1]
- [*]获取目的应用包名(如 com.example.myapp)。
- [*]运行以下下令: [code]
复制代码 bash
Copy code
adb shell dumpsys gfxinfo com.example.myapp
输出内容包罗:
- Layer 的缓存信息。
- 应用的渲染性能(如绘制时间和掉帧情况)。
3. 使用开辟者模式的“Profile GPU Rendering”工具
Android 的开辟者选项提供可视化的工具,用于直观分析 Layer 和图形性能。
步骤:
- 启用 开辟者选项:
- 进入 开辟者选项。
- 找到并启用 Profile GPU Rendering(GPU 渲染分析):
- 设置为 "On screen as bars" 模式。
- 运行目的应用,体系会在屏幕顶部显示每一帧的绘制信息。
4. 使用 SurfaceFlinger 的 dumpsys layers
Android 的 SurfaceFlinger 支持直接导出每个图形 Layer 的截图或详细信息,方法如下:
步骤:
- 实行以下下令查看 Layer 列表:
- [/code] bash
- Copy code
- adb shell dumpsys SurfaceFlinger --list
- 该下令将显示全部活动 Layer 的名称。
- [*] 抓取特定 Layer 的截图:
- [code]
复制代码 bash
Copy code
adb shell screencap -p /data/local/tmp/screenshot.png adb pull /data/local/tmp/screenshot.png .
也可以直接抓取特定层内容后再分析详细显示区域。
5. SurfaceFlinger 的指令工具 (service call SurfaceFlinger)
直接调用 SurfaceFlinger 服务的方法,可用于更底层的图形调试。
方法:
- 使用 service call SurfaceFlinger 下令交互。
- 示例:
- [/code] bash
- Copy code
- adb shell service call SurfaceFlinger 1013
- (服务 ID 和下令参数依设备而异)
- [/list] 此方法对较新的 Android 版本或定制体系更复杂,详细参数需要参考详细 HAL 实现。
- [hr] [size=3][b]6. 使用第三方工具 (SysTrace 和 Perfetto)[/b][/size]
- Google 提供了一些强大的开辟工具,如:
- [list=1]
- [*][b]Systrace[/b]:
- [list]
- [*]用来分析帧渲染的性能。
- [*]输出详细时间线,包罗层合成变乱和每帧的绘制消耗。
- [/list]
- [*][b]Perfetto[/b]:
- [list]
- [*]代替旧版 Systrace 的跟踪工具,具有更强大的调试功能。
- [*]获取 SurfaceFlinger 和相干的帧数性能问题。
- [/list]
- [/list] [hr] [size=3][b]7. 示例:分析特定图形层信息[/b][/size]
- [size=2]Step 1: 获取活动 Layer 列表[/size]
- [code]
复制代码 bash
Copy code
adb shell dumpsys SurfaceFlinger --list
Step 2: 抓取关键日志信息
- [/code] bash
- Copy code
- adb shell dumpsys SurfaceFlinger --display adb shell dumpsys SurfaceFlinger --layers | grep "LayerName"
- [size=2]Step 3: 保存显示帧到当地[/size]
- [code]
复制代码 bash
Copy code
adb shell screencap -p /data/local/tmp/screen_layer.png adb pull /data/local/tmp/screen_layer.png .
常见问题排查
- 看不到日志:检查是否具有 Root 权限,由于某些设备限制调试。
- 屏幕抖动或卡顿:通过抓取特定帧的日志来查找掉帧根因。
- 无法辨认某些 Layer:需要结合实际 App 和 SurfaceFlinger 的调试输出手动关联。
通过这些方法,你可以有用地调试和分析 Android 体系中图形层的相干问题。
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
|