From: Jérémie Galarneau Date: Thu, 3 Nov 2016 20:33:13 +0000 (-0400) Subject: Large performance improvement by caching event class name and id X-Git-Tag: v2.0.0-pre1~731 X-Git-Url: http://git.efficios.com/?p=babeltrace.git;a=commitdiff_plain;h=5990dd44d7b43d236e7622d24d6d4dd4e6c58379 Large performance improvement by caching event class name and id $ time ./converter/babeltrace --plugin-path=plugins ~/lttng-traces/allo-20160829-153459/kernel/ > /dev/null real 0m6.490s user 0m6.413s sys 0m0.067s Caching of event class id and name $ time ./converter/babeltrace --plugin-path=plugins ~/lttng-traces/allo-20160829-153459/kernel/ > /dev/null real 0m1.027s user 0m1.013s sys 0m0.003s Signed-off-by: Jérémie Galarneau --- diff --git a/formats/ctf/ir/event-class.c b/formats/ctf/ir/event-class.c index 750203ae..fa55457c 100644 --- a/formats/ctf/ir/event-class.c +++ b/formats/ctf/ir/event-class.c @@ -58,6 +58,7 @@ struct bt_ctf_event_class *bt_ctf_event_class_create(const char *name) goto error; } + event_class->id = -1; bt_object_init(event_class, bt_ctf_event_class_destroy); event_class->fields = bt_ctf_field_type_structure_create(); if (!event_class->fields) { @@ -112,6 +113,11 @@ const char *bt_ctf_event_class_get_name(struct bt_ctf_event_class *event_class) goto end; } + if (event_class->name) { + name = event_class->name; + goto end; + } + obj = bt_ctf_attributes_get_field_value(event_class->attributes, BT_CTF_EVENT_CLASS_ATTR_NAME_INDEX); if (!obj) { @@ -137,6 +143,11 @@ int64_t bt_ctf_event_class_get_id(struct bt_ctf_event_class *event_class) goto end; } + if (event_class->id >= 0) { + ret = event_class->id; + goto end; + } + obj = bt_ctf_attributes_get_field_value(event_class->attributes, BT_CTF_EVENT_CLASS_ATTR_ID_INDEX); if (!obj) { @@ -547,6 +558,8 @@ void bt_ctf_event_class_freeze(struct bt_ctf_event_class *event_class) { assert(event_class); event_class->frozen = 1; + event_class->name = bt_ctf_event_class_get_name(event_class); + event_class->id = bt_ctf_event_class_get_id(event_class); bt_ctf_field_type_freeze(event_class->context); bt_ctf_field_type_freeze(event_class->fields); bt_ctf_attributes_freeze(event_class->attributes); diff --git a/include/babeltrace/ctf-ir/event-class-internal.h b/include/babeltrace/ctf-ir/event-class-internal.h index 1c6a9a6c..43b6ac41 100644 --- a/include/babeltrace/ctf-ir/event-class-internal.h +++ b/include/babeltrace/ctf-ir/event-class-internal.h @@ -56,6 +56,10 @@ struct bt_ctf_event_class { * no events are created out of this event class. */ int valid; + + /* Cached values */ + const char *name; + int64_t id; }; BT_HIDDEN