Systrace هي أداة تتبع نظام Android تجمع بيانات حول نواة Linux ومعالج CPU ومسرع الرسومات وجميع عمليات النظام خلال فترة زمنية قصيرة. على عكس Traceview الذي يركز على الأساليب داخل التطبيق، يُظهر Systrace الصورة النظامية: تحميل كل نواة من CPU، عمل SurfaceFlinger، استدعاءات Binder ودورات GC. وفقًا لـ Google، 2024، الأداة لا غنى عنها لتشخيص الإطارات المفقودة، وجمع القمامة المتكرر، والشذوذ في سلسلة UI.
الخلاصة
Systrace هي أداة سطر أوامر من Android SDK تلتقط وتدمج البيانات من مصادر متعددة لتتبع النواة (ftrace) ومساحة المستخدم (atrace) في تقرير HTML واحد. ظهرت الأداة في Android 4.1 (Jelly Bean) كبديل للأداة القديمة traceview لتحليل أداء النظام وظلت طويلاً الأداة المعيارية لتشخيص الأداء على منصة Android.
Systrace يعتمد على ftrace — آلية تتبع نواة Linux المتاحة في Android منذ الإصدار 4.1. عند بدء Systrace، يقوم بتنشيط فئات التتبع المحددة: sched (مجدول المهام)، freq (تردد CPU)، idle (حالات الخمول)، workq (قوائم العمل)، binder، gfx وغيرها. يتم جمع البيانات في المخزن المؤقت الحلقي للنواة وبعد التوقف يتم دمجها في ملف trace.html واحد يمكن فتحه في أي متصفح.
بدءًا من Android Studio 3.1، تم دمج Systrace في CPU Profiler. في وضع «Trace System Calls»، يقوم المحلل بتشغيل Systrace على الجهاز المتصل ويعرض النتائج مباشرة في نافذة Android Studio. هذا يلغي الحاجة إلى العمل مع سطر الأوامر للحالات الأساسية مع الاحتفاظ بالوظائف الكاملة — جميع فئات التتبع والتصفية والجدول الزمني التفاعلي. أداء الجهاز أثناء التتبع ينخفض بشكل طفيف حيث أن ftrace مصمم لتحمل عبء أدنى.
Systrace يستخدم آليتين لجمع البيانات: ftrace على مستوى النواة لأحداث النظام وatrace في مساحة المستخدم للعلامات الخاصة بـ Android. ftrace يسجل تبديلات السياق (sched_switch)، تغييرات تردد CPU (cpu_frequency)، المقاطعات (irq_handler_entry) وأحداث أخرى. atrace يضيف علامات من إطار Android — بداية ونهاية عرض الإطار، استدعاءات SurfaceFlinger ومعاملات Binder.
الميزة الرئيسية لـ Systrace هي تصور سلسلة عرض كل إطار: تطبيق → BufferQueue → SurfaceFlinger → HWC (المركب) → شاشة. إذا حدث تأخير في أي مرحلة، يُظهر Systrace السبب الدقيق: التطبيق لم يحضر المخزن المؤقت في الوقت المناسب، SurfaceFlinger كان ينتظر VSync، أو HWC لم يستطع تركيب الطبقات. دورة حياة الإطار على الجدول الزمني ملونة حسب الحالة: أخضر (في الوقت المحدد)، أصفر (متأخر)، أحمر (مفقود). هذا التصور هو الأداة الأساسية لتحسين أداء UI.
Systrace يدعم أكثر من 20 فئة تتبع، كل منها تتضمن مجموعة من الأحداث ذات الصلة. الفئات المهمة تشمل: gfx (عرض الرسومات)، input (معالجة الإدخال)، view (نظام View)، webview (WebView)، power (استهلاك الطاقة)، hal (طبقة تجريد الأجهزة). لتحليل أداء الألعاب، فئة gfx مع تفاصيل أوامر GPU عبر AGI (Android GPU Inspector) مفيدة.
Systrace يوفر مجموعة فريدة من القدرات لنظام Android غير متوفرة في المحللات الأخرى: جدول زمني للنظام، مقاييس على مستوى النواة، واكتشاف تلقائي للمشاكل.
تقرير HTML لـ Systrace يحتوي على جدول زمني متعدد المستويات حيث كل مسار يتوافق مع عملية أو سلسلة واحدة. يمكنك التكبير والتصغير على المقياس الزمني، النقر على الأحداث لعرض التفاصيل (المدة، العملية البادئة، وسائط إضافية). ترميز الألوان يساعد على التنقل بسرعة: الكتل الخضراء — عملية قيد التنفيذ، الزرقاء — في انتظار، البرتقالية — مقاطعة، البيضاء — خاملة.
Systrace يحلل التتبع تلقائيًا ويعرض رسائل تنبيه تشير إلى مناطق المشاكل. على سبيل المثال: «Buffer underrun — SurfaceFlinger لم يستلم المخزن المؤقت قبل VSync» أو «Long Binder transaction — 42 مللي ثانية في سلسلة Binder_1». كل تنبيه يحتوي على رابط للقسم المقابل من الجدول الزمني وتوصية للإصلاح. هذا يوفر ساعات من التحليل اليدوي وهو أحد الأسباب الرئيسية لاستخدام Systrace بدلاً من التسجيل اليدوي.
يمكن للمطورين إضافة علامات مخصصة إلى تتبع Systrace عبر API Trace.beginSection و Trace.endSection. هذا يسمح بتتبع تنفيذ أقسام الكود الحرجة مباشرة على الجدول الزمني للنظام — على سبيل المثال، تحديد بداية ونهاية تحميل البيانات أو حساب التخطيط. تظهر العلامات ككتل منفصلة على مسار التطبيق وتكون مرئية بجانب أحداث النظام.
| الفئة | البيانات | الاستخدام النموذجي |
|---|---|---|
| sched | تبديلات السياق، حالات الخمول | حظر السلاسل، التنافس |
| gfx | VSync، تحضير المخزن المؤقت، HWC | فقدان الإطارات، jank |
| binder | معاملات Binder، زمن الوصول | تأخيرات IPC، استدعاءات بعيدة |
| freq | تردد CPU، محرك التحجيم | الاختناق الحراري، استهلاك الطاقة |
| gfx + AGI | أوامر GPU، التظليل | أداء الألعاب |
تشغيل Systrace ممكن بطريقتين: عبر CPU Profiler في Android Studio (وضع «Trace System Calls») أو عبر سطر الأوامر باستخدام نص Python systrace.py من مجلد platform-tools. كل طريقة لها حالات استخدامها الخاصة.
قم بتوصيل الجهاز، افتح Profiler (View → Tool Windows → Profiler)، حدد عمليتك، انتقل إلى علامة التبويب CPU، اختر وضع «Trace System Calls» وانقر Record. بعد 5–30 ثانية، انقر Stop — سيقوم Android Studio بتشغيل Systrace على الجهاز، انتظار الاكتمال وتحميل النتيجة. القيد: التسجيل ممكن فقط أثناء فتح Profiler، وهو غير مناسب للسيناريوهات الطويلة أو الأتمتة.
للتحكم الأكثر مرونة، استخدم نص systrace.py. حدد فئات التتبع والمدة واسم ملف الإخراج. مثال: التقاط بيانات gfx وinput وsched لمدة 10 ثوانٍ. يتطلب التشغيل Python 2.7+ وجهازًا متصلًا مع تمكين تصحيح USB. على Android 12+، يتم استبدال Systrace بـ Perfetto — يبقى الأمر كما هو، لكن النص يعيد توجيه الاستدعاءات إلى perfetto.
# تشغيل systrace الأساسي لمدة 10 ثوانٍ
$ python systrace.py \
--time=10 \
-o trace.html \
gfx input sched
# فئة gfx فقط لتحليل UI
$ python systrace.py \
--time=5 \
-t gfx \
-o ui_trace.html
لجعل الكود الخاص بك يظهر على الجدول الزمني لـ Systrace، قم بتغليف القسم الحرج بـ Trace.beginSection / Trace.endSection. من المهم أن يكون beginSection و endSection مقترنين بشكل صارم — وإلا سيظهر Systrace جدولًا زمنيًا غير صحيح. في Kotlin، من المناسب استخدام امتداد inline لضمان إغلاق القسم حتى في حالة الاستثناء.
import android.os.Trace
fun traceSection(name: String, block: () -> Unit) {
Trace.beginSection(name)
try {
block()
} finally {
Trace.endSection()
}
}
// الاستخدام في الكود
traceSection("load_screen_data") {
fetchData()
updateUI()
}
تقرير Systrace هو ملف HTML مكتفي ذاتيًا يمكن فتحه في Chrome أو Edge أو Firefox. يحتوي على جدول زمني تفاعلي، لوحة اختيار العمليات، قائمة رسائل التنبيه والمقاييس الرئيسية (معدل الإطارات، استخدام CPU، معاملات Binder). فهم هيكل التقرير هو مهارة رئيسية للتحليل الفعال للأداء.
الجدول الزمني يعرض الوقت من اليسار إلى اليمين. كل عملية وسلسلة هي مسار منفصل. مفاتيح W/S للتكبير/التصغير، A/D للتحرك عبر الوقت. حدد منطقة بالماوس لتكبير قسم. خطوط VSync تظهر حدود الإطارات (كل 16.6 مللي ثانية عند 60 FPS). إذا كانت دورة العرض الكاملة لا تتسع بين خطي VSync — يتم فقدان الإطار. انتبه إلى مسار SurfaceFlinger: إذا كان مشغولاً لفترة طويلة (كتلة برتقالية)، فإن تركيب الطبقات يبطئ العرض العام.
لوحة التنبيهات على الجانب الأيسر من التقرير تحتوي على المشاكل المكتشفة تلقائيًا. كل تنبيه قابل للنقر — عند النقر، ينتقل الجدول الزمني إلى اللحظة المشكلة. التنبيهات الأكثر شيوعًا: «Long Sync» (مزامنة طويلة للسلسلة)، «Scheduling Delay» (تأخير المجدول)، «Buffer Overrun» (فيض مخزن SurfaceFlinger المؤقت). إذا أظهر تنبيه قيمة ~100 مللي ثانية لـ Scheduling Delay، فهذا يشير مباشرة إلى أن سلسلة UI كانت تنتظر CPU بسبب الحمل الخلفي — يجب نقل الحسابات الثقيلة إلى Worker Thread.
لتحليل الإطارات المفقودة، قم بتشغيل مساري SurfaceFlinger و app.gfx. كل إطار يظهر كمستطيل: أخضر (≤16 مللي ثانية)، أصفر (16–32 مللي ثانية)، أحمر (>32 مللي ثانية). إذا رأيت مستطيلًا أحمر على مسار التطبيق، انقر عليه — سيُظهر Systrace أي طريقة محددة (أو استدعاء نظام) تجاوزت الحد. وفقًا لـ Google (Android Performance Patterns، 2023)، 70% من مشاكل jank ناتجة عن onBindViewHolder بطيء أو GC متكرر.
Perfetto هو خليفة Systrace، الذي قدمته Google في Android 9 (Pie) كأداة تجريبية وأصبح الحل الأساسي بدءًا من Android 12. Perfetto يستخدم تنسيق بيانات protobuf حديث، يدعم الجلسات الطويلة (ساعات بدلاً من ثوانٍ) وله واجهة ويب لعرض التتبعات. دعنا نفحص الاختلافات الرئيسية بين النظامين.
| المعيار | Systrace | Perfetto |
|---|---|---|
| التنسيق | تقرير HTML (trace.html) | Protobuf (.trace / .perfetto-trace) |
| المدة | حتى 60 ثانية | ساعات، غيغابايت من البيانات |
| الواجهة | HTML مدمج | واجهة ويب (ui.perfetto.dev) |
| الفئات | ثابتة (ftrace + atrace) | قابلة للتوسيع (استعلامات SQL للتتبع) |
| الحركية | Android فقط | Android، Linux، Chrome، Windows |
على الرغم من الانتقال إلى Perfetto، تظل مهارات Systrace ذات صلة: على الأجهزة التي تعمل بنظام Android 11 وما دونه، يتم استخدامه افتراضيًا، ويحافظ Perfetto على التوافق العكسي مع فئات Systrace. في CPU Profiler لـ Android Studio، يُستخدم Perfetto للأجهزة الجديدة و Systrace للأجهزة القديمة — بشفافية للمستخدم. لـ CI/CD، يُوصى باستخدام Perfetto لأن تنسيقه يمكن معالجته تلقائيًا عبر Python و SQL.
لإتقان Systrace عمليًا، دعنا ننظر في سيناريوهين: إيجاد سبب الإطارات المفقودة أثناء التمرير وتشخيص GC المتكرر الذي يحجب سلسلة UI.
قم بتشغيل Systrace مع فئة gfx لمدة 10 ثوانٍ، قم بالتمرير عبر القائمة في التطبيق. في التقرير، ابحث عن أقسام ذات إطارات حمراء. انقر على الإطار المشكل وانظر إلى مسار التطبيق — إذا كان هناك كتلة «inflateLayout» أو «onBindViewHolder» بعرض أكبر من 16 مللي ثانية، المشكلة في تضخيم التخطيط أو ربط البيانات. الحل: قم بتحسين التخطيط (تقليل ViewGroup العميق، ViewStub)، قم بإلغاء تحميل الصور إلى Glide مع onAttachedToWindow.
Systrace مع فئتي freq و sched يتيح لك رؤية عدد مرات دورات GC التي تستبق سلسلة UI. ابحث عن مسار التطبيق على الجدول الزمني — إذا رأيت كتلًا دورية مدتها 20–50 مللي ثانية باسم «Concurrent GC»، فإن جامع القمامة يعمل بشكل متكرر جدًا. أضف فئة «dalvik» للتحليل المفصل. الحل: قم بتحويل Bitmap إلى ByteBuffer، استخدم مجموعة كائنات (ObjectPool) للتخصيصات المتكررة، قلل تجزئة الكومة عبر وسائط ART.
# تشغيل مع فئات لتحليل UI + GC
$ python systrace.py \
--time=15 \
-o gc_analysis.html \
gfx sched dalvik freq
# التقاط بمدة 30 ثانية لاختبار قابل للتكرار
$ python systrace.py \
--time=30 \
--app=com.example.app \
-o app_trace.html
الأسئلة الشائعة
نعم، لتشغيل Systrace لا يتطلب وصول root. الأداة تستخدم atrace، المتاح على أي جهاز مع تمكين تصحيح USB. بعض الفئات (power، freq) قد تتطلب توقيع النظام، لكن الفئات الرئيسية (gfx، sched، input) تعمل على جميع الأجهزة.
الحد 60 ثانية مرتبط بسعة المخزن المؤقت الحلقي لـ ftrace — أثناء التسجيل الطويل، يتم استبدال المخزن المؤقت. Perfetto يزيل هذا القيد: يمكنك التسجيل لساعات والحصول على تتبعات بحجم عدة غيغابايتات عبر نقل USB أو التسجيل المباشر على القرص.
الأسباب المحتملة: التطبيق ليس في وضع debuggable، لم يتم تعيين العلم android:debuggable=true
في البيان، أو يتم استخدام بناء إصدار. تحقق أيضًا من تحديد --app=com.example.app في الفئات — وإلا فإن Systrace يلتقط فقط عمليات النظام.
لـ C++، استخدم ATRACE_BEGIN و ATRACE_END من مكتبة libcutils. قم بتضمين ملف الرأس ولف القسم المطلوب. ستظهر العلامة في Systrace على مسار عمليتك، وهو مفيد بشكل خاص لتحليل محركات الألعاب (Unity، Unreal).
على Android 12 وما فوق، استخدم Perfetto. قم بتثبيت وكيل perfetto على الجهاز عبر ADB، ابدأ التسجيل بتنسيق JSON. للعرض السريع، استخدم واجهة ويب Perfetto (ui.perfetto.dev)، ولـ CI — تصدير سطر الأوامر مع TraceProcessor في Python.
الملخص
سنقوم بتطوير تطبيق جوال جاهز
تقدم IT Sectr تطبيقات iOS وAndroid للشركات الناشئة والشركات منذ عام 2017. سوف نقدم لك النصح ونقترح أفضل حل.
اقرأ أيضًا