تخطَّ إلى المحتوى

Tracy Profiler - مرتجل الإطار الفعلي

Tracy Profiler - مرتجل الإطار الفعلي

Tracy هو مرتجل الإطار الحقيقي والعينة الهجينة بدقة nanosecond، يُستخدم على نطاق واسع في الألعاب و C++ و Rust منخفضة الكمون. تضيف zone macros خفيفة الوزن إلى الرمز الخاص بك، و Tracy بث بيانات التوقيت حيًا إلى واجهة سطح المكتب حيث يمكنك رؤية كل إطار، كل منطقة، توقيتات GPU، تخصيصات الذاكرة، و contention قفل كما يعمل البرنامج. الجمع بين الآلات اليدوية بالإضافة إلى أخذ العينات التلقائي يعطي كلا المناطق الدقيقة الدلالية والبقع الساخنة غير المنسوبة.

التثبيت

المكونكيف
الخادم (واجهة المستخدم)بناء profiler/ من الريبو أو تحميل إصدار
العميل (المكتبة)أضف TracyClient.cpp + الرؤوس إلى البناء الخاص بك
Rustcargo add tracy-client (أو tracing-tracy)
تمكينجمع مع TRACY_ENABLE محدد
التحققإطلاق واجهة المستخدم؛ فهي تنتظر اتصال عميل

آلات C++

#include "tracy/Tracy.hpp"

void update() {
    ZoneScoped;                    // منطقة سميت بعد الدالة
    physics();
}

void render() {
    ZoneScopedN("Render Pass");    // اسم صريح
    ZoneColor(0x00FF00);
    draw();
}

int main() {
    while (running) {
        update();
        render();
        FrameMark;                 // تحديد حدود الإطار
    }
}
الماكروالغرض
ZoneScopedوقت النطاق المغلق
ZoneScopedN("name")منطقة مسماة
ZoneText(str, len)إرفاق نص بمنطقة
FrameMarkحدود الإطار
TracyPlot("fps", v)رسم قيمة رقمية بمرور الوقت
TracyMessage(...)سجل رسالة في الخط الزمني
TracyLockable(...)تتبع الخلاف المتبادل

آلات Rust

use tracy_client::{Client, span};

fn main() {
    let _client = Client::start();
    loop {
        {
            let _s = span!("update");
            update();
        }
        tracy_client::frame_mark();
    }
}

أو توصيله في tracing مع صندوق tracing-tracy بحيث تظهر الفترات الموجودة تلقائيًا في Tracy.

الذاكرة و GPU

الميزةكيف
تتبع التخصيصTracyAlloc(ptr, size) / TracyFree(ptr)
محسوبات مخصصةWrap alloc/free مع الماكروس
مناطق GPU (Vulkan/D3D/OpenGL)TracyVkZone, TracyD3D12Zone, إلخ.
سياق GPUإنشاء مرة واحدة، ثم المناطق تعلق به

واجهة المستخدم

عرضيعرض
الخط الزمنيمناطق لكل خيط، إطار تلو الآخر
الإحصائياتوقت إجمالي لكل منطقة
البحث عن المنطقةالرسم البياني لمدد منطقة واحدة
مقارنةفرق بين لقطتين (قبل/بعد التغيير)
الذاكرةخط الوقت للتخصيصات والتسريبات
أقفالContention بين الخيوط
مخطط اللهبهيكل الاستدعاء المجمع

سير العمل: مطاردة كسب الإطار

خطوةإجراء
1تشغيل مع اتصال العميل؛ إعادة إنتاج الكسب
2البحث عن الإطار الطويل في الخط الزمني
3التكبير — أي منطقة تهيمن؟
4فتح “منطقة البحث” لتلك المنطقة → مدة الرسم البياني
5تحقق من سياق الشذوذ (الأقفال والتخصيصات وانتظار GPU)
6إصلاح، التقط مرة أخرى، استخدم مقارنة لإثبات التحسين

سير عمل مقارن بين لقطتين هو أحد أكثر ميزات Tracy عملية — فهو يحول “يبدو أسرع” إلى فرق مقاس.

وضع العينات

بعد المناطق اليدوية، يمكن لـ Tracy أخذ عينات من مكاده استدعاء تلقائيًا (Linux/Windows)، وتكملة الوقت في رمز لم تقم بآلاته. الجمع بين الاثنين: المناطق تعطي بنية دلالية، أخذ العينات يملأ الثغرات.

Tracy مقابل المرتجلين ذوي الصلة

الجانبTracyperfPerfetto
نموذجمناطق محبوكة + عيناتأخذ عيناتتتبع في جميع أنحاء النظام
الدقةNanosecondفترة العينةمستوى الحدث
عرض مباشرنعم (فعلي)لابعد العملية
دعم GPUمدمجلاجزئي
الأفضل لـالألعاب والإطار والكمون المنخفض C++/Rustمسارات CPU الساخنةخطوط الوقت في جميع أنحاء النظام

يكمل perf و Perfetto؛ ميزة Tracy هي الحياة والإطار والمحبوك ملف التعريف.

الموارد