From 5990dd44d7b43d236e7622d24d6d4dd4e6c58379 Mon Sep 17 00:00:00 2001 From: =?utf8?q?J=C3=A9r=C3=A9mie=20Galarneau?= Date: Thu, 3 Nov 2016 16:33:13 -0400 Subject: [PATCH] Large performance improvement by caching event class name and id MIME-Version: 1.0 Content-Type: text/plain; charset=utf8 Content-Transfer-Encoding: 8bit $ 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 --- formats/ctf/ir/event-class.c | 13 +++++++++++++ include/babeltrace/ctf-ir/event-class-internal.h | 4 ++++ 2 files changed, 17 insertions(+) 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 -- 2.34.1