میکرو بنچمارک

کتابخانه Microbenchmark Jetpack به شما این امکان را می دهد که کد بومی اندروید خود - Kotlin یا Java - را از داخل Android Studio محک بزنید. این کتابخانه گرم کردن را مدیریت می کند، عملکرد کد و تعداد تخصیص شما را اندازه گیری می کند، و نتایج محک زدن را برای کنسول Android Studio و یک فایل JSON با جزئیات بیشتر خروجی می دهد.

توصیه می کنیم قبل از نوشتن یک معیار ، کد خود را نمایه کنید . این به شما کمک می کند تا عملیات گران قیمتی را پیدا کنید که ارزش بهینه سازی را دارند. همچنین می‌تواند با نشان دادن اتفاقاتی که در حین اجرا اتفاق می‌افتد، نشان دهد که چرا عملکردها کند هستند، مانند اجرای روی رشته‌ای با اولویت پایین، خوابیدن به دلیل دسترسی به دیسک، یا فراخوانی غیرمنتظره یک تابع گران قیمت، مانند رمزگشایی بیت مپ.

میکروبنچمارک‌ها برای کارهای CPU که بارها در برنامه شما اجرا می‌شوند بسیار مفید هستند، همچنین به عنوان مسیرهای کد داغ شناخته می‌شوند. نمونه‌های خوب عبارتند از پیمایش RecyclerView با نمایش یک آیتم در یک زمان، تبدیل یا پردازش داده‌ها و سایر کدهایی که به طور مکرر مورد استفاده قرار می‌گیرند.

اندازه گیری انواع دیگر کد با کتابخانه Microbenchmark دشوارتر است. از آنجایی که بنچمارک ها در یک حلقه اجرا می شوند، هر کدی که به طور مکرر اجرا نمی شود یا زمانی که چندین بار فراخوانی می شود عملکرد متفاوتی دارد، ممکن است برای محک زدن مناسب نباشد.

برای یادگیری نحوه استفاده از کتابخانه در محیط یکپارچه سازی پیوسته (CI)، به اجرای معیارها در یکپارچگی مداوم مراجعه کنید.

از اندازه گیری کش خودداری کنید

سعی کنید از اندازه گیری فقط حافظه پنهان خودداری کنید. به عنوان مثال، معیار طرح بندی یک نمای سفارشی ممکن است فقط عملکرد کش طرح بندی را اندازه گیری کند. برای جلوگیری از این امر، می توانید پارامترهای طرح بندی مختلفی را در هر حلقه ارسال کنید. در موارد دیگر، مانند اندازه گیری عملکرد سیستم فایل، ممکن است این کار دشوار باشد زیرا سیستم عامل سیستم فایل را در حالی که در یک حلقه است ذخیره می کند.

معیارهای ثابتی را بدست آورید

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

ساعت های قفل (نیاز به دستگاه روت شده)

قفل کردن ساعت ها بهترین راه برای دستیابی به عملکرد پایدار است. این کمک می کند تا اطمینان حاصل شود که ساعت ها هرگز به اندازه ای بالا نمی روند که دستگاه را گرم کنند، یا اگر معیاری به طور کامل از CPU استفاده نمی کند، پایین نمی آید. می توان آن را با یک کار Gradle ( gradlew lockClocks ) یا به صورت دستی در CI اعمال کرد. در حالی که این بهترین راه برای اطمینان از عملکرد پایدار است، به دلیل نیاز به یک دستگاه مجهز به اندروید روت شده، در اکثر دستگاه‌ها پشتیبانی نمی‌شود.

حالت عملکرد پایدار

Window.setSustainedPerformanceMode() یک ویژگی است که توسط دستگاه‌هایی پشتیبانی می‌شود که به برنامه اجازه می‌دهد حداکثر فرکانس CPU کمتری را انتخاب کند. هنگام اجرا بر روی دستگاه‌های پشتیبانی‌شده، کتابخانه Microbenchmark از ترکیبی از این API و راه‌اندازی فعالیت‌های خود استفاده می‌کند تا هم از انقباض حرارتی جلوگیری کند و هم نتایج را تثبیت کند.

این ویژگی به طور پیش فرض توسط testInstrumentationRunner تنظیم شده توسط افزونه Android Gradle فعال می شود. اگر می‌خواهید از یک runner سفارشی استفاده کنید، می‌توانید AndroidBenchmarkRunner را زیر کلاس قرار دهید و از آن به عنوان testInstrumentationRunner خود استفاده کنید.

دونده یک فعالیت غیرشفاف و تمام‌صفحه را راه‌اندازی می‌کند تا اطمینان حاصل کند که معیار در پیش‌زمینه و بدون طراحی برنامه دیگر اجرا می‌شود.

توقف اجرای خودکار

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

تدوین AOT

تثبیت میکروبنچمارک های پیچیده ممکن است زمان زیادی طول بکشد و تشخیص تثبیت را بسیار دشوار می کند. از آنجایی که اندازه‌گیری ثابت و سرعت تکرار سریع اولویت‌های اصلی هستند، افزونه androidx.benchmark apk microbenchmark شما را به‌طور پیش‌فرض، مشابه CompilationMode.Full در Macrobenchmarks، به‌طور کامل جمع‌آوری می‌کند. این رفتار به Benchmark 1.3.0-beta01+ و Android Gradle Plugin 8.4.0+ نیاز دارد. می توانید با تنظیم androidx.benchmark.forceaotcompilation=false در فایل gradle.properties خود از این رفتار انصراف دهید.

نمونه ها

نمونه های زیر را در مخزن GitHub مشاهده کنید:

منابع اضافی

بازخورد ارائه دهید

برای گزارش مشکلات یا ارسال درخواست‌های ویژگی هنگام استفاده از معیار، به ردیاب مشکلات عمومی مراجعه کنید.

{% کلمه به کلمه %} {% آخر کلمه %} {% کلمه به کلمه %} {% آخر کلمه %}