| –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 APItrace.h将跟踪事件写入系统缓冲区,然后使用Systrace进行分析。此API的常见用例包括观察特定代码块执行的时间以及将代码块与不良系统行为相关联的时间。

要定义应用或游戏中本机代码中发生的自定义事件,请完成以下步骤:

1、定义用于捕获游戏中自定义事件的ATrace函数的函数指针,如以下代码段所示:

#include <android/trace.h>

#include <dlfcn.h>

Android性能优化–Systrace工具,移动网页开发工具相关推荐

  1. 抖音 Android 性能优化:新一代全能型性能分析工具 Rhea!

    本文选自「抖音 Android 性能优化」系列文章. 「抖音 Android 性能优化」系列文章是由抖音 Android 基础技术部门技术专家倾力打造的技术干货内容,和大家分享基础技术团队在打造极致用 ...

  2. 抖音 Android 性能优化系列:新一代全能型性能分析工具 Rhea

    本文选自「抖音 Android 性能优化」系列文章. 「抖音 Android 性能优化」系列文章是由抖音 Android 基础技术部门技术专家倾力打造的技术干货内容,和大家分享基础技术团队在打造极致用 ...

  3. Android 性能优化工具

    Android 性能优化工具 这段时间总结了一些常用的性能优化工具,当然这些并没有包含全部的工具,下面稍微对这些工具做个简单的总结: 1.应用codeReview工具 StrictMode 检测应用主 ...

  4. 【Android 性能优化】布局渲染优化 ( GPU 过度绘制优化总结 | CPU 渲染过程 | Layout Inspector 工具 | View Tree 分析 | 布局组件层级分析 )

    文章目录 一. GPU 过度绘制优化总结 二. CPU 渲染过程 三. CPU 渲染性能调试工具 Layout Inspector 四. Layout Inspector 组件树 DecorView ...

  5. Android 性能优化工具 TraceView 简单使用

    背景 最近产品以及测试大佬反应快搜桌面进入搜索页面跳转较为缓慢,影响体验,为了优化这个问题,特地学习Android 性能优化工具 TraceView的 简单使用,这才有了本文. 正文 如下图打开and ...

  6. Android性能优化典范第二季

    原文链接:http://hukai.me/android-performance-patterns-season-2/ 1)Battery Drain and Networking 对于手机程序,网络 ...

  7. Android性能优化典范笔记(1)-GPU绘制性能优化

    Android性能优化典范笔记(1)-GPU绘制性能优化 你还可以再Github上找到我的这篇文章:https://github.com/onlynight/ReadmeDemo/tree/maste ...

  8. Android 系统性能优化(80)---Android性能优化:这是一份详细的布局优化 指南(含lt;includegt;、lt;Viewstubgt;、lt;mergegt;)

    Android性能优化:这是一份详细的布局优化 指南(含<include>.<Viewstub>.<merge>) 前言 在 Android开发中,性能优化策略十分 ...

  9. Android 系统性能优化(14)---Android性能优化典范 - 第2季

    1)Battery Drain and Networking 对于手机程序,网络操作相对来说是比较耗电的行为.优化网络操作能够显著节约电量的消耗.在性能优化第1季里面有提到过,手机硬件的各个模块的耗电 ...

最新文章

  1. 散列表的设计与实现_python基础之字典与集合实现
  2. C++中“引用”的底层实现
  3. Android OTA 升级之三:生成recovery.img
  4. 深入浅出Javascript闭包
  5. char数组转string_String类和其它数据类型的相互转换
  6. 一个unity2d横版小游戏
  7. 利用Multisim快速分析一个RC电路
  8. 如何查看java安装路径
  9. 一次局域网入侵全过程
  10. 利用leaflet做一个飞机航线 可根据方向动态掉头
  11. 我是一名朝九晚五的程序员
  12. 试述Linux内核启动过程,Linux内核启动过程和Bootloader(总述)
  13. c语言 code table,单片机C语言unsigned char code table是什么意思?
  14. Eclipse for C/C++ 版本怎么安装JDT(Java Development Tools)
  15. 软件工程毕业设计选题java_2021年计算机专业Java相关毕业设计如何选题更容易通过...
  16. wiki维基百科各种语料数据下载
  17. HDMI端口辐射(EMI)超标解决方案
  18. 七牛云存储java上传图片
  19. 【错误记录】Android 应用安全检测漏洞修复 ( StrandHogg 漏洞 | 设置 Activity 组件 android:taskAffinity=““ )
  20. My Hundredth Page - 回文子串 - By Nicolas

热门文章

  1. 怎么每天都有人去自杀
  2. 【笨嘴拙舌WINDOWS】GDI(1)
  3. Basic access authentication
  4. Elasticsearch TLS 激活:X-Pack 安全性
  5. 移动端图片鉴黄(可离线识别 200ms)
  6. 如何使用Python将语音转换为文本,你知道吗?
  7. 服务器iscsi如何修复,iscsi错误处理
  8. 服务器的文件防误删的软件,服务器共享文件防复制软件、共享文件防删除软件的选择方法...
  9. 企宣java开发项目答辩_java答辩ppt模板
  10. anaconda安装-超详细版