Sürekli Entegrasyon (CI) üzerinde karşılaştırmalar çalıştırarak veya performans regresyonlarını (ya da iyileştirmeleri) fark etmeden kullanıma hazır hale getirir. Bu sayfada, karşılaştırma hakkında temel bilgiler verilmektedir. CI'da mevcut.
CI'da karşılaştırma yapmaya başlamadan önce kaliteyi yakalama ve sonuçların değerlendirilmesi normal testlerden farklıdır.
Bulanık sonuçlar
Karşılaştırmalar kullanılan araçlarla yapılan testler olsa da, alınan sonuçlar başarılı ya da başarısız değildir. Karşılaştırmalar, çalıştırıldıkları cihaz için zamanlama ölçümleri sağlar. Zaman içinde ortaya çıkan sonuçların grafiğini çizmek, ilgili bölgedeki değişimi izleyebilir ve ölçüm sistemidir.
Gerçek cihazlar kullanın
Fiziksel Android cihazlarda karşılaştırmalar yapın. Bir projenin gerçekçi bir analizi temsil etmediği için, kullanıcı deneyimi sunar ve bunun yerine ana makine işletim sistemine ve donanımına özellikler. Gerçek cihazlar veya test yapmanıza olanak tanıyan bir hizmet kullanmayı düşünün Firebase Test Lab gibi gerçek cihazlarda test edin.
Karşılaştırma yapın
Karşılaştırmaları, CI ardışık düzeninizin bir parçası olarak çalıştırmak
bunu yerel olarak
yapabilirsiniz. Yerel olarak genellikle Android
entegrasyon testleri için bir Gradle connectedCheck
görevi kullanın. Bu görev otomatik olarak
APK'nızı oluşturur ve test APK'nızı oluşturur ve
CI sunucusudur. CI'da çalışırken bu akışın genellikle
ayrı aşamalar olabilir.
Topluluk
Microbenchmark kitaplığı için Gradle görevini çalıştırın
assemble[VariantName]AndroidTest
, şunu içeren test APK'nızı oluşturur:
hem uygulama kodunuza hem de test ettiğiniz koda yükseltin.
Alternatif olarak, Macrobenchmark kitaplığı hedef APK'nızı oluşturmanızı ve
test APK'sını ayrı olarak test edin. Bu nedenle, :app:assemble[VariantName]
ve
:macrobenchmark:assemble[VariantName]
Gradle görevleri.
Yükle ve çalıştır
Bu adımlar genellikle Gradle görevlerini çalıştırmaya gerek kalmadan gerçekleştirilir. Not: testler çalıştırmanıza olanak tanıyan bir hizmet kullanıp kullanmadığınıza bağlı olarak soyutlanabilir gerçek cihazlarda çalışır.
Yükleme için adb install
komutunu kullanın ve test APK'sını belirtin.
veya hedef APK'yı seçin.
Tüm karşılaştırmaları çalıştırmak için adb shell am
araç komutunu çalıştırın:
adb shell am instrument -w com.example.benchmark/androidx.benchmark.junit4.AndroidBenchmarkRunner
Macrobenchmark kitaplığını kullanırken normal
androidx.test.runner.AndroidJUnitRunner
enstrümantasyon koşucusu.
Gradle yapılandırmasındakiyle aynı araç bağımsız değişkenlerini aktarabilirsiniz
-e
bağımsız değişkeni kullanılıyor. Tüm araç bağımsız değişkenleri için bkz.
Mikro Karşılaştırma Aracı Bağımsız Değişkenleri veya
Macrobenchmark için araç bağımsız değişkenleri ekleyin.
Örneğin, dryRunMode
bağımsız değişkenini mikrobenchmark'ları şu şekilde çalıştıracak şekilde ayarlayabilirsiniz:
. Bu işaret etkinleştirildiğinde,
Mikrobenchmark'lar yalnızca tek döngüde çalışarak çalıştıklarını doğrular
ama yürütülmesi çok uzun sürmeyecek.
adb shell am instrument -w -e "androidx.benchmark.dryRunMode.enable" "true" com.example.benchmark/androidx.benchmark.junit4.AndroidBenchmarkRunner
nasıl çalıştıracağınızla ilgili araç testlerini öğrenmek için ADB ile test çalıştırma bölümüne bakın.
Saatleri kilitle
Microbenchmark Gradle eklentisi, aşağıdakileri yapmak için ./gradlew lockClocks
komutunu sağlar:
rootlanmış bir cihazın CPU saatlerini kilitle. Kararlılığın sağlanması açısından faydalıdır
"userdebug" gibi rootlanmış cihazlara erişiminiz olduğunda inşa eder. Şunları yapabilirsiniz:
bu komutulockClocks.sh
kitaplık kaynağı.
Komut dosyasını doğrudan bir Linux veya Mac ana bilgisayarından çalıştırabilir ya da birkaç adb komutuyla cihaza ekleyebilirsiniz:
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
Kabuk komut dosyasını doğrudan bir ana makinede çalıştırırsanız bu komutları bağlı bir cihazdır.
CPU saatlerini kilitlemenin neden yararlı olduğu konusunda daha fazla bilgi için Tutarlı karşılaştırmalar elde edebilirsiniz.
Sonuçları toplayın
Karşılaştırma kitaplıkları,
JSON ile birlikte bir dizinde profil oluşturma
Android destekli cihaz gösterilir. Macrobenchmark kitaplığı
birden fazla perfetto izleme dosyası üretir: Her öğenin ölçülen yinelemesi başına bir adet
MacrobenchmarkRule.measureRepeated
döngü. Ancak microbenchmark,
her yineleme için yalnızca bir izleme dosyası
BenchmarkRule.measureRepeated
. Profil oluşturma izleme dosyalarının çıktısı da
emin olmanız gerekir.
Dosyaları kaydedin ve bulun
Karşılaştırmaları Gradle ile çalıştırırsanız bu dosyalar otomatik olarak
ana makine bilgisayarınızın çıkış dizinini oluşturur.
build/outputs/connected_android_test_additional_output/debugAndroidTest/connected/
Doğrudan adb
komutuyla çalıştırıyorsanız dosyaları çekmeniz gerekir
manuel olarak ekleyin. Varsayılan olarak, raporlar cihaza, şuranın medya dizinine kaydedilir:
test edilen uygulamanın harici depolama alanındaki Kolaylık sağlamak için kütüphane yolu yazdırır
dosyasını Logcat'e yükleyin. Çıkış klasörünün lisansa bağlı olarak değişebileceğini unutmayın.
karşılaştırmaların hangi Android sürümünde
çalıştığını gösterebilir.
Benchmark: writing results to /storage/emulated/0/Android/media/com.example.macrobenchmark/com.example.macrobenchmark-benchmarkData.json
Ayrıca, karşılaştırma raporlarının kaydedileceği konumu da
cihaz bağımsız değişkenini kullanarak additionalTestOutputDir
. Bu
klasörünüz, uygulamanız tarafından yazılabilir olmalıdır.
adb shell am instrument -w -e additionalTestOutputDir /sdcard/Download/ com.example.benchmark/androidx.benchmark.junit4.AndroidBenchmarkRunner
Android 10 (API düzeyi 29) ve sonraki sürümlerde uygulamanızın testleri bir depolama alanında çalışır
korumalı alan, uygulamanızın
dizine ekler. Global bir dizine kaydedebilmek için, örneğin
/sdcard/Download
olarak aşağıdaki enstrümantasyonu geçin
bağımsız değişken:
-e no-isolated-storage true
Ayrıca, karşılaştırma ayarlarınızda eski depolama alanı seçeneklerine manifesto:
<application android:requestLegacyExternalStorage="true" ... >
Daha fazla bilgi için Geçici olarak kapsam dışında kalmayı seçin depolama alanı.
Dosyaları alma
Oluşturulan dosyaları cihazdan almak için adb pull
kullanın.
komutuna ekleyerek, belirtilen dosyayı ana makinenizdeki geçerli dizine çeker:
adb pull /storage/emulated/0/Android/media/com.example.macrobenchmark/com.example.macrobenchmark-benchmarkData.json
Belirtilen bir klasörden tüm benchmarkData
öğelerini almak için
aşağıdaki snippet:
# 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
İzleme dosyaları (.trace
veya .perfetto-trace
) aynı
benchmarkData.json
olarak işaretleyeceği için bu dosyaları aynı şekilde toplayabilirsiniz.
Karşılaştırma verileri örneği
Karşılaştırma kitaplıkları, şu bilgileri içeren JSON dosyaları oluşturur: karşılaştırmaları ve çalıştırıldığı gerçek karşılaştırmaları gösterir. İlgili içeriği oluşturmak için kullanılan aşağıdaki snippet, oluşturulan JSON dosyasını temsil eder:
{
"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
}
]
}
Ek kaynaklar
- Performans regresyonlarının nasıl tespit edileceği konusunda yardım için bkz. CI'da Karşılaştırmalarla Regresyonlarla Mücadele.
- GitHub Actions'ı Firebase Test Lab ile nasıl kuracağınızı öğrenmek için şuraya bakın: CI için Jetpack Macrobenchmarks'ı ayarlama
Sizin için önerilenler
- Not: JavaScript kapalıyken bağlantı metni gösterilir
- SQLite performansı için en iyi uygulamalar
- Macrobenchmark olmadan Temel Profiller oluşturma ve ölçme
- Takılı kalan kısmi uyanık kalma kilitleri