put print fields in print.c
authorcompudj <compudj@04897980-b3bd-0310-b5e0-8ef037075253>
Wed, 31 Aug 2005 21:08:52 +0000 (21:08 +0000)
committercompudj <compudj@04897980-b3bd-0310-b5e0-8ef037075253>
Wed, 31 Aug 2005 21:08:52 +0000 (21:08 +0000)
git-svn-id: http://ltt.polymtl.ca/svn@1101 04897980-b3bd-0310-b5e0-8ef037075253

ltt/branches/poly/lttv/lttv/Makefile.am
ltt/branches/poly/lttv/lttv/print.c [new file with mode: 0644]
ltt/branches/poly/lttv/lttv/print.h [new file with mode: 0644]
ltt/branches/poly/lttv/modules/gui/controlflow/eventhooks.c
ltt/branches/poly/lttv/modules/gui/lttvwindow/lttvwindow/callbacks.c
ltt/branches/poly/lttv/modules/gui/lttvwindow/lttvwindow/lttvwindowtraces.c
ltt/branches/poly/lttv/modules/text/batchAnalysis.c
ltt/branches/poly/lttv/modules/text/textDump.c

index f54180408f664a93d6283a4196df6b2dfc5a5356..fb7e13291c191ce6656a97b179ed668250dbe45d 100644 (file)
@@ -21,7 +21,8 @@ lttvinclude_HEADERS = \
        stats.h\
        tracecontext.h\
        traceset.h\
-       filter.h
+       filter.h\
+       print.h
 
 #noinst_HEADERS = \
 #      filter.h
@@ -29,7 +30,7 @@ lttvinclude_HEADERS = \
 lttv_SOURCES = batchtest.c main.c module.c option.c \
                hook.c attribute.c \
                iattribute.c state.c stats.c \
-              tracecontext.c traceset.c filter.c
+              tracecontext.c traceset.c filter.c print.c
 
 if LTTVSTATIC
   lttv_LDFLAGS = -profile -static
