13.1.18. محلِّل أداء الشيفرة¶
يفتح Window → Show Code Profiler محلِّل أداء على مستوى الدوال للبرنامج الثابت قيد التشغيل على الكاميرا المتصلة: أي دوال C جرى تشغيلها، وكم مرة، وأين ذهبت الميكروثواني، مبثوثًا حيًّا أثناء تنفيذ البرنامج النصي. يجيب عن السؤال الذي يثيره عدّاد FPS -- لماذا يكون هذا المسار بطيئًا -- على مستوى شيفرة الكاميرا نفسها.
دعم تحليل الأداء مُجمَّع داخل البرنامج الثابت، وليس حاضرًا دائمًا: يجب أن تشغّل الكاميرا برنامجًا ثابتًا مبنيًا بـ PROFILE_ENABLE=1، ويبقى مدخل القائمة معطّلًا خلاف ذلك. وبناء مثل هذا البرنامج الثابت جزء من سير عمل البناء المخصّص المغطى في بناء البرنامج الثابت.
المحلِّل يراقب تشغيل برنامج نصي: الاستدعاءات لكل دالة، والتوقيت، والنسبة المئوية من الوقت الإجمالي، مع عدّادَي أحداث عتاد في أقصى الأعمدة اليمنى وسطر الإجماليات تحتها.¶
النافذة عبارة عن جدول قابل للفرز للدوال مع عدد استدعاءاتها، والحد الأدنى، والحد الأقصى، والإجمالي، ومتوسط الميكروثواني، ومتوسط الدورات، والنسبة المئوية من الوقت الإجمالي، مع سطر إجماليات تحتها ومربع تصفية للعثور على الدوال بالاسم. تأتي أسماء الدوال من ملف ELF الخاص بالبرنامج الثابت -- وجّه حقل مسار البرنامج الثابت في النافذة إلى ملف .elf الناتج عن البناء، فتُحلّ العناوين إلى أسماء.
ينظّم البيانات عنصرا تحكم في العرض. Flat يرتّب كل دالة بشكل مستقل -- العرض الخاص بـ "ما الدالة الأكثر تكلفة منفردةً". أما Tree فيُعشّش الدوال المُستدعاة تحت المُستدعِيات، مبيّنًا كيف يتفكك الوقت أسفل سلسلة الاستدعاءات. وبشكل مستقل، يُحمِّل Inclusive الدالة الوقت المنقضي في كل ما استدعته، بينما يحسب Exclusive جسم الدالة نفسها فقط -- يجد الشامل النظام الفرعي الأكثر تكلفة، ويجد الحصري الحلقة الأكثر تكلفة. وReset يصفّر العدّادات، وهي الطريقة التي تقيس بها مرحلة واحدة من المسار بمعزل عن غيرها: أعد الضبط، ودعها تعمل، ثم اقرأ.
يمكن للمحلِّل أيضًا عرض عدّادات أحداث العتاد -- إخفاقات الذاكرة المخبئية، وأخطاء توقع التفرّع، والأحداث الأخرى التي يستطيع المعالج عدّها -- إلى جانب أعمدة التوقيت؛ حدّدها في النافذة نفسها على برنامج ثابت مبني بهذا الدعم.
شاهد أيضا
تستطيع واجهة سطر الأوامر لحزمة openmv تركيب بيانات تحليل الأداء نفسها فوق تيار حيّ من سطر الأوامر -- انظر واجهة سطر الأوامر openmv.