From baa5df245b59b1668e5595de89b1aa7802eef27c Mon Sep 17 00:00:00 2001 From: Diego Barrios Romero Date: Mar 13 2015 20:09:50 +0000 Subject: Replace rendering time measurement with boost::chrono + Added boost::chrono libraryto build scripts --- diff --git a/synfig-core/configure.ac b/synfig-core/configure.ac index c2a7767..b10a502 100644 --- a/synfig-core/configure.ac +++ b/synfig-core/configure.ac @@ -413,6 +413,10 @@ AX_BOOST_FILESYSTEM if test "x$ax_cv_boost_filesystem" = "xno" ; then AC_MSG_ERROR([ ** You need to install Boost filesystem library]) fi +AX_BOOST_CHRONO +if test "x$ax_cv_boost_chrono" = "xno" ; then + AC_MSG_ERROR([ ** You need to install Boost chrono library]) +fi # Boost program options, system and filesystem libraries are just dependencies # of the synfig cli and therefore # not required to link against the synfig library. @@ -767,5 +771,8 @@ Using OpenEXR's \"half\" type ------> $use_openexr_half "'$'"BOOST_CPPFLAGS ------------------> '$BOOST_CPPFLAGS' "'$'"BOOST_LDFLAGS -------------------> '$BOOST_LDFLAGS' "'$'"BOOST_PROGRAM_OPTIONS_LIB -------> '$BOOST_PROGRAM_OPTIONS_LIB' +"'$'"BOOST_SYSTEM_LIB ----------------> '$BOOST_SYSTEM_LIB' +"'$'"BOOST_FILESYSTEM_LIB ------------> '$BOOST_FILESYSTEM_LIB' +"'$'"BOOST_CHRONO_LIB ----------------> '$BOOST_CHRONO_LIB' "'$'"LIBADD_DL -----------------------> '$LIBADD_DL' " diff --git a/synfig-core/m4/ax_boost_chrono.m4 b/synfig-core/m4/ax_boost_chrono.m4 new file mode 100644 index 0000000..9b3958e --- /dev/null +++ b/synfig-core/m4/ax_boost_chrono.m4 @@ -0,0 +1,118 @@ +# =========================================================================== +# http://www.gnu.org/software/autoconf-archive/ax_boost_chrono.html +# =========================================================================== +# +# SYNOPSIS +# +# AX_BOOST_CHRONO +# +# DESCRIPTION +# +# Test for System library from the Boost C++ libraries. The macro requires +# a preceding call to AX_BOOST_BASE. Further documentation is available at +# . +# +# This macro calls: +# +# AC_SUBST(BOOST_CHRONO_LIB) +# +# And sets: +# +# HAVE_BOOST_CHRONO +# +# LICENSE +# +# Copyright (c) 2012 Xiyue Deng +# +# Copying and distribution of this file, with or without modification, are +# permitted in any medium without royalty provided the copyright notice +# and this notice are preserved. This file is offered as-is, without any +# warranty. + +#serial 1 + +AC_DEFUN([AX_BOOST_CHRONO], +[ + AC_ARG_WITH([boost-chrono], + AS_HELP_STRING([--with-boost-chrono@<:@=special-lib@:>@], + [use the Chrono library from boost - it is possible to specify a certain library for the linker + e.g. --with-boost-chrono=boost_chrono-gcc-mt ]), + [ + if test "$withval" = "no"; then + want_boost="no" + elif test "$withval" = "yes"; then + want_boost="yes" + ax_boost_user_chrono_lib="" + else + want_boost="yes" + ax_boost_user_chrono_lib="$withval" + fi + ], + [want_boost="yes"] + ) + + if test "x$want_boost" = "xyes"; then + AC_REQUIRE([AC_PROG_CC]) + AC_REQUIRE([AC_CANONICAL_BUILD]) + CPPFLAGS_SAVED="$CPPFLAGS" + CPPFLAGS="$CPPFLAGS $BOOST_CPPFLAGS" + export CPPFLAGS + + LDFLAGS_SAVED="$LDFLAGS" + LDFLAGS="$LDFLAGS $BOOST_LDFLAGS" + export LDFLAGS + + AC_CACHE_CHECK(whether the Boost::Chrono library is available, + ax_cv_boost_chrono, + [AC_LANG_PUSH([C++]) + CXXFLAGS_SAVE=$CXXFLAGS + + AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[@%:@include ]], + [[boost::chrono::system_clock::time_point time;]])], + ax_cv_boost_chrono=yes, ax_cv_boost_chrono=no) + CXXFLAGS=$CXXFLAGS_SAVE + AC_LANG_POP([C++]) + ]) + if test "x$ax_cv_boost_chrono" = "xyes"; then + AC_SUBST(BOOST_CPPFLAGS) + + AC_DEFINE(HAVE_BOOST_CHRONO,,[define if the Boost::Chrono library is available]) + BOOSTLIBDIR=`echo $BOOST_LDFLAGS | sed -e 's/@<:@^\/@:>@*//'` + + LDFLAGS_SAVE=$LDFLAGS + if test "x$ax_boost_user_chrono_lib" = "x"; then + for libextension in `ls $BOOSTLIBDIR/libboost_chrono*.so* $BOOSTLIBDIR/libboost_chrono*.dylib* $BOOSTLIBDIR/libboost_chrono*.a* 2>/dev/null | sed 's,.*/,,' | sed -e 's;^lib\(boost_chrono.*\)\.so.*$;\1;' -e 's;^lib\(boost_chrono.*\)\.dylib.*$;\1;' -e 's;^lib\(boost_chrono.*\)\.a.*$;\1;'` ; do + ax_lib=${libextension} + AC_CHECK_LIB($ax_lib, exit, + [BOOST_CHRONO_LIB="-l$ax_lib"; AC_SUBST(BOOST_CHRONO_LIB) link_chrono="yes"; break], + [link_chrono="no"]) + done + if test "x$link_chrono" != "xyes"; then + for libextension in `ls $BOOSTLIBDIR/boost_chrono*.dll* $BOOSTLIBDIR/boost_chrono*.a* 2>/dev/null | sed 's,.*/,,' | sed -e 's;^\(boost_chrono.*\)\.dll.*$;\1;' -e 's;^\(boost_chrono.*\)\.a.*$;\1;'` ; do + ax_lib=${libextension} + AC_CHECK_LIB($ax_lib, exit, + [BOOST_CHRONO_LIB="-l$ax_lib"; AC_SUBST(BOOST_CHRONO_LIB) link_chrono="yes"; break], + [link_chrono="no"]) + done + fi + + else + for ax_lib in $ax_boost_user_chrono_lib boost_chrono-$ax_boost_user_chrono_lib; do + AC_CHECK_LIB($ax_lib, exit, + [BOOST_CHRONO_LIB="-l$ax_lib"; AC_SUBST(BOOST_CHRONO_LIB) link_chrono="yes"; break], + [link_chrono="no"]) + done + + fi + if test "x$ax_lib" = "x"; then + AC_MSG_ERROR(Could not find a version of the library!) + fi + if test "x$link_chrono" = "xno"; then + AC_MSG_ERROR(Could not link against $ax_lib !) + fi + fi + + CPPFLAGS="$CPPFLAGS_SAVED" + LDFLAGS="$LDFLAGS_SAVED" + fi +]) diff --git a/synfig-core/src/tool/Makefile.am b/synfig-core/src/tool/Makefile.am index 9aea471..612dd5a 100644 --- a/synfig-core/src/tool/Makefile.am +++ b/synfig-core/src/tool/Makefile.am @@ -38,7 +38,8 @@ synfig_LDADD = \ @BOOST_LDFLAGS@ \ @BOOST_PROGRAM_OPTIONS_LIB@ \ @BOOST_SYSTEM_LIB@ \ - @BOOST_FILESYSTEM_LIB@ + @BOOST_FILESYSTEM_LIB@ \ + @BOOST_CHRONO_LIB@ synfig_CXXFLAGS = \ @SYNFIG_CFLAGS@ diff --git a/synfig-core/src/tool/joblistprocessor.cpp b/synfig-core/src/tool/joblistprocessor.cpp index 524f310..21bdb63 100644 --- a/synfig-core/src/tool/joblistprocessor.cpp +++ b/synfig-core/src/tool/joblistprocessor.cpp @@ -39,9 +39,8 @@ #include #include #include +#include -#include -#include #include #include #include @@ -225,8 +224,8 @@ void process_job (Job& job) else { VERBOSE_OUT(1) << _("Rendering...") << std::endl; - etl::clock timer; - timer.reset(); + boost::chrono::system_clock::time_point start_timepoint = + boost::chrono::system_clock::now(); // Call the render member of the target if(!job.target->render(&p)) @@ -234,8 +233,12 @@ void process_job (Job& job) if(SynfigToolGeneralOptions::instance()->should_print_benchmarks()) { + boost::chrono::duration duration = + boost::chrono::system_clock::now() - start_timepoint; + std::cout << job.filename.c_str() - << _(": Rendered in ") << timer() + << _(": Rendered in ") + << duration.count() << _(" seconds.") << std::endl; } }