抓取systrace
可以通过eclipse,AS或者命令行抓取systrace。
UI抓取
如下图选择抓取systrace的进程,然后点击右上角的按钮,在出现的界面进行设置,包括设置保存路径,抓取systrace的时间间隔,buffer大小,systrace中包含的tag等。

命令行抓取
Android-SDK中已经包含了systrace工具,platform-tools\systrace\systrace.py。使用命令行抓取的好处是比较灵活,可以把python、systrace工具打包,然后放到任何电脑上就可以直接抓取。
- python systrace.py sched freq idle am wm gfx view sync binder_driver irq workq input -b 96000
其它方法抓取systrace
部分手机厂商为了更加方便、快捷的抓取systrace,把这项功能内置到了手机中,在手机上点击记下就可以抓取到。

如图所示,打开systrace悬浮窗之后,可以在任何界面点击右下角的按钮就可以开始抓取systrace,更加的方便、简单。
查看支持的TAG
抓取TAG的时候如果选择的太多会导致得到的文件太大,如果选择的太少又可能抓取的信息不全,所以要根据问题进行取舍,可以用如下命令查看手机支持哪些TAG。
adb shell atrace --list_categoriesgfx - Graphicsinput - Inputview - View Systemwebview - WebViewwm - Window Manageram - Activity Managersm - Sync Manageraudio - Audiovideo - Videocamera - Camerahal - Hardware Modulesres - Resource Loadingdalvik - Dalvik VMrs - RenderScriptbionic - Bionic C Librarypower - Power Managementpm - Package Managerss - System Serverdatabase - Databasenetwork - Networkadb - ADBvibrator - Vibratoraidl - AIDL callsnnapi - NNAPIrro - Runtime Resource Overlaypdx - PDX servicessched - CPU Schedulingirq - IRQ Eventsi2c - I2C Eventsfreq - CPU Frequencyidle - CPU Idledisk - Disk I/Ommc - eMMC commandssync - Synchronizationworkq - Kernel Workqueuesmemreclaim - Kernel Memory Reclaimregulators - Voltage and Current Regulatorsbinder_driver - Binder Kernel driverbinder_lock - Binder global lock tracepagecache - Page cachememory - Memory
查看systrace
systrace只能通过chrome浏览器进行查看,把抓取到的systrace导入到chrome中,大概显示如下图所示:

可以通过快捷键进行移动、放大、缩小。
- A 向左移动
- B 向右移动
- S 缩小
- W 放大
查看线程状态
systrace中用不同的颜色表示线程的状态,可以很直观的区分线程的状态。
运行中-绿色
该状态的进程说明在对应时间上正在被CPU调度,同一时间可能有多个进程处于运行状态,查看运行中的进程,可以判断是否跑在了CPU小核上?是否在不同的状态间频繁切换?

可运行-蓝色
线程当前在等待CPU调度,目前处于等待中,没有运行。如果进程长时间处于这个状态需要分析是否后台任务过多,导致该进程一直没有被调度到?

不可中断的睡眠态-褐色
线程在另一个内核操作上被阻塞。

休眠中-白色
线程没有工作要做,可能是因为线程在互斥锁上被阻塞。

