Android性能优化–Systrace工具,移动网页开发工具
| –walt | WALT trace options | 测量手机和计算机上物理传感器和输出的延迟 |
获取报告
无时间限制,需要enter键开始
./systrace.py -o trace.html sched freq idle am wm gfx view binder_driver hal dalvik camera input res
加时间参数
./systrace.py -o trace.html -t 12 sched freq idle am wm gfx view binder_driver hal dalvik camera input res
完成后使用chrome打开得到的文件即可
获取报告的命令执行,file路径为报告文件路径
Android9以上版本也可以通过开发者模式
获取
次方式不推荐使用
打开系统跟踪
开启记录
停止记录
分享记录文件
通过消息或通过ADB共享跟踪时,报告本身驻留在.ctrace文件中。使用此文件,可以生成跟踪的HTML报告。为此,请在终端窗口中运行以下命令:
cd / path-to-traces-on-my-dev-machine && \
systrace –from-file trace-file-name .ctrace
但是需要systrace命令行程序
报告分析
====
Systrace生成包含一系列部分的输出HTML文件。该报告列出了每个进程的线程。如果给定线程呈现UI帧,则报告还指示沿时间线的呈现帧。当在报告中从左向右移动时,时间会向前传递。
报告从上到下包含以下部分
- UI交互活动
第一部分包含表示应用或游戏中特定用户交互的条形图,例如点击设备屏幕。这些相互作用充当有用的时间标记
UI交互活动
- CPU活动
显示了表示每个CPU中的线程活动的条形图。条形图显示所有应用程序(包括您的应用程序或游戏)的CPU活动。
折叠的CPU活动部分的示例
折叠图
CPU活动部分是可扩展的,允许您查看每个CPU的时钟频率
CPU活动(展开视图),显示Systrace报告中的CPU时钟频率
- 系统事件
直方图显示特定的系统级事件,例如纹理计数和特定对象的总大小。
系统级事件
值得仔细检查的直方图是标记为SurfaceView的直方图。计数表示已传递到显示管道并等待在设备屏幕上显示的组合帧缓冲区的数量。由于大多数设备都是双缓冲或三缓冲,因此该计数几乎总是0,1或2。
描述Surface Flinger过程的其他直方图,包括VSync事件和UI线程交换工作,如下图
Systrace报告中的Surface Flinger示例图
- 显示框架
显示框架
这一部分,通常是报告中最多的部分,描绘了一条彩色线条,后面是成堆的条形图。这些形状表示已创建的特定线程的状态和帧堆栈。
UI线程或应用程序或游戏通常运行的主线程始终显示为第一个线程。
帧堆栈信息
每堆条形图上方的多色线表示特定线程随时间变化的状态集。该行的每个部分可以包含以下颜色之一:
绿色:Running
线程正在完成与进程相关的工作或正在响应中断。
蓝色:Runnable
线程可以运行但当前没有安排。
白色:Sleeping
线程没有工作要做,可能是因为线程在互斥锁上被阻塞。
橙色:Uninterruptable sleep(不间断的睡眠)
线程在I / O上被阻塞或等待磁盘操作完成。
紫色:Interruptable sleep(可以中断睡眠)
线程在另一个内核操作(通常是内存管理)上被阻塞。
- 报告分析操作快捷键
| key | 描述 |
| — | — |
| W | 放大时间轴 |
| A | 在跟踪时间线上左移 |
| S | 缩小时间轴 |
| D | 在跟踪时间轴上向右平移 |
| E | 将跟踪时间轴置于当前鼠标位置的中心 |
| M | 选中当前帧 |
| 1 | 将当前活动的选择模型更改为“选择”模式。对应于鼠标选择器工具栏中显示的第一个按钮 |
| 2 | 将当前活动的选择模型更改为“平移”模式。对应于鼠标选择器工具栏中显示的第二个按钮 |
| 3 | 将当前活动的选择模型更改为“缩放”模式。对应于鼠标选择器工具栏中显示的第3个按钮 |
| 4 | 将当前活动的选择模型更改为“计时”模式。对应于鼠标选择器工具栏中显示的第4个按钮 |
| G | 在当前所选任务的开头显示网格 |
| Shift + G | 在当前所选任务的末尾显示网格 |
| 左键 | 在当前选定的时间轴上选择上一个事件 |
| 右键 | 选择当前所选时间轴上的下一个事件 |
自定义systrace数据获取
===============
以上数据默认仅在系统级别向显示有关进程的信息,因此有时很难知道应用程序或游戏的哪些方法在给定时间相对于系统事件执行。
Android平台提供了一个trace API,可以使用它来标记特定的代码段。如果捕获应用程序“debug”
版本的新系统跟踪并包含该-a选项,如下面的代码段所示,这些自定义事件将显示在Systrace报告中:
python systrace.py -a com.zerone.qrcode -b 16384 -o my_systrace_report.html sched freq idle am wm gfx view binder_driver hal dalvik camera input res
java 层code
堆栈的每个级别代表为应用或游戏定义beginSection()
的自定义跟踪事件的调用或开始
Trace.beginSection(String sectionName)
和Trace.endSection()
需要成对出现
- 为保证每个
Trace.beginSection(String sectionName)
都会有对应的Trace.endSection()
,建议使用try {……} finally {……}
- 如果在
Trace.endSection()
之前有多个Trace.beginSection(String sectionName)
,Trace.endSection()
会匹配离它最近的一个未匹配过的Trace.beginSection(String sectionName)
Trace.beginSection(String sectionName)
和Trace.endSection()
需要在同一线程中
public class MyAdapter extends RecyclerView.Adapter {
@Override
public MyViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
Trace.beginSection(“MyAdapter.onCreateViewHolder”);
MyViewHolder myViewHolder;
try {
myViewHolder = MyViewHolder.newInstance(parent);
} finally {
//在try和catch语句中,总是在a中调用“endSection()”
//“终于”阻止。这样,即使在a时也调用该方法
//发生异常。
Trace.endSection();
}
return myViewHolder;
}
@Override
public void onBindViewHolder(MyViewHolder holder, int position) {
Trace.beginSection(“MyAdapter.onBindViewHolder”);
try {
try {
Trace.beginSection(“MyAdapter.queryDatabase”);
RowItem rowItem = queryDatabase(position);
dataset.add(rowItem);
} finally {
Trace.endSection();
}
holder.bind(dataset.get(position));
} finally {
Trace.endSection();
}
}
}
Native层code
Android 6.0(API级别23)及更高版本支持native trace API
,trace.h
将跟踪事件写入系统缓冲区,然后使用Systrace
进行分析。此API的常见用例包括观察特定代码块执行的时间以及将代码块与不良系统行为相关联的时间。
要定义应用或游戏中本机代码中发生的自定义事件,请完成以下步骤:
1、定义用于捕获游戏中自定义事件的ATrace函数的函数指针,如以下代码段所示:
#include <android/trace.h>
#include <dlfcn.h>
Android性能优化–Systrace工具,移动网页开发工具相关推荐
- 抖音 Android 性能优化:新一代全能型性能分析工具 Rhea!
本文选自「抖音 Android 性能优化」系列文章. 「抖音 Android 性能优化」系列文章是由抖音 Android 基础技术部门技术专家倾力打造的技术干货内容,和大家分享基础技术团队在打造极致用 ...
- 抖音 Android 性能优化系列:新一代全能型性能分析工具 Rhea
本文选自「抖音 Android 性能优化」系列文章. 「抖音 Android 性能优化」系列文章是由抖音 Android 基础技术部门技术专家倾力打造的技术干货内容,和大家分享基础技术团队在打造极致用 ...
- Android 性能优化工具
Android 性能优化工具 这段时间总结了一些常用的性能优化工具,当然这些并没有包含全部的工具,下面稍微对这些工具做个简单的总结: 1.应用codeReview工具 StrictMode 检测应用主 ...
- 【Android 性能优化】布局渲染优化 ( GPU 过度绘制优化总结 | CPU 渲染过程 | Layout Inspector 工具 | View Tree 分析 | 布局组件层级分析 )
文章目录 一. GPU 过度绘制优化总结 二. CPU 渲染过程 三. CPU 渲染性能调试工具 Layout Inspector 四. Layout Inspector 组件树 DecorView ...
- Android 性能优化工具 TraceView 简单使用
背景 最近产品以及测试大佬反应快搜桌面进入搜索页面跳转较为缓慢,影响体验,为了优化这个问题,特地学习Android 性能优化工具 TraceView的 简单使用,这才有了本文. 正文 如下图打开and ...
- Android性能优化典范第二季
原文链接:http://hukai.me/android-performance-patterns-season-2/ 1)Battery Drain and Networking 对于手机程序,网络 ...
- Android性能优化典范笔记(1)-GPU绘制性能优化
Android性能优化典范笔记(1)-GPU绘制性能优化 你还可以再Github上找到我的这篇文章:https://github.com/onlynight/ReadmeDemo/tree/maste ...
- Android 系统性能优化(80)---Android性能优化:这是一份详细的布局优化 指南(含lt;includegt;、lt;Viewstubgt;、lt;mergegt;)
Android性能优化:这是一份详细的布局优化 指南(含<include>.<Viewstub>.<merge>) 前言 在 Android开发中,性能优化策略十分 ...
- Android 系统性能优化(14)---Android性能优化典范 - 第2季
1)Battery Drain and Networking 对于手机程序,网络操作相对来说是比较耗电的行为.优化网络操作能够显著节约电量的消耗.在性能优化第1季里面有提到过,手机硬件的各个模块的耗电 ...
最新文章
- pycharm 中写代码的提示的前符号 p,m ,c,v, f 是什么意思
- 视频 + PPT | 财富管理转型,券商如何精细化运营?
- Elasticsearch(二)概念及安装、部署
- Java继承多态经典案例分享
- LVS负载均衡-NAT模式
- HTML图片元素(标记)
- UVA - 1339 ​​​​​​​Ancient Cipher
- self_number
- html mht word,mht格式怎么转换成word
- 代码整洁之道—技术分享
- 王道训练营3月27日
- 计算机基础ps变换蝴蝶,在PS中用自由变换制作飞舞的蝴蝶和用内容识别比例缩放的操作过程...
- 苹果logo_苹果 ARM Mac 发布会独特标志 Logo 亮相
- 继电器模块典型电路图
- zigbee抓包实验过程
- 打开Chrome浏览器显示“喔唷 崩溃啦”错误的解决方法
- Python趣味篇:字符串中的趣味瞬间
- 离散数学中 集合、关系、群 的证明方法(英文证明附例题)
- Win7系统无法验证文件数字签名(0xcoooo428)最佳解决方法
- 【学习笔记】从零开始造一个汗液检测穿戴设备——01.葡萄糖电化学检测
热门文章
- 彭涛:普通人如何通过个人 IP变现?
- opencv-图像金字塔
- maptalks常见操作——图层置顶置底、添加清空图层、添加标注、切换底图、添加缩放工具、事件监听(点击面出弹框)、右键菜单、绘制mark、锁定视角
- 告别RNN,迎来TCN!将深度学习应用于股市预测
- 2021 ICPC Southeastern Europe Regional Contest(更新至六题)
- threejs 的思维导图
- music功能 vue_Vue 全家桶实现移动端酷狗音乐功能
- 解决:Error: Cannot retrieve metalink for repository: epel. Please verify its path and try again
- 英特尔的低于服务器的作用是什么,什么是英特尔至强服务器,它和酷睿CPU服务器的区别是什么?...
- Server2019配置iscsi