Systrace ایک Android نظام ٹریسنگ کا آلہ ہے جو لینکس کرنل، CPU، GPU اور تمام نظامی عملوں کے بارے میں مختصر مدت میں ڈیٹا اکٹھا کرتا ہے۔ Traceview کے برعکس، جو ایپلیکیشن کے اندر طریقوں پر توجہ مرکوز کرتا ہے، Systrace نظام کی تصویر دکھاتا ہے: ہر CPU کور کا بوجھ، SurfaceFlinger کا آپریشن، Binder کالز اور GC سائیکل۔ Google، 2024 کے مطابق، یہ آلہ گرائے گئے فریموں، بار بار کوڑا کرکٹ جمع کرنے اور UI تھریڈ میں بے قاعدگیوں کی تشخیص کے لیے ناگزیر ہے۔
اہم نکات
Systrace Android SDK سے ایک کمانڈ لائن یوٹیلیٹی ہے جو متعدد کرنل ٹریسنگ (ftrace) اور صارف کی جگہ (atrace) ذرائع سے ڈیٹا کو ایک HTML رپورٹ میں کیپچر اور ضم کرتی ہے۔ یہ آلہ Android 4.1 (Jelly Bean) میں سسٹم پروفائلنگ کے لیے پرانی traceview یوٹیلیٹی کے متبادل کے طور پر ظاہر ہوا اور طویل عرصے تک Android پلیٹ فارم پر معیاری کارکردگی تشخیص کا آلہ رہا۔
Systrace ftrace پر انحصار کرتا ہے — ایک لینکس کرنل ٹریسنگ میکانزم جو 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 اور Android مخصوص ٹیگز کے لیے صارف کی جگہ میں atrace۔ 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 (ہارڈویئر ابسٹرکشن پرت)۔ گیم پروفائلنگ کے لیے، AGI (Android GPU Inspector) کے ذریعے GPU کمانڈ کی تفصیلات کے ساتھ gfx زمرہ مفید ہے۔
Systrace Android کے لیے صلاحیتوں کا ایک منفرد سیٹ فراہم کرتا ہے جو دوسرے پروفائلرز میں دستیاب نہیں ہے: سسٹم ٹائم لائن، کرنل سطح کے میٹرکس اور خودکار مسئلہ کا پتہ لگانا۔
Systrace HTML رپورٹ میں ایک کثیر سطحی ٹائم لائن ہوتی ہے جہاں ہر لین ایک عمل یا تھریڈ سے مطابقت رکھتی ہے۔ آپ وقت کے پیمانے پر زوم ان اور آؤٹ کر سکتے ہیں، تفصیلات دیکھنے کے لیے واقعات پر کلک کر سکتے ہیں (مدت، شروع کرنے والا عمل، اضافی دلائل)۔ رنگ کوڈنگ تیزی سے نیویگیشن میں مدد کرتی ہے: سبز بلاکس — عمل چل رہا ہے، نیلے — انتظار کر رہا ہے، نارنجی — مداخلت، سفید — بیکار۔
Systrace خود بخود ٹریس کا تجزیہ کرتا ہے اور مسائل والے علاقوں کی نشاندہی کرنے والے انتباہی پیغامات دکھاتا ہے۔ مثال کے طور پر: «Buffer underrun — SurfaceFlinger کو VSync سے پہلے بفر نہیں ملا» یا «Long Binder transaction — تھریڈ Binder_1 میں 42 ms»۔ ہر انتباہ میں ٹائم لائن کے متعلقہ حصے کا لنک اور اصلاح کی سفارش ہوتی ہے۔ یہ دستی تجزیہ کے گھنٹے بچاتا ہے اور دستی لاگنگ کے بجائے Systrace استعمال کرنے کی ایک اہم وجہ ہے۔
ڈویلپر Trace.beginSection اور Trace.endSection API کے ذریعے Systrace ٹریس میں حسب ضرورت ٹیگز شامل کر سکتے ہیں۔ یہ براہ راست سسٹم ٹائم لائن پر اہم کوڈ حصوں کے اجراء کو ٹریس کرنے کی اجازت دیتا ہے — مثال کے طور پر، ڈیٹا لوڈنگ یا لے آؤٹ حساب کتاب کے آغاز اور اختتام کو نشان زد کرنا۔ ٹیگز ایپلیکیشن لین پر علیحدہ بلاکس کے طور پر ظاہر ہوتے ہیں اور سسٹم واقعات کے ساتھ نظر آتے ہیں۔
| زمرہ | ڈیٹا | عام استعمال |
|---|---|---|
| sched | سیاق و سباق کی سوئچنگ، بیکار حالتیں | تھریڈ کی بندش، مسابقت |
| gfx | VSync، بفر کی تیاری، HWC | فریم ڈراپ، جھٹکا |
| binder | Binder لین دین، تاخیر | IPC تاخیر، دور دراز کالز |
| freq | CPU فریکوئنسی، اسکیلنگ گورنر | تھروٹلنگ، بجلی کی کھپت |
| gfx + AGI | GPU کمانڈز، شیڈرز | گیم کارکردگی |
Systrace چلانا دو طریقوں سے ممکن ہے: Android Studio CPU Profiler («Trace System Calls» موڈ) کے ذریعے یا platform-tools فولڈر سے systrace.py Python اسکرپٹ استعمال کرکے کمانڈ لائن کے ذریعے۔ ہر طریقہ کے اپنے استعمال کے منظرنامے ہیں۔
ڈیوائس منسلک کریں، Profiler کھولیں (View → Tool Windows → Profiler)، اپنا عمل منتخب کریں، CPU ٹیب پر جائیں، «Trace System Calls» موڈ منتخب کریں اور Record پر کلک کریں۔ 5–30 سیکنڈ کے بعد، Stop پر کلک کریں — Android Studio ڈیوائس پر Systrace چلائے گا، تکمیل کا انتظار کرے گا اور نتیجہ لوڈ کرے گا۔ حد: ریکارڈنگ صرف اس وقت ممکن ہے جب Profiler کھلا ہو، جو طویل منظرناموں یا آٹومیشن کے لیے آسان نہیں ہے۔
زیادہ لچکدار کنٹرول کے لیے، systrace.py اسکرپٹ استعمال کریں۔ ٹریس زمرے، مدت اور آؤٹ پٹ فائل کا نام بتائیں۔ مثال: 10 سیکنڈ کے لیے gfx، input اور sched ڈیٹا کیپچر کرنا۔ چلانے کے لیے Python 2.7+ اور USB ڈیبگنگ فعال کے ساتھ منسلک ڈیوائس درکار ہے۔ Android 12+ پر، Systrace کو Perfetto سے تبدیل کر دیا گیا ہے — کمانڈ وہی رہتا ہے، لیکن اسکرپٹ کالز کو perfetto کی طرف ری ڈائریکٹ کرتی ہے۔
# systrace کا 10 سیکنڈ کا بنیادی رن
$ python systrace.py \
--time=10 \
-o trace.html \
gfx input sched
# UI تجزیہ کے لیے صرف gfx زمرہ
$ python systrace.py \
--time=5 \
-t gfx \
-o ui_trace.html
اپنے کوڈ کو Systrace ٹائم لائن پر ظاہر کرنے کے لیے، اہم حصے کو Trace.beginSection / Trace.endSection میں لپیٹیں۔ یہ ضروری ہے کہ beginSection اور endSection سختی سے جوڑے ہوں — ورنہ Systrace غلط ٹائم لائن دکھائے گا۔ Kotlin میں، استثناء کی صورت میں بھی سیکشن بندش کی ضمانت کے لیے ان لائن ایکسٹینشن استعمال کرنا آسان ہے۔
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 لائنیں فریم کی حدود دکھاتی ہیں (60 FPS پر ہر 16.6 ms)۔ اگر دو VSync لائنوں کے درمیان مکمل رینڈرنگ سائیکل فٹ نہیں ہوتا — فریم گر جاتا ہے۔ SurfaceFlinger لین پر توجہ دیں: اگر یہ طویل عرصے تک مصروف ہے (نارنجی بلاک)، پرت کمپوزیشن مجموعی رینڈرنگ کو سست کر رہی ہے۔
رپورٹ کے بائیں جانب انتباہات پینل میں خود بخود دریافت شدہ مسائل ہوتے ہیں۔ ہر انتباہ کلک کرنے کے قابل ہے — کلک کرنے پر ٹائم لائن مسئلہ والے لمحے پر چلی جاتی ہے۔ سب سے عام انتباہات: «Long Sync» (طویل تھریڈ سنکرونائزیشن)، «Scheduling Delay» (شیڈیولر تاخیر)، «Buffer Overrun» (SurfaceFlinger بفر اوور فلو)۔ اگر کوئی انتباہ Scheduling Delay کے لیے ~100 ms کی قدر دکھاتا ہے، یہ براہ راست اشارہ کرتا ہے کہ UI تھریڈ پس منظر کے بوجھ کی وجہ سے CPU کا انتظار کر رہا تھا — بھاری حسابات کو ورکر تھریڈ میں منتقل کیا جانا چاہیے۔
گرائے گئے فریموں کا تجزیہ کرنے کے لیے، SurfaceFlinger اور app.gfx لینیں فعال کریں۔ ہر فریم ایک مستطیل کے طور پر دکھایا جاتا ہے: سبز (≤16 ms)، پیلا (16–32 ms)، سرخ (>32 ms)۔ اگر آپ ایپ لین پر سرخ مستطیل دیکھتے ہیں، اس پر کلک کریں — Systrace دکھائے گا کہ کس مخصوص طریقہ (یا سسٹم کال) نے حد عبور کی۔ Google (Android Performance Patterns، 2023) کے مطابق، 70% جھٹکا مسائل سست onBindViewHolder یا بار بار GC کی وجہ سے ہوتے ہیں۔
Perfetto Systrace کا جانشین ہے، جسے Google نے Android 9 (Pie) میں ایک تجرباتی آلے کے طور پر متعارف کرایا اور Android 12 سے شروع کرکے بنیادی حل بن گیا۔ Perfetto ایک جدید protobuf ڈیٹا فارمیٹ استعمال کرتا ہے، طویل سیشنز کی حمایت کرتا ہے (سیکنڈ کے بجائے گھنٹے)، اور ٹریس دیکھنے کے لیے ویب UI رکھتا ہے۔ آئیے دونوں نظاموں کے درمیان اہم فرقوں کا جائزہ لیں۔
| معیار | Systrace | Perfetto |
|---|---|---|
| فارمیٹ | HTML رپورٹ (trace.html) | Protobuf (.trace / .perfetto-trace) |
| مدت | 60 سیکنڈ تک | گھنٹے، گیگا بائٹ ڈیٹا |
| انٹرفیس | بلٹ ان HTML | ویب UI (ui.perfetto.dev) |
| زمرے | مقرر (ftrace + atrace) | قابل توسیع (ٹریس پر SQL سوالات) |
| حرکت | صرف Android | Android، Linux، Chrome، Windows |
Perfetto میں منتقلی کے باوجود، Systrace کی مہارتیں متعلقہ رہتی ہیں: Android 11 اور اس سے نیچے کے آلات پر، یہ بطور ڈیفالٹ استعمال ہوتا ہے، اور Perfetto Systrace زمروں کے ساتھ پسماندہ مطابقت برقرار رکھتا ہے۔ Android Studio CPU Profiler میں، نئے آلات کے لیے Perfetto اور پرانے کے لیے Systrace استعمال ہوتا ہے — صارف کے لیے شفاف۔ CI/CD کے لیے، Perfetto تجویز کیا جاتا ہے کیونکہ اس کے فارمیٹ کو Python اور SQL کے ذریعے خود بخود پروسیس کیا جا سکتا ہے۔
Systrace میں عملی مہارت حاصل کرنے کے لیے، دو منظرناموں پر غور کریں: اسکرولنگ کے دوران گرائے گئے فریموں کی وجہ تلاش کرنا اور بار بار GC کی تشخیص کرنا جو UI تھریڈ کو بلاک کرتا ہے۔
Systrace کو gfx زمرہ کے ساتھ 10 سیکنڈ کے لیے چلائیں، ایپ میں فہرست اسکرول کریں۔ رپورٹ میں، سرخ فریموں والے حصے تلاش کریں۔ مسئلہ والے فریم پر کلک کریں اور ایپ لین دیکھیں — اگر 16 ms سے چوڑا «inflateLayout» یا «onBindViewHolder» بلاک ہے، مسئلہ لے آؤٹ انفلیشن یا ڈیٹا بائنڈنگ میں ہے۔ حل: لے آؤٹ کو بهتر بنائیں (گہرے ViewGroup کو کم کریں، ViewStub)، onAttachedToWindow کے ساتھ Glide میں تصویر لوڈنگ منتقل کریں۔
freq اور sched زمروں کے ساتھ Systrace آپ کو یہ دیکھنے کی اجازت دیتا ہے کہ GC سائیکل کتنی بار UI تھریڈ کو ترجیح دیتے ہیں۔ ٹائم لائن پر ایپلیکیشن لین تلاش کریں — اگر آپ «Concurrent GC» نامی 20–50 ms کے وقفے وقفے سے بلاکس دیکھتے ہیں، کوڑا کرکٹ جمع کرنے والا بہت بار چل رہا ہے۔ تفصیلی تجزیہ کے لیے «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 چلانے کے لیے روٹ رسائی کی ضرورت نہیں ہے۔ آلہ atrace استعمال کرتا ہے، جو USB ڈیبگنگ فعال کسی بھی ڈیوائس پر دستیاب ہے۔ کچھ زمرے (power، freq) کو سسٹم دستخط کی ضرورت ہو سکتی ہے، لیکن اہم زمرے (gfx، sched، input) تمام آلات پر کام کرتے ہیں۔
60 سیکنڈ کی حد ftrace رنگ بفر کی صلاحیت سے متعلق ہے — طویل ریکارڈنگ کے دوران، بفر اوور رائٹ ہو جاتا ہے۔ Perfetto اس حد کو ہٹاتا ہے: آپ گھنٹوں ریکارڈ کر سکتے ہیں اور USB ٹرانسفر یا ڈسک پر سٹریمنگ کے ذریعے کئی گیگا بائٹ تک کے ٹریس حاصل کر سکتے ہیں۔
ممکنہ وجوہات: ایپ ڈیبگ ایبل موڈ میں نہیں ہے، مینی فیسٹ میں android:debuggable=«true» فلیگ سیٹ نہیں ہے، یا ریلیز بلڈ استعمال ہو رہا ہے۔ یہ بھی چیک کریں کہ زمروں میں --app=com.example.app بتایا گیا ہے — ورنہ Systrace صرف سسٹم کے عمل کیپچر کرتا ہے۔
C++ کے لیے، libcutils لائبریری سے ATRACE_BEGIN اور ATRACE_END استعمال کریں۔ ہیڈر فائل شامل کریں اور مطلوبہ حصہ لپیٹیں۔ ٹیگ آپ کے عمل کی لین پر Systrace میں ظاہر ہوگا، جو خاص طور پر گیم انجن (Unity، Unreal) کے تجزیہ کے لیے مفید ہے۔
Android 12 اور اس سے اوپر پر، Perfetto استعمال کریں۔ ADB کے ذریعے ڈیوائس پر perfetto ایجنٹ انسٹال کریں، JSON فارمیٹ میں ریکارڈنگ شروع کریں۔ فوری دیکھنے کے لیے، Perfetto ویب UI (ui.perfetto.dev) استعمال کریں، اور CI کے لیے — Python میں TraceProcessor کے ساتھ کمانڈ لائن ایکسپورٹ کریں۔
خلاصہ
ہم ایک موبائل ایپلیکیشن ٹرنکی تیار کریں گے
IT Sectr 2017 سے اسٹارٹ اپس اور کاروبار کے لیے iOS اور Android ایپلیکیشنز بناتا ہے۔ ہم آپ کو مشورہ دیں گے اور بہترین حل تجویز کریں گے۔
مزید پڑھیں