perfetto/systrace基础知识讲解-千里马android framework实战开发

线程状态查看

深绿色 : 运行中(Running)

在Running状态就代表着处于cpu上的运行中
状态作用:看某个方法是否耗时,可以通过测量Running时间长短判断,也可以进行竞品对比看看cpu能力如何,或者前后对比各个大小核cpu影响方法的耗时
可以看到通过选中可以知道该任务是在哪个cpu进行运行的
在这里插入图片描述

浅绿色 : 可运行(Runnable)

代表线程可以运行但当前没有真正运行中,需要等待 cpu 调度,这个时间长短代表着cpu调度快慢
重要作用:点击Runnable这个块,下面信息会显示当前线程唤醒者是谁,即可以清楚知道整个线程之间唤醒逻辑。
在这里插入图片描述

白色/无色: 睡眠中(Sleeping)

代表当前线程没有工作可以做,等待事件驱动干货,比如looper就是大部分时间睡眠,小部分时间有消息后处理消息
在这里插入图片描述

橙色Uninterruptible Sleep (IO)

代表不可以中断的休眠状态,一般线程在IO操作上阻塞了
不可中断状态实际上是系统对进程和硬件设备的一种保护机制。比如,当一个进程向磁盘读写数据时,为了保证数据的一致性,在得到磁盘回复前,它是不能被其他进程或者中断打断的。
在这里插入图片描述

紫红色Uninterruptible Sleep (Non IO)

不可中断的休眠状态,非IO导致,在等内核锁。通常是低内存导致等待、各种各样的内核锁。
在这里插入图片描述
Uninterruptible情况都可以点击后看到blocked方法是哪个

Blocked function   jbd2_log_wait_commit

各个部分区域详解

一般perfetto看trace时候都会针对某一个进程进行查看其运行,因为perfetto/systrace都是以进程为单位进行划分的,每个进程又分为若干个线程,接下来又是主要看一个个的线程情况。
线程一般会有2个条目,如下图所示:

在这里插入图片描述
上面条目描绘是这个线程当前的状态,最常见的有主要有Running,Runable,Sleeping等状态
下面条目就是描绘具体这个线程执行的哪些方法的任务块

1、线程状态信息,代表当前线程状态

在涉及到线程唤醒相关时候需要看这里
在这里插入图片描述

2、线程具体执行方法信息,描述有哪些方法正在执行执行

这个部分最重要,大部分时候其实都在看这个
在这里插入图片描述

3、Counter计数采样部分信息

这个部分和线程没啥关系,即不是说有单独一个线程在专门计数这个,可以理解为一个程序里面全局的一个变量值展示,比如在surfaceflinger的vsync时候就用到了
在这里插入图片描述

4、cpu执行块部分信息

在这里插入图片描述
主要有每个线程执行的任务块,和每个cpu的频率详情

5、async执行块部分信息

这个主要用于跟踪一个动画的开始与结束,比如ValueAnimator

在这里插入图片描述
一般对应代码如下:
Trace.asyncTraceBegin和Trace.asyncTraceEnd
在这里插入图片描述

相关perffto使用技巧

相关快捷按键和systrace通用:

W : 放大 perfetto , 放大可以更好地看清局部细节
S : 缩小 perfetto, 缩小以查看整体
A : 左移
D : 右移
M : 高亮选中当前鼠标点击的段

跨进程通讯的发起端与接受端跳转

同步跨进程情况:
在这里插入图片描述发起端如下,也可以直接点击跳转到接收端
在这里插入图片描述异步跨进程调用情况
在这里插入图片描述
注意这里只有个大的箭头,需要点击箭头看名字才可以判断是发送还是接收端

在这里插入图片描述*
注意:发起端名字带有是transaction,接收端带有的rev*

置顶功能

有一个置顶按钮,点击后可以把这个行放到perfetto最顶端
在这里插入图片描述
点击后如下:
在这里插入图片描述

主要使用场景:
在一些分析trace过程中涉及多个行需要联合分析,多个行的距离太远,没办法方便的对比查看,这个时候可以把关心的几个行都进行置顶查看

