From 78a1c0cb85586aedca9de962789147c7a0a3031d Mon Sep 17 00:00:00 2001 From: Markus Gans Date: Thu, 15 Oct 2015 02:37:02 +0200 Subject: [PATCH] better profiling --- build.sh | 5 ++++ configure | 55 +++++++++++++++++++++++++++++++++++++++++++ configure.ac | 12 ++++++++++ scripts/cpuprofile.sh | 1 + src/fconfig.h | 4 ++-- 5 files changed, 75 insertions(+), 2 deletions(-) diff --git a/build.sh b/build.sh index 562d7c65..2f64f28e 100755 --- a/build.sh +++ b/build.sh @@ -16,6 +16,10 @@ case "$1" in ./configure --prefix="$PREFIX" CPPFLAGS="-DDEBUG" CXXFLAGS="-g -pg -O0 -DDEBUG -W -Wall -pedantic" ;; + "--cpu-profiler"|"cpu-profiler") + ./configure --prefix="$PREFIX" --with-profiler + ;; + "--gcov"|"gcov") ./configure --prefix="$PREFIX" CXXFLAGS="-fprofile-arcs -ftest-coverage" ;; @@ -33,6 +37,7 @@ case "$1" in echo " debug Compile with debug option" echo " fulldebug Compile with all warning options" echo " profile Compile with profile option (analysis with gprof)" + echo " cpu-profiler Link with Google cpu performance profiler" echo " gcov Compile with options for coverage analysis with gcov" echo " release Compile for release" exit 1 diff --git a/configure b/configure index 0baee7bc..1f7f4f6f 100755 --- a/configure +++ b/configure @@ -767,6 +767,7 @@ with_gnu_ld with_sysroot enable_libtool_lock with_gpm +with_profiler ' ac_precious_vars='build_alias host_alias @@ -1420,6 +1421,7 @@ Optional Packages: --with-sysroot=DIR Search for dependent libraries within DIR (or the compiler's sysroot if not specified). --without-gpm Disable GPM mouse support + --with-profiler build extra google profiler binaries Some influential environment variables: CC C compiler command @@ -16906,6 +16908,59 @@ $as_echo "#define HAVE_LIBGPM 1" >>confdefs.h fi +# profiling + +# Check whether --with-profiler was given. +if test "${with_profiler+set}" = set; then : + withval=$with_profiler; with_profiler=yes +else + with_profiler=no +fi + +if test "x$with_profiler" = "xyes" +then + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for ProfilerFlush in -lprofiler" >&5 +$as_echo_n "checking for ProfilerFlush in -lprofiler... " >&6; } +if ${ac_cv_lib_profiler_ProfilerFlush+:} false; then : + $as_echo_n "(cached) " >&6 +else + ac_check_lib_save_LIBS=$LIBS +LIBS="-lprofiler $LIBS" +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +/* Override any GCC internal prototype to avoid an error. + Use char because int might match the return type of a GCC + builtin and then its argument prototype would still apply. */ +#ifdef __cplusplus +extern "C" +#endif +char ProfilerFlush (); +int +main () +{ +return ProfilerFlush (); + ; + return 0; +} +_ACEOF +if ac_fn_c_try_link "$LINENO"; then : + ac_cv_lib_profiler_ProfilerFlush=yes +else + ac_cv_lib_profiler_ProfilerFlush=no +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext +LIBS=$ac_check_lib_save_LIBS +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_profiler_ProfilerFlush" >&5 +$as_echo "$ac_cv_lib_profiler_ProfilerFlush" >&6; } +if test "x$ac_cv_lib_profiler_ProfilerFlush" = xyes; then : + LIBS="$LIBS -lprofiler" +fi + +fi + cat >confcache <<\_ACEOF # This file is a shell script that caches the results of configure # tests run on this system so they can be shared between configure diff --git a/configure.ac b/configure.ac index 10c5a439..10ed6248 100644 --- a/configure.ac +++ b/configure.ac @@ -69,4 +69,16 @@ then AC_DEFINE([HAVE_LIBGPM], 1, [Define to 1 if GPM mouse is enabled]) fi +# profiling +AC_ARG_WITH([profiler], + [AS_HELP_STRING([--with-profiler], [build extra google profiler binaries])], + [with_profiler=yes], + [with_profiler=no]) +if test "x$with_profiler" = "xyes" +then + AC_CHECK_LIB([profiler], + [ProfilerFlush], + [LIBS="$LIBS -lprofiler"]) +fi + AC_OUTPUT diff --git a/scripts/cpuprofile.sh b/scripts/cpuprofile.sh index 3f407ffc..18941373 100755 --- a/scripts/cpuprofile.sh +++ b/scripts/cpuprofile.sh @@ -2,4 +2,5 @@ LD_LIBRARY_PATH=../src/.libs/ LD_PRELOAD="/usr/lib64/libprofiler.so.0" CPUPROFILE=../test/.libs/ui.prof ../test/.libs/ui pprof --gv ../test/.libs/ui ../test/.libs/ui.prof +rm -f ../test/.libs/ui.prof diff --git a/src/fconfig.h b/src/fconfig.h index fcb80772..6bbb1b4f 100644 --- a/src/fconfig.h +++ b/src/fconfig.h @@ -1,6 +1,6 @@ #ifndef _SRC_FCONFIG_H #define _SRC_FCONFIG_H 1 - + /* src/fconfig.h. Generated automatically at end of configure. */ /* config.h. Generated from config.h.in by configure. */ /* config.h.in. Generated from configure.ac by autoheader. */ @@ -171,6 +171,6 @@ #ifndef F_VERSION #define F_VERSION "0.1.1" #endif - + /* once: _SRC_FCONFIG_H */ #endif