From 267c9f4cb4616afcf07a2a33aaca43a903ac895a Mon Sep 17 00:00:00 2001 From: gregorycu Date: Thu, 22 Jan 2015 00:25:06 +1100 Subject: Optimize Profiler::avg() --- src/profiler.h | 37 ++++++++++++++++++++----------------- 1 file changed, 20 insertions(+), 17 deletions(-) (limited to 'src/profiler.h') diff --git a/src/profiler.h b/src/profiler.h index 5816f05ca..e5bb760c6 100644 --- a/src/profiler.h +++ b/src/profiler.h @@ -69,23 +69,11 @@ public: void avg(const std::string &name, float value) { JMutexAutoLock lock(m_mutex); - { - std::map::iterator n = m_avgcounts.find(name); - if(n == m_avgcounts.end()) - m_avgcounts[name] = 1; - else{ - /* No add shall have been used */ - assert(n->second != -2); - n->second = MYMAX(n->second, 0) + 1; - } - } - { - std::map::iterator n = m_data.find(name); - if(n == m_data.end()) - m_data[name] = value; - else - n->second += value; - } + int &count = m_avgcounts[name]; + + assert(count != -2); + count = MYMAX(count, 0) + 1; + m_data[name] += value; } void clear() @@ -105,6 +93,21 @@ public: printPage(o, 1, 1); } + float getValue(const std::string &name) const + { + std::map::const_iterator numerator = m_data.find(name); + if (numerator == m_data.end()) + return 0.f; + + std::map::const_iterator denominator = m_avgcounts.find(name); + if (denominator != m_avgcounts.end()){ + if (denominator->second >= 1) + return numerator->second / denominator->second; + } + + return numerator->second; + } + void printPage(std::ostream &o, u32 page, u32 pagecount) { JMutexAutoLock lock(m_mutex); -- cgit v1.2.3