Winscope, kullanıcıların animasyonlar ve geçişler sırasında ve sonrasında çeşitli sistem hizmetlerinin durumlarını kaydetmesine, yeniden 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. İzleme dosyasıyla birlikte Winscope kullanıcı arayüzünü kullanarak, geçişleri yeniden oynatarak, adım atarak ve hata ayıklayarak, ekran kaydı olsun veya olmasın, her animasyon karesi için bu hizmetlerin durumunu inceleyebilirsiniz.
Winscope'a yüklenebilecek trace'ler üreten sistem servisleri şunlardır:
- SurfaceFlinger
- Pencere Yöneticisi
- WShell
- IME
- Başlatıcı
Winscope izleme görüntüleyicisini çalıştırın
Winscope izleme, platformdaki hizmetlerin bir parçasıdır. Bu bölümde Winscope izleme görüntüleyicisini indirmek, oluşturmak 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ı izleyin:
- 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 şunu çalıştırın:
npm run
Aşağıdakileri kullanarak tüm ürün ve test hedeflerini oluşturun:
npm run build:prod
Winscope'u şunu kullanarak çalıştırın:
npm run start
İzleri yakalayın
Cihazdaki izleri Winscope veya Android Debug Bridge (adb) komutları aracılığıyla yakalayabilirsiniz.
Cihazdaki izleri yakalayın
Animasyon sorunlarına ilişkin hataları bildirirken veri toplamak için cihazdaki izleri yakalayın. Yapılandırma özelleştirilemediği için 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 seçeneğini etkinleştirin.
- Çeşitli altında:
- Hata raporlarına kayıt ekle seçeneğini etkinleştirin.
- Hızlı Ayarları Göster kutucuğunu etkinleştirin.
- Hatayı yeniden oluşturmanız gereken yere gidin.
Yakalamayı başlatmak için Hızlı Ayarlar'ı açın ve İzlemeyi kaydet'i seçin:
Şekil 1. Kayıt İzleme özelliğine sahip hızlı ayar menüsü.
Yalnızca hatayı yeniden oluşturmak için gereken adımları uygulayın.
Yakalamayı durdurmak için Hızlı Ayarlar'ı açın ve İzlemeyi durdur öğesini seçin.
Yakalanan günlüğü Gmail, Drive veya BetterBug gibi listelenen seçeneklerden birini kullanarak paylaşın.
Winscope aracılığıyla izleri yakalayın
Yerel geliştirme ve hata ayıklama için Winscope'u kullanarak izleri yakalayabilirsiniz. Winscope, USB veya Wi-Fi üzerinden cihaz bağlantısını destekleyen adb'yi kullanır.
Winscope'ta:
İzleri Topla ekranında ADB Proxy'sine tıklayın:
Şekil 2. Winscope'ta izleri yakalayın.
İzleri doğrudan tarayıcınızdan yakalamak için Winscope ADB Connect proxy'sini başlatın.
Komutu çalıştırın:
python3 $ANDROID_BUILD_TOP/development/tools/winscope/src/adb/winscope_proxy.py
Yakalamayı başlatmak için İzleri Topla ekranında hedefleri ve yapılandırmayı seçin ve İzlemeyi başlat öğesine tıklayın:
Şekil 3. Winscope'ta izleri toplayın.
Yakalamayı durdurmak için İzlemeyi sonlandır'a tıklayın:
Şekil 4. Winscope'ta izlemeyi sonlandırın.
Araç, izleri Winscope'un kullanıcı arayüzüne yüklerken, Proto Dosyaları Getiriliyor ve Ayrıştırılıyor mesajları ekranda beliriyor.
Winscope kullanarak durum dökümü oluşturun
Winscope kullanarak durum dökümü almak için, İzleri Topla ekranında Döküm sekmesini seçin ve ardından Döküm durumu'na tıklayın:
Şekil 5. Winscope'ta döküm durumu.
Adb komutları aracılığıyla izleri yakalayın
Aşağıdaki izlemelerin her biri için adb shell
komutlarını çalıştırmadan önce adb root
çalıştırın. İzlemenin sonunda izleme dosyaları /data/misc/wmtrace
konumunda bulunur. Bir dosya veya dizini ve alt dizinlerini bir aygıttan kopyalamak için bkz. Dosyaları aygıta ve aygıttan kopyalama . Daha fazla bilgi için adb'ye bakın.
WindowManager izleri
WindowManager izlerini yakalamak için:
İzlemeyi etkinleştir:
adb shell wm tracing start
İzlemeyi devre dışı bırak:
adb shell wm tracing stop
İz yakalamayı ç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 kaydet:
adb shell wm tracing frame
Her işlemi günlüğe kaydedin:
adb shell wm tracing transaction
Maksimum günlük boyutunu ayarlayın (KB cinsinden):
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 görünür pencereler),trim
(azaltılmış bilgi içeren tüm pencereler) veyaall
(tüm pencereler ve bilgiler) olarak ayarlayın:adb shell wm tracing level
Protokol Günlüğü
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 Durdurun:
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ırakın:
adb shell cmd window logging disable [group...]
Belirli günlük grupları için Logcat günlüğünü etkinleştirin:
adb shell cmd window logging enable-text [group...]
Belirli günlük grupları için Logcat günlüğünü devre dışı bırakın:
adb shell cmd window logging disable-text [group...]
WWMShell'de:
ProtoLog'u başlatın:
adb shell dumpsys activity service SystemUIService WMShell
Geçiş izleme
Geçiş takibi için aşağıdaki komutlar kullanılır:
system_server
sürecinde:
Bir izleme başlatın:
adb shell cmd window shell tracing start
Bir izi durdurma:
adb shell cmd window shell tracing stop
WShell'de bir izleme başlatın:
adb shell dumpsys activity service SystemUIService WMShell transitions tracing start
WShell'de izlemeyi durdurun:
adb shell dumpsys activity service SystemUIService WMShell transitions tracing stop
Giriş Yöntemi Düzenleyicisi
Giriş Yöntemi Düzenleyicisi (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 katmanları
SurfaceFlinger katman izleme, yakalama için Perfetto izlemeyi kullanır. Yapılandırma bilgileri için bkz. Yapılandırmayı izleme.
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ına yönelik izleme oluşturmak için 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 bkz. Yapılandırmayı izleme.
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 aşağıdaki Perfetto yapılandırması örneğine 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şlemlerine yönelik izleme oluşturmak için 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ştur
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ı protokol dosyaları olarak saklar. Adb kullanarak durum dökümlerini oluşturmak için aşağıdaki komutları çalıştırın.
WindowManager'da:
adb exec-out dumpsys window --proto > window_dump.winscope
SurfaceFlinger için:
adb exec-out dumpsys SurfaceFlinger --proto > sf_dump.winscope
İzleri analiz edin
Winscope, animasyon sorunlarına neden olan geçici ve geçersiz durumların hatalarını ayıklamak için 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. Winscope'ta izleri analiz etmek, hatanın tam katmanını, çerçevesini ve oluşma durumunu belirlemeye yardımcı olur.
Winscope'u kullanın
İzleri yakaladığınızda izleri Winscope'ta 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 İzleri görüntüle'ye tıklayın. Her iz için sekmeler pencerenin üst panelinde görünür. Yüklenen dosya ilgili izleri içeriyorsa, ekran kayıt izinin kayan görünümü ekrana yerleştirilir.
Şekil 7. Winscope'ta izleri görüntüleyin.
Yeniden adlandırmak için pencerenin en üst panelindeki kullanıcı arayüzünü kullanın ve yüklediğiniz izlemeyi indirin veya yeni bir tane yüklemek için.
Pencerenin alt panelindeki zaman kaydırma aracını kullanarak zaman içindeki izler arasında gezinin. Ek zaman navigasyonu için Şekil 8'de gösterildiği gibi aşağıdaki özellikleri kullanın:
- Belirli bir zamana veya olaya gitmek için imleci (zaman kaydırıcısını) veya sol tuşu kullanın. ve doğru zaman görüntüleme kutusundaki oklara (sol alt köşe) veya klavyenizdeki sol ve sağ oklara basın.
- Seçilen renk kodlu izleri zaman çizelgesinde görüntülemek için açılır menüyü kullanın (zaman kaydırıcısının solunda). Varsayılan olarak izleme sekmeleri kullanılarak görüntülenen son üç izleme, zaman çizelgesinde görüntülenir.
- Yüklenen tüm izlerin ayrıntılı bir görünümü için yakınlaştırmayı kullanın veya uzaklaştır aracını (zaman kaydırıcısının altında) kullanın veya klavyenizde kaydırın. Yakınlaştırma düzeyini sıfırlamak için sıfırlama düğmesini kullanın.
- Zaman içindeki iz dağılımının genişletilmiş bir görünümü için yukarı oku tıklayın (sag alt köşe).
Şekil 8. Winscope'ta zaman navigasyonu.
Genişletilmiş görünümde (Şekil 9), daha iyi inceleme için belirli zaman dilimlerini seçin ve yakınlaştırın:
Şekil 9. Winscope'ta genişletilmiş zaman çizelgesi.
İzleri incelemek için ekran kaydı ile cihazın durumunu görüntüleyebilirsiniz. Belirli bir izi incelemek için aracın üst panelindeki ilgili iz sekmesine tıklayın.
Surface Flinger izi için, Şekil 10'da gösterildiği gibi üç panel, belirli bir zaman dilimindeki izin farklı görünümlerini görüntüler:
Şekil 10. Winscope'ta Surface Flinger izi.
Katman görünümü: Dikdörtgen kaplamalardaki katmanların 3 boyutlu görünümü. Aşağıdaki kullanıcı arayüzü öğeleri, grafik öğelerini konumlarına, boyutlarına, dönüşümlerine ve z sırasına göre oluşturmak için dikdörtgenleri ayarlar:
- Döndürme kaydırıcısı (Katmanlar görünümünün sol üst kısmı), katmanlı dikdörtgenleri seçilen açılarda görüntülemek için döndürür.
- Aralık kaydırıcısı (Katmanlar görünümünün sağ üst kısmı), seçilen bileşik görünümü oluşturmak için katmanlar arasındaki aralığı ayarlar.
- Yakınlaştırma araçları (Katmanlar görünümünün sağ üst kısmında) yakınlaştırır ve uzaklaştır Daha iyi inceleme için katmanlara.
- Sıfırlama düğmesi (Katmanlar görünümünün sağ üst kısmı) kamera ayarlarını orijinal görünüme geri yükler.
- Daha iyi yakınlaştırmayı kolaylaştırmak 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 öğelerin görselleştirilmesine 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ı), 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 bir durum geçişi olduğunda seçilir. Araç seçildiğinde mevcut durumu önceki durumla karşılaştırır. Yeni bir öğe yeşil renkle vurgulanır, silinmiş bir öğe kırmızıyla vurgulanır ve değiştirilmiş bir öğe maviyle 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 bilgi içerir. Özellikler görünümünün alt paneli, tüm özelliklerin 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ündeki gibi davranır.
- Varsayılanları göster (Özellikler görünümünün sol üst kısmı), seçildiğinde Proto Dökümünde varsayılan protokol değerlerini görüntüler. Varsayılan olarak bu değerler Proto Dökümünde listelenmez. Varsayılan protokol değerleri, protokol alanı tanımından alınır. Bir protokol alanında boş olmayan bir varsayılan değer kümesi yoksa gösterilen varsayılan protokol değerleri şunlardır:
- Dizeler: Boş
- Sayılar: 0
- Boole değerleri: Yanlış
- Nesneler: Boş
Üç görünüm ve ekran kaydı arasındaki seçim senkronize edilir, yani zamanda farklı bir noktaya gittiğinizde tüm izler senkronize olarak güncellenir. Bir katmanın özelliklerini görmek için, Hiyerarşi görünümünde tıklatarak veya Özellikler görünümünde ilgili dikdörtgeni tıklatarak katmanı seçin. Mor bir dikdörtgen, bu katmana bir görünüm izinin eklendiğini gösterir. Mor bir katmana çift tıklandığında kullanıcı arayüzü ilgili görünüm izleme sekmesine geçiş yapar.
Pencere Yöneticisi izlemesi için, Şekil 11'de gösterildiği gibi üç panel, belirli bir zaman dilimindeki izlemenin farklı görünümlerini görüntüler:
- Windows görünümü: Katmanların 3 boyutlu görünümü.
- Hiyerarşi görünümü: Katmanların tam hiyerarşisi.
- Özellikler görünümü, tüm özelliklerin Proto Dökümünü içerir.
Üç görünüm ve ekran kaydı arasındaki seçim senkronize edilir, yani zamanda farklı bir noktaya gittiğinizde tüm izler senkronize olarak güncellenir.
Şekil 11. Winscope'ta Pencere Yöneticisi izlemesi.
İşlem izlemeleri için, Surface Flinger ile Window Manager arasındaki işlemler, görüntülenen kimliklere, türe ve metne göre aranabilen tablo formatında ve protokol dökümünü gösteren bir özellikler görünümünde sunulur. İki görünüm arasındaki seçim ve ekran kaydı senkronize edilir:
Şekil 12. Winscope'ta işlem takibi.
ProtoLog izlemeleri için bilgiler, etiketlere, kaynak dosyalara ve metne göre aranabilen bir tablo formatında sunulur:
Şekil 13. Winscope'ta ProtoLog izi.
Geçiş izleri için, seçilen geçişin özellikleriyle birlikte kimlik, tür, gönderme zamanı, süre ve durumu içeren bir geçiş listesi görüntülenir:
Şekil 14. Winscope'ta geçiş izi.