Rekaman aktivitas Winscope dapat dikumpulkan dengan command line adb
pada build debug
(yaitu, build userdebug
dan eng
). Sebelum mengumpulkan rekaman aktivitas Winscope
dengan adb
, jalankan adb root
.
Mulai Android 15, rekaman aktivitas Winscope diintegrasikan ke dalam Perfetto dan dikumpulkan menggunakan command line Perfetto. Setiap rekaman aktivitas Winscope adalah sumber data Perfetto dengan konfigurasi sendiri. Anda dapat mengaktifkan konfigurasi satu per satu atau dalam satu sesi pelacakan.
Di Android 14 dan yang lebih lama, setiap rekaman aktivitas Winscope memiliki perintah yang berbeda dan Anda dapat mengumpulkannya secara terpisah. Lihat Merekam rekaman aktivitas di Android 14 dan yang lebih lama untuk mengetahui informasi selengkapnya.
WindowManager
Gunakan nama sumber data android.windowmanager
untuk jenis rekaman aktivitas ini.
Opsi konfigurasi
Tingkat log (
log_level
): Menentukan panjang log. Nilai yang didukung:LOG_LEVEL_VERBOSE
: Mencatat semua elemen dengan jumlah informasi maksimum.LOG_LEVEL_DEBUG
: Mencatat semua elemen, tetapi tidak menulis semua data konfigurasi.LOG_LEVEL_CRITICAL
: Hanya mencatat elemen yang terlihat, dengan jumlah overhead performa minimum.
Frekuensi log (
log_frequency
): Menentukan frekuensi item yang dicatat ke dalam log:LOG_FREQUENCY_FRAME
: Melacak snapshot status saat frame di-commit.LOG_FREQUENCY_TRANSACTION
: Melacak snapshot status setiap kali transaksi dilakukan.LOG_FREQUENCY_SINGLE_DUMP
: Melacak snapshot status tunggal saat sumber data dimulai.
Lihat WindowManager untuk mengetahui detail tentang nilai konfigurasi.
Contoh
Berikut adalah contoh jenis rekaman aktivitas WindowManager untuk adb:
$ adb shell -t perfetto \
-c - --txt \
-o /data/misc/perfetto-traces/trace \
<<EOF
unique_session_name: "my_custom_session"
buffers: {
size_kb: 63488
fill_policy: RING_BUFFER
}
data_sources: {
config {
name: "android.windowmanager"
windowmanager_config: {
log_level: LOG_LEVEL_VERBOSE
log_frequency: LOG_FREQUENCY_TRANSACTION
}
}
}
EOF
ProtoLog
Gunakan nama sumber data android.protolog
untuk jenis rekaman aktivitas ini.
Opsi konfigurasi
Mode pelacakan (tracing_mode
): Menentukan konfigurasi log yang akan digunakan:
DEFAULT
: Hanya melacak grup dan level log yang ditentukan dalamgroup_overrides
.ENABLE_ALL
: Melacak semua grup dan level log, kecuali jika ditentukan dalamgroup_overrides
.
Level log minimum (default_log_from_level
): Jika ditetapkan, pesan apa pun dengan level log
yang lebih tinggi dari dan termasuk level ini akan dilacak, kecuali jika penggantian grup
ditentukan. Misalnya, ini digunakan untuk mengaktifkan semua peringatan dan error agar
dicatat ke dalam log, tanpa harus mengaktifkan semua log. Nilai yang didukung adalah:
PROTOLOG_LEVEL_DEBUG
PROTOLOG_LEVEL_VERBOSE
PROTOLOG_LEVEL_INFO
PROTOLOG_LEVEL_WARN
PROTOLOG_LEVEL_ERROR
PROTOLOG_LEVEL_WTF
Penggantian grup (group_overrides
): Mengaktifkan konfigurasi manual level log
untuk setiap grup ProtoLog. Setiap grup berisi:
name
: Nama grup ProtoLog, yang digunakan dalam kode sumber Android.log_from
: Sama sepertidefault_log_from_level
, tetapi hanya ditentukan untuk grup saat ini.collect_stacktrace
: Jika ditetapkan ketrue
, akan mengumpulkan stack trace untuk setiap pesan ProtoLog dalam grup yang dilacak.
Contoh
Berikut adalah contoh jenis rekaman aktivitas ProtoLog untuk adb:
$ adb shell -t perfetto \
-c - --txt \
-o /data/misc/perfetto-traces/trace \
<<EOF
unique_session_name: "my_custom_session"
buffers: {
size_kb: 63488
fill_policy: RING_BUFFER
}
data_sources: {
config {
name: "android.protolog"
protolog_config: {
tracing_mode: DEFAULT
default_log_from_level: PROTOLOG_LEVEL_WARN
group_overrides: {
group_name: "WM_SHELL_STARTING_WINDOW"
log_from: PROTOLOG_LEVEL_DEBUG
collect_stacktrace: true
}
}
}
}
EOF
Input
Gunakan nama sumber data android.input.inputevent
untuk jenis rekaman aktivitas ini.
Opsi konfigurasi
Mode pelacakan (trace_mode
): Menentukan apakah pelacakan input harus
dimulai menggunakan aturan perlindungan privasi atau mencatat semua peristiwa input:
TRACE_MODE_TRACE_ALL
: Mencatat semua peristiwa input yang diproses oleh sistem, terlepas dari konteks tempat peristiwa tersebut diproses.TRACE_MODE_USE_RULES
: Menggunakan aturan pelacakan yang ditentukan dalam konfigurasi ini untuk menentukan peristiwa yang akan dilacak. Lihatandroid_input_event_config.proto
untuk mengetahui informasi selengkapnya tentang cara menentukan aturan untuk rekaman aktivitas.
Contoh
Berikut adalah contoh jenis rekaman aktivitas input untuk adb:
$ adb shell -t perfetto \
-c - --txt \
-o /data/misc/perfetto-traces/trace \
<<EOF
unique_session_name: "my_custom_session"
buffers: {
size_kb: 63488
fill_policy: RING_BUFFER
}
data_sources: {
config {
name: "android.input.inputevent"
android_input_event_config: {
mode: TRACE_MODE_TRACE_ALL
}
}
}
EOF
SurfaceFlinger (lapisan)
Gunakan nama sumber data android.surfaceflinger.layers
untuk jenis rekaman aktivitas ini.
Opsi konfigurasi
Mode pelacakan (mode
): Menentukan frekuensi item dicatat ke dalam log:
MODE_ACTIVE
: Melacak snapshot lapisan. Snapshot diambil setiap kali lapisan berubah.MODE_GENERATED
: Membuat snapshot lapisan dari transaksi yang disimpan di buffer ring internal SurfaceFlinger. Pembuatan snapshot lapisan terjadi saat sumber data ini dihapus.MODE_DUMP
: Melacak snapshot satu lapisan.MODE_GENERATED_BUGREPORT_ONLY
: Sama sepertiMODE_GENERATED
, tetapi memicu pembuatan snapshot lapisan hanya saat laporan bug diambil, bukan setiap kali rekaman aktivitas dihapus.
Flag trace (trace_flags
):
TRACE_FLAG_INPUT
: Jika platform berisi data input, lacak spesifikasi jendela input.TRACE_FLAG_COMPOSITION
: Melacak jenis komposisi dan wilayah yang terlihat.TRACE_FLAG_EXTRA
: Melacak metadata platform tambahan, termasuk lapisan di luar layar.TRACE_FLAG_HWC
: Melacak metadata komposer hardware tidak terstruktur tambahan.TRACE_FLAG_BUFFERS
: Mengonfigurasi SurfaceFlinger untuk melacak semua perubahan buffer di platform. Secara default, SurfaceFlinger melacak status baru hanya saat perubahan geometri terjadi.TRACE_FLAG_VIRTUAL_DISPLAYS
: Menyertakan lapisan tampilan virtual dalam rekaman aktivitas.
Contoh
Berikut adalah contoh jenis rekaman aktivitas SurfaceFlinger untuk adb:
$ adb shell -t perfetto \
-c - --txt \
-o /data/misc/perfetto-traces/trace \
<<EOF
unique_session_name: "my_custom_session"
buffers: {
size_kb: 63488
fill_policy: RING_BUFFER
}
data_sources: {
config {
name: "android.surfaceflinger.layers"
surfaceflinger_layers_config: {
mode: MODE_ACTIVE
trace_flags: TRACE_FLAG_INPUT
trace_flags: TRACE_FLAG_COMPOSITION
trace_flags: TRACE_FLAG_HWC
trace_flags: TRACE_FLAG_BUFFERS
trace_flags: TRACE_FLAG_VIRTUAL_DISPLAYS
}
}
}
EOF
Lihat SurfaceFlinger untuk mengetahui detail tentang arti berbagai nilai konfigurasi.
Transisi shell
Gunakan nama sumber data com.android.wm.shell.transition
untuk jenis rekaman aktivitas ini.
Opsi konfigurasi
Jenis rekaman aktivitas ini tidak memiliki opsi konfigurasi.
Contoh
Berikut adalah contoh jenis rekaman aktivitas transisi shell untuk adb:
$ adb shell -t perfetto \
-c - --txt \
-o /data/misc/perfetto-traces/trace \
<<EOF
unique_session_name: "my_custom_session"
buffers: {
size_kb: 63488
fill_policy: RING_BUFFER
}
data_sources: {
config {
name: "com.android.wm.shell.transition"
}
}
EOF
SurfaceFlinger (transaksi)
Gunakan nama sumber data android.surfaceflinger.transactions
untuk jenis rekaman aktivitas ini.
Opsi konfigurasi
Mode pelacakan (mode
): Menentukan frekuensi item dicatat ke dalam log:
MODE_CONTINUOUS
: SurfaceFlinger menulis buffer ring internal transaksi setiap kali sumber data dihapus. Buffer ring berisi status awal SurfaceFlinger dan transaksi terbaru.MODE_ACTIVE
: SurfaceFlinger menulis status awal, lalu setiap transaksi masuk hingga sumber data dihentikan.
Contoh
Berikut adalah contoh jenis rekaman aktivitas transaksi SurfaceFlinger untuk adb.
$ adb shell -t perfetto \
-c - --txt \
-o /data/misc/perfetto-traces/trace \
<<EOF
unique_session_name: "my_custom_session"
buffers: {
size_kb: 63488
fill_policy: RING_BUFFER
}
data_sources: {
config {
name: "android.surfaceflinger.transactions"
surfaceflinger_transactions_config: {
mode: MODE_ACTIVE
}
}
}
EOF
IME
Gunakan nama sumber data: android.inputmethod
untuk jenis rekaman aktivitas ini.
Opsi konfigurasi
Jenis rekaman aktivitas ini tidak memiliki opsi konfigurasi.
Contoh
Berikut adalah contoh jenis rekaman aktivitas IME untuk adb:
$ adb shell -t perfetto \
-c - --txt \
-o /data/misc/perfetto-traces/trace \
<<EOF
unique_session_name: "my_custom_session"
buffers: {
size_kb: 63488
fill_policy: RING_BUFFER
}
data_sources: {
config {
name: "android.inputmethod"
}
}
EOF
ViewCapture
Gunakan nama sumber data android.viewcapture
untuk jenis rekaman aktivitas ini.
Opsi konfigurasi
Jenis rekaman aktivitas ini tidak memiliki opsi konfigurasi.
Contoh
Berikut adalah contoh jenis rekaman aktivitas ViewCapture untuk adb:
$ adb shell -t perfetto \
-c - --txt \
-o /data/misc/perfetto-traces/trace \
<<EOF
unique_session_name: "my_custom_session"
buffers: {
size_kb: 63488
fill_policy: RING_BUFFER
}
data_sources: {
config {
name: "android.viewcapture"
}
}
EOF
Contoh lengkap
Perfetto memungkinkan Anda mengumpulkan data dari beberapa sumber dalam satu konfigurasi. Anda dapat mengumpulkan semua rekaman aktivitas Winscope dengan satu perintah:
$ adb shell -t perfetto \
-c - --txt \
-o /data/misc/perfetto-traces/trace \
<<EOF
unique_session_name: "my_custom_session"
buffers: {
size_kb: 63488
fill_policy: RING_BUFFER
}
data_sources: {
config {
name: "android.windowmanager"
windowmanager_config: {
log_level: LOG_LEVEL_VERBOSE
log_frequency: LOG_FREQUENCY_TRANSACTION
}
}
}
data_sources: {
config {
name: "android.protolog"
protolog_config: {
tracing_mode: ENABLE_ALL
}
}
}
data_sources: {
config {
name: "android.input.inputevent"
android_input_event_config: {
mode: TRACE_MODE_TRACE_ALL
}
}
}
data_sources: {
config {
name: "android.surfaceflinger.layers"
surfaceflinger_layers_config: {
mode: MODE_ACTIVE
trace_flags: TRACE_FLAG_INPUT
trace_flags: TRACE_FLAG_COMPOSITION
trace_flags: TRACE_FLAG_HWC
trace_flags: TRACE_FLAG_BUFFERS
trace_flags: TRACE_FLAG_VIRTUAL_DISPLAYS
}
}
}
data_sources: {
config {
name: "com.android.wm.shell.transition"
}
}
data_sources: {
config {
name: "android.surfaceflinger.transactions"
surfaceflinger_transactions_config: {
mode: MODE_ACTIVE
}
}
}
data_sources: {
config {
name: "android.inputmethod"
}
}
data_sources: {
config {
name: "android.viewcapture"
}
}
EOF
Merekam rekaman aktivitas di Android 14 dan yang lebih lama
Jalankan adb root
sebelum menjalankan perintah adb shell
untuk setiap
rekaman aktivitas berikut. Di akhir rekaman aktivitas, file rekaman aktivitas tersedia
di /data/misc/wmtrace
. Untuk menyalin file atau direktori beserta subdirektorinya dari
perangkat, lihat
Menyalin file ke dan dari perangkat.
Pelacakan WindowManager
Untuk merekam aktivitas WindowManager:
Mengaktifkan rekaman aktivitas:
adb shell wm tracing start
Menonaktifkan rekaman aktivitas:
adb shell wm tracing stop
Menyimpan data logging ke file saat menjalankan pengambilan rekaman aktivitas:
adb shell wm tracing save-for-bugreport
Mencatat aktivitas ke dalam log sekali per frame:
adb shell wm tracing frame
Catat setiap transaksi:
adb shell wm tracing transaction
Tetapkan ukuran log maksimum (dalam KB):
adb shell wm tracing size
Mencetak status rekaman aktivitas:
adb shell wm tracing status
Tetapkan level log ke
critical
(hanya jendela yang terlihat dengan informasi yang dikurangi),trim
(semua jendela dengan informasi yang dikurangi), atauall
(semua jendela dan informasi):adb shell wm tracing level
Dump WindowManager
Untuk merekam dump WindowManager:
adb exec-out dumpsys window --proto > window_dump.winscope
ProtoLog
Perintah berikut digunakan untuk sistem ProtoLog.
Dalam proses system_server
:
Mulai ProtoLog:
adb shell cmd window logging start
Hentikan ProtoLog:
adb shell cmd window logging stop
Aktifkan ProtoLog untuk grup log tertentu:
adb shell cmd window logging enable [group...]
Nonaktifkan ProtoLog untuk grup log tertentu:
adb shell cmd window logging disable [group...]
Aktifkan logging Logcat untuk grup log tertentu:
adb shell cmd window logging enable-text [group...]
Nonaktifkan logging Logcat untuk grup log tertentu:
adb shell cmd window logging disable-text [group...]
Di WMShell:
Mulai ProtoLog:
adb shell dumpsys activity service SystemUIService WMShell
Pelacakan (lapisan) SurfaceFlinger
Pelacakan lapisan SurfaceFlinger menggunakan rekaman aktivitas Perfetto untuk pengambilan. Lihat Konfigurasi rekaman aktivitas untuk mengetahui informasi konfigurasi.
Lihat contoh konfigurasi berikut untuk pelacakan lapisan SurfaceFlinger:
unique_session_name: "surfaceflinger_layers_active"
buffers: {
size_kb: 63488
fill_policy: RING_BUFFER
}
data_sources: {
config {
name: "android.surfaceflinger.layers"
surfaceflinger_layers_config: {
mode: MODE_ACTIVE
trace_flags: TRACE_FLAG_INPUT
trace_flags: TRACE_FLAG_COMPOSITION
trace_flags: TRACE_FLAG_HWC
trace_flags: TRACE_FLAG_BUFFERS
trace_flags: TRACE_FLAG_VIRTUAL_DISPLAYS
}
}
}
Lihat contoh perintah berikut untuk membuat pelacakan untuk lapisan SurfaceFlinger:
adb shell -t perfetto \
-c - --txt \
-o /data/misc/perfetto-traces/trace \
Dump SurfaceFlinger (lapisan)
Untuk mengambil dump SurfaceFlinger:
adb exec-out dumpsys SurfaceFlinger --proto > sf_dump.winscope
Transisi shell
Perintah berikut digunakan untuk pelacakan transisi.
Dalam proses system_server
:
Mulai rekaman aktivitas:
adb shell cmd window shell tracing start
Menghentikan rekaman aktivitas:
adb shell cmd window shell tracing stop
Mulai perekaman aktivitas di WMShell:
adb shell dumpsys activity service SystemUIService WMShell transitions tracing start
Menghentikan perekaman aktivitas di WMShell:
adb shell dumpsys activity service SystemUIService WMShell transitions tracing stop
IME
Perintah berikut digunakan untuk pelacakan Editor Metode Input (IME):
Mulai pelacakan IME untuk klien Metode Input (IM), Layanan Metode Input (IMS), dan Layanan Pengelolaan Metode Input (IMMS):
adb shell ime tracing start
Mulai melacak klien IME, IMS, dan IMMS:
adb shell ime tracing stop
SurfaceFlinger (transaksi)
Pelacakan transaksi SurfaceFlinger menggunakan rekaman aktivitas Perfetto untuk pengambilan. Lihat Konfigurasi rekaman aktivitas untuk mengetahui informasi konfigurasi.
Lihat contoh konfigurasi Perfetto berikut untuk pelacakan aktif SurfaceFlinger:
unique_session_name: "surfaceflinger_transactions_active"
buffers: {
size_kb: 1024
fill_policy: RING_BUFFER
}
data_sources: {
config {
name: "android.surfaceflinger.transactions"
surfaceflinger_transactions_config: {
mode: MODE_ACTIVE
}
}
}
write_into_file: true
file_write_period_ms: 100
Lihat contoh konfigurasi Perfetto berikut untuk pelacakan berkelanjutan SurfaceFlinger:
unique_session_name: "surfaceflinger_transactions_continuous"
buffers: {
size_kb: 1024
fill_policy: RING_BUFFER
}
data_sources: {
config {
name: "android.surfaceflinger.transactions"
surfaceflinger_transactions_config: {
mode: MODE_CONTINUOUS
}
}
}
Lihat contoh perintah berikut untuk membuat pelacakan transaksi SurfaceFlinger:
adb shell perfetto \
-c - --txt \
-o /data/misc/perfetto-traces/trace \