ctf: make ctf_visitor_generate_ir not use ctf_metadata_decoder_config
authorSimon Marchi <simon.marchi@efficios.com>
Tue, 23 Aug 2022 14:19:45 +0000 (10:19 -0400)
committerSimon Marchi <simon.marchi@efficios.com>
Tue, 23 Aug 2022 16:06:16 +0000 (12:06 -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>
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/decoder.cpp
src/plugins/ctf/common/src/metadata/tsdl/visitor-generate-ir.cpp

index a3afceff6b2de3c031e687b7836c78358fcd0c51..28785b9f1e0f7ec83f25693efbe9c9fd555ea29d 100644 (file)
@@ -363,11 +363,19 @@ struct ctf_visitor_generate_ir
 {
     using UP = std::unique_ptr<ctf_visitor_generate_ir, ctf_visitor_generate_ir_deleter>;
 
-    explicit ctf_visitor_generate_ir(const ctf_metadata_decoder_config& decoderConfig) noexcept :
-        decoder_config {decoderConfig}
+    explicit ctf_visitor_generate_ir(const ctf::src::ClkClsCfg clkClsCfgParam,
+                                     bt_self_component *selfCompParam,
+                                     const bt2_common::LogCfg& logCfgParam) noexcept :
+        logCfg {logCfgParam},
+        selfComp {selfCompParam}, clkClsCfg {clkClsCfgParam}
     {
     }
 
+    const bt2_common::LogCfg logCfg;
+
+    /* Weak, used to create a bt_trace_class, if not nullptr. */
+    bt_self_component *selfComp = nullptr;
+
     /* Trace IR trace class being filled (owned by this) */
     nonstd::optional<bt2::TraceClass::Shared> trace_class;
 
@@ -383,13 +391,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;
+    const ctf::src::ClkClsCfg clkClsCfg;
 };
 
 BT_HIDDEN
-ctf_visitor_generate_ir::UP
-ctf_visitor_generate_ir_create(const struct ctf_metadata_decoder_config *config);
+ctf_visitor_generate_ir::UP ctf_visitor_generate_ir_create(const ctf::src::ClkClsCfg clkClsCfg,
+                                                           bt_self_component *selfComp,
+                                                           const bt2_common::LogCfg& logCfg);
 
 BT_HIDDEN
 nonstd::optional<bt2::TraceClass::Shared>
index 78e8862a035f1db335b4ede775191c3cb725896c..99404af935b20dda990a8565d8be55d72167acac 100644 (file)
@@ -686,12 +686,10 @@ Ctf1MetadataStreamParser::Ctf1MetadataStreamParser(const ClkClsCfg& clkClsCfg,
                                                    bt_self_component * const selfComp,
                                                    const bt2c::LogCfg& logCfg) :
     MetadataStreamParser {clkClsCfg, selfComp},
-    _mLogCfg {logCfg}, _mScanner {ctf_scanner_alloc()}, _mStreamDecoder {logCfg}
+    _mLogCfg {logCfg}, _mOrigCtfIrGenerator {ctf_visitor_generate_ir_create(clkClsCfg, selfComp,
+                                                                            logCfg)},
+    _mScanner {ctf_scanner_alloc()}, _mStreamDecoder {logCfg}
 {
-    ctf_metadata_decoder_config metadataCfg {logCfg};
-
-    metadataCfg.clkClsCfg = clkClsCfg;
-    _mOrigCtfIrGenerator = ctf_visitor_generate_ir_create(&metadataCfg);
 }
 
 MetadataStreamParser::ParseRet Ctf1MetadataStreamParser::parse(const ClkClsCfg& clkClsCfg,
index ee3a0157ff84064e17e2e82e3801707d3d294e66..3ee706b612c55c835020a8899182a2d538167e52 100644 (file)
@@ -123,7 +123,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->logCfg);
     if (!mdec->visitor) {
         BT_CLOGE_APPEND_CAUSE("Failed to create a CTF IR metadata AST visitor: "
                               "mdec-addr=%p",
index 6eba2557f62a1d9664f86a6222fb8c30ee645ff1..d8752bb71722be455e71e5851d6930eee9976165 100644 (file)
@@ -7,7 +7,7 @@
  * Common Trace Format metadata visitor (generates CTF IR objects).
  */
 
-#define BT_CLOG_CFG (ctx->decoder_config.logCfg)
+#define BT_CLOG_CFG (ctx->logCfg)
 #define BT_LOG_TAG  "PLUGIN/CTF/META/IR-VISITOR"
 
 #include <stdio.h>
@@ -518,15 +518,14 @@ end:
  * @param trace        Associated trace
  * @returns    New visitor context, or NULL on error
  */
-static ctf_visitor_generate_ir::UP
-ctx_create(const struct ctf_metadata_decoder_config *decoder_config)
+static ctf_visitor_generate_ir::UP ctx_create(const ctf::src::ClkClsCfg clkClsCfg,
+                                              bt_self_component *selfComp,
+                                              const bt2_common::LogCfg& logCfg)
 {
-    BT_ASSERT(decoder_config);
+    ctf_visitor_generate_ir::UP ctx {new ctf_visitor_generate_ir {clkClsCfg, selfComp, logCfg}};
 
-    ctf_visitor_generate_ir::UP ctx {new ctf_visitor_generate_ir {*decoder_config}};
-
-    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);
         if (!trace_class) {
             BT_CLOGE_APPEND_CAUSE("Cannot create empty trace class.");
             goto error;
@@ -548,7 +547,6 @@ ctx_create(const struct ctf_metadata_decoder_config *decoder_config)
         goto error;
     }
 
-    ctx->decoder_config = *decoder_config;
     goto end;
 
 error:
@@ -789,7 +787,7 @@ end:
 static int get_unary_uuid(struct ctf_visitor_generate_ir *ctx, struct bt_list_head *head,
                           bt_uuid_t uuid)
 {
-    return ctf_ast_get_unary_uuid(head, uuid, ctx->decoder_config.logCfg);
+    return ctf_ast_get_unary_uuid(head, uuid, ctx->logCfg);
 }
 
 static int get_boolean(struct ctf_visitor_generate_ir *ctx, struct ctf_node *unary_expr)
@@ -4209,7 +4207,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;
     }
 
@@ -4220,33 +4218,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;
@@ -4418,13 +4413,14 @@ end:
 }
 
 BT_HIDDEN
-ctf_visitor_generate_ir::UP
-ctf_visitor_generate_ir_create(const struct ctf_metadata_decoder_config *decoder_config)
+ctf_visitor_generate_ir::UP ctf_visitor_generate_ir_create(const ctf::src::ClkClsCfg clkClsCfg,
+                                                           bt_self_component *selfComp,
+                                                           const bt2_common::LogCfg& logCfg)
 {
     /* Create visitor's context */
-    ctf_visitor_generate_ir::UP ctx = ctx_create(decoder_config);
+    ctf_visitor_generate_ir::UP ctx = ctx_create(clkClsCfg, selfComp, logCfg);
     if (!ctx) {
-        BT_CLOGE_APPEND_CAUSE_EX(decoder_config->logCfg, "Cannot create visitor's context.");
+        BT_CLOGE_APPEND_CAUSE_EX(logCfg, "Cannot create visitor's context.");
         goto error;
     }
 
@@ -4608,7 +4604,7 @@ int ctf_visitor_generate_ir_visit_node(struct ctf_visitor_generate_ir *ctx, stru
     }
 
     /* Update default clock classes */
-    ret = ctf_trace_class_update_default_clock_classes(ctx->ctf_tc, ctx->decoder_config.logCfg);
+    ret = ctf_trace_class_update_default_clock_classes(ctx->ctf_tc, ctx->logCfg);
     if (ret) {
         ret = -EINVAL;
         goto end;
@@ -4643,7 +4639,7 @@ int ctf_visitor_generate_ir_visit_node(struct ctf_visitor_generate_ir *ctx, stru
     }
 
     /* Resolve sequence lengths and variant tags */
-    ret = ctf_trace_class_resolve_field_classes(ctx->ctf_tc, ctx->decoder_config.logCfg);
+    ret = ctf_trace_class_resolve_field_classes(ctx->ctf_tc, ctx->logCfg);
     if (ret) {
         ret = -EINVAL;
         goto end;
@@ -4672,7 +4668,7 @@ int ctf_visitor_generate_ir_visit_node(struct ctf_visitor_generate_ir *ctx, stru
     }
 
     /* Validate what we have so far */
-    ret = ctf_trace_class_validate(ctx->ctf_tc, ctx->decoder_config.logCfg);
+    ret = ctf_trace_class_validate(ctx->ctf_tc, ctx->logCfg);
     if (ret) {
         ret = -EINVAL;
         goto end;
@@ -4683,12 +4679,12 @@ int ctf_visitor_generate_ir_visit_node(struct ctf_visitor_generate_ir *ctx, stru
      * itself in the packet header and in event header field
      * classes, warn about it because they are never translated.
      */
-    ctf_trace_class_warn_meaningless_header_fields(ctx->ctf_tc, ctx->decoder_config.logCfg);
+    ctf_trace_class_warn_meaningless_header_fields(ctx->ctf_tc, ctx->logCfg);
 
     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.042735 seconds and 5 git commands to generate.