annotate base/Profiler.h @ 0:fc9323a41f5a

start base : Sonic Visualiser sv1-1.0rc1
author lbajardsilogic
date Fri, 11 May 2007 09:08:14 +0000
parents
children be6d31baecb9
rev   line source
lbajardsilogic@0 1 /* -*- c-basic-offset: 4 indent-tabs-mode: nil -*- vi:set ts=8 sts=4 sw=4: */
lbajardsilogic@0 2
lbajardsilogic@0 3 /*
lbajardsilogic@0 4 Sonic Visualiser
lbajardsilogic@0 5 An audio file viewer and annotation editor.
lbajardsilogic@0 6 Centre for Digital Music, Queen Mary, University of London.
lbajardsilogic@0 7
lbajardsilogic@0 8 This program is free software; you can redistribute it and/or
lbajardsilogic@0 9 modify it under the terms of the GNU General Public License as
lbajardsilogic@0 10 published by the Free Software Foundation; either version 2 of the
lbajardsilogic@0 11 License, or (at your option) any later version. See the file
lbajardsilogic@0 12 COPYING included with this distribution for more information.
lbajardsilogic@0 13 */
lbajardsilogic@0 14
lbajardsilogic@0 15 /*
lbajardsilogic@0 16 This is a modified version of a source file from the
lbajardsilogic@0 17 Rosegarden MIDI and audio sequencer and notation editor.
lbajardsilogic@0 18 This file copyright 2000-2006 Chris Cannam, Guillaume Laurent,
lbajardsilogic@0 19 and QMUL.
lbajardsilogic@0 20 */
lbajardsilogic@0 21
lbajardsilogic@0 22
lbajardsilogic@0 23 #ifndef _PROFILER_H_
lbajardsilogic@0 24 #define _PROFILER_H_
lbajardsilogic@0 25
lbajardsilogic@0 26 #include "system/System.h"
lbajardsilogic@0 27
lbajardsilogic@0 28 #include <ctime>
lbajardsilogic@0 29 //#include <sys/time.h>
lbajardsilogic@0 30 #include <map>
lbajardsilogic@0 31
lbajardsilogic@0 32 #include "RealTime.h"
lbajardsilogic@0 33
lbajardsilogic@0 34 //#define NO_TIMING 1
lbajardsilogic@0 35
lbajardsilogic@0 36 #define WANT_TIMING 1
lbajardsilogic@0 37
lbajardsilogic@0 38 #ifdef NDEBUG
lbajardsilogic@0 39 #ifndef WANT_TIMING
lbajardsilogic@0 40 #define NO_TIMING 1
lbajardsilogic@0 41 #endif
lbajardsilogic@0 42 #endif
lbajardsilogic@0 43
lbajardsilogic@0 44 /**
lbajardsilogic@0 45 * Profiling classes
lbajardsilogic@0 46 */
lbajardsilogic@0 47
lbajardsilogic@0 48 /**
lbajardsilogic@0 49 * The class holding all profiling data
lbajardsilogic@0 50 *
lbajardsilogic@0 51 * This class is a singleton
lbajardsilogic@0 52 */
lbajardsilogic@0 53 class Profiles
lbajardsilogic@0 54 {
lbajardsilogic@0 55 public:
lbajardsilogic@0 56 static Profiles* getInstance();
lbajardsilogic@0 57 ~Profiles();
lbajardsilogic@0 58
lbajardsilogic@0 59 void accumulate(const char* id, clock_t time, RealTime rt);
lbajardsilogic@0 60 void dump() const;
lbajardsilogic@0 61
lbajardsilogic@0 62 protected:
lbajardsilogic@0 63 Profiles();
lbajardsilogic@0 64
lbajardsilogic@0 65 typedef std::pair<clock_t, RealTime> TimePair;
lbajardsilogic@0 66 typedef std::pair<int, TimePair> ProfilePair;
lbajardsilogic@0 67 typedef std::map<const char *, ProfilePair> ProfileMap;
lbajardsilogic@0 68 typedef std::map<const char *, TimePair> LastCallMap;
lbajardsilogic@0 69 typedef std::map<const char *, TimePair> WorstCallMap;
lbajardsilogic@0 70 ProfileMap m_profiles;
lbajardsilogic@0 71 LastCallMap m_lastCalls;
lbajardsilogic@0 72 WorstCallMap m_worstCalls;
lbajardsilogic@0 73
lbajardsilogic@0 74 static Profiles* m_instance;
lbajardsilogic@0 75 };
lbajardsilogic@0 76
lbajardsilogic@0 77 #ifndef NO_TIMING
lbajardsilogic@0 78
lbajardsilogic@0 79 /**
lbajardsilogic@0 80 * Profile point instance class. Construct one of these on the stack
lbajardsilogic@0 81 * at the start of a function, in order to record the time consumed
lbajardsilogic@0 82 * within that function. The profiler object should be effectively
lbajardsilogic@0 83 * optimised out if NO_TIMING is defined, so any overhead in a release
lbajardsilogic@0 84 * build should be negligible so long as you remember to define that.
lbajardsilogic@0 85 */
lbajardsilogic@0 86 class Profiler
lbajardsilogic@0 87 {
lbajardsilogic@0 88 public:
lbajardsilogic@0 89 /**
lbajardsilogic@0 90 * Create a profile point instance that records time consumed
lbajardsilogic@0 91 * against the given profiling point name. If showOnDestruct is
lbajardsilogic@0 92 * true, the time consumed will be printed to stderr when the
lbajardsilogic@0 93 * object is destroyed; otherwise, only the accumulated, mean and
lbajardsilogic@0 94 * worst-case times will be shown when the program exits or
lbajardsilogic@0 95 * Profiles::dump() is called.
lbajardsilogic@0 96 */
lbajardsilogic@0 97 Profiler(const char *name, bool showOnDestruct = false);
lbajardsilogic@0 98 ~Profiler();
lbajardsilogic@0 99
lbajardsilogic@0 100 void update() const;
lbajardsilogic@0 101
lbajardsilogic@0 102 protected:
lbajardsilogic@0 103 const char* m_c;
lbajardsilogic@0 104 clock_t m_startCPU;
lbajardsilogic@0 105 RealTime m_startTime;
lbajardsilogic@0 106 bool m_showOnDestruct;
lbajardsilogic@0 107 };
lbajardsilogic@0 108
lbajardsilogic@0 109 #else
lbajardsilogic@0 110
lbajardsilogic@0 111 class Profiler
lbajardsilogic@0 112 {
lbajardsilogic@0 113 public:
lbajardsilogic@0 114 Profiler(const char *, bool) { }
lbajardsilogic@0 115 ~Profiler() { }
lbajardsilogic@0 116
lbajardsilogic@0 117 void update() { }
lbajardsilogic@0 118 };
lbajardsilogic@0 119
lbajardsilogic@0 120 #endif
lbajardsilogic@0 121
lbajardsilogic@0 122 #endif