加油站:Trace文件知多少

前提概要

目前团队的业务是关于某业务安卓sdk的测试,其产品特点是发版较快,同时对于大小和性能的要求较高。

避免开发者使用该sdk时产生对宿主app的性能影响,我们决定对公开API进行性能追踪,包括API响应时间、线程方法调用、内存泄漏检测、CPU时间消耗等信息。

针对API时间消耗和线程方法调用,在安卓性能测试中Traceview是经常被用到的。

Traceview是Android平台一个很好的性能分析工具,它可以把trace文件转化为图形,通过图形化的方式让我们了解我们要跟踪的程序的性能。

Traceview对于开发确实方便,可以快速定位问题,但还是不能满足我们的需求,原因如下:

在测试工作中动辄要分析几百兆的文件,虽然手动分析不能说大海捞针,但是也很心力交瘁,尤其是发版较快的情况下。

身处于IT,为解决上述问题,我们决定用代码自动化分析。

基础

先来说说trace文件。

只有了解它之后,我们才可以快速开发出自已所需要的工具。

生成Trace文件数据

1、使用Android Studio直接生成

1)在Monitors中选择CPU

3)操作你手机需要分析的功能。比如UI卡顿那块、应用耗时那块等等

4)再次点击小闹钟,Studio会自动打开这个trace文件

2、使用DDMS来生成

1)选中Devices里面你想查看的进程

2)点击start Method Profiling

3)操作你手机需要分析的功能。比如UI卡顿那块、应用耗时那块等等

4)再次点击那个按钮Stop Method Profiling,就会打开TraceView界面

注意:如果你要用TraceView解析,这里是官方的一个说明。

Traceview Known Issues:

Traceview日志记录不能很好地处理线程,导致这两个问题:(1) 如果线程在分析期间退出,线程名称不会被发出;(2) 虚拟机重用线程ID。如果一个线程停止,另一个线程开始,它们可能会得到相同的ID。

3、嵌入代码生成

分析Trace文件格式

现在版本的trace文件是由两个段组成的:

1)一个二进制密钥段(包含了线程和方法名)

2)一个数据段(包含了trace的数据)。

Note:

以前版本的Traceview并未连接这些文件。

如果有旧的密钥和数据文件,你可以用下面的命令连接它们:

01

密钥段文件格式

密钥段文件是一个文本文件。

该文件被分为三部分,每一部分以"*"开头,且线程段和方法段是没有排序的。

•version section

第一行是文件本版号,当前是常量1。

第二行clock=global表明我们在所有线程中使用了公共时钟。

未来的版本可能使用每个线程独立的CPU时间计数器。

•threads section

每一行是一个线程。

每一行包含两部分:thread ID[TAB]thread name

• methods section

一行代表着一个方法的进入或者退出。

每一行包含着四部分,每一部分通过tab字符分隔:

method-ID [TAB] class-name [TAB] method-name [TAB] signature

注意:只有当方法完全的进入以及正确退出的才会在这里被记录。要区别于接下来讲的数据段中的方法。

02

数据段文件格式

数据段是一个二进制文件。

要注意的是:method action在method字段中的最低两位,其意义为:

0 - method entry

1 - method exit

2 - method "exited" when unrolled by exception handling

3 - (reserved)

通过各式分析,数据都是以毫秒为基本单位,因此我们还可以知道一个无符号32位的整数能覆盖大约70分钟的记录时间。

开发

了解了基本的Trace文件后,下面就来介绍下作者开发Trace的思路。

需求:我们要测试API响应时间,追踪每个版本几个特定方法的耗时变化情况。

主要思路分为两个方面:收集数据和分析数据。

收集数据

收集数据的方法可以是采用上述介绍的几种方法之一,采用提前打桩也好,写一写脚本也好。

分析数据

(1) 首先解析到Trace文件,解析出线程和方法以及其耗时时间。

(2) 存储数据库,同时做好版本区分。

(3) 利用Web或者JavaFx,开发出界面。

在该次开发中,还可以添加线程线程数目追踪、hprof分析、CPU分析等等。

Qtest是360旗下的专业测试团队!

是WEB平台部测试技术平台化、效率化的先锋力量!

  • 发表于:
  • 原文链接https://kuaibao.qq.com/s/20180827B1IX8F00?refer=cp_1026
  • 腾讯「云+社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。

扫码关注云+社区

领取腾讯云代金券

年度创作总结 领取年终奖励