From 94310eecfad857163890e6160d582b868053cfcd Mon Sep 17 00:00:00 2001 From: Jonathan Moore Liles Date: Sun, 17 Jan 2010 18:58:57 -0600 Subject: [PATCH] Add some profiling output for project loading. --- Timeline/Engine/Audio_File.C | 2 ++ Timeline/Project.C | 9 ++++-- util/Block_Timer.H | 59 ++++++++++++++++++++++++++++++++++++ 3 files changed, 68 insertions(+), 2 deletions(-) create mode 100644 util/Block_Timer.H diff --git a/Timeline/Engine/Audio_File.C b/Timeline/Engine/Audio_File.C index 08731a1..4013e88 100644 --- a/Timeline/Engine/Audio_File.C +++ b/Timeline/Engine/Audio_File.C @@ -23,6 +23,7 @@ #include "const.h" #include "util/debug.h" +#include "util/Block_Timer.H" #include @@ -88,6 +89,7 @@ Audio_File::filename ( void ) const Audio_File * Audio_File::from_file ( const char * filename ) { + Block_Timer timer( "Opened audio file" ); Audio_File *a; diff --git a/Timeline/Project.C b/Timeline/Project.C index 3bd0851..d2f5b7c 100644 --- a/Timeline/Project.C +++ b/Timeline/Project.C @@ -42,6 +42,7 @@ #include "const.h" #include "util/debug.h" #include "util/file.h" +#include "util/Block_Timer.H" extern TLE *tle; @@ -254,8 +255,11 @@ Project::open ( const char *name ) if ( version != PROJECT_VERSION ) return E_VERSION; - if ( ! Loggable::open( "history" ) ) - return E_INVALID; + { + Block_Timer timer( "Replayed journal" ); + if ( ! Loggable::open( "history" ) ) + return E_INVALID; + } timeline->sample_rate( rate ); @@ -332,5 +336,6 @@ Project::create ( const char *name, const char *template_name ) void Project::compact ( void ) { + Block_Timer timer( "Compacted journal" ); Loggable::compact(); } diff --git a/util/Block_Timer.H b/util/Block_Timer.H new file mode 100644 index 0000000..006ce02 --- /dev/null +++ b/util/Block_Timer.H @@ -0,0 +1,59 @@ + +/*******************************************************************************/ +/* Copyright (C) 2010 Jonathan Moore Liles */ +/* */ +/* This program is free software; you can redistribute it and/or modify it */ +/* under the terms of the GNU General Public License as published by the */ +/* Free Software Foundation; either version 2 of the License, or (at your */ +/* option) any later version. */ +/* */ +/* This program is distributed in the hope that it will be useful, but WITHOUT */ +/* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or */ +/* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for */ +/* more details. */ +/* */ +/* You should have received a copy of the GNU General Public License along */ +/* with This program; see the file COPYING. If not,write to the Free Software */ +/* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ +/*******************************************************************************/ + +#pragma once +#include +#include +#include +#include +#include + +class Block_Timer +{ + + unsigned long long ts; + const char *prefix; + + unsigned long long tv_to_ts ( timeval *tv ) + { + return tv->tv_sec * 1e6 + tv->tv_usec; + } + +public: + + Block_Timer ( const char *prefix ) + { + this->prefix = prefix; + + timeval tv; + + gettimeofday( &tv, NULL ); + + ts = tv_to_ts( &tv ); + } + + ~Block_Timer ( ) + { + timeval tv; + + gettimeofday( &tv, NULL ); + + fprintf( stderr, "[%Lfms] %s\n", ((long double)tv_to_ts( &tv ) - ts ) / 1000, prefix ); + } +};