ctf: make ctf_visitor_generate_ir not use ctf_metadata_decoder_config
authorSimon Marchi <simon.marchi@efficios.com>
Wed, 17 Apr 2024 18:11:19 +0000 (14:11 -0400)
committerSimon Marchi <simon.marchi@efficios.com>
Wed, 4 Sep 2024 19:05:14 +0000 (15:05 -0400)
The ctf_metadata_decoder_config structure is going to disappear in the
following patches.  Make ctf_visitor_generate_ir (which we will keep for
now) stop using it.

Change-Id: If4053599d0077554882a9eabe79e4489aa655c72
Signed-off-by: Simon Marchi <simon.marchi@efficios.com>
Reviewed-on: https://review.lttng.org/c/babeltrace/+/8405
Reviewed-by: Philippe Proulx <eeppeliteloop@gmail.com>
Reviewed-on: https://review.lttng.org/c/babeltrace/+/12741

src/plugins/ctf/common/src/metadata/tsdl/ast.hpp
src/plugins/ctf/common/src/metadata/tsdl/ctf-1-metadata-stream-parser.cpp
src/plugins/ctf/common/src/metadata/tsdl/ctf-meta-translate.cpp
src/plugins/ctf/common/src/metadata/tsdl/ctf-meta-visitors.hpp
src/plugins/ctf/common/src/metadata/tsdl/decoder.cpp
src/plugins/ctf/common/src/metadata/tsdl/visitor-generate-ir.cpp

index 93bfe8bcf7ad32fb269be418d8c86e0820160da7..6e9ab32f36619690c61f8f217418b3a968c81378 100644 (file)
 
 #include "common/assert.h"
 #include "common/list.h"
+#include "cpp-common/bt2/self-component-port.hpp"
 #include "cpp-common/bt2/trace-ir.hpp"
+#include "cpp-common/bt2c/logging.hpp"
 #include "cpp-common/vendor/fmt/format.h" /* IWYU pragma: keep */
 
+#include "../../clk-cls-cfg.hpp"
 #include "ctf-meta.hpp"
-#include "decoder.hpp"
 
 // the parameter name (of the reentrant 'yyparse' function)
 // data is a pointer to a 'SParserParam' structure
@@ -482,15 +484,22 @@ struct ctf_visitor_generate_ir
 {
     using UP = std::unique_ptr<ctf_visitor_generate_ir>;
 
-    explicit ctf_visitor_generate_ir(ctf_metadata_decoder_config decoderConfig,
-                                     bt2c::Logger loggerParam) :
-        decoder_config {std::move(decoderConfig)},
-        logger {std::move(loggerParam)}
+    explicit ctf_visitor_generate_ir(
+        const ctf::src::ClkClsCfg& clkClsCfgParam,
+        const bt2::OptionalBorrowedObject<bt2::SelfComponent> selfCompParam,
+        bt2c::Logger loggerParam) noexcept :
+
+        logger {std::move(loggerParam)},
+        selfComp {selfCompParam}, clkClsCfg {clkClsCfgParam}
     {
     }
 
     ~ctf_visitor_generate_ir();
 
+    bt2c::Logger logger;
+
+    bt2::OptionalBorrowedObject<bt2::SelfComponent> selfComp;
+
     /* Trace IR trace class being filled (owned by this) */
     bt2::TraceClass::Shared trace_class;
 
@@ -506,14 +515,13 @@ struct ctf_visitor_generate_ir
     /* True if this is an LTTng trace */
     bool is_lttng = false;
 
-    /* Config passed by the user */
-    struct ctf_metadata_decoder_config decoder_config;
-
-    bt2c::Logger logger;
+    ctf::src::ClkClsCfg clkClsCfg;
 };
 
 ctf_visitor_generate_ir::UP
