تتبع انتقالات النافذة باستخدام Winscope

Winscope هي أداة ويب تتيح للمستخدمين تسجيل حالات العديد من خدمات النظام وإعادة تشغيلها وتحليلها أثناء وبعد الرسوم المتحركة والانتقالات. يقوم Winscope بتسجيل كافة حالات خدمة النظام ذات الصلة في ملف تتبع. باستخدام واجهة مستخدم Winscope مع ملف التتبع، يمكنك فحص حالة هذه الخدمات لكل إطار رسوم متحركة، مع أو بدون تسجيل الشاشة، عن طريق إعادة التشغيل، والتنقل، وتصحيح الأخطاء خلال التحولات.

خدمات النظام التي تنتج آثارًا يمكن تحميلها في Winscope هي كما يلي:

  • SurfaceFlinger
  • مدير النافذة
  • WMSshell
  • محرر أسلوب الإدخال
  • منصة الإطلاق

قم بتشغيل عارض تتبع Winscope

يعد تتبع Winscope جزءًا من الخدمات المتوفرة على النظام الأساسي. يوضح هذا القسم الخطوات المطلوبة لتنزيل وإنشاء وتشغيل عارض التتبع Winscope.

اتبع هذه الخطوات لإعداد جهاز الكمبيوتر الخاص بك لتشغيل برنامج التتبع Winscope:

  1. تحميل المصدر للاندرويد .
  2. انتقل إلى مجلد Winscope:

    cd development/tools/winscope
    
  3. تثبيت التبعيات باستخدام:

    npm install
    

    لرؤية قائمة بالأوامر المتاحة، قم بتشغيل: npm run

  4. قم ببناء جميع أهداف المنتج والاختبار باستخدام:

    npm run build:prod
    
  5. قم بتشغيل Winscope باستخدام:

    npm run start
    

التقاط آثار

يمكنك التقاط الآثار على الجهاز ، من خلال Winscope ، أو من خلال أوامر Android Debug Bridge (adb) .

التقاط الآثار على الجهاز

التقط آثارًا على الجهاز لجمع البيانات عند حفظ الأخطاء في مشكلات الرسوم المتحركة. يتم تسجيل جميع آثار واجهة المستخدم بهذه الطريقة، حيث لا يمكن تخصيص التكوين.

على جهازك الأندرويد:

  1. تمكين خيارات المطور .
  2. حدد "تتبع النظام" ضمن "خيارات المطور" .
  3. تمكين جمع آثار Winscope .
  4. تحت المتنوعة :
    1. تمكين إرفاق التسجيلات بتقارير الأخطاء .
    2. تمكين إظهار مربع الإعدادات السريعة .
  5. انتقل إلى المكان الذي تريد إعادة إنتاج الخطأ فيه.
  6. لبدء الالتقاط، افتح الإعدادات السريعة وحدد تسجيل التتبع :

    quick_setting_winscope

    الشكل 1. قائمة الإعداد السريع مع سجل التتبع.

  7. قم بتنفيذ الخطوات الضرورية لإعادة إنتاج الخطأ فقط .

  8. لإيقاف الالتقاط، افتح الإعدادات السريعة وحدد إيقاف التتبع .

  9. قم بمشاركة السجل الذي تم التقاطه باستخدام أحد الخيارات المدرجة، مثل Gmail أو Drive أو BetterBug.

التقاط الآثار من خلال Winscope

يمكنك التقاط الآثار باستخدام Winscope للتطوير المحلي وتصحيح الأخطاء. يستخدم Winscope adb ، الذي يدعم اتصال الجهاز عبر USB أو Wi-Fi.

على وينسكوب:

  1. في شاشة تجميع الآثار ، انقر فوق ADB Proxy :

    capture_traces_winscope

    الشكل 2. التقاط الآثار على Winscope.

  2. قم بتشغيل وكيل Winscope ADB Connect لالتقاط الآثار مباشرة من متصفحك.

  3. قم بتشغيل الأمر:

    python3 $ANDROID_BUILD_TOP/development/tools/winscope/src/adb/winscope_proxy.py
    
  4. لبدء الالتقاط، في شاشة جمع الآثار ، حدد الأهداف والتكوين وانقر فوق بدء التتبع :

    collect_traces_winscope

    الشكل 3. جمع الآثار على Winscope.

  5. لإيقاف الالتقاط، انقر فوق إنهاء التتبع :

    end_trace_winscope

    الشكل 4. نهاية التتبع على Winscope.

أثناء قيام الأداة بتحميل الآثار على واجهة مستخدم Winscope، تظهر رسائل جلب الملفات الأولية وتحليلها على الشاشة.

قم بإنشاء تفريغ الحالة باستخدام Winscope

للحصول على تفريغ حالة باستخدام Winscope، في شاشة تجميع الآثار ، حدد علامة التبويب تفريغ ثم انقر فوق حالة تفريغ :

