Android 开发高手课
张绍文
前微信高级工程师,Tinker 负责人
52202 人已学习
新⼈⾸单¥59
登录后,你可以任选4讲全文学习
课程目录
已完结/共 62 讲
导读 (1讲)
模块一 高质量开发 (25讲)
Android 开发高手课
15
15
1.0x
00:00/00:00
登录|注册

练习Sample跑起来 | 热点问题答疑第3期

你好,我是孙鹏飞。又到了答疑的时间,今天我将围绕卡顿优化这个主题,和你探讨一下专栏第 6 期和补充篇的两个 Sample 的实现。
专栏第 6 期的 Sample 完全来自于 Facebook 的性能分析框架Profilo,主要功能是收集线上用户的 atrace 日志。关于 atrace 相信我们都比较熟悉了,平时经常使用的 systrace 工具就是封装了 atrace 命令来开启 ftrace 事件,并读取 ftrace 缓冲区生成可视化的 HTML 日志。这里多说一句,ftrace 是 Linux 下常用的内核跟踪调试工具,如果你不熟悉的话可以返回第 6 期文稿最后查看 ftrace 的介绍。Android 下的 atrace 扩展了一些自己使用的 categories 和 tag,这个 Sample 获取的就是通过 atrace 的同步事件。
Sample 的实现思路其实也很简单,有两种方案。
第一种方案:hook 掉 atrace 写日志时的一系列方法。以 Android 9.0 的代码为例写入 ftrace 日志的代码在trace-dev.cpp里,由于每个版本的代码有些区别,所以需要根据系统版本做一些区分。
第二种方案:也是 Sample 里所使用的方案,由于所有的 atrace event 写入都是通过/sys/kernel/debug/tracing/trace_marker,atrace 在初始化的时候会将该路径 fd 的值写入atrace_marker_fd全局变量中,我们可以通过 dlsym 轻易获取到这个 fd 的值。关于 trace_maker 这个文件我需要说明一下,这个文件涉及 ftrace 的一些内容,ftrace 原来是内核的事件 trace 工具,并且 ftrace 文档的开头已经写道
确认放弃笔记?
放弃后所记笔记将不保留。
新功能上线,你的历史笔记已初始化为私密笔记,是否一键批量公开?
批量公开的笔记不会为你同步至部落
公开
同步至部落
取消
完成
0/2000
荧光笔
直线
曲线
笔记
复制
AI
  • 深入了解
  • 翻译
    • 英语
    • 中文简体
    • 中文繁体
    • 法语
    • 德语
    • 日语
    • 韩语
    • 俄语
    • 西班牙语
    • 阿拉伯语
  • 解释
  • 总结
仅可试看部分内容,如需阅读全部内容,请付费购买文章所属专栏
《Android 开发高手课》
新⼈⾸单¥59
立即购买
登录 后留言

全部留言(3)

  • 最新
  • 精选
  • Kenneth
    请问这些知识是怎么获取到的呢?总感觉获取原声资料的渠道很受限制,感谢授人以鱼,更感谢授人以渔,感谢🙏

    作者回复: 其实很多都是工作或者交流过程知道的,剩下的就是自己从点到面的学习了

    1
  • blithe
    应用层开发都没接触过这些内容,大佬,你是从做什么开始接触到这些内容,并学习的
  • eyeandroid
    通过hook atrace拿到的systrace,有cpu和其它进程的信息吗?
收起评论
显示
设置
留言
3
收藏
沉浸
阅读
分享
手机端
快捷键
回顶部