blob: 83ca2abfb50ab9816ed22af6d1c7b45afac1edb0 [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
7case "$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 ;;
21esac
Przemyslaw Szczepaniak9429af42018-09-28 17:07:24 +010022
23if [[ -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
27fi
28
29set -e
30cd $ANDROID_BUILD_TOP
31
32LOGDIR=$(mktemp -d)/mlts-logs
Przemyslaw Szczepaniak6526a9b2018-11-02 13:06:11 +000033
Przemyslaw Szczepaniak9429af42018-09-28 17:07:24 +010034mkdir -p $LOGDIR
35echo Creating logs in $LOGDIR
36
Przemyslaw Szczepaniak9429af42018-09-28 17:07:24 +010037# Build and install benchmark app
38make NeuralNetworksApiBenchmark
Stephen Hines18704f12019-04-12 17:20:25 -070039if ! adb install -r $OUT/testcases/NeuralNetworksApiBenchmark/arm64/NeuralNetworksApiBenchmark.apk; then
Przemyslaw Szczepaniak15c1f352018-10-18 13:14:34 +010040 adb uninstall com.android.nn.benchmark.app
Stephen Hines18704f12019-04-12 17:20:25 -070041 adb install -r $OUT/testcases/NeuralNetworksApiBenchmark/arm64/NeuralNetworksApiBenchmark.apk
Przemyslaw Szczepaniak15c1f352018-10-18 13:14:34 +010042fi
Przemyslaw Szczepaniak9429af42018-09-28 17:07:24 +010043
Przemyslaw Szczepaniak6526a9b2018-11-02 13:06:11 +000044
Przemyslaw Szczepaniakf1e93342018-10-10 14:16:53 +010045# Should we figure out if we run on release device
46if [ -z "$MLTS_RELEASE_DEVICE" ]; then
Przemyslaw Szczepaniak15c1f352018-10-18 13:14:34 +010047 BUILD_DESCRIPTION=`adb shell getprop ro.build.description`
Przemyslaw Szczepaniakf1e93342018-10-10 14:16:53 +010048 if [[ $BUILD_DESCRIPTION =~ .*release.* ]]
49 then
50 MLTS_RELEASE_DEVICE=True
51 else
52 MLTS_RELEASE_DEVICE=False
53 fi
54fi
55
Przemyslaw Szczepaniak6526a9b2018-11-02 13:06:11 +000056# Pass --no-isolated-storage to am instrument?
57BUILD_VERSION_RELEASE=`adb shell getprop ro.build.version.release`
58AM_INSTRUMENT_FLAGS=""
59if [[ $BUILD_VERSION_RELEASE == "Q" ]]; then
60 AM_INSTRUMENT_FLAGS+="--no-isolated-storage"
61fi
62
Przemyslaw Szczepaniakf1e93342018-10-10 14:16:53 +010063if [[ "$MLTS_RELEASE_DEVICE" == "True" ]]; then
Przemyslaw Szczepaniakf1e93342018-10-10 14:16:53 +010064 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
72else
Przemyslaw Szczepaniak15c1f352018-10-18 13:14:34 +010073 adb root
74 adb shell "pm grant com.android.nn.benchmark.app android.permission.WRITE_EXTERNAL_STORAGE"
Przemyslaw Szczepaniakf1e93342018-10-10 14:16:53 +010075 # Skip setup wizard and remount (read-write)
Przemyslaw Szczepaniak15c1f352018-10-18 13:14:34 +010076 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 Szczepaniakf1e93342018-10-10 14:16:53 +010083 sleep 5
Andreas Gampe055abd92019-04-17 13:36:16 -070084 adb wait-for-usb-device root
Przemyslaw Szczepaniakf1e93342018-10-10 14:16:53 +010085 adb wait-for-usb-device remount
Przemyslaw Szczepaniak15c1f352018-10-18 13:14:34 +010086 sleep 5
Przemyslaw Szczepaniakf1e93342018-10-10 14:16:53 +010087 fi
88 set +e
89 # Enable menu key press through adb
Przemyslaw Szczepaniak15c1f352018-10-18 13:14:34 +010090 adb shell 'echo testing > /data/local/enable_menu_key'
Przemyslaw Szczepaniakf1e93342018-10-10 14:16:53 +010091 # Leave screen on (affects scheduling)
Przemyslaw Szczepaniak15c1f352018-10-18 13:14:34 +010092 adb shell settings put system screen_off_timeout 86400000
Przemyslaw Szczepaniakf1e93342018-10-10 14:16:53 +010093 # Stop background apps, seem to take ~10% CPU otherwise
Przemyslaw Szczepaniak15c1f352018-10-18 13:14:34 +010094 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 Szczepaniakf1e93342018-10-10 14:16:53 +010096 set -e
97fi
98
Przemyslaw Szczepaniak15c1f352018-10-18 13:14:34 +010099adb shell setprop debug.nn.cpuonly 0
100adb shell setprop debug.nn.vlog 0
Przemyslaw Szczepaniak9429af42018-09-28 17:07:24 +0100101
102HOST_CSV=$LOGDIR/benchmark.csv
103RESULT_HTML=$LOGDIR/result.html
Przemyslaw Szczepaniakf1e93342018-10-10 14:16:53 +0100104DEVICE_CSV=/sdcard/mlts_benchmark.csv
Przemyslaw Szczepaniak9429af42018-09-28 17:07:24 +0100105
106# Menukey - make sure screen is on
107adb shell "input keyevent 82"
108# Show homescreen
109adb shell wm dismiss-keyguard
110# Remove old benchmark csv data
Przemyslaw Szczepaniak3b903b92018-10-04 14:55:22 +0100111adb shell rm -f ${DEVICE_CSV}
Slava Shklyaevf2a8a3e2019-05-15 16:43:46 +0100112
Przemyslaw Szczepaniak9429af42018-09-28 17:07:24 +0100113# Set the shell pid as a top-app and run tests
Slava Shklyaevf2a8a3e2019-05-15 16:43:46 +0100114time 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 +0100115adb pull $DEVICE_CSV $HOST_CSV
116echo Benchmark data saved in $HOST_CSV
117
118$ANDROID_BUILD_TOP/test/mlts/benchmark/results/generate_result.py $HOST_CSV $RESULT_HTML
119echo Results stored in $RESULT_HTML
Przemyslaw Szczepaniak06a8d362018-10-15 11:26:56 +0100120xdg-open $RESULT_HTML