X-Git-Url: https://git.efficios.com/?a=blobdiff_plain;f=src%2Fplugins%2Fctf%2Ffs-sink%2Ftranslate-trace-ir-to-ctf-ir.cpp;h=96884a162af12a366ecafb8ea32f5e2ee238d059;hb=a1501ac9839c62c056230bcae11f06b483e5e347;hp=80adcc3aa3bc32f3729a2c312f6aedb24927351c;hpb=d50d46f31cc000f03601eeaf8a0806a0c183c1d0;p=babeltrace.git diff --git a/src/plugins/ctf/fs-sink/translate-trace-ir-to-ctf-ir.cpp b/src/plugins/ctf/fs-sink/translate-trace-ir-to-ctf-ir.cpp index 80adcc3a..96884a16 100644 --- a/src/plugins/ctf/fs-sink/translate-trace-ir-to-ctf-ir.cpp +++ b/src/plugins/ctf/fs-sink/translate-trace-ir-to-ctf-ir.cpp @@ -4,29 +4,28 @@ * Copyright 2019 Philippe Proulx */ +#include + +#include +#include +#include + +#include + #define BT_COMP_LOG_SELF_COMP (ctx->self_comp) #define BT_LOG_OUTPUT_LEVEL (ctx->log_level) #define BT_LOG_TAG "PLUGIN/SINK.CTF.FS/TRANSLATE-TRACE-IR-TO-CTF-IR" #include "logging/comp-logging.h" -#include "translate-trace-ir-to-ctf-ir.hpp" - -#include -#include "common/macros.h" -#include "common/common.h" #include "common/assert.h" -#include -#include -#include -#include -#include +#include "common/common.h" -#include "fs-sink.hpp" #include "fs-sink-ctf-meta.hpp" +#include "fs-sink.hpp" +#include "translate-trace-ir-to-ctf-ir.hpp" struct field_path_elem { - uint64_t index_in_parent; GString *name; /* Weak */ @@ -36,7 +35,10 @@ struct field_path_elem struct fs_sink_ctf_field_class *parent_fc; }; -struct ctx +namespace ctf { +namespace sink { + +struct TraceIrToCtfIrCtx { bt_logging_level log_level; bt_self_component *self_comp; @@ -54,13 +56,17 @@ struct ctx GArray *cur_path; }; -static inline struct field_path_elem *cur_path_stack_at(struct ctx *ctx, uint64_t i) +} /* namespace sink */ +} /* namespace ctf */ + +static inline struct field_path_elem *cur_path_stack_at(ctf::sink::TraceIrToCtfIrCtx *ctx, + uint64_t i) { BT_ASSERT(i < ctx->cur_path->len); return &bt_g_array_index(ctx->cur_path, struct field_path_elem, i); } -static inline struct field_path_elem *cur_path_stack_top(struct ctx *ctx) +static inline struct field_path_elem *cur_path_stack_top(ctf::sink::TraceIrToCtfIrCtx *ctx) { BT_ASSERT(ctx->cur_path->len > 0); return cur_path_stack_at(ctx, ctx->cur_path->len - 1); @@ -152,7 +158,7 @@ end: return must_protect; } -static inline int cur_path_stack_push(struct ctx *ctx, uint64_t index_in_parent, const char *name, +static inline int cur_path_stack_push(ctf::sink::TraceIrToCtfIrCtx *ctx, const char *name, bool force_protect_name, const bt_field_class *ir_fc, struct fs_sink_ctf_field_class *parent_fc) { @@ -161,7 +167,6 @@ static inline int cur_path_stack_push(struct ctx *ctx, uint64_t index_in_parent, g_array_set_size(ctx->cur_path, ctx->cur_path->len + 1); field_path_elem = cur_path_stack_top(ctx); - field_path_elem->index_in_parent = index_in_parent; field_path_elem->name = g_string_new(NULL); if (name) { @@ -202,7 +207,7 @@ end: return ret; } -static inline void cur_path_stack_pop(struct ctx *ctx) +static inline void cur_path_stack_pop(ctf::sink::TraceIrToCtfIrCtx *ctx) { struct field_path_elem *field_path_elem; @@ -229,8 +234,8 @@ static inline void cur_path_stack_pop(struct ctx *ctx) * * Returns a negative value if this resolving operation failed. */ -static int create_relative_field_ref(struct ctx *ctx, const bt_field_path *tgt_ir_field_path, - GString *tgt_field_ref, +static int create_relative_field_ref(ctf::sink::TraceIrToCtfIrCtx *ctx, + const bt_field_path *tgt_ir_field_path, GString *tgt_field_ref, struct fs_sink_ctf_field_class **user_tgt_fc) { int ret = 0; @@ -394,8 +399,8 @@ end: * * Returns a negative value if this resolving operation failed. */ -static int create_absolute_field_ref(struct ctx *ctx, const bt_field_path *tgt_ir_field_path, - GString *tgt_field_ref, +static int create_absolute_field_ref(ctf::sink::TraceIrToCtfIrCtx *ctx, + const bt_field_path *tgt_ir_field_path, GString *tgt_field_ref, struct fs_sink_ctf_field_class **user_tgt_fc) { int ret = 0; @@ -477,9 +482,9 @@ end: * created immediately before (in which case `tgt_field_ref` is * irrelevant). */ -static void resolve_field_class(struct ctx *ctx, const bt_field_path *tgt_ir_field_path, - GString *tgt_field_ref, bool *create_before, - struct fs_sink_ctf_field_class **user_tgt_fc) +static void resolve_field_class(ctf::sink::TraceIrToCtfIrCtx *ctx, + const bt_field_path *tgt_ir_field_path, GString *tgt_field_ref, + bool *create_before, struct fs_sink_ctf_field_class **user_tgt_fc) { int ret; bt_field_path_scope tgt_scope; @@ -527,9 +532,10 @@ end: return; } -static int translate_field_class(struct ctx *ctx); +static int translate_field_class(ctf::sink::TraceIrToCtfIrCtx *ctx); -static inline void append_to_parent_field_class(struct ctx *ctx, struct fs_sink_ctf_field_class *fc) +static inline void append_to_parent_field_class(ctf::sink::TraceIrToCtfIrCtx *ctx, + struct fs_sink_ctf_field_class *fc) { struct fs_sink_ctf_field_class *parent_fc = cur_path_stack_top(ctx)->parent_fc; @@ -568,7 +574,8 @@ static inline void append_to_parent_field_class(struct ctx *ctx, struct fs_sink_ } } -static inline void update_parent_field_class_alignment(struct ctx *ctx, unsigned int alignment) +static inline void update_parent_field_class_alignment(ctf::sink::TraceIrToCtfIrCtx *ctx, + unsigned int alignment) { struct fs_sink_ctf_field_class *parent_fc = cur_path_stack_top(ctx)->parent_fc; @@ -591,8 +598,10 @@ static inline void update_parent_field_class_alignment(struct ctx *ctx, unsigned } } -static inline int translate_structure_field_class_members( - struct ctx *ctx, struct fs_sink_ctf_field_class_struct *struct_fc, const bt_field_class *ir_fc) +static inline int +translate_structure_field_class_members(ctf::sink::TraceIrToCtfIrCtx *ctx, + struct fs_sink_ctf_field_class_struct *struct_fc, + const bt_field_class *ir_fc) { int ret = 0; uint64_t i; @@ -605,7 +614,7 @@ static inline int translate_structure_field_class_members( member = bt_field_class_structure_borrow_member_by_index_const(ir_fc, i); name = bt_field_class_structure_member_get_name(member); memb_ir_fc = bt_field_class_structure_member_borrow_field_class_const(member); - ret = cur_path_stack_push(ctx, i, name, true, memb_ir_fc, &struct_fc->base); + ret = cur_path_stack_push(ctx, name, true, memb_ir_fc, &struct_fc->base); if (ret) { BT_COMP_LOGE("Cannot translate structure field class member: " "name=\"%s\"", @@ -628,11 +637,11 @@ end: return ret; } -static inline int translate_structure_field_class(struct ctx *ctx) +static inline int translate_structure_field_class(ctf::sink::TraceIrToCtfIrCtx *ctx) { int ret; - struct fs_sink_ctf_field_class_struct *fc = fs_sink_ctf_field_class_struct_create_empty( - cur_path_stack_top(ctx)->ir_fc, cur_path_stack_top(ctx)->index_in_parent); + struct fs_sink_ctf_field_class_struct *fc = + fs_sink_ctf_field_class_struct_create_empty(cur_path_stack_top(ctx)->ir_fc); BT_ASSERT(fc); append_to_parent_field_class(ctx, &fc->base); @@ -842,10 +851,10 @@ end: return ret; } -static inline int translate_option_field_class(struct ctx *ctx) +static inline int translate_option_field_class(ctf::sink::TraceIrToCtfIrCtx *ctx) { - struct fs_sink_ctf_field_class_option *fc = fs_sink_ctf_field_class_option_create_empty( - cur_path_stack_top(ctx)->ir_fc, cur_path_stack_top(ctx)->index_in_parent); + struct fs_sink_ctf_field_class_option *fc = + fs_sink_ctf_field_class_option_create_empty(cur_path_stack_top(ctx)->ir_fc); const bt_field_class *content_ir_fc = bt_field_class_option_borrow_field_class_const(fc->base.ir_fc); int ret; @@ -864,7 +873,7 @@ static inline int translate_option_field_class(struct ctx *ctx) * unsigned enumeration field class). */ append_to_parent_field_class(ctx, &fc->base); - ret = cur_path_stack_push(ctx, UINT64_C(-1), NULL, false, content_ir_fc, &fc->base); + ret = cur_path_stack_push(ctx, NULL, false, content_ir_fc, &fc->base); if (ret) { BT_COMP_LOGE_STR("Cannot translate option field class content."); goto end; @@ -883,12 +892,12 @@ end: return ret; } -static inline int translate_variant_field_class(struct ctx *ctx) +static inline int translate_variant_field_class(ctf::sink::TraceIrToCtfIrCtx *ctx) { int ret = 0; uint64_t i; - struct fs_sink_ctf_field_class_variant *fc = fs_sink_ctf_field_class_variant_create_empty( - cur_path_stack_top(ctx)->ir_fc, cur_path_stack_top(ctx)->index_in_parent); + struct fs_sink_ctf_field_class_variant *fc = + fs_sink_ctf_field_class_variant_create_empty(cur_path_stack_top(ctx)->ir_fc); bt_field_class_type ir_fc_type; const bt_field_path *ir_selector_field_path = NULL; struct fs_sink_ctf_field_class *tgt_fc = NULL; @@ -1015,7 +1024,7 @@ append_to_parent: * option name because it's already protected at this * point. */ - ret = cur_path_stack_push(ctx, i, prot_opt_name, false, opt_ir_fc, &fc->base); + ret = cur_path_stack_push(ctx, prot_opt_name, false, opt_ir_fc, &fc->base); if (ret) { BT_COMP_LOGE("Cannot translate variant field class option: " "name=\"%s\"", @@ -1043,17 +1052,17 @@ end: return ret; } -static inline int translate_static_array_field_class(struct ctx *ctx) +static inline int translate_static_array_field_class(ctf::sink::TraceIrToCtfIrCtx *ctx) { - struct fs_sink_ctf_field_class_array *fc = fs_sink_ctf_field_class_array_create_empty( - cur_path_stack_top(ctx)->ir_fc, cur_path_stack_top(ctx)->index_in_parent); + struct fs_sink_ctf_field_class_array *fc = + fs_sink_ctf_field_class_array_create_empty(cur_path_stack_top(ctx)->ir_fc); const bt_field_class *elem_ir_fc = bt_field_class_array_borrow_element_field_class_const(fc->base.base.ir_fc); int ret; BT_ASSERT(fc); append_to_parent_field_class(ctx, &fc->base.base); - ret = cur_path_stack_push(ctx, UINT64_C(-1), NULL, false, elem_ir_fc, &fc->base.base); + ret = cur_path_stack_push(ctx, NULL, false, elem_ir_fc, &fc->base.base); if (ret) { BT_COMP_LOGE_STR("Cannot translate static array field class element."); goto end; @@ -1072,10 +1081,10 @@ end: return ret; } -static inline int translate_dynamic_array_field_class(struct ctx *ctx) +static inline int translate_dynamic_array_field_class(ctf::sink::TraceIrToCtfIrCtx *ctx) { - struct fs_sink_ctf_field_class_sequence *fc = fs_sink_ctf_field_class_sequence_create_empty( - cur_path_stack_top(ctx)->ir_fc, cur_path_stack_top(ctx)->index_in_parent); + struct fs_sink_ctf_field_class_sequence *fc = + fs_sink_ctf_field_class_sequence_create_empty(cur_path_stack_top(ctx)->ir_fc); const bt_field_class *elem_ir_fc = bt_field_class_array_borrow_element_field_class_const(fc->base.base.ir_fc); int ret; @@ -1093,7 +1102,7 @@ static inline int translate_dynamic_array_field_class(struct ctx *ctx) } append_to_parent_field_class(ctx, &fc->base.base); - ret = cur_path_stack_push(ctx, UINT64_C(-1), NULL, false, elem_ir_fc, &fc->base.base); + ret = cur_path_stack_push(ctx, NULL, false, elem_ir_fc, &fc->base.base); if (ret) { BT_COMP_LOGE_STR("Cannot translate dynamic array field class element."); goto end; @@ -1112,50 +1121,50 @@ end: return ret; } -static inline int translate_bool_field_class(struct ctx *ctx) +static inline int translate_bool_field_class(ctf::sink::TraceIrToCtfIrCtx *ctx) { - struct fs_sink_ctf_field_class_bool *fc = fs_sink_ctf_field_class_bool_create( - cur_path_stack_top(ctx)->ir_fc, cur_path_stack_top(ctx)->index_in_parent); + struct fs_sink_ctf_field_class_bool *fc = + fs_sink_ctf_field_class_bool_create(cur_path_stack_top(ctx)->ir_fc); BT_ASSERT(fc); append_to_parent_field_class(ctx, &fc->base.base); return 0; } -static inline int translate_bit_array_field_class(struct ctx *ctx) +static inline int translate_bit_array_field_class(ctf::sink::TraceIrToCtfIrCtx *ctx) { - struct fs_sink_ctf_field_class_bit_array *fc = fs_sink_ctf_field_class_bit_array_create( - cur_path_stack_top(ctx)->ir_fc, cur_path_stack_top(ctx)->index_in_parent); + struct fs_sink_ctf_field_class_bit_array *fc = + fs_sink_ctf_field_class_bit_array_create(cur_path_stack_top(ctx)->ir_fc); BT_ASSERT(fc); append_to_parent_field_class(ctx, &fc->base); return 0; } -static inline int translate_integer_field_class(struct ctx *ctx) +static inline int translate_integer_field_class(ctf::sink::TraceIrToCtfIrCtx *ctx) { - struct fs_sink_ctf_field_class_int *fc = fs_sink_ctf_field_class_int_create( - cur_path_stack_top(ctx)->ir_fc, cur_path_stack_top(ctx)->index_in_parent); + struct fs_sink_ctf_field_class_int *fc = + fs_sink_ctf_field_class_int_create(cur_path_stack_top(ctx)->ir_fc); BT_ASSERT(fc); append_to_parent_field_class(ctx, &fc->base.base); return 0; } -static inline int translate_real_field_class(struct ctx *ctx) +static inline int translate_real_field_class(ctf::sink::TraceIrToCtfIrCtx *ctx) { - struct fs_sink_ctf_field_class_float *fc = fs_sink_ctf_field_class_float_create( - cur_path_stack_top(ctx)->ir_fc, cur_path_stack_top(ctx)->index_in_parent); + struct fs_sink_ctf_field_class_float *fc = + fs_sink_ctf_field_class_float_create(cur_path_stack_top(ctx)->ir_fc); BT_ASSERT(fc); append_to_parent_field_class(ctx, &fc->base.base); return 0; } -static inline int translate_string_field_class(struct ctx *ctx) +static inline int translate_string_field_class(ctf::sink::TraceIrToCtfIrCtx *ctx) { - struct fs_sink_ctf_field_class_string *fc = fs_sink_ctf_field_class_string_create( - cur_path_stack_top(ctx)->ir_fc, cur_path_stack_top(ctx)->index_in_parent); + struct fs_sink_ctf_field_class_string *fc = + fs_sink_ctf_field_class_string_create(cur_path_stack_top(ctx)->ir_fc); BT_ASSERT(fc); append_to_parent_field_class(ctx, &fc->base); @@ -1169,7 +1178,7 @@ static inline int translate_string_field_class(struct ctx *ctx) * within its parent are in the context's current path's top element * (cur_path_stack_top()). */ -static int translate_field_class(struct ctx *ctx) +static int translate_field_class(ctf::sink::TraceIrToCtfIrCtx *ctx) { int ret; bt_field_class_type ir_fc_type = bt_field_class_get_type(cur_path_stack_top(ctx)->ir_fc); @@ -1419,7 +1428,7 @@ end: * class and then calls translate_structure_field_class_members() to * fill it. */ -static int translate_scope_field_class(struct ctx *ctx, bt_field_path_scope scope, +static int translate_scope_field_class(ctf::sink::TraceIrToCtfIrCtx *ctx, bt_field_path_scope scope, struct fs_sink_ctf_field_class **fc, const bt_field_class *ir_fc) { @@ -1431,11 +1440,11 @@ static int translate_scope_field_class(struct ctx *ctx, bt_field_path_scope scop BT_ASSERT(bt_field_class_get_type(ir_fc) == BT_FIELD_CLASS_TYPE_STRUCTURE); BT_ASSERT(fc); - *fc = &fs_sink_ctf_field_class_struct_create_empty(ir_fc, UINT64_C(-1))->base; + *fc = &fs_sink_ctf_field_class_struct_create_empty(ir_fc)->base; BT_ASSERT(*fc); ctx->cur_scope = scope; BT_ASSERT(ctx->cur_path->len == 0); - ret = cur_path_stack_push(ctx, UINT64_C(-1), NULL, false, ir_fc, NULL); + ret = cur_path_stack_push(ctx, NULL, false, ir_fc, NULL); if (ret) { BT_COMP_LOGE("Cannot translate scope structure field class: " "scope=%d", @@ -1461,16 +1470,16 @@ end: return ret; } -static inline void ctx_init(struct ctx *ctx, struct fs_sink_comp *fs_sink) +static inline void ctx_init(ctf::sink::TraceIrToCtfIrCtx *ctx, struct fs_sink_comp *fs_sink) { - memset(ctx, 0, sizeof(struct ctx)); + memset(ctx, 0, sizeof(*ctx)); ctx->cur_path = g_array_new(FALSE, TRUE, sizeof(struct field_path_elem)); BT_ASSERT(ctx->cur_path); ctx->log_level = fs_sink->log_level; ctx->self_comp = fs_sink->self_comp; } -static inline void ctx_fini(struct ctx *ctx) +static inline void ctx_fini(ctf::sink::TraceIrToCtfIrCtx *ctx) { if (ctx->cur_path) { g_array_free(ctx->cur_path, TRUE); @@ -1483,7 +1492,7 @@ static int translate_event_class(struct fs_sink_comp *fs_sink, struct fs_sink_ct struct fs_sink_ctf_event_class **out_ec) { int ret = 0; - struct ctx ctx; + ctf::sink::TraceIrToCtfIrCtx ctx; struct fs_sink_ctf_event_class *ec; BT_ASSERT(sc); @@ -1578,7 +1587,7 @@ static int translate_stream_class(struct fs_sink_comp *fs_sink, struct fs_sink_c struct fs_sink_ctf_stream_class **out_sc) { int ret = 0; - struct ctx ctx; + ctf::sink::TraceIrToCtfIrCtx ctx; BT_ASSERT(trace); BT_ASSERT(ir_sc);