android追踪工具Trace概述
systrace
systrace 是分析 Android 设备性能的主要工具。不过,它实际上是其他工具的封装容器:它是 atrace 的主机端封装容器,是用于控制用户空间跟踪和设置 ftrace 的设备端可执行文件,也是 Linux 内核中的主要跟踪机制。systrace 使用 atrace 来启用跟踪,然后读取 ftrace 缓冲区并将其全部封装到一个独立的 HTML 查看器中(虽然较新的内核支持 Linux 增强型柏克莱封包过滤器 (eBPF),但以下文档内容仅适用于 3.18 内核(无 eFPF),因为 Pixel/Pixel XL 上使用的是 3.18 内核)。
它的思想很朴素,在系统的一些关键链路(比如System Service,虚拟机,Binder驱动)插入一些信息(我这里称之为Label),通过Label的开始和结束来确定某个核心过程的执行时间,然后把这些Label信息收集起来得到系统关键路径的运行时间信息,进而得到整个系统的运行性能信息。Android Framework里面一些重要的模块都插入了Label信息(Java层的通过android.os.Trace类完成,native层通过ATrace宏完成)
能生成chrome tracing 格式的数据,支持所有进程的监控
目前已有在java里面很容易埋点
native层,ATrace宏在base/trace_event/trace_log.h 中定义了 startATrace 写法,好像是通过jni调用相关方法,实现 ATrace
base/android/java/src/org/chromium/base/TraceEvent.java 有定义
好像和chrome tracing 实现有区别
使用 atrace查看 exo 起播
Simpleperf
Simpleperf 是一款适用于 Android 平台上的应用和本机进程的原生分析工具
Android Studio -CPU profiler
https://developer.android.google.cn/studio/profile/cpu-profiler
对 Java 方法采样
:在应用的 Java 代码执行期间,频繁捕获应用的调用堆栈。分析器会比较捕获的数据集,以推导与应用的 Java 代码执行有关的时间和资源使用信息。
基于采样的跟踪存在一个固有的问题,那就是如果应用在捕获调用堆栈后进入一个方法并在下次捕获前退出该方法,分析器将不会记录该方法调用。如果您想要跟踪生命周期如此短的方法,应使用检测跟踪。
跟踪 Java 方法
:在运行时检测应用,以在每个方法调用开始和结束时记录一个时间戳。系统会收集并比较这些时间戳,以生成方法跟踪数据,包括时间信息和 CPU 使用率。
请注意,与检测每个方法相关的开销会影响运行时性能,并且可能会影响分析数据;对于生命周期相对较短的方法,这一点更为明显。此外,如果应用在短时间内执行大量方法,则分析器可能很快就会超出其文件大小限制,因而不能再记录更多跟踪数据。
对 C/C++ 函数采样:捕获应用的原生线程的采样跟踪数据。要使用此配置,您必须将应用部署到搭载 Android 8.0(API 级别 26)或更高版本的设备上。
原生跟踪
这个好像新建本地的C++文件,调用android系统的 trace.h ,好像和谷歌浏览器代码不耦合
NDK trance.h
原生跟踪
本指南介绍如何使用原生跟踪 API (trace.h
),将跟踪事件写入系统缓冲区。 然后,您可通过使用 Systrace 工具,分析此跟踪输出。 Android API 级别 23 及更高版本支持原生跟踪 API。
概览
如所述,在原生代码中创建自定义跟踪与 Java 编程语言的技巧相似跟踪应用代码。 一般来说,您不必将原生跟踪代码输入 try/catch 块,除非跟踪的分区引发原生异常,或使用早期返回。
除非可能造成跟踪文件损坏,否则请针对每个 ATrace_beginSection()
调用,执行相应的 ATrace_endSection()
调用。
若要在未启用跟踪时避免构建复杂字符串或参数,您可通过调用 ATrace_isEnabled() 添加锁定
。
跟踪功能
原生跟踪 API 的一个用例是观察特定代码块使用的时间。 一般来说,此类跟踪发生在管道处理阶段(例如,解码图像、绘制帧或等待网络请求时)。
若要跟踪代码块使用的时间,请遵循以下步骤:
添加
trace.h
标头文件。
#include <android/trace.h>
2. 指定一个变量作为以下项目的分区名称:
ATrace_beginSection()
。 在要跟踪的代码块末尾,针对以下项目执行相应的调用:
ATrace_endSection()
。 当跟踪的分区引发原生异常或使用早期返回时,这一点尤其重要。
void myExpensiveFunction() {
ATrace_beginSection(“myExpensiveFunction”);
… // trace-worthy work here
ATrace_endSection();
}
3. (可选)创建便捷的对象/宏结构来跟踪代码块。 以下示例显示您如何实现此类名为
ATRACE_CALL()
的对象/宏。```C++
#define ATRACE_NAME(name) ScopedTrace ___tracer(name)// ATRACE_CALL is an ATRACE_NAME that uses the current function name.
#define ATRACE_CALL() ATRACE_NAME(__FUNCTION__)class ScopedTrace {public:inline ScopedTrace(const char *name) {ATrace_beginSection(name);}inline ~ScopedTrace() {ATrace_endSection();}
};
您可使用
ATRACE_CALL()
对象/宏,按照如下方式简化上一步中的代码。 通过这种方式使用对象/宏,当跟踪的分区引发异常或使用早期返回时,您无需担心添加 try/catch 块。
void myExpensiveFunction() { ATRACE_CALL(); ... // trace-worthy work here}
敲重点
media里面的tarce比较少
v8里面就比较多
perfetto
属于AOSP项目,“Android Open-Source Project"的缩写。中文意为"Android 开放源代码项目”。
一个 比chromium更高效与简单的工具,通知能够过滤隐私问题()。支持的更加漂亮的UI和更大的日志,可以达到GB。是谷歌官方的工具,目的是取代现有TRACE_EVENT 工具,TRACE_EVENT 工具过于复杂和繁琐。
Telemetry - tracing
Telemetry is the performance testing framework used by Chrome. It allows you to perform arbitrary actions on a set of web pages (or any android application!) and report metrics about it. The framework abstracts:
- Launching a browser with arbitrary flags on any platform.
- Opening a tab and navigating to the page under test.
- Launching an Android application with intents through ADB.
- Fetching data via the Inspector timeline and traces.
- Using Web Page Replay to cache real-world websites so they don’t change when used in benchmarks.
Catapult
一个性能监测工具结合,包括数据收集、展示与分析。通过用于google开发工程师分析、测试和检测chrome,也用于分析和监测web页面,甚至Android apps
ATRACE
- Java/Kotlin apps (SDK):
android.os.Trace
. See https://developer.android.com/reference/android/os/Trace. - Native processes (NDK):
ATrace_beginSection() / ATrace_setCounter()
defined in<trace.h>
. See https://developer.android.com/ndk/reference/group/tracing. - Android internal processes:
ATRACE_BEGIN()/ATRACE_INT()
defined in [libcutils/trace.h
](https://cs.android.com/android/platform/superproject/+/master:system/core/libcutils/include/cutils/trace.h?q=f:trace libcutils).
android追踪工具Trace概述相关推荐
- 【Android CPU 优化】Android CPU 调优 ( Trace 文件分析 | Android Profiler 工具 | CPU Profiler 工具 )
文章目录 一.Android CPU 优化 二.CPU Profiler 工具 三.相关资源 一.Android CPU 优化 在 Android 中 , 出现 动画掉帧 , 页面切换白屏 , 卡顿 ...
- oracle trace跟踪,浅析Oracle追踪工具SQL Trace的启用方式
SQL Trace是Oracle提供的用于举行SQL追寻的手段,是强有力的帮助诊断工具.在平时的数据库问题诊断和处理中,SQL TRACE是极其常用的措施. SQL TRACE的顺次追寻能够分为以下几 ...
- SQL Server中追踪器Trace的介绍和简单使用
原文:SQL Server中追踪器Trace的介绍和简单使用 一.What is Trace? 对于SQL Profiler这个工具相信大家都不是很陌生,没用过的朋友可以在SQL Server Man ...
- Android开发工具类 Utils
包括了各种工具类.辅助类.管理类等 Awesome_API: https://github.com/marktony/Awesome_API/blob/master/Chinese.md 收集中国国内 ...
- Android开发工具类
包括了各种工具类.辅助类.管理类等 Awesome_API: https://github.com/marktony/Awesome_API/blob/master/Chinese.md 收集中国国内 ...
- 服务调用追踪工具skywalking实践
skywalking简介 skywalking是一个开源的可观测平台,用于收集.分析.聚合和可视化来自服务和云原生基础设施的数据.skywalking提供了一种简单的方式来维护您的分布式系统的清晰视图 ...
- 链路追踪工具 skywalking
链路追踪工具 skywalking 一.关于应用性能监控 APM(Application Performance Monitor) 对于单体应用,性能分析相对简单,不同的语言都提供了工具,在代码层面埋 ...
- Android开发工具类集合
各种帮助类汇总:https://github.com/Blankj/AndroidUtilCode 常用的 ios 风格 dialog 和 meterial design 风格的 dialog:htt ...
- android SDK工具下载
动手开发安卓之前,必须先准备好开发的工具. 一.下载方法 1.从https://developer.android.com/studio/index.html下载Android SDK tools 2 ...
最新文章
- 服务器虚拟化改写存储演进图
- 步进电机加减速算法介绍和基于AVR446_Linear speed control of stepper motor的步进电机加减速实现
- 皮一皮:死要面子啊...
- Aduna ClusterMap 的说明
- 干了10年软件工程师,我学到10个教训
- 73. Leetcode 230. 二叉搜索树中第K小的元素 (二叉搜索树-中序遍历类)
- 銷售訂單 (Sales Order): 資料表及更新記錄
- 我是如何学习写一个操作系统(九):文件系统
- 电脑打字手指正确姿势_正确的弹琴手型,应该是怎样的?
- 安卓应用安全指南 4.7 使用可浏览的意图
- 有哪些写给自己的句子?
- 中农大计算机组成原理在线作业1,河北农大2017计算机组成原理_在线作业_1课案.docx...
- 23种设计模式(十一)对象性能之单件模式
- pubmed显示服务器不稳定,你的pubmed又不能显示影响因子了,因为 ……
- SQLServer中替换某字段的部分内容
- Node.js 整合 Express 框架实现微信支付和支付宝支付
- 量子计算机、奥数AI……这是2020计算机、数学的重大突破
- C语言期末考试成绩奖励编码,C语言期末考试总结,看完保你过
- linux常用基本命令
- AMA指标代码逐一解释,附源码(python)