Systrace
在构造函数,修复bug。完成代码后,你应该花一些时间来专注于应用性能。应用视频像素和运行的运行速度和流畅度影响用户体验。
Android应用执行在一个共享资源的环境中,你的应用的性能会被与其交互的系统资源的效率所影响。应用也执行在一个多线程的环境中,与其他拥有线程的进程争夺资源,可能会引起非常难诊断的性能问题。
Systrace工具同意你收集和审查应用和Android系统的代码运行数据。你能够使用这些数据诊断运行中的问题以提升应用的性能。
- 概述
Systrace帮助你分析应用程序运行是怎么融入更大的Android系统的,让你在公共时间轴上看到系统和应用进程的运行。这个工具同意你在4.1或者更高的版本号生成更加具体的。可互动的报告。比方下图1的报告。
watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvZmFuZmFueGlhb3p1/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center" alt="">
- 生成Traces
为了创建应用的trace文件,你必须执行一系列的操作,首先。要有一个执行了Android 4.1或者更高版本号的设备,设置设备同意调试,连接到开发系统,装上应用。
一些类型的trace信息,特别是磁盘活动和内核工作队列。须要你有root权限,可是。大部分trace数据之须要设备同意开发人员调试。
Systrace 能够通过命令行和用户界面启动,本向导主要讲通过命令行的方法。
- 限制trace数据
Systrace工具能够生成应用和系统的潜在的巨大数据,为了限制工具收集的数据量,使数据与分析相关,使用以下的选项:
1.限制trace抓取的时间使用-t。--time选项,默认的trace时长是5s
2.限制trace抓取数据的size使用-b,--buf-size选项
3.指定哪些类型的进程被跟踪。能够被跟踪的进程在不同的Android版本号上面略有不同:
Android4.2和低于4.2的:使用--set-tags选项和--disk,--cpu-freq,--cpu-idle,--cpu-load选项
Android4.3和高于4.3的:使用--list-categories选项来查看类型列表
- 在4.3和大于4.3的版本号抓取trace信息
1.确保设备通过usb调试选项打开,并成功连接到电脑
2.指定要抓取的选项来运行trace。比如
$ cd android-sdk/platform-tools/systrace
$ python systrace.py --time=10 -o mynewtrace.html sched gfx view wm
3.在设备上。运行不论什么你想要被包括进trace信息的操作
- 在4.2和低于4.2的版本号抓取trace信息
在4.2和低于4.2的设备上面使用trace,为了提高效率,你必须在抓取之前配置想要跟踪的进程类型。工具能够收集以下进程类型的信息:
1.通常的系统进程,比方graphics。audio和input进程(使用trace category tags选择)
2.低级别的系统信息,比方CPU,kernel和磁盘活动(使用options选择)
使用以下的命令设置Systrace的tags:
1.使用--set-tags选项:
$ cd android-sdk/platform-tools/systrace
$ python systrace.py --set-tags=gfx,view,wm
2.重新启动adb使这些进程跟踪生效
$ adb shell stop
$ adb shell start
当你配置完trace的category tags,就能够開始收集信息来进行分析。
使用如今的trace tag设置来执行trace:
1.确保设备adb连接成功
2.运行trace并设定低级别的trace选项,限定选项等
$ python systrace.py --cpu-freq --cpu-load --time=10 -o mytracefile.html
3.在设备上,运行不论什么你想要被包括进trace信息的操作
- 跟踪应用代码
Systrace工具能够跟踪应用代码的运行,在4.3或者更高的版本号。你能够使用Trace类的方法来加入标志到应用的代码。然后在Systrace报告中查看结果。
以下的代码显示了怎么使用Trace类来跟踪应用方法的运行,包含两个嵌套的代码块。
public void ProcessPeople() {Trace.beginSection("ProcessPeople");
try {
Trace.beginSection("Processing Jane");
try {
// code for Jane task...
} finally {
Trace.endSection(); // ends "Processing Jane"
}
Trace.beginSection("Processing John");
try {
// code for John task...
} finally {
Trace.endSection(); // ends "Processing John"
}
} finally {
Trace.endSection(); // ends "ProcessPeople"
}
}
当trace方法嵌套时,endSection()方法结束近期的beginSection(String)方法。
这意味这一个在其它trace中開始的trace。不可能超过外围trace的结束位置,所以要确保開始和结束方法的位置在想要測试的进程中是合适的。
Traces必须在同一个线程中调用begin和end方法,不能在一个线程中调用begin,而在还有一个线程中调用end。
当使用应用级别的跟踪时,必须在用户界面设置应用的包名或者使用-a,--app=选项
- 分析Traces
当使用Systrace工具生成trace后。它列出了输出文件的位置,你能够打开使用web浏览器打开报告。
怎么使用trace收集的数据依赖与你要分析的性能问题。可是本章提供了一些通用的分析trace的方法。
Systrace生成的报告是可交互的。同意你放大缩小察看进程运行的细节。W键放大,S键缩小。A键往左移,D键往右移。
在时间轴上面选择一个任务。使用鼠标来获取这个任务很多其它的信息。
长时间执行的进程
一个良好的应用程序迅速并且有规律地运行很多细小的操作,一些操作的几毫秒内完毕,依据进程所在的设备有所不同,就在图2显示的
图2的trace显示了一个执行良好的应用进程有一个有规律的节奏(1),图2以下的区域放大了虚线圈起来部分,它显示了在执行过程中的一些不规则。
特别是,2标记的一个略微宽一点的task条。花费了略微长一点的时间(14ms),相比其它的。线程里相似的任务,平均在9到12毫秒就能够完毕。这个特殊的任务执行的时长貌似没有被用户注意到,除非它在特殊的时间影响还有一个进程,比方屏幕更新。
长时间执行的进程假设有一些bars比正常执行的bars宽,说明你的应用中有性能问题。
当trace中出现这个问题时。点击引起问题的task获取更加具体的信息,你也应该关注同一时间执行的其它进程,寻找被其它进程堵塞的进程中的线程。
- 显示运行中断
Systrace工具分析应用显示慢或者动画停止是很实用的,由于它显示了应用在多个系统进程中的运行。对于显示的运行。有规律节奏地绘制屏幕帧是良好的性能不能缺少的。有节奏规律地显示确保了屏幕上动画和移动的平滑。假设应用退出了这个节奏。从用户方面来看,显示会变得卡顿或者慢。
假设你正在分析应用这样的类型的问题,检查Systrace报告中应用程序运行的SurfaceFlinger进程,来寻找退出有规律节奏的位置。
图3显示了显示中断的区域。这个区域在SurfaceFlinger进程中,图示中的(1)位置。表明了显示帧的丢失。丢帧可能会导致显示卡顿或停止。进入下方trace的问题区域,显示了surfaceFlinger进程的内存操作花费时间过长。这个延时导致了应用widows显示的丢失。
作为这个应用的开发人员,你应该检查应用中的其它线程是否在同一时间尝试分配内存或者其它的请求和任务堵塞了内存分配。
SurfaceFlinger进程有规律节奏地运行是屏幕内容显示平滑的必要条件。特别是对动画和移动来说。线程中常规运行被中断并不一定意味着该问题是应用程序,从需要进一步的测试的用户的角度,以确定是否性能问题。能识别正常显示操作信息可以帮助您检测显示问题,平稳运行的构建,高性能应用。
当使用Systrace分析显示问题。请确保您设置Graphics和Views tag。
Systrace的更多相关文章
- Android性能优化之Systrace工具介绍(一) _&& Systrace生成的trace.html打开空白或者打不开的解决办法
1.必须用Chrome打开 2.在mac电脑上,可能Chrome打开也是空白,解决办法是:在chrome地址栏中输入”chrome:tracing”,然后点击load按钮load你的trace.htm ...
- 使用Systrace分析UI性能
开发应用的时候,应该检查它是否有流畅的用户体验,即60fps的帧率.如果由于某种原因丢帧,我们首先要做的就是知道系统在做什么(造成丢帧的原因). Systrace允许你监视和跟踪Android系统的行 ...
- Analyzing UI Performance with Systrace 使用systrace工具分析ui性能
While developing your application, you should check that user interactions are buttery smooth, runni ...
- 【工利其器】必会工具之(三)systrace篇(1)官网翻译
前言 Android 开发者官网中对systrace(Android System Trace)有专门的介绍,本篇文章作为systrace系列的开头,笔者先不做任何介绍,仅仅翻译一下官网的介绍.在后续 ...
- 【工利其器】必会工具之(三)systrace篇(2)
systrace工具打开路径 以AndroidStudio(后面简写为AS),在顶部菜单栏中 Tools>Android>Android Device Monitor 打开后看到如下界面, ...
- Android性能优化工具之Systrace
本文大部分内容来自:http://www.androidperformance.com/android-performance-tools-systrace-1.html?utm_source=tui ...
- App优化 Systrace
简介 trace [tres] vt.跟踪,追踪; 追溯,探索; 探索; 查找; n.痕迹; 痕迹,踪迹; 微量,极少量; 1 1 1 trace [tres] vt.跟踪,追踪; 追溯,探索; ...
- Android 常用的性能分析工具详解:GPU呈现模式, TraceView, Systrace, HirearchyViewer(转)
此篇将重点介绍几种常用的Android性能分析工具: 一.Logcat 日志 选取Tag=ActivityManager,可以粗略地知道界面Displaying的时间消耗.当我们打开一个Activit ...
- Android性能分析Systrace工具
一.概述 保证系统流畅度,也就是保证系统能连续不间断地提供每秒60帧的运行状态.当出现掉帧时(也可称为Jank),需要知道当前整个系统所处的状态,systrace便是最佳的选择,它能手机检测Andro ...
随机推荐
- 当用户登录,经常会有实时的下拉框,例如,输入邮箱,将会@qq.com,@163.com,@sohu.com
如图所示, 码,如以下:<input id="user_sn" class="loginInput" name="user_sn" t ...
- 玩转Web之Json(二)----jquery easy ui + Ajax +Json+SQL实现前后台数据交互
最近在学Json,在网上也找过一些资料,觉得有点乱,在这里,我以easy ui的登录界面为例来说一下怎样用Json实现前后台的数据交互 使用Json,首先需要导入一些jar包,这些资源可以在网上下载到 ...
- RH033读书笔记(11)-Lab 12 Configuring the bash Shell
Sequence 1: Configuring the bash Shell Deliverable: A system with new aliases that clear the screen, ...
- vb.net它SqlHelper制备及应用
上次文章中说到.对于一个项目来说.SqlHelper是一个非常重要的类. 在正在构造的机房收费系统中.有大量的操作数据库的操作. 现在.把反复的代码所有拿出来,就形成了SqlHelper类.这个Sql ...
- [原创].NET 业务框架开发实战之八 业务层Mapping的选择策略
原文:[原创].NET 业务框架开发实战之八 业务层Mapping的选择策略 .NET 业务框架开发实战之八 业务层Mapping的选择策略 前言:在上一篇文章中提到了mapping,感觉很像在重新实 ...
- JMS分布式应用程序异步消息解决方案EhCache
高速缓存同步问题
部分博客中描述的使用拦截器怎么用EJB公布的WebService加入缓存,这样能够提高WebService的响应效率.但是即使是这样做,还是要经历网络的传输的.于是决定在调用WebService的程序 ...
- mouseover与mouseenter与mousemove差额mouseout与mouseleave差额
<1> HTML <html> <head> <title></title> </head> <body> < ...
- 原产地政策,jsonp跨域
一.同源策略 同源策略(Same origin policy)是一种约定,它是浏览器最核心也最主要的安全功能,假设缺少了同源策略,则浏览器的正常功能可能都会受到影响.能够 ...
- Nuget的使用
前言 最近看到园子上有关于NuGet (读音:new get)的使用,所以心血来潮也跟着学习做了一下,觉得很流b哦.于是也就记一下自己的学习心得(并非一味的重复轮子,只是觉得他人做的写的就是对的,自己 ...
- XML数组和对象,反之亦然
惊人的互相转换,还是因为麻烦.程序很反感麻烦猿 1 阵转xml <?php /* 一维数组转xml 思路: 循环数组每一个单元,添加到xml文档节点中去 */ /* $arr = array( ...