OLD | NEW |
| (Empty) |
1 #!/bin/bash | |
2 | |
3 # Tests for our tools. | |
4 # | |
5 # TODO: currently, this only passes on Linux (which is the platform that | |
6 # the housekeeper bot runs on, e.g. | |
7 # http://70.32.156.51:10117/builders/Skia_PerCommit_House_Keeping/builds/1415/st
eps/RunToolSelfTests/logs/stdio ) | |
8 # See https://code.google.com/p/skia/issues/detail?id=677 | |
9 # ('make tools/tests/run.sh work cross-platform') | |
10 # Ideally, these tests should pass on all development platforms... | |
11 # otherwise, how can developers be expected to test them before committing a | |
12 # change? | |
13 | |
14 # cd into .../trunk so all the paths will work | |
15 cd $(dirname $0)/../.. | |
16 | |
17 # TODO: make it look in Release and/or Debug | |
18 SKDIFF_BINARY=out/Debug/skdiff | |
19 | |
20 # Suffixes of the raw bench data files we want to process. | |
21 BENCHDATA_FILE_SUFFIXES_YES_INDIVIDUAL_TILES=\ | |
22 "data_skp_scale_1.3061_config_8888_mode_tile_256_256_timeIndividualTiles_bbh_rtr
ee "\ | |
23 "data_skp_scale_1.3061_config_8888_mode_tile_256_256_timeIndividualTiles" | |
24 BENCHDATA_FILE_SUFFIXES_NO_INDIVIDUAL_TILES=\ | |
25 "data_skp_multi_4_scale_1.3061_config_8888_mode_tile_256_256 "\ | |
26 "data_skp_scale_1.3061_config_8888_mode_record" | |
27 | |
28 # Compare contents of all files within directories $1 and $2, | |
29 # EXCEPT for any dotfiles. | |
30 # If there are any differences, a description is written to stdout and | |
31 # we exit with a nonzero return value. | |
32 # Otherwise, we write nothing to stdout and return. | |
33 function compare_directories { | |
34 if [ $# != 2 ]; then | |
35 echo "compare_directories requires exactly 2 parameters, got $#" | |
36 exit 1 | |
37 fi | |
38 diff --recursive --exclude=.* $1 $2 | |
39 if [ $? != 0 ]; then | |
40 echo "failed in: compare_directories $1 $2" | |
41 exit 1 | |
42 fi | |
43 } | |
44 | |
45 # Run skdiff with arguments in $1 (plus implicit final argument causing skdiff | |
46 # to write its output, if any, to directory $2/output-actual). | |
47 # Then compare its results against those in $2/output-expected. | |
48 function skdiff_test { | |
49 if [ $# != 2 ]; then | |
50 echo "skdiff_test requires exactly 2 parameters, got $#" | |
51 exit 1 | |
52 fi | |
53 SKDIFF_ARGS="$1" | |
54 ACTUAL_OUTPUT_DIR="$2/output-actual" | |
55 EXPECTED_OUTPUT_DIR="$2/output-expected" | |
56 | |
57 rm -rf $ACTUAL_OUTPUT_DIR | |
58 mkdir -p $ACTUAL_OUTPUT_DIR | |
59 COMMAND="$SKDIFF_BINARY $SKDIFF_ARGS $ACTUAL_OUTPUT_DIR" | |
60 echo "$COMMAND" >$ACTUAL_OUTPUT_DIR/command_line | |
61 $COMMAND &>$ACTUAL_OUTPUT_DIR/stdout | |
62 echo $? >$ACTUAL_OUTPUT_DIR/return_value | |
63 | |
64 compare_directories $EXPECTED_OUTPUT_DIR $ACTUAL_OUTPUT_DIR | |
65 } | |
66 | |
67 # Download a subset of the raw bench data for platform $1 at revision $2. | |
68 # (For the subset, download all files matching any of the suffixes in | |
69 # whitespace-separated list $3.) | |
70 # If any of those files already exist locally, we assume that they are | |
71 # correct and up to date, and we don't download them again. | |
72 function download_bench_rawdata { | |
73 if [ $# != 3 ]; then | |
74 echo "download_bench_rawdata requires exactly 3 parameters, got $#" | |
75 exit 1 | |
76 fi | |
77 PLATFORM="$1" | |
78 REV="$2" | |
79 FILE_SUFFIXES="$3" | |
80 | |
81 PLATFORM_DIR="tools/tests/benchalerts/$PLATFORM" | |
82 RAW_BENCH_DATA_DIR="$PLATFORM_DIR/raw-bench-data" | |
83 mkdir -p $RAW_BENCH_DATA_DIR | |
84 | |
85 for FILE_SUFFIX in $FILE_SUFFIXES; do | |
86 FILE=bench_${REV}_${FILE_SUFFIX} | |
87 DESTFILE=$RAW_BENCH_DATA_DIR/$FILE | |
88 if [ ! -f $DESTFILE ]; | |
89 then | |
90 URL=http://chromium-skia-gm.commondatastorage.googleapis.com/perfdata/${PL
ATFORM}/${FILE} | |
91 echo Downloading $URL ... | |
92 curl $URL --output $DESTFILE | |
93 fi | |
94 done | |
95 } | |
96 | |
97 # Run check_bench_regressions.py across the data from platform $1, | |
98 # writing its output to output-actual and comparing those results against | |
99 # output-expected. | |
100 function benchalert_test { | |
101 if [ $# != 2 ]; then | |
102 echo "benchalert_test requires exactly 2 parameter, got $#" | |
103 exit 1 | |
104 fi | |
105 PLATFORM="$1" | |
106 REVISION="$2" | |
107 | |
108 PLATFORM_DIR="tools/tests/benchalerts/$PLATFORM" | |
109 RAW_BENCH_DATA_DIR="$PLATFORM_DIR/raw-bench-data" | |
110 ACTUAL_OUTPUT_DIR="$PLATFORM_DIR/output-actual" | |
111 EXPECTED_OUTPUT_DIR="$PLATFORM_DIR/output-expected" | |
112 | |
113 # Run check_bench_regressions.py . | |
114 rm -rf $ACTUAL_OUTPUT_DIR | |
115 mkdir -p $ACTUAL_OUTPUT_DIR | |
116 COMMAND="python bench/check_bench_regressions.py -a 25th -b $PLATFORM -d $RAW_
BENCH_DATA_DIR -e $PLATFORM_DIR/expectations.txt -r $REVISION" | |
117 echo "$COMMAND" >$ACTUAL_OUTPUT_DIR/command_line | |
118 START_TIMESTAMP=$(date +%s) | |
119 $COMMAND 2>$ACTUAL_OUTPUT_DIR/stderr | |
120 echo $? >$ACTUAL_OUTPUT_DIR/return_value | |
121 END_TIMESTAMP=$(date +%s) | |
122 | |
123 SECONDS_RUN=$(expr $END_TIMESTAMP - $START_TIMESTAMP) | |
124 echo "check_bench_regressions.py took $SECONDS_RUN seconds to complete" | |
125 | |
126 compare_directories $EXPECTED_OUTPUT_DIR $ACTUAL_OUTPUT_DIR | |
127 } | |
128 | |
129 # Run jsondiff.py with arguments in $1, recording its output. | |
130 # Then compare that output to the content of $2/output-expected. | |
131 function jsondiff_test { | |
132 if [ $# != 2 ]; then | |
133 echo "jsondiff_test requires exactly 2 parameters, got $#" | |
134 exit 1 | |
135 fi | |
136 ARGS="$1" | |
137 ACTUAL_OUTPUT_DIR="$2/output-actual" | |
138 EXPECTED_OUTPUT_DIR="$2/output-expected" | |
139 | |
140 rm -rf $ACTUAL_OUTPUT_DIR | |
141 mkdir -p $ACTUAL_OUTPUT_DIR | |
142 COMMAND="python tools/jsondiff.py $ARGS" | |
143 echo "$COMMAND" >$ACTUAL_OUTPUT_DIR/command_line | |
144 $COMMAND &>$ACTUAL_OUTPUT_DIR/stdout | |
145 echo $? >$ACTUAL_OUTPUT_DIR/return_value | |
146 | |
147 compare_directories $EXPECTED_OUTPUT_DIR $ACTUAL_OUTPUT_DIR | |
148 } | |
149 | |
150 | |
151 | |
152 # | |
153 # Run skdiff tests... | |
154 # | |
155 | |
156 SKDIFF_TESTDIR=tools/tests/skdiff | |
157 | |
158 # Run skdiff over a variety of file pair types: identical bits, identical pixels
, missing from | |
159 # baseDir, etc. | |
160 skdiff_test "$SKDIFF_TESTDIR/baseDir $SKDIFF_TESTDIR/comparisonDir" "$SKDIFF_TES
TDIR/test1" | |
161 | |
162 # Run skdiff over the same set of files, but with arguments as used by our build
bots: | |
163 # - return the number of mismatching file pairs (but ignore any files missing fr
om either | |
164 # baseDir or comparisonDir) | |
165 # - list filenames with each result type to stdout | |
166 # - don't generate HTML output files | |
167 skdiff_test "--failonresult DifferentPixels --failonresult DifferentSizes --fail
onresult Unknown --failonstatus CouldNotDecode,CouldNotRead any --failonstatus a
ny CouldNotDecode,CouldNotRead --listfilenames --nodiffs $SKDIFF_TESTDIR/baseDir
$SKDIFF_TESTDIR/comparisonDir" "$SKDIFF_TESTDIR/test2" | |
168 | |
169 # Run skdiff over just the files that have identical bits. | |
170 skdiff_test "--nodiffs --match identical-bits $SKDIFF_TESTDIR/baseDir $SKDIFF_TE
STDIR/comparisonDir" "$SKDIFF_TESTDIR/identical-bits" | |
171 | |
172 # Run skdiff over just the files that have identical bits or identical pixels. | |
173 skdiff_test "--nodiffs --match identical-bits --match identical-pixels $SKDIFF_T
ESTDIR/baseDir $SKDIFF_TESTDIR/comparisonDir" "$SKDIFF_TESTDIR/identical-bits-or
-pixels" | |
174 | |
175 # | |
176 # Run bench alerts tests... | |
177 # | |
178 | |
179 # Parse a collection of bench data | |
180 PLATFORM=Perf-Android-Nexus7-Tegra3-Arm7-Release | |
181 REVISION=69c9e1a7261a3c8361e2b2c109d6340862149e34 | |
182 download_bench_rawdata $PLATFORM $REVISION "$BENCHDATA_FILE_SUFFIXES_NO_INDIVIDU
AL_TILES" | |
183 download_bench_rawdata $PLATFORM $REVISION "$BENCHDATA_FILE_SUFFIXES_YES_INDIVID
UAL_TILES" | |
184 benchalert_test $PLATFORM $REVISION | |
185 | |
186 # | |
187 # Test jsondiff.py ... | |
188 # | |
189 | |
190 JSONDIFF_INPUT=tools/tests/jsondiff/input | |
191 JSONDIFF_OUTPUT=tools/tests/jsondiff/output | |
192 jsondiff_test "$JSONDIFF_INPUT/old.json $JSONDIFF_INPUT/new.json" "$JSONDIFF_OUT
PUT/old-vs-new" | |
193 | |
194 | |
195 # | |
196 # Launch all the self-tests which have been written in Python. | |
197 # | |
198 # TODO: Over time, we should move all of our tests into Python, and delete | |
199 # the bash tests above. | |
200 # See https://code.google.com/p/skia/issues/detail?id=677 | |
201 # ('make tools/tests/run.sh work cross-platform') | |
202 # | |
203 | |
204 COMMAND="python tools/test_all.py" | |
205 echo "$COMMAND" | |
206 $COMMAND | |
207 ret=$? | |
208 if [ $ret -ne 0 ]; then | |
209 echo "failure in Python self-tests; see stack trace above" | |
210 exit 1 | |
211 fi | |
212 | |
213 | |
214 echo "All tests passed." | |
OLD | NEW |