Android 性能优化工具 Traceview和dmtracedump

一、DDMS和TraceView的区别?

DDMS是一个程序执行查看器,在里面可以看见线程和堆栈等信息,

TraceView是程序性能分析器,可以看到那个view 绘制使用了多长时间 。


二、TraceView文件的生成

Traceview是android平台配备一个很好的性能分析的工具。它可以通过图形化的方式让我们了解我们要跟踪的程序的性能,并且能具体到method。

第一种方式:使用代码

  首先,必须在程序当中加入代码,以便生成trace文件,有了这个trace文件才可以将其转化为图形。

  要添加的代码如下:

  Java代码

  Debug.startMethodTracing("yourActivityTrace");

Debug.stopMethodTracing();

  Google Dev Guide当中说可以在activity的onCreate()中添加Debug.startMethodTracing(), 而在onDestroy()中添加Debug.stopMethodTracing(),但是在实际的测试时发现这种方式其实并不好用,因为通常情况下我们的activity的onDestroy()是由系统决定何时调用的,因此可能等了很长时间都不会得到这个trace文件。因此决定在onStop()中来调用Debug.stopMethodTracing()。这样当我们切换到其它activity或者点击home键的时候onStop()就会被调用,我们也就可以得到完整的trace file。

  trace文件保存到/sdcard/...当中。现在把这个文件copy到电脑上指定的目录,假设是C:/tracefile 目录下。

  可以通过命令行来执行traceview,进入tools目录后,执行

  traceview C:/tracefile/yourActivityTrace.trace

但是会提示如下的信息


新的adt 已经不支持使用 traceview 命令直接打开了 trace,相反更简单的是直接eclipse 直接就可以打开trace文件


file - openfile 即可


另外一种方式使用traceview 不用再写代码了,使用 Android Device Monitor 来

  • Lunch your app from eclipse in debugging mode.
  • Go to DDMS View
  • In devices window there is a small button called Start Method Profiling
  • Click it when you want ( you can combine it with break points to get accurate start/end)
  • when you’re done click Stop Method Profiling
  • A new window in DDMS will appear similer to traceview with the same output.

Android 性能优化工具 Traceview和dmtracedump_第1张图片


三、 TraceView工具的使用

有两方面用途:

1 查看跟踪代码的执行时间,分析哪些是耗时操作

2 可以用于跟踪方法的调用,尤其是Android Framework层的方法调用关系

获取方法的调用顺序

1. 在traceview中搜索响应的方法名不能使用大写字母

2. 搜索出的方法会自动展开,其中包含Parents 和 Children 两组信息

3. 点击Parents下的方法名,直接跳转到调用当前的方法处。Children相反

Android 性能优化工具 Traceview和dmtracedump_第2张图片


上面是时间片面板(Timeline panel),下面是分析面板(Profilepanel)

时间片面板(Timeline panel):描述当每个线程和方法启动和停止

分析面板(Profile panel):提供了内部方法调用的总结

分析面板中参数的意义

英语

中文

Incl

调用方法占用时间百分比

Inclusive

调用方法时间(ms)(包括了所有方法的调用)

Excl

执行方法占用时间百分比

Exclusive

执行方法占用时间(ms)(不包括子方法的调用)

Calls+Recur Calls/Total

调用和重复调用的次数

Time/Call

总的时间(ms)

四、dmtracedump的使用

dmtracedump 会根据trace文件 生成函数调用关系图



dmtracedump的使用方法:

dmtracedump [-ho] [-s sortable] [-d trace-base-name] [-g outfile] <trace-base-name>

参数

描述

-d <trace-base-name>

Trace 文件的名称

-g <outfile>

需要输出的问题

-h

使用HTML输出

-o

存储跟踪文件,而不是分析文件

-t <percent>

最低门槛,包括子节点图中(孩子接点的包容性的时间占母接点包容性的时间)。如果不使用此选项,默认阈值是20%。


使用如下命令:

dmtracedump -g aa.png calc.trace

但是我失败了,出现错误:

ERROR: unable to read 1829330 bytes from trace file

Cannot read trace.

查看了一下stackoverflow


Do you try to use 'dmtracedump' tool in the windows OS?

I think 'dmtracedump' tool can't handle big files.. in my case.. Windows 7 32 bit.

Cmd> dmtracedump -g abc.png Large_Log.trace

ERROR: unable to read 8910087 bytes from trace file

Cannot read trace.

but, I succeeded to generate call graph image file in the ubuntu 64 bit OS.

the size of generated abc.png file is approximately 6 MB.



google group 上的回答


I generated another trace file in a linux box, and then
dmtracedump worked fine with that one.


Yes, I meet same problem in Window XP.
But It worked well in a linux box.
I still can't find how to solve this error.


好吧,回去用ubuntu试试


五、其他的性能优化工具(都没用过啊)


1、GProfile

一款Linux下测试应用程序的性能的工具。它可以提供函数调用的关系、每个函数的执行时间以及每个函数调用的次数。

2、OProfile

一款可以测试Kernel、以及Android下C/C++代码的工具。功能很强大。

3、TraceView

Android SDK自带的一个性能测试工具。它可以测试Android中应用以及Framework层中代码的工具。

4、NEON

NEON是一个新兴的技术,它是基于SIMD(单指令多数据)的技术。它可以加速多媒体的处理,给用户更流畅的体验。

你可能感兴趣的:(Android 性能优化工具 Traceview和dmtracedump)