Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/gabime/spdlog.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorgabime <gmelman1@mgail.com>2020-08-29 02:48:43 +0300
committergabime <gmelman1@mgail.com>2020-08-29 02:48:43 +0300
commit34f3d29d93ec2923d413dd0e47f569cf5122bac6 (patch)
treea85dadf46f51463898a53047e377581c3d236c56
parentcd701761f9ad9919b9409e519237fb4c90f6375d (diff)
Added stopwatch support
-rw-r--r--example/example.cpp12
-rw-r--r--include/spdlog/stopwatch.h61
2 files changed, 73 insertions, 0 deletions
diff --git a/example/example.cpp b/example/example.cpp
index ef8f23ff..092eb1af 100644
--- a/example/example.cpp
+++ b/example/example.cpp
@@ -13,6 +13,7 @@ void rotating_example();
void daily_example();
void async_example();
void binary_example();
+void stopwatch_example();
void trace_example();
void multi_sink_example();
void user_defined_example();
@@ -71,6 +72,7 @@ int main(int, char *[])
user_defined_example();
err_handler_example();
trace_example();
+ stopwatch_example();
custom_flags_example();
// Flush all *registered* loggers using a worker thread every 3 seconds.
@@ -192,6 +194,16 @@ void trace_example()
SPDLOG_LOGGER_TRACE(logger, "another trace message");
}
+// stopwatch example
+#include "spdlog/stopwatch.h"
+#include <thread>
+void stopwatch_example()
+{
+ spdlog::stopwatch sw;
+ std::this_thread::sleep_for(std::chrono::milliseconds(123));
+ spdlog::info("Stopwatch: {} seconds", sw);
+}
+
// A logger with multiple sinks (stdout and file) - each with a different format and log level.
void multi_sink_example()
{
diff --git a/include/spdlog/stopwatch.h b/include/spdlog/stopwatch.h
new file mode 100644
index 00000000..770ddea1
--- /dev/null
+++ b/include/spdlog/stopwatch.h
@@ -0,0 +1,61 @@
+// Copyright(c) 2015-present, Gabi Melman & spdlog contributors.
+// Distributed under the MIT License (http://opensource.org/licenses/MIT)
+
+#pragma once
+
+#include <spdlog/fmt/fmt.h>
+
+// Stopwatch support for spdlog (using std::chrono::high_resolution_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 <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::high_resolution_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_);
+ }
+
+ void reset()
+ {
+ start_tp_ = clock ::now();
+ }
+};
+} // namespace spdlog
+
+// Support for fmt formatting (e.g. "{:012.9}" or just "{}")
+namespace fmt {
+template<>
+struct formatter<spdlog::stopwatch> : formatter<double>
+{
+ template<typename FormatContext>
+ auto format(const spdlog::stopwatch &sw, FormatContext &ctx) -> decltype(ctx.out())
+ {
+ return formatter<double>::format(sw.elapsed().count(), ctx);
+ }
+};
+} // namespace fmt