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ızcagroup_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çinandroid_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) veyaall
(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 \