盛世宏图 发表于 6 天前

Android上dump layer的方法

在 Android 上,dump layer 是一种调试工具,用来获取 SurfaceFlinger 的图形层数据(Layer)以排查显示问题。以下是常用的 dump Layer 方法:
1. 使用 dumpsys SurfaceFlinger

dumpsys 是 Android 提供的强大的体系调试工具,通过它可以查询 SurfaceFlinger 信息以及图形体系状态。
步骤:


[*]使用 ADB 连接到设备: bash
Copy code
adb shell
[*]运行 SurfaceFlinger 的 dumpsys 下令: bash
Copy code
dumpsys SurfaceFlinger
[*]查看输出内容,查找与 Layer 相干的信息。比方:

[*]活跃 Layer 列表。
[*]每个 Layer 的分辨率、状态等信息。
[*]合成器的工作细节,包罗 HWC 合成和 GLES 合成。

过滤特定 Layer 信息

你可以直接筛选与 Layer 相干的部门:
bash
Copy code
adb shell dumpsys SurfaceFlinger | grep -A 10 Layer
上面的下令会显示包罗 “Layer” 的日志,而且扩展输出上下文。
2. 使用 dumpsys gfxinfo

dumpsys gfxinfo 是 Android 提供的另一个图形相干工具,可以获取显示体系的帧率、图形性能和部门 Layer 信息。
步骤:


[*]获取目的应用包名(如 com.example.myapp)。
[*]运行以下下令: 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 列表:
bash
Copy code
adb shell dumpsys SurfaceFlinger --list
该下令将显示全部活动 Layer 的名称。
[*] 抓取特定 Layer 的截图:
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 下令交互。
[*]示例: bash
Copy code
adb shell service call SurfaceFlinger 1013
(服务 ID 和下令参数依设备而异)
此方法对较新的 Android 版本或定制体系更复杂,详细参数需要参考详细 HAL 实现。
6. 使用第三方工具 (SysTrace 和 Perfetto)

Google 提供了一些强大的开辟工具,如:

[*]Systrace:

[*]用来分析帧渲染的性能。
[*]输出详细时间线,包罗层合成变乱和每帧的绘制消耗。

[*]Perfetto:

[*]代替旧版 Systrace 的跟踪工具,具有更强大的调试功能。
[*]获取 SurfaceFlinger 和相干的帧数性能问题。

7. 示例:分析特定图形层信息

Step 1: 获取活动 Layer 列表

bash
Copy code
adb shell dumpsys SurfaceFlinger --list
Step 2: 抓取关键日志信息

bash
Copy code
adb shell dumpsys SurfaceFlinger --display adb shell dumpsys SurfaceFlinger --layers | grep "LayerName"
Step 3: 保存显示帧到当地

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企服之家,中国第一个企服评测及商务社交产业平台。
页: [1]
查看完整版本: Android上dump layer的方法