summaryrefslogtreecommitdiffstats
path: root/deps/include/spdlog/stopwatch.h
diff options
context:
space:
mode:
authoruntodesu <kirill@untode.su>2025-03-15 16:22:09 +0500
committeruntodesu <kirill@untode.su>2025-03-15 16:22:09 +0500
commit3bf42c6ff3805a0d42bbc661794a95ff31bedc26 (patch)
tree05049955847504808d6bed2bb7b155f8b03807bb /deps/include/spdlog/stopwatch.h
parent02294547dcde0d4ad76e229106702261e9f10a51 (diff)
downloadvoxelius-3bf42c6ff3805a0d42bbc661794a95ff31bedc26.tar.bz2
voxelius-3bf42c6ff3805a0d42bbc661794a95ff31bedc26.zip
Add whatever I was working on for the last month
Diffstat (limited to 'deps/include/spdlog/stopwatch.h')
-rw-r--r--deps/include/spdlog/stopwatch.h66
1 files changed, 66 insertions, 0 deletions
diff --git a/deps/include/spdlog/stopwatch.h b/deps/include/spdlog/stopwatch.h
new file mode 100644
index 0000000..a96994d
--- /dev/null
+++ b/deps/include/spdlog/stopwatch.h
@@ -0,0 +1,66 @@
+// Copyright(c) 2015-present, Gabi Melman & spdlog contributors.
+// Distributed under the MIT License (http://opensource.org/licenses/MIT)
+
+#pragma once
+
+#include <chrono>
+#include <spdlog/fmt/fmt.h>
+
+// Stopwatch support for spdlog (using std::chrono::steady_clock).
+// Displays elapsed seconds since construction as double.
+//
+// Usage:
+//
+// spdlog::stopwatch sw;
+// ...
+// spdlog::debug("Elapsed: {} seconds", sw); => "Elapsed 0.005116733 seconds"
+// spdlog::info("Elapsed: {:.6} seconds", sw); => "Elapsed 0.005163 seconds"
+//
+//
+// If other units are needed (e.g. millis instead of double), include "fmt/chrono.h" and use
+// "duration_cast<..>(sw.elapsed())":
+//
+// #include <spdlog/fmt/chrono.h>
+//..
+// using std::chrono::duration_cast;
+// using std::chrono::milliseconds;
+// spdlog::info("Elapsed {}", duration_cast<milliseconds>(sw.elapsed())); => "Elapsed 5ms"
+
+namespace spdlog {
+class stopwatch {
+ using clock = std::chrono::steady_clock;
+ std::chrono::time_point<clock> start_tp_;
+
+public:
+ stopwatch()
+ : start_tp_{clock::now()} {}
+
+ std::chrono::duration<double> elapsed() const {
+ return std::chrono::duration<double>(clock::now() - start_tp_);
+ }
+
+ std::chrono::milliseconds elapsed_ms() const {
+ return std::chrono::duration_cast<std::chrono::milliseconds>(clock::now() - start_tp_);
+ }
+
+ void reset() { start_tp_ = clock::now(); }
+};
+} // namespace spdlog
+
+// Support for fmt formatting (e.g. "{:012.9}" or just "{}")
+namespace
+#ifdef SPDLOG_USE_STD_FORMAT
+ std
+#else
+ fmt
+#endif
+{
+
+template <>
+struct formatter<spdlog::stopwatch> : formatter<double> {
+ template <typename FormatContext>
+ auto format(const spdlog::stopwatch &sw, FormatContext &ctx) const -> decltype(ctx.out()) {
+ return formatter<double>::format(sw.elapsed().count(), ctx);
+ }
+};
+} // namespace std