MeVisLabToolboxReference
|
00001 // **InsertLicense** code 00002 //---------------------------------------------------------------------------------- 00003 // The profiling manager class. 00004 // 00005 // \file mlProfilingManager.h 00006 // \author Marcus Barann 00007 // \date 7/2009 00008 // 00009 //---------------------------------------------------------------------------------- 00010 #ifndef _ML_PROFILING_MANAGER_H_ 00011 #define _ML_PROFILING_MANAGER_H_ 00012 00013 #include "mlProfilingManagerDllExport.h" 00014 #include "mlMetaProfile.h" 00015 #include <map> 00016 #include <string> 00017 #include <vector> 00018 00019 #include <mlTimeCounter.h> 00020 00021 class MLCountProfile; 00022 class MLMemoryProfile; 00023 class MLTimeProfile; 00024 00025 00026 //---------------------------------------------------------------------------------- 00027 00028 class MLPROFILINGMANAGER_EXPORT MLProfilingManager 00029 { 00030 public: 00032 static void initialize(); 00033 00035 static void deinitialize(); 00036 00038 static void setProfilingEnabled(bool enabled); 00039 00041 static bool isProfilingEnabled() { return _singleton && _singleton->_isProfilingEnabled; } 00042 00044 static std::string byteToHumanReadable(size_t bytes); 00045 00047 static std::string timeToHumanReadable(long double time); 00048 00050 static void setTimeProfilingGraphEnabled(bool enabled) { _singleton->_isTimeProfilingGraphEnabled = enabled; } 00051 00053 static bool isTimeProfilingGraphEnabled() { return _singleton && _singleton->_isTimeProfilingGraphEnabled; } 00054 00056 static void resetAllProfilingData(); 00057 00059 static inline long double getCurrentTime(); 00060 00061 00062 private: 00063 MLProfilingManager(); 00064 ~MLProfilingManager(); 00065 00068 static MLMetaProfile* createMetaProfile(const std::string& description, MLMetaProfilePtr* metaProfilePtr); 00069 00070 private: 00071 std::vector<MLMetaProfile*> _metaProfiles; 00072 00073 bool _isProfilingEnabled; 00074 bool _isTimeProfilingGraphEnabled; 00075 00076 static MLProfilingManager* _singleton; 00077 00078 friend class MLMetaProfile; 00079 friend class MLMetaProfilePtr; 00080 }; 00081 00082 00083 00084 //---------------------------------------------------------------------------------- 00085 00086 long double MLProfilingManager::getCurrentTime() 00087 { 00088 return ML_NAMESPACE::TimeCounter().getCurrentValueInSeconds(); 00089 } 00090 00091 00092 00093 #endif // _ML_PROFILING_MANAGER_H_