تتبُّع انتقالات النوافذ باستخدام Winscope

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

في ما يلي خدمات النظام التي تُنشئ عمليات تتبُّع يمكن تحميلها إلى Winscope:

  • SurfaceFlinger
  • مدير النوافذ
  • WMShell
  • أداة IME
  • قاذفة القنابل

تشغيل عارض التتبُّع في Winscope

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

اتّبِع الخطوات التالية لإعداد جهاز الكمبيوتر لتشغيل أداة تتبُّع Winscope:

  1. تنزيل رمز المصدر لنظام التشغيل Android
  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).

التقاط آثار الأنشطة على الجهاز

يمكنك تسجيل عمليات التتبّع على الجهاز لجمع البيانات عند الإبلاغ عن أخطاء تتعلّق بالرسوم المتحرّكة . ويتم تسجيل جميع عمليات تتبُّع واجهة المستخدم بهذه الطريقة، وذلك بسبب عدم إمكانية تخصيص الإعدادات.

على جهاز Android:

  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.

في Winscope:

  1. في شاشة جمع آثار الأنشطة، انقر على وكيل ADB:

    التقاط_مسار_ويناسكوب

    الشكل 2: تسجيل عمليات التتبّع في Winscope

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

  3. شغِّل الأمر:

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

    جمع_تتبُّع_winscope

    الشكل 3: جمع عمليات التتبّع في Winscope

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

    end_trace_winscope

    الشكل 4. إنهاء التتبع على Winscope.

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

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

لإنشاء نسخة احتياطية من حالة باستخدام Winscope، اختَر علامة التبويب النسخ الاحتياطي في شاشة جمع عمليات التتبُّع، ثم انقر على نسخة احتياطية من الحالة:

dump-winscope

الشكل 5. نسخ الحالة في Winscope

تسجيل عمليات التتبّع من خلال أوامر adb

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

عمليات تتبُّع 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

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

في عملية system_server:

  • بدء ProtoLog:

    adb shell cmd window logging start
    
  • إيقاف ProtoLog:

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

في WMShell:

  • بدء ProtoLog:

    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 منفصلة ضمن المجلد proto. لإنشاء نُسخة من حالة الجهاز باستخدام adb، نفِّذ يليه الأوامر.

بالنسبة إلى WindowManager:

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

بالنسبة إلى SurfaceFlinger:

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

تحليل آثار الأنشطة

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

استخدام Winscope

عندما تلتقط الآثار، حلِّل آثار التتبُّع على Winscope:

  1. حمِّل عمليات التتبّع المحفوظة باستخدام اللوحة على يسار الصفحة. يمكنك إزالة عمليات التتبّع المحمَّلة أو تحميل المزيد من عمليات التتبّع.

    upload_traces_winscope

    الشكل 6: تحميل آثار الأنشطة على Winscope.

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

    view_traces_winscope

    الشكل 7: عرض عمليات التتبّع في Winscope

    استخدِم واجهة المستخدم في اللوحة العلوية من النافذة لإعادة تسمية اسم_التعديل وتحميل التتبُّع الذي حمّلته download_trace أو لتحميل تتبُّع جديد.

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

    • للانتقال إلى وقت أو حدث معيّن، استخدِم المؤشر (شريط التمرير الزمني) أو السهمَين arrow_left_time لليسار سهم_اليمين_الوقت على يسار مربّع عرض الوقت (في أسفل يمين الصفحة)، أو السهمَين لليسار واليمين على لوحة المفاتيح.
    • لعرض مسارات محدّدة بألوان مختلفة على المخطط الزمني، استخدِم القائمة المنسدلة (على يمين شريط تمرير الوقت). يتم تلقائيًا عرض آخر ثلاث عمليات تتبُّع تم عرضها باستخدام علامات تبويب التتبُّع في المخطط الزمني.
    • للحصول على عرض دقيق لجميع عمليات التتبّع التي تم تحميلها، استخدِم أداة التكبير zoom_in_time أو التصغير وقت_التصغير (أسفل شريط التمرير الزمني)، أو انتقِل باستخدام لوحة المفاتيح. استخدِم زر إعادة الضبط لإعادة ضبط مستوى التكبير/التصغير.
    • للحصول على عرض موسّع لتوزيع التتبّع بمرور الوقت، انقر على سهم الصعداء arrow_up_time (في أسفل يسار الصفحة).

    time_nav_winscope

    الشكل 8. التنقّل في الوقت على Winscope

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

    توسيع_وقت_winscope

    الشكل 9: تم توسيع المخطط الزمني في Winscope.

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

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

      الشكل 10. تتبُّع Surface Flinger على Winscope.

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

        • يُدير شريط التمرير التدوير (أعلى يمين عرض "الطبقات") المستطيلات المُدرَجة لعرضها من زوايا محدّدة.
        • يعمل شريط تمرير التباعد (أعلى يمين عرض "الطبقات") على ضبط التباعد بين الطبقات لإنشاء طريقة العرض المركّبة المختارة.
        • تتيح لك أدوات التكبير/التصغير (في أعلى يسار عرض "الطبقات") التكبير zoom_in_time والتصغير zoom_out_time في الطبقات لفحصها بشكل أفضل.
        • زر إعادة الضبط reset_sf (في أعلى يسار "عرض الطبقات") يعيد إعدادات الكاميرا إلى العرض الأصلي.
        • اسحب المستطيلات لتسهيل التكبير/التصغير بشكل أفضل.
      • العرض التسلسلي: عرض هرمي كامل للطبقات.

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

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

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

    • بالنسبة إلى تتبُّع مدير النوافذ، تعرض ثلاث لوحات طرق عرض مختلفة للتتبُّع في فترة زمنية معيّنة، كما هو موضَّح في الشكل 11:

      • عرض Windows: عرض ثلاثي الأبعاد للطبقات.
      • العرض التسلسلي: عرض هرمي كامل للطبقات.
      • يحتوي عرض المواقع على Proto Dump لجميع المواقع.

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

      wm_trace

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

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

      transaction_trace

      الشكل 12: تتبُّع المعاملات على Winscope

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

      protolog_trace

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

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

      transitions_trace

      الشكل 14. يتم تتبُّع عمليات الانتقال على Winscope.