adb komutlarıyla izlemeleri yakalama

Winscope izleri, hata ayıklama derlemelerinde (yani userdebug ve eng derlemeleri) adb komut satırıyla toplanabilir. adb ile Winscope izlerini toplamadan önce adb root komutunu çalıştırın.

Android 15'ten itibaren Winscope izleri Perfetto'ya entegre edilmiştir ve Perfetto komut satırı kullanılarak toplanır. Her Winscope izi, kendi yapılandırmasına sahip bir Perfetto veri kaynağıdır. Yapılandırmaları tek tek veya tek bir izleme oturumunda etkinleştirebilirsiniz.

Android 14 ve önceki sürümlerde her Winscope izinin farklı bir komutu vardır ve her biri bağımsız olarak toplanabilir. Daha fazla bilgi için Android 14 ve önceki sürümlerde iz yakalama başlıklı makaleyi inceleyin.

WindowManager

Bu izleme türü için veri kaynağı adını android.windowmanager kullanın.

Yapılandırma seçenekleri

  • Günlük seviyesi (log_level): Günlük ayrıntı düzeyini belirtir. Desteklenen değerler:

    • LOG_LEVEL_VERBOSE: Tüm öğeleri maksimum bilgi miktarıyla kaydeder.
    • LOG_LEVEL_DEBUG: Tüm öğeleri günlüğe kaydeder ancak tüm yapılandırma verilerini yazmaz.
    • LOG_LEVEL_CRITICAL: Yalnızca görünür öğeleri, en az performans ek yüküyle kaydeder.
  • Günlük sıklığı (log_frequency): Öğelerin günlüğe kaydedilme sıklığını tanımlar:

    • LOG_FREQUENCY_FRAME: Bir çerçeve gönderildiğinde durum anlık görüntülerini izler.
    • LOG_FREQUENCY_TRANSACTION: İşlem her onaylandığında izler durum anlık görüntülerini alır.
    • LOG_FREQUENCY_SINGLE_DUMP: Veri kaynağı başlatıldığında tek durum anlık görüntülerini izler.

Yapılandırma değerleri hakkında ayrıntılı bilgi için WindowManager bölümüne bakın.

Örnek

Aşağıda, adb için WindowManager izleme türüne ilişkin bir örnek verilmiştir:

$ 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

Bu izleme türü için veri kaynağı adını android.protolog kullanın.

Yapılandırma seçenekleri

İzleme modu (tracing_mode): Kullanılacak günlük yapılandırmasını belirler:

  • DEFAULT: İzler yalnızca group_overrides içinde belirtilen günlük gruplarını ve düzeylerini kaydeder.
  • ENABLE_ALL: group_overrides içinde belirtilmediği sürece tüm günlük gruplarını ve düzeylerini izler.

Minimum günlük düzeyi (default_log_from_level): Ayarlanırsa bir grup geçersiz kılma belirtilmediği sürece bu düzey dahil olmak üzere daha yüksek günlük düzeyine sahip tüm iletiler izlenir. Örneğin, tüm günlükleri etkinleştirmek zorunda kalmadan tüm uyarıların ve hataların günlüğe kaydedilmesini sağlamak için kullanılır. Desteklenen değerler:

  • PROTOLOG_LEVEL_DEBUG
  • PROTOLOG_LEVEL_VERBOSE
  • PROTOLOG_LEVEL_INFO
  • PROTOLOG_LEVEL_WARN
  • PROTOLOG_LEVEL_ERROR
  • PROTOLOG_LEVEL_WTF

Grup geçersiz kılmaları (group_overrides): Her ProtoLog grubu için günlük düzeyinin manuel olarak yapılandırılmasını sağlar. Her grup şunları içerir:

  • name: Android kaynak kodunda kullanılan ProtoLog grup adı.
  • log_from: default_log_from_level ile aynıdır ancak yalnızca mevcut grup için belirtilir.
  • collect_stacktrace: true olarak ayarlandığında, izlenen gruptaki her ProtoLog mesajı için yığın izini toplar.

Örnek

Aşağıda, adb için ProtoLog izleme türüne dair bir örnek verilmiştir:

$ 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

Giriş

Bu izleme türü için veri kaynağı adını android.input.inputevent kullanın.

Yapılandırma seçenekleri

İzleme modu (trace_mode): Giriş izlemenin gizliliği koruyan kurallar kullanılarak başlatılıp başlatılmayacağını veya tüm giriş etkinliklerinin kaydedilip kaydedilmeyeceğini belirler:

  • TRACE_MODE_TRACE_ALL: Sistem tarafından işlenen tüm giriş etkinliklerini, işlendikleri bağlamdan bağımsız olarak kaydeder.
  • TRACE_MODE_USE_RULES: İzlenecek etkinlikleri belirtmek için bu yapılandırmada tanımlanan izleme kurallarını kullanır. İzleme kurallarını belirtme hakkında daha fazla bilgi için android_input_event_config.proto başlıklı makaleyi inceleyin.