diff --git a/ltt/branches/poly/lttv/lttv/print.c b/ltt/branches/poly/lttv/lttv/print.c
new file mode 100644 (file)
index 0000000..1003424
--- /dev/null
@@ -0,0 +1,184 @@
+
+/* This file is part of the Linux Trace Toolkit viewer
+ * Copyright (C) 2003-2004 Michel Dagenais
+ *               2005 Mathieu Desnoyers
+ *
+ * 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.
+ */
+
+/* print.c
+ *
+ * Event printing routines. */
+
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif
+
+#include <lttv/lttv.h>
+#include <lttv/option.h>
+#include <lttv/module.h>
+#include <lttv/hook.h>
+#include <lttv/attribute.h>
+#include <lttv/iattribute.h>
+#include <lttv/stats.h>
+#include <lttv/filter.h>
+#include <lttv/print.h>
+#include <ltt/ltt.h>
+#include <ltt/event.h>
+#include <ltt/type.h>
+#include <ltt/trace.h>
+#include <ltt/facility.h>
+#include <stdio.h>
+
+
+void lttv_print_field(LttEvent *e, LttField *f, GString *s,
+                      gboolean field_names) {
+
+  LttType *type;
+
+  LttField *element;
+
+  GQuark name;
+
+  int nb, i;
+
+  type = ltt_field_type(f);
+  switch(ltt_type_class(type)) {
+    case LTT_INT:
+    case LTT_LONG:
+    case LTT_SSIZE_T:
+      g_string_append_printf(s, " %lld", ltt_event_get_long_int(e,f));
+      break;
+
+    case LTT_UINT:
+    case LTT_ULONG:
+    case LTT_SIZE_T:
+    case LTT_OFF_T:
+      g_string_append_printf(s, " %llu", ltt_event_get_long_unsigned(e,f));
+      break;
+
+    case LTT_FLOAT:
+      g_string_append_printf(s, " %g", ltt_event_get_double(e,f));
+      break;
+
+    case LTT_POINTER:
+      g_string_append_printf(s, " 0x%llx", ltt_event_get_long_unsigned(e,f));
+      break;
+
+    case LTT_STRING:
+      g_string_append_printf(s, " \"%s\"", ltt_event_get_string(e,f));
+      break;
+
+    case LTT_ENUM:
+      g_string_append_printf(s, " %s", 
+          g_quark_to_string(ltt_enum_string_get(type,
+          ltt_event_get_unsigned(e,f)-1)));
+      break;
+
+    case LTT_ARRAY:
+    case LTT_SEQUENCE:
+      g_string_append_printf(s, " {");
+      nb = ltt_event_field_element_number(e,f);
+      element = ltt_field_element(f);
+      for(i = 0 ; i < nb ; i++) {
+        ltt_event_field_element_select(e,f,i);
+        lttv_print_field(e, element, s, field_names);
+      }
+      g_string_append_printf(s, " }");
+      break;
+
+    case LTT_STRUCT:
+      g_string_append_printf(s, " {");
+      nb = ltt_type_member_number(type);
+      for(i = 0 ; i < nb ; i++) {
+        element = ltt_field_member(f,i);
+        if(field_names) {
+          ltt_type_member_type(type, i, &name);
+          g_string_append_printf(s, " %s = ", g_quark_to_string(name));
+        }
+        lttv_print_field(e, element, s, field_names);
+      }
+      g_string_append_printf(s, " }");
+      break;
+
+    case LTT_UNION:
+      g_string_append_printf(s, " {");
+      nb = ltt_type_member_number(type);
+      for(i = 0 ; i < nb ; i++) {
+        element = ltt_field_member(f,i);
+        if(field_names) {
+          ltt_type_member_type(type, i, &name);
+          g_string_append_printf(s, " %s = ", g_quark_to_string(name));
+        }
+        lttv_print_field(e, element, s, field_names);
+      }
+      g_string_append_printf(s, " }");
+      break;
+
+  }
+}
+
+
+void lttv_event_to_string(LttEvent *e, GString *s,
+    gboolean mandatory_fields, gboolean field_names, LttvTracefileState *tfs)
+{ 
+  LttFacility *facility;
+
+  LttEventType *event_type;
+
+  LttField *field;
+
+  LttTime time;
+
+  guint cpu = ltt_tracefile_num(tfs->parent.tf);
+  LttvTraceState *ts = (LttvTraceState*)tfs->parent.t_context;
+  LttvProcessState *process = ts->running_process[cpu];
+
+  g_string_set_size(s,0);
+
+  facility = ltt_event_facility(e);
+  event_type = ltt_event_eventtype(e);
+  field = ltt_event_field(e);
+
+  if(mandatory_fields) {
+    time = ltt_event_time(e);
+    g_string_append_printf(s,"%s.%s: %ld.%09ld (%s_%u)",
+        g_quark_to_string(ltt_facility_name(facility)),
+        g_quark_to_string(ltt_eventtype_name(event_type)),
+        (long)time.tv_sec, time.tv_nsec,
+        g_quark_to_string(ltt_tracefile_name(tfs->parent.tf)),
+        cpu);
+    /* Print the process id and the state/interrupt type of the process */
+    g_string_append_printf(s,", %u, %u,  %s", process->pid,
+                   process->ppid,
+                   g_quark_to_string(process->state->t));
+  }
+
+  if(field)
+    lttv_print_field(e, field, s, field_names);
+} 
+
+static void init()
+{
+}
+
+static void destroy()
+{
+}
+
+LTTV_MODULE("print", "Print events", \
+           "Produce a detailed text printout of events", \
+           init, destroy)
+
diff --git a/ltt/branches/poly/lttv/lttv/print.h b/ltt/branches/poly/lttv/lttv/print.h
new file mode 100644 (file)
index 0000000..c21abcd
--- /dev/null
@@ -0,0 +1,34 @@
+/* This file is part of the Linux Trace Toolkit viewer
+ * Copyright (C) 2003-2004 Michel Dagenais
+ *               2005 Mathieu Desnoyers
+ *
+ * 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.
+ */
+
+/* print.c
+ *
+ * Event printing routines header.
+ *
+ * Use these functions to print textually event fields. 
+ */
+
+
+
+void lttv_print_field(LttEvent *e, LttField *f, GString *s,
+                      gboolean field_names);
+
+void lttv_event_to_string(LttEvent *e, GString *s,
+    gboolean mandatory_fields, gboolean field_names, LttvTracefileState *tfs);
+
index 089cd5e9d17b415b37b1502cbb70c6c2f5d9ddc9..cc152eef16015b3fe171f5bd3e9bc907643fa878 100644 (file)
@@ -534,7 +534,7 @@ int before_schedchange_hook(void *hook_data, void *call_data)
       
       hashed_process_data = processlist_get_process_data(process_list,
               pid_in,
-              process->cpu,
+              ltt_tracefile_num(tfc->tf),
               &birth,
               tfc->t_context->index);
       if(hashed_process_data == NULL)
@@ -546,7 +546,7 @@ int before_schedchange_hook(void *hook_data, void *call_data)
         processlist_add(process_list,
             drawing,
             pid_in,
-            process->cpu,
+            ltt_tracefile_num(tfc->tf),
             process->ppid,
             &birth,
             tfc->t_context->index,
@@ -668,7 +668,8 @@ int before_schedchange_hook(void *hook_data, void *call_data)
                                  &hashed_process_data->next_good_time);
         }
       }
