Traceview هي أداة تتبع رسومية مدمجة في Android Studio تسجل وتصور تنفيذ أساليب التطبيق من حيث الوقت وموارد وحدة المعالجة المركزية. على عكس Systrace الذي يعرض عمليات النظام على مستوى النواة، يركز Traceview على أساليب Java و Kotlin داخل التطبيق، والتي يتم استدعاؤها في سلسلة من إدخال المستخدم إلى عرض واجهة المستخدم. وفقًا لـ Google, 2024، تتيح الأداة العثور على اختناقات الأداء على مستوى الاستدعاءات الفردية وتحسين الكود قبل الإصدار.
الخلاصة
Traceview هو أداة تنميط رسومية مدمجة في Android Studio تعرض تتبعات تنفيذ أساليب تطبيقات Android كجدول زمني وجدول استدعاءات. إنه جزء من Android SDK ومتوفر عبر Android Profiler بدءًا من Android Studio 3.0، وكذلك عبر أداة سطر الأوامر dmtracedump.
المهمة الرئيسية لـ Traceview هي مساعدة المطورين في العثور على الأساليب التي تستهلك معظم وقت وحدة المعالجة المركزية. على عكس التسجيل البسيط، Traceview يسجل الوقت الدقيق لدخول وخروج كل أسلوب، وينشئ Call Chart وشجرة Top-Down، مما يسمح باكتشاف الحالات الشاذة في الأداء بصريًا. الأداة مفيدة بشكل خاص عند تنميط سلسلة واجهة المستخدم، حيث يؤدي تأخير 16 مللي ثانية إلى فقدان الإطار.
Traceview ظهر لأول مرة في الإصدارات المبكرة من Android SDK كأداة مستقلة لعرض ملفات .trace. مع إصدار Android Studio 3.0 (2017)، أصبح جزءًا من Android Profiler، وحصل على تكامل مع الجداول الزمنية الحية لوحدة المعالجة المركزية والذاكرة والشبكة. وفقًا لـ Google I/O 2018، يواصل فريق Android Studio تطوير أداة التنميط، مضيفًا دعمًا للكود الأصلي عبر systrace و perfetto. في الإصدارات الحالية من Android Studio، يعمل Traceview فوق تنسيق Perfetto ولكنه يحتفظ بالتوافق مع الإصدارات السابقة مع تنسيق .trace الكلاسيكي.
Traceview يتلقى البيانات من آلية System Tracing في Android Runtime (ART). عند تشغيل التطبيق مع تمكين التتبع، يسجل ART الطوابع الزمنية لبداية ونهاية كل أسلوب يتم تنفيذه، بما في ذلك اسم الفئة واسم الأسلوب ومعرف السلسلة.
// بدء تتبع في كود التطبيق
Debug.startMethodTracing("app_trace")
// مقطع كود حرج للتحليل
loadHeavyData()
// إيقاف التتبع — تم حفظ الملف على الجهاز
Debug.stopMethodTracing()
System Tracing يعمل على مستوى الآلة الافتراضية ART ويسجل كل استدعاء أسلوب بدقة ميكروثانية. تتم كتابة البيانات في مخزن مؤقت دائري لتقليل التأثير على أداء التطبيق. بعد إيقاف التتبع، يتم تفريغ المخزن المؤقت إلى ملف .trace على وحدة التخزين الداخلية للجهاز.
يحتوي ملف .trace على رأس بإصدار التنسيق ووقت البدء، متبوعًا بسجلات لكل استدعاء: معرف السلسلة و معرف الأسلوب و الطابع الزمني للدخول و الطابع الزمني للخروج. يقوم Android Studio تلقائيًا بتحميل ملف .trace ويبني عرضين رئيسيين: لوحة الجدول الزمني للتسلسل الزمني ولوحة الملف الشخصي للتسلسل الهرمي للاستدعاءات. افتراضيًا، الحد الأقصى لحجم المخزن المؤقت هو 8 ميجابايت، ولكن يمكن زيادته عبر Debug.startMethodTracing(filename, maxSize).
Traceview يوفر عدة طرق عرض بيانات متكاملة، كل منها يعالج مهمة محددة في تحليل الأداء.
Call Chart هو جدول زمني أفقي حيث يتم عرض كل سلسلة كمسار منفصل. يتم عرض الأساليب كمستطيلات ملونة: عرض المستطيل يتناسب مع وقت التنفيذ، والتداخل يعكس التسلسل الهرمي للاستدعاءات. إذا استدعى أسلوب أسلوبًا آخر، يتم رسم المستطيل الفرعي داخل المستطيل الأصلي. يسمح هذا التصور بالتحديد الفوري للعمليات التي حظرت السلسلة.
شجرة Top-Down تُظهر وقت تنفيذ الأسلوب بما في ذلك جميع استدعاءاته المتداخلة — Inclusive Time. شجرة Bottom-Up، على العكس، تُظهر أي الأساليب الأم استدعت أسلوبًا معينًا — مفيد للعثور على مصدر عملية ثقيلة. الفرق بين Inclusive و Exclusive Time مهم: قد ينفذ الأسلوب بسرعة ولكنه يستدعي أسلوبًا فرعيًا بطيئًا، وهذا يظهر فقط في Inclusive Time.
Traceview يدعم البحث باسم الأسلوب أو الحزمة أو الفئة. يتم تمييز النتائج على الجدول الزمني، وتعرض لوحة الملف الشخصي إحصائيات فقط للأساليب التي تم العثور عليها. التصفية حسب السلاسل متاحة أيضًا — يمكن إخفاء سلاسل الخلفية والتركيز على السلسلة الرئيسية (واجهة المستخدم)، حيث تكون التأخيرات الأكثر أهمية.
| المقياس | الوصف | الوحدة |
|---|---|---|
| Inclusive Time | الوقت الإجمالي للأسلوب + جميع استدعاءاته الفرعية | μs / مللي ثانية |
| Exclusive Time | وقت الأسلوب فقط بدون الاستدعاءات الفرعية | μs / مللي ثانية |
| Calls + Recur | عدد الاستدعاءات بما في ذلك التكرار | عدد |
| CPU Time | الوقت الفعلي المنفق على وحدة المعالجة المركزية (بدون انتظار) | μs / مللي ثانية |
| Real Time | وقت الساعة من دخول الأسلوب إلى خروجه | μs / مللي ثانية |
Traceview يسمح بتصدير التتبعات بتنسيق CSV لتحليلها في جداول البيانات أو الرسوم البيانية. في Android Studio، يمكن أيضًا نسخ جزء محدد من الجدول الزمني كصورة — لإدراجها في تقارير الأخطاء أو التوثيق. لـ CI/CD، يتوفر التصدير بتنسيق Perfetto عبر أداة cmdline-tools.
التنميط عبر Traceview متاح بطريقتين: عبر Android Profiler مع الالتقاط المباشر وعبر استدعاءات برمجية لواجهة برمجة التطبيقات Debug. الطريقة الأولى مناسبة للتحليل المخصص، والثانية لاختبارات الأداء القابلة لإعادة الإنتاج.
في Android Studio، افتح علامة التبويب Profiler (View → Tool Windows → Profiler)، وحدد جهازك وعملية تطبيقك. انقر على مقطع CPU، ثم حدد وضع “Trace Java Methods” وانقر على Record. بعد التفاعل مع التطبيق، انقر على Stop — Traceview سيفتح التتبع المسجل تلقائيًا. مدة التسجيل الافتراضية محدودة بـ 30 ثانية، ولكن يمكن تغيير الحد في إعدادات أداة التنميط.
للتنميط الدقيق لقسم معين من الكود، استخدم Debug.startMethodTracing و Debug.stopMethodTracing. يتم حفظ الملف في وحدة التخزين الخارجية للتطبيق في المسار الذي يعيده context.getExternalFilesDir(null). بعد الانتهاء، انقل ملف .trace إلى جهاز الكمبيوتر الخاص بك عبر Android Studio Device Explorer، ثم افتحه من خلال File → Open في Android Studio.
Debug.startMethodTracing(
"heavy_computation",
Debug.TRACE_COUNT_ALLOCS
)
processLargeDataset()
Debug.stopMethodTracing()
Debug.startMethodTracing يأخذ ثلاث معلمات: اسم الملف (بدون امتداد)، والحد الأقصى لحجم المخزن المؤقت (افتراضيًا 8 ميجابايت)، والأعلام. العلم TRACE_COUNT_ALLOCS يضيف حساب تخصيص الكائنات — مفيد للعثور على تسريبات الذاكرة. Traceview غير مناسب لتنميط الكود الأصلي — استخدم SimplePerf أو Perfetto. للاختبارات الطويلة (أكثر من 30 ثانية)، يُنصح بزيادة المخزن المؤقت إلى 64–128 ميجابايت عبر معلمة maxSize.
الجدول الزمني لـ Traceview يتكون من لوحتين: لوحة الجدول الزمني العلوية مع مستطيلات استدعاءات ملونة، ولوحة الملف الشخصي السفلية مع جدول إحصائيات. لوحة الجدول الزمني تظهر تنفيذ السلاسل من اليسار إلى اليمين، حيث كل مستطيل هو استدعاء أسلوب واحد. ألوان المستطيلات مشفرة حسب نوع الأسلوب: استدعاءات نظام Android (أخضر)، أساليب التطبيق (أزرق)، استدعاءات المكتبات (برتقالي).
في لوحة الملف الشخصي، كل صف هو أسلوب مع أعمدة لـ Inclusive Time و Exclusive Time و Calls + Recur و CPU Time. رتب الجدول حسب Inclusive Time (تنازليًا) لرؤية الأساليب التي استغرقت أكبر وقت إجمالي أولاً. إذا كان للأسلوب Inclusive Time مرتفع و Exclusive Time منخفض — المشكلة في استدعاءاته الفرعية، وتحتاج إلى توسيع الشجرة. على سبيل المثال، ListView.getView قد يكون له Inclusive Time مرتفع بسبب استدعاءات تحميل الصور.
ابحث عن الأساليب ذات Real Time المرتفع بشكل غير طبيعي ولكن CPU Time منخفض — هذا يشير إلى حظر (انتظار إدخال/إخراج، عملية شبكة، تنازع القفل). الأساليب ذات CPU Time المرتفع تتطلب تحسين الخوارزمية. بالنسبة لسلسلة واجهة المستخدم، يجب أن يكتمل كل أسلوب خلال 16 مللي ثانية — إذا تجاوز أي استدعاء هذا الحد، يفقد التطبيق إطارًا ويرى المستخدم اهتزازًا. وفقًا لتوصيات Google، يجب ألا يتجاوز الوقت الإجمالي لجميع الاستدعاءات في سلسلة واجهة المستخدم لكل إطار 8–10 مللي ثانية، تاركًا هامشًا لعمليات النظام.
على الرغم من أن Traceview و Systrace كلاهما من أدوات تتبع Android، إلا أنهما يحلان مهام مختلفة ويستخدمان في مراحل تنميط مختلفة. الفرق الرئيسي هو مستوى التفاصيل: Traceview يعمل على مستوى أساليب Java/Kotlin، بينما Systrace يعمل على مستوى عمليات النظام (CPU و GPU و Binder و SurfaceFlinger).
| المعيار | Traceview | Systrace |
|---|---|---|
| المستوى | الأساليب (Java/Kotlin) | عمليات النظام (CPU/GPU/IO) |
| الواجهة | Android Studio Profiler | سطر الأوامر + تقرير HTML |
| البيانات | Inclusive/Exclusive Time | تحميل CPU، معدل الإطارات |
| المدة | حتى 30 ثانية (Profiler)، غير محدود (API) | حتى 60 ثانية |
| الكود الأصلي | غير مدعوم | مدعوم عبر علامات atrace |
في الممارسة العملية، تكمل كلتا الأداتين بعضهما البعض: أولاً Systrace يساعد في تحديد مكون النظام الذي يسبب المشكلة (مثل GC المتكرر أو أقفال Binder)، ثم Traceview يسمح بالتعمق في أسلوب معين داخل التطبيق. في Android Studio، تم دمج كلتا الأداتين في Android Profiler — CPU Profiler يختار تلقائيًا وضع التسجيل الأمثل. على الأجهزة التي تعمل بنظام Android 12+، يعمل Systrace و Traceview فوق Perfetto، مما يوفر تنسيق بيانات موحدًا لجميع أنواع التنميط.
التنميط الفعال يتطلب أكثر من مجرد بدء التتبع — تحتاج إلى وضع نقاط الالتقاط بشكل صحيح وتفسير النتائج. فيما يلي مثالان عمليان: تنميط تحميل RecyclerView ومقارنة خوارزميتين في اختبار أداء.
المثال الأول هو تتبع المسار الحرج أثناء تمرير القائمة. RecyclerView يستدعي onBindViewHolder لكل عنصر مرئي، وإذا استغرق هذا الأسلوب أكثر من 16 مللي ثانية، يصبح التمرير متقطعًا. التتبع حول onBindViewHolder سيظهر أي العمليات المحددة داخله تستغرق وقتًا.
class MyAdapter : RecyclerView.Adapter<ViewHolder>() {
override fun onBindViewHolder(
holder: ViewHolder,
position: Int
) {
Debug.startMethodTracing("bind_card_$position")
holder.bind(items[position])
Debug.stopMethodTracing()
}
}
المثال الثاني هو اختبار سرعة A/B لتنفيذين: تحميل الصور عبر Glide مقابل BitmapFactory اليدوي. هذا التتبع يسمح بالمقارنة الموضوعية لـ Inclusive Time لكلتا الاستراتيجيتين واختيار الأمثل. من المهم تشغيل كل اختبار على جهاز دافئ (بعد 3–5 دورات) تحت ظروف متطابقة (حمل الخلفية، درجة الحرارة).
fun compareImageLoadingStrategies() {
// اختبار A: Glide
Debug.startMethodTracing("glide_test")
loadWithGlide()
Debug.stopMethodTracing()
// اختبار B: BitmapFactory
Debug.startMethodTracing("bitmap_test")
loadWithBitmapFactory()
Debug.stopMethodTracing()
}
بعد التشغيل، افتح كلا ملفي .trace في Android Studio وقارن Inclusive Time في لوحة الملف الشخصي. إذا أظهر Glide 3x أقل Inclusive Time لنفس المهمة — فهذا أساس موضوعي لاختيار المكتبة. وفقًا لـ Tony John (مطور Glide، 2023)، تستخدم المكتبة التخزين المؤقت ومجموعة سلاسل، مما يوفر ربحًا يصل إلى 40% في التحميلات المتكررة.
الأسئلة الشائعة
Traceview هو نواة عرض التتبعات داخل Android Profiler. يوفر Profiler واجهة مستخدم إضافية لبدء وإيقاف التسجيل، بينما يتولى Traceview عرض الجدول الزمني وإحصائيات الأساليب. كلاهما يستخدم نفس تنسيق بيانات .trace.
نعم، Traceview يعمل على كل من المحاكي والأجهزة الفعلية Android. يجب تمكين تصحيح أخطاء USB، ويجب بناء التطبيق في وضع debuggable. البيانات على الأجهزة الفعلية أكثر دقة، حيث قد يشوه المحاكي التوقيتات بسبب المحاكاة الافتراضية.
الحجم الأقصى الافتراضي هو 8 ميجابايت، ولكن يمكن زيادته إلى 256 ميجابايت عبر معلمة maxSize في Debug.startMethodTracing. لجلسات التنميط الطويلة، استخدم Perfetto، الذي ليس له حد صارم على حجم التتبع.
يعمل Traceview على مستوى Android Runtime (ART) ويرى فقط أساليب Java و Kotlin المُدارة. لتنميط الكود الأصلي (C/C++ عبر JNI)، استخدم SimplePerf أو Perfetto مع FTrace، اللذان يلتقطان استدعاءات النظام على مستوى النواة.
استخدم أداة dmtracedump من Android SDK (مجلد platform-tools). تنشئ تقرير HTML مع جدول زمني وجدول إحصائيات. على Windows: dmtracedump -h trace.trace > report.html. بديل هو واجهة Perfetto (ui.perfetto.dev)، التي تدعم استيراد تنسيق .trace.
الملخص
سنقوم بتطوير تطبيق جوال جاهز
تقدم IT Sectr تطبيقات iOS وAndroid للشركات الناشئة والشركات منذ عام 2017. سوف نقدم لك النصح ونقترح أفضل حل.
اقرأ أيضًا