83cf40afef
``` % DART_CONFIGURATION=ReleaseX64 pkg/dart2wasm/tool/compile_benchmark -- CompileFluteComplex.CompileTime.Total(CompileTime): 34.48 s CompileFluteComplex.CompileTime.Dart2Wasm(CompileTime): 12.74 s CompileFluteComplex.CompileTime.Wasm2WasmOpt(CompileTime): 21.74 s CompileFluteComplex.CodeSize.mjs(CodeSize): 11333 bytes CompileFluteComplex.CodeSize.mjs.gz(CodeSize): 3144 bytes CompileFluteComplex.CodeSize.wasm(CodeSize): 3462517 bytes CompileFluteComplex.CodeSize.wasm.gz(CodeSize): 1019112 bytes CompileFluteComplex.CodeSize.wasm.opt(CodeSize): 1500111 bytes CompileFluteComplex.CodeSize.wasm.opt.gz(CodeSize): 477204 bytes CompileFluteComplexMemoryUse.Max(MemoryUse): 574341120 bytes CompileFluteComplexMemoryUse.Dart2Wasm(MemoryUse): 574341120 bytes CompileFluteComplexMemoryUse.Wasm2WasmOpt(MemoryUse): 487387136 bytes ``` We measure all metrics (compile-time, code size, memory use) separately for dart2wasm and wasm-opt/binaryen. We also report total compilation time as well as maximum memory usage across the tools. Change-Id: I94c190475443b52d437a21ba85d5c5433f03dc50 Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/341486 Commit-Queue: Martin Kustermann <kustermann@google.com> Reviewed-by: Ömer Ağacan <omersa@google.com>
112 lines
3.7 KiB
Bash
Executable File
112 lines
3.7 KiB
Bash
Executable File
#!/usr/bin/env bash
|
|
# Copyright (c) 2022, 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.
|
|
|
|
# Script to compile a benchmark using dart2wasm. Assumes the Dart repo's
|
|
# directory structure.
|
|
|
|
set -e
|
|
|
|
COMPILE_BENCHMARK_BASE_NAME=""
|
|
if [[ "$1" == --compile-benchmark=* ]]; then
|
|
COMPILE_BENCHMARK_BASE_NAME=$(echo $1 | sed 's/--compile-benchmark=//g')
|
|
shift
|
|
fi
|
|
|
|
function follow_links() {
|
|
file="$1"
|
|
while [ -h "$file" ]; do
|
|
# On Mac OS, readlink -f doesn't work.
|
|
file="$(readlink "$file")"
|
|
done
|
|
echo "$file"
|
|
}
|
|
|
|
# Unlike $0, $BASH_SOURCE points to the absolute path of this file.
|
|
PROG_NAME="$(follow_links "$BASH_SOURCE")"
|
|
|
|
# Handle the case where dart-sdk/bin has been symlinked to.
|
|
PROG_DIR="$(cd "${PROG_NAME%/*}" ; pwd -P)"
|
|
SDK_DIR="$(cd "${PROG_DIR}/../../.." ; pwd -P)"
|
|
|
|
# Locate build directory, containing executables, snapshots and platform dill.
|
|
if [[ `uname` == 'Darwin' ]]; then
|
|
OUT_DIR="$SDK_DIR/xcodebuild"
|
|
else
|
|
OUT_DIR="$SDK_DIR/out"
|
|
fi
|
|
DART_CONFIGURATION=${DART_CONFIGURATION:-ReleaseX64}
|
|
BIN_DIR="$OUT_DIR/$DART_CONFIGURATION"
|
|
|
|
DART2WASM="$SDK_DIR/sdk/bin/dart2wasm"
|
|
BINARYEN="$BIN_DIR/wasm-opt"
|
|
|
|
COMPILE_FLAGS=""
|
|
if [[ "$3" == "--omit-checks" ]]; then
|
|
COMPILE_FLAGS+=" --omit-type-checks"
|
|
fi
|
|
|
|
function measure() {
|
|
RESULT=$( { /usr/bin/time --format="\nMemory: %M KB, Time: %e s" $@; } 2>&1 )
|
|
MEMORY=$(echo "$RESULT" | tail -n1 | sed 's/Memory: \([0-9.]\+\) KB, Time: \([0-9.]\+\) s.*/\1/g')
|
|
MEMORY=$(($MEMORY * 1024))
|
|
TIME=$(echo "$RESULT" | tail -n1 | sed 's/Memory: \([0-9.]\+\) KB, Time: \([0-9.]\+\) s.*/\2/g')
|
|
}
|
|
|
|
function measure_size() {
|
|
SIZE=$(cat $1 | wc -c)
|
|
GZIP_SIZE=$(cat $1 | gzip -c6 | wc -c)
|
|
}
|
|
|
|
dart2wasm_command=("$DART2WASM" "$1" "$2" $COMPILE_FLAGS)
|
|
|
|
# Keep in sync with sdk/bin/dart2wasm.
|
|
binaryen_command=("$BINARYEN" -all --closed-world -tnh --type-unfinalizing -O3 --type-ssa --gufa -O3 --type-merging -O1 --type-finalizing "$2" -o "$2")
|
|
|
|
if [ -n "$COMPILE_BENCHMARK_BASE_NAME" ]; then
|
|
measure ${dart2wasm_command[@]}
|
|
COMPILER_TIME=$TIME
|
|
COMPILER_MEMORY=$MEMORY
|
|
|
|
measure_size ${2%.wasm}.mjs
|
|
MJS_SIZE=$SIZE
|
|
MJS_GZIP_SIZE=$GZIP_SIZE
|
|
|
|
measure_size $2
|
|
COMPILER_SIZE=$SIZE
|
|
COMPILER_GZIP_SIZE=$GZIP_SIZE
|
|
|
|
measure ${binaryen_command[@]}
|
|
BINARYEN_TIME=$TIME
|
|
BINARYEN_MEMORY=$MEMORY
|
|
|
|
measure_size $2
|
|
BINARYEN_SIZE=$SIZE
|
|
BINARYEN_GZIP_SIZE=$GZIP_SIZE
|
|
|
|
TOTAL_TIME=$(echo "$COMPILER_TIME + $BINARYEN_TIME" | bc)
|
|
MAX_MEMORY=$(($COMPILER_MEMORY > $BINARYEN_MEMORY ? $COMPILER_MEMORY : $BINARYEN_MEMORY ))
|
|
|
|
# CompileTime
|
|
echo "$COMPILE_BENCHMARK_BASE_NAME.Time.Total(CompileTime): $TOTAL_TIME s"
|
|
echo "$COMPILE_BENCHMARK_BASE_NAME.Time.Dart2Wasm(CompileTime): $COMPILER_TIME s"
|
|
echo "$COMPILE_BENCHMARK_BASE_NAME.Time.Wasm2WasmOpt(CompileTime): $BINARYEN_TIME s"
|
|
|
|
# CodeSize
|
|
echo "$COMPILE_BENCHMARK_BASE_NAME.Size.mjs(CodeSize): $MJS_SIZE bytes"
|
|
echo "$COMPILE_BENCHMARK_BASE_NAME.Size.mjs.gz(CodeSize): $MJS_GZIP_SIZE bytes"
|
|
echo "$COMPILE_BENCHMARK_BASE_NAME.Size.wasm(CodeSize): $COMPILER_SIZE bytes"
|
|
echo "$COMPILE_BENCHMARK_BASE_NAME.Size.wasm.gz(CodeSize): $COMPILER_GZIP_SIZE bytes"
|
|
echo "$COMPILE_BENCHMARK_BASE_NAME.Size.wasm.opt(CodeSize): $BINARYEN_SIZE bytes"
|
|
echo "$COMPILE_BENCHMARK_BASE_NAME.Size.wasm.opt.gz(CodeSize): $BINARYEN_GZIP_SIZE bytes"
|
|
|
|
# MemoryUse
|
|
echo "$COMPILE_BENCHMARK_BASE_NAME.MemoryUse.Max(MemoryUse): $MAX_MEMORY bytes"
|
|
echo "$COMPILE_BENCHMARK_BASE_NAME.MemoryUse.Dart2Wasm(MemoryUse): $COMPILER_MEMORY bytes"
|
|
echo "$COMPILE_BENCHMARK_BASE_NAME.MemoryUse.Wasm2WasmOpt(MemoryUse): $BINARYEN_MEMORY bytes"
|
|
else
|
|
${dart2wasm_command[@]}
|
|
${binaryen_command[@]}
|
|
fi
|