এই পৃষ্ঠাটি দেখায় কিভাবে ProfilingManager API ব্যবহার করে একটি সিস্টেম ট্রেস রেকর্ড করতে হয়।
নির্ভরতা যোগ করুন
ProfilingManager API-এর সর্বোত্তম অভিজ্ঞতার জন্য, আপনার build.gradle.kts ফাইলে নিম্নলিখিত Jetpack লাইব্রেরিগুলি যোগ করুন।
কোটলিন
dependencies { implementation("androidx.tracing:tracing:1.3.0") implementation("androidx.core:core:1.17.0") }
খাঁজকাটা
dependencies { implementation 'androidx.tracing:tracing:1.3.0' implementation 'androidx.core:core:1.17.0' }
একটি সিস্টেম ট্রেস রেকর্ড করুন
প্রয়োজনীয় নির্ভরতা যোগ করার পরে, একটি সিস্টেম ট্রেস রেকর্ড করতে নিম্নলিখিত কোডটি ব্যবহার করুন। এই উদাহরণে একটি প্রোফাইলিং সেশন শুরু এবং পরিচালনা করার জন্য একটি Activity মধ্যে একটি মৌলিক সেটআপ দেখানো হয়েছে।
কোটলিন
@RequiresApi(Build.VERSION_CODES.VANILLA_ICE_CREAM) fun sampleRecordSystemTrace() { val mainExecutor: Executor = Dispatchers.IO.asExecutor() // Your choice of executor for the callback to occur on. val resultCallback = Consumer<ProfilingResult> { profilingResult -> if (profilingResult.errorCode == ProfilingResult.ERROR_NONE) { Log.d( "ProfileTest", "Received profiling result file=" + profilingResult.resultFilePath ) } else { Log.e( "ProfileTest", "Profiling failed errorcode=" + profilingResult.errorCode + " errormsg=" + profilingResult.errorMessage ) } } val stopSignal = CancellationSignal() val requestBuilder = SystemTraceRequestBuilder() requestBuilder.setCancellationSignal(stopSignal) requestBuilder.setTag("FOO") // Caller supplied tag for identification requestBuilder.setDurationMs(60000) requestBuilder.setBufferFillPolicy(BufferFillPolicy.RING_BUFFER) requestBuilder.setBufferSizeKb(20971520) requestProfiling(applicationContext, requestBuilder.build(), mainExecutor, resultCallback) // Wait some time for profiling to start. Trace.beginSection("MyApp:HeavyOperation") heavyOperation() Trace.endSection() // Once the interesting code section is profiled, stop profile stopSignal.cancel() } fun heavyOperation() { // Computations you want to profile }
জাভা
void heavyOperation() { // Computations you want to profile } void sampleRecordSystemTrace() { Executor mainExecutor = Executors.newSingleThreadExecutor(); Consumer<ProfilingResult> resultCallback = new Consumer<ProfilingResult>() { @Override public void accept(ProfilingResult profilingResult) { if (profilingResult.getErrorCode() == ProfilingResult.ERROR_NONE) { Log.d( "ProfileTest", "Received profiling result file=" + profilingResult.getResultFilePath()); } else { Log.e( "ProfileTest", "Profiling failed errorcode=" + profilingResult.getErrorCode() + " errormsg=" + profilingResult.getErrorMessage()); } } }; CancellationSignal stopSignal = new CancellationSignal(); SystemTraceRequestBuilder requestBuilder = new SystemTraceRequestBuilder(); requestBuilder.setCancellationSignal(stopSignal); requestBuilder.setTag("FOO"); requestBuilder.setDurationMs(60000); requestBuilder.setBufferFillPolicy(BufferFillPolicy.RING_BUFFER); requestBuilder.setBufferSizeKb(20971520); Profiling.requestProfiling(getApplicationContext(), requestBuilder.build(), mainExecutor, resultCallback); // Wait some time for profiling to start. Trace.beginSection("MyApp:HeavyOperation"); heavyOperation(); Trace.endSection(); // Once the interesting code section is profiled, stop profile stopSignal.cancel(); }
নমুনা কোডটি নিম্নলিখিত ধাপগুলি অনুসরণ করে প্রোফাইলিং সেশন সেট আপ এবং পরিচালনা করে:
এক্সিকিউটর সেট আপ করুন। প্রোফাইলিং ফলাফল প্রাপ্ত থ্রেডটি নির্ধারণ করার জন্য একটি
Executorতৈরি করুন। প্রোফাইলিং ব্যাকগ্রাউন্ডে ঘটে। একটি নন-UI থ্রেড এক্সিকিউটর ব্যবহার করলে অ্যাপ্লিকেশন নট রেসপন্ডিং (ANR) ত্রুটিগুলি প্রতিরোধ করতে সাহায্য করে যদি আপনি পরে কলব্যাকে আরও প্রক্রিয়াকরণ যোগ করেন।প্রোফাইলিং ফলাফল পরিচালনা করুন। একটি
Consumer<ProfilingResult>অবজেক্ট তৈরি করুন। সিস্টেমটি এই অবজেক্ট ব্যবহার করেProfilingManagerথেকে প্রোফাইলিং ফলাফল আপনার অ্যাপে ফেরত পাঠায়।প্রোফাইলিং রিকোয়েস্ট তৈরি করুন। আপনার প্রোফাইলিং সেশন সেট আপ করার জন্য একটি
SystemTraceRequestBuilderতৈরি করুন। এই বিল্ডার আপনাকেProfilingManagerট্রেস সেটিংস কাস্টমাইজ করতে দেয়। বিল্ডার কাস্টমাইজ করা ঐচ্ছিক; যদি আপনি না করেন, তাহলে সিস্টেম ডিফল্ট সেটিংস ব্যবহার করে।- একটি ট্যাগ সংজ্ঞায়িত করুন। ট্রেস নামের সাথে একটি ট্যাগ যুক্ত করতে
setTag()ব্যবহার করুন। এই ট্যাগটি আপনাকে ট্রেসটি সনাক্ত করতে সাহায্য করে। - ঐচ্ছিক: সময়কাল সেট করুন। মিলিসেকেন্ডে প্রোফাইল কতক্ষণ করতে হবে তা নির্দিষ্ট করতে
setDurationMs()ব্যবহার করুন। উদাহরণস্বরূপ,60000একটি 60-সেকেন্ডের ট্রেস সেট করে। যদিCancellationSignalএর আগে ট্রিগার না করা হয় তবে নির্দিষ্ট সময়কালের পরে ট্রেস স্বয়ংক্রিয়ভাবে শেষ হয়ে যায়। - একটি বাফার নীতি নির্বাচন করুন। ট্রেস ডেটা কীভাবে সংরক্ষণ করা হবে তা নির্ধারণ করতে
setBufferFillPolicy()ব্যবহার করুন।BufferFillPolicy.RING_BUFFERএর অর্থ হল যখন বাফারটি পূর্ণ থাকে, তখন নতুন ডেটা পুরনোতম ডেটা ওভাররাইট করে, সাম্প্রতিক কার্যকলাপের একটি ধারাবাহিক রেকর্ড রাখে। - একটি বাফার আকার নির্ধারণ করুন। ট্রেসিংয়ের জন্য একটি বাফার আকার নির্দিষ্ট করতে
setBufferSizeKb()ব্যবহার করুন যা আপনি আউটপুট ট্রেস ফাইলের আকার নিয়ন্ত্রণ করতে ব্যবহার করতে পারেন।
- একটি ট্যাগ সংজ্ঞায়িত করুন। ট্রেস নামের সাথে একটি ট্যাগ যুক্ত করতে
ঐচ্ছিক: সেশনের জীবনচক্র পরিচালনা করুন। একটি
CancellationSignalতৈরি করুন। এই অবজেক্টটি আপনাকে যখনই ইচ্ছা প্রোফাইলিং সেশন বন্ধ করতে দেয়, যার ফলে আপনি এর দৈর্ঘ্যের উপর সুনির্দিষ্ট নিয়ন্ত্রণ পেতে পারেন।ফলাফল শুরু করুন এবং গ্রহণ করুন। যখন আপনি
requestProfiling()কল করেন, তখনProfilingManagerব্যাকগ্রাউন্ডে একটি প্রোফাইলিং সেশন শুরু করে। প্রোফাইলিং সম্পন্ন হলে, এটি আপনারresultCallback#acceptপদ্ধতিতেProfilingResultপাঠায়। যদি প্রোফাইলিং সফলভাবে সম্পন্ন হয়, তাহলেProfilingResultProfilingResult#getResultFilePathমাধ্যমে আপনার ডিভাইসে ট্রেসটি কোথায় সংরক্ষণ করা হয়েছিল তা প্রদান করে। আপনি এই ফাইলটি প্রোগ্রাম্যাটিকভাবে পেতে পারেন অথবা, স্থানীয় প্রোফাইলিংয়ের জন্য, আপনার কম্পিউটার থেকেadb pull <trace_path>চালিয়ে পেতে পারেন।কাস্টম ট্রেস পয়েন্ট যোগ করুন। আপনি আপনার অ্যাপের কোডে কাস্টম ট্রেস পয়েন্ট যোগ করতে পারেন। পূর্ববর্তী কোড উদাহরণে,
MyApp:HeavyOperationনামে একটি ট্রেস স্লাইসTrace.beginSection()এবংTrace.endSection()ব্যবহার করে যোগ করা হয়েছে। এই কাস্টম স্লাইসটি জেনারেট করা প্রোফাইলে প্রদর্শিত হবে, যা আপনার অ্যাপের মধ্যে নির্দিষ্ট ক্রিয়াকলাপগুলিকে হাইলাইট করবে।