标记功能功能

在这里插入图片描述
主要用于分析过程中的一些标记时间点段,以防找补回去

本文章对应视频手把手教你学framework:
https://mp.weixin.qq.com/s/LbVLnu1udqExHVKxd74ILg
私聊作者+v(androidframework007)
点击这里 https://mp.weixin.qq.com/s/Qv8zjgQ0CkalKmvi8tMGaw
视频:https://www.bilibili.com/video/BV1Jg4y1C7fw/
在这里插入图片描述

<think>好的,我现在需要帮助用户修正adb shell perfetto命令的参数错误,特别是关于duration和输出文件trace.perfetto的问题。首先,我需要回忆一下perfetto命令的正确语法和参数用法。 根据之前的引用资料[^2]和[^3],用户提到perfetto可以通过配置文件或直接命令行参数来抓取trace。用户可能在使用adb shell perfetto时参数顺序或格式有误。常见的参数包括-o指定输出文件,-c指定配置文件,还有时间参数可能有不同的写法。 我记得perfetto的duration参数应该以时间单位结尾,比如10s表示10秒。另外,输出文件需要使用-o参数来指定。用户可能错误地将参数顺序弄反了,或者漏掉了必要的参数。 接下来,我需要检查用户可能的错误命令。例如,用户可能输入了类似: adb shell perfetto duration 10s trace.perfetto 但正确的应该是: adb shell perfetto -o /data/misc/perfetto-traces/trace.perfetto --txt -c /dev/stdin <<EOF duration_ms: 10000 ... EOF 或者使用简化的命令行参数,如: adb shell perfetto -o /data/misc/perfetto-traces/trace.perfetto --time 10s 另外,需要注意输出文件的路径是否有写入权限,通常/data/misc/perfetto-traces是推荐的目录。用户可能直接指定了trace.perfetto而没有路径,这可能导致权限错误。 还需要确认Android版本是否支持命令行参数,或者是否需要使用配置文件。在较新版本中,可能可以直接使用--time指定持续时间,而旧版本可能需要配置文件。 总结可能的错误点: 1. duration参数没有正确指定时间单位或位置。 2. 输出文件路径不正确或缺少-o参数。 3. 缺少必要的参数如--txt或-c配置。 因此,正确的命令应该包含-o指定输出路径,--time指定持续时间,或者使用配置文件来定义duration_ms。需要根据用户的具体使用场景来推荐合适的命令格式,并提醒权限和路径的问题。</think>### 修正说明 `adb shell perfetto` 命令参数错误主要涉及**持续时间(duration)**和**输出文件路径**的格式问题。正确语法需要结合参数顺序、权限控制和配置文件使用[^3]。 #### 修正前错误示例 ```bash adb shell perfetto duration 10s trace.perfetto ``` 错误原因:缺少输出参数`-o`,未指定配置文件或时间参数格式错误 #### 修正后正确用法 **方法1:使用命令行参数(需Android 12+)** ```bash adb shell perfetto -o /data/misc/perfetto-traces/trace.perfetto \ --time 10s \ --config 'buffers: {size_kb: 10000} data_sources: {config {name: "linux.process_stats"}}' ``` **方法2:使用配置文件(兼容Android 9-11)** ```bash adb shell perfetto -o /data/misc/perfetto-traces/trace.perfetto \ --txt -c /dev/stdin <<EOF duration_ms: 10000 buffers { size_kb: 10000 } data_sources { config { name: "linux.process_stats" } } EOF ``` ### 关键参数说明 1. **-o**:指定输出文件路径,必须使用系统可写目录 2. **--time**:持续时间(格式:`数字+单位`,如`10s`/`5m`) 3. **-c**:配置文件输入(支持stdin管道) 4. **--txt**:当使用文本格式配置文件时必选 ### 验证命令 ```bash adb pull /data/misc/perfetto-traces/trace.perfetto # 使用 https://ui.perfetto.dev 打开验证 ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

千里马学框架

帮助你了,就请我喝杯咖啡

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值