Lacak transisi jendela menggunakan Winscope

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:

  1. Unduh sumber Android .
  2. Arahkan ke 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
    

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:

  1. Aktifkan opsi pengembang .
  2. Pilih Pelacakan Sistem di bawah Opsi Pengembang .
  3. Aktifkan Kumpulkan jejak Winscope .
  4. Di bawah Lain-Lain :
    1. Aktifkan Lampirkan rekaman ke laporan bug .
    2. Aktifkan ubin Tampilkan Pengaturan Cepat .
  5. Arahkan ke tempat Anda perlu mereproduksi bug.
  6. Untuk memulai pengambilan, buka Pengaturan Cepat dan pilih Rekam jejak :

    quick_setting_winscope

    Gambar 1. Menu pengaturan cepat dengan Record Trace.

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

  8. Untuk menghentikan pengambilan, buka Pengaturan Cepat dan pilih Hentikan penelusuran .

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

  1. Pada layar Kumpulkan Jejak , klik Proksi ADB :

    capture_traces_winscope

    Gambar 2. Menangkap jejak pada Winscope.

  2. Luncurkan proksi Winscope ADB Connect untuk menangkap jejak langsung dari browser Anda.

  3. Jalankan perintah:

    python3 $ANDROID_BUILD_TOP/development/tools/winscope/src/adb/winscope_proxy.py
    
  4. Untuk memulai pengambilan, pada layar Kumpulkan Jejak pilih target dan konfigurasi dan klik Mulai jejak :

    collect_traces_winscope

    Gambar 3. Mengumpulkan jejak di Winscope.

  5. Untuk menghentikan pengambilan, klik Akhiri jejak :

    end_trace_winscope

    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 :

dump-winscope

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), 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 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:

  1. Unggah jejak tersimpan Anda menggunakan panel di sebelah kanan. Anda dapat menghapus jejak yang diunggah atau mengunggah jejak lainnya.

    upload_traces_winscope

    Gambar 6. Upload jejak pada Winscope.

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

    view_traces_winscope

    Gambar 7. Melihat jejak pada Winscope.

    Gunakan UI di panel paling atas jendela untuk mengganti namaedit_nama dan unduh jejak yang Anda unggahunduh_jejak atau mengunggah yang baru.

  3. 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 kiripanah_kiri_waktu dan benarpanah_kanan_waktu 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 inzoom_in_time atau memperkecilzoom_out_time 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 ataspanah_up_time (pojok kanan bawah).

    time_nav_winscope

    Gambar 8. Navigasi waktu pada Winscope.

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

    expand_time_winscope

    Gambar 9. Garis waktu yang diperluas pada Winscope.

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

      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) memperbesarzoom_in_time dan memperkecilzoom_out_time ke dalam lapisan untuk pemeriksaan yang lebih baik.
        • Tombol atur ulangreset_sf (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.

      wm_trace

      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:

      transaction_trace

      Gambar 12. Jejak transaksi pada Winscope.

    • Untuk jejak ProtoLog , informasi disajikan dalam format tabel, yang dapat dicari berdasarkan tag, file sumber, dan teks:

      protolog_trace

      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:

      transitions_trace

      Gambar 14. Jejak transisi pada Winscope.