Przemyslaw Szczepaniak | 9429af4 | 2018-09-28 17:07:24 +0100 | [diff] [blame] | 1 | #!/bin/bash |
| 2 | # |
| 3 | # Build benchmark app and run it, mimicking a user-initiated run |
| 4 | # |
| 5 | # Output is logged to a temporary folder and summarized in txt and JSON formats. |
Slava Shklyaev | f2a8a3e | 2019-05-15 16:43:46 +0100 | [diff] [blame] | 6 | |
Slava Shklyaev | 0188b0e | 2019-07-29 12:02:54 +0100 | [diff] [blame] | 7 | MODE="${1:-scoring}" |
Slava Shklyaev | 9b6f86f | 2019-06-20 16:34:51 +0100 | [diff] [blame] | 8 | |
| 9 | case "$MODE" in |
| 10 | scoring) |
Slava Shklyaev | f2a8a3e | 2019-05-15 16:43:46 +0100 | [diff] [blame] | 11 | CLASS=com.android.nn.benchmark.app.NNScoringTest |
| 12 | ;; |
Slava Shklyaev | 9b6f86f | 2019-06-20 16:34:51 +0100 | [diff] [blame] | 13 | inference-stress) |
| 14 | CLASS=com.android.nn.benchmark.app.NNInferenceStressTest |
| 15 | ;; |
| 16 | model-loading-stress) |
| 17 | CLASS=com.android.nn.benchmark.app.NNModelLoadingStressTest |
Slava Shklyaev | f2a8a3e | 2019-05-15 16:43:46 +0100 | [diff] [blame] | 18 | ;; |
| 19 | *) |
| 20 | echo "Unknown execution mode: $1" |
Slava Shklyaev | 9b6f86f | 2019-06-20 16:34:51 +0100 | [diff] [blame] | 21 | echo "Known modes: scoring (default), inference-stress, model-loading-stress" |
Slava Shklyaev | f2a8a3e | 2019-05-15 16:43:46 +0100 | [diff] [blame] | 22 | exit 1 |
| 23 | ;; |
| 24 | esac |
Przemyslaw Szczepaniak | 9429af4 | 2018-09-28 17:07:24 +0100 | [diff] [blame] | 25 | |
| 26 | if [[ -z "$ANDROID_BUILD_TOP" ]]; then |
| 27 | echo ANDROID_BUILD_TOP not set, bailing out |
| 28 | echo you must run lunch before running this script |
| 29 | exit 1 |
| 30 | fi |
| 31 | |
| 32 | set -e |
| 33 | cd $ANDROID_BUILD_TOP |
| 34 | |
Przemyslaw Szczepaniak | 9429af4 | 2018-09-28 17:07:24 +0100 | [diff] [blame] | 35 | # Build and install benchmark app |
Viet Dang | a47c44b | 2019-08-01 13:28:30 +0100 | [diff] [blame] | 36 | build/soong/soong_ui.bash --make-mode NeuralNetworksApiBenchmark |
Stephen Hines | 18704f1 | 2019-04-12 17:20:25 -0700 | [diff] [blame] | 37 | if ! adb install -r $OUT/testcases/NeuralNetworksApiBenchmark/arm64/NeuralNetworksApiBenchmark.apk; then |
Przemyslaw Szczepaniak | 15c1f35 | 2018-10-18 13:14:34 +0100 | [diff] [blame] | 38 | adb uninstall com.android.nn.benchmark.app |
Stephen Hines | 18704f1 | 2019-04-12 17:20:25 -0700 | [diff] [blame] | 39 | adb install -r $OUT/testcases/NeuralNetworksApiBenchmark/arm64/NeuralNetworksApiBenchmark.apk |
Przemyslaw Szczepaniak | 15c1f35 | 2018-10-18 13:14:34 +0100 | [diff] [blame] | 40 | fi |
Przemyslaw Szczepaniak | 9429af4 | 2018-09-28 17:07:24 +0100 | [diff] [blame] | 41 | |
Przemyslaw Szczepaniak | 6526a9b | 2018-11-02 13:06:11 +0000 | [diff] [blame] | 42 | |
Przemyslaw Szczepaniak | f1e9334 | 2018-10-10 14:16:53 +0100 | [diff] [blame] | 43 | # Should we figure out if we run on release device |
| 44 | if [ -z "$MLTS_RELEASE_DEVICE" ]; then |
Przemyslaw Szczepaniak | 15c1f35 | 2018-10-18 13:14:34 +0100 | [diff] [blame] | 45 | BUILD_DESCRIPTION=`adb shell getprop ro.build.description` |
Przemyslaw Szczepaniak | f1e9334 | 2018-10-10 14:16:53 +0100 | [diff] [blame] | 46 | if [[ $BUILD_DESCRIPTION =~ .*release.* ]] |
| 47 | then |
| 48 | MLTS_RELEASE_DEVICE=True |
| 49 | else |
| 50 | MLTS_RELEASE_DEVICE=False |
| 51 | fi |
| 52 | fi |
| 53 | |
Przemyslaw Szczepaniak | 6526a9b | 2018-11-02 13:06:11 +0000 | [diff] [blame] | 54 | # Pass --no-isolated-storage to am instrument? |
| 55 | BUILD_VERSION_RELEASE=`adb shell getprop ro.build.version.release` |
| 56 | AM_INSTRUMENT_FLAGS="" |
| 57 | if [[ $BUILD_VERSION_RELEASE == "Q" ]]; then |
| 58 | AM_INSTRUMENT_FLAGS+="--no-isolated-storage" |
| 59 | fi |
| 60 | |
Przemyslaw Szczepaniak | f1e9334 | 2018-10-10 14:16:53 +0100 | [diff] [blame] | 61 | if [[ "$MLTS_RELEASE_DEVICE" == "True" ]]; then |
Przemyslaw Szczepaniak | f1e9334 | 2018-10-10 14:16:53 +0100 | [diff] [blame] | 62 | TEST_EXTENRAL_STORAGE="com.android.nn.benchmark.app/com.android.nn.benchmark.util.TestExternalStorageActivity" |
| 63 | while ! adb shell "am start -W $TEST_EXTENRAL_STORAGE && rm /sdcard/mlts_write_external_storage" > /dev/null 2>&1; do |
| 64 | echo "************************************************************" |
| 65 | echo "Grant External storage write permissions to MLTS to proceed!" |
| 66 | echo "************************************************************" |
| 67 | read -n 1 -r -p "Continue? (press any key)" |
| 68 | echo |
| 69 | done |
| 70 | else |
Przemyslaw Szczepaniak | 15c1f35 | 2018-10-18 13:14:34 +0100 | [diff] [blame] | 71 | adb root |
| 72 | adb shell "pm grant com.android.nn.benchmark.app android.permission.WRITE_EXTERNAL_STORAGE" |
Przemyslaw Szczepaniak | f1e9334 | 2018-10-10 14:16:53 +0100 | [diff] [blame] | 73 | # Skip setup wizard and remount (read-write) |
Przemyslaw Szczepaniak | 15c1f35 | 2018-10-18 13:14:34 +0100 | [diff] [blame] | 74 | if ! adb shell test -f /data/local.prop; then |
| 75 | adb shell 'echo ro.setupwizard.mode=DISABLED > /data/local.prop' |
| 76 | adb shell 'chmod 644 /data/local.prop' |
| 77 | adb shell 'settings put global device_provisioned 1*' |
| 78 | adb shell 'settings put secure user_setup_complete 1' |
| 79 | adb disable-verity |
| 80 | adb reboot |
Przemyslaw Szczepaniak | f1e9334 | 2018-10-10 14:16:53 +0100 | [diff] [blame] | 81 | sleep 5 |
Andreas Gampe | 055abd9 | 2019-04-17 13:36:16 -0700 | [diff] [blame] | 82 | adb wait-for-usb-device root |
Przemyslaw Szczepaniak | f1e9334 | 2018-10-10 14:16:53 +0100 | [diff] [blame] | 83 | adb wait-for-usb-device remount |
Przemyslaw Szczepaniak | 15c1f35 | 2018-10-18 13:14:34 +0100 | [diff] [blame] | 84 | sleep 5 |
Przemyslaw Szczepaniak | f1e9334 | 2018-10-10 14:16:53 +0100 | [diff] [blame] | 85 | fi |
| 86 | set +e |
| 87 | # Enable menu key press through adb |
Przemyslaw Szczepaniak | 15c1f35 | 2018-10-18 13:14:34 +0100 | [diff] [blame] | 88 | adb shell 'echo testing > /data/local/enable_menu_key' |
Przemyslaw Szczepaniak | f1e9334 | 2018-10-10 14:16:53 +0100 | [diff] [blame] | 89 | # Leave screen on (affects scheduling) |
Przemyslaw Szczepaniak | 15c1f35 | 2018-10-18 13:14:34 +0100 | [diff] [blame] | 90 | adb shell settings put system screen_off_timeout 86400000 |
Przemyslaw Szczepaniak | f1e9334 | 2018-10-10 14:16:53 +0100 | [diff] [blame] | 91 | # Stop background apps, seem to take ~10% CPU otherwise |
Przemyslaw Szczepaniak | 15c1f35 | 2018-10-18 13:14:34 +0100 | [diff] [blame] | 92 | adb shell 'pm disable com.google.android.googlequicksearchbox' |
| 93 | adb shell 'pm list packages -f' | sed -e 's/.*=//' | sed 's/\r//g' | grep "com.breel.wallpapers" | while read pkg; do adb shell "pm disable $pkg"; done; |
Przemyslaw Szczepaniak | f1e9334 | 2018-10-10 14:16:53 +0100 | [diff] [blame] | 94 | set -e |
| 95 | fi |
| 96 | |
Przemyslaw Szczepaniak | 15c1f35 | 2018-10-18 13:14:34 +0100 | [diff] [blame] | 97 | adb shell setprop debug.nn.cpuonly 0 |
| 98 | adb shell setprop debug.nn.vlog 0 |
Przemyslaw Szczepaniak | 9429af4 | 2018-09-28 17:07:24 +0100 | [diff] [blame] | 99 | |
Przemyslaw Szczepaniak | 9429af4 | 2018-09-28 17:07:24 +0100 | [diff] [blame] | 100 | # Menukey - make sure screen is on |
| 101 | adb shell "input keyevent 82" |
| 102 | # Show homescreen |
| 103 | adb shell wm dismiss-keyguard |
Slava Shklyaev | 23aa0ae | 2019-06-25 11:05:47 +0100 | [diff] [blame] | 104 | |
| 105 | if [[ "$MODE" == "scoring" ]]; then |
| 106 | LOGDIR=$(mktemp -d)/mlts-logs |
| 107 | HOST_CSV=$LOGDIR/benchmark.csv |
| 108 | RESULT_HTML=$LOGDIR/result.html |
| 109 | DEVICE_CSV=/sdcard/mlts_benchmark.csv |
| 110 | |
| 111 | mkdir -p $LOGDIR |
| 112 | echo Creating logs in $LOGDIR |
| 113 | |
| 114 | # Remove old benchmark csv data |
| 115 | adb shell rm -f ${DEVICE_CSV} |
| 116 | fi |
Slava Shklyaev | f2a8a3e | 2019-05-15 16:43:46 +0100 | [diff] [blame] | 117 | |
Przemyslaw Szczepaniak | 9429af4 | 2018-09-28 17:07:24 +0100 | [diff] [blame] | 118 | # Set the shell pid as a top-app and run tests |
Slava Shklyaev | f2a8a3e | 2019-05-15 16:43:46 +0100 | [diff] [blame] | 119 | time adb shell "echo $$ > /dev/stune/top-app/tasks; am instrument ${AM_INSTRUMENT_FLAGS} -w -e class $CLASS com.android.nn.benchmark.app/androidx.test.runner.AndroidJUnitRunner" |
Przemyslaw Szczepaniak | 9429af4 | 2018-09-28 17:07:24 +0100 | [diff] [blame] | 120 | |
Slava Shklyaev | 23aa0ae | 2019-06-25 11:05:47 +0100 | [diff] [blame] | 121 | if [[ "$MODE" == "scoring" ]]; then |
| 122 | adb pull $DEVICE_CSV $HOST_CSV |
| 123 | echo Benchmark data saved in $HOST_CSV |
| 124 | |
| 125 | $ANDROID_BUILD_TOP/test/mlts/benchmark/results/generate_result.py $HOST_CSV $RESULT_HTML |
| 126 | echo Results stored in $RESULT_HTML |
| 127 | xdg-open $RESULT_HTML |
| 128 | fi |