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
 |