blob: cd4b86e36112b2f1491e19887575d1fd8576d969 [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.
6#
7# Parameters
8# - number of runs
9
10if [[ -z "$ANDROID_BUILD_TOP" ]]; then
11 echo ANDROID_BUILD_TOP not set, bailing out
12 echo you must run lunch before running this script
13 exit 1
14fi
15
16set -e
17cd $ANDROID_BUILD_TOP
18
19LOGDIR=$(mktemp -d)/mlts-logs
Przemyslaw Szczepaniak6526a9b2018-11-02 13:06:11 +000020
Przemyslaw Szczepaniak9429af42018-09-28 17:07:24 +010021mkdir -p $LOGDIR
22echo Creating logs in $LOGDIR
23
Przemyslaw Szczepaniak9429af42018-09-28 17:07:24 +010024# Build and install benchmark app
25make NeuralNetworksApiBenchmark
Stephen Hines18704f12019-04-12 17:20:25 -070026if ! adb install -r $OUT/testcases/NeuralNetworksApiBenchmark/arm64/NeuralNetworksApiBenchmark.apk; then
Przemyslaw Szczepaniak15c1f352018-10-18 13:14:34 +010027 adb uninstall com.android.nn.benchmark.app
Stephen Hines18704f12019-04-12 17:20:25 -070028 adb install -r $OUT/testcases/NeuralNetworksApiBenchmark/arm64/NeuralNetworksApiBenchmark.apk
Przemyslaw Szczepaniak15c1f352018-10-18 13:14:34 +010029fi
Przemyslaw Szczepaniak9429af42018-09-28 17:07:24 +010030
Przemyslaw Szczepaniak6526a9b2018-11-02 13:06:11 +000031
Przemyslaw Szczepaniakf1e93342018-10-10 14:16:53 +010032# Should we figure out if we run on release device
33if [ -z "$MLTS_RELEASE_DEVICE" ]; then
Przemyslaw Szczepaniak15c1f352018-10-18 13:14:34 +010034 BUILD_DESCRIPTION=`adb shell getprop ro.build.description`
Przemyslaw Szczepaniakf1e93342018-10-10 14:16:53 +010035 if [[ $BUILD_DESCRIPTION =~ .*release.* ]]
36 then
37 MLTS_RELEASE_DEVICE=True
38 else
39 MLTS_RELEASE_DEVICE=False
40 fi
41fi
42
Przemyslaw Szczepaniak6526a9b2018-11-02 13:06:11 +000043# Pass --no-isolated-storage to am instrument?
44BUILD_VERSION_RELEASE=`adb shell getprop ro.build.version.release`
45AM_INSTRUMENT_FLAGS=""
46if [[ $BUILD_VERSION_RELEASE == "Q" ]]; then
47 AM_INSTRUMENT_FLAGS+="--no-isolated-storage"
48fi
49
Przemyslaw Szczepaniakf1e93342018-10-10 14:16:53 +010050if [[ "$MLTS_RELEASE_DEVICE" == "True" ]]; then
Przemyslaw Szczepaniakf1e93342018-10-10 14:16:53 +010051 TEST_EXTENRAL_STORAGE="com.android.nn.benchmark.app/com.android.nn.benchmark.util.TestExternalStorageActivity"
52 while ! adb shell "am start -W $TEST_EXTENRAL_STORAGE && rm /sdcard/mlts_write_external_storage" > /dev/null 2>&1; do
53 echo "************************************************************"
54 echo "Grant External storage write permissions to MLTS to proceed!"
55 echo "************************************************************"
56 read -n 1 -r -p "Continue? (press any key)"
57 echo
58 done
59else
Przemyslaw Szczepaniak15c1f352018-10-18 13:14:34 +010060 adb root
61 adb shell "pm grant com.android.nn.benchmark.app android.permission.WRITE_EXTERNAL_STORAGE"
Przemyslaw Szczepaniakf1e93342018-10-10 14:16:53 +010062 # Skip setup wizard and remount (read-write)
Przemyslaw Szczepaniak15c1f352018-10-18 13:14:34 +010063 if ! adb shell test -f /data/local.prop; then
64 adb shell 'echo ro.setupwizard.mode=DISABLED > /data/local.prop'
65 adb shell 'chmod 644 /data/local.prop'
66 adb shell 'settings put global device_provisioned 1*'
67 adb shell 'settings put secure user_setup_complete 1'
68 adb disable-verity
69 adb reboot
Przemyslaw Szczepaniakf1e93342018-10-10 14:16:53 +010070 sleep 5
Andreas Gampe055abd92019-04-17 13:36:16 -070071 adb wait-for-usb-device root
Przemyslaw Szczepaniakf1e93342018-10-10 14:16:53 +010072 adb wait-for-usb-device remount
Przemyslaw Szczepaniak15c1f352018-10-18 13:14:34 +010073 sleep 5
Przemyslaw Szczepaniakf1e93342018-10-10 14:16:53 +010074 fi
75 set +e
76 # Enable menu key press through adb
Przemyslaw Szczepaniak15c1f352018-10-18 13:14:34 +010077 adb shell 'echo testing > /data/local/enable_menu_key'
Przemyslaw Szczepaniakf1e93342018-10-10 14:16:53 +010078 # Leave screen on (affects scheduling)
Przemyslaw Szczepaniak15c1f352018-10-18 13:14:34 +010079 adb shell settings put system screen_off_timeout 86400000
Przemyslaw Szczepaniakf1e93342018-10-10 14:16:53 +010080 # Stop background apps, seem to take ~10% CPU otherwise
Przemyslaw Szczepaniak15c1f352018-10-18 13:14:34 +010081 adb shell 'pm disable com.google.android.googlequicksearchbox'
82 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 +010083 set -e
84fi
85
Przemyslaw Szczepaniak15c1f352018-10-18 13:14:34 +010086adb shell setprop debug.nn.cpuonly 0
87adb shell setprop debug.nn.vlog 0
Przemyslaw Szczepaniak9429af42018-09-28 17:07:24 +010088
89HOST_CSV=$LOGDIR/benchmark.csv
90RESULT_HTML=$LOGDIR/result.html
Przemyslaw Szczepaniakf1e93342018-10-10 14:16:53 +010091DEVICE_CSV=/sdcard/mlts_benchmark.csv
Przemyslaw Szczepaniak9429af42018-09-28 17:07:24 +010092
93# Menukey - make sure screen is on
94adb shell "input keyevent 82"
95# Show homescreen
96adb shell wm dismiss-keyguard
97# Remove old benchmark csv data
Przemyslaw Szczepaniak3b903b92018-10-04 14:55:22 +010098adb shell rm -f ${DEVICE_CSV}
Przemyslaw Szczepaniak9429af42018-09-28 17:07:24 +010099# Set the shell pid as a top-app and run tests
Brett Chabot443ca522018-12-13 19:06:57 -0800100adb shell "echo $$ > /dev/stune/top-app/tasks; am instrument ${AM_INSTRUMENT_FLAGS} -w -e size large -e class com.android.nn.benchmark.app.NNScoringTest com.android.nn.benchmark.app/androidx.test.runner.AndroidJUnitRunner"
Przemyslaw Szczepaniak9429af42018-09-28 17:07:24 +0100101adb pull $DEVICE_CSV $HOST_CSV
102echo Benchmark data saved in $HOST_CSV
103
104$ANDROID_BUILD_TOP/test/mlts/benchmark/results/generate_result.py $HOST_CSV $RESULT_HTML
105echo Results stored in $RESULT_HTML
Przemyslaw Szczepaniak06a8d362018-10-15 11:26:56 +0100106xdg-open $RESULT_HTML