Android上dump layer的方法

打印 上一主题 下一主题

主题 835|帖子 835|积分 2505

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

1. 使用 dumpsys SurfaceFlinger

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


  • 使用 ADB 连接到设备:
    1. [/code] bash
    2. Copy code
    3. adb shell
    4. [*]运行 SurfaceFlinger 的 dumpsys 下令: [code]
    复制代码
    bash
    Copy code
    dumpsys SurfaceFlinger
  • 查看输出内容,查找与 Layer 相干的信息。比方:

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

过滤特定 Layer 信息

你可以直接筛选与 Layer 相干的部门:
  1. [/code] bash
  2. Copy code
  3. adb shell dumpsys SurfaceFlinger | grep -A 10 Layer
  4. 上面的下令会显示包罗 “Layer” 的日志,而且扩展输出上下文。
  5. [hr] [size=3][b]2. 使用 dumpsys gfxinfo[/b][/size]
  6. dumpsys gfxinfo 是 Android 提供的另一个图形相干工具,可以获取显示体系的帧率、图形性能和部门 Layer 信息。
  7. [size=2][b]步骤:[/b][/size]
  8. [list=1]
  9. [*]获取目的应用包名(如 com.example.myapp)。
  10. [*]运行以下下令: [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 列表:
      1. [/code] bash
      2. Copy code
      3. adb shell dumpsys SurfaceFlinger --list
      4. 该下令将显示全部活动 Layer 的名称。
      5. [*] 抓取特定 Layer 的截图:
      6. [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 下令交互。
    • 示例:
      1. [/code] bash
      2. Copy code
      3. adb shell service call SurfaceFlinger 1013
      4. (服务 ID 和下令参数依设备而异)
      5. [/list] 此方法对较新的 Android 版本或定制体系更复杂,详细参数需要参考详细 HAL 实现。
      6. [hr] [size=3][b]6. 使用第三方工具 (SysTrace 和 Perfetto)[/b][/size]
      7. Google 提供了一些强大的开辟工具,如:
      8. [list=1]
      9. [*][b]Systrace[/b]:
      10. [list]
      11. [*]用来分析帧渲染的性能。
      12. [*]输出详细时间线,包罗层合成变乱和每帧的绘制消耗。
      13. [/list]
      14. [*][b]Perfetto[/b]:
      15. [list]
      16. [*]代替旧版 Systrace 的跟踪工具,具有更强大的调试功能。
      17. [*]获取 SurfaceFlinger 和相干的帧数性能问题。
      18. [/list]
      19. [/list] [hr] [size=3][b]7. 示例:分析特定图形层信息[/b][/size]
      20. [size=2]Step 1: 获取活动 Layer 列表[/size]
      21. [code]
      复制代码
      bash
      Copy code
      adb shell dumpsys SurfaceFlinger --list
      Step 2: 抓取关键日志信息

      1. [/code] bash
      2. Copy code
      3. adb shell dumpsys SurfaceFlinger --display adb shell dumpsys SurfaceFlinger --layers | grep "LayerName"
      4. [size=2]Step 3: 保存显示帧到当地[/size]
      5. [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企服之家,中国第一个企服评测及商务社交产业平台。
  • 回复

    使用道具 举报

    0 个回复

    倒序浏览

    快速回复

    您需要登录后才可以回帖 登录 or 立即注册

    本版积分规则

    盛世宏图

    金牌会员
    这个人很懒什么都没写!

    标签云

    快速回复 返回顶部 返回列表