Winscope adalah alat web yang memungkinkan pengguna merekam, memutar ulang, dan menganalisis status beberapa layanan sistem selama serta setelah animasi dan transisi. Winscope merekam semua status layanan sistem terkait ke file rekaman aktivitas. Dengan menggunakan UI Winscope dengan file rekaman aktivitas, Anda dapat memeriksa status layanan ini untuk setiap frame animasi, dengan atau tanpa perekaman layar, dengan memutar ulang, melangkah, dan men-debug melalui transisi.
Layanan sistem yang menghasilkan rekaman aktivitas yang dapat dimuat ke Winscope adalah sebagai berikut:
- SurfaceFlinger
- WindowManager
- WMShell
- IME
- Peluncur
Menjalankan penampil rekaman aktivitas Winscope
Pelacakan Winscope adalah bagian dari layanan di platform. Bagian ini menguraikan langkah-langkah yang diperlukan untuk mendownload, membangun, dan menjalankan penampil rekaman aktivitas Winscope.
Ikuti langkah-langkah berikut ini untuk menyiapkan PC Anda guna menjalankan pelacak Winscope:
- Download sumber Android.
Buka folder Winscope:
cd development/tools/winscope
Instal dependensi menggunakan:
npm install
Untuk melihat daftar perintah yang tersedia, jalankan:
npm run
Bangun semua target produksi dan pengujian menggunakan:
npm run build:prod
Jalankan Winscope menggunakan:
npm run start
Merekam aktivitas
Anda dapat mengambil rekaman aktivitas di perangkat, melalui Winscope, atau perintah Android Debug Bridge (adb).
Mengambil rekaman aktivitas di perangkat
Mengambil rekaman aktivitas di perangkat untuk mengumpulkan data saat melaporkan bug untuk masalah animasi. Semua rekaman aktivitas UI direkam dengan metode ini, karena konfigurasi tidak dapat disesuaikan.
Di perangkat Android:
- Aktifkan opsi developer.
- Pilih Pelacakan Sistem di bagian Opsi Developer.
- Aktifkan Kumpulkan rekaman aktivitas Winscope.
- Di bagian Lain-Lain:
- Aktifkan Lampirkan rekaman ke laporan bug.
- Aktifkan Tampilkan kartu Setelan Cepat.
- Buka tempat Anda perlu mereproduksi bug.
Untuk memulai perekaman, buka Setelan Cepat dan pilih Rekam aktivitas:
Gambar 1. Menu setelan cepat dengan Record Trace.
Jalankan hanya langkah-langkah yang diperlukan untuk mereproduksi bug.
Untuk menghentikan perekaman, buka Setelan Cepat, lalu pilih Berhenti melacak.
Bagikan log yang diambil menggunakan salah satu opsi yang tercantum, seperti Gmail, Drive, atau BetterBug.
Mengambil rekaman aktivitas melalui Winscope
Anda dapat merekam rekaman aktivitas menggunakan Winscope untuk pengembangan dan proses debug lokal. Winscope menggunakan adb, yang mendukung koneksi perangkat melalui USB atau Wi-Fi.
Di Winscope:
Di layar Collect Traces, klik ADB Proxy:
Gambar 2. Ambil rekaman aktivitas di Winscope.
Luncurkan proxy Winscope ADB Connect untuk merekam rekaman aktivitas langsung dari browser Anda.
Jalankan perintah:
python3 $ANDROID_BUILD_TOP/development/tools/winscope/src/adb/winscope_proxy.py
Untuk memulai perekaman, di layar Collect Traces, pilih target dan konfigurasi, lalu klik Start trace:
Gambar 3. Mengumpulkan rekaman aktivitas di Winscope.
Untuk menghentikan perekaman, klik End trace:
Gambar 4. Akhiri rekaman aktivitas di Winscope.
Saat alat mengupload rekaman aktivitas di UI Winscope, pesan Mengambil dan Menguraikan File Proto akan muncul di layar.
Membuat dump status menggunakan Winscope
Untuk mengambil dump status menggunakan Winscope, di layar Collect Traces, pilih tab Dump, lalu klik Dump status:
Gambar 5. Status dump di Winscope.
Mengambil rekaman aktivitas melalui perintah adb
Jalankan adb root
sebelum menjalankan perintah adb shell
untuk setiap
rekaman aktivitas berikut. Di akhir rekaman aktivitas, file rekaman aktivitas akan tersedia di
/data/misc/wmtrace
. Untuk menyalin file atau direktori beserta subdirektorinya dari
perangkat, lihat Menyalin file ke dan dari perangkat.
Lihat adb untuk mengetahui
informasi selengkapnya.
Rekaman aktivitas 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
Catat rekaman aktivitas 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
Status trace cetak:
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
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 transisi
Perintah berikut digunakan untuk pelacakan transisi:
Dalam proses system_server
:
Memulai 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 rekaman aktivitas di WMShell:
adb shell dumpsys activity service SystemUIService WMShell transitions tracing stop
Editor Metode Input
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
Lapisan SurfaceFlinger
Pelacakan lapisan SurfaceFlinger menggunakan rekaman aktivitas Perfetto untuk pengambilan. Lihat Konfigurasi rekaman aktivitas untuk 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 \
Transaksi SurfaceFlinger
Pelacakan transaksi SurfaceFlinger menggunakan rekaman aktivitas Perfetto untuk pengambilan. Lihat Konfigurasi rekaman aktivitas untuk 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 guna menghasilkan pelacakan untuk transaksi SurfaceFlinger:
adb shell perfetto \
-c - --txt \
-o /data/misc/perfetto-traces/trace \
Membuat dump status menggunakan adb
Winscope membaca ringkasan status WindowManager dan SurfaceFlinger dari laporan
bug. Laporan bug menyimpan status sebagai file proto terpisah dalam
folder proto
. Untuk membuat dump status menggunakan adb, jalankan perintah
berikut.
Untuk WindowManager:
adb exec-out dumpsys window --proto > window_dump.winscope
Untuk SurfaceFlinger:
adb exec-out dumpsys SurfaceFlinger --proto > sf_dump.winscope
Menganalisis rekaman aktivitas
Untuk men-debug status sementara dan tidak valid yang menyebabkan masalah animasi, Winscope menggabungkan berbagai file rekaman aktivitas, menyediakan penelusuran dan visualisasi pada frame dan linimasa, serta menyajikan pesan protobuf secara koheren. Menganalisis trace di Winscope membantu mengidentifikasi lapisan, frame, dan status yang tepat dari terjadinya bug.
Menggunakan Winscope
Setelah mengambil rekaman aktivitas, analisis rekaman aktivitas di Winscope:
Upload rekaman aktivitas yang disimpan menggunakan panel di sebelah kanan. Anda dapat menghapus rekaman aktivitas yang diupload atau mengupload lebih banyak rekaman aktivitas.
Gambar 6. Upload rekaman aktivitas di Winscope.
Klik Lihat trace untuk memvisualisasikan trace yang diupload. Tab untuk setiap rekaman aktivitas akan muncul di panel atas jendela. Jika file yang diupload berisi rekaman aktivitas yang relevan, tampilan mengambang rekaman aktivitas layar akan ditempatkan di layar.
Gambar 7. Melihat rekaman aktivitas di Winscope.
Gunakan UI di panel paling atas jendela untuk mengganti nama dan mendownload rekaman aktivitas yang Anda upload atau untuk mengupload rekaman aktivitas baru.
Jelajahi rekaman aktivitas dari waktu ke waktu menggunakan alat penggeser waktu di panel bawah jendela. Untuk navigasi waktu tambahan, gunakan fitur berikut, seperti yang ditunjukkan pada Gambar 8:
- Untuk membuka waktu atau kejadian tertentu, gunakan kursor (penggeser waktu), atau panah kiri dan kanan di kotak tampilan waktu (sudut kiri bawah), atau panah kiri dan kanan di keyboard.
- Untuk menampilkan rekaman aktivitas berkode warna yang dipilih pada linimasa, gunakan menu drop-down (di sebelah kiri penggeser waktu). Secara default, tiga rekaman aktivitas terakhir yang dilihat menggunakan tab rekaman aktivitas ditampilkan di linimasa.
- Untuk melihat semua rekaman aktivitas yang diupload secara terperinci, gunakan alat perbesar atau perkecil (di bawah penggeser waktu), atau scroll pada keyboard. Gunakan tombol reset untuk mereset tingkat zoom.
- Untuk tampilan yang diperluas dari distribusi rekaman aktivitas dari waktu ke waktu, klik panah atas (sudut kanan bawah).
Gambar 8. Navigasi waktu di Winscope.
Pada tampilan yang diperluas (Gambar 9), pilih dan perbesar jangka waktu tertentu untuk pemeriksaan yang lebih baik:
Gambar 9. Linimasa yang diperluas di Winscope.
Untuk memeriksa rekaman aktivitas, Anda dapat melihat status perangkat dengan rekaman layar. Untuk memeriksa trace tertentu, klik tab trace yang relevan di panel atas alat.
Untuk rekaman aktivitas Surface Flinger, tiga panel menampilkan tampilan rekaman aktivitas yang berbeda pada jangka waktu tertentu, seperti yang ditunjukkan pada Gambar 10:
Gambar 10. Surface Flinger di Winscope.
Tampilan Lapisan: Tampilan 3D lapisan dalam overlay persegi panjang. Elemen UI berikut menyesuaikan persegi panjang untuk merender elemen grafis dari segi posisi, ukuran, transformasi, dan urutan z:
- Penggeser Rotation (kiri atas tampilan Lapisan) memutar persegi panjang berlapis untuk melihatnya pada sudut yang dipilih.
- Penggeser Spasi (kanan atas tampilan Lapisan) menyesuaikan jarak antar lapisan untuk membuat tampilan gabungan yang dipilih.
- Alat zoom (kanan atas tampilan Lapisan) akan memperbesar dan memperkecil ke dalam lapisan untuk pemeriksaan yang lebih baik.
- Tombol reset (kanan atas tampilan Lapisan) akan memulihkan setelan kamera ke tampilan asli.
- Tarik persegi panjang agar Anda dapat melakukan zoom yang lebih baik.
Tampilan Hierarki: Hierarki penuh lapisan.
- Hanya terlihat (kanan atas tampilan Hierarki), saat dipilih, akan menyembunyikan lapisan yang tidak terlihat dari hierarki untuk membantu memvisualisasikan elemen di layar.
- Flat (kanan atas tampilan Hierarki), jika dipilih, menampilkan hierarki sebagai daftar lapisan yang diratakan.
- Tampilkan perbedaan (kiri atas tampilan Hierarki) dipilih hanya jika ada transisi status. Jika dipilih, alat ini akan membandingkan status saat ini dengan status sebelumnya. Elemen baru ditandai dengan warna hijau, elemen yang dihapus ditandai dengan warna merah, dan elemen yang dimodifikasi akan ditandai dengan warna biru.
Tampilan Properties: Properti lapisan yang dipilih. Panel atas tampilan Properties berisi informasi tentang properti utama saja, seperti Visibility, Geometry, dan Buffer. Panel bawah tampilan Properties berisi Proto Dump semua properti.
- Kotak centang Show Diff (kiri atas tampilan Properties) berperilaku seperti pada tampilan Hierarchy.
- Tampilkan default (kiri atas tampilan Properti), jika
dipilih, akan menampilkan nilai proto default di Proto Dump.
Secara default, nilai ini tidak tercantum dalam Proto Dump. Nilai proto default diambil dari definisi kolom proto.
Jika kolom proto belum menetapkan nilai default nonnull, nilai proto default yang ditampilkan adalah:
- String: Null
- Angka: 0
- Nilai boolean: Salah
- Objek: Null
Pemilihan antara ketiga tampilan dan perekaman layar disinkronkan sehingga semua rekaman aktivitas diperbarui secara sinkron saat Anda menavigasi ke titik waktu yang berbeda. Untuk melihat properti lapisan, pilih lapisan dengan mengekliknya pada tampilan Hierarki atau dengan mengeklik kotak masing-masing pada tampilan Properti. Persegi panjang ungu menunjukkan bahwa rekaman aktivitas tampilan dilampirkan ke lapisan ini. Saat mengklik dua kali lapisan ungu, UI akan beralih ke tab rekaman aktivitas tampilan yang relevan.
Untuk rekaman aktivitas Window Manager, tiga panel menampilkan tampilan rekaman aktivitas yang berbeda pada jangka waktu tertentu, seperti yang ditunjukkan pada Gambar 11:
- Tampilan Windows: Tampilan 3D lapisan.
- Tampilan Hierarki: Hierarki lengkap lapisan.
- Tampilan Properties berisi Proto Dump dari semua properti.
Pemilihan antara ketiga tampilan dan perekaman layar disinkronkan sehingga semua rekaman aktivitas diperbarui secara sinkron saat Anda menavigasi ke titik waktu yang berbeda.
Gambar 11. Pelacakan Window Manager di Winscope.
Untuk rekaman aktivitas Transaksi, transaksi antara Surface Flinger dan Window Manager ditampilkan dalam format tabel yang dapat ditelusuri berdasarkan ID, jenis, dan teks yang ditampilkan, beserta tampilan properti yang menunjukkan dump proto. Pilihan antara dua tampilan dan perekaman layar akan disinkronkan:
Gambar 12. Pelacakan transaksi di Winscope.
Untuk rekaman aktivitas ProtoLog, informasi disajikan dalam format tabel, yang dapat ditelusuri oleh tag, file sumber, dan teks:
Gambar 13. Rekaman aktivitas ProtoLog di Winscope.
Untuk rekaman aktivitas Transisi, daftar transisi dengan ID, jenis, waktu pengiriman, durasi, dan status ditampilkan bersama dengan properti transisi yang dipilih:
Gambar 14. Rekaman aktivitas transisi di Winscope.