پرسوجو کردن نمایههای ProfilingManager مشابه پرسوجو کردن نمایههای معمولی Perfetto است. بنابراین، برای راهنمایی درباره نحوه پُرسمان کردن نمایهها، شروع به کار با PerfettoSQL را مرور کنید.
تفاوت مهم بین ردگیریهای Perfetto معمولی و ردگیریهای ProfilingManager این است که ردگیریهای ProfilingManager از یک ویرایشگر ردگیری عبور میکنند. این
ویرایشگر اطلاعات مربوط به سایر فرایندهای غیرمرتبط با برنامهتان را بهدلایل
حفظ حریم خصوصی حذف میکند.
برخیاز پُرسمانهای کتابخانه استاندارد Perfetto در ردگیریهای ویرایششده قابلاستفاده نیستند. دلیلش این است که ProfilingManager فقط دادههای نمایهسازی را برای برنامه شما جمعآوری میکند، نه فرایندهای دیگر. درنتیجه، پُرسمانهایی که میتوانید با
ProfilingManager استفاده کنید مجموعه کوچکتری نسبت به پُرسمانهای نمایههای کامل سیستم است که بااستفاده از Perfetto محلی ضبط شدهاند.
باوجود کاهش فضای پُرسمان، همچنان میتوانید از بسیاری از پُرسمانها و جدولهای PerfettoSQL از کتابخانه استاندارد Perfetto بههمان صورت استفاده کنید، بنابراین شما را تشویق میکنیم آنها را امتحان کنید.
همچنین توصیه میکنیم تجزیهوتحلیل ردگیریهای 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*')
پُرسمانهای Jank
پیدا کردن قابهای آهسته
این پُرسمان قابهایی را پیدا میکند که در آنها برنامه شما برای تولید قاب بیشازحد طول میکشد،
با فرض اینکه نرخ فریم موردانتظار ۶۰ هرتز (۱۶٫۶ میلیثانیه) باشد. dur روی ۱۶٬۶۶۰٬۰۰۰ تنظیم شده است زیرا مدتزمان برشها در جدولهای Perfetto برحسب نانوثانیه ذخیره میشود.
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';
این پُرسمان برای پیدا کردن مکانهایی که در ردگیری دچار لرزش میشوند مفید است زیرا برنامه برای تولید فریم زمان زیادی صرف میکند. این یعنی رشته میانای کاربر نتوانسته است فریم تولید کند. در شرایط حاد، این امر میتواند پیشاز 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 (زمان تا اولین فریم) راهاندازی سرد را برآورد میکند.