Android 性能优化(25)*性能工具之「Systrace」Analyzing UI Performance with Systrace:用Systrace得到ui性能报告
1.官方文档
https://developer.android.google.cn/topic/performance/tracing
https://ui.perfetto.dev/ 在线阅读trace文件
https://perfetto.dev/ perfetto 官方
2.命令行上捕获系统跟踪
systrace 命令在 {android-sdk}/platform-tools/systrace/ 中。
2.1 语法
python systrace.py [options] [categories]
示例:
$ python systrace.py -o mynewtrace.html sched freq idle am wm gfx view \
binder_driver hal dalvik camera input res
2.2 命令和命令选项
命令和选项 | 说明 |
---|---|
-o file |
将 HTML 跟踪报告写入指定的文件。如果您未指定此选项, |
-t N | --time=N |
跟踪设备活动 N 秒。如果您未指定此选项, |
-b N | --buf-size=N |
使用 N KB 的跟踪缓冲区大小。使用此选项,您可以限制跟踪期间收集到的数据的总大小。 |
-k functions |
跟踪逗号分隔列表中指定的特定内核函数的活动。 |
-a app-name |
启用对应用的跟踪,指定为包含进程名称的逗号分隔列表。这些应用必须包含 跟踪检测调用。您应在分析应用时指定此选项。很多库(例如 检测调用,这些调用可在您启用应用级跟踪时提供有用的信息。如需了解详情,请参阅定义自定义事件。 如需跟踪搭载 Android 9(API 级别 28)或更高版本的设备上的所有应用,请传递用添加引号 的通配符字符 |
--from-file=file-path |
根据文件(例如包含原始跟踪数据的 TXT 文件)创建交互式 HTML 报告,而不是运行实时跟踪。 |
-e device-serial |
在已连接的特定设备(由对应的设备序列号标识)上进行跟踪。 |
categories |
包含您指定的系统进程的跟踪信息,如 运行 |
3. 使用系统录制功能
Android 9(API 级别 28)及以上包含一个名为 System Tracing 的系统级应用 ,可录制系统Systrace(perfetto格式)。
3.1 设置
在开发者选项里可以设置
3.2 导出
adb pull /data/local/traces/ .
4.打开、分析trace文件
https://ui.perfetto.dev/ 在线阅读trace文件
5.adb shell strace
官方教程 https://source.android.google.cn/devices/tech/debug/strace
线上文档 https://man7.org/linux/man-pages/man1/strace.1.html
简单使用如下:
#strace -CttTip PID
- 要以 root 身份运行。
- PID是进程名
结果如下:
1 ..... 2 10:57:57.573781 [0000797de61bfcca] recvfrom(56, "nysv\0\0\0\0\0{+zj\354\34\0\240\347\256\233$\4\0\0\6)\0\0\0\0\0\0"..., 4000, MSG_DONTWAIT, NULL, NULL) = 40 <0.000015> 3 10:57:57.573875 [0000797de61bfcca] recvfrom(56, 0x7ffead8be190, 4000, MSG_DONTWAIT, NULL, NULL) = -1 EAGAIN (Try again) <0.000025> 4 10:57:57.574007 [0000797de61beee7] write(46, "\1\0\0\0\0\0\0\0", 8) = 8 <0.000012> 5 10:57:57.574086 [0000797de61672a8] futex(0x797c137866e8, FUTEX_REQUEUE_PRIVATE, 0, 1, 0x797c137866c4) = 1 <0.000011> 6 10:57:57.574122 [0000797de61672a8] futex(0x797c137866c4, FUTEX_WAKE_PRIVATE, 1) = 1 <0.000010> 7 10:57:57.574254 [0000797de61bfcca] recvfrom(56, 0x7ffead8bb1e0, 4000, MSG_DONTWAIT, NULL, NULL) = -1 EAGAIN (Try again) <0.000011> 8 10:57:57.574326 [0000797de61bf147] ioctl(5, BINDER_WRITE_READ, 0x7ffead8bbe40) = 0 <0.000020> 9 10:57:57.574415 [0000797de61beee7] write(51, "\1\0\0\0\0\0\0\0", 8) = 8 <0.000011> 10 10:57:57.575181 [0000797de61beee7] write(46, "\1\0\0\0\0\0\0\0", 8) = 8 <0.000015> 11 10:57:57.575863 [0000797de61beee7] write(51, "\1\0\0\0\0\0\0\0", 8) = 8 <0.000079> 12 10:57:57.576028 [0000797de61672a8] futex(0x797c237c30a0, FUTEX_WAIT_BITSET_PRIVATE, 98, NULL, FUTEX_BITSET_MATCH_ANY) = 0 <0.000225> 13 10:57:57.576349 [0000797de61bea27] getuid() = 10165 <0.000010> 14 10:57:57.576394 [0000797de61c010a] epoll_pwait(47, [{EPOLLIN, {u32=46, u64=46}}], 16, 0, NULL, 8) = 1 <0.000012> 15 10:57:57.576733 [0000797de61beec7] read(46, "\2\0\0\0\0\0\0\0", 8) = 8 <0.000013> 16 10:57:57.576800 [0000797de61c010a] epoll_pwait(47, [{EPOLLIN, {u32=56, u64=56}}], 16, -1, NULL, 8) = 1 <0.013377> 17 10:57:57.591447 [0000797de61bfcca] recvfrom(56, "nysv\0\0\0\0\0{+zj\354\34\0\0057\255\234$\4\0\0\7)\0\0\0\0\0\0"..., 4000, MSG_DONTWAIT, NULL, NULL) = 40 <0.000018> 18 10:57:57.591550 [0000797de61bfcca] recvfrom(56, 0x7ffead8be190, 4000, MSG_DONTWAIT, NULL, NULL) = -1 EAGAIN (Try again) <0.000010> 19 10:57:57.591659 [0000797de61beee7] write(46, "\1\0\0\0\0\0\0\0", 8) = 8 <0.000013> 20 10:57:57.591752 [0000797de61bea27] getuid() = 10165 <0.000009> 21 10:57:57.591793 [0000797de61c010a] epoll_pwait(47, [{EPOLLIN, {u32=46, u64=46}}], 16, 0, NULL, 8) = 1 <0.000012> 22 10:57:57.591835 [0000797de61beec7] read(46, "\1\0\0\0\0\0\0\0", 8) = 8 <0.000010> 23 .....
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列1:轻松3步本地部署deepseek,普通电脑可用
· 按钮权限的设计及实现
· 【杂谈】分布式事务——高大上的无用知识?