معیارها نوع اصلی اطلاعات استخراج شده از معیارهای شما هستند. آنها بهعنوان یک 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
، و PowerMetric
، در ادامه این سند به تفصیل توضیح داده شده است.
نتایج بنچمارک همانطور که در شکل 1 نشان داده شده است به Android Studio خروجی می شود. اگر چندین معیار تعریف شده باشد، همه آنها در خروجی ترکیب می شوند.
![نتایج TraceSectionMetric و FrameTimingMetric.](https://developer.android.com/static/topic/performance/images/benchmark_images/macrobenchmark_results_frames_tracing.png?authuser=0&hl=fa)
TraceSectionMetric
و FrameTimingMetric
.StartupTimingMetric
StartupTimingMetric
معیارهای زمان بندی راه اندازی برنامه را با مقادیر زیر ثبت می کند:
-
timeToInitialDisplayMs
: مدت زمانی از زمانی که سیستم قصد راه اندازی را دریافت می کند تا زمانی که اولین فریم ازActivity
مقصد را ارائه می دهد. -
timeToFullDisplayMs
: مدت زمانی است که سیستم قصد راه اندازی را دریافت می کند تا زمانی که برنامه به طور کامل با استفاده از متدreportFullyDrawn()
رسم شده است. اندازهگیری در پایان رندر کردن اولین فریم پس از فراخوانیreportFullyDrawn()
یا حاوی آن متوقف میشود. این اندازهگیری ممکن است در Android 10 (سطح API 29) و قبل از آن در دسترس نباشد.
StartupTimingMetric
مقادیر حداقل، میانه و حداکثر را از تکرارهای راه اندازی خروجی می دهد. برای ارزیابی بهبود استارتآپ، باید روی مقادیر متوسط تمرکز کنید، زیرا آنها بهترین تخمین را از زمان معمول راهاندازی ارائه میدهند. برای اطلاعات بیشتر در مورد آنچه که در زمان راهاندازی برنامه نقش دارد، به زمان راهاندازی برنامه مراجعه کنید.
![نتایج StartupTimingMetric](https://developer.android.com/static/topic/performance/images/benchmark_images/macrobenchmark_results_fully_drawn_startup.png?authuser=0&hl=fa)
StartupTimingMetric
.FrameTimingMetric
FrameTimingMetric
اطلاعات زمانبندی را از فریمهای تولید شده توسط یک معیار، مانند پیمایش یا انیمیشن میگیرد و مقادیر زیر را خروجی میدهد:
-
frameOverrunMs
: مدت زمانی است که یک فریم معین ضرب الاجل خود را از دست می دهد. اعداد مثبت نشان دهنده افت فریم و ژانک یا لکنت قابل مشاهده است. اعداد منفی نشان می دهد که سرعت یک فریم چقدر بیشتر از ضرب الاجل است. توجه: این فقط در Android 12 (سطح API 31) و بالاتر در دسترس است. -
frameDurationCpuMs
: مدت زمانی که فریم طول می کشد تا بر روی CPU در رشته UI وRenderThread
تولید شود.
این اندازه گیری ها در توزیع صدک 50، 90، 95 و 99 جمع آوری شده است.
برای اطلاعات بیشتر در مورد نحوه شناسایی و بهبود فریم های آهسته، به رندر آهسته مراجعه کنید.
![نتایج FrameTimingMetric](https://developer.android.com/static/topic/performance/images/benchmark_images/macrobenchmark_results_frames.png?authuser=0&hl=fa)
FrameTimingMetric
.TraceSectionMetric
TraceSectionMetric
تعداد دفعاتی که بخش ردیابی مطابق با sectionName
ارائه شده رخ می دهد و مدت زمانی که طول می کشد را ثبت می کند. برای زمان، حداقل، میانه و حداکثر زمان ها را بر حسب میلی ثانیه خروجی می دهد. بخش trace یا با فراخوانی تابع trace(sectionName)
یا کد بین Trace.beginSection(sectionName)
و Trace.endSection()
یا انواع غیر همگام آنها تعریف می شود. همیشه اولین نمونه از بخش ردیابی گرفته شده در طول اندازه گیری را انتخاب می کند. به طور پیش فرض تنها بخش های ردیابی را از بسته شما خروجی می دهد. برای گنجاندن فرآیندهای خارج از بسته خود، targetPackageOnly = false
را تنظیم کنید.
برای اطلاعات بیشتر درباره ردیابی، به نمای کلی ردیابی سیستم و تعریف رویدادهای سفارشی مراجعه کنید.
![TraceSectionMetric](https://developer.android.com/static/topic/performance/images/benchmark_images/macrobenchmark_results_tracing.png?authuser=0&hl=fa)
TraceSectionMetric
.پاور متریک
PowerMetric
تغییر در توان یا انرژی را در طول مدت آزمایش شما برای دسته های توان ارائه شده ثبت می کند. هر دسته انتخاب شده به اجزای فرعی قابل اندازه گیری خود تقسیم می شود و دسته های انتخاب نشده به متریک "انتخاب نشده" اضافه می شوند.
این معیارها مصرف کل سیستم را اندازهگیری میکنند، نه مصرف را بر اساس هر برنامه، و به Pixel 6، Pixel 6 Pro و دستگاههای بعدی محدود میشوند:
-
power<category>Uw
: میزان توان مصرفی در طول مدت آزمایش شما در این دسته. -
energy<category>Uws
: مقدار انرژی منتقل شده در واحد زمان برای مدت زمان آزمون شما در این دسته.
دسته بندی ها شامل موارد زیر است:
-
CPU
-
DISPLAY
-
GPU
-
GPS
-
MEMORY
-
MACHINE_LEARNING
-
NETWORK
-
UNCATEGORIZED
در برخی از دستهها، مانند CPU
، ممکن است جدا کردن کارهای انجام شده توسط سایر فرآیندها از کارهای انجام شده توسط برنامه شخصی شما دشوار باشد. برای به حداقل رساندن تداخل، برنامه ها و حساب های غیر ضروری را حذف یا محدود کنید.
![نتایج PowerMetric](https://developer.android.com/static/topic/performance/images/benchmark_images/macrobenchmark_results_power.png?authuser=0&hl=fa)
PowerMetric
.برای شما توصیه می شود
- توجه: وقتی جاوا اسکریپت خاموش است، متن پیوند نمایش داده می شود
- ایجاد نمایه های پایه {:#creating-profile-rules}
- نوشتن یک ماکرو بنچمارک
- تحلیل و بهینه سازی راه اندازی اپلیکیشن {:#app-startup-analysis-optimization}