Traceview Android Studio میں شامل ایک گرافیکل ٹریسنگ ٹول ہے جو وقت اور CPU وسائل کے لحاظ سے ایپلیکیشن میتھڈز کے اجراء کو ریکارڈ اور تصور کرتا ہے۔ Systrace کے برعکس جو کرنل سطح پر سسٹم کے عمل دکھاتا ہے، Traceview ایپلیکیشن کے اندر Java اور Kotlin میتھڈز پر توجہ مرکوز کرتا ہے، جو صارف کے ان پٹ سے UI رینڈرنگ تک کی زنجیر میں کال کیے جاتے ہیں۔ Google، 2024 کے مطابق، یہ ٹول انفرادی کال کی سطح پر کارکردگی کی رکاوٹیں تلاش کرنے اور ریلیز سے پہلے کوڈ کو بہتر بنانے میں مدد کرتا ہے۔
اہم نکات
Traceview Android Studio میں شامل ایک گرافیکل پروفائلر ہے جو Android ایپلیکیشن میتھڈز کے اجراء کے نشانات کو ٹائم لائن اور کال ٹیبل کے طور پر دکھاتا ہے۔ یہ Android SDK کا حصہ ہے اور Android Studio 3.0 سے Android Profiler کے ذریعے، نیز dmtracedump کمانڈ لائن یوٹیلیٹی کے ذریعے دستیاب ہے۔
Traceview کا بنیادی کام ڈیولپرز کو وہ میتھڈز تلاش کرنے میں مدد کرنا ہے جو سب سے زیادہ CPU وقت استعمال کرتے ہیں۔ سادہ لاگنگ کے برعکس، Traceview ہر میتھڈ کے داخلے اور اخراج کا صحیح وقت ریکارڈ کرتا ہے، ایک Call Chart اور Top-Down ٹری بناتا ہے، جس سے کارکردگی کی بے ضابطگیوں کا بصری پتہ لگانا ممکن ہوتا ہے۔ یہ ٹول UI تھریڈ کی پروفائلنگ کرتے وقت خاص طور پر مفید ہے، جہاں 16 ms کی تاخیر فریم ڈراپ کا سبب بنتی ہے۔
Traceview سب سے پہلے Android SDK کے ابتدائی ورژنز میں .trace فائلیں دیکھنے کے لیے ایک اسٹینڈ الون یوٹیلیٹی کے طور پر ظاہر ہوا۔ Android Studio 3.0 (2017) کی ریلیز کے ساتھ، یہ Android Profiler کا حصہ بن گیا، جس نے لائیو CPU، میموری اور نیٹ ورک ٹائم لائنز کے ساتھ انضمام حاصل کیا۔ Google I/O 2018 کے مطابق، Android Studio ٹیم پروفائلر کو ترقی دینا جاری رکھے ہوئے ہے، systrace اور perfetto کے ذریعے مقامی کوڈ کے لیے معاونت شامل کر رہی ہے۔ Android Studio کے موجودہ ورژنز میں، Traceview Perfetto فارمیٹ پر کام کرتا ہے لیکن کلاسک .trace فارمیٹ کے ساتھ پسماندہ مطابقت برقرار رکھتا ہے۔
Traceview Android Runtime (ART) میں System Tracing میکانزم سے ڈیٹا حاصل کرتا ہے۔ جب ٹریسنگ فعال کے ساتھ ایپلیکیشن لانچ کی جاتی ہے، ART ہر عمل میں لائے گئے میتھڈ کے شروع اور اختتام کے ٹائم اسٹیمپ ریکارڈ کرتا ہے، جس میں کلاس کا نام، میتھڈ کا نام اور تھریڈ ID شامل ہے۔
// ایپلیکیشن کوڈ میں ٹریسنگ شروع کرنا
Debug.startMethodTracing("app_trace")
// پروفائلنگ کے لیے کوڈ کا اہم حصہ
loadHeavyData()
// ٹریسنگ روکنا — فائل آلہ پر محفوظ ہو گئی
Debug.stopMethodTracing()
System Tracing ART ورچوئل مشین کی سطح پر کام کرتا ہے اور مائیکرو سیکنڈ کی درستگی کے ساتھ ہر میتھڈ کال کو رجسٹر کرتا ہے۔ ایپلیکیشن کی کارکردگی پر اثر کو کم سے کم کرنے کے لیے ڈیٹا رنگ بفر میں لکھا جاتا ہے۔ ٹریسنگ رکنے کے بعد، بفر ڈیوائس کی اندرونی اسٹوریج میں .trace فائل میں فلش ہو جاتا ہے۔
.trace فائل میں فارمیٹ ورژن اور شروع ہونے کے وقت کے ساتھ ایک ہیڈر ہوتا ہے، جس کے بعد ہر کال کے ریکارڈ ہوتے ہیں: تھریڈ ID، میتھڈ ID، داخلے کا ٹائم اسٹیمپ اور اخراج کا ٹائم اسٹیمپ۔ Android Studio خود بخود .trace فائل لوڈ کرتا ہے اور دو اہم ویوز بناتا ہے: تاریخ کے لیے ٹائم لائن پینل اور کال کے درجہ بندی کے لیے پروفائل پینل۔ ڈیفالٹ طور پر، زیادہ سے زیادہ بفر سائز 8 MB ہے، لیکن اسے Debug.startMethodTracing(filename, maxSize) کے ذریعے بڑھایا جا سکتا ہے۔
Traceview کئی تکمیلی ڈیٹا ویوز فراہم کرتا ہے، ہر ایک کارکردگی کے تجزیہ میں ایک مخصوص کام کو حل کرتا ہے۔
Call Chart ایک افقی ٹائم لائن ہے جہاں ہر تھریڈ کو علیحدہ لین کے طور پر دکھایا جاتا ہے۔ میتھڈز کو رنگین مستطیلوں کے طور پر دکھایا گیا ہے: مستطیل کی چوڑائی عملدرآمد کے وقت کے متناسب ہے، اور نیسٹنگ کال کے درجہ بندی کی عکاسی کرتی ہے۔ اگر کوئی میتھڈ دوسرے میتھڈ کو کال کرتا ہے، تو چائلڈ مستطیل پیرنٹ مستطیل کے اندر کھینچا جاتا ہے۔ یہ تصور ان کارروائیوں کی فوری شناخت کرنے کی اجازت دیتا ہے جنہوں نے تھریڈ کو بلاک کیا۔
Top-Down درخت اپنی تمام نیسٹڈ کالوں سمیت ایک میتھڈ کا عملدرآمد وقت دکھاتا ہے — Inclusive Time۔ Bottom-Up درخت، اس کے برعکس، دکھاتا ہے کہ کن پیرنٹ میتھڈز نے دیے گئے میتھڈ کو کال کیا — بھاری آپریشن کا ذریعہ تلاش کرنے کے لیے مفید۔ Inclusive اور Exclusive Time کے درمیان فرق اہم ہے: ایک میتھڈ خود تیزی سے عملدرآمد ہو سکتا ہے لیکن ایک سست چائلڈ میتھڈ کو کال کر سکتا ہے، اور یہ صرف Inclusive Time میں نظر آتا ہے۔
Traceview میتھڈ کے نام، پیکیج یا کلاس کے ذریعے تلاش کی حمایت کرتا ہے۔ نتائج ٹائم لائن پر نمایاں کیے جاتے ہیں، اور پروفائل پینل صرف ملے ہوئے میتھڈز کے لیے اعدادوشمار دکھاتا ہے۔ تھریڈ کے ذریعے فلٹرنگ بھی دستیاب ہے — آپ پس منظر کے تھریڈز کو چھپا سکتے ہیں اور مرکزی (UI) تھریڈ پر توجہ مرکوز کر سکتے ہیں، جہاں تاخیر سب سے اہم ہے۔
| میٹرک | تفصیل | یونٹ |
|---|---|---|
| Inclusive Time | میتھڈ + اس کی تمام چائلڈ کالوں کا کل وقت | μs / ms |
| Exclusive Time | صرف میتھڈ کا وقت، چائلڈ کالوں کو چھوڑ کر | μs / ms |
| Calls + Recur | تکرار سمیت کالوں کی تعداد | تعداد |
| CPU Time | CPU پر حقیقی طور پر گزارا گیا وقت (انتظار کے بغیر) | μs / ms |
| Real Time | میتھڈ میں داخلے سے اخراج تک حقیقی وقت | μs / ms |
Traceview اسپریڈشیٹ یا چارٹنگ میں مزید تجزیہ کے لیے CSV فارمیٹ میں نشانات برآمد کرنے کی اجازت دیتا ہے۔ Android Studio میں، آپ ٹائم لائن کے منتخب حصے کو تصویر کے طور پر کاپی کر سکتے ہیں — بگ رپورٹس یا دستاویزات میں داخل کرنے کے لیے۔ CI/CD کے لیے، cmdline-tools یوٹیلیٹی کے ذریعے Perfetto فارمیٹ میں برآمد دستیاب ہے۔
پروفائلنگ Traceview کے ذریعے دو طریقوں سے دستیاب ہے: لائیو کیپچر کے ساتھ Android Profiler کے ذریعے اور پروگرامیٹک Debug API کالز کے ذریعے۔ پہلا طریقہ عارضی تجزیہ کے لیے آسان ہے، دوسرا دوبارہ پیدا ہونے والے کارکردگی ٹیسٹ کے لیے۔
Android Studio میں، Profiler ٹیب (View → Tool Windows → Profiler) کھولیں، اپنا ڈیوائس اور ایپلیکیشن پروسیس منتخب کریں۔ CPU سیگمنٹ پر کلک کریں، پھر “Trace Java Methods” موڈ منتخب کریں اور Record پر کلک کریں۔ ایپلیکیشن کے ساتھ تعامل کے بعد، Stop پر کلک کریں — Traceview خود بخود ریکارڈ شدہ ٹریس کھول دے گا۔ ڈیفالٹ ریکارڈنگ کی مدت 30 سیکنڈ تک محدود ہے، لیکن پروفائلر کی ترتیبات میں حد تبدیل کی جا سکتی ہے۔
کوڈ کے کسی مخصوص حصے کی درست پروفائلنگ کے لیے، Debug.startMethodTracing اور Debug.stopMethodTracing استعمال کریں۔ فائل context.getExternalFilesDir(null) کے ذریعے لوٹائے گئے راستے پر ایپلیکیشن کی بیرونی اسٹوریج میں محفوظ ہوتی ہے۔ مکمل ہونے کے بعد، Android Studio Device Explorer کے ذریعے .trace فائل کو اپنے کمپیوٹر میں منتقل کریں، پھر Android Studio میں File → Open کے ذریعے کھولیں۔
Debug.startMethodTracing(
"heavy_computation",
Debug.TRACE_COUNT_ALLOCS
)
processLargeDataset()
Debug.stopMethodTracing()
Debug.startMethodTracing تین پیرامیٹر لیتا ہے: فائل کا نام (بغیر ایکسٹینشن)، زیادہ سے زیادہ بفر سائز (ڈیفالٹ 8 MB) اور فلیگ۔ TRACE_COUNT_ALLOCS فلیگ آبجیکٹ مختص کی گنتی شامل کرتا ہے — میموری لیک تلاش کرنے کے لیے مفید۔ Traceview مقامی کوڈ کی پروفائلنگ کے لیے موزوں نہیں ہے — SimplePerf یا Perfetto استعمال کریں۔ طویل ٹیسٹ (30 سیکنڈ سے زیادہ) کے لیے، maxSize پیرامیٹر کے ذریعے بفر کو 64–128 MB تک بڑھانے کی سفارش کی جاتی ہے۔
Traceview ٹائم لائن دو پینلز پر مشتمل ہے: رنگین کال مستطیلوں کے ساتھ اوپر والا ٹائم لائن پینل اور شماریاتی جدول کے ساتھ نیچے والا پروفائل پینل۔ ٹائم لائن پینل بائیں سے دائیں تھریڈ کے عملدرآمد کو دکھاتا ہے، جہاں ہر مستطیل ایک واحد میتھڈ کال ہے۔ مستطیل کے رنگ میتھڈ کی قسم کے مطابق کوڈ کیے گئے ہیں: Android سسٹم کالز (سبز)، ایپلیکیشن میتھڈز (نیلا)، لائبریری کالز (نارنجی)۔
پروفائل پینل میں، ہر قطار Inclusive Time، Exclusive Time، Calls + Recur اور CPU Time کے کالموں کے ساتھ ایک میتھڈ ہے۔ Inclusive Time (نزولی) کے مطابق جدول کو ترتیب دیں تاکہ پہلے وہ میتھڈز دیکھیں جنہوں نے سب سے زیادہ کل وقت لیا۔ اگر زیادہ Inclusive Time والے میتھڈ کا Exclusive Time کم ہے — مسئلہ اس کی چائلڈ کالز میں ہے اور آپ کو درخت کو پھیلانے کی ضرورت ہے۔ مثال کے طور پر، ListView.getView میں تصویر لوڈ کرنے کی کالز کی وجہ سے زیادہ Inclusive Time ہو سکتا ہے۔
غیر معمولی طور پر زیادہ Real Time لیکن کم CPU Time والے میتھڈز تلاش کریں — یہ بلاکنگ (I/O انتظار، نیٹ ورک آپریشن، لاک مسابقت) کی نشاندہی کرتا ہے۔ زیادہ CPU Time والے میتھڈز کو الگورتھم کی اصلاح کی ضرورت ہوتی ہے۔ UI تھریڈ کے لیے، ہر میتھڈ 16 ms کے اندر مکمل ہونا چاہیے — اگر کوئی کال اس حد سے تجاوز کرتی ہے تو ایپلیکیشن ایک فریم کھو دیتی ہے اور صارف جھٹکا دیکھتا ہے۔ Google کی سفارشات کے مطابق، UI تھریڈ میں فی فریم تمام کالز کا کل وقت 8–10 ms سے زیادہ نہیں ہونا چاہیے، جو سسٹم آپریشنز کے لیے ایک مارجن چھوڑتا ہے۔
اگرچہ 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 ms سے زیادہ وقت لیتا ہے تو اسکرولنگ جھٹکے دار ہو جاتی ہے۔ 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()
}
چلانے کے بعد، Android Studio میں دونوں .trace فائلیں کھولیں اور پروفائل پینل میں Inclusive Time کا موازنہ کریں۔ اگر Glide اسی کام کے لیے 3x کم Inclusive Time دکھاتا ہے — یہ لائبریری کے انتخاب کے لیے ایک معروضی بنیاد ہے۔ Tony John (Glide ڈیولپر، 2023) کے مطابق، لائبریری کیشنگ اور تھریڈ پول استعمال کرتی ہے، جو بار بار لوڈ کرنے پر 40% تک فائدہ فراہم کرتی ہے۔
اکثر پوچھے گئے سوالات
Traceview Android Profiler کے اندر ٹریس تصور کا مرکز ہے۔ Profiler ریکارڈنگ شروع اور بند کرنے کے لیے اضافی UI فراہم کرتا ہے، جبکہ Traceview ٹائم لائن اور میتھڈ کے اعدادوشمار دکھانے کا کام کرتا ہے۔ دونوں ایک ہی .trace ڈیٹا فارمیٹ استعمال کرتے ہیں۔
ہاں، Traceview ایمولیٹر اور فزیکل Android آلات دونوں پر کام کرتا ہے۔ USB ڈیبگنگ فعال ہونی چاہیے اور ایپلیکیشن ڈیبگ ایبل موڈ میں بنائی جانی چاہیے۔ فزیکل آلات پر ڈیٹا زیادہ درست ہوتا ہے، کیونکہ ایمولیٹر ورچوئلائزیشن کی وجہ سے اوقات کو مسخ کر سکتا ہے۔
ڈیفالٹ زیادہ سے زیادہ سائز 8 MB ہے، لیکن اسے Debug.startMethodTracing میں maxSize پیرامیٹر کے ذریعے 256 MB تک بڑھایا جا سکتا ہے۔ طویل پروفائلنگ سیشنز کے لیے، Perfetto استعمال کریں، جس کی ٹریس سائز پر کوئی سخت حد نہیں ہے۔
Traceview Android Runtime (ART) کی سطح پر کام کرتا ہے اور صرف منظم Java اور Kotlin میتھڈز دیکھتا ہے۔ مقامی کوڈ (JNI کے ذریعے C/C++) کی پروفائلنگ کے لیے، SimplePerf یا FTrace کے ساتھ Perfetto استعمال کریں، جو کرنل کی سطح پر سسٹم کالز کیپچر کرتے ہیں۔
Android SDK سے dmtracedump یوٹیلیٹی استعمال کریں (platform-tools فولڈر)۔ یہ ٹائم لائن اور شماریاتی جدول کے ساتھ HTML رپورٹ تیار کرتا ہے۔ Windows پر: dmtracedump -h trace.trace > report.html۔ ایک متبادل Perfetto UI (ui.perfetto.dev) ہے، جو .trace فارمیٹ کی درآمد کو سپورٹ کرتا ہے۔
خلاصہ
ہم ایک موبائل ایپلیکیشن ٹرنکی تیار کریں گے
IT Sectr 2017 سے اسٹارٹ اپس اور کاروبار کے لیے iOS اور Android ایپلیکیشنز بناتا ہے۔ ہم آپ کو مشورہ دیں گے اور بہترین حل تجویز کریں گے۔
مزید پڑھیں