性能优化之Traceview和Systrace的使用

一、Systrace

systrace可以检测追踪时间内存在的异常问题,特别是过度绘制(jank)和draw执行时间过长等。利用systrace我们可以看到cpu抢占情况以及UI Thread的执行情况。

如何使用

1、可以通过monitor使用
性能优化之Traceview和Systrace的使用_第1张图片2、也可以通过命令行:
性能优化之Traceview和Systrace的使用_第2张图片

如何分析

下图是用chrome打开systrace生成的trace.html
性能优化之Traceview和Systrace的使用_第3张图片下图是Alert选项卡的展开内容,里面列出了发现的问题。
性能优化之Traceview和Systrace的使用_第4张图片
再看三种问题的展开描述:
性能优化之Traceview和Systrace的使用_第5张图片性能优化之Traceview和Systrace的使用_第6张图片
性能优化之Traceview和Systrace的使用_第7张图片
再看看cpu区域
在这里插入图片描述将鼠标指针放在想要查看的区域,按W键放大,S键缩小。左侧表示CPU核心数,右侧每个颜色代表一个进程,每个CPU对应一行,每行上的色块代表当前抢占到cpu时间片的线程,色块长度表示时间片长度。点击色块可以查看更多详细信息,如下图
性能优化之Traceview和Systrace的使用_第8张图片
在cpu区域下方就是应用区域
性能优化之Traceview和Systrace的使用_第9张图片红框中都是当前正在运行的应用,包括系统进程和第三方应用进程,图中的com.tencent.mm就是微信的包名。选择一个应用点击查看:
性能优化之Traceview和Systrace的使用_第10张图片
点击一个异常帧,可以看到这一帧存在的问题,如果存在多个问题则会提示多个:
性能优化之Traceview和Systrace的使用_第11张图片
点选异常帧后,按M键可以查看当前选中帧的帧区间,当然,在其他区域选中色块后也可以按M键查看对应的区间信息:
性能优化之Traceview和Systrace的使用_第12张图片
还有一点很重要,就是UI Thread信息,在主线程信息中我们经常能看到一些关键信息,比如下图中红色箭头指向的色块,根据这个色块我们就能推测出大概执行到哪些代码块了:性能优化之Traceview和Systrace的使用_第13张图片
建议在实际使用systrace时,先查看Alerts选项卡总览存在哪些问题。然后再找到自己应用的异常帧,查看异常提示,并查看帧区间内CPU的使用情况,然后根据每个异常帧的发生时间点,再结合UI线程中的信息去大致定位引发异常帧的问题所在。
当然,如果只通过systrace,我们往往很难定位到具体的问题节点,这个时候就该轮到traceview上场了。

点击查看systrace的官方描述

二、Traceview

利用Traceview可以查找两类代码异常问题:

一是找出那些耗费时间过长的函数。
一是那些自身占用时间不长,但调用却非常频繁的函数。

Traceview的两种使用方式:

1.打开Android Device Monitor,选择一个进程,然后按上面的“Start Method Profiling”按钮,等红色小点变成黑色以后就表示TraceView已经开始工作了,再次点击该按钮结束追踪,并会自动打开这段时间内生成的 .trace 文件。
性能优化之Traceview和Systrace的使用_第14张图片
2.在代码中使用Debug.startMethodTracing()和Debug.stopMethodTracing(),然后运行代码即可在应用的缓存目录(sdcard/Android/data/应用包名/files)下生成 dmtrace.trace 文件,接下来使用DDMS打开 .trace 文件。这种方式的优点是能够准确的设定要追踪的代码执行流程,从而进行针对性的分析。
性能优化之Traceview和Systrace的使用_第15张图片

打开 .trace 文件后的界面是这样的:
性能优化之Traceview和Systrace的使用_第16张图片

如何分析?

性能优化之Traceview和Systrace的使用_第17张图片
主要关注上图中横轴参数的对应值,点击参数名可按此指标升序或降序排列。
Name:调用的函数名
Incl Cpu Time%:方法调用所占Cpu时间百分比,包括其内部调用的方法
Incl Cpu Time:方法调用所占Cpu时间,包括其内部调用的方法
Excl Cpu Time%:方法调用所占Cpu时间百分比,不包括其内部调用的方法
Excl Cpu Time:方法调用所占Cpu时间,不包括其内部调用的方法
Incl Real Time%:方法调用所占真实时间百分比,包括其内部调用的方法
Incl Real Time:方法调用所占真实时间,包括其内部调用的方法
Excl Real Time%:方法调用所占真实时间百分比,不包括其内部调用的方法
Excl Real Time:方法调用所占真实时间,不包括其内部调用的方法
Calls + Recur Calls / Total:方法调用次数+递归调用次数
Cpu Time / Call:该方法平均占用CPU时间
Real Time / Call:该方法平均占用真实时间

你可能感兴趣的:(性能优化)