1.Systrace的介绍

Systrace是Android4.1中新增的性能数据采样和分析工具。它可帮助开发者收集Android关键子系统(如Surfaceflinger、WindowManagerService等Framework部分关键模块、服务)的运行信息,从而帮助开发者更直观的分析系统瓶颈,改进性能。
 Systrace的功能包括跟踪系统的I/O操作、内核工作队列、CPU负载以及Android各个子系统的运行状况等。

在Android平台中, 它主要由3部分组成:
 1.内核部分:Systrace利用了Linux Kernel中的ftrace功能。所以,如果要使用Systrace的话,必须开启kernel中和ftrace相关的模块。
 2.数据采集部分:Android定义了一个Trace类。应用程序可利用该类把统计信息输出给ftrace。同时,Android还有一个atrace程序,它可以从ftrace中读取统计信息然后交给数据分析工具来处理。
 3.数据分析工具:Android提供一个systrace.py(python脚本文件,位于Android SDK目录/tools/systrace中,其内部将调用atrace程序)用来配置数据采集的方式(如采集数据的标签、输出文件名等)和收集 ftrace统计数据并生成一个结果网页文件供用户查看。
          从本质上说,Systrace是对Linux Kernel中ftrace的封装。应用进程需要利用Android提供的Trace类来使用Systrace。

2.Systrace跟踪代码

(1).应用层代码添加systrace跟踪方式:
   Trace.beginSection(“TEST”);
   Trace.endSection();
(2).framework的java层代码添加systrace跟踪方式:
  Trace.traceBegin(Trace.TRACE_TAG_VIEW, “performTraversals”);
  Trace.traceEnd(Trace.TRACE_TAG_VIEW);
  也可以使用:
  ATRACE_BEGIN(“TEST”);
  ATRACE_END();
(3).framework的native代码添加systrace跟踪方式:   
  ATRACE_INIT();
  ATRACE_CALL();

3.Systrace的运行方式

>sdk包下手动运行:
$> cd android-sdk/tools/systrace
$> python systrace.py --set-tags gfx,view,wm
$> adb shell stop
$> adb shell start
$> python systrace.py --disk --time=10 -o mynewtrace.html


>用ADT工具在Eclipse里运行:
 点击下图红圈的启动按钮,就会弹出右边的Android System Trace设置面板。

4.Systrace数据分析

>当Systrace运行之后,将记录系统预定的跟踪数据,生成一个html文件,如图:

5.Systrace使用示例

Android流畅程度性能分析:
 (1).将几台链接Eclipse之后,按照上页所述,打开Android System Trace设置面板。
 (2).如果要测试介面流畅度,我们一般只关注图形性能。因此必须选择Graphics和View(还有其他很多选项,如果是在做音频处理或者视频播放的分析测试话,可以选择其他选项)。
 (3).确认运行之后,滚滑要测试的介面,记录跟踪时间,之后我们会得到一个html页面。
 (4).打开html页面后,页面中显示了系统运行情况的概述图;欲查看具体数据可以通过WASD快捷键来完成,W/S 放大/缩小 A/D 左移/右移。
 (5).在页面中有一个surfaceFlinger模块, 此模块是负责绘制Android应用程序UI的服务,此区域如果出现空档,一种情况是没有操作或者滑动到头,没东西需要绘制,这种属于正常;另一种情况就是有问题存在,有其他操作引起时间过长。
 (6).在分析局域,放大后就能看到具体的函数执行情况,点击后能看到每个部分所使用的时间。比如deliverInputEvent是系统提供的触摸事件;performTraversals是开始布局并且绘画显示画面的过程;draw是绘画的过程;对于一个 listview,如果deliverInputEvent过长,很有可能是在adapter中的getView方法中处理时间过长导致。 所以通过Systrace的数据,可以大体上的发现是否存在性能问题。但如果要知道具体情况,就需要用到另外一个工具。

6.TraceView的介绍

通过Systrace分析数据,可以大体上发现是否存在性能问题。

但如果要知道具体情况,就需要用到另外一个工具TraceView是android的一个可视化的调试工具。

借助它,你可以具体了解你的代码在运行时的性能表现。

它能帮你更好了解到代码运行过程的效率,进而改善代码,提高你应用的体验。

同时TraceView是Android平台特有的数据采集和分析工具,它主要用于分析Android中应用程序的hotspot。

让我们了解我们要跟踪的程序的性能,并且能具体到method
Traceview的作用:
 (1). 查看跟踪代码的执行时间,分析哪些是耗时操作。
 (2). 可以用于跟踪方法的调用,尤其是Android Framework层的方法调用关系。
 (3). 可以方便的查看线程的执行情况,某个方法执行时间、调用次数、在总体中的占比等,从而定位性能点。