-ctf_visitor_generate_ir_create(const struct ctf_metadata_decoder_config *config);
+ctf_visitor_generate_ir_create(const ctf::src::ClkClsCfg& clkClsCfg,
+                               bt2::OptionalBorrowedObject<bt2::SelfComponent> selfComp,
+                               const bt2c::Logger& parentLogger);
 
 bt2::TraceClass::Shared
 ctf_visitor_generate_ir_get_ir_trace_class(struct ctf_visitor_generate_ir *visitor);
index 678f4c51b53c7cce7eabd0de3c04378c63ad0e3e..163c050afe1d23510e9341d5dcc6fd9ab8823747 100644 (file)
@@ -694,12 +694,9 @@ Ctf1MetadataStreamParser::Ctf1MetadataStreamParser(
     const bt2c::Logger& parentLogger) :
     MetadataStreamParser {selfComp, clkClsCfg},
     _mLogger {parentLogger, "PLUGIN/CTF/CTF-1-META-STREAM-PARSER"},
+    _mOrigCtfIrGenerator {ctf_visitor_generate_ir_create(clkClsCfg, selfComp, _mLogger)},
     _mScanner {ctf_scanner_alloc(_mLogger)}, _mStreamDecoder {_mLogger}
 {
-    ctf_metadata_decoder_config metadataCfg {_mLogger};
-
-    metadataCfg.clkClsCfg = clkClsCfg;
-    _mOrigCtfIrGenerator = ctf_visitor_generate_ir_create(&metadataCfg);
 }
 
 MetadataStreamParser::ParseRet
