Winscope kullanarak pencere geçişlerini izleme

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:

  1. Android kaynağını indirin .
  2. Winscope klasörüne gidin:

    cd development/tools/winscope
    
  3. 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

  4. Aşağıdakileri kullanarak tüm ürün ve test hedeflerini oluşturun:

    npm run build:prod
    
  5. 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:

  1. Geliştirici seçeneklerini etkinleştirin .
  2. Geliştirici Seçenekleri altında Sistem İzleme'yi seçin.
  3. Winscope izlerini topla seçeneğini etkinleştirin.
  4. Çeşitli altında:
    1. Hata raporlarına kayıt ekle seçeneğini etkinleştirin.
    2. Hızlı Ayarları Göster kutucuğunu etkinleştirin.
  5. Hatayı yeniden oluşturmanız gereken yere gidin.
  6. Yakalamayı başlatmak için Hızlı Ayarlar'ı açın ve İzlemeyi kaydet'i seçin:

    quick_setting_winscope

    Şekil 1. Kayıt İzleme özelliğine sahip hızlı ayar menüsü.

  7. Yalnızca hatayı yeniden oluşturmak için gereken adımları uygulayın.

  8. Yakalamayı durdurmak için Hızlı Ayarlar'ı açın ve İzlemeyi durdur öğesini seçin.

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

  1. İzleri Topla ekranında ADB Proxy'sine tıklayın:

    capture_traces_winscope

    Şekil 2. Winscope'ta izleri yakalayın.

  2. İzleri doğrudan tarayıcınızdan yakalamak için Winscope ADB Connect proxy'sini başlatın.

  3. Komutu çalıştırın:

    python3 $ANDROID_BUILD_TOP/development/tools/winscope/src/adb/winscope_proxy.py
    
  4. Yakalamayı başlatmak için İzleri Topla ekranında hedefleri ve yapılandırmayı seçin ve İzlemeyi başlat öğesine tıklayın:

    collect_traces_winscope

    Şekil 3. Winscope'ta izleri toplayın.

  5. Yakalamayı durdurmak için İzlemeyi sonlandır'a tıklayın:

    end_trace_winscope

    Ş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:

dump-winscope

Ş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) veya all (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:

  1. Sağdaki paneli kullanarak kayıtlı izlerinizi yükleyin. Yüklenen izleri kaldırabilir veya daha fazla iz yükleyebilirsiniz.

    upload_traces_winscope

    Şekil 6. İzleri Winscope'a yükleyin.

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

    view_traces_winscope

    Şekil 7. Winscope'ta izleri görüntüleyin.

    Yeniden adlandırmak için pencerenin en üst panelindeki kullanıcı arayüzünü kullanındüzenleme_adı ve yüklediğiniz izlemeyi indirinindirme_trace veya yeni bir tane yüklemek için.

  3. 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.arrow_left_time ve doğruarrow_right_time 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ınzoom_in_time veya uzaklaştırzoom_out_time 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ınarrow_up_time (sag alt köşe).

    time_nav_winscope

    Ş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:

    expand_time_winscope

    Şekil 9. Winscope'ta genişletilmiş zaman çizelgesi.

  4. İ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:sf_trace

      Ş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ırzoom_in_time ve uzaklaştırzoom_out_time Daha iyi inceleme için katmanlara.
        • Sıfırlama düğmesireset_sf (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.

      wm_trace

      Ş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:

      transaction_trace

      Ş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:

      protolog_trace

      Ş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:

      transitions_trace

      Şekil 14. Winscope'ta geçiş izi.