From: Simon Marchi Date: Wed, 17 Apr 2024 18:11:19 +0000 (-0400) Subject: ctf: make ctf_visitor_generate_ir not use ctf_metadata_decoder_config X-Git-Url: http://drtracing.org/?a=commitdiff_plain;h=9a0d8db361b938a0ba85edaa8d6256e286767dae;p=babeltrace.git ctf: make ctf_visitor_generate_ir not use ctf_metadata_decoder_config 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 Reviewed-on: https://review.lttng.org/c/babeltrace/+/8405 Reviewed-by: Philippe Proulx Reviewed-on: https://review.lttng.org/c/babeltrace/+/12741 --- diff --git a/src/plugins/ctf/common/src/metadata/tsdl/ast.hpp b/src/plugins/ctf/common/src/metadata/tsdl/ast.hpp index 93bfe8bc..6e9ab32f 100644 --- a/src/plugins/ctf/common/src/metadata/tsdl/ast.hpp +++ b/src/plugins/ctf/common/src/metadata/tsdl/ast.hpp @@ -17,11 +17,13 @@ #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; - 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 selfCompParam, + bt2c::Logger loggerParam) noexcept : + + logger {std::move(loggerParam)}, + selfComp {selfCompParam}, clkClsCfg {clkClsCfgParam} { } ~ctf_visitor_generate_ir(); + bt2c::Logger logger; + + bt2::OptionalBorrowedObject 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 selfComp, + const bt2c::Logger& parentLogger); bt2::TraceClass::Shared ctf_visitor_generate_ir_get_ir_trace_class(struct ctf_visitor_generate_ir *visitor); diff --git a/src/plugins/ctf/common/src/metadata/tsdl/ctf-1-metadata-stream-parser.cpp b/src/plugins/ctf/common/src/metadata/tsdl/ctf-1-metadata-stream-parser.cpp index 678f4c51..163c050a 100644 --- a/src/plugins/ctf/common/src/metadata/tsdl/ctf-1-metadata-stream-parser.cpp +++ b/src/plugins/ctf/common/src/metadata/tsdl/ctf-1-metadata-stream-parser.cpp @@ -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 diff --git a/src/plugins/ctf/common/src/metadata/tsdl/ctf-meta-translate.cpp b/src/plugins/ctf/common/src/metadata/tsdl/ctf-meta-translate.cpp index b62dabf6..9b3992a3 100644 --- a/src/plugins/ctf/common/src/metadata/tsdl/ctf-meta-translate.cpp +++ b/src/plugins/ctf/common/src/metadata/tsdl/ctf-meta-translate.cpp @@ -17,7 +17,7 @@ namespace ctf { struct MetaTranslateCtx { - bt_self_component *self_comp; + bt2::OptionalBorrowedObject 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 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); diff --git a/src/plugins/ctf/common/src/metadata/tsdl/ctf-meta-visitors.hpp b/src/plugins/ctf/common/src/metadata/tsdl/ctf-meta-visitors.hpp index 0b2e5b09..d83e49f1 100644 --- a/src/plugins/ctf/common/src/metadata/tsdl/ctf-meta-visitors.hpp +++ b/src/plugins/ctf/common/src/metadata/tsdl/ctf-meta-visitors.hpp @@ -9,6 +9,9 @@ #include +#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 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); diff --git a/src/plugins/ctf/common/src/metadata/tsdl/decoder.cpp b/src/plugins/ctf/common/src/metadata/tsdl/decoder.cpp index 3c985798..54121dd2 100644 --- a/src/plugins/ctf/common/src/metadata/tsdl/decoder.cpp +++ b/src/plugins/ctf/common/src/metadata/tsdl/decoder.cpp @@ -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: " diff --git a/src/plugins/ctf/common/src/metadata/tsdl/visitor-generate-ir.cpp b/src/plugins/ctf/common/src/metadata/tsdl/visitor-generate-ir.cpp index e430c18b..62a34050 100644 --- a/src/plugins/ctf/common/src/metadata/tsdl/visitor-generate-ir.cpp +++ b/src/plugins/ctf/common/src/metadata/tsdl/visitor-generate-ir.cpp @@ -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 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 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;