Documentation:
[lttv.git] / ltt / branches / poly / lttv / modules / text / batchAnalysis.c
index 6270342945534a2317a50d94f119a57f0ab8972e..bae1abcb5ec36fc9d80d89b7a93bd21c28899f4b 100644 (file)
@@ -1,3 +1,21 @@
+/* This file is part of the Linux Trace Toolkit viewer
+ * Copyright (C) 2003-2004 Michel Dagenais
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License Version 2 as
+ * published by the Free Software Foundation;
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, 
+ * MA 02111-1307, USA.
+ */
+
 /* This module inserts a hook in the program main loop. This hook processes 
    all the events in the main tracefile. */
 
@@ -7,9 +25,10 @@
 #include <lttv/hook.h>
 #include <lttv/option.h>
 #include <lttv/module.h>
-#include <lttv/processTrace.h>
+#include <lttv/tracecontext.h>
 #include <lttv/state.h>
 #include <lttv/stats.h>
+#include <lttv/filter.h>
 #include <ltt/trace.h>
 
 static LttvTraceset *traceset;
@@ -21,14 +40,15 @@ static LttvHooks
   *after_trace,
   *before_tracefile,
   *after_tracefile,
-  *before_event,
-  *after_event,
+  *event_hook,
   *main_hooks;
 
 static char *a_trace;
 
 static gboolean a_stats;
 
