101 lines
3.3 KiB
Bash
Executable File
101 lines
3.3 KiB
Bash
Executable File
#!/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/packages/modules/NeuralNetworks/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/packages/modules/NeuralNetworks/tools/parse_benchmark.py $LOGFILE
|