| #!/bin/bash |
| # |
| # Copyright (c) 2012, the Dart project authors. Please see the AUTHORS file |
| # for details. All rights reserved. Use of this source code is governed by a |
| # BSD-style license that can be found in the LICENSE file. |
| |
| # Collects compiler statics for a given Dart app and spits them out |
| # Creates sample-full.txt, sample-incr-zero.txt, sample-incr-one.txt, |
| # and out_compile_samples/ in the working direcetory, which are left |
| # around for later examination. These files will be destroyed on |
| # script re-run |
| |
| DART_PARAMS="--metrics " |
| RUNS=3 |
| ONE_DELTA="" |
| DART_ANALYZER=$(which dart_analyzer) |
| SAMPLE_DIR="." |
| PREFIX="sample" |
| SCRIPT_DIR=$(dirname $0) |
| |
| source $SCRIPT_DIR/metrics_math.sh |
| |
| function printHelp() { |
| exitValue=${1:1} |
| echo "Generate average and standard deviation compiler stats on a full compile, zero-delta compile," |
| echo "and optional one-delta compile." |
| echo "" |
| echo " Usage:" |
| echo " -a=, --app= The dart app file to test (required)." |
| echo " -r=, --runs= Set the number of compile samples to be executed. Defaults to $RUNS" |
| echo " -d=, --one-delta= The filename, relative to DART_APP, to touch in order to trigger a one-delta compile." |
| echo " -o=, --output= Directory location of sample storage" |
| echo " --analyzer= Override PATH location for analyzer script" |
| echo " -p, --stats-prefix= Adds prefix to each output file (default: sample-[full|incri-[one|zero]]).txt)" |
| echo " -h, --help What you see is what you get." |
| echo " DART_APP Path to dart .app file to compile (depricated)" |
| exit $exitValue |
| } |
| |
| if [ $# -eq 0 ]; then |
| printHelp; |
| fi |
| |
| for i in $* |
| do |
| case $i in |
| --runs=*|-r=*) |
| RUNS=${i#*=};; |
| --one-delta=*|-d=*) |
| ONE_DELTA=${i#*=};; |
| --analyzer=*) |
| ANALYZER=${i#*=};; |
| --output=*|-o=*) |
| SAMPLE_DIR=${i#*=};; |
| --stats-prefix=*|-p=*) |
| if [ "" = "${i#*=}" ]; then |
| echo "prefix cannot be empty" |
| printHelp 1; |
| fi |
| PREFIX=${i#*=};; |
| --app=*|-a=*) |
| APP=${i#*=};; |
| --help|-h) |
| printHelp 0;; |
| -*) |
| echo "Parameter $i not recognized" |
| printHelp 1;; |
| *) |
| break;; |
| esac |
| done |
| |
| if [ "" = "$ANALYZER" ] || [ ! -x $ANALYZER ]; then |
| echo "Error: Location of 'dart_analyzer' not found." |
| printHelp 1 |
| fi |
| |
| if [ "" = "$SAMPLE_DIR" ] || [ ! -d $SAMPLE_DIR ]; then |
| echo "Error: Invalid directory for samples location: $SAMPLE_DIR" |
| printHelp 1 |
| fi |
| |
| OUT_DIR=$SAMPLE_DIR/out_compile_samples |
| DART_PARAMS+="-out $OUT_DIR " |
| |
| if [ "" = "$APP" ]; then |
| APP=$(echo $@ | sed -n 's/.*\s\(\S*\.app\).*/\1/p') |
| fi |
| if [ "" = "$APP" ] || [ ! -r $APP ]; then |
| echo "Error: Must specify app file, got: $APP" |
| printHelp 1 |
| fi |
| |
| APP_RELATIVE=`dirname $APP` |
| if [ "" != "$ONE_DELTA" ]; then |
| ONE_DELTA="$APP_RELATIVE/$ONE_DELTA" |
| if [ ! -r $ONE_DELTA ]; then |
| echo "Error, one_delta file, $ONE_DELTA, does not exist" |
| printHelp |
| fi |
| fi |
| |
| SAMPLE_FULL=$SAMPLE_DIR/$PREFIX-full.txt |
| SAMPLE_INCR_ZERO=$SAMPLE_DIR/$PREFIX-incr-zero.txt |
| SAMPLE_INCR_ONE=$SAMPLE_DIR/$PREFIX-incr-one.txt |
| |
| #clean up |
| rm -Rf $SAMPLE_FULL $SAMPLE_INCR_ZERO $SAMPLE_INCR_ONE |
| |
| for ((i=0;i<$RUNS;i++)) do |
| echo "Run $i" |
| rm -Rf $OUT_DIR |
| $ANALYZER $DART_PARAMS $APP >> $SAMPLE_FULL |
| $ANALYZER $DART_PARAMS $APP >> $SAMPLE_INCR_ZERO |
| if [ -e $ONE_DELTA ] && [ "" != "$ONE_DELTA" ]; then |
| touch $ONE_DELTA |
| $ANALYZER $DART_PARAMS $APP >> $SAMPLE_INCR_ONE |
| fi |
| done |
| |
| sample_file "full-compile" "Compile-time-total-ms" "$SAMPLE_FULL" |
| sample_file "zero-delta-compile" "Compile-time-total-ms" "$SAMPLE_INCR_ZERO" |
| if [ -e $ONE_DELTA ] && [ "" != "$ONE_DELTA" ]; then |
| sample_file "one-delta-compile" "Compile-time-total-ms" "$SAMPLE_INCR_ONE" |
| fi |
| |
| |