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 ডিবাগিং সক্ষম হতে হবে এবং অ্যাপ্লিকেশনটি debuggable মোডে তৈরি করা উচিত। শারীরিক ডিভাইসে ডেটা আরও নির্ভুল, কারণ এমুলেটর ভার্চুয়ালাইজেশনের কারণে সময়কে বিকৃত করতে পারে।
ডিফল্ট সর্বোচ্চ আকার 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 অ্যাপ্লিকেশন তৈরি করে। আমরা আপনাকে পরামর্শ দেব এবং সেরা সমাধান প্রস্তাব করব।
আরও পড়ুন