مفاهیم و پیادهسازی 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 را بررسی کنید.
نتایج محکزنی در «استودیو Android» برونداد میشود، همانطور که در شکل ۱ نشان داده شده است. اگر چند سنجه تعریف شده باشد، همه آنها در برونداد ترکیب میشوند.
TraceSectionMetric و
FrameTimingMetric.StartupTimingMetric
StartupTimingMetric سنجههای زمانبندی راهاندازی برنامه را با مقادیر زیر ضبط میکند:
timeToInitialDisplayMs: مدت زمانی که طول میکشد تا سیستم از زمان دریافت هدف راهاندازی، اولین فریم مقصد را ارائه دهدActivity.timeToFullDisplayMs: مدت زمانی که طول میکشد تا سیستم قصد راهاندازی را دریافت کند و برنامه بااستفاده از روشreportFullyDrawn()گزارش دهد که کاملاً ترسیم شده است. اندازهگیری با تکمیل پرداخت اولین فریم پساز—یا حاوی— فراخوانیreportFullyDrawn()متوقف میشود. این اندازهگیری ممکن است در Android 10 (سطح میانای برنامهسازی کاربردی ۲۹) و نسخههای قدیمیتر دردسترس نباشد.
StartupTimingMetric مقادیر حداقل، میانه، و حداکثر را از تکرارهای راهاندازی برونداد میکند. برای ارزیابی بهبود راهاندازی، همیشه روی مقادیر میانه تمرکز کنید، زیرا بهترین تخمین را از زمانهای راهاندازی معمول کاربر ارائه میدهند. برای
اطلاعات بیشتر درباره آنچه در زمان راهاندازی برنامه نقش دارد، به زمان راهاندازی
برنامه مراجعه کنید.
StartupTimingMetric نتیجه.FrameTimingMetric
FrameTimingMetric اطلاعات زمانبندی را از فریمهای تولیدشده توسط محک، مانند پیمایش یا پویانمایی، ضبط میکند و مقادیر زیر را خروجی میدهد:
-
frameOverrunMs: مدت زمانی که یک قاب معین از سررسید خود عقب میماند. اعداد مثبت نشاندهنده فریم حذفشده همراه با لرزش یا لکنت قابلمشاهده است. اعداد منفی نشان میدهند که یک فریم چقدر سریعتر نسبت به مهلت سختافزار زیرسیستم تکمیل شده است. توجه: این سنجه فقط در Android 12 (سطح میانای برنامهسازی کاربردی ۳۱) و نسخههای جدیدتر دردسترس است. frameDurationCpuMs: مدت زمانی که طول میکشد تا قاب در واحد پردازش مرکزی هم در رشته میانای کاربر و هم درRenderThreadتولید شود.
این اندازهگیریها در توزیع صدکهای ۵۰، ۹۰، ۹۵، و ۹۹ جمعآوری میشوند.
برای اطلاعات بیشتر درباره نحوه شناسایی و بهبود قابهای آهسته، به پرداز آهسته مراجعه کنید.
FrameTimingMetric نتیجه.TraceSectionMetric
TraceSectionMetric تعداد دفعاتی را که بخش ردیابی خاصی
رخ میدهد و مقدار مطلق زمانی را که برای اجرا نیاز دارد ضبط میکند. برای ردگیری زمان،
حداقل، میانه، و حداکثر زمان را برحسب میلیثانیه خروجی میدهد.
بخش ردیابی هدف یا با فراخوانی تابع
trace(sectionName) یا مرزهای بلوک سطح پایینتر بین
Trace.beginSection(sectionName) و Trace.endSection() یا انواع
ناهمگام آنها تعریف میشود. این ابزار همیشه اولین نمونه از بخش ردیابی ضبطشده
درطول اندازهگیری را انتخاب میکند. بهطور پیشفرض، فقط بخشهای ردیابی را از بستهتان خروجی میدهد؛
برای گنجاندن فرایندهای خارج از بستهتان، targetPackageOnly =
false را تنظیم کنید.
برای اطلاعات بیشتر درباره ردیابی، نمای کلی ردیابی سیستم و تعریف رویدادهای سفارشی را ببینید.
TraceSectionMetric نتیجه.توصیهشده برای شما
- توجه: وقتی جاوا اسکریپت خاموش باشد، نوشتار پیوند نمایش داده میشود
- ایجاد «نمایههای مبنا» {:#creating-profile-rules}
- نوشتن Macrobenchmark
- تجزیهوتحلیل و بهینهسازی راهاندازی برنامه {:#app-startup-analysis-optimization}