Örnek

Aşağıda, adb için giriş izi türü örneği verilmiştir:

$ 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 (katmanlar)

Bu izleme türü için veri kaynağı adını android.surfaceflinger.layers kullanın.

Yapılandırma seçenekleri

İzleme modu (mode): Öğelerin kaydedilme sıklığını tanımlar:

  • MODE_ACTIVE: İz katmanlarının anlık görüntüleri. Katmanlarda her değişiklik yapıldığında anlık görüntü alınır.
  • MODE_GENERATED: SurfaceFlinger'ın dahili halka arabelleğinde tutulan işlemlerden katman anlık görüntüleri oluşturur. Katmanın anlık görüntü oluşturma işlemi, bu veri kaynağı temizlendiğinde gerçekleşir.
  • MODE_DUMP: Tek bir katmanın anlık görüntüsünü izler.
  • MODE_GENERATED_BUGREPORT_ONLY: MODE_GENERATED ile aynıdır ancak katman anlık görüntülerinin oluşturulmasını yalnızca hata raporu alındığında tetikler, izleme temizlendiğinde tetiklemez.

İzleme işaretleri (trace_flags):

  • TRACE_FLAG_INPUT: Yüzeyde giriş verileri varsa giriş penceresinin özelliklerini izler.
  • TRACE_FLAG_COMPOSITION: Kompozisyon türünü ve görünür bölgeyi izler.
  • TRACE_FLAG_EXTRA: Ekran dışı katmanlar da dahil olmak üzere ek yüzey meta verilerini izler.

  • TRACE_FLAG_HWC: Yapılandırılmamış ek donanım bestecisi meta verilerini izler.

  • TRACE_FLAG_BUFFERS: SurfaceFlinger'ı, yüzeydeki tüm arabellek değişikliklerini izleyecek şekilde yapılandırır. SurfaceFlinger, varsayılan olarak yalnızca geometri değişiklikleri olduğunda yeni bir durumu izler.

  • TRACE_FLAG_VIRTUAL_DISPLAYS: İzde sanal ekran katmanları bulunur.

Örnek

Aşağıda, adb için SurfaceFlinger izleme türüne bir örnek verilmiştir:

$ 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

Farklı yapılandırma değerlerinin anlamı hakkında ayrıntılı bilgi için SurfaceFlinger sayfasına bakın.

Kabuk geçişleri

Bu izleme türü için veri kaynağı adını com.android.wm.shell.transition kullanın.

Yapılandırma seçenekleri

Bu izleme türünde yapılandırma seçeneği yoktur.

Örnek

Aşağıda, adb için kabuk geçişi izleme türüne dair bir örnek verilmiştir:

$ 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 (işlemler)

Bu izleme türü için veri kaynağı adını android.surfaceflinger.transactions kullanın.

Yapılandırma seçenekleri

İzleme modu (mode): Öğelerin kaydedilme sıklığını tanımlar:

  • MODE_CONTINUOUS: SurfaceFlinger, veri kaynağı her temizlendiğinde işlemlere ait dahili halka arabelleğini yazar. Sarma arabellek, SurfaceFlinger'ın ilk durumunu ve en son işlemleri içerir.

  • MODE_ACTIVE: SurfaceFlinger, ilk durumu ve ardından veri kaynağı durdurulana kadar her gelen işlemi yazar.

Örnek

Aşağıda, adb için SurfaceFlinger işlemleri izleme türüne dair bir örnek verilmiştir.

$ 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

Bu izleme türü için veri kaynağı adını: android.inputmethod kullanın.

Yapılandırma seçenekleri

Bu izleme türünde yapılandırma seçeneği yoktur.

Örnek

Aşağıda, adb için IME izleme türüne ilişkin bir örnek verilmiştir:

$ 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

Bu izleme türü için android.viewcapture veri kaynağı adını kullanın.

Yapılandırma seçenekleri

Bu izleme türünde yapılandırma seçeneği yoktur.

Örnek

Aşağıda, adb için ViewCapture izleme türü örneği verilmiştir:

$ 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

Eksiksiz örnek

Perfetto, tek bir yapılandırmada birden fazla kaynaktan veri toplamanıza olanak tanır. Tüm Winscope izlerini tek bir komutla toplayabilirsiniz:

$ 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

Android 14 ve önceki sürümlerde iz yakalama

Aşağıdaki izlerin her biri için adb shell komutlarını çalıştırmadan önce adb root komutunu çalıştırın. İzlemenin sonunda, izleme dosyaları /data/misc/wmtrace içinde kullanılabilir. Bir dosyayı veya dizini ve alt dizinlerini bir cihazdan kopyalamak için Dosyaları bir cihaza ve cihazdan kopyalama başlıklı makaleyi inceleyin.

