aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/common/Metric/Metric.cpp5
-rw-r--r--src/common/Metric/Metric.h34
-rw-r--r--src/server/game/Maps/MapUpdater.cpp2
3 files changed, 41 insertions, 0 deletions
diff --git a/src/common/Metric/Metric.cpp b/src/common/Metric/Metric.cpp
index b1302aacb5a..07db8e83f4d 100644
--- a/src/common/Metric/Metric.cpp
+++ b/src/common/Metric/Metric.cpp
@@ -279,6 +279,11 @@ std::string Metric::FormatInfluxDBTagValue(std::string const& value)
return boost::replace_all_copy(value, " ", "\\ ");
}
+std::string Metric::FormatInfluxDBValue(std::chrono::nanoseconds value)
+{
+ return FormatInfluxDBValue(std::chrono::duration_cast<std::chrono::milliseconds>(value).count());
+}
+
Metric::Metric()
{
}
diff --git a/src/common/Metric/Metric.h b/src/common/Metric/Metric.h
index 5e843139354..5038338421c 100644
--- a/src/common/Metric/Metric.h
+++ b/src/common/Metric/Metric.h
@@ -90,6 +90,7 @@ private:
static std::string FormatInfluxDBValue(char const* value);
static std::string FormatInfluxDBValue(double value);
static std::string FormatInfluxDBValue(float value);
+ static std::string FormatInfluxDBValue(std::chrono::nanoseconds value);
static std::string FormatInfluxDBTagValue(std::string const& value);
@@ -127,6 +128,34 @@ public:
#define sMetric Metric::instance()
+
+template<typename LoggerType>
+class MetricStopWatch
+{
+public:
+ MetricStopWatch(LoggerType&& loggerFunc) :
+ _logger(std::forward<LoggerType>(loggerFunc)),
+ _startTime(sMetric->IsEnabled() ? std::chrono::steady_clock::now() : TimePoint())
+ {
+ }
+
+ ~MetricStopWatch()
+ {
+ if (sMetric->IsEnabled())
+ _logger(_startTime);
+ }
+
+private:
+ LoggerType _logger;
+ TimePoint _startTime;
+};
+
+template<typename LoggerType>
+MetricStopWatch<LoggerType> MakeMetricStopWatch(LoggerType&& loggerFunc)
+{
+ return { std::forward<LoggerType>(loggerFunc) };
+}
+
#define TC_METRIC_TAG(name, value) { name, value }
#ifdef PERFORMANCE_PROFILING
@@ -161,5 +190,10 @@ public:
} while (0) \
__pragma(warning(pop))
#endif
+#define TC_METRIC_TIMER(category, ...) \
+ MetricStopWatch __tc_metric_stop_watch = MakeMetricStopWatch([&](TimePoint start) \
+ { \
+ sMetric->LogValue(category, std::chrono::steady_clock::now() - start, { __VA_ARGS__ }); \
+ });
#endif // METRIC_H__
diff --git a/src/server/game/Maps/MapUpdater.cpp b/src/server/game/Maps/MapUpdater.cpp
index 4a3a6c3cd02..9b0b42ee679 100644
--- a/src/server/game/Maps/MapUpdater.cpp
+++ b/src/server/game/Maps/MapUpdater.cpp
@@ -17,6 +17,7 @@
#include "MapUpdater.h"
#include "Map.h"
+#include "Metric.h"
#include <mutex>
@@ -38,6 +39,7 @@ class MapUpdateRequest
void call()
{
+ TC_METRIC_TIMER("map_update_time_diff", TC_METRIC_TAG("map_id", std::to_string(m_map.GetId())));
m_map.Update (m_diff);
m_updater.update_finished();
}