Winscope, kullanıcıların animasyonlar ve geçişler sırasında ve sonrasında birkaç sistem hizmetinin durumunu kaydetmesine, tekrar oynatmasına ve analiz etmesine olanak tanıyan bir web aracıdır. Winscope, ilgili tüm sistem hizmeti durumlarını bir izleme dosyasına kaydeder. Winscope kullanıcı arayüzünü izleme dosyasıyla kullanarak, geçişleri oynatarak, adımlayarak ve hata ayıklayarak her animasyon karesi için bu hizmetlerin durumunu ekran kaydı ile veya ekran kaydı olmadan inceleyebilirsiniz.
Winscope'a yüklenebilir izlemeler oluşturan sistem hizmetleri şunlardır:
- SurfaceFlinger
- Pencere Yöneticisi
- WMShell
- IME
- Roketatar
Winscope izleme görüntüleyiciyi çalıştırma
Winscope izleme, platformdaki hizmetlerin bir parçasıdır. Bu bölümde Winscope izleme görüntüleyiciyi indirmek, derlemek ve çalıştırmak için gereken adımlar özetlenmektedir.
Bilgisayarınızı Winscope izleyiciyi çalıştıracak şekilde ayarlamak için şu adımları uygulayın:
- Android kaynağını indirin.
Winscope klasörüne gidin:
cd development/tools/winscope
Bağımlılıkları aşağıdakileri kullanarak yükleyin:
npm install
Kullanılabilir komutların listesini görmek için şu komutu çalıştırın:
npm run
Aşağıdakileri kullanarak tüm üretim ve test hedeflerini oluşturun:
npm run build:prod
Şunu kullanarak Winscope'u çalıştırın:
npm run start
İzleri yakalama
Cihazda, Winscope veya Android Debug Bridge (adb) komutlarıyla izleri yakalayabilirsiniz.
Cihazdaki izleri yakalayın
Animasyon sorunlarıyla ilgili hata bildirirken veri toplamak için cihazda izleri yakalama Yapılandırma özelleştirilemediğinden tüm kullanıcı arayüzü izleri bu yöntemle kaydedilir.
Android cihazınızda:
- Geliştirici seçeneklerini etkinleştirin.
- Geliştirici Seçenekleri altında Sistem İzleme'yi seçin.
- Winscope izlerini topla'yı etkinleştirin.
- Çeşitli bölümünde:
- Hata raporlarına kayıt ekle seçeneğini etkinleştirin.
- Hızlı Ayar kutusunu göster'i etkinleştirin.
- Hatayı yeniden oluşturmanız gereken yere gidin.
Kaydı başlatmak için Hızlı Ayarlar'ı açıp İzleme kaydet'i seçin:
Şekil 1. Kayıt İzleme bulunan hızlı ayar menüsü.
Hatayı yeniden oluşturmak için yalnızca gerekli adımları uygulayın.
Kaydı durdurmak için Hızlı Ayarlar'ı açıp İzleme işlemini durdur'u seçin.
Yakalanan günlüğü, listelenen seçeneklerden birini (ör. Gmail, Drive veya BetterBug) kullanarak paylaşın.
Winscope ile izleri yakalayın
Yerel geliştirme ve hata ayıklama için Winscope'u kullanarak izlemeler yakalayabilirsiniz. Winscope, USB veya kablosuz ağ üzerinden cihaz bağlantısını destekleyen adb'yi kullanır.
Winscope'ta:
Collect Traces (İzleri Topla) ekranında ADB Proxy'yi (ADB Proxy) tıklayın:
Şekil 2. Winscope'ta iz yakalama
İzlemeleri doğrudan tarayıcınızdan yakalamak için Winscope ADB Connect proxy'yi başlatın.
Aşağıdaki komutu çalıştırın:
python3 $ANDROID_BUILD_TOP/development/tools/winscope/src/adb/winscope_proxy.py
Yakalama işlemini başlatmak için İz toplayın ekranında hedefleri ve yapılandırmayı seçip İzi başlat'ı tıklayın:
Şekil 3. Winscope'ta izleri toplayın.
Kaydı durdurmak için İzleme işlemini sonlandır'ı tıklayın:
Şekil 4. Winscope'ta izlemeyi sonlandır.
Araç, Winscope'un kullanıcı arayüzüne izleri yüklediğinde ekranda Getirme ve Ayrıştıran Proto Dosyalar mesajları görünür.
Winscope kullanarak durum dökümünü oluştur
Winscope'u kullanarak bir durum dökümü almak için Collect Traces (İzlenen Topla) ekranında Dump (Dump) sekmesini seçin ve ardından Dump state'i (Dump durumu) tıklayın:
5. Şekil. Winscope'ta döküm durumu.
adb komutları aracılığıyla izlemeleri 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
konumunda bulunur. Bir dosyayı veya dizini ve alt dizinlerini cihazdan kopyalamak için Bir cihaza ve cihazdan dosya kopyalama bölümüne bakın.
Daha fazla bilgi için adb'ye bakın.
WindowManager izleri
WindowManager izlerini yakalamak için:
İzlemeyi etkinleştirme:
adb shell wm tracing start
İzlemeyi devre dışı bırak:
adb shell wm tracing stop
İzleme yakalaması çalıştırırken günlük verilerini dosyaya kaydedin:
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 kaydet:
adb shell wm tracing transaction
Maksimum günlük boyutunu ayarlayın (KB cinsinden):
adb shell wm tracing size
Yazdırma izleme durumu:
adb shell wm tracing status
Günlük düzeyini
critical
(yalnızca bilgi azaltılmış görünür pencereler),trim
(bilgi düzeyi azaltılmış tüm pencereler) veyaall
(tüm pencereler ve bilgiler) olarak ayarlayın:adb shell wm tracing level
ProtoGünlük
Aşağıdaki komutlar ProtoLog sistemi için 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ştir:
adb shell cmd window logging enable [group...]
Belirtilen günlük grupları için ProtoLog'u devre dışı bırak:
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...]
Belirtilen günlük grupları için Logcat günlük kaydını devre dışı bırakın:
adb shell cmd window logging disable-text [group...]
WMShell'de:
ProtoLog'u başlatın:
adb shell dumpsys activity service SystemUIService WMShell
Geçiş izleme
Geçiş izleme için aşağıdaki komutlar kullanılır:
system_server
sürecinde:
İzleme başlatın:
adb shell cmd window shell tracing start
İzlemeyi durdurma:
adb shell cmd window shell tracing stop
WMShell'de iz başlatın:
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
Giriş Yöntemi Düzenleyici
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 katmanları
SurfaceFlinger katman izleme, yakalama için Perfetto izini kullanır. Yapılandırma bilgileri için Trace yapılandırması bölümünü inceleyin.
Aşağıdaki SurfaceFlinger katman izleme 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 işlemleri
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 aşağıdaki Perfetto yapılandırması örneğine 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ı ö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 \
adb kullanarak durum dökümü oluşturma
Winscope, hata raporlarından WindowManager ve SurfaceFlinger durumlarının anlık görüntüsünü okur. Hata raporları, durumları proto
klasöründe ayrı proto dosyaları olarak depolar. adb kullanarak durum dökümlerini oluşturmak için aşağıdaki komutları çalıştırın.
WindowManager için:
adb exec-out dumpsys window --proto > window_dump.winscope
SurfaceFlinger için:
adb exec-out dumpsys SurfaceFlinger --proto > sf_dump.winscope
İzleri analiz et
Animasyon sorunlarına neden olan geçici ve geçersiz durumlarda hata ayıklama yapmak için Winscope farklı izleme dosyalarını toplar, kareler ve zaman çizelgeleri üzerinde arama ve görselleştirme sağlar ve protobuf mesajlarını tutarlı bir şekilde sunar. İzleri Winscope'ta analiz etmek, hatanın oluştuğu katmanı, çerçeveyi ve durumunu tam olarak tanımlamanıza yardımcı olur.
Winscope'u kullanma
İzleri yakaladığınızda, Winscope'ta izleri analiz edin:
Sağdaki paneli kullanarak kayıtlı izlerinizi yükleyin. Yüklenen izleri kaldırabilir veya daha fazla iz yükleyebilirsiniz.
Şekil 6. İzleri Winscope'a yükleyin.
Yüklenen izleri görselleştirmek için İzlemeleri görüntüle'yi tıklayın. Her izine ait sekmeler, pencerenin üst panelinde görünür. Yüklenen dosya ilgili izleri içeriyorsa ekran kaydı izinin kayan bir görünümü ekrana yerleştirilir.
7.Şekil Winscope'ta izleri görüntüleyin.
Yüklediğiniz izlemeyi yeniden adlandırmak ve indirmek veya yeni bir iz yüklemek için pencerenin en üst panelindeki kullanıcı arayüzünü kullanın.
Pencerenin alt panelindeki zaman kaydırma aracını kullanarak zaman içindeki izlerde gezinin. Zaman içinde gezinmek için Şekil 8'de gösterilen aşağıdaki özellikleri kullanın:
- Belirli bir zamana veya tekrara gitmek için imleci (zaman kaydırma çubuğu) ya da zaman görüntüleme kutusundaki (sol alt köşe) sol ve sağ okları veya klavyenizdeki sol ve sağ okları kullanın.
- Zaman çizelgesinde seçili renk kodlu izleri görüntülemek için açılır menüyü (zaman kaydırma çubuğunun solunda) kullanın. Varsayılan olarak, izleme sekmeleri kullanılarak görüntülenen son üç iz zaman çizelgesinde gösterilir.
- Yüklenen tüm izleri ayrıntılı olarak görmek için yakınlaştırma veya uzaklaştırma aracını (zaman kaydırma çubuğunun altında) kullanın ya da klavyenizde ekranı kaydırın. Yakınlaştırma düzeyini sıfırlamak için sıfırla düğmesini kullanın.
- İz dağılımının zaman içindeki genişletilmiş görünümü için yukarı oku (sağ alt köşe) tıklayın.
8. Şekil. Winscope'ta zamanda gezinme.
Genişletilmiş görünümde (Şekil 9), daha iyi inceleme için belirli zaman aralıklarını seçip yakınlaştırın:
9. Şekil. Winscope'ta genişletilmiş zaman çizelgesi.
İzleri incelemek için ekran kaydıyla cihaz durumunu görüntüleyebilirsiniz. Belirli bir izlemeyi incelemek için aracın üst panelindeki ilgili izleme sekmesini tıklayın.
Surface Flinger izlemesi için üç panelde, belirli bir dönemde izlemenin farklı görünümleri gösterilir (Şekil 10'da gösterildiği gibi):
Şekil 10. Winscope'ta Surface Flinger izleme.
Katmanlar görünümü: Dikdörtgen yer paylaşımları hâlinde katmanların 3D görünümü. Aşağıdaki kullanıcı arayüzü öğeleri, dikdörtgenleri konum, boyut, dönüşüm ve z sıralamalarına göre grafik öğeleri oluşturacak şekilde ayarlar:
- Döndürme kaydırma çubuğu (Katmanlar görünümünün sol üst kısmında), katmanlı dikdörtgenleri seçilen açılarda görüntülemek için döndürür.
- Boşluk kaydırma çubuğu (Katmanlar görünümünün sağ üst kısmı), seçilen birleşik görünümü oluşturmak için katmanlar arasındaki boşluğu ayarlar.
- Yakınlaştırma araçları (Katmanlar görünümünün sağ üst kısmında), daha iyi inceleme için katmanları yakınlaştırır ve uzaklaştırır.
- Sıfırlama düğmesi (Katmanlar görünümünün sağ üst kısmındadır), kamera ayarlarını orijinal görünüme geri yükler.
- Daha iyi yakınlaştırma için dikdörtgenleri sürükleyin.
Hiyerarşi görünümü: Katmanların tam hiyerarşisi.
- Yalnızca görünür (Hiyerarşi görünümünün sağ üst kısmı) seçildiğinde, ekrandaki öğeleri görselleştirmeye yardımcı olmak için görünmez katmanları hiyerarşiden gizler.
- Düz (Hiyerarşi görünümünün sağ üst kısmında), seçildiğinde hiyerarşiyi düzleştirilmiş bir katman listesi olarak gösterir.
- Farkı göster (Hiyerarşi görünümünün sol üst kısmı) yalnızca durum geçişi olduğunda seçilir. Seçildiğinde, araç mevcut durumu önceki durumla karşılaştırır. Yeni bir öğe yeşil, silinen bir öğe kırmızı renkle ve değiştirilmiş bir öğe mavi renkle vurgulanır.
Özellikler görünümü: Seçilen katmanın özellikleri. Özellikler görünümünün üst paneli yalnızca Görünürlük, Geometri ve Arabellek gibi temel özellikler hakkında bilgiler içerir. Özellikler görünümünün alt paneli, tüm özelliklerin bir Proto Dökümü'nü içerir.
- Fark göster onay kutusu (Özellikler görünümünün sol üst kısmı), Hiyerarşi görünümünde olduğu gibi çalışır.
- Varsayılanları göster (Özellikler görünümünün sol üst kısmı) seçildiğinde, Proto Dump'ta varsayılan proto değerleri gösterilir.
Varsayılan olarak bu değerler Proto Dökümü'nde listelenmez. Varsayılan proto değerleri, proto alan tanımından alınır.
Bir proto alanında boş olmayan bir varsayılan değer ayarlanmamışsa gösterilen varsayılan proto değerleri şu şekilde olur:
- Dize: Boş
- Sayılar: 0
- Boole değerleri: Yanlış
- Nesneler: Boş
Üç görünüm ve ekran kaydı arasındaki seçim senkronize edilir. Başka bir deyişle, farklı bir zamana gittiğinizde tüm izler eşzamanlı olarak güncellenir. Bir katmanın özelliklerini görmek için katmanı Hiyerarşi görünümünde tıklayarak veya Özellikler görünümünde ilgili dikdörtgeni tıklayarak seçin. Mor dikdörtgen, bu katmana bir görüntüleme izinin eklendiğini gösterir. Mor bir katmanı çift tıkladığınızda kullanıcı arayüzü, ilgili görünüm izleme sekmesine geçiş yapar.
Window Manager izi için üç panel, Şekil 11'de gösterildiği gibi belirli bir dönemdeki izin farklı görünümlerini gösterir:
- Pencere görünümü: Katmanların 3D görünümü.
- Hiyerarşi görünümü: Katmanların tam hiyerarşisi.
- Mülkler görünümü, tüm mülklerin Proto Dump'ını içerir.
Üç görünüm ve ekran kaydı arasındaki seçim senkronize edilir. Başka bir deyişle, farklı bir zamana gittiğinizde tüm izler eşzamanlı olarak güncellenir.
Şekil 11. Winscope'ta Windows Manager izlemesi.
İşlemler izleri için Yüzey Flinger ve Pencere Yöneticisi arasındaki işlemler, proto dökümünü gösteren bir mülk görünümü ile birlikte görüntülenen kimlikler, tür ve metin ile aranabilir tablo biçiminde sunulur. İki görünüm ve ekran kaydı arasındaki seçim senkronize edilir:
Şekil 12. Winscope'ta işlem takibi.
ProtoLog izlemeleri için bilgiler, etiketlere, kaynak dosyalara ve metne göre aranabilir bir tablo biçiminde sunulur:
Şekil 13. Winscope'ta ProtoLog izleme.
Geçişler izlemeleri için, seçilen geçişin özellikleriyle birlikte kimlik, tür, gönderme zamanı, süre ve durumu içeren geçişlerin listesi gösterilir:
Şekil 14. Winscope'ta geçiş izleme.