dump-winscope

الشكل 5. حالة التفريغ على Winscope.

التقط الآثار من خلال أوامر adb

قم بتشغيل adb root قبل تشغيل أوامر adb shell لكل من الآثار التالية. في نهاية التتبع، تتوفر ملفات التتبع في /data/misc/wmtrace . لنسخ ملف أو دليل وأدلته الفرعية من جهاز، راجع نسخ الملفات من وإلى جهاز . انظر بنك التنمية الآسيوي لمزيد من المعلومات.

آثار WindowManager

لالتقاط آثار WindowManager:

  • تمكين التتبع:

    adb shell wm tracing start
    
  • تعطيل التتبع:

    adb shell wm tracing stop
    
  • حفظ بيانات التسجيل في ملف أثناء تشغيل عملية التقاط التتبع:

    adb shell wm tracing save-for-bugreport
    
  • سجل التتبع مرة واحدة لكل إطار:

    adb shell wm tracing frame
    
  • سجل كل معاملة:

    adb shell wm tracing transaction
    
  • قم بتعيين الحد الأقصى لحجم السجل (بالكيلوبايت):

    adb shell wm tracing size
    
  • حالة تتبع الطباعة:

    adb shell wm tracing status
    
  • قم بتعيين مستوى السجل إلى critical (النوافذ المرئية فقط ذات معلومات منخفضة)، trim (جميع النوافذ ذات المعلومات المنخفضة)، أو all (جميع النوافذ والمعلومات):

    adb shell wm tracing level
    

سجل أولي

يتم استخدام الأوامر التالية لنظام ProtoLog .

في عملية system_server :

  • بدء السجل الأولي:

    adb shell cmd window logging start
    
  • إيقاف السجل الأولي:

    adb shell cmd window logging stop
    
  • تمكين ProtoLog لمجموعات السجلات المحددة:

    adb shell cmd window logging enable [group...]
    
  • تعطيل ProtoLog لمجموعات السجلات المحددة:

    adb shell cmd window logging disable [group...]
    
  • تمكين تسجيل Logcat لمجموعات السجلات المحددة:

    adb shell cmd window logging enable-text [group...]
    
  • تعطيل تسجيل Logcat لمجموعات السجلات المحددة:

    adb shell cmd window logging disable-text [group...]
    

في ومشيل:

  • بدء السجل الأولي:

    adb shell dumpsys activity service SystemUIService WMShell
    

تتبع الانتقال

يتم استخدام الأوامر التالية لتتبع الانتقال:

في عملية system_server :

  • بدء التتبع:

    adb shell cmd window shell tracing start
    
  • إيقاف التتبع:

    adb shell cmd window shell tracing stop
    
  • بدء التتبع في WMShell:

    adb shell dumpsys activity service SystemUIService WMShell transitions tracing start
    
  • إيقاف التتبع في WMShell:

    adb shell dumpsys activity service SystemUIService WMShell transitions tracing stop
    

محرر أسلوب الإدخال

يتم استخدام الأوامر التالية لتتبع محرر أسلوب الإدخال (IME):

  • بدء تتبع IME لعملاء أسلوب الإدخال (IM)، وخدمة أسلوب الإدخال (IMS)، وخدمة إدارة أسلوب الإدخال (IMMS):

    adb shell ime tracing start
    
  • ابدأ في تتبع عملاء IME، وIMS، وIMMS:

    adb shell ime tracing stop
    

طبقات SurfaceFlinger

يستخدم تتبع طبقة SurfaceFlinger تتبع Perfetto للالتقاط. راجع تكوين التتبع للحصول على معلومات التكوين.

راجع المثال التالي لتكوين تتبع طبقة SurfaceFlinger:

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:

adb shell -t perfetto \
    -c - --txt \
    -o /data/misc/perfetto-traces/trace \

معاملات SurfaceFlinger

يستخدم تتبع المعاملات SurfaceFlinger تتبع Perfetto للالتقاط. راجع تكوين التتبع للحصول على معلومات التكوين.

راجع المثال التالي لتكوين Perfetto للتتبع النشط لـ SurfaceFlinger:

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

راجع المثال التالي لتكوين Perfetto للتتبع المستمر لـ SurfaceFlinger:

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:

    adb shell perfetto \
    -c - --txt \
    -o /data/misc/perfetto-traces/trace \

إنشاء تفريغ الحالة باستخدام adb

يقرأ Winscope لقطة لحالات WindowManager وSurfaceFlinger من تقارير الأخطاء. تقوم تقارير الأخطاء بتخزين الحالات كملفات أولية منفصلة داخل المجلد proto . لإنشاء عمليات تفريغ الحالة باستخدام adb، قم بتشغيل الأوامر التالية.

بالنسبة لمدير النوافذ:

