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