index b62dabf68f9e33c26f5a093daa1511e145e5b40c..9b3992a3eba1a57197e7935a9a90fbcfcbcb8adc 100644 (file)
@@ -17,7 +17,7 @@ namespace ctf {
 
 struct MetaTranslateCtx
 {
-    bt_self_component *self_comp;
+    bt2::OptionalBorrowedObject<bt2::SelfComponent> selfComp;
     bt_trace_class *ir_tc;
     bt_stream_class *ir_sc;
     struct ctf_trace_class *tc;
@@ -608,7 +608,7 @@ static inline int ctf_trace_class_to_ir(ctf::MetaTranslateCtx *ctx)
     for (i = 0; i < ctx->tc->clock_classes->len; i++) {
         ctf_clock_class *cc = (ctf_clock_class *) ctx->tc->clock_classes->pdata[i];
 
-        cc->ir_cc = bt_clock_class_create(ctx->self_comp);
+        cc->ir_cc = bt_clock_class_create(ctx->selfComp->libObjPtr());
         ctf_clock_class_to_ir(cc->ir_cc, cc);
     }
 
@@ -620,14 +620,14 @@ end:
     return ret;
 }
 
-int ctf_trace_class_translate(bt_self_component *self_comp, bt_trace_class *ir_tc,
-                              struct ctf_trace_class *tc)
+int ctf_trace_class_translate(const bt2::OptionalBorrowedObject<bt2::SelfComponent> selfComp,
+                              bt_trace_class *ir_tc, struct ctf_trace_class *tc)
 {
     int ret = 0;
     uint64_t i;
     ctf::MetaTranslateCtx ctx = {};
 
-    ctx.self_comp = self_comp;
+    ctx.selfComp = selfComp;
     ctx.tc = tc;
     ctx.ir_tc = ir_tc;
     ret = ctf_trace_class_to_ir(&ctx);
index 0b2e5b091983fdf3e58538ff33f4e0d0f395334f..d83e49f1701d94e9c4af6afdb04bec3b5dd7e9d1 100644 (file)
@@ -9,6 +9,9 @@
 
 #include <babeltrace2/babeltrace.h>
 
+#include "cpp-common/bt2/optional-borrowed-object.hpp"
+#include "cpp-common/bt2/self-component-port.hpp"
+
 #include "ctf-meta.hpp"
 
 namespace bt2c {
@@ -20,8 +23,8 @@ class Logger;
 int ctf_trace_class_resolve_field_classes(struct ctf_trace_class *tc,
                                           const bt2c::Logger& parentLogger);
 
-int ctf_trace_class_translate(bt_self_component *self_comp, bt_trace_class *ir_tc,
-                              struct ctf_trace_class *tc);
+int ctf_trace_class_translate(bt2::OptionalBorrowedObject<bt2::SelfComponent> selfComp,
+                              bt_trace_class *ir_tc, struct ctf_trace_class *tc);
 
 int ctf_trace_class_update_default_clock_classes(struct ctf_trace_class *ctf_tc,
                                                  const bt2c::Logger& parentLogger);
index 3c9857983708c7ea84ee4341ed0ca1bda903389b..54121dd23b197e4accb3d72f88b52745af2c4862 100644 (file)
@@ -117,7 +117,8 @@ ctf_metadata_decoder_create(const struct ctf_metadata_decoder_config *config)
 
     mdec->bo = -1;
     mdec->config = *config;
-    mdec->visitor = ctf_visitor_generate_ir_create(config);
+    mdec->visitor =
+        ctf_visitor_generate_ir_create(config->clkClsCfg, config->self_comp, config->logger);
     if (!mdec->visitor) {
         BT_CPPLOGE_APPEND_CAUSE_SPEC(mdec->logger,
                                      "Failed to create a CTF IR metadata AST visitor: "
index e430c18b326c4f38b1de274ce972ec0006cdb30c..62a34050633d8bdb50168427dc98fa7915174afc 100644 (file)
@@ -24,7 +24,6 @@
 #include "ast.hpp"
 #include "ctf-meta-visitors.hpp"
 #include "ctf-meta.hpp"
-#include "decoder.hpp"
 
 /* Bit value (left shift) */
 #define _BV(_val) (1 << (_val))
@@ -471,14 +470,14 @@ ctf_visitor_generate_ir::~ctf_visitor_generate_ir()
  * @returns    New visitor context, or NULL on error
  */
 static ctf_visitor_generate_ir::UP
-ctx_create(const struct ctf_metadata_decoder_config *decoder_config, const bt2c::Logger& logger)
+ctx_create(const ctf::src::ClkClsCfg clkClsCfg,
+           const bt2::OptionalBorrowedObject<bt2::SelfComponent> selfComp,
+           const bt2c::Logger& logger)
 {
-    BT_ASSERT(decoder_config);
+    ctf_visitor_generate_ir::UP ctx {new ctf_visitor_generate_ir {clkClsCfg, selfComp, logger}};
 
-    ctf_visitor_generate_ir::UP ctx {new ctf_visitor_generate_ir {*decoder_config, logger}};
-
-    if (decoder_config->self_comp) {
-        bt_trace_class *trace_class = bt_trace_class_create(decoder_config->self_comp);
+    if (selfComp) {
+        bt_trace_class *trace_class = bt_trace_class_create(selfComp->libObjPtr());
         if (!trace_class) {
             BT_CPPLOGE_APPEND_CAUSE_SPEC(ctx->logger, "Cannot create empty trace class.");
             goto error;
@@ -4186,7 +4185,7 @@ static inline uint64_t cycles_from_ns(uint64_t frequency, uint64_t ns)
 static void apply_clock_class_is_absolute(struct ctf_visitor_generate_ir *ctx,
                                           struct ctf_clock_class *clock)
 {
-    if (ctx->decoder_config.clkClsCfg.forceOriginIsUnixEpoch) {
+    if (ctx->clkClsCfg.forceOriginIsUnixEpoch) {
         clock->is_absolute = true;
     }
 
@@ -4197,33 +4196,30 @@ static void apply_clock_class_offset(struct ctf_visitor_generate_ir *ctx,
                                      struct ctf_clock_class *clock)
 {
     uint64_t freq;
-    int64_t offset_s_to_apply = ctx->decoder_config.clkClsCfg.offsetSec;
+    int64_t offset_s_to_apply = ctx->clkClsCfg.offsetSec;
     uint64_t offset_ns_to_apply;
     int64_t cur_offset_s;
     uint64_t cur_offset_cycles;
     long long offsetSecLL;
     unsigned long long offsetCyclesULL;
 
-    if (ctx->decoder_config.clkClsCfg.offsetSec == 0 &&
-        ctx->decoder_config.clkClsCfg.offsetNanoSec == 0) {
+    if (ctx->clkClsCfg.offsetSec == 0 && ctx->clkClsCfg.offsetNanoSec == 0) {
         goto end;
     }
 
     /* Transfer nanoseconds to seconds as much as possible */
-    if (ctx->decoder_config.clkClsCfg.offsetNanoSec < 0) {
-        const int64_t abs_ns = -ctx->decoder_config.clkClsCfg.offsetNanoSec;
+    if (ctx->clkClsCfg.offsetNanoSec < 0) {
+        const int64_t abs_ns = -ctx->clkClsCfg.offsetNanoSec;
         const int64_t abs_extra_s = abs_ns / INT64_C(1000000000) + 1;
         const int64_t extra_s = -abs_extra_s;
-        const int64_t offset_ns =
-            ctx->decoder_config.clkClsCfg.offsetNanoSec - (extra_s * INT64_C(1000000000));
+        const int64_t offset_ns = ctx->clkClsCfg.offsetNanoSec - (extra_s * INT64_C(1000000000));
 
         BT_ASSERT(offset_ns > 0);
         offset_ns_to_apply = (uint64_t) offset_ns;
         offset_s_to_apply += extra_s;
     } else {
-        const int64_t extra_s = ctx->decoder_config.clkClsCfg.offsetNanoSec / INT64_C(1000000000);
-        const int64_t offset_ns =
-            ctx->decoder_config.clkClsCfg.offsetNanoSec - (extra_s * INT64_C(1000000000));
+        const int64_t extra_s = ctx->clkClsCfg.offsetNanoSec / INT64_C(1000000000);
+        const int64_t offset_ns = ctx->clkClsCfg.offsetNanoSec - (extra_s * INT64_C(1000000000));
 
         BT_ASSERT(offset_ns >= 0);
         offset_ns_to_apply = (uint64_t) offset_ns;
@@ -4404,13 +4400,14 @@ end:
 }
 
 ctf_visitor_generate_ir::UP
-ctf_visitor_generate_ir_create(const struct ctf_metadata_decoder_config *decoder_config)
+ctf_visitor_generate_ir_create(const ctf::src::ClkClsCfg& clkClsCfg,
+                               const bt2::OptionalBorrowedObject<bt2::SelfComponent> selfComp,
+                               const bt2c::Logger& parentLogger)
 {
-    bt2c::Logger logger {decoder_config->logger, "PLUGIN/CTF/META/IR-VISITOR"};
+    bt2c::Logger logger {parentLogger, "PLUGIN/CTF/META/IR-VISITOR"};
 
     /* Create visitor's context */
-    ctf_visitor_generate_ir::UP ctx = ctx_create(decoder_config, logger);
-
+    ctf_visitor_generate_ir::UP ctx = ctx_create(clkClsCfg, selfComp, logger);
     if (!ctx) {
         BT_CPPLOGE_APPEND_CAUSE_SPEC(logger, "Cannot create visitor's context.");
         goto error;
@@ -4663,8 +4660,7 @@ int ctf_visitor_generate_ir_visit_node(struct ctf_visitor_generate_ir *ctx, stru
 
     if (ctx->trace_class) {
         /* Copy new CTF metadata -> new IR metadata */
-        ret = ctf_trace_class_translate(ctx->decoder_config.self_comp,
-                                        ctx->trace_class->libObjPtr(), ctx->ctf_tc);
+        ret = ctf_trace_class_translate(ctx->selfComp, ctx->trace_class->libObjPtr(), ctx->ctf_tc);
         if (ret) {
             ret = -EINVAL;
             goto end;
This page took 0.030072 seconds and 4 git commands to generate.