From 426988b000d9a8b61787f72232ab9e9b7f2c67cd Mon Sep 17 00:00:00 2001 From: Michele Caini Date: Fri, 19 May 2023 14:57:15 +0200 Subject: [PATCH] loop: metrics --- src/uvw/loop.cpp | 6 ++++++ src/uvw/loop.h | 8 ++++++++ test/uvw/loop.cpp | 8 ++++++++ 3 files changed, 22 insertions(+) diff --git a/src/uvw/loop.cpp b/src/uvw/loop.cpp index 320d8139..e3ab8702 100644 --- a/src/uvw/loop.cpp +++ b/src/uvw/loop.cpp @@ -87,6 +87,12 @@ UVW_INLINE loop::time loop::idle_time() const noexcept { return time{uv_metrics_idle_time(uv_loop.get())}; } +UVW_INLINE metrics_type loop::metrics() const noexcept { + metrics_type res{}; + uv_metrics_info(uv_loop.get(), &res); + return res; +} + UVW_INLINE loop::time loop::now() const noexcept { return time{uv_now(uv_loop.get())}; } diff --git a/src/uvw/loop.h b/src/uvw/loop.h index 7cd97757..67a0f9cd 100644 --- a/src/uvw/loop.h +++ b/src/uvw/loop.h @@ -47,6 +47,8 @@ enum class uvw_run_mode : std::underlying_type_t { } // namespace details +using metrics_type = uv_metrics_t; /*!< Library equivalent for uv_metrics_t. */ + /** * @brief The loop class. * @@ -236,6 +238,12 @@ public: */ time idle_time() const noexcept; + /** + * @brief Tracks various internal operations of the event loop. + * @return Event loop metrics. + */ + metrics_type metrics() const noexcept; + /** * @brief Returns the current timestamp in milliseconds. * diff --git a/test/uvw/loop.cpp b/test/uvw/loop.cpp index 142c9529..d42ab4ce 100644 --- a/test/uvw/loop.cpp +++ b/test/uvw/loop.cpp @@ -124,6 +124,14 @@ TEST(Loop, IdleTime) { ASSERT_EQ(0, loop->close()); } +TEST(Loop, Metrics) { + auto loop = uvw::loop::create(); + uvw::metrics_type metrics = loop->metrics(); + ASSERT_EQ(0, metrics.loop_count); + ASSERT_EQ(0, metrics.events); + ASSERT_EQ(0, metrics.events_waiting); +} + TEST(Loop, Raw) { auto loop = uvw::loop::get_default(); const auto &cloop = uvw::loop::get_default();