svcore
1.9
|
00001 /* -*- c-basic-offset: 4 indent-tabs-mode: nil -*- vi:set ts=8 sts=4 sw=4: */ 00002 00003 /* 00004 Sonic Visualiser 00005 An audio file viewer and annotation editor. 00006 Centre for Digital Music, Queen Mary, University of London. 00007 00008 This program is free software; you can redistribute it and/or 00009 modify it under the terms of the GNU General Public License as 00010 published by the Free Software Foundation; either version 2 of the 00011 License, or (at your option) any later version. See the file 00012 COPYING included with this distribution for more information. 00013 */ 00014 00015 /* 00016 This is a modified version of a source file from the 00017 Rosegarden MIDI and audio sequencer and notation editor. 00018 This file copyright 2000-2006 Chris Cannam, Guillaume Laurent, 00019 and QMUL. 00020 */ 00021 00022 00023 #ifndef _PROFILER_H_ 00024 #define _PROFILER_H_ 00025 00026 #include "system/System.h" 00027 00028 #include <ctime> 00029 #include <sys/time.h> 00030 #include <map> 00031 00032 #include "RealTime.h" 00033 00034 //#define NO_TIMING 1 00035 00036 #define WANT_TIMING 1 00037 00038 #ifdef NDEBUG 00039 #ifndef WANT_TIMING 00040 #define NO_TIMING 1 00041 #endif 00042 #endif 00043 00053 class Profiles 00054 { 00055 public: 00056 static Profiles* getInstance(); 00057 ~Profiles(); 00058 00059 void accumulate(const char* id, clock_t time, RealTime rt); 00060 void dump() const; 00061 00062 protected: 00063 Profiles(); 00064 00065 typedef std::pair<clock_t, RealTime> TimePair; 00066 typedef std::pair<int, TimePair> ProfilePair; 00067 typedef std::map<const char *, ProfilePair> ProfileMap; 00068 typedef std::map<const char *, TimePair> LastCallMap; 00069 typedef std::map<const char *, TimePair> WorstCallMap; 00070 ProfileMap m_profiles; 00071 LastCallMap m_lastCalls; 00072 WorstCallMap m_worstCalls; 00073 00074 static Profiles* m_instance; 00075 }; 00076 00077 #ifndef NO_TIMING 00078 00086 class Profiler 00087 { 00088 public: 00097 Profiler(const char *name, bool showOnDestruct = false); 00098 ~Profiler(); 00099 00100 void update() const; 00101 void end(); // same action as dtor 00102 00103 protected: 00104 const char* m_c; 00105 clock_t m_startCPU; 00106 RealTime m_startTime; 00107 bool m_showOnDestruct; 00108 bool m_ended; 00109 }; 00110 00111 #else 00112 00113 class Profiler 00114 { 00115 public: 00116 Profiler(const char *, bool = false) { } 00117 ~Profiler() { } 00118 00119 void update() const { } 00120 void end() { } 00121 }; 00122 00123 #endif 00124 00125 #endif