From 92e842a3e27bfec1d285f70cca2a60c66fc82ba5 Mon Sep 17 00:00:00 2001 From: Olivier Dion Date: Fri, 4 Feb 2022 11:46:31 -0500 Subject: [PATCH] client/ring_signal: Add tracepoints Change-Id: I522edb40e114f03cdf6605f09cc40cdb0bd886b2 --- src/client/ring_signal.h | 18 +++++++++++++++--- src/jami/jami.h | 27 +++++++++++++++++++++------ src/jami/tracepoint-def.h | 9 +++++++++ 3 files changed, 45 insertions(+), 9 deletions(-) diff --git a/src/client/ring_signal.h b/src/client/ring_signal.h index 5efeb35bb..e5c7a87a0 100644 --- a/src/client/ring_signal.h +++ b/src/client/ring_signal.h @@ -36,6 +36,8 @@ #include "jami.h" #include "logger.h" +#include "trace-tools.h" +#include "tracepoint.h" #ifdef __APPLE__ #include @@ -56,19 +58,29 @@ extern SignalHandlerMap& getSignalHandlers(); * Find related user given callback and call it with given * arguments. */ +#pragma GCC diagnostic push +#pragma GCC diagnostic ignored "-Wunused-parameter" template -static void -emitSignal(Args... args) +void emitSignal(Args... args) { + jami_tracepoint_if_enabled(emit_signal, demangle().c_str()); + const auto& handlers = getSignalHandlers(); - if (auto cb = *DRing::CallbackWrapper(handlers.at(Ts::name))) { + if (auto wrap = DRing::CallbackWrapper(handlers.at(Ts::name))) { try { + auto cb = *wrap; + jami_tracepoint(emit_signal_begin_callback, + wrap.file_, wrap.linum_); cb(args...); + jami_tracepoint(emit_signal_end_callback); } catch (std::exception& e) { JAMI_ERR("Exception during emit signal %s:\n%s", Ts::name, e.what()); } } + + jami_tracepoint(emit_signal_end); } +#pragma GCC diagnostic pop template std::pair>> diff --git a/src/jami/jami.h b/src/jami/jami.h index f8966985e..5194ca92d 100644 --- a/src/jami/jami.h +++ b/src/jami/jami.h @@ -30,6 +30,8 @@ #include #include +#include "trace-tools.h" + namespace DRing { /* flags for initialization */ @@ -114,13 +116,18 @@ private: TFunc cb_; // The user-callback public: + const char* file_; + uint32_t linum_; + // Empty wrapper: no callback associated. // Used to initialize internal callback arrays. CallbackWrapper() noexcept {} // Create and initialize a wrapper to given callback. - CallbackWrapper(TFunc&& func) noexcept - : cb_(std::forward(func)) + CallbackWrapper(TFunc&& func, const char* filename, uint32_t linum) noexcept + : cb_(std::forward(func)), + file_(filename), + linum_(linum) {} // Create and initialize a wrapper from a generic CallbackWrapperBase @@ -128,8 +135,13 @@ public: // Note: the given callback is copied into internal storage. CallbackWrapper(const std::shared_ptr& p) noexcept { - if (p) - cb_ = ((CallbackWrapper*) p.get())->cb_; + if (p) { + auto other = (CallbackWrapper*)p.get(); + + cb_ = other->cb_; + file_ = other->file_; + linum_ = other->linum_; + } } // Return user-callback reference. @@ -149,11 +161,14 @@ public: */ template std::pair> -exportable_callback(std::function&& func) +exportable_callback(std::function&& func, + const char* file=CURRENT_FILENAME(), + uint32_t linum=CURRENT_LINE()) { return std::make_pair((const std::string&) Ts::name, std::make_shared>( - std::forward>(func))); + std::forward>(func), + file, linum)); } DRING_PUBLIC void registerSignalHandlers( diff --git a/src/jami/tracepoint-def.h b/src/jami/tracepoint-def.h index 154bab33f..e6505756b 100644 --- a/src/jami/tracepoint-def.h +++ b/src/jami/tracepoint-def.h @@ -112,6 +112,15 @@ LTTNG_UST_TRACEPOINT_EVENT( ) ) +LTTNG_UST_TRACEPOINT_EVENT( + jami, + emit_signal_end, + LTTNG_UST_TP_ARGS( + ), + LTTNG_UST_TP_FIELDS( + ) +) + LTTNG_UST_TRACEPOINT_EVENT( jami, emit_signal_begin_callback,