Perfetto 翻译第十九篇-数据来源-ATrace
前言:虽然有翻译软件,虽然有chatgpt,毕竟语言隔阂,对这个工具还是一知半解,因此想通过翻译的方式和大家来一起学习下Perfetto这个强大的工具
#####################以下分割线#####################
英文原文在这里
ATrace:安卓系统和应用跟踪事件
在 Android 上,应用可以将自定义切片和计数器跟踪点注入trace。这可以通过以下方法实现:
-
Java/Kotlin apps (SDK):
android.os.Trace
. 参阅 https://developer.android.com/reference/android/os/Trace. -
Native processes (NDK):
ATrace_beginSection() / ATrace_setCounter()
在 中<trace.h>
定义。请参阅 https://developer.android.com/ndk/reference/group/tracing. -
Android 内部流程:
ATRACE_BEGIN()/ATRACE_INT()
在libcutils/trace.h
中定义。
此 API 自 Android 4.3(API 级别 18)起可用,比 Perfetto更早。所有这些注解在内部都是通过libcutils API路由的,现在和将来都将继续得到Perfetto的支持。
有两种类型的trace事件:系统和应用事件。
系统事件: :仅由使用 libcutils 的 Android 内部发出。这些事件按类别(也称为标签)分组,例如“am”(ActivityManager),“pm”(PackageManager)。有关类别的完整列表,请参阅 Perfetto UI的“Record new trace page of the”页。
这些类别可用于启用跨多个进程的事件组,而不必担心哪个特定的系统进程发出它们。
应用事件: 具有相同的系统事件语义。但是,与系统事件不同的是,它们没有任何标记筛选功能(所有应用事件共享同一标记 ATRACE_TAG_APP
),但可以基于每个应用启用。
有关如何启用系统和应用事件的说明,请参阅下面的 TraceConfig 部分。
检测开销
ATrace 每个事件 1-10us 的不可忽视的成本。这是因为每个事件都涉及字符串化、JNI 调用(如果来自native运行环境)以及用户空间 < >内核空间之前的调用,以将标记写入其中 /sys/kernel/debug/tracing/trace_marker
(这是最耗时的部分)。
我们的团队专门针对android,移植一个轻量版的 Tracing SDK 。但目前,建议继续在Android上使用现有的ATrace API。
UI
在 UI 级别,这些函数在进程组的范围内创建切片和计数器,如下所示:
![](https://img.haomeiwen.com/i2972443/c91e2db887328770.png)
SQL
在 SQL 级别,ATrace 事件在标准 slice
和计数表中可用,以及来自其他数据源的其他计数器和 counter
切片。
切片
select s.ts, t.name as thread_name, t.tid, s.name as slice_name, s.dur
from slice as s left join thread_track as trk on s.track_id = trk.id
left join thread as t on trk.utid = t.utid
![](https://img.haomeiwen.com/i2972443/f1c55cc7da01d95d.png)
计数器
select ts, p.name as process_name, p.pid, t.name as counter_name, c.value
from counter as c left join process_counter_track as t on c.track_id = t.id
left join process as p on t.upid = p.upid
![](https://img.haomeiwen.com/i2972443/be2971bf5de0eeb4.png)
跟踪配置
buffers {
size_kb: 102400
fill_policy: RING_BUFFER
}
data_sources {
config {
name: "linux.ftrace"
ftrace_config {
# Enables specific system events tags.
atrace_categories: "am"
atrace_categories: "pm"
# Enables events for a specific app.
atrace_apps: "com.google.android.apps.docs"
# Enables all events for all apps.
atrace_apps: "*"
}
}
}
#####################以上分割线#####################
后记:
1 本次主要使用百度翻译,虽然被骂,但至少翻译这个工具降低了门槛。
2 英文文档中的长难句真的是又长又难,基于百度的翻译,然后自己再调整下,水平实在有限。
3 技术背景知识不够,有些专有名词不知道怎么翻译,也不知道百度翻译的是否准确,功夫在诗外。
4 万事开头难,中间难不难,还不知道。中间的事后面再说,正确一天翻译一篇。
5 虽然可能会有人不屑,但总要有人去做不起眼的小事。
6 google 厉害,这个perfetto 工具也很厉害。君子善假于物也。
7 工具的使用是最简单的入门,背后还有更多的东西值得学习。
8 水平实在有限,闻过则喜,希望有更多的人反馈,期待更好的建议