qemu-devel
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[Qemu-devel] [PATCH for-2.8 v1 05/60] trace: add trace event iterator AP


From: Daniel P. Berrange
Subject: [Qemu-devel] [PATCH for-2.8 v1 05/60] trace: add trace event iterator APIs
Date: Tue, 9 Aug 2016 16:31:33 +0100

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 an 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

Signed-off-by: Daniel P. Berrange <address@hidden>
---
 trace/control.c | 26 ++++++++++++++++++++++++++
 trace/control.h |  9 +++++++++
 2 files changed, 35 insertions(+)

diff --git a/trace/control.c b/trace/control.c
index d173c09..deab872 100644
--- a/trace/control.c
+++ b/trace/control.c
@@ -124,6 +124,32 @@ 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)
+{
+    TraceEvent *ev;
+
+    if (iter->event >= TRACE_EVENT_COUNT) {
+        return NULL;
+    }
+
+    ev = &(trace_events[iter->event]);
+
+    do {
+        iter->event++;
+    } while (iter->event < TRACE_EVENT_COUNT &&
+             iter->pattern &&
+             !pattern_glob(iter->pattern,
+                           
trace_event_get_name(&(trace_events[iter->event]))));
+
+    return ev;
+}
+
 void trace_list_events(void)
 {
     int i;
diff --git a/trace/control.h b/trace/control.h
index 0413b28..a3a8a78 100644
--- a/trace/control.h
+++ b/trace/control.h
@@ -13,6 +13,10 @@
 #include "qemu-common.h"
 #include "trace/generated-events.h"
 
+typedef struct TraceEventIter {
+    size_t event;
+    const char *pattern;
+} TraceEventIter;
 
 /**
  * TraceEventID:
@@ -25,6 +29,11 @@
  */
 enum TraceEventID;
 
+
+void trace_event_iter_init(TraceEventIter *iter, const char *pattern);
+
+TraceEvent *trace_event_iter_next(TraceEventIter *iter);
+
 /**
  * trace_event_id:
  * @id: Event identifier.
-- 
2.7.4




reply via email to

[Prev in Thread] Current Thread [Next in Thread]