前言:雖然有翻譯軟件纯露,雖然有chatgpt,畢竟語言隔閡岳掐,對這個工具還是一知半解魔吐,因此想通過翻譯的方式和大家來一起學習下Perfetto這個強大的工具
#####################以下分割線#####################
英文原文在這里
ATrace:安卓系統(tǒng)和應用跟蹤事件
在 Android 上航缀,應用可以將自定義切片和計數器跟蹤點注入trace序调。這可以通過以下方法實現(xiàn):
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路由的匿值,現(xiàn)在和將來都將繼續(xù)得到Perfetto的支持。
有兩種類型的trace事件:系統(tǒng)和應用事件赂摆。
系統(tǒng)事件: :僅由使用 libcutils 的 Android 內部發(fā)出千扔。這些事件按類別(也稱為標簽)分組,例如“am”(ActivityManager)库正,“pm”(PackageManager)曲楚。有關類別的完整列表,請參閱 Perfetto UI的“Record new trace page of the”頁褥符。
這些類別可用于啟用跨多個進程的事件組龙誊,而不必擔心哪個特定的系統(tǒng)進程發(fā)出它們。
應用事件: 具有相同的系統(tǒng)事件語義喷楣。但是趟大,與系統(tǒng)事件不同的是,它們沒有任何標記篩選功能(所有應用事件共享同一標記 ATRACE_TAG_APP
)铣焊,但可以基于每個應用啟用逊朽。
有關如何啟用系統(tǒng)和應用事件的說明,請參閱下面的 TraceConfig 部分曲伊。
檢測開銷
ATrace 每個事件 1-10us 的不可忽視的成本叽讳。這是因為每個事件都涉及字符串化、JNI 調用(如果來自native運行環(huán)境)以及用戶空間 < >內核空間之前的調用坟募,以將標記寫入其中 /sys/kernel/debug/tracing/trace_marker
(這是最耗時的部分)岛蚤。
我們的團隊專門針對android,移植一個輕量版的 Tracing SDK 懈糯。但目前涤妒,建議繼續(xù)在Android上使用現(xiàn)有的ATrace API。
UI
在 UI 級別赚哗,這些函數在進程組的范圍內創(chuàng)建切片和計數器她紫,如下所示:
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
計數器
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
跟蹤配置
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 水平實在有限荣病,聞過則喜,希望有更多的人反饋渗柿,期待更好的建議