Winscope adalah alat web yang memungkinkan pengguna merekam, memutar ulang, dan menganalisis status beberapa layanan sistem selama dan setelah animasi dan transisi. Winscope mencatat semua status layanan sistem terkait ke file jejak. Menggunakan UI Winscope dengan file jejak, Anda dapat memeriksa status layanan ini untuk setiap bingkai animasi, dengan atau tanpa rekaman layar, dengan memutar ulang, melangkah, dan melakukan debug melalui transisi.
Layanan sistem yang menghasilkan jejak yang dapat dimuat ke dalam Winscope adalah sebagai berikut:
- PermukaanFlinger
- Manajer Jendela
- WMShell
- IME
- Peluncur
Jalankan penampil jejak Winscope
Penelusuran Winscope adalah bagian dari layanan di platform. Bagian ini menguraikan langkah-langkah yang diperlukan untuk mengunduh, membangun, dan menjalankan penampil jejak Winscope.
Ikuti langkah-langkah berikut untuk mengatur PC Anda agar menjalankan pelacak Winscope:
- Unduh sumber Android .
Arahkan ke 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
Tangkap jejak
Anda dapat menangkap jejak pada perangkat , melalui Winscope , atau melalui perintah Android Debug Bridge (adb) .
Tangkap jejak di perangkat
Tangkap jejak di perangkat untuk mengumpulkan data saat melaporkan bug untuk masalah animasi. Semua jejak UI dicatat dengan metode ini, karena konfigurasinya tidak dapat disesuaikan.
Di perangkat Android Anda:
- Aktifkan opsi pengembang .
- Pilih Pelacakan Sistem di bawah Opsi Pengembang .
- Aktifkan Kumpulkan jejak Winscope .
- Di bawah Lain-Lain :
- Aktifkan Lampirkan rekaman ke laporan bug .
- Aktifkan ubin Tampilkan Pengaturan Cepat .
- Arahkan ke tempat Anda perlu mereproduksi bug.
Untuk memulai pengambilan, buka Pengaturan Cepat dan pilih Rekam jejak :
Gambar 1. Menu pengaturan cepat dengan Record Trace.
Jalankan hanya langkah-langkah yang diperlukan untuk mereproduksi bug.
Untuk menghentikan pengambilan, buka Pengaturan Cepat dan pilih Hentikan penelusuran .
Bagikan log yang diambil menggunakan salah satu opsi yang tercantum, seperti Gmail, Drive, atau BetterBug.
Tangkap jejak melalui Winscope
Anda dapat menangkap jejak menggunakan Winscope untuk pengembangan dan debugging lokal. Winscope menggunakan adb , yang mendukung koneksi perangkat melalui USB atau Wi-Fi.
Di Winscope:
Pada layar Kumpulkan Jejak , klik Proksi ADB :
Gambar 2. Menangkap jejak pada Winscope.
Luncurkan proksi Winscope ADB Connect untuk menangkap jejak langsung dari browser Anda.
Jalankan perintah:
python3 $ANDROID_BUILD_TOP/development/tools/winscope/src/adb/winscope_proxy.py
Untuk memulai pengambilan, pada layar Kumpulkan Jejak pilih target dan konfigurasi dan klik Mulai jejak :
Gambar 3. Mengumpulkan jejak di Winscope.
Untuk menghentikan pengambilan, klik Akhiri jejak :
Gambar 4. Jejak akhir pada Winscope.
Saat alat mengunggah jejak di UI Winscope, pesan Pengambilan dan Penguraian File Proto muncul di layar.
Hasilkan dump negara menggunakan Winscope
Untuk mengambil state dump menggunakan Winscope, pada layar Collect Traces pilih tab Dump lalu klik Dump state :
Gambar 5. Status dump pada Winscope.
Tangkap jejak melalui perintah adb
Jalankan adb root
sebelum menjalankan perintah adb shell
untuk setiap jejak berikut. Di akhir penelusuran, file penelusuran tersedia di /data/misc/wmtrace
. Untuk menyalin file atau direktori dan subdirektorinya dari perangkat, lihat Menyalin file ke dan dari perangkat . Lihat adb untuk informasi lebih lanjut.
Jejak WindowManager
Untuk menangkap jejak WindowManager:
Aktifkan pelacakan:
adb shell wm tracing start
Nonaktifkan jejak:
adb shell wm tracing stop
Simpan data pencatatan ke file saat menjalankan penangkapan jejak:
adb shell wm tracing save-for-bugreport
Log jejak 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 jejak cetak:
adb shell wm tracing status
Atur tingkat 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 pembuatan log Logcat untuk grup log tertentu:
adb shell cmd window logging enable-text [group...]
Nonaktifkan pembuatan log Logcat untuk grup log tertentu:
adb shell cmd window logging disable-text [group...]
Di WMSshell:
Mulai ProtoLog:
adb shell dumpsys activity service SystemUIService WMShell
Penelusuran transisi
Perintah berikut digunakan untuk penelusuran transisi:
Dalam proses system_server
:
Mulai pelacakan:
adb shell cmd window shell tracing start
Hentikan jejak:
adb shell cmd window shell tracing stop
Mulai pelacakan di WMSell:
adb shell dumpsys activity service SystemUIService WMShell transitions tracing start
Hentikan jejak di WMSell:
adb shell dumpsys activity service SystemUIService WMShell transitions tracing stop
Editor Metode Masukan
Perintah berikut digunakan untuk penelusuran Editor Metode Input (IME):
Mulai penelusuran IME untuk klien Metode Input (IM), Layanan Metode Input (IMS), dan Layanan Manajemen Metode Input (IMMS):
adb shell ime tracing start
Mulai menelusuri klien IME, IMS, dan IMMS:
adb shell ime tracing stop
Lapisan SurfaceFlinger
Pelacakan lapisan SurfaceFlinger menggunakan jejak Perfetto untuk menangkap. Lihat Konfigurasi pelacakan untuk informasi konfigurasi.
Lihat contoh konfigurasi berikut untuk penelusuran 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 menghasilkan penelusuran untuk lapisan SurfaceFlinger:
adb shell -t perfetto \
-c - --txt \
-o /data/misc/perfetto-traces/trace \
Transaksi SurfaceFlinger
Pelacakan transaksi SurfaceFlinger menggunakan jejak Perfetto untuk ditangkap. Lihat Konfigurasi pelacakan untuk informasi konfigurasi.
Lihat contoh konfigurasi Perfetto berikut untuk penelusuran 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 penelusuran 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 menghasilkan penelusuran untuk transaksi SurfaceFlinger:
adb shell perfetto \
-c - --txt \
-o /data/misc/perfetto-traces/trace \
Hasilkan dump negara menggunakan adb
Winscope membaca snapshot status WindowManager dan SurfaceFlinger dari laporan bug. Laporan bug menyimpan negara bagian sebagai file proto terpisah di dalam folder proto
. Untuk menghasilkan dump status menggunakan adb, jalankan perintah berikut.
Untuk Manajer Jendela:
adb exec-out dumpsys window --proto > window_dump.winscope
Untuk SurfaceFlinger:
adb exec-out dumpsys SurfaceFlinger --proto > sf_dump.winscope
Analisis jejak
Untuk men-debug status sementara dan tidak valid yang menyebabkan masalah animasi, Winscope mengumpulkan file jejak yang berbeda, menyediakan pencarian dan visualisasi melalui bingkai dan garis waktu, dan menyajikan pesan protobuf secara koheren. Menganalisis jejak di Winscope membantu mengidentifikasi lapisan, bingkai, dan keadaan pasti terjadinya bug.
Gunakan Winscope
Ketika Anda telah menangkap jejak , analisis jejak di Winscope:
Unggah jejak tersimpan Anda menggunakan panel di sebelah kanan. Anda dapat menghapus jejak yang diunggah atau mengunggah jejak lainnya.
Gambar 6. Upload jejak pada Winscope.
Klik Lihat jejak untuk memvisualisasikan jejak yang diunggah. Tab untuk setiap jejak muncul di panel atas jendela. Jika file yang diunggah berisi jejak yang relevan, tampilan mengambang dari jejak rekaman layar akan dihamparkan di layar.
Gambar 7. Melihat jejak pada Winscope.
Gunakan UI di panel paling atas jendela untuk mengganti nama dan unduh jejak yang Anda unggah atau mengunggah yang baru.
Navigasikan jejak 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 menavigasi ke waktu atau kejadian tertentu, gunakan kursor (penggeser waktu), atau kiri dan benar panah pada kotak tampilan waktu (pojok kiri bawah), atau panah kiri dan kanan pada keyboard Anda.
- Untuk menampilkan jejak berkode warna yang dipilih pada timeline, gunakan menu drop-down (di sebelah kiri penggeser waktu). Secara default, tiga jejak terakhir yang dilihat menggunakan tab jejak ditampilkan pada timeline.
- Untuk tampilan terperinci dari semua jejak yang diunggah, gunakan zoom in atau memperkecil alat (di bawah penggeser waktu), atau gulir pada keyboard Anda. Gunakan tombol reset untuk mengatur ulang tingkat zoom.
- Untuk tampilan distribusi jejak yang lebih luas dari waktu ke waktu, klik panah atas (pojok kanan bawah).
Gambar 8. Navigasi waktu pada Winscope.
Dalam tampilan yang diperluas (Gambar 9), pilih dan perbesar kerangka waktu tertentu untuk pemeriksaan yang lebih baik:
Gambar 9. Garis waktu yang diperluas pada Winscope.
Untuk memeriksa jejak, Anda dapat melihat status perangkat dengan rekaman layar. Untuk memeriksa jejak tertentu, klik tab jejak yang relevan di panel atas alat.
Untuk penelusuran Surface Flinger , tiga panel menampilkan tampilan penelusuran yang berbeda pada jangka waktu tertentu, seperti yang ditunjukkan pada Gambar 10:
Gambar 10. Jejak Permukaan Flinger pada Winscope.
Tampilan lapisan : Tampilan 3D dari lapisan dalam hamparan persegi panjang. Elemen UI berikut menyesuaikan persegi panjang untuk merender elemen grafis dalam hal posisi, ukuran, transformasi, dan urutan z:
- Penggeser Rotasi (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 komposit yang dipilih.
- Alat zoom (kanan atas tampilan Lapisan) memperbesar dan memperkecil ke dalam lapisan untuk pemeriksaan yang lebih baik.
- Tombol atur ulang (kanan atas tampilan Lapisan) mengembalikan pengaturan kamera ke tampilan aslinya.
- Seret persegi panjang untuk memfasilitasi zoom yang lebih baik.
Tampilan hierarki : Hierarki penuh lapisan.
- Hanya terlihat (kanan atas tampilan Hierarki), bila dipilih, menyembunyikan lapisan tak terlihat dari hierarki untuk membantu memvisualisasikan elemen di layar.
- Datar (kanan atas tampilan Hierarki), bila dipilih, memperlihatkan hierarki sebagai daftar lapisan yang diratakan.
- Tampilkan perbedaan (kiri atas tampilan Hierarki) dipilih hanya ketika ada transisi keadaan. Saat dipilih, alat akan membandingkan keadaan saat ini dengan keadaan sebelumnya. Elemen baru disorot dengan warna hijau, elemen yang dihapus disorot dengan warna merah, dan elemen yang dimodifikasi disorot dengan warna biru.
Tampilan properti : Properti lapisan yang dipilih. Panel atas tampilan Properti berisi informasi tentang properti utama saja, seperti Visibilitas , Geometri , dan Buffer . Panel bawah tampilan Properti berisi Proto Dump dari semua properti.
- Kotak centang Tampilkan Perbedaan (kiri atas tampilan Properti) berperilaku seperti dalam tampilan Hierarki .
- Tampilkan default (kiri atas tampilan Properti), bila dipilih, menampilkan nilai proto default pada Proto Dump. Secara default, nilai-nilai ini tidak tercantum dalam Proto Dump. Nilai proto default diambil dari definisi bidang proto. Jika bidang proto tidak memiliki nilai default nonnull yang ditetapkan, nilai proto default yang ditampilkan adalah:
- String: Batal
- Angka: 0
- Nilai Boolean: Salah
- Objek: Batal
Pilihan antara tiga tampilan dan rekaman layar disinkronkan, artinya, semua jejak diperbarui secara serempak saat Anda bernavigasi ke titik waktu berbeda. Untuk melihat properti suatu lapisan, pilih lapisan tersebut dengan mengkliknya pada tampilan Hierarki atau dengan mengklik persegi panjang terkait pada tampilan Properti. Persegi panjang ungu menunjukkan bahwa jejak tampilan terpasang pada lapisan ini. Saat mengklik dua kali pada lapisan ungu, UI akan menavigasi untuk mengubah ke tab jejak tampilan yang relevan.
Untuk pelacakan Window Manager , tiga panel menampilkan tampilan jejak yang berbeda pada jangka waktu tertentu, seperti yang ditunjukkan pada Gambar 11:
- Tampilan Windows : Tampilan 3D dari lapisan.
- Tampilan hierarki : Hierarki penuh lapisan.
- Tampilan properti berisi Proto Dump dari semua properti.
Pilihan antara tiga tampilan dan rekaman layar disinkronkan, artinya, semua jejak diperbarui secara serempak saat Anda bernavigasi ke titik waktu berbeda.
Gambar 11. Jejak Window Manager pada Winscope.
Untuk jejak Transaksi , transaksi antara Surface Flinger dan Window Manager disajikan dalam format tabel yang dapat dicari berdasarkan ID, jenis, dan teks yang ditampilkan, bersama dengan tampilan properti yang memperlihatkan proto dump. Pilihan antara dua tampilan dan rekaman layar disinkronkan:
Gambar 12. Jejak transaksi pada Winscope.
Untuk jejak ProtoLog , informasi disajikan dalam format tabel, yang dapat dicari berdasarkan tag, file sumber, dan teks:
Gambar 13. Jejak ProtoLog pada Winscope.
Untuk jejak Transisi , daftar transisi dengan ID, jenis, waktu pengiriman, durasi, dan status ditampilkan bersama dengan properti transisi yang dipilih:
Gambar 14. Jejak transisi pada Winscope.