Chromium Code Reviews| OLD | NEW |
|---|---|
| 1 #!/bin/bash | 1 #!/bin/bash |
| 2 # Copyright 2013 The Chromium Authors. All rights reserved. | 2 # Copyright 2013 The Chromium Authors. All rights reserved. |
| 3 # Use of this source code is governed by a BSD-style license that can be | 3 # Use of this source code is governed by a BSD-style license that can be |
| 4 # found in the LICENSE file. | 4 # found in the LICENSE file. |
| 5 | 5 |
| 6 # The optimization code is based on pngslim (http://goo.gl/a0XHg) | 6 # The optimization code is based on pngslim (http://goo.gl/a0XHg) |
| 7 # and executes a similar pipleline to optimize the png file size. | 7 # and executes a similar pipleline to optimize the png file size. |
| 8 # The steps that require pngoptimizercl/pngrewrite/deflopt are omitted, | 8 # The steps that require pngoptimizercl/pngrewrite/deflopt are omitted, |
| 9 # but this runs all other processes, including: | 9 # but this runs all other processes, including: |
| 10 # 1) various color-dependent optimizations using optipng. | 10 # 1) various color-dependent optimizations using optipng. |
| 11 # 2) optimize the number of huffman blocks. | 11 # 2) optimize the number of huffman blocks. |
| 12 # 3) randomize the huffman table. | 12 # 3) randomize the huffman table. |
| 13 # 4) Further optimize using optipng and advdef (zlib stream). | 13 # 4) Further optimize using optipng and advdef (zlib stream). |
| 14 # Due to the step 3), each run may produce slightly different results. | 14 # Due to the step 3), each run may produce slightly different results. |
| 15 # | 15 # |
| 16 # Note(oshima): In my experiment, advdef didn't reduce much. I'm keeping it | 16 # Note(oshima): In my experiment, advdef didn't reduce much. I'm keeping it |
| 17 # for now as it does not take much time to run. | 17 # for now as it does not take much time to run. |
| 18 | 18 |
| 19 readonly ALL_DIRS=" | 19 readonly ALL_DIRS=" |
| 20 ash/resources | 20 ash/resources |
| 21 ui/resources | |
| 22 chrome/app/theme | 21 chrome/app/theme |
| 23 chrome/browser/resources | 22 chrome/browser/resources |
| 24 chrome/renderer/resources | 23 chrome/renderer/resources |
| 24 content/public/android | |
|
msw
2013/11/06 21:44:12
Perhaps limit this to content/public/android/java/
oshima
2014/01/09 19:39:25
Done.
| |
| 25 content/renderer/resources | |
| 26 content/shell/resources | |
| 27 remoting/resources | |
| 28 ui/resources | |
| 29 ui/webui/resources | |
|
msw
2013/11/06 21:44:12
perhaps limit this to ui/webui/resources/images?
oshima
2014/01/09 19:39:25
Done.
| |
| 25 webkit/glue/resources | 30 webkit/glue/resources |
| 26 remoting/resources | 31 win8/metro_driver/resources |
| 27 remoting/webapp | |
| 28 " | 32 " |
| 29 | 33 |
| 30 # Files larger than this file size (in bytes) will | 34 # Files larger than this file size (in bytes) will |
| 31 # use the optimization parameters tailored for large files. | 35 # use the optimization parameters tailored for large files. |
| 32 LARGE_FILE_THRESHOLD=3000 | 36 LARGE_FILE_THRESHOLD=3000 |
| 33 | 37 |
| 34 # Constants used for optimization | 38 # Constants used for optimization |
| 35 readonly DEFAULT_MIN_BLOCK_SIZE=128 | 39 readonly DEFAULT_MIN_BLOCK_SIZE=128 |
| 36 readonly DEFAULT_LIMIT_BLOCKS=256 | 40 readonly DEFAULT_LIMIT_BLOCKS=256 |
| 37 readonly DEFAULT_RANDOM_TRIALS=100 | 41 readonly DEFAULT_RANDOM_TRIALS=100 |
| 38 # Taken from the recommendation in the pngslim's readme.txt. | 42 # Taken from the recommendation in the pngslim's readme.txt. |
| 39 readonly LARGE_MIN_BLOCK_SIZE=1 | 43 readonly LARGE_MIN_BLOCK_SIZE=1 |
| 40 readonly LARGE_LIMIT_BLOCKS=2 | 44 readonly LARGE_LIMIT_BLOCKS=2 |
| 41 readonly LARGE_RANDOM_TRIALS=1 | 45 readonly LARGE_RANDOM_TRIALS=1 |
| 42 | 46 |
| 43 # Global variables for stats | 47 # Global variables for stats |
| 44 TOTAL_OLD_BYTES=0 | 48 TOTAL_OLD_BYTES=0 |
| 45 TOTAL_NEW_BYTES=0 | 49 TOTAL_NEW_BYTES=0 |
| 46 TOTAL_FILE=0 | 50 TOTAL_FILE=0 |
| 51 CORRUPTED_FILE=0 | |
| 47 PROCESSED_FILE=0 | 52 PROCESSED_FILE=0 |
| 48 | 53 |
| 49 declare -a THROBBER_STR=('-' '\\' '|' '/') | 54 declare -a THROBBER_STR=('-' '\\' '|' '/') |
| 50 THROBBER_COUNT=0 | 55 THROBBER_COUNT=0 |
| 51 | 56 |
| 52 # Show throbber character at current cursor position. | 57 # Show throbber character at current cursor position. |
| 53 function throbber { | 58 function throbber { |
| 54 echo -ne "${THROBBER_STR[$THROBBER_COUNT]}\b" | 59 echo -ne "${THROBBER_STR[$THROBBER_COUNT]}\b" |
| 55 let THROBBER_COUNT=($THROBBER_COUNT+1)%4 | 60 let THROBBER_COUNT=($THROBBER_COUNT+1)%4 |
| 56 } | 61 } |
| (...skipping 204 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 261 final_compression $file | 266 final_compression $file |
| 262 } | 267 } |
| 263 | 268 |
| 264 # Usage: process_file <file> | 269 # Usage: process_file <file> |
| 265 function process_file { | 270 function process_file { |
| 266 local file=$1 | 271 local file=$1 |
| 267 local name=$(basename $file) | 272 local name=$(basename $file) |
| 268 # -rem alla removes all ancillary chunks except for tRNS | 273 # -rem alla removes all ancillary chunks except for tRNS |
| 269 pngcrush -d $TMP_DIR -brute -reduce -rem alla $file > /dev/null | 274 pngcrush -d $TMP_DIR -brute -reduce -rem alla $file > /dev/null |
| 270 | 275 |
| 271 if [ $OPTIMIZE_LEVEL != 0 ]; then | 276 if [ -f $TMP_DIR/$name -a $OPTIMIZE_LEVEL != 0 ]; then |
|
msw
2013/11/06 21:44:12
Wow, shell scripting is archaic... I need to look
| |
| 272 optimize_size $TMP_DIR/$name | 277 optimize_size $TMP_DIR/$name |
| 273 fi | 278 fi |
| 274 } | 279 } |
| 275 | 280 |
| 276 # Usage: optimize_file <file> | 281 # Usage: optimize_file <file> |
| 277 function optimize_file { | 282 function optimize_file { |
| 278 local file=$1 | 283 local file=$1 |
| 279 if $using_cygwin ; then | 284 if $using_cygwin ; then |
| 280 file=$(cygpath -w $file) | 285 file=$(cygpath -w $file) |
| 281 fi | 286 fi |
| 282 | 287 |
| 283 local name=$(basename $file) | 288 local name=$(basename $file) |
| 284 local old=$(stat -c%s $file) | 289 local old=$(stat -c%s $file) |
| 285 local tmp_file=$TMP_DIR/$name | 290 local tmp_file=$TMP_DIR/$name |
| 291 let TOTAL_FILE+=1 | |
| 286 | 292 |
| 287 process_file $file | 293 process_file $file |
| 288 | 294 |
| 295 if [ ! -e $tmp_file ] ; then | |
| 296 let CORRUPTED_FILE+=1 | |
| 297 echo "The png file ($file) may be corrupted. skipping" | |
|
msw
2013/11/06 21:44:12
Interesting, have you encountered this case at all
oshima
2014/01/09 19:39:25
Yes, I had. I think this happened because someone
| |
| 298 return | |
| 299 fi | |
| 300 | |
| 289 local new=$(stat -c%s $tmp_file) | 301 local new=$(stat -c%s $tmp_file) |
| 290 let diff=$old-$new | 302 let diff=$old-$new |
| 291 let percent=($diff*100)/$old | 303 let percent=($diff*100)/$old |
| 292 let TOTAL_FILE+=1 | |
| 293 | 304 |
| 294 tput el | 305 tput el |
| 295 if [ $new -lt $old ]; then | 306 if [ $new -lt $old ]; then |
| 296 echo -ne "$file : $old => $new ($diff bytes : $percent %)\n" | 307 echo -ne "$file : $old => $new ($diff bytes : $percent %)\n" |
| 297 mv "$tmp_file" "$file" | 308 mv "$tmp_file" "$file" |
| 298 let TOTAL_OLD_BYTES+=$old | 309 let TOTAL_OLD_BYTES+=$old |
| 299 let TOTAL_NEW_BYTES+=$new | 310 let TOTAL_NEW_BYTES+=$new |
| 300 let PROCESSED_FILE+=1 | 311 let PROCESSED_FILE+=1 |
| 301 else | 312 else |
| 302 if [ $OPTIMIZE_LEVEL == 0 ]; then | 313 if [ $OPTIMIZE_LEVEL == 0 ]; then |
| (...skipping 152 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 455 optimize_dir $d | 466 optimize_dir $d |
| 456 echo | 467 echo |
| 457 done | 468 done |
| 458 fi | 469 fi |
| 459 | 470 |
| 460 # Print the results. | 471 # Print the results. |
| 461 if [ $PROCESSED_FILE == 0 ]; then | 472 if [ $PROCESSED_FILE == 0 ]; then |
| 462 echo "Did not find any files (out of $TOTAL_FILE files)" \ | 473 echo "Did not find any files (out of $TOTAL_FILE files)" \ |
| 463 "that could be optimized" \ | 474 "that could be optimized" \ |
| 464 "in $(date -u -d @$SECONDS +%T)s" | 475 "in $(date -u -d @$SECONDS +%T)s" |
| 476 if [ $CORRUPTED_FILE != 0 ]; then | |
|
msw
2013/11/06 21:44:12
nit: just print this after everything else outside
oshima
2014/01/09 19:39:25
Done.
| |
| 477 echo "Warning: corrupted files found: $CORRUPTED_FILE" | |
|
msw
2013/11/06 21:44:12
Would it help to print a list of these file names
oshima
2014/01/09 19:39:25
File names are printed in #297.
I added "contact
| |
| 478 fi | |
| 465 else | 479 else |
| 466 let diff=$TOTAL_OLD_BYTES-$TOTAL_NEW_BYTES | 480 let diff=$TOTAL_OLD_BYTES-$TOTAL_NEW_BYTES |
| 467 let percent=$diff*100/$TOTAL_OLD_BYTES | 481 let percent=$diff*100/$TOTAL_OLD_BYTES |
| 468 echo "Processed $PROCESSED_FILE files (out of $TOTAL_FILE files)" \ | 482 echo "Processed $PROCESSED_FILE files (out of $TOTAL_FILE files)" \ |
| 469 "in $(date -u -d @$SECONDS +%T)s" | 483 "in $(date -u -d @$SECONDS +%T)s" |
| 484 if [ $CORRUPTED_FILE != 0 ]; then | |
| 485 echo "Warning: corrupted files found: $CORRUPTED_FILE" | |
| 486 fi | |
| 470 echo "Result : $TOTAL_OLD_BYTES => $TOTAL_NEW_BYTES bytes" \ | 487 echo "Result : $TOTAL_OLD_BYTES => $TOTAL_NEW_BYTES bytes" \ |
| 471 "($diff bytes : $percent %)" | 488 "($diff bytes : $percent %)" |
| 472 fi | 489 fi |
| OLD | NEW |