summaryrefslogtreecommitdiff
path: root/src/profiler.cpp
diff options
context:
space:
mode:
authorShadowNinja <shadowninja@minetest.net>2017-06-03 14:55:10 -0400
committerShadowNinja <shadowninja@minetest.net>2017-06-03 14:55:10 -0400
commitcaecdb681c428c1aab9c0f7eec2570c0460f995c (patch)
treee5115982ea59bbf2343ba9b35bc4a0cfbb56f407 /src/profiler.cpp
parent81d56b94919dceb7b2e51d70b21a7ca22f852bd5 (diff)
parent80dc961d24e1964e25d57039ddb2ba639f9f4d22 (diff)
downloadminetest-caecdb681c428c1aab9c0f7eec2570c0460f995c.tar.gz
minetest-caecdb681c428c1aab9c0f7eec2570c0460f995c.tar.bz2
minetest-caecdb681c428c1aab9c0f7eec2570c0460f995c.zip
Merge 0.4.16 into stable-0.4
Diffstat (limited to 'src/profiler.cpp')
-rw-r--r--src/profiler.cpp30
1 files changed, 30 insertions, 0 deletions
diff --git a/src/profiler.cpp b/src/profiler.cpp
index 197e094f6..8e997442c 100644
--- a/src/profiler.cpp
+++ b/src/profiler.cpp
@@ -21,3 +21,33 @@ with this program; if not, write to the Free Software Foundation, Inc.,
static Profiler main_profiler;
Profiler *g_profiler = &main_profiler;
+ScopeProfiler::ScopeProfiler(
+ Profiler *profiler, const std::string &name, ScopeProfilerType type)
+ : m_profiler(profiler), m_name(name), m_timer(NULL), m_type(type)
+{
+ if (m_profiler)
+ m_timer = new TimeTaker(m_name);
+}
+
+ScopeProfiler::~ScopeProfiler()
+{
+ if (!m_timer)
+ return;
+
+ float duration_ms = m_timer->stop(true);
+ float duration = duration_ms / 1000.0;
+ if (m_profiler) {
+ switch (m_type) {
+ case SPT_ADD:
+ m_profiler->add(m_name, duration);
+ break;
+ case SPT_AVG:
+ m_profiler->avg(m_name, duration);
+ break;
+ case SPT_GRAPH_ADD:
+ m_profiler->graphAdd(m_name, duration);
+ break;
+ }
+ }
+ delete m_timer;
+}