123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100 |
- #!/bin/bash
- #
- # Build benchmark app and run it, mimicking a user-initiated run
- #
- # Output is logged to a temporary folder and summarized in txt and JSON formats.
- #
- # Parameters
- # - number of runs
- NUMBER_RUNS=10
- if [ ! -z $1 ]; then
- NUMBER_RUNS=$1
- fi
- if [[ -z "$ANDROID_BUILD_TOP" ]]; then
- echo ANDROID_BUILD_TOP not set, bailing out
- echo you must run lunch before running this script
- exit 1
- fi
- set -e
- cd $ANDROID_BUILD_TOP
- LOGDIR=$(mktemp -d)/nnapi-logs
- mkdir -p $LOGDIR
- echo Creating logs in $LOGDIR
- adb -d root
- # Skip setup wizard and remount (read-write)
- if ! adb -d shell test -f /data/local.prop; then
- adb -d shell 'echo ro.setupwizard.mode=DISABLED > /data/local.prop'
- adb -d shell 'chmod 644 /data/local.prop'
- adb -d shell 'settings put global device_provisioned 1*'
- adb -d shell 'settings put secure user_setup_complete 1'
- adb -d disable-verity
- adb -d reboot
- sleep 5
- adb wait-for-usb-device remount
- fi
- # Build and install NNAPI runtime shared library
- make libneuralnetworks
- adb -d shell stop
- adb -d remount
- adb -d push $OUT/system/lib/libneuralnetworks.so /system/lib/libneuralnetworks.so
- adb -d push $OUT/system/lib64/libneuralnetworks.so /system/lib64/libneuralnetworks.so
- adb -d shell start
- # Build and install benchmark app
- make NeuralNetworksApiBenchmark
- adb -d install $OUT/data/app/NeuralNetworksApiBenchmark/NeuralNetworksApiBenchmark.apk
- # Enable menu key press through adb
- adb -d shell 'echo testing > /data/local/enable_menu_key'
- # Leave screen on (affects scheduling)
- adb -d shell settings put system screen_off_timeout 86400000
- # Stop background apps, seem to take ~10% CPU otherwise
- set +e
- adb -d shell 'pm disable com.google.android.googlequicksearchbox'
- adb shell 'pm list packages -f' | sed -e 's/.*=//' | sed 's/\r//g' | grep "com.breel.wallpapers" | while read pkg; do adb -d shell "pm disable $pkg"; done;
- set -e
- adb -d shell setprop debug.nn.cpuonly 0
- adb -d shell setprop debug.nn.vlog 0
- echo running $NUMBER_RUNS times
- # Run on CPU only
- LOGFILE=$LOGDIR/perf-cpu.txt
- echo "TFLite" | tee $LOGFILE
- for i in $(seq 1 $NUMBER_RUNS); do
- echo "Run $i / $NUMBER_RUNS" | tee -a $LOGFILE
- # Menukey - make sure screen is on
- adb shell "input keyevent 82"
- # Show homescreen
- adb shell wm dismiss-keyguard
- # Set the shell pid as a top-app and run tests
- adb shell 'echo $$ > /dev/stune/top-app/tasks; am instrument -w -e size large -e class com.android.nn.benchmark.app.TFLiteTest com.android.nn.benchmark.app/androidx.test.runner.AndroidJUnitRunner' | tee -a $LOGFILE
- sleep 10 # let CPU cool down
- done
- echo "CPU run data from 'parse_benchmark.py $LOGFILE'"
- $ANDROID_BUILD_TOP/frameworks/ml/nn/tools/parse_benchmark.py $LOGFILE
- # Run with driver
- LOGFILE=$LOGDIR/perf-driver.txt
- echo "Driver" | tee $LOGFILE
- for i in $(seq 1 $NUMBER_RUNS); do
- echo "Run $i / $NUMBER_RUNS" | tee -a $LOGFILE
- # Menukey - make sure screen is on
- adb shell "input keyevent 82"
- # Show homescreen
- adb shell wm dismiss-keyguard
- # Set the shell pid as a top-app and run tests
- adb shell 'echo $$ > /dev/stune/top-app/tasks; am instrument -w -e size large -e class com.android.nn.benchmark.app.NNTest com.android.nn.benchmark.app/androidx.test.runner.AndroidJUnitRunner' | tee -a $LOGFILE
- done
- echo "Driver run data from 'parse_benchmark.py $LOGFILE'"
- $ANDROID_BUILD_TOP/frameworks/ml/nn/tools/parse_benchmark.py $LOGFILE
|