1dfbbdbc6d12e7d522a72d9a3d470c1a284aa1f83Michael Butler#!/bin/bash 2dfbbdbc6d12e7d522a72d9a3d470c1a284aa1f83Michael Butler 3dfbbdbc6d12e7d522a72d9a3d470c1a284aa1f83Michael Butler 4dfbbdbc6d12e7d522a72d9a3d470c1a284aa1f83Michael Butler# DEFAULT VALUES 5dfbbdbc6d12e7d522a72d9a3d470c1a284aa1f83Michael ButlerTESTS=() 6dfbbdbc6d12e7d522a72d9a3d470c1a284aa1f83Michael ButlerMIN_TIME=0.0 7dfbbdbc6d12e7d522a72d9a3d470c1a284aa1f83Michael ButlerMIN_ITER=0 8dfbbdbc6d12e7d522a72d9a3d470c1a284aa1f83Michael ButlerBATCH_MODE=0 9dfbbdbc6d12e7d522a72d9a3d470c1a284aa1f83Michael ButlerGRAPH_LINE=0 10dfbbdbc6d12e7d522a72d9a3d470c1a284aa1f83Michael ButlerGRAPH_ZERO=0 11dfbbdbc6d12e7d522a72d9a3d470c1a284aa1f83Michael ButlerVARIABLES= 12dfbbdbc6d12e7d522a72d9a3d470c1a284aa1f83Michael Butler 13dfbbdbc6d12e7d522a72d9a3d470c1a284aa1f83Michael Butler 14dfbbdbc6d12e7d522a72d9a3d470c1a284aa1f83Michael Butler# DEFINES 15dfbbdbc6d12e7d522a72d9a3d470c1a284aa1f83Michael ButlerTEST_NAMES=( 16dfbbdbc6d12e7d522a72d9a3d470c1a284aa1f83Michael Butler LEVELS_VEC3_RELAXED LEVELS_VEC4_RELAXED LEVELS_VEC3_FULL LEVELS_VEC4_FULL BLUR_RADIUS_25 # 00-04 17dfbbdbc6d12e7d522a72d9a3d470c1a284aa1f83Michael Butler INTRINSIC_BLUR_RADIUS_25 GREYSCALE GRAIN FISHEYE_FULL FISHEYE_RELAXED # 05-09 18dfbbdbc6d12e7d522a72d9a3d470c1a284aa1f83Michael Butler FISHEYE_APPROXIMATE_FULL FISHEYE_APPROXIMATE_RELAXED VIGNETTE_FULL VIGNETTE_RELAXED VIGNETTE_APPROXIMATE_FULL # 10-14 19dfbbdbc6d12e7d522a72d9a3d470c1a284aa1f83Michael Butler VIGNETTE_APPROXIMATE_RELAXED GROUP_TEST_EMULATED GROUP_TEST_NATIVE CONVOLVE_3X3 INTRINSICS_CONVOLVE_3X3 # 15-19 20dfbbdbc6d12e7d522a72d9a3d470c1a284aa1f83Michael Butler COLOR_MATRIX INTRINSICS_COLOR_MATRIX INTRINSICS_COLOR_MATRIX_GREY COPY CROSS_PROCESS_USING_LUT # 20-24 21dfbbdbc6d12e7d522a72d9a3d470c1a284aa1f83Michael Butler CONVOLVE_5X5 INTRINSICS_CONVOLVE_5X5 MANDELBROT_FLOAT INTRINSICS_BLEND INTRINSICS_BLUR_25G # 25-29 22dfbbdbc6d12e7d522a72d9a3d470c1a284aa1f83Michael Butler VIBRANCE BW_FILTER SHADOWS CONTRAST EXPOSURE # 30-34 23dfbbdbc6d12e7d522a72d9a3d470c1a284aa1f83Michael Butler WHITE_BALANCE COLOR_CUBE COLOR_CUBE_3D_INTRINSIC ARTISTIC1 RESIZE_BI_SCRIPT # 35-39 24dfbbdbc6d12e7d522a72d9a3d470c1a284aa1f83Michael Butler RESIZE_BI_INTRINSIC POSTERIZE_INVOKE POSTERIZE_SET HISTOGRAM_INTRINSIC HISTOGRAM_SCRIPT # 40-44 25dfbbdbc6d12e7d522a72d9a3d470c1a284aa1f83Michael Butler MANDELBROT_DOUBLE BLUR_RADIUS_25_HALF # 45-46 26dfbbdbc6d12e7d522a72d9a3d470c1a284aa1f83Michael Butler) 27dfbbdbc6d12e7d522a72d9a3d470c1a284aa1f83Michael Butler 28dfbbdbc6d12e7d522a72d9a3d470c1a284aa1f83Michael ButlerFUNCTION_NAMES=( 29dfbbdbc6d12e7d522a72d9a3d470c1a284aa1f83Michael Butler testLevelsVec3Relaxed testLevelsVec4Relaxed testLevelsVec3Full testLevelsVec4Full testBlurRadius25 # 00-04 30dfbbdbc6d12e7d522a72d9a3d470c1a284aa1f83Michael Butler testIntrinsicBlurRadius25 testGreyscale testGrain testFisheyeFull testFishEyeRelaxed # 05-09 31dfbbdbc6d12e7d522a72d9a3d470c1a284aa1f83Michael Butler testFisheyeApproximateFull testFisheyeApproximateRelaxed testVignetteFull testVignetteRelaxed testVignetteApproximateFull # 10-14 32dfbbdbc6d12e7d522a72d9a3d470c1a284aa1f83Michael Butler testVignetteApproximateRelaxed testGroupTestEmulated testGroupTestNative testConvolve3x3 testIntrinsicsConvolve3x3 # 15-19 33dfbbdbc6d12e7d522a72d9a3d470c1a284aa1f83Michael Butler testColorMatrix testIntrinsicsColorMatrix testIntrinsicsColorMatrixGrey testCopy testCrossProcessUsingLUT # 20-24 34dfbbdbc6d12e7d522a72d9a3d470c1a284aa1f83Michael Butler testConvolve5x5 testIntrinsicsConvolve5x5 testMandelbrot testIntrinsicsBlend testIntrinsicsBlur25G # 25-29 35dfbbdbc6d12e7d522a72d9a3d470c1a284aa1f83Michael Butler testVibrance testBWFilter testShadows testContrast testExposure # 30-34 36dfbbdbc6d12e7d522a72d9a3d470c1a284aa1f83Michael Butler testWhiteBalance testColorCube testColorCube3DIntrinsic testArtistic1 testResizeBiCubicScript # 35-39 37dfbbdbc6d12e7d522a72d9a3d470c1a284aa1f83Michael Butler testResizeBiCubicIntrinsic testPosterizeInvoke testPosterizeSet testHistogramIntrinsic testHistogramScript # 40-44 38dfbbdbc6d12e7d522a72d9a3d470c1a284aa1f83Michael Butler testMandelbrotfp64 testBlurRadius25Half # 45-46 39dfbbdbc6d12e7d522a72d9a3d470c1a284aa1f83Michael Butler) 40dfbbdbc6d12e7d522a72d9a3d470c1a284aa1f83Michael Butler 41dfbbdbc6d12e7d522a72d9a3d470c1a284aa1f83Michael ButlerRUNNER="com.android.rs.imagejb/android.support.test.runner.AndroidJUnitRunner" 42dfbbdbc6d12e7d522a72d9a3d470c1a284aa1f83Michael ButlerTEST_ROOT="com.android.rs.imagejb.ImageProcessingTest" 43dfbbdbc6d12e7d522a72d9a3d470c1a284aa1f83Michael Butler 44dfbbdbc6d12e7d522a72d9a3d470c1a284aa1f83Michael Butler 45dfbbdbc6d12e7d522a72d9a3d470c1a284aa1f83Michael Butler# Helper functions 46dfbbdbc6d12e7d522a72d9a3d470c1a284aa1f83Michael Butlershow_help() { 47dfbbdbc6d12e7d522a72d9a3d470c1a284aa1f83Michael Butler echo " 48dfbbdbc6d12e7d522a72d9a3d470c1a284aa1f83Michael Butler Usage: ${0##*/} [OPTIONS]... 49dfbbdbc6d12e7d522a72d9a3d470c1a284aa1f83Michael Butler Do stuff with FILE and write the result to standard output. With no FILE 50dfbbdbc6d12e7d522a72d9a3d470c1a284aa1f83Michael Butler or when FILE is -, read standard input. 51dfbbdbc6d12e7d522a72d9a3d470c1a284aa1f83Michael Butler 52dfbbdbc6d12e7d522a72d9a3d470c1a284aa1f83Michael Butler -h, -?, --?, --help display this help message 53dfbbdbc6d12e7d522a72d9a3d470c1a284aa1f83Michael Butler -t, --time K set the minimum time (in seconds) each test should run 54dfbbdbc6d12e7d522a72d9a3d470c1a284aa1f83Michael Butler -i, --iteration[s] K set the minimum number of iterations each test should run 55dfbbdbc6d12e7d522a72d9a3d470c1a284aa1f83Michael Butler -c, --case[s] T1 [T2]... specify the number corresponding to each test to be run; 56dfbbdbc6d12e7d522a72d9a3d470c1a284aa1f83Michael Butler the test IDs are below 57dfbbdbc6d12e7d522a72d9a3d470c1a284aa1f83Michael Butler -b, --batch run all tests together for speed 58dfbbdbc6d12e7d522a72d9a3d470c1a284aa1f83Michael Butler -f, --bestfit add best fit line to graph 59dfbbdbc6d12e7d522a72d9a3d470c1a284aa1f83Michael Butler -z, --zero set graph's minimum yrange to 0 60dfbbdbc6d12e7d522a72d9a3d470c1a284aa1f83Michael Butler " 61dfbbdbc6d12e7d522a72d9a3d470c1a284aa1f83Michael Butler echo "Available test cases:" 62dfbbdbc6d12e7d522a72d9a3d470c1a284aa1f83Michael Butler for i in `seq 0 $((${#TEST_NAMES[@]} - 1))`; do 63dfbbdbc6d12e7d522a72d9a3d470c1a284aa1f83Michael Butler echo " $i: ${TEST_NAMES[$i]}" 64dfbbdbc6d12e7d522a72d9a3d470c1a284aa1f83Michael Butler done 65dfbbdbc6d12e7d522a72d9a3d470c1a284aa1f83Michael Butler echo 66dfbbdbc6d12e7d522a72d9a3d470c1a284aa1f83Michael Butler} 67dfbbdbc6d12e7d522a72d9a3d470c1a284aa1f83Michael Butlerfileexists() { 68dfbbdbc6d12e7d522a72d9a3d470c1a284aa1f83Michael Butler [ `adb shell "[ -f $1 ] && echo found"` ] 69dfbbdbc6d12e7d522a72d9a3d470c1a284aa1f83Michael Butler} 70dfbbdbc6d12e7d522a72d9a3d470c1a284aa1f83Michael Butler 71dfbbdbc6d12e7d522a72d9a3d470c1a284aa1f83Michael Butler 72dfbbdbc6d12e7d522a72d9a3d470c1a284aa1f83Michael Butler# display help if blank argument list 73dfbbdbc6d12e7d522a72d9a3d470c1a284aa1f83Michael Butlerif [ $# -eq 0 ]; then 74dfbbdbc6d12e7d522a72d9a3d470c1a284aa1f83Michael Butler show_help 75dfbbdbc6d12e7d522a72d9a3d470c1a284aa1f83Michael Butler exit 76dfbbdbc6d12e7d522a72d9a3d470c1a284aa1f83Michael Butlerfi 77dfbbdbc6d12e7d522a72d9a3d470c1a284aa1f83Michael Butler 78dfbbdbc6d12e7d522a72d9a3d470c1a284aa1f83Michael Butler# command line parsing 79dfbbdbc6d12e7d522a72d9a3d470c1a284aa1f83Michael Butlerusing_cases=0 80dfbbdbc6d12e7d522a72d9a3d470c1a284aa1f83Michael Butlerwhile [ $# -gt 0 ]; do 81dfbbdbc6d12e7d522a72d9a3d470c1a284aa1f83Michael Butler case $1 in 82dfbbdbc6d12e7d522a72d9a3d470c1a284aa1f83Michael Butler -h|-\?|--\?|--help) 83dfbbdbc6d12e7d522a72d9a3d470c1a284aa1f83Michael Butler show_help 84dfbbdbc6d12e7d522a72d9a3d470c1a284aa1f83Michael Butler exit 85dfbbdbc6d12e7d522a72d9a3d470c1a284aa1f83Michael Butler ;; 86dfbbdbc6d12e7d522a72d9a3d470c1a284aa1f83Michael Butler -t|--time) 87dfbbdbc6d12e7d522a72d9a3d470c1a284aa1f83Michael Butler using_cases=0 88dfbbdbc6d12e7d522a72d9a3d470c1a284aa1f83Michael Butler if [ -n "$2" ]; then 89dfbbdbc6d12e7d522a72d9a3d470c1a284aa1f83Michael Butler MIN_TIME=$2 90dfbbdbc6d12e7d522a72d9a3d470c1a284aa1f83Michael Butler shift 91dfbbdbc6d12e7d522a72d9a3d470c1a284aa1f83Michael Butler shift 92dfbbdbc6d12e7d522a72d9a3d470c1a284aa1f83Michael Butler else 93dfbbdbc6d12e7d522a72d9a3d470c1a284aa1f83Michael Butler echo 'ERROR: "--time" requires a non-empty option argument.' 94dfbbdbc6d12e7d522a72d9a3d470c1a284aa1f83Michael Butler exit 1 95dfbbdbc6d12e7d522a72d9a3d470c1a284aa1f83Michael Butler fi 96dfbbdbc6d12e7d522a72d9a3d470c1a284aa1f83Michael Butler ;; 97dfbbdbc6d12e7d522a72d9a3d470c1a284aa1f83Michael Butler -i|--iter|--iters|--iteration|--iterations) 98dfbbdbc6d12e7d522a72d9a3d470c1a284aa1f83Michael Butler using_cases=0 99dfbbdbc6d12e7d522a72d9a3d470c1a284aa1f83Michael Butler if [ -n "$2" ]; then 100dfbbdbc6d12e7d522a72d9a3d470c1a284aa1f83Michael Butler MIN_ITER=$2 101dfbbdbc6d12e7d522a72d9a3d470c1a284aa1f83Michael Butler shift 102dfbbdbc6d12e7d522a72d9a3d470c1a284aa1f83Michael Butler shift 103dfbbdbc6d12e7d522a72d9a3d470c1a284aa1f83Michael Butler else 104dfbbdbc6d12e7d522a72d9a3d470c1a284aa1f83Michael Butler echo 'ERROR: "--iteration" requires a non-empty option argument.' 105dfbbdbc6d12e7d522a72d9a3d470c1a284aa1f83Michael Butler exit 1 106dfbbdbc6d12e7d522a72d9a3d470c1a284aa1f83Michael Butler fi 107dfbbdbc6d12e7d522a72d9a3d470c1a284aa1f83Michael Butler ;; 108dfbbdbc6d12e7d522a72d9a3d470c1a284aa1f83Michael Butler -c|--case|--cases) 109dfbbdbc6d12e7d522a72d9a3d470c1a284aa1f83Michael Butler if [ -n "$2" ]; then 110dfbbdbc6d12e7d522a72d9a3d470c1a284aa1f83Michael Butler using_cases=1 111dfbbdbc6d12e7d522a72d9a3d470c1a284aa1f83Michael Butler shift 112dfbbdbc6d12e7d522a72d9a3d470c1a284aa1f83Michael Butler else 113dfbbdbc6d12e7d522a72d9a3d470c1a284aa1f83Michael Butler echo 'ERROR: "--case" requires a non-empty option argument.' 114dfbbdbc6d12e7d522a72d9a3d470c1a284aa1f83Michael Butler exit 1 115dfbbdbc6d12e7d522a72d9a3d470c1a284aa1f83Michael Butler fi 116dfbbdbc6d12e7d522a72d9a3d470c1a284aa1f83Michael Butler ;; 117dfbbdbc6d12e7d522a72d9a3d470c1a284aa1f83Michael Butler -b|--batch) 118dfbbdbc6d12e7d522a72d9a3d470c1a284aa1f83Michael Butler using_cases=0 119dfbbdbc6d12e7d522a72d9a3d470c1a284aa1f83Michael Butler BATCH_MODE=1 120dfbbdbc6d12e7d522a72d9a3d470c1a284aa1f83Michael Butler shift 121dfbbdbc6d12e7d522a72d9a3d470c1a284aa1f83Michael Butler ;; 122dfbbdbc6d12e7d522a72d9a3d470c1a284aa1f83Michael Butler -f|--bestfit) 123dfbbdbc6d12e7d522a72d9a3d470c1a284aa1f83Michael Butler using_cases=0 124dfbbdbc6d12e7d522a72d9a3d470c1a284aa1f83Michael Butler GRAPH_LINE=1 125dfbbdbc6d12e7d522a72d9a3d470c1a284aa1f83Michael Butler shift 126dfbbdbc6d12e7d522a72d9a3d470c1a284aa1f83Michael Butler ;; 127dfbbdbc6d12e7d522a72d9a3d470c1a284aa1f83Michael Butler -z|--zero) 128dfbbdbc6d12e7d522a72d9a3d470c1a284aa1f83Michael Butler using_cases=0 129dfbbdbc6d12e7d522a72d9a3d470c1a284aa1f83Michael Butler GRAPH_ZERO=1 130dfbbdbc6d12e7d522a72d9a3d470c1a284aa1f83Michael Butler shift 131dfbbdbc6d12e7d522a72d9a3d470c1a284aa1f83Michael Butler ;; 132dfbbdbc6d12e7d522a72d9a3d470c1a284aa1f83Michael Butler all) 133dfbbdbc6d12e7d522a72d9a3d470c1a284aa1f83Michael Butler if [ $using_cases -eq 1 ]; then 134dfbbdbc6d12e7d522a72d9a3d470c1a284aa1f83Michael Butler using_cases=0 135dfbbdbc6d12e7d522a72d9a3d470c1a284aa1f83Michael Butler TESTS=(`seq 0 $((${#TEST_NAMES[@]} - 1))`) 136dfbbdbc6d12e7d522a72d9a3d470c1a284aa1f83Michael Butler shift 137dfbbdbc6d12e7d522a72d9a3d470c1a284aa1f83Michael Butler else 138dfbbdbc6d12e7d522a72d9a3d470c1a284aa1f83Michael Butler echo "ERROR: Invalid option: $1" 139dfbbdbc6d12e7d522a72d9a3d470c1a284aa1f83Michael Butler fi 140dfbbdbc6d12e7d522a72d9a3d470c1a284aa1f83Michael Butler ;; 141dfbbdbc6d12e7d522a72d9a3d470c1a284aa1f83Michael Butler [0-9]*) 142dfbbdbc6d12e7d522a72d9a3d470c1a284aa1f83Michael Butler if [ $using_cases -eq 1 ]; then 143dfbbdbc6d12e7d522a72d9a3d470c1a284aa1f83Michael Butler TESTS+=($1) 144dfbbdbc6d12e7d522a72d9a3d470c1a284aa1f83Michael Butler shift 145dfbbdbc6d12e7d522a72d9a3d470c1a284aa1f83Michael Butler else 146dfbbdbc6d12e7d522a72d9a3d470c1a284aa1f83Michael Butler echo "ERROR: Invalid option: $1" 147dfbbdbc6d12e7d522a72d9a3d470c1a284aa1f83Michael Butler exit 1 148dfbbdbc6d12e7d522a72d9a3d470c1a284aa1f83Michael Butler fi 149dfbbdbc6d12e7d522a72d9a3d470c1a284aa1f83Michael Butler ;; 150dfbbdbc6d12e7d522a72d9a3d470c1a284aa1f83Michael Butler *) 151dfbbdbc6d12e7d522a72d9a3d470c1a284aa1f83Michael Butler echo "ERROR: Invalid option: $1" 152dfbbdbc6d12e7d522a72d9a3d470c1a284aa1f83Michael Butler exit 1 153dfbbdbc6d12e7d522a72d9a3d470c1a284aa1f83Michael Butler ;; 154dfbbdbc6d12e7d522a72d9a3d470c1a284aa1f83Michael Butler esac 155dfbbdbc6d12e7d522a72d9a3d470c1a284aa1f83Michael Butlerdone 156dfbbdbc6d12e7d522a72d9a3d470c1a284aa1f83Michael Butler 157dfbbdbc6d12e7d522a72d9a3d470c1a284aa1f83Michael Butler# error checking 158dfbbdbc6d12e7d522a72d9a3d470c1a284aa1f83Michael Butlerif [ ${#TESTS[@]} -eq 0 ]; then 159dfbbdbc6d12e7d522a72d9a3d470c1a284aa1f83Michael Butler echo "ERROR: need at least one --case" 160dfbbdbc6d12e7d522a72d9a3d470c1a284aa1f83Michael Butler exit 1 161dfbbdbc6d12e7d522a72d9a3d470c1a284aa1f83Michael Butlerfi 162dfbbdbc6d12e7d522a72d9a3d470c1a284aa1f83Michael Butler 163dfbbdbc6d12e7d522a72d9a3d470c1a284aa1f83Michael Butler# configure launch variables 164dfbbdbc6d12e7d522a72d9a3d470c1a284aa1f83Michael Butlerif [[ ( $MIN_TIME == "0.0" ) && ( $MIN_ITER -eq 0 ) ]]; then 165dfbbdbc6d12e7d522a72d9a3d470c1a284aa1f83Michael Butler MIN_TIME=1.0 166dfbbdbc6d12e7d522a72d9a3d470c1a284aa1f83Michael Butler MIN_ITER=2 167dfbbdbc6d12e7d522a72d9a3d470c1a284aa1f83Michael Butlerfi 168dfbbdbc6d12e7d522a72d9a3d470c1a284aa1f83Michael ButlerVARIABLES="$VARIABLES -e minimum_test_runtime $MIN_TIME -e minimum_test_iterations $MIN_ITER" 169dfbbdbc6d12e7d522a72d9a3d470c1a284aa1f83Michael ButlerTESTS=( `printf "%s\n" "${TESTS[@]}" | sort -n | uniq` ) 170dfbbdbc6d12e7d522a72d9a3d470c1a284aa1f83Michael Butler 171dfbbdbc6d12e7d522a72d9a3d470c1a284aa1f83Michael Butler# print prep 172dfbbdbc6d12e7d522a72d9a3d470c1a284aa1f83Michael Butlerecho 173dfbbdbc6d12e7d522a72d9a3d470c1a284aa1f83Michael Butler[ $BATCH_MODE -eq 0 ] && echo "Running tests:" || echo "Running tests (in batch mode):" 174dfbbdbc6d12e7d522a72d9a3d470c1a284aa1f83Michael Butlerfor i in ${TESTS[@]}; do 175dfbbdbc6d12e7d522a72d9a3d470c1a284aa1f83Michael Butler echo $i: ${TEST_NAMES[$i]} 176dfbbdbc6d12e7d522a72d9a3d470c1a284aa1f83Michael Butlerdone 177dfbbdbc6d12e7d522a72d9a3d470c1a284aa1f83Michael Butlerecho "with minimum runtime per test of $MIN_TIME seconds and 178dfbbdbc6d12e7d522a72d9a3d470c1a284aa1f83Michael Butlerminimum number of $MIN_ITER iterations per test" 179dfbbdbc6d12e7d522a72d9a3d470c1a284aa1f83Michael Butlerecho 180dfbbdbc6d12e7d522a72d9a3d470c1a284aa1f83Michael Butler 181dfbbdbc6d12e7d522a72d9a3d470c1a284aa1f83Michael Butler# setup 182dfbbdbc6d12e7d522a72d9a3d470c1a284aa1f83Michael Butlerecho 183dfbbdbc6d12e7d522a72d9a3d470c1a284aa1f83Michael Butlerif [[ "`adb shell id | tr -d '\r' | awk -F'[()]' '{print $2}'`" != "root" ]]; then 184dfbbdbc6d12e7d522a72d9a3d470c1a284aa1f83Michael Butler adb root 185dfbbdbc6d12e7d522a72d9a3d470c1a284aa1f83Michael Butler adb wait-for-device 186dfbbdbc6d12e7d522a72d9a3d470c1a284aa1f83Michael Butlerfi 187dfbbdbc6d12e7d522a72d9a3d470c1a284aa1f83Michael Butler 188dfbbdbc6d12e7d522a72d9a3d470c1a284aa1f83Michael Butler# grant permission 189dfbbdbc6d12e7d522a72d9a3d470c1a284aa1f83Michael Butleradb shell pm grant com.android.rs.imagejb android.permission.READ_EXTERNAL_STORAGE 190dfbbdbc6d12e7d522a72d9a3d470c1a284aa1f83Michael Butleradb shell pm grant com.android.rs.imagejb android.permission.WRITE_EXTERNAL_STORAGE 191dfbbdbc6d12e7d522a72d9a3d470c1a284aa1f83Michael Butler 192dfbbdbc6d12e7d522a72d9a3d470c1a284aa1f83Michael Butler# Run each test individually... 193dfbbdbc6d12e7d522a72d9a3d470c1a284aa1f83Michael Butlerif [[ $BATCH_MODE -eq 0 ]]; then 194dfbbdbc6d12e7d522a72d9a3d470c1a284aa1f83Michael Butler 195dfbbdbc6d12e7d522a72d9a3d470c1a284aa1f83Michael Butler # run and plot each test result separately 196dfbbdbc6d12e7d522a72d9a3d470c1a284aa1f83Michael Butler for num in `seq 0 $((${#TESTS[@]} - 1))`; do 197dfbbdbc6d12e7d522a72d9a3d470c1a284aa1f83Michael Butler 198dfbbdbc6d12e7d522a72d9a3d470c1a284aa1f83Michael Butler # alias 199dfbbdbc6d12e7d522a72d9a3d470c1a284aa1f83Michael Butler testId=${TESTS[$num]} 200dfbbdbc6d12e7d522a72d9a3d470c1a284aa1f83Michael Butler 201dfbbdbc6d12e7d522a72d9a3d470c1a284aa1f83Michael Butler # report progress 202dfbbdbc6d12e7d522a72d9a3d470c1a284aa1f83Michael Butler printf "Running ${TEST_NAMES[$testId]} ($(($num + 1))/${#TESTS[@]})" 203dfbbdbc6d12e7d522a72d9a3d470c1a284aa1f83Michael Butler 204dfbbdbc6d12e7d522a72d9a3d470c1a284aa1f83Michael Butler # run individual test 205dfbbdbc6d12e7d522a72d9a3d470c1a284aa1f83Michael Butler adb shell "am instrument -w $VARIABLES -e class $TEST_ROOT#${FUNCTION_NAMES[$testId]} $RUNNER" > /dev/null 206dfbbdbc6d12e7d522a72d9a3d470c1a284aa1f83Michael Butler 207dfbbdbc6d12e7d522a72d9a3d470c1a284aa1f83Michael Butler # extract relevant data if present, write to temporary file 208dfbbdbc6d12e7d522a72d9a3d470c1a284aa1f83Michael Butler if fileexists /sdcard/rsTimes/${TEST_NAMES[$testId]}_DATA.txt; then 209dfbbdbc6d12e7d522a72d9a3d470c1a284aa1f83Michael Butler adb shell cat /sdcard/rsTimes/${TEST_NAMES[$testId]}_DATA.txt > timing.tmp 210dfbbdbc6d12e7d522a72d9a3d470c1a284aa1f83Michael Butler else 211dfbbdbc6d12e7d522a72d9a3d470c1a284aa1f83Michael Butler printf "\r \r" 212dfbbdbc6d12e7d522a72d9a3d470c1a284aa1f83Michael Butler echo "File ${TEST_NAMES[$testId]} not saved. Is ImageProcessing_jb able to run on this device?" 213dfbbdbc6d12e7d522a72d9a3d470c1a284aa1f83Michael Butler continue 214dfbbdbc6d12e7d522a72d9a3d470c1a284aa1f83Michael Butler fi 215dfbbdbc6d12e7d522a72d9a3d470c1a284aa1f83Michael Butler 216dfbbdbc6d12e7d522a72d9a3d470c1a284aa1f83Michael Butler # calculate avg and stdcoef 217dfbbdbc6d12e7d522a72d9a3d470c1a284aa1f83Michael Butler AVG=`cat timing.tmp | awk '{sum+=$2}END{printf "%.2f",sum/NR}'` 218dfbbdbc6d12e7d522a72d9a3d470c1a284aa1f83Michael Butler STDCOEF=`cat timing.tmp | awk '{sum+=$2;sos+=$2*$2}END{printf "%.2f",sqrt((sos-sum*sum/NR)/NR)/(sum/NR)*100}'` 219dfbbdbc6d12e7d522a72d9a3d470c1a284aa1f83Michael Butler 220dfbbdbc6d12e7d522a72d9a3d470c1a284aa1f83Michael Butler # create plot file 221dfbbdbc6d12e7d522a72d9a3d470c1a284aa1f83Michael Butler echo "# temporary file" > plot.tmp 222dfbbdbc6d12e7d522a72d9a3d470c1a284aa1f83Michael Butler echo "set style line 1 lc rgb '#0060ad' lt 1 lw 2 pt 7 ps 1" >> plot.tmp # --- blue 223dfbbdbc6d12e7d522a72d9a3d470c1a284aa1f83Michael Butler echo "set style line 2 lc rgb '#ff0000' lt 1 lw 2" >> plot.tmp # --- green 224dfbbdbc6d12e7d522a72d9a3d470c1a284aa1f83Michael Butler echo "set title \"${TEST_NAMES[$testId]} \(avg=$AVG ms, stdcoef=$STDCOEF%\)\"" >> plot.tmp 225dfbbdbc6d12e7d522a72d9a3d470c1a284aa1f83Michael Butler echo "set xlabel \"Iteration #\"" >> plot.tmp 226dfbbdbc6d12e7d522a72d9a3d470c1a284aa1f83Michael Butler echo "set ylabel \"Elapsed Time (ms)\"" >> plot.tmp 227dfbbdbc6d12e7d522a72d9a3d470c1a284aa1f83Michael Butler if [ $GRAPH_ZERO -eq 1 ]; then 228dfbbdbc6d12e7d522a72d9a3d470c1a284aa1f83Michael Butler echo "set yrange [0.0:*]" >> plot.tmp 229dfbbdbc6d12e7d522a72d9a3d470c1a284aa1f83Michael Butler fi 230dfbbdbc6d12e7d522a72d9a3d470c1a284aa1f83Michael Butler if [ $GRAPH_LINE -eq 1 ]; then 231dfbbdbc6d12e7d522a72d9a3d470c1a284aa1f83Michael Butler echo "set fit quiet" >> plot.tmp 232dfbbdbc6d12e7d522a72d9a3d470c1a284aa1f83Michael Butler echo "set fit logfile '/dev/null'" >> plot.tmp 233dfbbdbc6d12e7d522a72d9a3d470c1a284aa1f83Michael Butler echo "f(x) = a*x + b" >> plot.tmp 234dfbbdbc6d12e7d522a72d9a3d470c1a284aa1f83Michael Butler echo "fit f(x) 'timing.tmp' using 1:2 via a, b" >> plot.tmp 235dfbbdbc6d12e7d522a72d9a3d470c1a284aa1f83Michael Butler echo "string = sprintf('%.3fe-3*x+%.3f', a*1000, b)" >> plot.tmp 236dfbbdbc6d12e7d522a72d9a3d470c1a284aa1f83Michael Butler echo "plot 'timing.tmp' with linespoints ls 1 title 'Data', f(x) ls 2 title string" >> plot.tmp 237dfbbdbc6d12e7d522a72d9a3d470c1a284aa1f83Michael Butler else 238dfbbdbc6d12e7d522a72d9a3d470c1a284aa1f83Michael Butler echo "plot 'timing.tmp' with linespoints ls 1 title 'Data'" >> plot.tmp 239dfbbdbc6d12e7d522a72d9a3d470c1a284aa1f83Michael Butler fi 240dfbbdbc6d12e7d522a72d9a3d470c1a284aa1f83Michael Butler 241dfbbdbc6d12e7d522a72d9a3d470c1a284aa1f83Michael Butler # plot data as simple line graph 242dfbbdbc6d12e7d522a72d9a3d470c1a284aa1f83Michael Butler gnuplot -p plot.tmp 243dfbbdbc6d12e7d522a72d9a3d470c1a284aa1f83Michael Butler 244dfbbdbc6d12e7d522a72d9a3d470c1a284aa1f83Michael Butler # clear line 245dfbbdbc6d12e7d522a72d9a3d470c1a284aa1f83Michael Butler printf "\r \r" 246dfbbdbc6d12e7d522a72d9a3d470c1a284aa1f83Michael Butler 247dfbbdbc6d12e7d522a72d9a3d470c1a284aa1f83Michael Butler done 248dfbbdbc6d12e7d522a72d9a3d470c1a284aa1f83Michael Butler 249dfbbdbc6d12e7d522a72d9a3d470c1a284aa1f83Michael Butler# ...or all at once 250dfbbdbc6d12e7d522a72d9a3d470c1a284aa1f83Michael Butlerelse 251dfbbdbc6d12e7d522a72d9a3d470c1a284aa1f83Michael Butler 252dfbbdbc6d12e7d522a72d9a3d470c1a284aa1f83Michael Butler # concatenate all tests together to run in batch 253dfbbdbc6d12e7d522a72d9a3d470c1a284aa1f83Michael Butler TESTS_TEXT="-e class $TEST_ROOT#${FUNCTION_NAMES[${TESTS[0]}]}" 254dfbbdbc6d12e7d522a72d9a3d470c1a284aa1f83Michael Butler for num in `seq 1 $((${#TESTS[@]} - 1))`; do 255dfbbdbc6d12e7d522a72d9a3d470c1a284aa1f83Michael Butler TESTS_TEXT=$TESTS_TEXT,"$TEST_ROOT#${FUNCTION_NAMES[${TESTS[$num]}]}" 256dfbbdbc6d12e7d522a72d9a3d470c1a284aa1f83Michael Butler done 257dfbbdbc6d12e7d522a72d9a3d470c1a284aa1f83Michael Butler 258dfbbdbc6d12e7d522a72d9a3d470c1a284aa1f83Michael Butler # run command 259dfbbdbc6d12e7d522a72d9a3d470c1a284aa1f83Michael Butler adb shell "am instrument -w $VARIABLES $TESTS_TEXT $RUNNER" 260dfbbdbc6d12e7d522a72d9a3d470c1a284aa1f83Michael Butler 261dfbbdbc6d12e7d522a72d9a3d470c1a284aa1f83Michael Butler # run and plot each test result separately 262dfbbdbc6d12e7d522a72d9a3d470c1a284aa1f83Michael Butler for num in `seq 0 $((${#TESTS[@]} - 1))`; do 263dfbbdbc6d12e7d522a72d9a3d470c1a284aa1f83Michael Butler 264dfbbdbc6d12e7d522a72d9a3d470c1a284aa1f83Michael Butler # alias 265dfbbdbc6d12e7d522a72d9a3d470c1a284aa1f83Michael Butler testId=${TESTS[$num]} 266dfbbdbc6d12e7d522a72d9a3d470c1a284aa1f83Michael Butler 267dfbbdbc6d12e7d522a72d9a3d470c1a284aa1f83Michael Butler # extract relevant data if present, write to temporary file 268dfbbdbc6d12e7d522a72d9a3d470c1a284aa1f83Michael Butler if fileexists /sdcard/rsTimes/${TEST_NAMES[$testId]}_DATA.txt; then 269dfbbdbc6d12e7d522a72d9a3d470c1a284aa1f83Michael Butler adb shell cat /sdcard/rsTimes/${TEST_NAMES[$testId]}_DATA.txt > timing.tmp 270dfbbdbc6d12e7d522a72d9a3d470c1a284aa1f83Michael Butler else 271dfbbdbc6d12e7d522a72d9a3d470c1a284aa1f83Michael Butler echo "File ${TEST_NAMES[$testId]} not saved. Is ImageProcessing_jb able to run on this device?" 272dfbbdbc6d12e7d522a72d9a3d470c1a284aa1f83Michael Butler continue 273dfbbdbc6d12e7d522a72d9a3d470c1a284aa1f83Michael Butler fi 274dfbbdbc6d12e7d522a72d9a3d470c1a284aa1f83Michael Butler 275dfbbdbc6d12e7d522a72d9a3d470c1a284aa1f83Michael Butler # calculate avg and stdcoef 276dfbbdbc6d12e7d522a72d9a3d470c1a284aa1f83Michael Butler AVG=`cat timing.tmp | awk '{sum+=$2}END{printf "%.2f",sum/NR}'` 277dfbbdbc6d12e7d522a72d9a3d470c1a284aa1f83Michael Butler STDCOEF=`cat timing.tmp | awk '{sum+=$2;sos+=$2*$2}END{printf "%.2f",sqrt((sos-sum*sum/NR)/NR)/(sum/NR)*100}'` 278dfbbdbc6d12e7d522a72d9a3d470c1a284aa1f83Michael Butler 279dfbbdbc6d12e7d522a72d9a3d470c1a284aa1f83Michael Butler # create plot file 280dfbbdbc6d12e7d522a72d9a3d470c1a284aa1f83Michael Butler echo "# temporary file" > plot.tmp 281dfbbdbc6d12e7d522a72d9a3d470c1a284aa1f83Michael Butler echo "set style line 1 lc rgb '#0060ad' lt 1 lw 2 pt 7 ps 1" >> plot.tmp # --- blue 282dfbbdbc6d12e7d522a72d9a3d470c1a284aa1f83Michael Butler echo "set style line 2 lc rgb '#ff0000' lt 1 lw 2" >> plot.tmp # --- green 283dfbbdbc6d12e7d522a72d9a3d470c1a284aa1f83Michael Butler echo "set title \"${TEST_NAMES[$testId]} \(avg=$AVG ms, stdcoef=$STDCOEF%\)\"" >> plot.tmp 284dfbbdbc6d12e7d522a72d9a3d470c1a284aa1f83Michael Butler echo "set xlabel \"Iteration #\"" >> plot.tmp 285dfbbdbc6d12e7d522a72d9a3d470c1a284aa1f83Michael Butler echo "set ylabel \"Elapsed Time (ms)\"" >> plot.tmp 286dfbbdbc6d12e7d522a72d9a3d470c1a284aa1f83Michael Butler if [ $GRAPH_ZERO -eq 1 ]; then 287dfbbdbc6d12e7d522a72d9a3d470c1a284aa1f83Michael Butler echo "set yrange [0.0:*]" >> plot.tmp 288dfbbdbc6d12e7d522a72d9a3d470c1a284aa1f83Michael Butler fi 289dfbbdbc6d12e7d522a72d9a3d470c1a284aa1f83Michael Butler if [ $GRAPH_LINE -eq 1 ]; then 290dfbbdbc6d12e7d522a72d9a3d470c1a284aa1f83Michael Butler echo "set fit quiet" >> plot.tmp 291dfbbdbc6d12e7d522a72d9a3d470c1a284aa1f83Michael Butler echo "set fit logfile '/dev/null'" >> plot.tmp 292dfbbdbc6d12e7d522a72d9a3d470c1a284aa1f83Michael Butler echo "f(x) = a*x + b" >> plot.tmp 293dfbbdbc6d12e7d522a72d9a3d470c1a284aa1f83Michael Butler echo "fit f(x) 'timing.tmp' using 1:2 via a, b" >> plot.tmp 294dfbbdbc6d12e7d522a72d9a3d470c1a284aa1f83Michael Butler echo "string = sprintf('%.3fe-3*x+%.3f', a*1000, b)" >> plot.tmp 295dfbbdbc6d12e7d522a72d9a3d470c1a284aa1f83Michael Butler echo "plot 'timing.tmp' with linespoints ls 1 title 'Data', f(x) ls 2 title string" >> plot.tmp 296dfbbdbc6d12e7d522a72d9a3d470c1a284aa1f83Michael Butler else 297dfbbdbc6d12e7d522a72d9a3d470c1a284aa1f83Michael Butler echo "plot 'timing.tmp' with linespoints ls 1 title 'Data'" >> plot.tmp 298dfbbdbc6d12e7d522a72d9a3d470c1a284aa1f83Michael Butler fi 299dfbbdbc6d12e7d522a72d9a3d470c1a284aa1f83Michael Butler 300dfbbdbc6d12e7d522a72d9a3d470c1a284aa1f83Michael Butler # plot data as simple line graph 301dfbbdbc6d12e7d522a72d9a3d470c1a284aa1f83Michael Butler gnuplot -p plot.tmp 302dfbbdbc6d12e7d522a72d9a3d470c1a284aa1f83Michael Butler 303dfbbdbc6d12e7d522a72d9a3d470c1a284aa1f83Michael Butler done 304dfbbdbc6d12e7d522a72d9a3d470c1a284aa1f83Michael Butler 305dfbbdbc6d12e7d522a72d9a3d470c1a284aa1f83Michael Butlerfi # single or batch mode 306dfbbdbc6d12e7d522a72d9a3d470c1a284aa1f83Michael Butler 307dfbbdbc6d12e7d522a72d9a3d470c1a284aa1f83Michael Butler# cleanup 308dfbbdbc6d12e7d522a72d9a3d470c1a284aa1f83Michael Butlerrm -f plot.tmp 309dfbbdbc6d12e7d522a72d9a3d470c1a284aa1f83Michael Butlerrm -f timing.tmp 310dfbbdbc6d12e7d522a72d9a3d470c1a284aa1f83Michael Butler 311dfbbdbc6d12e7d522a72d9a3d470c1a284aa1f83Michael Butler 312