From 87655886679d8d3c1d451f108bf03ee2928dd564 Mon Sep 17 00:00:00 2001 From: Rodrigo Arias Date: Tue, 10 Sep 2024 08:54:35 +0200 Subject: [PATCH] Store ovni.part in stream metadata Allows multiple types of streams for different system parts: thread, process, cpu, node... --- src/emu/system.c | 31 ++++++++++++++++++++++++++++++- src/rt/ovni.c | 3 +++ 2 files changed, 33 insertions(+), 1 deletion(-) diff --git a/src/emu/system.c b/src/emu/system.c index 3b30d85..ec2a803 100644 --- a/src/emu/system.c +++ b/src/emu/system.c @@ -220,6 +220,31 @@ report_libovni_version(struct system *sys) return 0; } +static int +is_thread_stream(struct stream *s) +{ + JSON_Object *meta = stream_metadata(s); + if (meta == NULL) { + err("no metadata for stream: %s", s->relpath); + return -1; + } + + /* All streams must have a ovni.part attribute */ + const char *part_type = json_object_dotget_string(meta, "ovni.part"); + + if (part_type == NULL) { + err("cannot get attribute ovni.part for stream: %s", + s->relpath); + return -1; + } + + if (strcmp(part_type, "thread") == 0) { + return 1; + } + + return 0; +} + static int create_system(struct system *sys, struct trace *trace) { @@ -234,7 +259,11 @@ create_system(struct system *sys, struct trace *trace) size_t i = 0; for (struct stream *s = trace->streams; s ; s = s->next) { - if (!loom_matches(s->relpath)) { + int m = is_thread_stream(s); + if (m < 0) { + err("is_thread_stream failed"); + return -1; + } else if (m == 0) { warn("ignoring unknown stream %s", s->relpath); continue; } diff --git a/src/rt/ovni.c b/src/rt/ovni.c index 523dfea..dc6b2ac 100644 --- a/src/rt/ovni.c +++ b/src/rt/ovni.c @@ -548,6 +548,9 @@ thread_metadata_populate(void) if (json_object_dotset_string(meta, "ovni.lib.commit", OVNI_GIT_COMMIT) != 0) die("json_object_dotset_string failed"); + if (json_object_dotset_string(meta, "ovni.part", "thread") != 0) + die("json_object_dotset_string failed"); + if (json_object_dotset_number(meta, "ovni.tid", (double) rthread.tid) != 0) die("json_object_dotset_number failed");