From 6cfb906f11f52eebfb6f33a6ba06e05de119d2cb Mon Sep 17 00:00:00 2001 From: =?utf8?q?J=C3=A9r=C3=A9mie=20Galarneau?= Date: Thu, 12 Feb 2015 15:39:24 -0500 Subject: [PATCH] Add support for clock mapping on integer field type MIME-Version: 1.0 Content-Type: text/plain; charset=utf8 Content-Transfer-Encoding: 8bit Signed-off-by: Jérémie Galarneau --- formats/ctf/ir/event-types.c | 67 ++++++++++++++++++- .../babeltrace/ctf-ir/event-types-internal.h | 1 + include/babeltrace/ctf-ir/event-types.h | 22 ++++++ 3 files changed, 88 insertions(+), 2 deletions(-) diff --git a/formats/ctf/ir/event-types.c b/formats/ctf/ir/event-types.c index ff0b46ff..9b772a55 100644 --- a/formats/ctf/ir/event-types.c +++ b/formats/ctf/ir/event-types.c @@ -29,6 +29,7 @@ #include #include #include +#include #include #include #include @@ -503,6 +504,51 @@ end: return ret; } +struct bt_ctf_clock *bt_ctf_field_type_integer_get_mapped_clock( + struct bt_ctf_field_type *type) +{ + struct bt_ctf_field_type_integer *integer; + struct bt_ctf_clock *clock = NULL; + + if (!type) { + goto end; + } + + integer = container_of(type, struct bt_ctf_field_type_integer, parent); + clock = integer->mapped_clock; + if (clock) { + bt_ctf_clock_get(clock); + } +end: + return clock; +} + +int bt_ctf_field_type_integer_set_mapped_clock( + struct bt_ctf_field_type *type, + struct bt_ctf_clock *clock) +{ + struct bt_ctf_field_type_integer *integer; + int ret = 0; + + if (!type || type->frozen) { + ret = -1; + goto end; + } + + integer = container_of(type, struct bt_ctf_field_type_integer, parent); + if (integer->mapped_clock) { + bt_ctf_clock_put(integer->mapped_clock); + } + + if (clock) { + bt_ctf_clock_get(clock); + } + + integer->mapped_clock = clock; +end: + return ret; +} + struct bt_ctf_field_type *bt_ctf_field_type_enumeration_create( struct bt_ctf_field_type *integer_container_type) { @@ -1826,6 +1872,7 @@ void bt_ctf_field_type_integer_destroy(struct bt_ctf_ref *ref) integer = container_of( container_of(ref, struct bt_ctf_field_type, ref_count), struct bt_ctf_field_type_integer, parent); + bt_ctf_clock_put(integer->mapped_clock); g_free(integer); } @@ -2064,15 +2111,31 @@ int bt_ctf_field_type_integer_serialize(struct bt_ctf_field_type *type, { struct bt_ctf_field_type_integer *integer = container_of(type, struct bt_ctf_field_type_integer, parent); + int ret = 0; g_string_append_printf(context->string, - "integer { size = %zu; align = %zu; signed = %s; encoding = %s; base = %s; byte_order = %s; }", + "integer { size = %zu; align = %zu; signed = %s; encoding = %s; base = %s; byte_order = %s", integer->declaration.len, type->declaration->alignment, (integer->declaration.signedness ? "true" : "false"), get_encoding_string(integer->declaration.encoding), get_integer_base_string(integer->declaration.base), get_byte_order_string(integer->declaration.byte_order)); - return 0; + if (integer->mapped_clock) { + const char *clock_name = bt_ctf_clock_get_name( + integer->mapped_clock); + + if (!clock_name) { + ret = -1; + goto end; + } + + g_string_append_printf(context->string, + ", map = clock.%s.value", clock_name); + } + + g_string_append(context->string, "; }"); +end: + return ret; } static diff --git a/include/babeltrace/ctf-ir/event-types-internal.h b/include/babeltrace/ctf-ir/event-types-internal.h index 198497df..217a8948 100644 --- a/include/babeltrace/ctf-ir/event-types-internal.h +++ b/include/babeltrace/ctf-ir/event-types-internal.h @@ -57,6 +57,7 @@ struct bt_ctf_field_type { struct bt_ctf_field_type_integer { struct bt_ctf_field_type parent; struct declaration_integer declaration; + struct bt_ctf_clock *mapped_clock; }; struct enumeration_mapping { diff --git a/include/babeltrace/ctf-ir/event-types.h b/include/babeltrace/ctf-ir/event-types.h index 258c7473..774a88ed 100644 --- a/include/babeltrace/ctf-ir/event-types.h +++ b/include/babeltrace/ctf-ir/event-types.h @@ -164,6 +164,28 @@ extern int bt_ctf_field_type_integer_set_encoding( struct bt_ctf_field_type *integer, enum ctf_string_encoding encoding); +/** + * bt_ctf_field_type_integer_get_mapped_clock: get an integer type's mapped clock. + * + * @param integer Integer type. + * + * Returns the integer's mapped clock (if any), NULL on error. + */ +extern struct bt_ctf_clock *bt_ctf_field_type_integer_get_mapped_clock( + struct bt_ctf_field_type *integer); + +/** + * bt_ctf_field_type_integer_set_mapped_clock: set an integer type's mapped clock. + * + * @param integer Integer type. + * @param clock Clock to map. + * + * Returns 0 on success, a negative value on error. + */ +extern int bt_ctf_field_type_integer_set_mapped_clock( + struct bt_ctf_field_type *integer, + struct bt_ctf_clock *clock); + /* * bt_ctf_field_type_enumeration_create: create an enumeration field type. * -- 2.34.1