7.TraceView的运行方式

手动运行:
 在开始调试的地方,如Activity的onCreate函数,
                      添加Debug.startMethodTracing("tracefilename");
 结束调试的地方,如Activity的onStop函数,
                        添加Debug.stopMethodTracing();
 之后运行你的app一段时间并退出,会在sd卡根目录生成tracefilename.trace这个log文件,记录这段时间内的运行信息。
 将日志文件pull到PC端,cmd到android sdk tools文件夹内(或绑定sdk tools目录到系统path内),运行traceview tracefilename.trace即可打开TraceView分析界面。

使用DDMS:
    打开devices窗口,选择某个进程,点击右上角的start method profilingddms trace,运行app一段时间后,再点击已变成stop method profiling的该按钮。eclipse会自动弹出debug的标签(可通过菜单File->save as保存数据)。

界面如下:


注:这种方式不需要修改代码,所以对于没有源码的程序同样可以进行排查。同时可以方便的进行全局性能排查。

8.TraceView的数据分析

Timeline Panel(时间线面板) :


Timeline Panel又可细分为左右两个Pane:
    (1).左边Pane显示的是测试数据中所采集的线程信息。如图,本次测试数据采集了main线程,两个Binder线程和其它系统辅助线程(例如GC线程等)的信息。
    (2).右边Pane所示为时间线,时间线上是每个线程测试时间段内所涉及的函数调用信息。这些信息包括函数名、函数执行时间等。如图,main线程对应行的的内容非常丰富,而其他线程在这段时间内干得工作则要少得多。
    (3).开发者可以在时间线Pane中移动时间线纵轴。纵轴上边将显示当前时间点中某线程正在执行的函数信息。

Profile Panel(分析面板):

分析面板主要展示了某个线程(先在Timeline Panel中选择线程)中各个函数调用的情况,包括CPU使用时间、调用次数等信息。而这些信息正是查找hotspot的关键依据。点击某个方法可以查看在对应线程上的执行时间区域,并会显示其父方法及子方法。
    Profile Panel各列信息作用说明 如下:
Name 该线程运行过程中所调用的函数名
Incl Cpu Time 某函数占用的CPU时间,包含内部调用其它函数的CPU时间
Excl Cpu Time 某函数占用的CPU时间,但不含内部调用其它函数所占用的CPU时间
Incl Real Time 某函数运行的真实时间(以毫秒为单位),内含调用其它函数所占用的真实时间
Excl Real Time 某函数运行的真实时间(以毫秒为单位),不含调用其它函数所占用的真实时间
Call+Recur Calls/Total 某函数被调用次数以及递归调用占总调用次数的百分比
Cpu Time/Call  某函数调用CPU时间与调用次数的比。相当于该函数平均执行时间
Real Time/Call 同CPU Time/Call类似,只不过统计单位换成了真实时间

9.TraceView使用示例

通常,查找hotspot包括两种类型的函数:

 第一类是调用次数不多,但每次调用却需要花费很长时间的函数。

方法:在Profile Panel中,选择按Cpu Time/Call进行降序排序(从上之下排列,每项的耗费时间由高到低),如上图所示。

展开函数,我们发现getStringsToShow在 Incl Cpu Time %一列中占据了63.3%,它是onCreate子函数耗费时间最长的,而且Calls+Recur Calls/Total列显示其调用次数为1,即它仅仅被调用一次了。这个函数是应用程序实现的,所以极有可能是一个潜在的Hotspot。

 第二类是那些自身占用时间不长,但调用却非常频繁的函数。

方法:点击Call/Recur Calls/Total列头,使之按降序排列。关注点放在那些调用频繁并且占用资源较多的函数。

如上图所示。红框处有两个重载的MyMD5.getHashString函数调用,它们各运行了368次,而且占用的CPU时间百分比达到了31.8%和53.2%。很显然,这2处调用就是hotspot,有优化的余地 。

10.结论

>如今Android系统日趋稳定,存储容量也越来越大,对源码质量的要求也不断降低。

但是很多开发工程师在开发的过程中不注重代码质量,不考虑系统性能和用户体验,

因此开发出的产品往往性能低下,用户体验机差。
>为了很好的验证产品的性能,目前有很多工具可以用来分析测试Android的性能,比如:dumpsys、Systrace、TraceView、Update Threads(更新线程)、Update Heap(更新堆)、Allocation Tracker(分配跟踪器)等工具,这裡我们仅仅介绍了其中两个。

原文信息:
作者:JonsonWei 
来源:CSDN 
原文:https://blog.csdn.net/xiyangyang8/article/details/50545707

