39   return prefix + 
"::" + name;
    44 PerformanceMonitor::PerformanceMonitor()
    48   m_all_enabled = 
false;
    51 PerformanceMonitor::~PerformanceMonitor()
    58   if (m_instance == NULL)
    71   for (
uint32_t i = 0; i < num_names; ++i)
    72     monitor->
m_buffer[i].reserve(num_events);
    78 bool PerformanceMonitor::isEnabled(
string prefix)
    80   return (m_enabled && m_enabled_prefix.find(prefix) != m_enabled_prefix.end()) || m_all_enabled;
    83 void PerformanceMonitor::start(
string timer_name)
    85   if (getInstance()->m_enabled)
    88     getInstance()->m_timer[timer_name] = t;
    92 double PerformanceMonitor::measurement(
string timer_name, 
string description, 
string prefix,
   100     double double_ms = d.
toNSec() / 1000000.0;
   101     monitor->
addEvent(prefix, description, double_ms);
   103     if (getInstance()->m_print_stop)
   105       std::stringstream ss;
   106       ss << 
makeName(prefix, description) << 
": " << double_ms << 
" ms";
   107       monitor->
print(ss.str(), level);
   114 double PerformanceMonitor::startStop(
string timer_name, 
string description, 
string prefix,
   125   if (getInstance()->isEnabled(prefix))
   133       double double_ms = d.
toNSec() / 1000000.0;
   134       monitor->
addEvent(prefix, description, double_ms);
   135       monitor->
m_timer[timer_name] = end;
   136       if (getInstance()->m_print_stop)
   138         std::stringstream ss;
   139         ss << 
makeName(prefix, description) << 
": " << double_ms << 
" ms";
   140         monitor->
print(ss.str(), level);
   146       PerformanceMonitor::start(timer_name);
   152 void PerformanceMonitor::addStaticData(
string name, 
double data, 
string prefix)
   154   if (getInstance()->isEnabled(prefix))
   156     string tmp = 
makeName(prefix, name);
   157     getInstance()->m_static_data[tmp] = data;
   161 void PerformanceMonitor::addData(
string name, 
double data, 
string prefix)
   163   if (getInstance()->isEnabled(prefix))
   165     getInstance()->addEvent(prefix, name, data);
   169 void PerformanceMonitor::addNonTimeData(
string name, 
double data, 
string prefix)
   171   if (getInstance()->isEnabled(prefix))
   173     getInstance()->addNonTimeEvent(prefix, name, data);
   177 void PerformanceMonitor::addEvent(
string prefix, 
string name, 
double data)
   179   if (getInstance()->isEnabled(prefix))
   181     string tmp = 
makeName(prefix, name);
   182     if (m_data.find(tmp) == m_data.end())
   184       m_data[tmp] = vector<double>();
   185       if (m_buffer.size() > 0)
   187         m_data[tmp].swap(m_buffer.back());
   191     m_data[tmp].push_back(data);
   195 void PerformanceMonitor::addNonTimeEvent(
string prefix, 
string name, 
double data)
   197   if (getInstance()->isEnabled(prefix))
   199     string tmp = 
makeName(prefix, name);
   200     if (m_data_nontime.find(tmp) == m_data_nontime.end())
   202       m_data_nontime[tmp] = vector<double>();
   203       if (m_buffer.size() > 0)
   205         m_data_nontime[tmp].swap(m_buffer.back());
   209     m_data_nontime[tmp].push_back(data);
   241 void PerformanceMonitor::createStatisticSummary(stringstream& ss, 
string prefix, 
string name)
   243   string tmp = 
makeName(prefix, name);
   244   double median, min, max;
   245   getMedian(tmp, median, min, max);
   247   ss << 
"Summary for " << tmp << 
"\n" <<
   248         "Called " << m_data[tmp].size() << 
" times\n" <<
   249         name << 
"_avg: " << getAverage(tmp) << 
" ms\n" <<
   250         name << 
"_median: " << median << 
" ms\n" <<
   251         name << 
"_min: " << min << 
" ms\n" <<
   252         name << 
"_max: " << max << 
" ms\n"<<
   256 void PerformanceMonitor::createStatisticSummaryNonTime(stringstream& ss, 
string prefix, 
string name)
   258   string tmp = 
makeName(prefix, name);
   259   double median, min, max;
   260   getMedianNonTime(tmp, median, min, max);
   262   ss << 
"Summary for " << tmp << 
"\n" <<
   263         "num entries: " << m_data_nontime[tmp].size() << 
"\n" <<
   264         name << 
"_avg: " << getAverageNonTime(tmp) << 
"\n" <<
   265         name << 
"_median: " << median << 
"\n" <<
   266         name << 
"_min: " << min << 
"\n" <<
   267         name << 
"_max: " << max << 
"\n"<<
   271 void PerformanceMonitor::printSummary(
string prefix, 
string name,
   276   std::stringstream ss;
   278   monitor->
print(ss.str(), level);
   281 void PerformanceMonitor::enablePrefix(
string prefix)
   291 void PerformanceMonitor::enableAll(
const bool& enabled)
   293   getInstance()->m_all_enabled = enabled;
   296 void PerformanceMonitor::disablePrefix(
string prefix)
   313     printSummaryFromPrefix(it->first, level);
   321   std::stringstream ss;
   322   ss << 
"\n########## Begin of Summary for prefix " << prefix << 
" ##########\n";
   325     size_t prefix_end = it->first.find(
"::");
   326     std::string prefix_tmp = it->first.substr(0, prefix_end);
   328     if (prefix == prefix_tmp)
   332         ss << 
"#### Static data: ####\n";
   335       ss <<  it->first.substr(prefix_end+2) << 
": " << it->second << 
"\n";
   340   for (map<
string, vector<double> >::iterator it = monitor->
m_data.begin(); it != monitor->
m_data.end(); it++)
   342     size_t prefix_end = it->first.find(
"::");
   343     std::string prefix_tmp = it->first.substr(0, prefix_end);
   345     if (prefix == prefix_tmp)
   349         ss << 
"#### Time data: ####\n";
   352       string name = it->first.substr(prefix_end+2);
   360     size_t prefix_end = it->first.find(
"::");
   361     std::string prefix_tmp = it->first.substr(0, prefix_end);
   363     if (prefix == prefix_tmp)
   367         ss << 
"#### Non-time data: ####\n";
   370       string name = it->first.substr(prefix_end+2);
   374   monitor->
print(ss.str(), level);
   377 double PerformanceMonitor::getAverage(
string name)
   380   vector<double>* tmp = &m_data[name];
   381   int n = (int) m_data[name].size();
   382   for (
int i = 0; i < n; ++i)
   383     avg = avg + tmp->at(i);
   388 double PerformanceMonitor::getAverageNonTime(
string name)
   391   vector<double>* tmp = &m_data_nontime[name];
   392   int n = (int) m_data_nontime[name].size();
   393   for (
int i = 0; i < n; ++i)
   394     avg = avg + tmp->at(i);
   399 void PerformanceMonitor::getMedian(
string name, 
double& median, 
double& min, 
double& max)
   401   vector<double> tmp = m_data[name];
   402   sort(tmp.begin(), tmp.end());
   403   median = tmp[tmp.size() / 2];
   405   max = tmp[tmp.size() - 1];
   408 void PerformanceMonitor::getMedianNonTime(
string name, 
double& median, 
double& min, 
double& max)
   410   vector<double> tmp = m_data_nontime[name];
   411   sort(tmp.begin(), tmp.end());
   413   median = tmp[tmp.size() / 2];
   415   max = tmp[tmp.size() - 1];
 
Represents absolute times. 
bool initialize(int &argc, char *argv[], bool remove_read_arguments)
#define LOGGING_INFO(streamname, arg)
#define LOGGING_DEBUG(streamname, arg)
string makeName(string prefix, string name)
ThreadStream & endl(ThreadStream &stream)
Repesents absolute times. 
#define LOGGING_TRACE(streamname, arg)