Простое тестирование производительности с Vogar - PullRequest
1 голос
/ 22 ноября 2011

Я хочу написать простое тестовое программное обеспечение для Android. Я исследовал и нашел Caliper + Vogar. Но нет никакого примера о них. Кто-нибудь использует это? Мне нужен простой код для вызова Caliper Benchmarks с Android Activity.

Спасибо за помощь.

Ответы [ 2 ]

0 голосов
/ 01 апреля 2018

В последнее время я делаю то же самое, что и вы. У меня почти все получается

1.Загрузите и настройте среду для сборки aosp 2.build aosp 3.build / external / vogar, вы получите vogar под out / host/ linux-x86 / bin / vogar 4. запишите ваш тестовый код с помощью caliper 5. запустите тестирование на хосте с помощью vogar vogar --mode app_process --benchmark

vogar автоматически скомпилирует ваш код в файл dex и отправит их вустройство вызывает app_process (который будет вызывать команду dalvikvm с android JNI registerd), чтобы запустить тестировщик vogar для запуска вашего тестового примера

vogar нужен ваш указанный classpath для компиляции или построения тестового набора

dvdface @ ubuntu: ~ / Source / aosp / out / host / linux-x86 / bin $ ./vogar --mode app_process --benchmark ~ / Source / aosp / libcore / benchmarks / src / benchmarks / AdditionBenchmark.java Действия:1 выполняется [/ home / dvdface / Source / aosp / prebuilts / sdk / tools / jack, -D, jack.java.source.version = 1.8, -D, jack.android.min-api-level = o-b1,-cp, / home / dvdface / источник / aosp / out / target / common/obj/JAVA_LIBRARIES/core-libart_intermediates/classes.jack:/home/dvdface/Source/aosp/out/target/common/obj/JAVA_LIBRARIES/core-oj_intermediates/classes.jack:/home/dvdface/Source/aosp/out/target/common/obj/JAVA_LIBRARIES/conscrypt_intermediates/classes.jack:/home/dvdface/Source/aosp/out/target/common/obj/JAVA_LIBRARIES/okhttp_intermediates/classes.jack:/home/dvdface/Source/aosp/out/target/common/obj/JAVA_LIBRARIES/legacy-test_intermediates/classes.jack:/home/dvdface/Source/aosp/out/target/common/obj/JAVA_LIBRARIES/bouncycastle_intermediates/classes.jack:/home/dvdface/Source/aosp/out/target/common/obj/JAVA_LIBRARIES/ext_intermediates/classes.jack:/home/dvdface/Source/aosp/out/target/common/obj/JAVA_LIBRARIES/framework_intermediates/classes.jack:/home/dvdface/Source/aosp/out/target/common/obj/JAVA_LIBRARIES/telephony-common_intermediates/classes.jack:/home/dvdface/Source/aosp/out/target/common/obj/JAVA_LIBRARIES/mms-common_intermediates/classes.jack:/home/dvdface/ Источник / AOSP / выход / цель / соMMON / объект / JAVA_LIBRARIES / framework_intermediates / classes.jack: /home/dvdface/Source/aosp/out/target/common/obj/JAVA_LIBRARIES/android.policy_intermediates/classes.jack: / Главная / dvdface / Source / AOSP / выход /мишень / общие / объект / JAVA_LIBRARIES / services_intermediates / classes.jack: /home/dvdface/Source/aosp/out/target/common/obj/JAVA_LIBRARIES/apache-xml_intermediates/classes.jack: / Главная / dvdface / Source / AOSP /out / host / linux-x86 / framework / vogar.jar, --output-jack, /tmp/vogar/24a8baa0-30f1-4861-99c1-6660e97bf1d8/benchmarks.AdditionBenchmark/benchmarks.AdditionBenchmark.jack, --import-resource, /tmp/vogar/24a8baa0-30f1-4861-99c1-6660e97bf1d8/benchmarks.AdditionBenchmarkexecuting [adb, shell, mkdir, /data/local/tmp/vogar/run/benchmarks.AdditionBenchmark]*0ececuting *00executinghome / dvdface / Source / aosp / prebuilts / sdk / tools / jack, --output-dex-zip, /tmp/vogar/24a8baa0-30f1-4861-99c1-6660e97bf1d8/benchmarks.AdditionBenchmark/benchmarks.AdditionBenchar.dex.js, -D, jack.java.source.version = 1.8, -D, jack.android.min-api-level = o-b1, --multi-dex, native, --import, /tmp/vogar/24a8baa0-30f1-4861-99c1-6660e97bf1d8/benchmarks.AdditionBenchmark/benchmarks.AdditionBenchmark.jackAction benchmarks.AdditionBench[adb, shell, cd /data/local/tmp/vogar/run/benchmarks.AdditionBenchmark && ANDROID_DATA = / data / local / tmp / vogar app_process -Djava.class.path = / data / local / tmp / vogar / run /benchmarks.AdditionBenchmark.dex.jar -Djava.io.tmpdir = / data / local / tmp / vogar / run / benchmarks.AdditionBenchmark -Duser.home = / data / local / tmp / vogar / run / user.home / data /местные / TMP / Vogar / Run / benchmarks.AdditionBenchmark vogar.target.TestRunn выбор эксперимента: Методы Benchmark: [timeAddConstantToLocalDouble, timeAddConstantToLocalFloat, timeAddConstantToLocalInt, timeAddConstantToLocalLong, timeAddTwoLocalDoubles, timeAddTwoLocalFloats, timeAddTwoLocalInts, timeAddTwoLocalLongs] инструменты: [время выполнения] параметры пользователя: {}Виртуальные машины: [app_process] Тип выбора: Полностью декартово произведение Этот выбор дает 8 экспериментов.Пробный отчет (1 из 8): Эксперимент {инструмент = время выполнения, benchmarkMethod = timeAddConstantToLocalDouble, vm = app_process, параметры = {}} Результаты: время выполнения (нс): мин = 3,48, 1-й кв. = 3,48, медиана = 3,48, среднее =3,48, 3 кв. = 3,48, макс = 3,48. Пробный отчет (2 из 8): эксперимент {инструмент = время выполнения, benchmarkMethod = timeAddConstantToLocalFloat, vm = app_process, параметры = {}} Результаты: время выполнения (нс): мин = 5,28, 1-йqu. = 5,28, медиана = 5,28, среднее = 5,28, 3-е кв. = 5,28, макс = 5,28. Отчет о тестировании (3 из 8): эксперимент {инструмент = время выполнения, benchmarkMethod = timeAddConstantToLocalInt, vm = app_process, параметры = {}} Результаты: время выполнения (нс): мин = 2,11, 1-й кв. = 2,11, медиана = 2,11, среднее = 2,11, 3-й кв. = 2,11, макс = 2,11 Отчет об испытаниях (4 из 8): Эксперимент {инструмент = время выполнения, benchmarkMethod = timeAddConstantToLocalLong, vm = app_process, параметры = {}} Результаты: время выполнения (нс): мин = 2,10, 1 кв. = 2,10, медиана = 2,10, среднее значение = 2,10, 3 кв. = 2,10, макс = 2,10 Отчет о судебном разбирательстве (5 из 8): Эксперимент {instrument = runtime, benchmarkMethod = timeAddTwoLocalDoubles, vm = app_process, параметры = {}} Результаты: время выполнения (нс): мин = 5,31, 1-й кв. = 5,31, медиана = 5,31, среднее значение = 5,31, 3-й кв. = 5,31, макс = 5,31 Отчет об испытаниях (6 из 8): эксперимент{instrument = время выполнения, benchmarkMethod = timeAddTwoLocalFloats, vm = app_process, параметры = {}} Результаты: время выполнения (нс): мин = 5,23, 1 кв. = 5,23, медиана = 5,23, среднее = 5,23, 3 кв. = 5,23, макс.= 5.23 Отчет об испытаниях (7 из 8): Эксперимент {инструмент = время выполнения, benchmarkMethod = timeAddTwoLocalInts, vm = app_process, параметры = {}} Результаты: время выполнения (нс): мин = 1,63, 1-й кв. = 1,63, медиана = 1,63,среднее значение = 1,63, 3-е кв. = 1,63, макс = 1,63 Отчет о пробной версии (8 из 8): эксперимент {инструмент = время выполнения, benchmarkMethod = timeAddTwoLocalLongs, vm = app_process, параметры = {}} Результаты: время выполнения (нс): мин = 2,14, 1-й кв. = 2,14, медиана = 2,14, среднее = 2,14, 3-й кв. = 2,14, макс = 2,14. Собрано 8 измерений из: 1 инструмента (ов) 1 виртуальной машины (ов) 8 эталонных тестов Выполнение: 19,90 с,Инструмент com.google.caliper.runner.AllocationInstrument не поддерживается в Dalvik, игнорируя инструмент com.google.caliper.runner.AllocationInstrument не поддерживается в Dalvik, игнорируя некоторые пробные загрузки не удалось загрузить.Попробуйте загрузить их вручную.benchmarks.AdditionBenchmark OK (SUCCESS) получил значение выхода 0 из разрушенной командной оболочки adb cd /data/local/tmp/vogar/run/benchmarks.AdditionBenchmark && ANDROID_DATA = / data / local / tmp / vogar app_process -Djava.class.path =/data/local/tmp/vogar/run/benchmarks.AdditionBenchmark.dex.jar -Djava.io.tmpdir = / data / local / tmp / vogar / run / benchmarks.AdditionBenchmark -Duser.home = / data / local / tmp/vogar/run/user.home /data/local/tmp/vogar/run/benchmarks.AdditioMoving /data/local/tmp/vogar/run/benchmarks.AdditionBenchmark/benchmarks.AdditionBenchmark.2018-04-01T15:43:17Z.json to ./vogar-results Результаты: 1. Все успешно.Взял 10м35с.

0 голосов
/ 22 ноября 2011

Полный пример Caliper Benchmark для Android, хотя и не для Activity, есть в Руководстве по тестированию приложений Android , в котором также объясняется:

Тест суппорта обычно расширяется com.google.caliper.SimpleBenchmark который реализует интерфейс Benchmark. Тесты структурированы в аналогично тому, как JUnit 3 тестирует и поддерживает ту же структуру с той разницей, что здесь тесты начинаются с префикса времени, как в отличие от теста.

Указанные тесты выглядят так:

public final void timeCelsiusToFahrenheit(int reps) {
         for (int i=0; i < reps; i++) {
           for (double t: temps) {
             TemperatureConverter.celsiusToFahrenheit(t);
           }
         }
}

Одна из наиболее интересных функций заключается в том, что caliper может загружать результаты тестов, и вы можете сравнивать их графически

caliper benchmarks

...