blob: 3a3195fe36042de31c52699c0f3774b03cd1bac9 [file] [log] [blame]
Przemyslaw Szczepaniak9429af42018-09-28 17:07:24 +01001#!/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 Shklyaevf2a8a3e2019-05-15 16:43:46 +01006
Slava Shklyaev0188b0e2019-07-29 12:02:54 +01007MODE="${1:-scoring}"
Slava Shklyaev9b6f86f2019-06-20 16:34:51 +01008
9case "$MODE" in
10 scoring)
Slava Shklyaevf2a8a3e2019-05-15 16:43:46 +010011 CLASS=com.android.nn.benchmark.app.NNScoringTest
12 ;;
Slava Shklyaev9b6f86f2019-06-20 16:34:51 +010013 inference-stress)
14 CLASS=com.android.nn.benchmark.app.NNInferenceStressTest
15 ;;
16 model-loading-stress)
17 CLASS=com.android.nn.benchmark.app.NNModelLoadingStressTest
Slava Shklyaevf2a8a3e2019-05-15 16:43:46 +010018 ;;
19 *)
20 echo "Unknown execution mode: $1"
Slava Shklyaev9b6f86f2019-06-20 16:34:51 +010021 echo "Known modes: scoring (default), inference-stress, model-loading-stress"
Slava Shklyaevf2a8a3e2019-05-15 16:43:46 +010022 exit 1
23 ;;
24esac
Przemyslaw Szczepaniak9429af42018-09-28 17:07:24 +010025
26if [[ -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
30fi
31
32set -e
33cd $ANDROID_BUILD_TOP
34
Przemyslaw Szczepaniak9429af42018-09-28 17:07:24 +010035# Build and install benchmark app
Viet Danga47c44b2019-08-01 13:28:30 +010036build/soong/soong_ui.bash --make-mode NeuralNetworksApiBenchmark
Stephen Hines18704f12019-04-12 17:20:25 -070037if ! adb install -r $OUT/testcases/NeuralNetworksApiBenchmark/arm64/NeuralNetworksApiBenchmark.apk; then
Przemyslaw Szczepaniak15c1f352018-10-18 13:14:34 +010038 adb uninstall com.android.nn.benchmark.app
Stephen Hines18704f12019-04-12 17:20:25 -070039 adb install -r $OUT/testcases/NeuralNetworksApiBenchmark/arm64/NeuralNetworksApiBenchmark.apk
Przemyslaw Szczepaniak15c1f352018-10-18 13:14:34 +010040fi
Przemyslaw Szczepaniak9429af42018-09-28 17:07:24 +010041
Przemyslaw Szczepaniak6526a9b2018-11-02 13:06:11 +000042
Przemyslaw Szczepaniakf1e93342018-10-10 14:16:53 +010043# Should we figure out if we run on release device
44if [ -z "$MLTS_RELEASE_DEVICE" ]; then
Przemyslaw Szczepaniak15c1f352018-10-18 13:14:34 +010045 BUILD_DESCRIPTION=`adb shell getprop ro.build.description`
Przemyslaw Szczepaniakf1e93342018-10-10 14:16:53 +010046 if [[ $BUILD_DESCRIPTION =~ .*release.* ]]
47 then
48 MLTS_RELEASE_DEVICE=True
49 else
50 MLTS_RELEASE_DEVICE=False
51 fi
52fi
53
Przemyslaw Szczepaniak6526a9b2018-11-02 13:06:11 +000054# Pass --no-isolated-storage to am instrument?
55BUILD_VERSION_RELEASE=`adb shell getprop ro.build.version.release`
56AM_INSTRUMENT_FLAGS=""
57if [[ $BUILD_VERSION_RELEASE == "Q" ]]; then
58 AM_INSTRUMENT_FLAGS+="--no-isolated-storage"
59fi
60
Przemyslaw Szczepaniakf1e93342018-10-10 14:16:53 +010061if [[ "$MLTS_RELEASE_DEVICE" == "True" ]]; then
Przemyslaw Szczepaniakf1e93342018-10-10 14:16:53 +010062 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
70else
Przemyslaw Szczepaniak15c1f352018-10-18 13:14:34 +010071 adb root
72 adb shell "pm grant com.android.nn.benchmark.app android.permission.WRITE_EXTERNAL_STORAGE"
Przemyslaw Szczepaniakf1e93342018-10-10 14:16:53 +010073 # Skip setup wizard and remount (read-write)
Przemyslaw Szczepaniak15c1f352018-10-18 13:14:34 +010074 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 Szczepaniakf1e93342018-10-10 14:16:53 +010081 sleep 5
Andreas Gampe055abd92019-04-17 13:36:16 -070082 adb wait-for-usb-device root
Przemyslaw Szczepaniakf1e93342018-10-10 14:16:53 +010083 adb wait-for-usb-device remount
Przemyslaw Szczepaniak15c1f352018-10-18 13:14:34 +010084 sleep 5
Przemyslaw Szczepaniakf1e93342018-10-10 14:16:53 +010085 fi
86 set +e
87 # Enable menu key press through adb
Przemyslaw Szczepaniak15c1f352018-10-18 13:14:34 +010088 adb shell 'echo testing > /data/local/enable_menu_key'
Przemyslaw Szczepaniakf1e93342018-10-10 14:16:53 +010089 # Leave screen on (affects scheduling)
Przemyslaw Szczepaniak15c1f352018-10-18 13:14:34 +010090 adb shell settings put system screen_off_timeout 86400000
Przemyslaw Szczepaniakf1e93342018-10-10 14:16:53 +010091 # Stop background apps, seem to take ~10% CPU otherwise
Przemyslaw Szczepaniak15c1f352018-10-18 13:14:34 +010092 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 Szczepaniakf1e93342018-10-10 14:16:53 +010094 set -e
95fi
96
Przemyslaw Szczepaniak15c1f352018-10-18 13:14:34 +010097adb shell setprop debug.nn.cpuonly 0
98adb shell setprop debug.nn.vlog 0
Przemyslaw Szczepaniak9429af42018-09-28 17:07:24 +010099
Przemyslaw Szczepaniak9429af42018-09-28 17:07:24 +0100100# Menukey - make sure screen is on
101adb shell "input keyevent 82"
102# Show homescreen
103adb shell wm dismiss-keyguard
Slava Shklyaev23aa0ae2019-06-25 11:05:47 +0100104
105if [[ "$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}
116fi
Slava Shklyaevf2a8a3e2019-05-15 16:43:46 +0100117
Przemyslaw Szczepaniak9429af42018-09-28 17:07:24 +0100118# Set the shell pid as a top-app and run tests
Slava Shklyaevf2a8a3e2019-05-15 16:43:46 +0100119time 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 Szczepaniak9429af42018-09-28 17:07:24 +0100120
Slava Shklyaev23aa0ae2019-06-25 11:05:47 +0100121if [[ "$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
128fi