diff options
author | Daniel P. Berrange <berrange@redhat.com> | 2016-10-04 14:35:42 +0100 |
---|---|---|
committer | Stefan Hajnoczi <stefanha@redhat.com> | 2016-10-12 09:35:53 +0200 |
commit | 6a1b0f3aea09142cb8989ccffb3b74bb8808a00f (patch) | |
tree | e92e911b9783cdff602181b1c5d9e6089c23eba1 /trace/control.c | |
parent | 170f75ad80115c509d3bedfcbbf4a8237ff6f771 (diff) |
trace: add trace event iterator APIs
Currently methods which want to iterate over trace events,
do so using the trace_event_count() and trace_event_id()
methods. This leaks the concept of a single ID enum to
the callers. There is an alternative trace_event_pattern()
method which can be used in an iteration context, but its
design is stateless, so is not easy to expand it in the
future.
This defines a formal iterator API will provide a future-
proof way of iterating over events.
The iterator is also able to apply a pattern match filter
to events, further removing the need for the pattern
Reviewed-by: Stefan Hajnoczi <stefanha@redhat.com>
Reviewed-by: LluĂs Vilanova <vilanova@ac.upc.edu>
Signed-off-by: Daniel P. Berrange <berrange@redhat.com>
Message-id: 1475588159-30598-4-git-send-email-berrange@redhat.com
Signed-off-by: Stefan Hajnoczi <stefanha@redhat.com>
Diffstat (limited to 'trace/control.c')
-rw-r--r-- | trace/control.c | 21 |
1 files changed, 21 insertions, 0 deletions
diff --git a/trace/control.c b/trace/control.c index 10b3e9baba..5a9bb5a8c7 100644 --- a/trace/control.c +++ b/trace/control.c @@ -125,6 +125,27 @@ TraceEvent *trace_event_pattern(const char *pat, TraceEvent *ev) return NULL; } +void trace_event_iter_init(TraceEventIter *iter, const char *pattern) +{ + iter->event = 0; + iter->pattern = pattern; +} + +TraceEvent *trace_event_iter_next(TraceEventIter *iter) +{ + while (iter->event < TRACE_EVENT_COUNT) { + TraceEvent *ev = &(trace_events[iter->event]); + iter->event++; + if (!iter->pattern || + pattern_glob(iter->pattern, + trace_event_get_name(ev))) { + return ev; + } + } + + return NULL; +} + void trace_list_events(void) { int i; |