| 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 |