WindowManager izleri

WindowManager izlerini almak için:

  • İzlemeyi etkinleştirme:

    adb shell wm tracing start
    
  • İzlemeyi devre dışı bırakma:

    adb shell wm tracing stop
    
  • İzleme yakalama işlemi çalıştırılırken günlük kaydı verilerini dosyaya kaydetme:

    adb shell wm tracing save-for-bugreport
    
  • Çerçeve başına bir kez izleme günlüğü oluşturma:

    adb shell wm tracing frame
    
  • Her işlemi günlüğe kaydetme:

    adb shell wm tracing transaction
    
  • Maksimum günlük boyutunu (KB cinsinden) ayarlayın:

    adb shell wm tracing size
    
  • İzleme durumunu yazdır:

    adb shell wm tracing status
    
  • Günlük düzeyini critical (yalnızca azaltılmış bilgi içeren pencereler), trim (azaltılmış bilgi içeren tüm pencereler) veya all (tüm pencereler ve bilgiler) olarak ayarlayın:

    adb shell wm tracing level
    

WindowManager dumps

WindowManager dökümlerini almak için:

adb exec-out dumpsys window --proto > window_dump.winscope

ProtoLog

Aşağıdaki komutlar ProtoLog sistemi için kullanılır.

system_server işleminde:

  • ProtoLog'u başlatma:

    adb shell cmd window logging start
    
  • ProtoLog'u durdurma:

    adb shell cmd window logging stop
    
  • Belirli günlük grupları için ProtoLog'u etkinleştirme:

    adb shell cmd window logging enable [group...]
    
  • Belirli günlük grupları için ProtoLog'u devre dışı bırakma:

    adb shell cmd window logging disable [group...]
    
  • Belirli günlük grupları için Logcat günlük kaydını etkinleştirin:

    adb shell cmd window logging enable-text [group...]
    
  • Belirli günlük grupları için Logcat günlük kaydını devre dışı bırakma:

    adb shell cmd window logging disable-text [group...]
    

WMShell'de:

  • ProtoLog'u başlatma:

    adb shell dumpsys activity service SystemUIService WMShell
    

SurfaceFlinger izleri (katmanlar)

SurfaceFlinger katmanı izleme, yakalama için Perfetto izini kullanır. Yapılandırma bilgileri için İzleme yapılandırması başlıklı makaleyi inceleyin.

SurfaceFlinger katmanı izleme yapılandırmasıyla ilgili aşağıdaki örneğe bakın:

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
        }
    }
}

SurfaceFlinger katmanları için izleme oluşturmak üzere aşağıdaki örnek komuta bakın:

adb shell -t perfetto \
    -c - --txt \
    -o /data/misc/perfetto-traces/trace \

SurfaceFlinger dökümleri (katmanlar)

SurfaceFlinger dökümlerini almak için:

adb exec-out dumpsys SurfaceFlinger --proto > sf_dump.winscope

Kabuk geçişleri

Geçiş izleme için aşağıdaki komutlar kullanılır.

system_server işleminde:

  • İzleme başlatma:

    adb shell cmd window shell tracing start
    
  • İzlemeyi durdurma:

    adb shell cmd window shell tracing stop
    
  • WMShell'de izleme başlatma:

    adb shell dumpsys activity service SystemUIService WMShell transitions tracing start
    
  • WMShell'de izlemeyi durdurma:

    adb shell dumpsys activity service SystemUIService WMShell transitions tracing stop
    

IME

Giriş Yöntemi Düzenleyici (IME) izleme için aşağıdaki komutlar kullanılır:

  • Giriş yöntemi (IM) istemcileri, giriş yöntemi hizmeti (IMS) ve giriş yöntemi yönetim hizmeti (IMMS) için IME izlemeyi başlatın:

    adb shell ime tracing start
    
  • IME istemcilerini, IMS'yi ve IMMS'yi izlemeye başlayın:

    adb shell ime tracing stop
    

SurfaceFlinger (işlemler)

SurfaceFlinger işlem izleme, yakalama için Perfetto izini kullanır. Yapılandırma bilgileri için İzleme yapılandırması başlıklı makaleyi inceleyin.

SurfaceFlinger active tracing için Perfetto yapılandırmasıyla ilgili aşağıdaki örneğe bakın:

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

SurfaceFlinger sürekli izleme için Perfetto yapılandırmasıyla ilgili aşağıdaki örneğe bakın:

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
        }
    }
}

SurfaceFlinger işlemleri için izleme oluşturmak üzere aşağıdaki örnek komuta bakın:

    adb shell perfetto \
    -c - --txt \
    -o /data/misc/perfetto-traces/trace \