Add intersect mode to python bindings
authorAntoine Busque <abusque@efficios.com>
Wed, 6 Apr 2016 21:21:16 +0000 (17:21 -0400)
committerJérémie Galarneau <jeremie.galarneau@efficios.com>
Wed, 20 Apr 2016 20:14:03 +0000 (16:14 -0400)
Signed-off-by: Antoine Busque <abusque@efficios.com>
Signed-off-by: Jérémie Galarneau <jeremie.galarneau@efficios.com>
bindings/python/nativebt.i
bindings/python/python-complements.c
bindings/python/python-complements.h
bindings/python/reader.py

index 368952b33a21a14e1c3ad8bf189e66003950e50e..bb67cd58f5223269899eb000ab9f75721d719162 100644 (file)
@@ -113,6 +113,11 @@ int _bt_python_ctf_clock_get_uuid_index(struct bt_ctf_clock *clock,
 int _bt_python_ctf_clock_set_uuid_index(struct bt_ctf_clock *clock,
                size_t index, unsigned char value);
 struct bt_iter_pos *_bt_python_create_iter_pos(void);
+struct bt_ctf_iter *_bt_python_ctf_iter_create_intersect(
+               struct bt_context *ctx,
+               struct bt_iter_pos *inter_begin_pos,
+               struct bt_iter_pos *inter_end_pos);
+int _bt_python_has_intersection(struct bt_context *ctx);
 
 /* context.h, context-internal.h */
 %rename("_bt_context_create") bt_context_create(void);
index 2622542bb24f703dff163973eece6607d7868760..756c54698fbf15f592b34cec3482f1565e5b50d1 100644 (file)
@@ -33,6 +33,8 @@
 #include <babeltrace/ctf-ir/event-class.h>
 #include <babeltrace/ctf-ir/clock-internal.h>
 #include <babeltrace/iterator.h>
+#include <babeltrace/ctf/iterator.h>
+#include <babeltrace/ctf/events-internal.h>
 #include <glib.h>
 
 /* List-related functions
@@ -400,3 +402,22 @@ struct bt_iter_pos *_bt_python_create_iter_pos(void)
 {
        return g_new0(struct bt_iter_pos, 1);
 }
+
+struct bt_ctf_iter *_bt_python_ctf_iter_create_intersect(
+               struct bt_context *ctx,
+               struct bt_iter_pos *inter_begin_pos,
+               struct bt_iter_pos *inter_end_pos)
+{
+       return bt_ctf_iter_create_intersect(ctx, &inter_begin_pos,
+                       &inter_end_pos);
+}
+
+int _bt_python_has_intersection(struct bt_context *ctx)
+{
+       int ret;
+       uint64_t begin = 0, end = ULLONG_MAX;
+
+       ret = ctf_find_packets_intersection(ctx, &begin, &end);
+
+       return ret == 0 ? 1 : 0;
+}
index 0cfcc9c3ce07e354138aece39d58b4dae46eb39a..e7e1a4113df17b6212c6bc203a2211bbbe57b073 100644 (file)
@@ -100,3 +100,8 @@ int _bt_python_ctf_clock_set_uuid_index(struct bt_ctf_clock *clock,
 
 /* iterator */
 struct bt_iter_pos *_bt_python_create_iter_pos(void);
+struct bt_ctf_iter *_bt_python_ctf_iter_create_intersect(
+               struct bt_context *ctx,
+               struct bt_iter_pos *inter_begin_pos,
+               struct bt_iter_pos *inter_end_pos);
+int _bt_python_has_intersection(struct bt_context *ctx);
index ab0b2c3e967a024961aa96adac9003ec11182b4a..3b5374f505add9a27c60c25ed5c16cf329b8dc01 100644 (file)
@@ -45,12 +45,13 @@ class TraceCollection:
     trace from a trace collection.
     """
 
-    def __init__(self):
+    def __init__(self, intersect_mode=False):
         """
         Creates an empty trace collection.
         """
 
         self._tc = nbt._bt_context_create()
+        self.intersect_mode = intersect_mode
 
     def __del__(self):
         nbt._bt_context_put(self._tc)
@@ -147,8 +148,10 @@ class TraceCollection:
 
         begin_pos_ptr = nbt._bt_python_create_iter_pos()
         end_pos_ptr = nbt._bt_python_create_iter_pos()
-        begin_pos_ptr.type = nbt.SEEK_BEGIN
-        end_pos_ptr.type = nbt.SEEK_LAST
+
+        if not self.intersect_mode:
+            begin_pos_ptr.type = nbt.SEEK_BEGIN
+            end_pos_ptr.type = nbt.SEEK_LAST
 
         for event in self._events(begin_pos_ptr, end_pos_ptr):
             yield event
@@ -219,7 +222,19 @@ class TraceCollection:
         return ev.timestamp
 
     def _events(self, begin_pos_ptr, end_pos_ptr):
-        ctf_it_ptr = nbt._bt_ctf_iter_create(self._tc, begin_pos_ptr, end_pos_ptr)
+        if self.intersect_mode:
+            has_intersection = nbt._bt_python_has_intersection(self._tc)
+            if not has_intersection:
+                # There are no events to provide.
+                return
+
+            ctf_it_ptr = nbt._bt_python_ctf_iter_create_intersect(
+                self._tc, begin_pos_ptr, end_pos_ptr
+            )
+        else:
+            ctf_it_ptr = nbt._bt_ctf_iter_create(
+                self._tc, begin_pos_ptr, end_pos_ptr
+            )
 
         if ctf_it_ptr is None:
             raise NotImplementedError("Creation of multiple iterators is unsupported.")
This page took 0.026897 seconds and 4 git commands to generate.