adb exec-out dumpsys window --proto > window_dump.winscope

بالنسبة لـ SurfaceFlinger:

adb exec-out dumpsys SurfaceFlinger --proto > sf_dump.winscope

تحليل الآثار

لتصحيح الحالات العابرة وغير الصالحة التي تسبب مشكلات في الرسوم المتحركة، يقوم Winscope بتجميع ملفات تتبع مختلفة، ويوفر البحث والتصور عبر الإطارات والجداول الزمنية، ويقدم رسائل protobuf بطريقة متماسكة. يساعد تحليل الآثار في Winscope في تحديد الطبقة والإطار وحالة حدوث الخطأ بدقة.

استخدم وينسكوب

عندما تلتقط آثارًا ، قم بتحليل الآثار على Winscope:

  1. قم بتحميل آثارك المحفوظة باستخدام اللوحة الموجودة على اليمين. يمكنك إزالة الآثار التي تم تحميلها أو تحميل المزيد من الآثار.

    upload_traces_winscope

    الشكل 6. تحميل الآثار على Winscope.

  2. انقر فوق عرض الآثار لتصور الآثار التي تم تحميلها. تظهر علامات التبويب الخاصة بكل أثر على اللوحة العلوية للنافذة. إذا كان الملف الذي تم تحميله يحتوي على آثار ذات صلة، فسيتم عرض عرض عائم لتتبع تسجيل الشاشة على الشاشة.

    view_traces_winscope

    الشكل 7. عرض الآثار على Winscope.

    استخدم واجهة المستخدم في اللوحة العلوية للنافذة لإعادة التسميةتعديل الاسم وقم بتنزيل التتبع الذي تم تحميلهdownload_trace أو لتحميل واحدة جديدة.

  3. انتقل عبر الآثار بمرور الوقت باستخدام أداة شريط تمرير الوقت الموجودة في اللوحة السفلية للنافذة. لمزيد من التنقل عبر الوقت، استخدم الميزات التالية، كما هو موضح في الشكل 8:

    • للانتقال إلى وقت أو حدث معين، استخدم المؤشر (شريط تمرير الوقت) أو اليسارArrow_left_time و صحيحArrow_right_time الأسهم الموجودة في مربع عرض الوقت (الزاوية اليسرى السفلية)، أو الأسهم اليمنى واليسرى على لوحة المفاتيح.
    • لعرض آثار محددة مرمزة بالألوان على المخطط الزمني، استخدم القائمة المنسدلة (يسار شريط تمرير الوقت). افتراضيًا، يتم عرض آخر ثلاثة آثار تم عرضها باستخدام علامات تبويب التتبع على المخطط الزمني.
    • للحصول على عرض تفصيلي لجميع الآثار التي تم تحميلها، استخدم التكبيرZoom_in_time أو التصغيرZoom_out_time (أسفل شريط تمرير الوقت)، أو قم بالتمرير على لوحة المفاتيح. استخدم زر إعادة الضبط لإعادة ضبط مستوى التكبير/التصغير.
    • للحصول على عرض موسع لتوزيع التتبع مع مرور الوقت، انقر فوق السهم لأعلىArrow_up_time (الزاوية اليمنى السفلى).

    time_nav_winscope

    الشكل 8. التنقل الزمني في Winscope.

    في العرض الموسع (الشكل 9)، حدد أطر زمنية محددة وقم بتكبيرها لفحص أفضل:

    expand_time_winscope

    الشكل 9. الجدول الزمني الموسع على Winscope.

  4. لفحص الآثار، يمكنك عرض حالة الجهاز من خلال تسجيل الشاشة. لفحص أثر معين، انقر فوق علامة تبويب التتبع ذات الصلة في اللوحة العلوية للأداة.

    • بالنسبة لتتبع Surface Flinger ، تعرض ثلاث لوحات طرق عرض مختلفة للتتبع في فترة زمنية معينة، كما هو موضح في الشكل 10:sf_trace

      الشكل 10. تتبع Flinger السطحي على Winscope.

      • عرض الطبقات : عرض ثلاثي الأبعاد للطبقات في تراكبات مستطيلة. تقوم عناصر واجهة المستخدم التالية بضبط المستطيلات لعرض العناصر الرسومية من حيث موضعها وحجمها وتحويلها وترتيبها z:

        • يقوم شريط تمرير التدوير (أعلى يسار عرض الطبقات) بتدوير المستطيلات ذات الطبقات لعرضها بزوايا مختارة.
        • يقوم شريط تمرير التباعد (أعلى يمين عرض الطبقات) بضبط التباعد بين الطبقات لإنشاء العرض المركب المختار.
        • تقوم أدوات التكبير/التصغير (أعلى يمين عرض الطبقات) بتكبير الصورةZoom_in_time والتصغيرZoom_out_time في الطبقات لفحص أفضل.
        • زر إعادة الضبطإعادة تعيين_sf (أعلى يمين عرض الطبقات) يعيد إعدادات الكاميرا إلى العرض الأصلي.
        • اسحب المستطيلات لتسهيل التكبير بشكل أفضل.
      • عرض التسلسل الهرمي : تسلسل هرمي كامل للطبقات.

        • المرئي فقط (أعلى يمين عرض التسلسل الهرمي)، عند تحديده، يخفي الطبقات غير المرئية من التسلسل الهرمي للمساعدة في تصور العناصر الموجودة على الشاشة.
        • مسطح (أعلى يمين عرض التسلسل الهرمي)، عند تحديده، يُظهر التسلسل الهرمي كقائمة مسطحة من الطبقات.
        • يتم تحديد إظهار الفرق (أعلى يسار طريقة العرض الهرمية) فقط عندما يكون هناك انتقال للحالة. عند تحديدها، تقوم الأداة بمقارنة الحالة الحالية بالحالة السابقة. يتم تمييز العنصر الجديد باللون الأخضر، ويتم تمييز العنصر المحذوف باللون الأحمر، ويتم تمييز العنصر المعدل باللون الأزرق.
      • عرض الخصائص : خصائص الطبقة المحددة. تحتوي اللوحة العلوية لعرض الخصائص على معلومات حول الخصائص الأساسية فقط، مثل Visibility و Geometry و Buffer . تحتوي اللوحة السفلية لعرض الخصائص على Proto Dump لجميع الخصائص.

        • تعمل خانة الاختيار إظهار الفرق (أعلى يسار عرض الخصائص) كما هو الحال في عرض التسلسل الهرمي .
        • إظهار الإعدادات الافتراضية (أعلى يسار عرض الخصائص)، عند تحديده، يعرض القيم الأولية الافتراضية في Proto Dump. بشكل افتراضي، لا يتم إدراج هذه القيم في Proto Dump. يتم أخذ القيم الأولية الافتراضية من تعريف الحقل الأولي. إذا لم يكن الحقل الأولي يحتوي على مجموعة قيم افتراضية غير فارغة، فإن القيم الأولية الافتراضية المعروضة هي:
          • السلاسل: فارغة
          • الأرقام: 0
          • القيم المنطقية: خطأ
          • الكائنات: فارغة

      تتم مزامنة الاختيار بين طرق العرض الثلاثة وتسجيل الشاشة، أي أن جميع الآثار يتم تحديثها بشكل متزامن عند الانتقال إلى نقطة زمنية مختلفة. لرؤية خصائص الطبقة، حدد الطبقة بالنقر فوقها في عرض التسلسل الهرمي أو بالنقر فوق المستطيل المعني في عرض الخصائص. يشير المستطيل الأرجواني إلى أن تتبع العرض متصل بهذه الطبقة. عند النقر المزدوج على طبقة أرجوانية، تنتقل واجهة المستخدم للتغيير إلى علامة تبويب تتبع العرض ذات الصلة.

    • بالنسبة لتتبع Window Manager ، تعرض ثلاث لوحات طرق عرض مختلفة للتتبع في فترة زمنية معينة، كما هو موضح في الشكل 11:

      • عرض Windows : عرض ثلاثي الأبعاد للطبقات.
      • عرض التسلسل الهرمي : تسلسل هرمي كامل للطبقات.
      • تحتوي طريقة عرض الخصائص على تفريغ أولي لجميع الخصائص.

      تتم مزامنة الاختيار بين طرق العرض الثلاثة وتسجيل الشاشة، أي أن جميع الآثار يتم تحديثها بشكل متزامن عند الانتقال إلى نقطة زمنية مختلفة.

      wm_trace

      الشكل 11. تتبع مدير النوافذ على Winscope.

    • بالنسبة لتتبعات المعاملات ، يتم عرض المعاملات بين Surface Flinger وWindow Manager في تنسيق جدول يمكن البحث فيه بواسطة المعرفات والنوع والنص المعروضة، بالإضافة إلى عرض الخصائص الذي يعرض التفريغ الأولي. تتم مزامنة الاختيار بين طريقتي العرض وتسجيل الشاشة:

      transaction_trace

      الشكل 12. تتبع المعاملات على Winscope.

    • بالنسبة لتتبعات ProtoLog ، يتم تقديم المعلومات بتنسيق جدول يمكن البحث فيه عن طريق العلامات والملفات المصدر والنص:

      protolog_trace

      الشكل 13. تتبع ProtoLog على Winscope.

    • بالنسبة لتتبعات الانتقالات ، يتم عرض قائمة بالانتقالات مع المعرف والنوع ووقت الإرسال والمدة والحالة بالإضافة إلى خصائص الانتقال المحدد:

      transitions_trace

      الشكل 14. تتبع التحولات على Winscope.