ProfilingManager প্রোফাইল কোয়েরি করা, সাধারণ Perfetto প্রোফাইল কোয়েরি করার মতোই। তাই, কীভাবে প্রোফাইল কোয়েরি করতে হয় সেই বিষয়ে নির্দেশিকার জন্য PerfettoSQL ব্যবহার শুরু করা পর্যালোচনা করুন।
সাধারণ Perfetto ট্রেস ও ProfilingManager
ট্রেসের মধ্যে একটি গুরুত্বপূর্ণ পার্থক্য হল, ProfilingManager ট্রেস একটি ট্রেস রিড্যাক্টরের মাধ্যমে পাস করে। এই
রেড্যাক্টর আপনার অ্যাপের সাথে সম্পর্কিত নয় এমন অন্যান্য প্রসেস সম্পর্কে তথ্য
গোপনীয়তা সংক্রান্ত কারণে সরিয়ে দেয়।
Perfetto স্ট্যান্ডার্ড লাইব্রেরির কিছু কোয়েরি রিড্যাক্ট করা
ট্রেসে ব্যবহার করা যায় না। কারণ ProfilingManager শুধুমাত্র আপনার অ্যাপের জন্য প্রোফাইলিং ডেটা সংগ্রহ করে, অন্যান্য প্রসেসের জন্য নয়। ফলস্বরূপ, আপনি ProfilingManager-এর সাথে যে কোয়েরি ব্যবহার করতে পারবেন,
সেগুলি স্থানীয় Perfetto ব্যবহার করে রেকর্ড করা সম্পূর্ণ সিস্টেম প্রোফাইলের
তুলনায় ছোট সেট।
কোয়েরি করার স্পেস কমে গেলেও, আপনি এখনও Perfetto স্ট্যান্ডার্ড লাইব্রেরি থেকে অনেক PerfettoSQL কোয়েরি ও টেবিল যেমন আছে তেমন ব্যবহার করতে পারবেন, তাই আমরা আপনাকে সেগুলি ব্যবহার করে দেখতে উৎসাহিত করি।
আমরা আপনাকে Android ট্রেস বিশ্লেষণ করা পর্যালোচনা করারও সাজেশন দিই যাতে আপনি ব্যবহারের জন্য প্রস্তুত কোয়েরি খুঁজে পেতে পারেন যা কোনও পরিবর্তন ছাড়াই কার্যকর পারফর্ম্যান্স ডেটা প্রদান করে।
ProfilingManager-এর নমুনা কোয়েরি
কোয়েরি করার প্রসেস সহজ করতে, এই বিভাগে এমন কোয়েরির তালিকা দেওয়া হয়েছে যা
ProfilingManager-এর সাথে কাজ করে। আপনি এইসব কোয়েরি সরাসরি অথবা অন্যান্য কোয়েরি তৈরি করার জন্য
উদাহরণ হিসেবে ব্যবহার করতে পারবেন।
সবচেয়ে বেশি ডুপ্লিকেট করা স্লাইস খুঁজুন
এই কোয়েরি ট্রেসে বারবার দেখানো স্লাইস খুঁজে বের করে এবং সেগুলি কত ঘন ঘন দেখানো হয়েছে তার ভিত্তিতে সাজায়, সবচেয়ে বেশি ডুপ্লিকেট হওয়া স্লাইস প্রথমে দেখায়।
ট্রেসে অপ্রয়োজনীয় কাজ খুঁজে পাওয়ার একটি সাধারণ উপায় হল ডুপ্লিকেট কাজ খুঁজে বের করা।
-- You only need to call this once in the session to create the function
DROP TABLE IF EXISTS find_duplicates;
CREATE PERFETTO FUNCTION find_duplicates(pattern STRING) RETURNS
TABLE(name STRING, count_slice LONG) AS SELECT name, COUNT(dur) as count_slice FROM slice WHERE name GLOB $pattern GROUP BY name HAVING COUNT(name) >= 2 ORDER BY count_slice DESC;
-- Subsequent calls can just use the function to find dupes
SELECT * FROM find_duplicates('*Text*')
জ্যাঙ্ক কোয়েরি
স্লো ফ্রেম খুঁজুন
এই কোয়েরি এমন ফ্রেম খুঁজে বের করে যেখানে আপনার অ্যাপ ফ্রেম তৈরি করতে অনেক বেশি সময় নেয়,
ধরে নেওয়া হয় যে প্রত্যাশিত ফ্রেম রেট হল ৬০ Hz (১৬.৬ মিলি সেকেন্ড)। Perfetto টেবিলে স্লাইস ডিউরেশন ন্যানোসেকেন্ডে স্টোর করা হয় বলে dur-এর মান
১৬,৬৬০,০০০ হিসেবে সেট করা হয়।
INCLUDE PERFETTO module android.frames.timeline;
SELECT * FROM android_frames WHERE dur > 16660000;
জ্যাঙ্ক-ঘটিত ফ্রেম খুঁজুন
INCLUDE PERFETTO module android.frames.timeline;
SELECT * FROM actual_frame_timeline_slice WHERE jank_type = 'App Deadline Missed';
এই কোয়েরিটি ট্রেসে জ্যাঙ্ক হওয়া লোকেশন খুঁজে পেতে সাহায্য করে কারণ অ্যাপটি ফ্রেম তৈরি করতে অনেক বেশি সময় নেয়। এর অর্থ হল, UI থ্রেড ফ্রেম জেনারেট করতে পারেনি। অত্যন্ত গুরুতর পরিস্থিতিতে, এটি ANR-এর আগে ঘটতে পারে।
সবচেয়ে বেশি ডুপ্লিকেট অবজেক্ট খুঁজুন
এছাড়াও, আরও জটিল মেমরি বিশ্লেষণ করতে, আপনি মেমরি-সম্পর্কিত প্রোফাইল, যেমন হিপ ডাম্প কোয়েরি করতে পারেন।
INCLUDE PERFETTO MODULE android.memory.heap_graph.heap_graph_class_aggregation;
SELECT * FROM android_heap_graph_class_aggregation WHERE obj_count >= 2
ORDER BY obj_count DESC LIMIT 100
এই কোয়েরি ১০০টি সবচেয়ে বেশি ডুপ্লিকেট করা অবজেক্ট রিটার্ন করে। একাধিকবার ইনস্ট্যানশিয়েট করা হয়েছে এমন অবজেক্ট খুঁজে পেতে এটি আপনাকে সাহায্য করতে পারে, যা সেগুলিকে ক্যাশে করার সুযোগ প্রকাশ করতে পারে অথবা অনাকাঙ্ক্ষিত ডুপ্লিকেট শনাক্ত করতে পারে।
কোল্ড স্টার্টআপ লেটেন্সি
এছাড়াও, আপনি স্টার্ট-আপের ব্যাপারে কোয়েরি করতে পারেন। এই বিভাগে ট্রেসে কোল্ড স্টার্টআপ টাইম অনুমান করার জন্য আরও বিস্তারিত কোয়েরি প্রদান করা হয়েছে।
-- This function finds slices that match the given GLOB $pattern
CREATE OR REPLACE FUNCTION find_slices(pattern STRING) RETURNS
TABLE (name STRING, ts LONG, dur LONG) AS
SELECT name,ts,dur FROM slice WHERE name GLOB $pattern;
-- This function generates a slice that starts at $startSlicePattern and finishes at the slice matched by $endSlicePattern. If $inclusive is true, then the end slice dur will be added, otherwise, the end slice start time will be used.
CREATE OR REPLACE PERFETTO FUNCTION generate_start_to_end_slices(startSlicePattern STRING, endSlicePattern STRING, inclusive BOOL) RETURNS
TABLE(name STRING, ts LONG, dur LONG) AS
SELECT name, ts, MIN(startToEndDur) as dur
FROM
(SELECT S.name as name, S.ts as ts, E.ts + IIF($inclusive, E.dur, 0) - S.ts as startToEndDur
FROM find_slices($startSlicePattern) as S CROSS JOIN find_slices($endSlicePattern) as E
WHERE startToEndDur > 0)
GROUP BY name, ts;
-- Using these functions we can estimate cold startup time by generating a slice between bindApplication and first frame.
SELECT * from generate_start_to_end_slices('bindApplication','*Choreographer#doFrame [0-9]*', true)
এই কোয়েরি এমন একটি স্লাইস তৈরি করে যা দুটি স্লাইসের মধ্যেকার সময়কে দেখায় যেগুলি
স্টার্ট-আপ সময়কে নির্ধারণ করে: bindApplication (সাধারণত কোল্ড অ্যাপ লঞ্চের
শুরুতে পাওয়া যায়) এবং প্রথম Choreographer#doFrame স্লাইস (প্রথম
জেনারেট করা ফ্রেম)। এই মেট্রিক কোল্ড স্টার্টআপ TTFF (প্রথম ফ্রেমের সময়)
কার্যকরভাবে অনুমান করে।