adb komutlarıyla izlemeleri yakalama

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

Android 15'ten itibaren Winscope izlemeleri Perfetto'ya entegre edilir ve Perfetto komut satırı kullanılarak toplanır. Her Winscope izlemesi, 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 izleme işleminin farklı bir komutu vardır ve her birini ayrı ayrı toplayabilirsiniz. Daha fazla bilgi için Android 14 ve önceki sürümlerde izleme kayıtları oluşturma başlıklı makaleyi inceleyin.

WindowManager

Bu izleme türü için android.windowmanager veri kaynağı adını 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: En az performans yüküyle yalnızca görünür öğeleri günlüğe kaydeder.
  • Günlük sıklığı (log_frequency): Öğelerin günlüğe kaydedilme sıklığını tanımlar:

    • LOG_FREQUENCY_FRAME: Bir çerçeve bağlandığında durum anlık görüntülerini izler.
    • LOG_FREQUENCY_TRANSACTION: Her işlem taahhüt edildiğinde durum anlık görüntülerini izler.
    • LOG_FREQUENCY_SINGLE_DUMP: Veri kaynağı başlatılırken tek durum anlık görüntülerini izler.

Yapılandırma değerleri hakkında ayrıntılı bilgi için WindowManager'a 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 android.protolog veri kaynağı adını kullanın.

Yapılandırma seçenekleri

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

  • DEFAULT: Yalnızca group_overrides içinde belirtilen günlük gruplarını ve düzeylerini izler.
  • 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üzeyden yüksek veya bu düzeyi içeren günlük düzeyine sahip tüm iletiler izlenir. Örneğin, tüm günlükleri etkinleştirmek zorunda kalmadan tüm uyarı ve hataların günlük kaydına alınmasını 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ılma (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 geçerli grup için belirtilir.
  • collect_stacktrace: true olarak ayarlandığında, izlenen gruptaki her ProtoLog mesajının yığın izlemesini toplar.

Örnek

Aşağıda, adb için ProtoLog 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.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 android.input.inputevent veri kaynağı adını kullanın.

Yapılandırma seçenekleri

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

  • TRACE_MODE_TRACE_ALL: İşlendikleri bağlamdan bağımsız olarak sistem tarafından işlenen tüm giriş etkinliklerini kaydeder.
  • TRACE_MODE_USE_RULES: Hangi etkinliklerin izleneceğini belirtmek için bu yapılandırmada tanımlanan izleme kurallarını kullanır. İzleme kurallarının belirtilmesi 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ş 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.input.inputevent"
           android_input_event_config: {
              mode: TRACE_MODE_TRACE_ALL
           }
       }
   }
EOF

SurfaceFlinger (katmanlar)

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

Yapılandırma seçenekleri

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

  • MODE_ACTIVE: İz katmanlarının anlık görüntüleri. Katman değişikliği her gerçekleştiğinde bir 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üleri, bu veri kaynağı temizlendiğinde oluşturulur.
  • MODE_DUMP: Tek katmanlı bir anlık görüntüyü izler.
  • MODE_GENERATED_BUGREPORT_ONLY: MODE_GENERATED ile aynıdır ancak katman anlık görüntülerinin oluşturulmasını yalnızca bir hata raporu alındığında tetikler, izleme her temizlendiğinde değil.

İz işaretleri (trace_flags):

  • TRACE_FLAG_INPUT: Yüzey giriş verileri içeriyorsa 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: Ek yapılandırılmamış donanım derleyici meta verilerini izler.

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

  • TRACE_FLAG_VIRTUAL_DISPLAYS: İzlemede sanal görüntüleme katmanlarını içerir.

Örnek

Aşağıda, adb için SurfaceFlinger 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.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 bölümüne bakın.

Kabuk geçişleri

Bu izleme türü için com.android.wm.shell.transition 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 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 (transactions)

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

Yapılandırma seçenekleri

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

  • MODE_CONTINUOUS: SurfaceFlinger, veri kaynağı her temizlendiğinde dahili işlem halka arabelleğine yazar. Halka arabelleği, SurfaceFlinger'ın ilk durumunu ve en son işlemleri içerir.

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

Örnek

Aşağıda, adb için SurfaceFlinger işlem 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ı kullanın: android.inputmethod.

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

Tam ö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 izleme kayıtları yakalama

Aşağıdaki izlemelerin her biri için adb shell komutlarını çalıştırmadan önce adb root komutunu çalıştırın. İzleme işleminin sonunda izleme dosyaları /data/misc/wmtrace konumunda bulunur. Bir dosyayı veya dizini ve alt dizinlerini bir cihazdan kopyalamak için Bir cihaza dosya kopyalama ve cihazdan dosya kopyalama başlıklı makaleyi inceleyin.

WindowManager izleri

WindowManager izlerini yakalamak için:

  • İzi etkinleştirme:

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

    adb shell wm tracing stop
    
  • Bir izleme yakalaması çalıştırırken günlük verilerini dosyaya kaydetme:

    adb shell wm tracing save-for-bugreport
    
  • İzlemeyi kare başına bir kez günlüğe kaydetme:

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

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

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

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

    adb shell wm tracing level
    

WindowManager dökümü

WindowManager dökümlerini yakalamak için:

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

ProtoLog

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

system_server sürecinde:

  • ProtoLog'u başlatın:

    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ştirin:

    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şlatın:

    adb shell dumpsys activity service SystemUIService WMShell
    

SurfaceFlinger izleri (katmanlar)

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

SurfaceFlinger katman izleme için aşağıdaki yapılandırma örneğine 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 yakalamak için:

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

Kabuk geçişleri

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

system_server sürecinde:

  • İ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 bir 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 istemcileri, IMS ve IMMS'yi izlemeye başlayın:

    adb shell ime tracing stop
    

SurfaceFlinger (transactions)

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

SurfaceFlinger etkin izleme için Perfetto yapılandırması örneğine göz atı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ı örneğine göz atı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 \