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