ضبط کردن سنجه‌های Macrobenchmark

مفاهیم و پیاده‌سازی 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.
شکل ۱. نتایج TraceSectionMetric و FrameTimingMetric.

StartupTimingMetric

StartupTimingMetric سنجه‌های زمان‌بندی راه‌اندازی برنامه را با مقادیر زیر ضبط می‌کند:

  • timeToInitialDisplayMs: مدت زمانی که طول می‌کشد تا سیستم از زمان دریافت هدف راه‌اندازی، اولین فریم مقصد را ارائه دهد Activity.
  • timeToFullDisplayMs: مدت زمانی که طول می‌کشد تا سیستم قصد راه‌اندازی را دریافت کند و برنامه بااستفاده از روش reportFullyDrawn() گزارش دهد که کاملاً ترسیم شده است. اندازه‌گیری با تکمیل پرداخت اولین فریم پس‌از—یا حاوی— فراخوانی reportFullyDrawn() متوقف می‌شود. این اندازه‌گیری ممکن است در Android 10 (سطح میانای برنامه‌سازی کاربردی ۲۹) و نسخه‌های قدیمی‌تر دردسترس نباشد.

StartupTimingMetric مقادیر حداقل، میانه، و حداکثر را از تکرارهای راه‌اندازی برونداد می‌کند. برای ارزیابی بهبود راه‌اندازی، همیشه روی مقادیر میانه تمرکز کنید، زیرا بهترین تخمین را از زمان‌های راه‌اندازی معمول کاربر ارائه می‌دهند. برای اطلاعات بیشتر درباره آنچه در زمان راه‌اندازی برنامه نقش دارد، به زمان راه‌اندازی برنامه مراجعه کنید.

نتایج StartupTimingMetric
شکل ۲. StartupTimingMetric نتیجه.

FrameTimingMetric

FrameTimingMetric اطلاعات زمان‌بندی را از فریم‌های تولیدشده توسط محک، مانند پیمایش یا پویانمایی، ضبط می‌کند و مقادیر زیر را خروجی می‌دهد:

  • ‫frameOverrunMs: مدت زمانی که یک قاب معین از سررسید خود عقب می‌ماند. اعداد مثبت نشان‌دهنده فریم حذف‌شده همراه با لرزش یا لکنت قابل‌مشاهده است. اعداد منفی نشان می‌دهند که یک فریم چقدر سریع‌تر نسبت به مهلت سخت‌افزار زیرسیستم تکمیل شده است. توجه: این سنجه فقط در Android 12 (سطح میانای برنامه‌سازی کاربردی ۳۱) و نسخه‌های جدیدتر دردسترس است.
  • frameDurationCpuMs: مدت زمانی که طول می‌کشد تا قاب در واحد پردازش مرکزی هم در رشته میانای کاربر و هم در RenderThread تولید شود.

این اندازه‌گیری‌ها در توزیع صدک‌های ۵۰، ۹۰، ۹۵، و ۹۹ جمع‌آوری می‌شوند.

برای اطلاعات بیشتر درباره نحوه شناسایی و بهبود قاب‌های آهسته، به پرداز آهسته مراجعه کنید.

نتایج FrameTimingMetric
شکل ۳. FrameTimingMetric نتیجه.

TraceSectionMetric

TraceSectionMetric تعداد دفعاتی را که بخش ردیابی خاصی رخ می‌دهد و مقدار مطلق زمانی را که برای اجرا نیاز دارد ضبط می‌کند. برای ردگیری زمان، حداقل، میانه، و حداکثر زمان را برحسب میلی‌ثانیه خروجی می‌دهد.

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

برای اطلاعات بیشتر درباره ردیابی، نمای کلی ردیابی سیستم و تعریف رویدادهای سفارشی را ببینید.

TraceSectionMetric
شکل ۴. TraceSectionMetric نتیجه.