Melacak transisi jendela menggunakan Winscope

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:

  1. Download sumber Android.
  2. Buka folder Winscope:

    cd development/tools/winscope
    
  3. Instal dependensi menggunakan:

    npm install
    

    Untuk melihat daftar perintah yang tersedia, jalankan: npm run

  4. Bangun semua target produksi dan pengujian menggunakan:

    npm run build:prod
    
  5. 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:

  1. Aktifkan opsi developer.
  2. Pilih Pelacakan Sistem di bagian Opsi Developer.
  3. Aktifkan Kumpulkan rekaman aktivitas Winscope.
  4. Di bagian Lain-Lain:
    1. Aktifkan Lampirkan rekaman ke laporan bug.
    2. Aktifkan Tampilkan kartu Setelan Cepat.
  5. Buka tempat Anda perlu mereproduksi bug.
  6. Untuk memulai perekaman, buka Setelan Cepat dan pilih Rekam aktivitas:

    quick_setting_winscope

    Gambar 1. Menu setelan cepat dengan Record Trace.

  7. Jalankan hanya langkah-langkah yang diperlukan untuk mereproduksi bug.

  8. Untuk menghentikan perekaman, buka Setelan Cepat, lalu pilih Berhenti melacak.

  9. 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:

  1. Di layar Collect Traces, klik ADB Proxy:

    rekam_traces_winscope

    Gambar 2. Ambil rekaman aktivitas di Winscope.

  2. Luncurkan proxy Winscope ADB Connect untuk merekam rekaman aktivitas langsung dari browser Anda.

  3. Jalankan perintah:

    python3 $ANDROID_BUILD_TOP/development/tools/winscope/src/adb/winscope_proxy.py
    
  4. Untuk memulai perekaman, di layar Collect Traces, pilih target dan konfigurasi, lalu klik Start trace:

    collect_traces_winscope

    Gambar 3. Mengumpulkan rekaman aktivitas di Winscope.

  5. Untuk menghentikan perekaman, klik End trace:

    {i>end_trace_winscope<i}

    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:

tempat sampah

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), atau all (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:

  1. Upload rekaman aktivitas yang disimpan menggunakan panel di sebelah kanan. Anda dapat menghapus rekaman aktivitas yang diupload atau mengupload lebih banyak rekaman aktivitas.

    upload_traces_winscope

    Gambar 6. Upload rekaman aktivitas di Winscope.

  2. 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.

    view_traces_winscope

    Gambar 7. Melihat rekaman aktivitas di Winscope.

    Gunakan UI di panel paling atas jendela untuk mengganti nama edit_nama dan mendownload rekaman aktivitas yang Anda upload download_trace atau untuk mengupload rekaman aktivitas baru.

  3. 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 arrow_left_time kiri dan arrow_right_time 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 zoom_in_time atau perkecil zoom_out_time (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 arrow_up_time (sudut kanan bawah).

    time_nav_winscope

    Gambar 8. Navigasi waktu di Winscope.

    Pada tampilan yang diperluas (Gambar 9), pilih dan perbesar jangka waktu tertentu untuk pemeriksaan yang lebih baik:

    expand_time_winscope

    Gambar 9. Linimasa yang diperluas di Winscope.

  4. 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: sf_trace

      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 zoom_in_time dan memperkecil waktu_zoom_out ke dalam lapisan untuk pemeriksaan yang lebih baik.
        • Tombol reset reset_sf (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.

      {i>wm_trace<i}

      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:

      transaction_trace

      Gambar 12. Pelacakan transaksi di Winscope.

    • Untuk rekaman aktivitas ProtoLog, informasi disajikan dalam format tabel, yang dapat ditelusuri oleh tag, file sumber, dan teks:

      protolog_trace

      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:

      transisi_pelacakan

      Gambar 14. Rekaman aktivitas transisi di Winscope.