مفاهیم و پیادهسازی Jetpack Compose
معیارها نوع اصلی اطلاعات استخراج شده از بنچمارکهای شما هستند. آنها به صورت یک List به تابع measureRepeated ارسال میشوند که به شما امکان میدهد چندین معیار اندازهگیری شده را به طور همزمان مشخص کنید. حداقل یک نوع معیار برای اجرای بنچمارک مورد نیاز است.
قطعه کد زیر زمانبندی فریم و معیارهای بخش ردیابی سفارشی را ثبت میکند:
کاتلین
benchmarkRule.measureRepeated(
packageName = TARGET_PACKAGE,
metrics = listOf(
FrameTimingMetric(),
TraceSectionMetric("RV CreateView"),
TraceSectionMetric("RV OnBindView"),
),
iterations = 5,
// ...
)
جاوا
benchmarkRule.measureRepeated(
TARGET_PACKAGE, // packageName
Arrays.asList( // metrics
new StartupTimingMetric(),
new TraceSectionMetric("RV CreateView"),
new TraceSectionMetric("RV OnBindView"),
),
5, // Iterations
// ...
);
در این مثال، RV CreateView و RV OnBindView شناسههای بلوکهای قابل ردیابی هستند که در RecyclerView تعریف شدهاند. کد منبع برای متد createViewHolder() نمونهای از نحوه تعریف بلوکهای قابل ردیابی در کد خودتان است.
StartupTimingMetric ، TraceSectionMetric و FrameTimingMetric بعداً در این سند به تفصیل پوشش داده شدهاند. برای مشاهده لیست کامل معیارها، به زیرکلاسهای Metric مراجعه کنید.
نتایج بنچمارک همانطور که در شکل ۱ نشان داده شده است، به اندروید استودیو ارسال میشوند. اگر چندین معیار تعریف شده باشد، همه آنها در خروجی ترکیب میشوند.

TraceSectionMetric و FrameTimingMetric .معیار زمانبندی استارتاپ
StartupTimingMetric معیارهای زمانبندی راهاندازی برنامه را با مقادیر زیر ثبت میکند:
-
timeToInitialDisplayMs: مدت زمان از زمانی که سیستم یک intent راهاندازی (launch intent) دریافت میکند تا زمانی که اولین فریم ازActivityمقصد را رندر میکند. -
timeToFullDisplayMs: مدت زمان از زمانی که سیستم یک intent راهاندازی را دریافت میکند تا زمانی که برنامه با استفاده از متدreportFullyDrawn()به طور کامل ترسیم میشود. این اندازهگیری با تکمیل رندر اولین فریم پس از فراخوانیreportFullyDrawn()یا حاوی آن، متوقف میشود. این اندازهگیری ممکن است در اندروید ۱۰ (سطح API ۲۹) و قبل از آن در دسترس نباشد.
StartupTimingMetric مقادیر حداقل، میانه و حداکثر را از تکرارهای راهاندازی خروجی میدهد. برای ارزیابی بهبود راهاندازی، همیشه روی مقادیر میانه تمرکز کنید، زیرا آنها بهترین تخمین از زمانهای معمول راهاندازی کاربر را ارائه میدهند. برای اطلاعات بیشتر در مورد آنچه در زمان راهاندازی برنامه نقش دارد، به زمان راهاندازی برنامه مراجعه کنید.

StartupTimingMetric .فریم تایمینگ متریک
FrameTimingMetric اطلاعات زمانبندی را از فریمهای تولید شده توسط یک معیار، مانند پیمایش یا انیمیشن، ثبت میکند و مقادیر زیر را خروجی میدهد:
-
frameOverrunMs: مدت زمانی که یک فریم مشخص، مهلت خود را از دست میدهد. اعداد مثبت نشان دهندهی یک فریم از دست رفته همراه با پرش یا وقفهی قابل مشاهده هستند. اعداد منفی نشان دهندهی این هستند که یک فریم چقدر سریعتر نسبت به مهلت سختافزار زیرسیستم تکمیل شده است. توجه: این معیار فقط در اندروید ۱۲ (سطح API ۳۱) و بالاتر در دسترس است. -
frameDurationCpuMs: مدت زمانی که طول میکشد تا فریم روی CPU، هم روی نخ رابط کاربری و همRenderThreadتولید شود.
این اندازهگیریها در توزیعی از صدکهای ۵۰، ۹۰، ۹۵ و ۹۹ جمعآوری شدهاند.
برای اطلاعات بیشتر در مورد نحوه شناسایی و بهبود فریمهای کند، به رندرینگ کند مراجعه کنید.

FrameTimingMetric .ردیابی بخش متریک
TraceSectionMetric تعداد دفعاتی که یک بخش ردیابی خاص رخ میدهد و مقدار مطلق زمان لازم برای اجرا را ثبت میکند. برای ردیابی زمان، حداقل، میانه و حداکثر زمان را بر حسب میلیثانیه خروجی میدهد.
بخش ردیابی هدف یا توسط فراخوانی تابع trace(sectionName) یا مرزهای بلوک سطح پایینتر بین Trace.beginSection(sectionName) و Trace.endSection() یا انواع ناهمزمان آنها تعریف میشود. این تابع همیشه اولین نمونه از یک بخش ردیابی ثبت شده در طول اندازهگیری را انتخاب میکند. به طور پیشفرض فقط بخشهای ردیابی را از بسته شما خروجی میدهد. برای شامل کردن فرآیندهای خارج از بسته خود، targetPackageOnly = false قرار دهید.
برای اطلاعات بیشتر در مورد ردیابی، به «مروری بر ردیابی سیستم» و «تعریف رویدادهای سفارشی» مراجعه کنید.

TraceSectionMetric .برای شما توصیه میشود
- توجه: متن لینک زمانی نمایش داده میشود که جاوا اسکریپت غیرفعال باشد.
- ایجاد پروفایلهای پایه {:#creating-profile-rules}
- نوشتن یک ماکروبنچمارک
- تحلیل و بهینهسازی شروع به کار اپلیکیشن {:#app-startup-analysis-optimization}