#include "common/assert.h"
#include "common/list.h"
+#include "cpp-common/bt2/trace-ir.hpp"
#include "cpp-common/vendor/fmt/format.h" /* IWYU pragma: keep */
#include "ctf-meta.hpp"
}
/* Trace IR trace class being filled (owned by this) */
- bt_trace_class *trace_class = nullptr;
+ bt2::TraceClass::Shared trace_class;
/* CTF meta trace being filled (owned by this) */
struct ctf_trace_class *ctf_tc = nullptr;
ctf_visitor_generate_ir::UP
ctf_visitor_generate_ir_create(const struct ctf_metadata_decoder_config *config);
-bt_trace_class *ctf_visitor_generate_ir_get_ir_trace_class(struct ctf_visitor_generate_ir *visitor);
+bt2::TraceClass::Shared
+ctf_visitor_generate_ir_get_ir_trace_class(struct ctf_visitor_generate_ir *visitor);
struct ctf_trace_class *
ctf_visitor_generate_ir_borrow_ctf_trace_class(struct ctf_visitor_generate_ir *visitor);
return status;
}
-bt_trace_class *ctf_metadata_decoder_get_ir_trace_class(struct ctf_metadata_decoder *mdec)
+bt2::TraceClass::Shared ctf_metadata_decoder_get_ir_trace_class(struct ctf_metadata_decoder *mdec)
{
BT_ASSERT_DBG(mdec);
BT_ASSERT_DBG(mdec->config.create_trace_class);
#include <babeltrace2/babeltrace.h>
#include "common/uuid.h"
+#include "cpp-common/bt2/trace-ir.hpp"
#include "cpp-common/bt2c/logging.hpp"
#include "cpp-common/vendor/fmt/format.h" /* IWYU pragma: keep */
* Returns `NULL` if there's none yet or if the metadata decoder is not
* configured to create trace classes.
*/
-bt_trace_class *ctf_metadata_decoder_get_ir_trace_class(struct ctf_metadata_decoder *mdec);
+bt2::TraceClass::Shared ctf_metadata_decoder_get_ir_trace_class(struct ctf_metadata_decoder *mdec);
/*
* Returns the CTF IR trace class of this metadata decoder.
scope = parent_scope;
}
- bt_trace_class_put_ref(ctx->trace_class);
-
if (ctx->ctf_tc) {
ctf_trace_class_destroy(ctx->ctf_tc);
}
ctf_visitor_generate_ir::UP ctx {new ctf_visitor_generate_ir {*decoder_config, logger}};
if (decoder_config->self_comp) {
- ctx->trace_class = bt_trace_class_create(decoder_config->self_comp);
- if (!ctx->trace_class) {
+ bt_trace_class *trace_class = bt_trace_class_create(decoder_config->self_comp);
+ if (!trace_class) {
BT_CPPLOGE_APPEND_CAUSE_SPEC(ctx->logger, "Cannot create empty trace class.");
goto error;
}
+
+ ctx->trace_class = bt2::TraceClass::Shared::createWithoutRef(trace_class);
}
ctx->ctf_tc = ctf_trace_class_create();
ctf_visitor_generate_ir_destroy(visitor);
}
-bt_trace_class *ctf_visitor_generate_ir_get_ir_trace_class(struct ctf_visitor_generate_ir *ctx)
+bt2::TraceClass::Shared
+ctf_visitor_generate_ir_get_ir_trace_class(struct ctf_visitor_generate_ir *ctx)
{
BT_ASSERT_DBG(ctx);
- if (ctx->trace_class) {
- bt_trace_class_get_ref(ctx->trace_class);
- }
-
return ctx->trace_class;
}
if (ctx->trace_class) {
/* Copy new CTF metadata -> new IR metadata */
- ret =
- ctf_trace_class_translate(ctx->decoder_config.self_comp, ctx->trace_class, ctx->ctf_tc);
+ ret = ctf_trace_class_translate(ctx->decoder_config.self_comp,
+ ctx->trace_class->libObjPtr(), ctx->ctf_tc);
if (ret) {
ret = -EINVAL;
goto end;
const ctf::src::ClkClsCfg& clkClsCfg)
{
int ret = 0;
+ bt2::TraceClass::Shared traceCls;
ctf_metadata_decoder_config decoder_config {ctf_fs_trace->logger};
decoder_config.self_comp = self_comp;
goto end;
}
- ctf_fs_trace->metadata->trace_class =
- ctf_metadata_decoder_get_ir_trace_class(ctf_fs_trace->metadata->decoder.get());
+ traceCls = ctf_metadata_decoder_get_ir_trace_class(ctf_fs_trace->metadata->decoder.get());
+ if (traceCls) {
+ ctf_fs_trace->metadata->trace_class = traceCls.release().libObjPtr();
+ }
BT_ASSERT(!self_comp || ctf_fs_trace->metadata->trace_class);
+
ctf_fs_trace->metadata->tc =
ctf_metadata_decoder_borrow_ctf_trace_class(ctf_fs_trace->metadata->decoder.get());
BT_ASSERT(ctf_fs_trace->metadata->tc);
struct ctf_trace_class *tc =
ctf_metadata_decoder_borrow_ctf_trace_class(metadata->decoder.get());
- trace->trace_class = ctf_metadata_decoder_get_ir_trace_class(metadata->decoder.get());
+ trace->trace_class = ctf_metadata_decoder_get_ir_trace_class(metadata->decoder.get())
+ .release()
+ .libObjPtr();
trace->trace = bt_trace_create(trace->trace_class);
if (!trace->trace) {
BT_CPPLOGE_APPEND_CAUSE_SPEC(metadata->logger, "Failed to create bt_trace");