+LttvFilter *a_lttv_filter;
+
 void lttv_trace_option(void *hook_data)
 { 
   LttTrace *trace;
@@ -41,6 +61,10 @@ void lttv_trace_option(void *hook_data)
 
 static gboolean process_traceset(void *hook_data, void *call_data)
 {
+  LttvAttributeValue value;
+
+  LttvIAttribute *attributes = LTTV_IATTRIBUTE(lttv_global_attributes());
+
   LttvTracesetStats *tscs;
 
   LttvTracesetContext *tc;
@@ -58,9 +82,23 @@ static gboolean process_traceset(void *hook_data, void *call_data)
   lttv_state_add_event_hooks(&tscs->parent);
   if(a_stats) lttv_stats_add_event_hooks(tscs);
 
-  lttv_traceset_context_add_hooks(tc,
-  before_traceset, after_traceset, NULL, before_trace, after_trace,
-  NULL, before_tracefile, after_tracefile, NULL, before_event, after_event);
+  g_assert(lttv_iattribute_find_by_path(attributes, "filter/expression",
+      LTTV_POINTER, &value));
+
+  a_lttv_filter = lttv_filter_new();
+  g_debug("Filter string: %s",((GString*)*(value.v_pointer))->str);
+  
+  g_assert(lttv_filter_append_expression(a_lttv_filter,((GString*)*(value.v_pointer))->str));
+  
+  //lttv_traceset_context_add_hooks(tc,
+  //before_traceset, after_traceset, NULL, before_trace, after_trace,
+  //NULL, before_tracefile, after_tracefile, NULL, before_event, after_event);
+  lttv_process_traceset_begin(tc,
+                              before_traceset,
+                              before_trace,
+                              before_tracefile,
+                              event_hook,
+                              NULL);
 
   start.tv_sec = 0;
   start.tv_nsec = 0;
@@ -70,23 +108,35 @@ static gboolean process_traceset(void *hook_data, void *call_data)
   g_info("BatchAnalysis process traceset");
 
   lttv_process_traceset_seek_time(tc, start);
-  lttv_process_traceset(tc, end, G_MAXULONG);
+  lttv_process_traceset_middle(tc,
+                               end,
+                               G_MAXULONG,
+                               NULL);
 
   g_info("BatchAnalysis destroy context");
 
-  lttv_traceset_context_remove_hooks(tc,
-  before_traceset, after_traceset, NULL, before_trace, after_trace,
-  NULL, before_tracefile, after_tracefile, NULL, before_event, after_event);
+  //lttv_traceset_context_remove_hooks(tc,
+  //before_traceset, after_traceset, NULL, before_trace, after_trace,
+  //NULL, before_tracefile, after_tracefile, NULL, before_event, after_event);
+  lttv_process_traceset_end(tc,
+                            after_traceset,
+                            after_trace,
+                            after_tracefile,
+                            event_hook,
+                            NULL);
+
+  lttv_filter_destroy(a_lttv_filter);
   lttv_state_remove_event_hooks(&tscs->parent);
   if(a_stats) lttv_stats_remove_event_hooks(tscs);
   lttv_context_fini(tc);
   g_object_unref(tscs);
 
   g_info("BatchAnalysis end process traceset");
+  return FALSE;
 }
 
 
-G_MODULE_EXPORT void init(LttvModule *self, int argc, char **argv)
+static void init()
 {
   LttvAttributeValue value;
 
@@ -114,8 +164,9 @@ G_MODULE_EXPORT void init(LttvModule *self, int argc, char **argv)
   after_trace = lttv_hooks_new();
   before_tracefile = lttv_hooks_new();
   after_tracefile = lttv_hooks_new();
-  before_event = lttv_hooks_new();
-  after_event = lttv_hooks_new();
+  //before_event = lttv_hooks_new();
+  //after_event = lttv_hooks_new();
+  event_hook = lttv_hooks_new();
 
   g_assert(lttv_iattribute_find_by_path(attributes, "hooks/traceset/before",
       LTTV_POINTER, &value));
@@ -135,21 +186,24 @@ G_MODULE_EXPORT void init(LttvModule *self, int argc, char **argv)
   g_assert(lttv_iattribute_find_by_path(attributes, "hooks/tracefile/after",
       LTTV_POINTER, &value));
   *(value.v_pointer) = after_tracefile;
-  g_assert(lttv_iattribute_find_by_path(attributes, "hooks/event/before",
+  //g_assert(lttv_iattribute_find_by_path(attributes, "hooks/event/before",
+  //    LTTV_POINTER, &value));
+  //*(value.v_pointer) = before_event;
+  //g_assert(lttv_iattribute_find_by_path(attributes, "hooks/event/after",
+  //    LTTV_POINTER, &value));
+  //*(value.v_pointer) = after_event;
+  g_assert(lttv_iattribute_find_by_path(attributes, "hooks/event",
       LTTV_POINTER, &value));
-  *(value.v_pointer) = before_event;
-  g_assert(lttv_iattribute_find_by_path(attributes, "hooks/event/after",
-      LTTV_POINTER, &value));
-  *(value.v_pointer) = after_event;
+  *(value.v_pointer) = event_hook;
 
   g_assert(lttv_iattribute_find_by_path(attributes, "hooks/main/before",
       LTTV_POINTER, &value));
   g_assert((main_hooks = *(value.v_pointer)) != NULL);
-  lttv_hooks_add(main_hooks, process_traceset, NULL);
+  lttv_hooks_add(main_hooks, process_traceset, NULL, LTTV_PRIO_DEFAULT);
 }
 
 
-G_MODULE_EXPORT void destroy()
+static void destroy()
 {
   guint i, nb;
 
@@ -166,17 +220,23 @@ G_MODULE_EXPORT void destroy()
   lttv_hooks_destroy(after_trace);
   lttv_hooks_destroy(before_tracefile);
   lttv_hooks_destroy(after_tracefile);
-  lttv_hooks_destroy(before_event);
-  lttv_hooks_destroy(after_event);
+  //lttv_hooks_destroy(before_event);
+  //lttv_hooks_destroy(after_event);
+  lttv_hooks_destroy(event_hook);
   lttv_hooks_remove_data(main_hooks, process_traceset, NULL);
 
   nb = lttv_traceset_number(traceset);
   for(i = 0 ; i < nb ; i++) {
     trace = lttv_traceset_get(traceset, i);
     ltt_trace_close(lttv_trace(trace));
-    lttv_trace_destroy(trace);
+    /* This will be done by lttv_traceset_destroy */
+    //lttv_trace_destroy(trace);
   }
 
   lttv_traceset_destroy(traceset); 
 }
 
+
+LTTV_MODULE("batchAnalysis", "Batch processing of a trace", \
+    "Run through a trace calling all the registered hooks", \
+    init, destroy, "state", "stats", "option","textFilter")
This page took 0.02534 seconds and 4 git commands to generate.