From ffa98da4709d365d291955d8564b8be683d56ed7 Mon Sep 17 00:00:00 2001 From: Ian Lance Taylor Date: Tue, 1 Jul 2014 23:19:24 +0000 Subject: [PATCH] runtime: introduce build targets for running benchmarks This introduces the "bench" build target, which can be used to run all benchmarks. It is also possible to run subsets of benchmarks with the "package/check" build targets by setting GOBENCH to a matching regex. From-SVN: r212212 --- libgo/Makefile.am | 6 ++++++ libgo/Makefile.in | 6 ++++++ libgo/testsuite/gotest | 46 +++++++++++++++++++++++++++++------------- 3 files changed, 44 insertions(+), 14 deletions(-) diff --git a/libgo/Makefile.am b/libgo/Makefile.am index a88f0b7f24c..7466a177088 100644 --- a/libgo/Makefile.am +++ b/libgo/Makefile.am @@ -1996,6 +1996,7 @@ BUILDPACKAGE = \ $(LTGOCOMPILE) -I . -c -fgo-pkgpath=`echo $@ | sed -e 's/.lo$$//' -e 's/-go$$//'` -o $@ $$files GOTESTFLAGS = +GOBENCH = # Check a package. CHECK = \ @@ -2015,6 +2016,8 @@ CHECK = \ rm -f $@-testsum $@-testlog; \ if test "$(USE_DEJAGNU)" = "yes"; then \ $(SHELL) $(srcdir)/testsuite/gotest --dejagnu=yes --basedir=$(srcdir) --srcdir=$(srcdir)/go/$(@D) --pkgpath="$(@D)" --pkgfiles="$(go_$(subst /,_,$(@D))_files)" --testname="$(@D)" --goarch="$(GOARCH)" $(GOTESTFLAGS) $(go_$(subst /,_,$(@D))_test_files); \ + elif test "$(GOBENCH)" != ""; then \ + $(SHELL) $(srcdir)/testsuite/gotest --basedir=$(srcdir) --srcdir=$(srcdir)/go/$(@D) --pkgpath="$(@D)" --pkgfiles="$(go_$(subst /,_,$(@D))_files)" --goarch="$(GOARCH)" --bench="$(GOBENCH)" $(GOTESTFLAGS) $(go_$(subst /,_,$(@D))_test_files); \ else \ if $(SHELL) $(srcdir)/testsuite/gotest --basedir=$(srcdir) --srcdir=$(srcdir)/go/$(@D) --pkgpath="$(@D)" --pkgfiles="$(go_$(subst /,_,$(@D))_files)" --goarch="$(GOARCH)" $(GOTESTFLAGS) $(go_$(subst /,_,$(@D))_test_files) >>$@-testlog 2>&1; then \ echo "PASS: $(@D)" >> $@-testlog; \ @@ -3845,6 +3848,9 @@ check-am: check-multi: $(MULTIDO) $(AM_MAKEFLAGS) DO=check-am multi-do # $(MAKE) +bench: + -@$(MAKE) -k $(TEST_PACKAGES) GOBENCH=. + MOSTLYCLEAN_FILES = libgo.head libgo.sum.sep libgo.log.sep mostlyclean-local: diff --git a/libgo/Makefile.in b/libgo/Makefile.in index 73620f772d8..dd94285f1d5 100644 --- a/libgo/Makefile.in +++ b/libgo/Makefile.in @@ -2066,6 +2066,7 @@ BUILDPACKAGE = \ $(LTGOCOMPILE) -I . -c -fgo-pkgpath=`echo $@ | sed -e 's/.lo$$//' -e 's/-go$$//'` -o $@ $$files GOTESTFLAGS = +GOBENCH = # Check a package. CHECK = \ @@ -2085,6 +2086,8 @@ CHECK = \ rm -f $@-testsum $@-testlog; \ if test "$(USE_DEJAGNU)" = "yes"; then \ $(SHELL) $(srcdir)/testsuite/gotest --dejagnu=yes --basedir=$(srcdir) --srcdir=$(srcdir)/go/$(@D) --pkgpath="$(@D)" --pkgfiles="$(go_$(subst /,_,$(@D))_files)" --testname="$(@D)" --goarch="$(GOARCH)" $(GOTESTFLAGS) $(go_$(subst /,_,$(@D))_test_files); \ + elif test "$(GOBENCH)" != ""; then \ + $(SHELL) $(srcdir)/testsuite/gotest --basedir=$(srcdir) --srcdir=$(srcdir)/go/$(@D) --pkgpath="$(@D)" --pkgfiles="$(go_$(subst /,_,$(@D))_files)" --goarch="$(GOARCH)" --bench="$(GOBENCH)" $(GOTESTFLAGS) $(go_$(subst /,_,$(@D))_test_files); \ else \ if $(SHELL) $(srcdir)/testsuite/gotest --basedir=$(srcdir) --srcdir=$(srcdir)/go/$(@D) --pkgpath="$(@D)" --pkgfiles="$(go_$(subst /,_,$(@D))_files)" --goarch="$(GOARCH)" $(GOTESTFLAGS) $(go_$(subst /,_,$(@D))_test_files) >>$@-testlog 2>&1; then \ echo "PASS: $(@D)" >> $@-testlog; \ @@ -6083,6 +6086,9 @@ check-am: check-multi: $(MULTIDO) $(AM_MAKEFLAGS) DO=check-am multi-do # $(MAKE) +bench: + -@$(MAKE) -k $(TEST_PACKAGES) GOBENCH=. + mostlyclean-local: find . -name '*.lo' -print | xargs $(LIBTOOL) --mode=clean rm -f find . -name '*.$(OBJEXT)' -print | xargs rm -f diff --git a/libgo/testsuite/gotest b/libgo/testsuite/gotest index 155c7a8619a..39beac393c6 100755 --- a/libgo/testsuite/gotest +++ b/libgo/testsuite/gotest @@ -36,6 +36,7 @@ dejagnu=no GOARCH="" timeout=240 testname="" +bench="" trace=false while $loop; do case "x$1" in @@ -124,6 +125,15 @@ while $loop; do testname=`echo $1 | sed -e 's/^--testname=//'` shift ;; + x--bench) + bench=$2 + shift + shift + ;; + x--bench=*) + bench=`echo $1 | sed -e 's/^--bench=//'` + shift + ;; x--trace) trace=true shift @@ -473,20 +483,28 @@ xno) fi ${GL} *.o ${GOLIBS} - if test "$trace" = "true"; then - echo ./a.out -test.short -test.timeout=${timeout}s "$@" - fi - ./a.out -test.short -test.timeout=${timeout}s "$@" & - pid=$! - (sleep `expr $timeout + 10` - echo > gotest-timeout - echo "timed out in gotest" 1>&2 - kill -9 $pid) & - alarmpid=$! - wait $pid - status=$? - if ! test -f gotest-timeout; then - kill $alarmpid + if test "$bench" = ""; then + if test "$trace" = "true"; then + echo ./a.out -test.short -test.timeout=${timeout}s "$@" + fi + ./a.out -test.short -test.timeout=${timeout}s "$@" & + pid=$! + (sleep `expr $timeout + 10` + echo > gotest-timeout + echo "timed out in gotest" 1>&2 + kill -9 $pid) & + alarmpid=$! + wait $pid + status=$? + if ! test -f gotest-timeout; then + kill $alarmpid + fi + else + if test "$trace" = "true"; then + echo ./a.out -test.run=^\$ -test.bench="${bench}" "$@" + fi + ./a.out -test.run=^\$ -test.bench="${bench}" "$@" + status=$? fi exit $status ;;