Spall عبارة عن مكتبة لملفات التعريف وواجهة ويب لاستكشاف التعليمات البرمجية الخاصة بك والبحث في مشكلات الأداء المحتملة.
^ هذه نسخة بحجم 180 ميجابايت (ما يعادل 526 ميجابايت بتنسيق JSON)، تتبع مدته 5 دقائق من Happenlance، مقدمة من @pmttavara!
جربه مرة أخرى في Gravity Moth
يتضمن spall مكتبة C صغيرة ذات رأس واحد، spall.h
.
يدعم Spall حاليًا تنسيقين مختلفين للملفات:
perfetto
و chrome://tracing
و speedscope
، الموضح أدناه يمكنك إما صياغة التعليمات البرمجية الخاصة بك باستخدام رأسنا، أو استخدام رمز تفريغ JSON المتوافق مع chrome://tracing
الحالي.
إذا كنت تبدأ من الصفر، فمن المحتمل أنك تريد استخدام رأس Spall لإنشاء الأحداث. يحتوي التنسيق الثنائي على حمل أقل بكثير لملف التعريف (لذا يجب أن تكون آثارك أكثر دقة)، ويتم استيعابه بشكل أسرع بنحو 10 مرات من تنسيق JSON.
إذا كنت تريد استخدام JSON، فإن spall يتوقع الأحداث التي تتبع تنسيق تتبع JSON الخاص بـ Google، وهي تبدو كما يلي:
[
{"cat":"function", "name":"main", "ph": "X", "pid": 0, "tid": 0, "ts": 0, "dur": 1},
{"cat":"function", "name":"myfunction", "ph": "B", "pid": 0, "tid": 0, "ts": 0},
{"cat":"function", "ph": "E", "pid": 0, "tid": 0, "ts": 0}
]
(لا يهتم Spall بالفواصل الزائدة ولا يلزم وجود أقواس قريبة لتسهيل إنشاء الملف/تدفق الأحداث)
cat
- فئة الحدث. غير مستخدمة حاليا
name
- اسم الحدث، سلسلة
ph
- نوع الحدث
يكتب | رمز |
---|---|
يبدأ | "ب" |
نهاية | "ه" |
مكتمل | "X" |
tid
- معرف الموضوع، u32 pid
- معرف العملية، u32
يجب أن تتراوح جميع قيمة tids وpids بين 0 وu32_MAX، كقيم كاملة
ts
- الطابع الزمني، مزدوج، dur
- الطابع الزمني، مزدوج، بالميكروثانية
(الطابع الزمني 1 يبدأ عند 1 ميكروثانية)
يدعم Spall حاليًا أحداث البداية والنهاية والإكمال فقط
{"cat":"function", "name":"foo", "ph": "X", "pid": 0, "tid": 0, "ts": 0, "dur": 1},
تتطلب الأحداث الكاملة حقل المدة، لأنها تتتبع بداية/نهاية الوظيفة في وقت واحد
{"cat":"function", "name":"myfunction", "ph": "B", "pid": 0, "tid": 0, "ts": 0},
{"cat":"function", "ph": "E", "pid": 0, "tid": 0, "ts": 0},
تقوم أحداث النهاية تلقائيًا بإغلاق أحدث حدث بداية بنفس معرف التعريف (pid) وtid (tid)، لذا فهي لا تحتاج إلى أسماء
بغض النظر عن تنسيق الاستيعاب، من المتوقع أن تكون جميع أحداث البداية والنهاية ضمن العملية/السلسلة (pid/tid) في الطابع الزمني الأقدم أولاً، بترتيب مصنف على سبيل المثال:
[
{"cat":"function", "name":"main", "ph": "B", "pid": 0, "tid": 0, "ts": 0},
{"cat":"function", "name":"foo", "ph": "B", "pid": 0, "tid": 0, "ts": 1},
{"cat":"function", "ph": "E", "pid": 0, "tid": 0, "ts": 2},
{"cat":"function", "ph": "E", "pid": 0, "tid": 0, "ts": 3}
]