-    }
+    } else
+      g_warning("Cannot find pin_in in schedchange %u", pid_in);
   }
   return 0;
 
index 564610a12bda8b9baf3a165356ee6c615cbe448e..9d5a5da662445d6817ff156c412764aee44bfa43 100644 (file)
@@ -1544,7 +1544,7 @@ gboolean lttvwindow_process_pending_requests(Tab *tab)
       /* 1.1. Use current postition as start position */
       if(events_request->start_position != NULL)
         lttv_traceset_context_position_destroy(events_request->start_position);
-      events_request->start_position = lttv_traceset_context_position_new();
+      events_request->start_position = lttv_traceset_context_position_new(tsc);
       lttv_traceset_context_position_save(tsc, events_request->start_position);
 
       /* 1.2. Remove start time */
index 26a127052297ea1615d5a73ed34cfed71be366a3..511c6c93a618413e8f480becd987be6bf34f6390 100644 (file)
@@ -428,6 +428,11 @@ void lttvwindowtraces_background_notify_queue
                                 &value));
   slist = (GSList**)(value.v_pointer);
  
+  g_assert(lttv_iattribute_find(LTTV_IATTRIBUTE(attribute),
+                                LTTV_COMPUTATION_TRACESET_CONTEXT,
+                                LTTV_POINTER,
+                                &value));
+  LttvTracesetContext *tsc = (LttvTracesetContext*)(value.v_pointer);
 
   bg_notify = g_new(BackgroundNotify,1);
 
@@ -435,7 +440,7 @@ void lttvwindowtraces_background_notify_queue
   bg_notify->trace = trace;
   bg_notify->notify_time = notify_time;
   if(notify_position != NULL) {
-    bg_notify->notify_position = lttv_traceset_context_position_new();
+    bg_notify->notify_position = lttv_traceset_context_position_new(tsc);
     lttv_traceset_context_position_copy(bg_notify->notify_position,
                                         notify_position);
   } else {
@@ -477,13 +482,20 @@ void lttvwindowtraces_background_notify_current
                                 &value));
   slist = (GSList**)(value.v_pointer);
 
+  g_assert(lttv_iattribute_find(LTTV_IATTRIBUTE(attribute),
+                                LTTV_COMPUTATION_TRACESET_CONTEXT,
+                                LTTV_POINTER,
+                                &value));
+  LttvTracesetContext *tsc = (LttvTracesetContext*)(value.v_pointer);
+
+
   bg_notify = g_new(BackgroundNotify,1);
 
   bg_notify->owner = owner;
   bg_notify->trace = trace;
   bg_notify->notify_time = notify_time;
   if(notify_position!= NULL) {
-    bg_notify->notify_position = lttv_traceset_context_position_new();
+    bg_notify->notify_position = lttv_traceset_context_position_new(tsc);
     lttv_traceset_context_position_copy(bg_notify->notify_position,
                                         notify_position);
   } else {
index 80f11d3c361de18af0114c9cf1d54aca5e13031d..9cd292741bc907c4472853ac019fe0967d480dcc 100644 (file)
@@ -207,7 +207,6 @@ static void init()
   lttv_hooks_add(main_hooks, process_traceset, NULL, LTTV_PRIO_DEFAULT);
 }
 
