Android systrace/atrace/ftrace抓取方法

2,487 阅读2分钟

systrace

预装python(python版本是2.7否则无法抓取) python2.7安装地址: www.python.org/download/re… 安装pywin32依赖: sourceforge.net/projects/py… 安装six 依赖: pypi.org/project/six…
six 安装方法: 下载six-1.15.0.tar.gz 解压到任意目录,在setup.py文件夹下执行python setup.py install

进入SDK目录下的systrace目录。如(adt-bundle-windows-x86_64-20140702\sdk\platform-tools\systrace) userdebug版本:

python systrace.py am wm view app res ss gfx  view hal bionic pm sched irq freq idle disk mmc load sync workq binder_driver binder_lock pagecache memreclaim dalvik input -t 5 -o systrace.html 

user版本:

python systrace.py am wm view app res ss database freq sched gfx input idle binder_driver binder_lock dalvik -t 5 -o systrace.html 

Options可选值

atrace

当系统需要解决深度睡眠或者某些在不连接usb才能复现的问题时,可以使用如下方法来获取systrace(必须是user+root或者userdebug版本) 1、adb root && adb remount 2、进入adb shell 输入如下命令

atrace -z -b 40000 am wm view app res ss gfx  view hal bionic pm sched irq freq idle disk mmc load sync workq binder_driver binder_lock pagecache memreclaim dalvik input -t 15 > /data/local/tmp/trace_output &

然后可以拔掉usb来复现问题。 3、转换systrace

Python systrace.py --from-file trace_output -o output.html

在androidQ或者更高版本上可以使用自带perfetto工具来抓取systrace: 开发者选项->系统跟踪->录制跟踪记录 抓取文件保存在data/local/trace中,可以用网页ui.perfetto.dev/#!/viewer 点击open with legacy UI选项打开。

ftrace

#! /bin/sh
echo 0 > /d/tracing/tracing_on
echo 16384 > /d/tracing/buffer_size_kb //这里设置大概抓取5s左右的buffer
echo > /d/tracing/trace
echo task_newtask task_rename ipi_raise ipi_entry ipi_exit irq_handler_entry irq_handler_exit softirq_entry softirq_exit softirq_raise workqueue_execute_start workqueue_execute_end sched_waking sched_wakeup sched_wakeup_new sched_switch sched_migrate_task sched_process_exit sched_blocked_reason cpu_idle cpu_frequency cpu_frequency_limits > /d/tracing/set_event

echo 1 > /d/tracing/tracing_on

复现问题或需要关闭trace时,调用代码

trace_printk("timeout, stop ftrace\n");
tracing_off();

关闭trace

确定问题已经复现: adb shell cat /d/tracing/tracing_on -->如果结果是0则继续执行下面的命令,为1代表没有复现该问题,需要继续等待。 cat /d/tracing/trace > /sdcard/ftrace.log 之后adb pull出来该ftrace log文件。可以用chrome浏览器直接load该文件

参考: developer.android.google.cn/topic/perfo…