Android性能分析工具Systrace和TraceView的使用相关推荐

  1. Android 性能分析工具整理汇总

    Android性能分析工具整理汇总 字数1852 阅读3579 评论10 喜欢54 Android性能分析工具整理汇总 把做Android开发以来碰到的一些不错的性能分析工具做个整理汇总... Deb ...

  2. 正确使用 Android 性能分析工具——TraceView

    前面唠叨 最近公司app中有些列表在滑动的时候会有卡顿现象,我就开始着手解决这些问题,解决问题之前首先要分析列表滑动的性能瓶颈在什么地方.因为之前不会正确使用TraceView这个工具,主要是看不懂T ...

  3. 正确使用Android性能分析工具——TraceView

    原址 前面唠叨 最近公司app中有些列表在滑动的时候会有卡顿现象,我就开始着手解决这些问题,解决问题之前首先要分析列表滑动的性能瓶颈在什么地方.因为之前不会正确使用TraceView这个工具,主要是看 ...

  4. Android性能分析工具整理汇总

    把做Android开发以来碰到的一些不错的性能分析工具做个整理汇总... Debug GPU Overdraw 类型:系统自带功能UI渲染检测功能(打开Settings,然后到 Developer O ...

  5. Android 性能分析工具

    Android Studio 3.0采用全新的Android Profiler窗口取代AndroidMonitor工具.这些全新的分析工具能够提供关于应用CPU.内存和网络Activity的实时数据. ...

  6. Android 性能分析工具dumpsys的使用(自己增加一部分在后面)

    Android提供的dumpsys工具可以用于查看感兴趣的系统服务信息与状态,手机连接电脑后可以直接命令行执行adb shell dumpsys 查看所有支持的Service但是这样输出的太多,可以通 ...

  7. Android 常用的性能分析工具详解:GPU呈现模式, TraceView, Systrace, HirearchyViewer(转)...

    此篇将重点介绍几种常用的Android性能分析工具: 一.Logcat 日志 选取Tag=ActivityManager,可以粗略地知道界面Displaying的时间消耗.当我们打开一个Activit ...

  8. Android系统性能优化(54)---Android性能分析专题

    Android性能分析专题 1.  背景:Android App优化, 要怎么做? 2.  Android App优化之性能分析工具 3.  Android App优化之提升你的App启动速度之理论基 ...

  9. 性能分析工具 Android TraceView

    1. TraceView 简介 Traceview是android平台配备一个很好的性能分析的工具.它可以通过图形化的方式让我们了解我们要跟踪的程序的性能,并且能具体到每个方法的执行时间 Tracev ...

  10. Android APP性能分析工具大全

    目录 官方推荐工具 第三方工具 一,官方工具 1.1,TraceView 1.2,StrictMode 1.3,Systrace 1.4,Hierarchy Viewer 1.5,AndroidStu ...

最新文章

  1. 全国计算机等级考试c语言程序设计真题,历年全国计算机等级考试二级C语言笔试选择真题...
  2. C语言嵌入式系统编程修炼之四:屏幕操作
  3. 【Linux】一步一步学Linux——tree命令(23)
  4. 查看当前系统的glibc版本
  5. 谷粒商城RabbitMQ锁库存逻辑详解--新理解(长文警告)
  6. 18款 非常实用 jquery幻灯片图片切换
  7. 微信时代计算机教学,互联网+时代技工院校计算机教学方式研究
  8. Python精确指南——第二章 界面开发
  9. whitepages 爬取_运营笔记:是时候了解蜘蛛爬取原理了!揭秘收录难题!
  10. python(24)下载文件
  11. 信创国产化的安全与运维
  12. java实现pdf转word_Java实现PDF转word
  13. for函数python_for函数python
  14. 计算机领域 专利挖掘,浅谈如何进行软件专利的挖掘
  15. 硬件设计28之RS422、RS485
  16. HandBrake 开源视频转码器、编码转换器、格式转换器
  17. 使用LabVIEW进行物体追踪图像处理分析
  18. Redis 的过期策略是如何实现的?
  19. 《Design of Computer Programs》学习笔记(2 - 1)Back of the Envelope - Lesson 2
  20. Java怎样把时间转成毫秒_如何转换时间格式 java如何把时间格式转为毫秒

热门文章

  1. 【解决方法】 Flash cs4 安装之后打不开 启动界面总是一闪而过
  2. 两分钟学会线性同余法产生伪随机数
  3. nodejs EADDRINUSE API拒绝访问
  4. Java — set 和 list 集合练习题
  5. java进度条代码,java进度条代码该怎么编写?
  6. c语言源程序最多可能由组成,一个c语言源程序是由什么组成_后端开发
  7. C专家编程电子书pdf下载
  8. 28款数据恢复软件分类介绍
  9. GB2312简体中文编码表(转)
  10. 全球五十家知名传感器制造商分布盘点、特点分析