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