يمكنك تنفيذ مقاييس الأداء في أداة "التكامل المستمر" (CI) لتتبُّع الأداء بمرور الوقت ومعرفة أي تراجع في الأداء أو التحسينات قبل إصدار تطبيقك. توفر هذه الصفحة معلومات أساسية حول قياس الأداء في CI.
قبل البدء في قياس الأداء في CI، ضع في اعتبارك كيف يختلف تسجيل النتائج وتقييمها عن الاختبارات العادية.
نتائج ضبابية
وعلى الرغم من أنّ مقاييس الأداء عبارة عن اختبارات مدمَجة، فإنّ النتائج ليست مجرد اجتياز أو إخفاق. توفر المعايير قياسات التوقيت للجهاز المحدد الذي تعمل عليه. يتيح لك الرسم البياني للنتائج بمرور الوقت مراقبة التغير ورصد التشويش في نظام القياس.
استخدام الأجهزة الحقيقية
تشغيل مقاييس الأداء على أجهزة Android الفعلية. وعلى الرغم من إمكانية تشغيل هذه الألعاب باستخدام مُحاكيات، ننصح بعدم استخدامها كثيرًا لأنّها لا تمثّل تجربة مستخدم واقعية، بل توفّر أرقامًا مرتبطة بنظام التشغيل المُضيف وإمكانات الأجهزة. ننصحك باستخدام أجهزة حقيقية أو خدمة تتيح لك إجراء الاختبارات على أجهزة حقيقية، مثل Firebase Test Lab.
تنفيذ المعايير
قد يكون تنفيذ مقاييس الأداء كجزء من مسار CI مختلفًا عن تشغيلها محليًا من Android Studio. محليًا، تُجري عادةً اختبارات دمج
Android من خلال مهمة Gradle connectedCheck
واحدة. تعمل هذه المهمة تلقائيًا على إنشاء ملف APK واختبار ملف APK وإجراء الاختبارات على الأجهزة المتصلة بخادم CI. عند التشغيل في CI، يجب عادةً تقسيم هذا التدفق إلى
مراحل منفصلة.
زيادة التشويق
بالنسبة إلى مكتبة مقاييس الأداء المصغّرة، شغِّل مهمة Gradle
assemble[VariantName]AndroidTest
، التي تنشئ حزمة APK للاختبار تحتوي على
كل من رمز التطبيق والرمز الذي تم اختباره.
وبدلاً من ذلك، تطلب منك مكتبة مقاييس الأداء الكلي إنشاء حزمة APK مستهدَفة واختبار حزمة APK بشكل منفصل. لذلك، يمكنك تنفيذ مهام :app:assemble[VariantName]
و:macrobenchmark:assemble[VariantName]
Gradle.
التثبيت والتشغيل
يتم تنفيذ هذه الخطوات عادةً بدون الحاجة إلى تشغيل مهام Gradle. ملاحظة: قد يتم استخراجها استنادًا إلى ما إذا كنت تستخدم خدمة تتيح لك إجراء اختبارات على أجهزة حقيقية.
للتثبيت، استخدِم الأمر adb install
وحدِّد حزمة APK التجريبية
أو حزمة APK المستهدَفة.
شغِّل أمر أداة adb shell am
لتشغيل جميع مقاييس الأداء:
adb shell am instrument -w com.example.benchmark/androidx.benchmark.junit4.AndroidBenchmarkRunner
عند استخدام مكتبة مقاييس الأداء الفائق، استخدِم androidx.test.runner.AndroidJUnitRunner
العادي كعدّاء لأدوات قياس الأداء.
يمكنك تمرير وسيطات قياس حالة التطبيق نفسها كما في إعدادات Gradle
باستخدام الوسيطة -e
. للاطّلاع على جميع خيارات وسيطات قياس الأداء، يُرجى الاطّلاع على
وسيطات قياس الأداء المصغر أو
إضافة وسيطات قياس الأداء.
على سبيل المثال، يمكنك إعداد الوسيطة dryRunMode
لتشغيل مقاييس الأداء الصغرى كجزء من عملية التحقق من طلب السحب. من خلال تفعيل هذه العلامة، لا يتم تشغيل مقاييس الأداء المصغّرة إلا في حلقة واحدة، ما يتحقّق من عملها
بشكل صحيح ولكن لا يستغرق تنفيذها وقتًا طويلاً.
adb shell am instrument -w -e "androidx.benchmark.dryRunMode.enable" "true" com.example.benchmark/androidx.benchmark.junit4.AndroidBenchmarkRunner
لمزيد من المعلومات حول كيفية إجراء اختبارات الأدوات من سطر الأوامر، يُرجى الاطّلاع على إجراء الاختبارات باستخدام ADB
قفل الساعات
يوفّر المكوّن الإضافي MicroMetric Gradle الأمر ./gradlew lockClocks
لقفل ساعات وحدة المعالجة المركزية (CPU) للأجهزة المزوّدة بحق الوصول إلى الجذر. ويساعد ذلك في ضمان الاستقرار عند الوصول إلى الأجهزة الجذر، مثل إصدارات "userdebug". ويمكنك تكرار ذلك باستخدام نص أوامر lockClocks.sh
المتاح في مصدر المكتبة.
يمكنك إما تشغيل النص البرمجي مباشرةً من مضيف في Linux أو Mac، أو يمكنك الدفع إلى الجهاز باستخدام بعض أوامر adb:
adb push path/lockClocks.sh /data/local/tmp/lockClocks.sh adb shell /data/local/tmp/lockClocks.sh adb shell rm /data/local/tmp/lockClocks.sh
إذا شغّلت النص البرمجي لـ Shell مباشرةً على مضيف، يرسِل هذه الأوامر إلى جهاز متصل.
لمعرفة مزيد من المعلومات عن أهمية قفل ساعات وحدة المعالجة المركزية (CPU)، يمكنك الاطّلاع على كيفية الحصول على مقاييس أداء متّسقة.
جمع النتائج
تنتج مكتبات قياس الأداء عن القياسات بتنسيق
JSON، بالإضافة إلى آثار التحليل إلى دليل على
الجهاز الذي يعمل بنظام التشغيل Android بعد كل تشغيل لمقياس الأداء. تنتج مكتبة مقياس الأداء الفائق
ملفات تتبُّع أداء متعددة: ملف واحد لكل تكرار تم قياسه لكل حلقة MacrobenchmarkRule.measureRepeated
. ومع ذلك، ينشئ مقياس مقياس الأداء الصغرى ملف تتبُّع واحدًا فقط لجميع التكرارات لكل BenchmarkRule.measureRepeated
. يتم أيضًا إخراج ملفات تتبُّع تحديد المواصفات في هذا الدليل نفسه.
حفظ الملفات وتحديد موقعها
إذا نفَّذت مقاييس الأداء من خلال Gradle، سيتم نسخ هذه الملفات تلقائيًا إلى
دليل إخراج جهاز الكمبيوتر المضيف ضِمن
build/outputs/connected_android_test_additional_output/debugAndroidTest/connected/
.
في حال تنفيذ الأمر مباشرةً باستخدام الأمر adb
، عليك سحب الملفات يدويًا. بشكل تلقائي، يتم حفظ التقارير على الجهاز في دليل الوسائط
لوحدة التخزين الخارجية للتطبيق الذي تم اختباره. للتسهيل، تطبع المكتبة مسار
الملف إلى Logcat. وتجدر الإشارة إلى أن مجلد الإخراج قد يختلف حسب
إصدار Android الذي يتم تشغيل مقاييس الأداء عليه.
Benchmark: writing results to /storage/emulated/0/Android/media/com.example.macrobenchmark/com.example.macrobenchmark-benchmarkData.json
يمكنك أيضًا ضبط الموقع الذي يتم فيه حفظ تقارير قياس الأداء على
الجهاز باستخدام وسيطة قياس الأداء additionalTestOutputDir
. يجب أن يكون
هذا المجلد قابلاً للكتابة من خلال التطبيق.
adb shell am instrument -w -e additionalTestOutputDir /sdcard/Download/ com.example.benchmark/androidx.benchmark.junit4.AndroidBenchmarkRunner
على نظام التشغيل Android 10 (المستوى 29 لواجهة برمجة التطبيقات) والإصدارات الأحدث، يتم إجراء اختبارات تطبيقك في وضع الحماية للتخزين
تلقائيًا، ما يمنع تطبيقك من الوصول إلى الملفات خارج الدليل الخاص بالتطبيق. لتتمكن من الحفظ في دليل عام، مثل /sdcard/Download
، عليك اجتياز وسيطة الأدوات التالية:
-e no-isolated-storage true
عليك أيضًا السماح صراحةً بخيارات مساحة التخزين القديمة في بيان مقياس الأداء:
<application android:requestLegacyExternalStorage="true" ... >
لمزيد من المعلومات، يُرجى الاطّلاع على الإيقاف المؤقت لمساحة التخزين المُفصَّلة.
استرداد الملفات
لاسترداد الملفات التي تم إنشاؤها من الجهاز، استخدِم الأمر adb pull
الذي يسحب الملف المحدَّد إلى الدليل الحالي على المضيف:
adb pull /storage/emulated/0/Android/media/com.example.macrobenchmark/com.example.macrobenchmark-benchmarkData.json
لاسترداد كل benchmarkData
من مجلد محدد، راجع المقتطف التالي:
# The following command pulls all files ending in -benchmarkData.json from the directory
# hierarchy starting at the root /storage/emulated/0/Android.
adb shell find /sdcard/Download -name "*-benchmarkData.json" | tr -d '\r' | xargs -n1 adb pull
يتم حفظ ملفات التتبُّع (.trace
أو .perfetto-trace
) في المجلد نفسه الذي يتضمّن benchmarkData.json
، وبالتالي يمكنك جمعها بالطريقة نفسها.
مثال على بيانات قياس الأداء
تنشئ مكتبات مقاييس الأداء ملفات JSON تحتوي على معلومات عن الجهاز الذي كانت تُشغل مقاييس الأداء عليه ومقاييس الأداء الفعلية التي أجرتها. يمثل المقتطف التالي ملف JSON الذي تم إنشاؤه:
{
"context": {
"build": {
"brand": "google",
"device": "blueline",
"fingerprint": "google/blueline/blueline:12/SP1A.210812.015/7679548:user/release-keys",
"model": "Pixel 3",
"version": {
"sdk": 31
}
},
"cpuCoreCount": 8,
"cpuLocked": false,
"cpuMaxFreqHz": 2803200000,
"memTotalBytes": 3753299968,
"sustainedPerformanceModeEnabled": false
},
"benchmarks": [
{
"name": "startup",
"params": {},
"className": "com.example.macrobenchmark.startup.SampleStartupBenchmark",
"totalRunTimeNs": 4975598256,
"metrics": {
"timeToInitialDisplayMs": {
"minimum": 347.881076,
"maximum": 347.881076,
"median": 347.881076,
"runs": [
347.881076
]
}
},
"sampledMetrics": {},
"warmupIterations": 0,
"repeatIterations": 3,
"thermalThrottleSleepSeconds": 0
}
]
}
مراجع إضافية
- للحصول على إرشادات عن كيفية رصد تراجع الأداء، راجِع المقالة مكافحة الانحدار باستخدام مقاييس الأداء في CI.
- لمعرفة كيفية إعداد "إجراءات جيت هب" باستخدام مركز الاختبار الافتراضي لمنصة Firebase، يمكنك الاطّلاع على إعداد مقاييس أداء Jetpack ماكرو لخوارزمية CI.
أفلام مُقترَحة لك
- ملاحظة: يتم عرض نص الرابط عند إيقاف JavaScript.
- أفضل الممارسات لأداء SQLite
- إنشاء الملفات التجارية المرجعية وقياسها بدون استخدام مقاييس الأداء الكلية
- عمليات قفل تنشيط جزئية متوقفة