نمایه‌های پُرسمان با PerfettoSQL

می‌توانید نمایه‌های ProfilingManager را بااستفاده از PerfettoSQL و پیمانه‌های کتابخانه استاندارد Perfetto پُرسمان کنید. چون ProfilingManager ردگیری‌های سیستم را ویرایش می‌کند تا فقط داده‌های پردازش برنامه‌تان را دربرگیرد، پُرسمان‌های کتابخانه استاندارد سراسری سیستم که به پردازش‌های دیگر وابسته است پشتیبانی نمی‌شود. بااین‌حال، اکثر پُرسمان‌های با گستره برنامه و ماژول‌های کتابخانه استاندارد بدون اصلاح کار می‌کنند. برای پُرسمان‌های آماده استفاده بیشتر، تحلیل ردگیری‌های Android را ببینید.

پُرسمان‌های نمونه ProfilingManager

از پُرسمان‌های نمونه زیر مستقیماً یا به‌عنوان الگو برای تجزیه‌وتحلیل PerfettoSQL خودتان استفاده کنید.

پیدا کردن تکراری‌ترین برش‌ها

بخش‌های تکراری اغلب نشان‌دهنده کار زائد است. برای جزئیات درباره نحو تابع، تعریف توابع در PerfettoSQL را ببینید. پُرسمان زیر یک تابع PerfettoSQL قابل‌استفاده مجدد را تعریف می‌کند که برش‌های منطبق با الگوی GLOB را پیدا می‌کند و آن‌ها را براساس بسامد مرتب می‌کند:

-- You only need to call this once in the session to create or update the function
CREATE OR REPLACE 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

از پُرسمان‌های زیر برای شناسایی فریم‌های کند یا نامنظم در ردگیری سیستم استفاده کنید.

پیدا کردن قاب‌های آهسته

این پُرسمان قاب‌هایی را پیدا می‌کند که پرداز آن‌ها بیشتر از ۱۶٫۶ میلی‌ثانیه (۶۰ هرتز) طول می‌کشد. چون Perfetto مدت زمان برش‌ها را برحسب نانوثانیه ذخیره می‌کند، dur با 16660000 مقایسه می‌شود:

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 GLOB '*App Deadline Missed*';

یافتن تکراری‌ترین اشیا

در رونوشت پشته جاوا، این پُرسمان ۱۰۰ کلاس برتر را با دو یا چند نمونه برمی‌گرداند تا به شما کمک کند موارد تکراری ناخواسته یا فرصت‌های ذخیره‌سازی موقت را شناسایی کنید:

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

تأخیر راه‌اندازی سرد

این پُرسمان زمان راه‌اندازی سرد تا اولین قاب (TTFF) را با اندازه‌گیری مدت‌زمان بین bindApplication و اولین برش Choreographer#doFrame تخمین می‌زند:

-- This function finds slices that match the given GLOB $pattern
CREATE OR REPLACE PERFETTO 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)