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