-
 static void destroy()
 {
   guint i, nb;
@@ -241,7 +240,6 @@ static void destroy()
   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")
index 14ea876f91ff0ad7b38e3cbc0bf9d53f3166421b..dbb8ec0fbcf1d09c7e21f38b4cd2d4c4631199c6 100644 (file)
@@ -1,5 +1,6 @@
 /* This file is part of the Linux Trace Toolkit viewer
  * Copyright (C) 2003-2004 Michel Dagenais
+ *               2005 Mathieu Desnoyers
  *
  * 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
@@ -32,6 +33,7 @@
 #include <lttv/iattribute.h>
 #include <lttv/stats.h>
 #include <lttv/filter.h>
+#include <lttv/print.h>
 #include <ltt/ltt.h>
 #include <ltt/event.h>
 #include <ltt/type.h>
@@ -54,133 +56,6 @@ static LttvHooks
   *before_trace,
   *event_hook;
 
-void print_field(LttEvent *e, LttField *f, GString *s, gboolean field_names) {
-
-  LttType *type;
-
-  LttField *element;
-
-  GQuark name;
-
-  int nb, i;
-
-  type = ltt_field_type(f);
-  switch(ltt_type_class(type)) {
-    case LTT_INT:
-    case LTT_LONG:
-    case LTT_SSIZE_T:
-      g_string_append_printf(s, " %lld", ltt_event_get_long_int(e,f));
-      break;
-
-    case LTT_UINT:
-    case LTT_ULONG:
-    case LTT_SIZE_T:
-    case LTT_OFF_T:
-      g_string_append_printf(s, " %llu", ltt_event_get_long_unsigned(e,f));
-      break;
-
-    case LTT_FLOAT:
-      g_string_append_printf(s, " %g", ltt_event_get_double(e,f));
-      break;
-
-    case LTT_POINTER:
-      g_string_append_printf(s, " 0x%llx", ltt_event_get_long_unsigned(e,f));
-      break;
-
-    case LTT_STRING:
-      g_string_append_printf(s, " \"%s\"", ltt_event_get_string(e,f));
-      break;
-
-    case LTT_ENUM:
-      g_string_append_printf(s, " %s", 
-          g_quark_to_string(ltt_enum_string_get(type,
-          ltt_event_get_unsigned(e,f)-1)));
-      break;
-
-    case LTT_ARRAY:
-    case LTT_SEQUENCE:
-      g_string_append_printf(s, " {");
-      nb = ltt_event_field_element_number(e,f);
-      element = ltt_field_element(f);
-      for(i = 0 ; i < nb ; i++) {
-        ltt_event_field_element_select(e,f,i);
-        print_field(e, element, s, field_names);
-      }
-      g_string_append_printf(s, " }");
-      break;
-
-    case LTT_STRUCT:
-      g_string_append_printf(s, " {");
-      nb = ltt_type_member_number(type);
-      for(i = 0 ; i < nb ; i++) {
-        element = ltt_field_member(f,i);
-        if(field_names) {
-          ltt_type_member_type(type, i, &name);
-          g_string_append_printf(s, " %s = ", g_quark_to_string(name));
-        }
-        print_field(e, element, s, field_names);
-      }
-      g_string_append_printf(s, " }");
-      break;
-
-    case LTT_UNION:
-      g_string_append_printf(s, " {");
-      nb = ltt_type_member_number(type);
-      for(i = 0 ; i < nb ; i++) {
-        element = ltt_field_member(f,i);
-        if(field_names) {
-          ltt_type_member_type(type, i, &name);
-          g_string_append_printf(s, " %s = ", g_quark_to_string(name));
-        }
-        print_field(e, element, s, field_names);
-      }
-      g_string_append_printf(s, " }");
-      break;
-
-  }
-}
-
-
-void lttv_event_to_string(LttEvent *e, GString *s,
-    gboolean mandatory_fields, gboolean field_names, LttvTracefileState *tfs)
-{ 
-  LttFacility *facility;
-
-  LttEventType *event_type;
-
-  LttType *type;
-
-  LttField *field;
-
-  LttTime time;
-
-  guint cpu = ltt_tracefile_num(tfs->parent.tf);
-  LttvTraceState *ts = (LttvTraceState*)tfs->parent.t_context;
-  LttvProcessState *process = ts->running_process[cpu];
-
-  g_string_set_size(s,0);
-
-  facility = ltt_event_facility(e);
-  event_type = ltt_event_eventtype(e);
-  field = ltt_event_field(e);
-
-  if(mandatory_fields) {
-    time = ltt_event_time(e);
-    g_string_append_printf(s,"%s.%s: %ld.%09ld (%s)",
-        g_quark_to_string(ltt_facility_name(facility)),
-        g_quark_to_string(ltt_eventtype_name(event_type)),
-        (long)time.tv_sec, time.tv_nsec,
-        g_quark_to_string(ltt_tracefile_name(tfs->parent.tf)));
-    /* Print the process id and the state/interrupt type of the process */
-    g_string_append_printf(s,", %u, %u,  %s", process->pid,
-                   process->ppid,
-                   g_quark_to_string(process->state->t));
-  }
-
-  if(field)
-    print_field(e, field, s, field_names);
-} 
-
 
 static void 
 print_tree(FILE *fp, GString *indent, LttvAttribute *tree)
@@ -376,7 +251,7 @@ static int write_event_content(void *hook_data, void *call_data)
    */
   if(filter->head != NULL)
     if(!lttv_filter_tree_parse(filter->head,e,tfc->tf,
-                               tfc->t_context->t,process,tfc))
+                               tfc->t_context->t,tfc))
       return FALSE;
   
   lttv_event_to_string(e, a_string, TRUE, a_field_names, tfs);
@@ -455,7 +330,6 @@ static void init()
       LTTV_PRIO_DEFAULT);
 }
 
-
 static void destroy()
 {
   g_info("Destroy textDump");
@@ -484,5 +358,5 @@ static void destroy()
 
 LTTV_MODULE("textDump", "Print events in a file", \
            "Produce a detailed text printout of a trace", \
-           init, destroy, "stats", "batchAnalysis", "option")
+           init, destroy, "stats", "batchAnalysis", "option", "print")
 
This page took 0.030838 seconds and 4 git commands to generate.