性能优化之Traceview和Systrace的使用

一、Systrace

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

如何使用

1、可以通过monitor使用
在这里插入图片描述2、也可以通过命令行:
在这里插入图片描述

如何分析

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

点击查看systrace的官方描述

二、Traceview

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

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

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

打开 .trace 文件后的界面是这样的:
在这里插入图片描述

如何分析?

在这里插入图片描述
主要关注上图中横轴参数的对应值,点击参数名可按此指标升序或降序排列。
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:该方法平均占用真实时间

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值