您的位置:首页 > 移动开发 > Android开发

Android 性能优化工具 Traceview和dmtracedump

2014-04-05 21:34 519 查看

一、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.



三、 TraceView工具的使用

有两方面用途:

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

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

获取方法的调用顺序

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

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

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



上面是时间片面板(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(单指令多数据)的技术。它可以加速多媒体的处理,给用户更流畅的体验。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: