From: Jérémie Galarneau Date: Thu, 21 Jul 2022 19:41:43 +0000 (-0400) Subject: sessiond: return raw pointer to packet header X-Git-Url: https://git.lttng.org/?p=lttng-tools.git;a=commitdiff_plain;h=0267b5278de7bf4ee1ec11f2270dec4b44e80f36 sessiond: return raw pointer to packet header There is no benefit to transfering the ownership of a new packet header everytime it is serialized. Packet headers don't change after the creation of a session; prefer allocating it once and provide a raw (const) pointer to the session's instance. While LTTng always produces one, a trace doesn't absolutely need a packet header so a pointer is preferred over a reference. Signed-off-by: Jérémie Galarneau Change-Id: I66b8f9ad74e332edcc8273c076137a7fff0d4d5e --- diff --git a/src/bin/lttng-sessiond/trace-class.hpp b/src/bin/lttng-sessiond/trace-class.hpp index 05ea5c23e..52dcb76a9 100644 --- a/src/bin/lttng-sessiond/trace-class.hpp +++ b/src/bin/lttng-sessiond/trace-class.hpp @@ -50,7 +50,7 @@ public: * to continue the traversal to the trace class' children. */ virtual void accept(trace_class_visitor& trace_class_visitor) const; - virtual lttng::sessiond::trace::type::cuptr get_packet_header() const = 0; + virtual const lttng::sessiond::trace::type *get_packet_header() const noexcept = 0; virtual ~trace_class() = default; diff --git a/src/bin/lttng-sessiond/ust-registry-session.cpp b/src/bin/lttng-sessiond/ust-registry-session.cpp index 48983f2b2..03a87e286 100644 --- a/src/bin/lttng-sessiond/ust-registry-session.cpp +++ b/src/bin/lttng-sessiond/ust-registry-session.cpp @@ -251,7 +251,8 @@ lsu::registry_session::registry_session(const struct lst::abi& in_abi, _metadata_generating_visitor{lttng::make_unique( abi, [this](const std::string& fragment) { _append_metadata_fragment(fragment); - })} + })}, + _packet_header{_create_packet_header()} { pthread_mutex_init(&_lock, NULL); if (_shm_path.size() > 0) { @@ -287,6 +288,44 @@ lsu::registry_session::registry_session(const struct lst::abi& in_abi, } } +lst::type::cuptr lsu::registry_session::_create_packet_header() const +{ + lst::structure_type::fields packet_header_fields; + + /* uint32_t magic */ + packet_header_fields.emplace_back(lttng::make_unique("magic", + lttng::make_unique(abi.uint32_t_alignment, + abi.byte_order, 32, lst::integer_type::signedness::UNSIGNED, + lst::integer_type::base::HEXADECIMAL, + std::initializer_list({lst::integer_type::role::PACKET_MAGIC_NUMBER})))); + + /* uuid */ + packet_header_fields.emplace_back(lttng::make_unique("uuid", + lttng::make_unique(0, 16, + std::initializer_list({lst::static_length_blob_type::role::TRACE_CLASS_UUID})))); + + /* uint32_t stream_id */ + packet_header_fields.emplace_back(lttng::make_unique("stream_id", + lttng::make_unique(abi.uint32_t_alignment, + abi.byte_order, 32, lst::integer_type::signedness::UNSIGNED, + lst::integer_type::base::DECIMAL, + std::initializer_list({lst::integer_type::role::DATA_STREAM_CLASS_ID})))); + + /* uint64_t stream_instance_id */ + packet_header_fields.emplace_back(lttng::make_unique("stream_instance_id", + lttng::make_unique(abi.uint64_t_alignment, + abi.byte_order, 64, lst::integer_type::signedness::UNSIGNED, + lst::integer_type::base::DECIMAL, + std::initializer_list({lst::integer_type::role::DATA_STREAM_ID})))); + + return lttng::make_unique(0, std::move(packet_header_fields)); +} + +const lst::type *lsu::registry_session::get_packet_header() const noexcept +{ + return _packet_header.get(); +} + /* * For a given enumeration in a registry, delete the entry and destroy * the enumeration. @@ -665,39 +704,6 @@ lsu::registry_session::get_enumeration(const char *enum_name, uint64_t enum_id) return lsu::registry_enum::const_rcu_protected_reference{*reg_enum, std::move(rcu_lock)}; } -lst::type::cuptr lsu::registry_session::get_packet_header() const -{ - lst::structure_type::fields packet_header_fields; - - /* uint32_t magic */ - packet_header_fields.emplace_back(lttng::make_unique("magic", - lttng::make_unique(abi.uint32_t_alignment, - abi.byte_order, 32, lst::integer_type::signedness::UNSIGNED, - lst::integer_type::base::HEXADECIMAL, - std::initializer_list({lst::integer_type::role::PACKET_MAGIC_NUMBER})))); - - /* uuid */ - packet_header_fields.emplace_back(lttng::make_unique("uuid", - lttng::make_unique(0, 16, - std::initializer_list({lst::static_length_blob_type::role::TRACE_CLASS_UUID})))); - - /* uint32_t stream_id */ - packet_header_fields.emplace_back(lttng::make_unique("stream_id", - lttng::make_unique(abi.uint32_t_alignment, - abi.byte_order, 32, lst::integer_type::signedness::UNSIGNED, - lst::integer_type::base::DECIMAL, - std::initializer_list({lst::integer_type::role::DATA_STREAM_CLASS_ID})))); - - /* uint64_t stream_instance_id */ - packet_header_fields.emplace_back(lttng::make_unique("stream_instance_id", - lttng::make_unique(abi.uint64_t_alignment, - abi.byte_order, 64, lst::integer_type::signedness::UNSIGNED, - lst::integer_type::base::DECIMAL, - std::initializer_list({lst::integer_type::role::DATA_STREAM_ID})))); - - return lttng::make_unique(0, std::move(packet_header_fields)); -} - /* * Lookup enumeration by name and comparing enumeration entries. * Needs to be called from RCU read-side critical section. diff --git a/src/bin/lttng-sessiond/ust-registry-session.hpp b/src/bin/lttng-sessiond/ust-registry-session.hpp index 4bda57a07..fc425dca0 100644 --- a/src/bin/lttng-sessiond/ust-registry-session.hpp +++ b/src/bin/lttng-sessiond/ust-registry-session.hpp @@ -62,7 +62,7 @@ public: void regenerate_metadata(); virtual ~registry_session(); - virtual lttng::sessiond::trace::type::cuptr get_packet_header() const override; + virtual const lttng::sessiond::trace::type *get_packet_header() const noexcept override; /* * With multiple writers and readers, use this lock to access @@ -116,6 +116,7 @@ private: void _reset_metadata(); void _destroy_enum(registry_enum *reg_enum) noexcept; registry_enum *_lookup_enum(const registry_enum *target_enum) const; + lttng::sessiond::trace::type::cuptr _create_packet_header() const; virtual void _accept_on_clock_classes( lttng::sessiond::trace::trace_class_visitor& trace_class_visitor) @@ -195,6 +196,7 @@ private: lttng::sessiond::ust::clock_class::cuptr _clock; const lttng::sessiond::trace::trace_class_visitor::cuptr _metadata_generating_visitor; + lttng::sessiond::trace::type::cuptr _packet_header; }; } /* namespace ust */