@brief Creates a default CTF IR trace class.
On success, the trace packet header field type of the created trace
-class has the following fields:
-
-- <code>magic</code>: a 32-bit unsigned integer field type.
-- <code>uuid</code>: an array field type of 16 8-bit unsigned integer
- field types.
-- <code>stream_id</code>: a 32-bit unsigned integer field type.
-
-You can modify this default trace packet header field type after the
-trace class is created with bt_ctf_trace_set_packet_header_type().
+class is an empty structure field type. You can modify this default
+trace packet header field type after the trace class is created with
+bt_ctf_trace_get_packet_header_type() and
+bt_ctf_trace_set_packet_header_type().
The created trace class has the following initial properties:
- <strong>Name</strong>: none. You can set a name
with bt_ctf_trace_set_name().
-- <strong>Default byte order</strong>: #BT_CTF_BYTE_ORDER_NATIVE. You
+- <strong>UUID</strong>: none. You can set a UUID with
+ bt_ctf_trace_set_uuid().
+- <strong>Native byte order</strong>: #BT_CTF_BYTE_ORDER_NATIVE. You
can set a native byte order with bt_ctf_trace_set_native_byte_order().
Note that you \em must set the native byte order if any field type
@param[in] trace_class Trace class of which to get the default byte
order.
-@returns Default byte order of \p trace_class,
+@returns Native byte order of \p trace_class,
or #BT_CTF_BYTE_ORDER_UNKNOWN on error.
@prenotnull{trace_class}
@param[in] trace_class Trace class of which to set the native byte
order.
-@param[in] native_byte_order Default byte order of the trace class.
+@param[in] native_byte_order Native byte order of the trace class.
@returns 0 on success, or a negative value on error.
@prenotnull{trace_class}
static
void bt_ctf_trace_destroy(struct bt_object *obj);
static
-int init_trace_packet_header(struct bt_ctf_trace *trace);
-static
void bt_ctf_trace_freeze(struct bt_ctf_trace *trace);
static
struct bt_ctf_trace *bt_ctf_trace_create(void)
{
struct bt_ctf_trace *trace = NULL;
+ struct bt_ctf_field_type *packet_header_type = NULL;
trace = g_new0(struct bt_ctf_trace, 1);
if (!trace) {
goto error;
}
- if (init_trace_packet_header(trace)) {
+ packet_header_type = bt_ctf_field_type_structure_create();
+ if (!packet_header_type) {
goto error;
}
+ BT_MOVE(trace->packet_header_type, packet_header_type);
+
/* Create the environment array object */
trace->environment = bt_ctf_attributes_create();
if (!trace->environment) {
error:
BT_PUT(trace);
+ bt_put(packet_header_type);
return trace;
}
trace->frozen = 1;
}
-static
-int init_trace_packet_header(struct bt_ctf_trace *trace)
-{
- int ret = 0;
- struct bt_ctf_field *magic = NULL, *uuid_array = NULL;
- struct bt_ctf_field_type *_uint32_t =
- get_field_type(FIELD_TYPE_ALIAS_UINT32_T);
- struct bt_ctf_field_type *_uint8_t =
- get_field_type(FIELD_TYPE_ALIAS_UINT8_T);
- struct bt_ctf_field_type *trace_packet_header_type =
- bt_ctf_field_type_structure_create();
- struct bt_ctf_field_type *uuid_array_type =
- bt_ctf_field_type_array_create(_uint8_t, 16);
-
- if (!trace_packet_header_type || !uuid_array_type) {
- ret = -1;
- goto end;
- }
-
- ret = bt_ctf_field_type_structure_add_field(trace_packet_header_type,
- _uint32_t, "magic");
- if (ret) {
- goto end;
- }
-
- ret = bt_ctf_field_type_structure_add_field(trace_packet_header_type,
- uuid_array_type, "uuid");
- if (ret) {
- goto end;
- }
-
- ret = bt_ctf_field_type_structure_add_field(trace_packet_header_type,
- _uint32_t, "stream_id");
- if (ret) {
- goto end;
- }
-
- ret = bt_ctf_trace_set_packet_header_type(trace,
- trace_packet_header_type);
- if (ret) {
- goto end;
- }
-end:
- bt_put(uuid_array_type);
- bt_put(_uint32_t);
- bt_put(_uint8_t);
- bt_put(magic);
- bt_put(uuid_array);
- bt_put(trace_packet_header_type);
- return ret;
-}
-
bool bt_ctf_trace_is_static(struct bt_ctf_trace *trace)
{
bool is_static = false;
static
void bt_ctf_writer_destroy(struct bt_object *obj);
+static
+int init_trace_packet_header(struct bt_ctf_trace *trace)
+{
+ int ret = 0;
+ struct bt_ctf_field *magic = NULL, *uuid_array = NULL;
+ struct bt_ctf_field_type *_uint32_t =
+ get_field_type(FIELD_TYPE_ALIAS_UINT32_T);
+ struct bt_ctf_field_type *_uint8_t =
+ get_field_type(FIELD_TYPE_ALIAS_UINT8_T);
+ struct bt_ctf_field_type *trace_packet_header_type =
+ bt_ctf_field_type_structure_create();
+ struct bt_ctf_field_type *uuid_array_type =
+ bt_ctf_field_type_array_create(_uint8_t, 16);
+
+ if (!trace_packet_header_type || !uuid_array_type) {
+ ret = -1;
+ goto end;
+ }
+
+ ret = bt_ctf_field_type_structure_add_field(trace_packet_header_type,
+ _uint32_t, "magic");
+ if (ret) {
+ goto end;
+ }
+
+ ret = bt_ctf_field_type_structure_add_field(trace_packet_header_type,
+ uuid_array_type, "uuid");
+ if (ret) {
+ goto end;
+ }
+
+ ret = bt_ctf_field_type_structure_add_field(trace_packet_header_type,
+ _uint32_t, "stream_id");
+ if (ret) {
+ goto end;
+ }
+
+ ret = bt_ctf_trace_set_packet_header_type(trace,
+ trace_packet_header_type);
+ if (ret) {
+ goto end;
+ }
+end:
+ bt_put(uuid_array_type);
+ bt_put(_uint32_t);
+ bt_put(_uint8_t);
+ bt_put(magic);
+ bt_put(uuid_array);
+ bt_put(trace_packet_header_type);
+ return ret;
+}
+
struct bt_ctf_writer *bt_ctf_writer_create(const char *path)
{
int ret;
goto error_destroy;
}
+ ret = init_trace_packet_header(writer->trace);
+ if (ret) {
+ goto error_destroy;
+ }
+
/* Generate a UUID for this writer's trace */
uuid_generate(uuid);
ret = bt_ctf_trace_set_uuid(writer->trace, uuid);