Update LTTV to trace format 2.3
authorcompudj <compudj@04897980-b3bd-0310-b5e0-8ef037075253>
Sat, 13 Dec 2008 21:29:32 +0000 (21:29 +0000)
committercompudj <compudj@04897980-b3bd-0310-b5e0-8ef037075253>
Sat, 13 Dec 2008 21:29:32 +0000 (21:29 +0000)
git-svn-id: http://ltt.polymtl.ca/svn@3175 04897980-b3bd-0310-b5e0-8ef037075253

48 files changed:
trunk/lttv/configure.in
trunk/lttv/ltt/Makefile.am
trunk/lttv/ltt/event.c
trunk/lttv/ltt/event.h
trunk/lttv/ltt/ltt-private.h
trunk/lttv/ltt/ltt.h
trunk/lttv/ltt/marker.c
trunk/lttv/ltt/marker.h
trunk/lttv/ltt/trace.h
trunk/lttv/ltt/tracefile.c
trunk/lttv/lttv/lttv/Makefile.am
trunk/lttv/lttv/lttv/batchtest.c
trunk/lttv/lttv/lttv/filter.c
trunk/lttv/lttv/lttv/hook.c
trunk/lttv/lttv/lttv/hook.h
trunk/lttv/lttv/lttv/print.c
trunk/lttv/lttv/lttv/state.c
trunk/lttv/lttv/lttv/state.h
trunk/lttv/lttv/lttv/stats.c
trunk/lttv/lttv/lttv/tracecontext.c
trunk/lttv/lttv/lttv/tracecontext.h
trunk/lttv/lttv/modules/gui/Makefile.am
trunk/lttv/lttv/modules/gui/controlflow/Makefile.am
trunk/lttv/lttv/modules/gui/controlflow/drawing.c
trunk/lttv/lttv/modules/gui/detailedevents/Makefile.am
trunk/lttv/lttv/modules/gui/detailedevents/events.c
trunk/lttv/lttv/modules/gui/diskperformance/Makefile.am
trunk/lttv/lttv/modules/gui/diskperformance/diskperformance.c
trunk/lttv/lttv/modules/gui/filter/Makefile.am
trunk/lttv/lttv/modules/gui/histogram/Makefile.am
trunk/lttv/lttv/modules/gui/histogram/histoeventhooks.c
trunk/lttv/lttv/modules/gui/interrupts/Makefile.am
trunk/lttv/lttv/modules/gui/interrupts/interrupts.c
trunk/lttv/lttv/modules/gui/lttvwindow/lttvwindow/Makefile.am
trunk/lttv/lttv/modules/gui/lttvwindow/lttvwindow/callbacks.c
trunk/lttv/lttv/modules/gui/lttvwindow/lttvwindow/init_module.c
trunk/lttv/lttv/modules/gui/lttvwindow/lttvwindow/lttvwindow.c
trunk/lttv/lttv/modules/gui/lttvwindow/lttvwindow/lttvwindow.h
trunk/lttv/lttv/modules/gui/lttvwindow/lttvwindow/lttvwindowtraces.c
trunk/lttv/lttv/modules/gui/lttvwindow/lttvwindow/lttvwindowtraces.h
trunk/lttv/lttv/modules/gui/resourceview/Makefile.am
trunk/lttv/lttv/modules/gui/resourceview/drawing.c
trunk/lttv/lttv/modules/gui/resourceview/eventhooks.c
trunk/lttv/lttv/modules/gui/resourceview/eventhooks.h
trunk/lttv/lttv/modules/gui/statistics/Makefile.am
trunk/lttv/lttv/modules/gui/tracecontrol/Makefile.am
trunk/lttv/lttv/modules/gui/tutorial/Makefile.am
trunk/lttv/lttv/modules/text/Makefile.am

index 4c6c363e9221139e399715be437475a5bd90a613..7a2166d6106d2dec7fa991b26e0551f2f63a6463 100644 (file)
@@ -23,7 +23,7 @@
 AC_PREREQ(2.57)
 AC_INIT(FULL-PACKAGE-NAME, VERSION, BUG-REPORT-ADDRESS)
 #AC_WITH_LTDL  # not needed ?
 AC_PREREQ(2.57)
 AC_INIT(FULL-PACKAGE-NAME, VERSION, BUG-REPORT-ADDRESS)
 #AC_WITH_LTDL  # not needed ?
-AM_INIT_AUTOMAKE(lttv,0.11.6-13112008)
+AM_INIT_AUTOMAKE(lttv,0.12.0-13122008)
 AM_CONFIG_HEADER(config.h)
 AM_PROG_LIBTOOL
 
 AM_CONFIG_HEADER(config.h)
 AM_PROG_LIBTOOL
 
@@ -46,8 +46,8 @@ AC_CHECK_LIB([util], [forkpty], UTIL_LIBS="-lutil", AC_MSG_ERROR([libutil is
 required in order to compile LinuxTraceToolkit]))
 
 
 required in order to compile LinuxTraceToolkit]))
 
 
-# pthread for lttd
-#AC_CHECK_LIB(pthread, pthread_join,[THREAD_LIBS="-lpthread"], AC_MSG_ERROR([LinuxThreads is required in order to compile lttd]))
+# pthread for gdb with dlopen().
+AC_CHECK_LIB(pthread, pthread_join,[THREAD_LIBS="-lpthread"], AC_MSG_ERROR([LinuxThreads is required in order to make sure gdb works fine with lttv-gui]))
 
 # Checks for header files.
 AC_HEADER_STDC
 
 # Checks for header files.
 AC_HEADER_STDC
index bb99f3317838b149b0ea54060ee722d913ec6e1d..8f17b098f61af1a6a96f44648a1e6db4a57367ab 100644 (file)
@@ -8,6 +8,7 @@
 
 AM_CFLAGS = $(GLIB_CFLAGS) 
 LIBS += $(GLIB_LIBS)
 
 AM_CFLAGS = $(GLIB_CFLAGS) 
 LIBS += $(GLIB_LIBS)
+LIBS += $(THREAD_LIBS)
 
 lib_LTLIBRARIES = liblttvtraceread.la
 liblttvtraceread_la_SOURCES = tracefile.c marker.c event.c
 
 lib_LTLIBRARIES = liblttvtraceread.la
 liblttvtraceread_la_SOURCES = tracefile.c marker.c event.c
index 42a623181b1f7d8c47071274dc520fd95ef90600..46b68af7e692528935c352f5538e942f69bd5c0a 100644 (file)
@@ -322,13 +322,15 @@ double ltt_event_get_double(LttEvent *e, struct marker_field *f)
 
 /*****************************************************************************
  * The string obtained is only valid until the next read from
 
 /*****************************************************************************
  * The string obtained is only valid until the next read from
- * the same tracefile.
+ * the same tracefile. We reference directly the buffers.
  ****************************************************************************/
  ****************************************************************************/
-char *ltt_event_get_string(LttEvent *e, struct marker_field *f)
+gchar *ltt_event_get_string(LttEvent *e, struct marker_field *f)
 {
   g_assert(f->type == LTT_TYPE_STRING);
 
 {
   g_assert(f->type == LTT_TYPE_STRING);
 
-  return (gchar*)g_strdup((gchar*)(e->data + f->offset));
+  //caused memory leaks
+  //return (gchar*)g_strdup((gchar*)(e->data + f->offset));
+  return (gchar*)(e->data + f->offset);
 }
 
 
 }
 
 
index 31a49d36a7cbb56b922664c4e25f1c63b8045b10..0741e0edaa3b514fdf6371478d1b5bf50cb11f7d 100644 (file)
@@ -52,7 +52,7 @@ static inline guint16 ltt_event_id(struct LttEvent *event)
        return event->event_id;
 }
 
        return event->event_id;
 }
 
-static inline LttTime ltt_event_time(struct LttEvent *event)
+static inline LttTime ltt_event_time(const struct LttEvent *event)
 {
        return event->event_time;
 }
 {
        return event->event_time;
 }
index ec3592dd8aaa0f73a31f265874ecb8945656141c..797c57ca183e1c8b403ccd2ccc08115255b26843 100644 (file)
@@ -66,7 +66,7 @@ typedef guint32 uint32_t;
 typedef guint64 uint64_t;
 
 /* Subbuffer header */
 typedef guint64 uint64_t;
 
 /* Subbuffer header */
-struct ltt_subbuffer_header_2_2 {
+struct ltt_subbuffer_header_2_3 {
        uint64_t cycle_count_begin;     /* Cycle count at subbuffer start */
        uint64_t cycle_count_end;       /* Cycle count at subbuffer end */
        uint32_t magic_number;          /*
        uint64_t cycle_count_begin;     /* Cycle count at subbuffer start */
        uint64_t cycle_count_end;       /* Cycle count at subbuffer end */
        uint32_t magic_number;          /*
@@ -99,7 +99,7 @@ struct ltt_subbuffer_header_2_2 {
        char header_end[0];             /* End of header */
 };
 
        char header_end[0];             /* End of header */
 };
 
-typedef struct ltt_subbuffer_header_2_2 ltt_subbuffer_header_t;
+typedef struct ltt_subbuffer_header_2_3 ltt_subbuffer_header_t;
 
 /*
  * Return header size without padding after the structure. Don't use packed
 
 /*
  * Return header size without padding after the structure. Don't use packed
@@ -144,6 +144,7 @@ struct LttTracefile {
   guint pgid;                         //Usertrace pgid, else 0
   guint64 creation;                   //Usertrace creation, else 0
   LttTrace * trace;                  //trace containing the tracefile
   guint pgid;                         //Usertrace pgid, else 0
   guint64 creation;                   //Usertrace creation, else 0
   LttTrace * trace;                  //trace containing the tracefile
+  struct marker_data *mdata;         // marker id/name/fields mapping
   int fd;                            //file descriptor 
   off_t file_size;                   //file size
   //unsigned block_size;               //block_size
   int fd;                            //file descriptor 
   off_t file_size;                   //file size
   //unsigned block_size;               //block_size
index fd2155df5b4ca3875a92b6adaae8272183abd91b..620a34977cfb5b839ff2c9a6491614950d44d32b 100644 (file)
@@ -68,7 +68,7 @@
    contained information (byte offsets) may vary with the architecture
    associated to the trace. */
    
    contained information (byte offsets) may vary with the architecture
    associated to the trace. */
    
-#define PREALLOC_EVENTS        512
+#define PREALLOC_EVENTS        28
 
 typedef struct LttTrace LttTrace;
 
 
 typedef struct LttTrace LttTrace;
 
index 3737f0aa615f03d7f4cedc4183b853a3b4d47023..89f47be071de9a9c0b903c206fa2630b77883cc3 100644 (file)
@@ -421,46 +421,63 @@ int marker_parse_format(const char *format, struct marker_info *info)
   return 0;
 }
 
   return 0;
 }
 
-int marker_format_event(LttTrace *trace, GQuark name, const char *format)
+int marker_format_event(LttTrace *trace, GQuark channel, GQuark name,
+  const char *format)
 {
   struct marker_info *info;
 {
   struct marker_info *info;
+  struct marker_data *mdata;
   char *fquery;
   char *fcopy;
   char *fquery;
   char *fcopy;
-  
-  fquery = marker_get_format_from_name(trace, name);
+  GArray *group;
+
+  group = g_datalist_id_get_data(&trace->tracefiles, channel);
+  g_assert(group->len > 0);
+  mdata = g_array_index (group, LttTracefile, 0).mdata;
+
+  fquery = marker_get_format_from_name(mdata, name);
   if (fquery) {
     if (strcmp(fquery, format) != 0)
   if (fquery) {
     if (strcmp(fquery, format) != 0)
-      g_error("Marker format mismatch \"%s\" vs \"%s\" for marker %s. "
-            "Kernel issue.", fquery, format, g_quark_to_string(name));
+      g_error("Marker format mismatch \"%s\" vs \"%s\" for marker %s.%s. "
+            "Kernel issue.", fquery, format,
+            g_quark_to_string(channel), g_quark_to_string(name));
     else
       return 0;  /* Already exists. Nothing to do. */
   }
   fcopy = g_new(char, strlen(format)+1);
   strcpy(fcopy, format);
     else
       return 0;  /* Already exists. Nothing to do. */
   }
   fcopy = g_new(char, strlen(format)+1);
   strcpy(fcopy, format);
-  g_hash_table_insert(trace->markers_format_hash, (gpointer)(gulong)name,
+  g_hash_table_insert(mdata->markers_format_hash, (gpointer)(gulong)name,
     (gpointer)fcopy);
 
     (gpointer)fcopy);
 
-  info = marker_get_info_from_name(trace, name);
+  info = marker_get_info_from_name(mdata, name);
   for (; info != NULL; info = info->next) {
     info->format = fcopy;
     if (marker_parse_format(format, info))
   for (; info != NULL; info = info->next) {
     info->format = fcopy;
     if (marker_parse_format(format, info))
-      g_error("Error parsing marker format \"%s\" for marker \"%s\"", format,
-        g_quark_to_string(name));
+      g_error("Error parsing marker format \"%s\" for marker \"%.s.%s\"",
+        format, g_quark_to_string(channel), g_quark_to_string(name));
   }
   return 0;
 }
 
   }
   return 0;
 }
 
-int marker_id_event(LttTrace *trace, GQuark name, guint16 id,
+int marker_id_event(LttTrace *trace, GQuark channel, GQuark name, guint16 id,
   uint8_t int_size, uint8_t long_size, uint8_t pointer_size,
   uint8_t size_t_size, uint8_t alignment)
 {
   uint8_t int_size, uint8_t long_size, uint8_t pointer_size,
   uint8_t size_t_size, uint8_t alignment)
 {
+  struct marker_data *mdata;
   struct marker_info *info, *head;
   int found = 0;
   struct marker_info *info, *head;
   int found = 0;
+  GArray *group;
+
+  g_debug("Add channel %s event %s %hu\n", g_quark_to_string(channel),
+    g_quark_to_string(name), id);
+
+  group = g_datalist_id_get_data(&trace->tracefiles, channel);
+  g_assert(group->len > 0);
+  mdata = g_array_index (group, LttTracefile, 0).mdata;
 
 
-  if (trace->markers->len <= id)
-    trace->markers = g_array_set_size(trace->markers,
-      max(trace->markers->len * 2, id + 1));
-  info = &g_array_index(trace->markers, struct marker_info, id);
+  if (mdata->markers->len <= id)
+    mdata->markers = g_array_set_size(mdata->markers,
+      max(mdata->markers->len * 2, id + 1));
+  info = &g_array_index(mdata->markers, struct marker_info, id);
   info->name = name;
   info->int_size = int_size;
   info->long_size = long_size;
   info->name = name;
   info->int_size = int_size;
   info->long_size = long_size;
@@ -469,14 +486,14 @@ int marker_id_event(LttTrace *trace, GQuark name, guint16 id,
   info->alignment = alignment;
   info->fields = NULL;
   info->next = NULL;
   info->alignment = alignment;
   info->fields = NULL;
   info->next = NULL;
-  info->format = marker_get_format_from_name(trace, name);
+  info->format = marker_get_format_from_name(mdata, name);
   info->largest_align = 1;
   if (info->format && marker_parse_format(info->format, info))
   info->largest_align = 1;
   if (info->format && marker_parse_format(info->format, info))
-      g_error("Error parsing marker format \"%s\" for marker \"%s\"",
-        info->format, g_quark_to_string(name));
-  head = marker_get_info_from_name(trace, name);
+      g_error("Error parsing marker format \"%s\" for marker \"%s.%s\"",
+        info->format, g_quark_to_string(channel), g_quark_to_string(name));
+  head = marker_get_info_from_name(mdata, name);
   if (!head)
   if (!head)
-    g_hash_table_insert(trace->markers_hash, (gpointer)(gulong)name,
+    g_hash_table_insert(mdata->markers_hash, (gpointer)(gulong)name,
       (gpointer)(gulong)id);
   else {
     struct marker_info *iter;
       (gpointer)(gulong)id);
   else {
     struct marker_info *iter;
@@ -484,7 +501,7 @@ int marker_id_event(LttTrace *trace, GQuark name, guint16 id,
       if (iter->name == name)
         found = 1;
     if (!found) {
       if (iter->name == name)
         found = 1;
     if (!found) {
-      g_hash_table_replace(trace->markers_hash, (gpointer)(gulong)name,
+      g_hash_table_replace(mdata->markers_hash, (gpointer)(gulong)name,
         (gpointer)(gulong)id);
       info->next = head;
     }
         (gpointer)(gulong)id);
       info->next = head;
     }
@@ -492,31 +509,43 @@ int marker_id_event(LttTrace *trace, GQuark name, guint16 id,
   return 0;
 }
 
   return 0;
 }
 
-int allocate_marker_data(LttTrace *trace)
+struct marker_data *allocate_marker_data(void)
 {
 {
+  struct marker_data *data;
+
+  data = g_new(struct marker_data, 1);
   /* Init array to 0 */
   /* Init array to 0 */
-  trace->markers = g_array_sized_new(FALSE, TRUE,
+  data->markers = g_array_sized_new(FALSE, TRUE,
                     sizeof(struct marker_info), DEFAULT_MARKERS_NUM);
                     sizeof(struct marker_info), DEFAULT_MARKERS_NUM);
-  if (!trace->markers)
-    return -ENOMEM;
-  trace->markers_hash = g_hash_table_new(g_direct_hash, g_direct_equal);
-  if (!trace->markers_hash)
-    return -ENOMEM;
-  trace->markers_format_hash = g_hash_table_new_full(g_direct_hash,
+  if (!data->markers)
+    goto free_data;
+  data->markers_hash = g_hash_table_new(g_direct_hash, g_direct_equal);
+  if (!data->markers_hash)
+    goto free_markers;
+  data->markers_format_hash = g_hash_table_new_full(g_direct_hash,
      g_direct_equal, NULL, g_free);
      g_direct_equal, NULL, g_free);
-  if (!trace->markers_hash)
-    return -ENOMEM;
-  return 0;
+  if (!data->markers_format_hash)
+    goto free_markers_hash;
+  return data;
+
+  /* error handling */
+free_markers_hash:
+  g_hash_table_destroy(data->markers_hash);
+free_markers:
+  g_array_free(data->markers, TRUE);
+free_data:
+  g_free(data);
+  return NULL;
 }
 
 }
 
-void destroy_marker_data(LttTrace *trace)
+void destroy_marker_data(struct marker_data *data)
 {
   unsigned int i, j;
   struct marker_info *info;
   struct marker_field *field;
 
 {
   unsigned int i, j;
   struct marker_info *info;
   struct marker_field *field;
 
-  for (i=0; i<trace->markers->len; i++) {
-    info = &g_array_index(trace->markers, struct marker_info, i);
+  for (i=0; i<data->markers->len; i++) {
+    info = &g_array_index(data->markers, struct marker_info, i);
     if (info->fields) {
       for (j = 0; j < info->fields->len; j++) {
         field = &g_array_index(info->fields, struct marker_field, j);
     if (info->fields) {
       for (j = 0; j < info->fields->len; j++) {
         field = &g_array_index(info->fields, struct marker_field, j);
@@ -525,7 +554,8 @@ void destroy_marker_data(LttTrace *trace)
       g_array_free(info->fields, TRUE);
     }
   }
       g_array_free(info->fields, TRUE);
     }
   }
-  g_array_free(trace->markers, TRUE);
-  g_hash_table_destroy(trace->markers_hash);
-  g_hash_table_destroy(trace->markers_format_hash);
+  g_hash_table_destroy(data->markers_format_hash);
+  g_hash_table_destroy(data->markers_hash);
+  g_array_free(data->markers, TRUE);
+  g_free(data);
 }
 }
index 204448d555315018727d50862e1c6fb6dd6a3187..4d21e471d48dd4adf6b59e95884f877ddc922b56 100644 (file)
@@ -35,50 +35,56 @@ struct marker_info {
   struct marker_info *next; /* Linked list of markers with the same name */
 };
 
   struct marker_info *next; /* Linked list of markers with the same name */
 };
 
+struct marker_data {
+  GArray *markers;                     //indexed by marker id
+  GHashTable *markers_hash;            //indexed by name hash
+  GHashTable *markers_format_hash;     //indexed by name hash
+};
+
 enum marker_id {
   MARKER_ID_SET_MARKER_ID = 0,  /* Static IDs available (range 0-7) */
   MARKER_ID_SET_MARKER_FORMAT,
   MARKER_ID_DYNAMIC,    /* Dynamic IDs (range: 8-65535)   */
 };
 
 enum marker_id {
   MARKER_ID_SET_MARKER_ID = 0,  /* Static IDs available (range 0-7) */
   MARKER_ID_SET_MARKER_FORMAT,
   MARKER_ID_DYNAMIC,    /* Dynamic IDs (range: 8-65535)   */
 };
 
-static inline guint16 marker_get_id_from_info(LttTrace *trace,
+static inline guint16 marker_get_id_from_info(struct marker_data *data,
     struct marker_info *info)
 {
     struct marker_info *info)
 {
-  return ((unsigned long)info - (unsigned long)trace->markers->data)
+  return ((unsigned long)info - (unsigned long)data->markers->data)
            / sizeof(struct marker_info);
 }
 
            / sizeof(struct marker_info);
 }
 
-static inline struct marker_info *marker_get_info_from_id(LttTrace *trace,
-    guint16 id)
+static inline struct marker_info *marker_get_info_from_id(
+    struct marker_data *data, guint16 id)
 {
 {
-  if (unlikely(trace->markers->len <= id))
+  if (unlikely(data->markers->len <= id))
     return NULL;
     return NULL;
-  return &g_array_index(trace->markers, struct marker_info, id);
+  return &g_array_index(data->markers, struct marker_info, id);
 }
 
 /*
  * Returns the head of the marker info list for that name.
  */
 }
 
 /*
  * Returns the head of the marker info list for that name.
  */
-static inline struct marker_info *marker_get_info_from_name(LttTrace *trace,
-    GQuark name)
+static inline struct marker_info *marker_get_info_from_name(
+    struct marker_data *data, GQuark name)
 {
   gpointer orig_key, value;
   int res;
 
 {
   gpointer orig_key, value;
   int res;
 
-  res = g_hash_table_lookup_extended(trace->markers_hash,
+  res = g_hash_table_lookup_extended(data->markers_hash,
     (gconstpointer)(gulong)name, &orig_key, &value);
   if (!res)
     return NULL;
     (gconstpointer)(gulong)name, &orig_key, &value);
   if (!res)
     return NULL;
-  return marker_get_info_from_id(trace, (guint16)(gulong)value);
+  return marker_get_info_from_id(data, (guint16)(gulong)value);
 }
 
 }
 
-static inline char *marker_get_format_from_name(LttTrace *trace,
+static inline char *marker_get_format_from_name(struct marker_data *data,
     GQuark name)
 {
   gpointer orig_key, value;
   int res;
 
     GQuark name)
 {
   gpointer orig_key, value;
   int res;
 
-  res = g_hash_table_lookup_extended(trace->markers_format_hash,
+  res = g_hash_table_lookup_extended(data->markers_format_hash,
                (gconstpointer)(gulong)name, &orig_key, &value);
   if (!res)
     return NULL;
                (gconstpointer)(gulong)name, &orig_key, &value);
   if (!res)
     return NULL;
@@ -106,11 +112,12 @@ static inline unsigned int marker_get_num_fields(struct marker_info *info)
                field != marker_get_field(info, marker_get_num_fields(info)); \
                field++)
 
                field != marker_get_field(info, marker_get_num_fields(info)); \
                field++)
 
-int marker_format_event(LttTrace *trace, GQuark name, const char *format);
-int marker_id_event(LttTrace *trace, GQuark name, guint16 id,
+int marker_format_event(LttTrace *trace, GQuark channel, GQuark name,
+  const char *format);
+int marker_id_event(LttTrace *trace, GQuark channel, GQuark name, guint16 id,
   uint8_t int_size, uint8_t long_size, uint8_t pointer_size,
   uint8_t size_t_size, uint8_t alignment);
   uint8_t int_size, uint8_t long_size, uint8_t pointer_size,
   uint8_t size_t_size, uint8_t alignment);
-int allocate_marker_data(LttTrace *trace);
-void destroy_marker_data(LttTrace *trace);
+struct marker_data *allocate_marker_data(void);
+void destroy_marker_data(struct marker_data *data);
 
 #endif //_LTT_MARKERS_H
 
 #endif //_LTT_MARKERS_H
index 2e031c22d622d4eb2b06639125267d13698bf017..202def1094d5853ba345c7271fe862e97aad9f2f 100644 (file)
@@ -45,10 +45,6 @@ struct LttTrace {
   LttTime   start_time_from_tsc;
 
   GData     *tracefiles;                    //tracefiles groups
   LttTime   start_time_from_tsc;
 
   GData     *tracefiles;                    //tracefiles groups
-  /* Support for markers */
-  GArray    *markers;                       //indexed by marker ID
-  GHashTable *markers_hash;                 //indexed by name hash
-  GHashTable *markers_format_hash;                 //indexed by name hash
 };
 
 static inline guint ltt_trace_get_num_cpu(LttTrace *t)
 };
 
 static inline guint ltt_trace_get_num_cpu(LttTrace *t)
index 58b2a48319789a3543240f9fe34d9d90f191ce0c..4485bf657a7280dedbd422d23a126e342081d975 100644 (file)
@@ -152,9 +152,9 @@ static int parse_trace_header(ltt_subbuffer_header_t *header,
     break;
   case 2:
     switch(header->minor_version) {
     break;
   case 2:
     switch(header->minor_version) {
-    case 2:
+    case 3:
       {
       {
-        struct ltt_subbuffer_header_2_2 *vheader = header;
+        struct ltt_subbuffer_header_2_3 *vheader = header;
         tf->buffer_header_size = ltt_subbuffer_header_size();
         tf->tscbits = 27;
         tf->eventbits = 5;
         tf->buffer_header_size = ltt_subbuffer_header_size();
         tf->tscbits = 27;
         tf->eventbits = 5;
@@ -350,6 +350,7 @@ void get_absolute_pathname(const gchar *pathname, gchar * abs_pathname)
 /* Search for something like : .*_.*
  *
  * The left side is the name, the right side is the number.
 /* Search for something like : .*_.*
  *
  * The left side is the name, the right side is the number.
+ * Exclude leading /.
  */
 
 static int get_tracefile_name_number(gchar *raw_name,
  */
 
 static int get_tracefile_name_number(gchar *raw_name,
@@ -367,6 +368,14 @@ static int get_tracefile_name_number(gchar *raw_name,
   gchar *endptr;
   gchar *tmpptr;
 
   gchar *endptr;
   gchar *tmpptr;
 
+  /* skip leading / */
+  for(i = 0; i < raw_name_len-1;i++) {
+    if(raw_name[i] != '/')
+      break;
+  }
+  raw_name = &raw_name[i];
+  raw_name_len = strlen(raw_name);
+
   for(i=raw_name_len-1;i>=0;i--) {
     if(raw_name[i] == '_') break;
   }
   for(i=raw_name_len-1;i>=0;i--) {
     if(raw_name[i] == '_') break;
   }
@@ -476,6 +485,8 @@ static void ltt_tracefile_group_destroy(gpointer data)
   int i;
   LttTracefile *tf;
 
   int i;
   LttTracefile *tf;
 
+  if (group->len > 0)
+    destroy_marker_data(g_array_index (group, LttTracefile, 0).mdata);
   for(i=0; i<group->len; i++) {
     tf = &g_array_index (group, LttTracefile, i);
     if(tf->cpu_online)
   for(i=0; i<group->len; i++) {
     tf = &g_array_index (group, LttTracefile, i);
     if(tf->cpu_online)
@@ -515,7 +526,8 @@ static int open_tracefiles(LttTrace *trace, gchar *root_path, gchar *relative_pa
   DIR *dir = opendir(root_path);
   struct dirent *entry;
   struct stat stat_buf;
   DIR *dir = opendir(root_path);
   struct dirent *entry;
   struct stat stat_buf;
-  int ret;
+  int ret, i;
+  struct marker_data *mdata;
   
   gchar path[PATH_MAX];
   int path_len;
   
   gchar path[PATH_MAX];
   int path_len;
@@ -586,7 +598,8 @@ static int open_tracefiles(LttTrace *trace, gchar *root_path, gchar *relative_pa
 
       g_debug("Tracefile name is %s and number is %u", 
           g_quark_to_string(name), num);
 
       g_debug("Tracefile name is %s and number is %u", 
           g_quark_to_string(name), num);
-      
+
+      mdata = NULL;
       tmp_tf.cpu_online = 1;
       tmp_tf.cpu_num = num;
       tmp_tf.name = name;
       tmp_tf.cpu_online = 1;
       tmp_tf.cpu_num = num;
       tmp_tf.name = name;
@@ -601,15 +614,25 @@ static int open_tracefiles(LttTrace *trace, gchar *root_path, gchar *relative_pa
         group = g_array_sized_new (FALSE, TRUE, sizeof(LttTracefile), 10);
         g_datalist_id_set_data_full(&trace->tracefiles, name,
                                  group, ltt_tracefile_group_destroy);
         group = g_array_sized_new (FALSE, TRUE, sizeof(LttTracefile), 10);
         g_datalist_id_set_data_full(&trace->tracefiles, name,
                                  group, ltt_tracefile_group_destroy);
+        mdata = allocate_marker_data();
+        if (!mdata)
+          g_error("Error in allocating marker data");
       }
 
       /* Add the per cpu tracefile to the named group */
       unsigned int old_len = group->len;
       if(num+1 > old_len)
         group = g_array_set_size(group, num+1);
       }
 
       /* Add the per cpu tracefile to the named group */
       unsigned int old_len = group->len;
       if(num+1 > old_len)
         group = g_array_set_size(group, num+1);
+
+      g_assert(group->len > 0);
+      if (!mdata)
+        mdata = g_array_index (group, LttTracefile, 0).mdata;
+
       g_array_index (group, LttTracefile, num) = tmp_tf;
       g_array_index (group, LttTracefile, num).event.tracefile = 
         &g_array_index (group, LttTracefile, num);
       g_array_index (group, LttTracefile, num) = tmp_tf;
       g_array_index (group, LttTracefile, num).event.tracefile = 
         &g_array_index (group, LttTracefile, num);
+      for (i = 0; i < group->len; i++)
+        g_array_index (group, LttTracefile, i).mdata = mdata;
     }
   }
   
     }
   }
   
@@ -648,19 +671,22 @@ static int ltt_process_metadata_tracefile(LttTracefile *tf)
       goto event_id_error;
     } else {
       char *pos;
       goto event_id_error;
     } else {
       char *pos;
-      const char *marker_name, *format;
+      const char *channel_name, *marker_name, *format;
       uint16_t id;
       guint8 int_size, long_size, pointer_size, size_t_size, alignment;
 
       switch((enum marker_id)tf->event.event_id) {
         case MARKER_ID_SET_MARKER_ID:
       uint16_t id;
       guint8 int_size, long_size, pointer_size, size_t_size, alignment;
 
       switch((enum marker_id)tf->event.event_id) {
         case MARKER_ID_SET_MARKER_ID:
-          marker_name = pos = tf->event.data;
-          g_debug("Doing MARKER_ID_SET_MARKER_ID of marker %s", marker_name);
+          channel_name = pos = tf->event.data;
+         pos += strlen(channel_name) + 1;
+         marker_name = pos;
+          g_debug("Doing MARKER_ID_SET_MARKER_ID of marker %s.%s",
+           channel_name, marker_name);
           pos += strlen(marker_name) + 1;
           pos += ltt_align((size_t)pos, sizeof(guint16), tf->alignment);
           id = ltt_get_uint16(LTT_GET_BO(tf), pos);
           pos += strlen(marker_name) + 1;
           pos += ltt_align((size_t)pos, sizeof(guint16), tf->alignment);
           id = ltt_get_uint16(LTT_GET_BO(tf), pos);
-          g_debug("In MARKER_ID_SET_MARKER_ID of marker %s id %hu",
-               marker_name, id);
+          g_debug("In MARKER_ID_SET_MARKER_ID of marker %s.%s id %hu",
+               channel_name, marker_name, id);
           pos += sizeof(guint16);
           int_size = *(guint8*)pos;
           pos += sizeof(guint8);
           pos += sizeof(guint16);
           int_size = *(guint8*)pos;
           pos += sizeof(guint8);
@@ -672,18 +698,24 @@ static int ltt_process_metadata_tracefile(LttTracefile *tf)
           pos += sizeof(guint8);
           alignment = *(guint8*)pos;
           pos += sizeof(guint8);
           pos += sizeof(guint8);
           alignment = *(guint8*)pos;
           pos += sizeof(guint8);
-          marker_id_event(tf->trace, g_quark_from_string(marker_name),
+          marker_id_event(tf->trace,
+                          g_quark_from_string(channel_name),
+                          g_quark_from_string(marker_name),
                           id, int_size, long_size,
                           pointer_size, size_t_size, alignment);
           break;
         case MARKER_ID_SET_MARKER_FORMAT:
                           id, int_size, long_size,
                           pointer_size, size_t_size, alignment);
           break;
         case MARKER_ID_SET_MARKER_FORMAT:
-          marker_name = pos = tf->event.data;
-          g_debug("Doing MARKER_ID_SET_MARKER_FORMAT of marker %s",
-                  marker_name);
+          channel_name = pos = tf->event.data;
+          pos += strlen(channel_name) + 1;
+          marker_name = pos;
+          g_debug("Doing MARKER_ID_SET_MARKER_FORMAT of marker %s.%s",
+                  channel_name, marker_name);
           pos += strlen(marker_name) + 1;
           format = pos;
           pos += strlen(format) + 1;
           pos += strlen(marker_name) + 1;
           format = pos;
           pos += strlen(format) + 1;
-          marker_format_event(tf->trace, g_quark_from_string(marker_name),
+          marker_format_event(tf->trace,
+                              g_quark_from_string(channel_name),
+                              g_quark_from_string(marker_name),
                               format);
           /* get information from dictionary TODO */
           break;
                               format);
           /* get information from dictionary TODO */
           break;
@@ -723,7 +755,6 @@ LttTrace *ltt_trace_open(const gchar *pathname)
   ltt_subbuffer_header_t *header;
   DIR *dir;
   struct dirent *entry;
   ltt_subbuffer_header_t *header;
   DIR *dir;
   struct dirent *entry;
-  guint control_found = 0;
   struct stat stat_buf;
   gchar path[PATH_MAX];
   
   struct stat stat_buf;
   gchar path[PATH_MAX];
   
@@ -750,32 +781,25 @@ LttTrace *ltt_trace_open(const gchar *pathname)
       perror(path);
       continue;
     }
       perror(path);
       continue;
     }
-    if(S_ISDIR(stat_buf.st_mode)) {
-      if(strcmp(entry->d_name, "control") == 0) {
-        control_found = 1;
-      }
-    }
   }
   closedir(dir);
   
   }
   closedir(dir);
   
-  if(!control_found) goto find_error;
-  
   /* Open all the tracefiles */
   if(open_tracefiles(t, abs_path, "")) {
     g_warning("Error opening tracefile %s", abs_path);
     goto find_error;
   }
   
   /* Open all the tracefiles */
   if(open_tracefiles(t, abs_path, "")) {
     g_warning("Error opening tracefile %s", abs_path);
     goto find_error;
   }
   
-  /* Parse each trace control/metadata_N files : get runtime fac. info */
+  /* Parse each trace metadata_N files : get runtime fac. info */
   group = g_datalist_id_get_data(&t->tracefiles, LTT_TRACEFILE_NAME_METADATA);
   if(group == NULL) {
     g_error("Trace %s has no metadata tracefile", abs_path);
     g_assert(0);
   group = g_datalist_id_get_data(&t->tracefiles, LTT_TRACEFILE_NAME_METADATA);
   if(group == NULL) {
     g_error("Trace %s has no metadata tracefile", abs_path);
     g_assert(0);
-    goto metadata_error;
+    goto find_error;
   }
 
   /*
   }
 
   /*
-   * Get the trace information for the control/metadata_0 tracefile.
+   * Get the trace information for the metadata_0 tracefile.
    * Getting a correct trace start_time and start_tsc is insured by the fact
    * that no subbuffers are supposed to be lost in the metadata channel.
    * Therefore, the first subbuffer contains the start_tsc timestamp in its
    * Getting a correct trace start_time and start_tsc is insured by the fact
    * that no subbuffers are supposed to be lost in the metadata channel.
    * Therefore, the first subbuffer contains the start_tsc timestamp in its
@@ -789,22 +813,23 @@ LttTrace *ltt_trace_open(const gchar *pathname)
 
   t->num_cpu = group->len;
   
 
   t->num_cpu = group->len;
   
-  ret = allocate_marker_data(t);
-  if (ret)
-    g_error("Error in allocating marker data");
+  //ret = allocate_marker_data(t);
+  //if (ret)
+  //  g_error("Error in allocating marker data");
 
   for(i=0; i<group->len; i++) {
     tf = &g_array_index (group, LttTracefile, i);
     if (tf->cpu_online)
       if(ltt_process_metadata_tracefile(tf))
 
   for(i=0; i<group->len; i++) {
     tf = &g_array_index (group, LttTracefile, i);
     if (tf->cpu_online)
       if(ltt_process_metadata_tracefile(tf))
-        goto metadata_error;
+        goto find_error;
+      //  goto metadata_error;
   }
 
   return t;
 
   /* Error handling */
   }
 
   return t;
 
   /* Error handling */
-metadata_error:
-  destroy_marker_data(t);
+//metadata_error:
+//  destroy_marker_data(t);
 find_error:
   g_datalist_clear(&t->tracefiles);
 open_error:
 find_error:
   g_datalist_clear(&t->tracefiles);
 open_error:
@@ -1462,27 +1487,31 @@ void ltt_update_event_size(LttTracefile *tf)
   off_t size = 0;
   char *tscdata;
   struct marker_info *info;
   off_t size = 0;
   char *tscdata;
   struct marker_info *info;
-  switch((enum marker_id)tf->event.event_id) {
-    case MARKER_ID_SET_MARKER_ID:
-      size = strlen((char*)tf->event.data) + 1;
-      g_debug("marker %s id set", (char*)tf->event.data);
-      size += ltt_align(size, sizeof(guint16), tf->alignment);
-      size += sizeof(guint16);
-      size += sizeof(guint8);
-      size += sizeof(guint8);
-      size += sizeof(guint8);
-      size += sizeof(guint8);
-      size += sizeof(guint8);
-      break;
-    case MARKER_ID_SET_MARKER_FORMAT:
-      g_debug("marker %s format set", (char*)tf->event.data);
-      size = strlen((char*)tf->event.data) + 1;
-      size += strlen((char*)tf->event.data + size) + 1;
-      break;
+
+  if (tf->name == LTT_TRACEFILE_NAME_METADATA) {
+    switch((enum marker_id)tf->event.event_id) {
+      case MARKER_ID_SET_MARKER_ID:
+        size = strlen((char*)tf->event.data) + 1;
+        g_debug("marker %s id set", (char*)tf->event.data + size);
+        size += strlen((char*)tf->event.data + size) + 1;
+        size += ltt_align(size, sizeof(guint16), tf->alignment);
+        size += sizeof(guint16);
+        size += sizeof(guint8);
+        size += sizeof(guint8);
+        size += sizeof(guint8);
+        size += sizeof(guint8);
+        size += sizeof(guint8);
+        break;
+      case MARKER_ID_SET_MARKER_FORMAT:
+        size = strlen((char*)tf->event.data) + 1;
+        g_debug("marker %s format set", (char*)tf->event.data);
+        size += strlen((char*)tf->event.data + size) + 1;
+        size += strlen((char*)tf->event.data + size) + 1;
+        break;
+    }
   }
 
   }
 
-  info = marker_get_info_from_id(tf->trace, tf->event.event_id);
+  info = marker_get_info_from_id(tf->mdata, tf->event.event_id);
 
   if (tf->event.event_id >= MARKER_CORE_IDS)
     g_assert(info != NULL);
 
   if (tf->event.event_id >= MARKER_CORE_IDS)
     g_assert(info != NULL);
@@ -1499,7 +1528,7 @@ void ltt_update_event_size(LttTracefile *tf)
     if (info->size != -1)
       size = info->size;
     else
     if (info->size != -1)
       size = info->size;
     else
-      size = marker_update_fields_offsets(marker_get_info_from_id(tf->trace,
+      size = marker_update_fields_offsets(marker_get_info_from_id(tf->mdata,
                                    tf->event.event_id), tf->event.data);
   }
 
                                    tf->event.event_id), tf->event.data);
   }
 
@@ -1514,19 +1543,12 @@ void ltt_update_event_size(LttTracefile *tf)
   if (a_event_debug)
     print_debug_event_data(&tf->event);
 
   if (a_event_debug)
     print_debug_event_data(&tf->event);
 
-  /* Having a marker load or marker format event out of the metadata
-   * tracefiles is a serious bug. */
-  switch((enum marker_id)tf->event.event_id) {
-    case MARKER_ID_SET_MARKER_ID:
-    case MARKER_ID_SET_MARKER_FORMAT:
-      if (tf->name != g_quark_from_string("/control/metadata"))
-        g_error("Trace inconsistency : metadata event found in data "
-                "tracefile %s", g_quark_to_string(tf->long_name));
-  }
-
   if (tf->event.data_size != tf->event.event_size) {
   if (tf->event.data_size != tf->event.event_size) {
-    struct marker_info *info = marker_get_info_from_id(tf->trace,
+    struct marker_info *info = marker_get_info_from_id(tf->mdata,
                                                        tf->event.event_id);
                                                        tf->event.event_id);
+    if (!info)
+      g_error("Undescribed event %hhu in channel %s", tf->event.event_id,
+        g_quark_to_string(tf->name));
     g_error("Kernel/LTTV event size differs for event %s: kernel %u, LTTV %u",
         g_quark_to_string(info->name),
         tf->event.event_size, tf->event.data_size);
     g_error("Kernel/LTTV event size differs for event %s: kernel %u, LTTV %u",
         g_quark_to_string(info->name),
         tf->event.event_size, tf->event.data_size);
@@ -2532,5 +2554,5 @@ static void ltt_tracefile_copy(LttTracefile *dest, const LttTracefile *src)
 
 static __attribute__((constructor)) void init(void)
 {
 
 static __attribute__((constructor)) void init(void)
 {
-  LTT_TRACEFILE_NAME_METADATA = g_quark_from_string("/control/metadata");
+  LTT_TRACEFILE_NAME_METADATA = g_quark_from_string("metadata");
 }
 }
index f96f418f4c3b0c34e3d611764ea6caac7cea5560..170f4d5bd3d48d35c52538da70cf0435bb7bd1f9 100644 (file)
@@ -1,4 +1,5 @@
 AM_CFLAGS = $(GLIB_CFLAGS) 
 AM_CFLAGS = $(GLIB_CFLAGS) 
+LIBS += $(THREAD_LIBS)
 LIBS += $(POPT_LIBS) $(GLIB_LIBS) -lgobject-2.0 -L${top_builddir}/ltt\
           -llttvtraceread
 
 LIBS += $(POPT_LIBS) $(GLIB_LIBS) -lgobject-2.0 -L${top_builddir}/ltt\
           -llttvtraceread
 
index bc68f3730307d6480c976d6b6848dbee87128dee..2f5fce8391366600c7884addf640b461dd95895e 100644 (file)
@@ -171,7 +171,7 @@ gboolean trace_event(void __UNUSED__ *hook_data, void *call_data)
   ltt_event_position(e, a_event_position);
   ltt_event_position_get(a_event_position, &tf, &nb_block, &offset, &tsc);
   fprintf(stderr,"Event %s %lu.%09lu [%u 0x%x tsc %llu]\n",
   ltt_event_position(e, a_event_position);
   ltt_event_position_get(a_event_position, &tf, &nb_block, &offset, &tsc);
   fprintf(stderr,"Event %s %lu.%09lu [%u 0x%x tsc %llu]\n",
-      g_quark_to_string(marker_get_info_from_id(ltt_tracefile_get_trace(tf),
+      g_quark_to_string(marker_get_info_from_id(tf->mdata,
                        ltt_event_id(e))->name),
       tfs->parent.timestamp.tv_sec, tfs->parent.timestamp.tv_nsec,
       nb_block, offset, tsc);
                        ltt_event_id(e))->name),
       tfs->parent.timestamp.tv_sec, tfs->parent.timestamp.tv_nsec,
       nb_block, offset, tsc);
@@ -228,10 +228,8 @@ gboolean save_state_copy_event(void *hook_data, void *call_data)
 
   FILE *fp;
 
 
   FILE *fp;
 
-  LttTrace *trace = ((LttvTracefileContext *)tfs)->t_context->t;
-
   if(ts->nb_event == 0 && 
   if(ts->nb_event == 0 && 
-      marker_get_info_from_id(trace, e->event_id)->name
+      marker_get_info_from_id(tfs->parent.tf->mdata, e->event_id)->name
                             == QUARK_BLOCK_START) {
     if(a_save_sample != NULL) {
       filename = g_string_new("");
                             == QUARK_BLOCK_START) {
     if(a_save_sample != NULL) {
       filename = g_string_new("");
@@ -330,7 +328,7 @@ static void compute_tracefile(LttTracefile *tracefile, void *hook_data)
   do {
     LttTracefile *tf_pos;
     //event_type = ltt_event_eventtype(event);
   do {
     LttTracefile *tf_pos;
     //event_type = ltt_event_eventtype(event);
-    minfo = marker_get_info_from_id(ltt_tracefile_get_trace(tracefile),
+    minfo = marker_get_info_from_id(tracefile->mdata,
                                        ltt_event_id(event));
     time = ltt_event_time(event);
     ltt_event_position(event, a_event_position);
                                        ltt_event_id(event));
     time = ltt_event_time(event);
     ltt_event_position(event, a_event_position);
index 8ed060225ca9593689e665cd118d855203eb975b..3c53e38791c7fd081a407015fc2503d1575883ae 100644 (file)
@@ -2047,7 +2047,8 @@ lttv_filter_tree_parse_branch(
             if(event == NULL) return TRUE;
             else {
               struct marker_info *info;
             if(event == NULL) return TRUE;
             else {
               struct marker_info *info;
-              info = marker_get_info_from_id((LttTrace *)trace, event->event_id);
+             LttTracefile *tf = context->tf;
+              info = marker_get_info_from_id(tf->mdata, event->event_id);
               g_assert(info != NULL);
               GQuark quark = info->name;
               return se->op((gpointer)&quark,v);
               g_assert(info != NULL);
               GQuark quark = info->name;
               return se->op((gpointer)&quark,v);
index 6578aebae5685d76d7cf5fbc90eef8efc2c08b7a..d6e3014294342a4399105c45f4e0dc38f294baa9 100644 (file)
@@ -410,7 +410,7 @@ LttvHooksById *lttv_hooks_by_id_new()
 {
   LttvHooksById *h = g_new(LttvHooksById, 1);
   h->index = g_ptr_array_sized_new(PREALLOC_EVENTS);
 {
   LttvHooksById *h = g_new(LttvHooksById, 1);
   h->index = g_ptr_array_sized_new(PREALLOC_EVENTS);
-  h->array = g_array_sized_new(FALSE, FALSE, sizeof(guint), 50);
+  h->array = g_array_sized_new(FALSE, FALSE, sizeof(guint), PREALLOC_EVENTS);
   return h;
 }
 
   return h;
 }
 
@@ -458,3 +458,66 @@ void lttv_hooks_by_id_remove(LttvHooksById *h, unsigned id)
   }
 }
 
   }
 }
 
+void lttv_hooks_by_id_copy(LttvHooksById *dest, LttvHooksById *src)
+{
+  guint i;
+
+  for(i = 0 ; i < src->array->len ; i++) {
+    guint index = g_array_index(src->array, guint, i);
+    LttvHooks *srch = lttv_hooks_by_id_find(src, index);
+    LttvHooks *desth = lttv_hooks_by_id_find(dest, index);
+    lttv_hooks_add_list(desth, srch);
+  }
+}
+
+LttvHooksByIdChannelArray *lttv_hooks_by_id_channel_new(void)
+{
+  LttvHooksByIdChannelArray *h = g_new(LttvHooksByIdChannelArray, 1);
+
+  h->array = g_array_new(FALSE, FALSE, sizeof(LttvHooksByIdChannel));
+  return h;
+}
+
+void lttv_hooks_by_id_channel_destroy(LttvHooksByIdChannelArray *h)
+{
+  LttvHooksByIdChannel *hid;
+  int i;
+
+  for (i = 0; i < h->array->len; i++) {
+    hid = &g_array_index(h->array, LttvHooksByIdChannel, i);
+    lttv_hooks_by_id_destroy(hid->hooks_by_id);
+  }
+  g_array_free(h->array, TRUE);
+  g_free(h);
+}
+
+static LttvHooksByIdChannel *lttv_hooks_by_id_channel_find_channel(
+    LttvHooksByIdChannelArray *h,
+    GQuark channel)
+{
+  LttvHooksByIdChannel *hid;
+  int i, found = 0;
+
+  for (i = 0; i < h->array->len; i++) {
+    hid = &g_array_index(h->array, LttvHooksByIdChannel, i);
+    if (hid->channel == channel)
+      found = 1;
+      break;
+  }
+  if (!found) {
+    g_array_set_size(h->array, h->array->len + 1);
+    hid = &g_array_index(h->array, LttvHooksByIdChannel, h->array->len - 1);
+    hid->channel = channel;
+    hid->hooks_by_id = lttv_hooks_by_id_new();
+  }
+  return hid;
+}
+
+/* get, or create if not found */
+LttvHooks *lttv_hooks_by_id_channel_find(LttvHooksByIdChannelArray *h,
+    GQuark channel, guint16 id)
+{
+  LttvHooksByIdChannel *hid;
+  hid = lttv_hooks_by_id_channel_find_channel(h, channel);
+  return lttv_hooks_by_id_find(hid->hooks_by_id, id);
+}
index 325d218671c7a98f080a5a3df12d8b56ff2cc846..91f0c13f9a02d6b0d35d304781dbf87dba9685f8 100644 (file)
@@ -130,7 +130,7 @@ typedef struct _LttvHooksById {
 
 /* Create and destroy a hooks by id list */
 
 
 /* Create and destroy a hooks by id list */
 
-LttvHooksById *lttv_hooks_by_id_new();
+LttvHooksById *lttv_hooks_by_id_new(void);
 
 void lttv_hooks_by_id_destroy(LttvHooksById *h);
 
 
 void lttv_hooks_by_id_destroy(LttvHooksById *h);
 
@@ -156,9 +156,32 @@ static inline LttvHooks *lttv_hooks_by_id_get(LttvHooksById *h, unsigned id)
   return ret;
 }
 
   return ret;
 }
 
-
 /* Remove the list of hooks associated with an id */
 
 void lttv_hooks_by_id_remove(LttvHooksById *h, unsigned id);
 
 /* Remove the list of hooks associated with an id */
 
 void lttv_hooks_by_id_remove(LttvHooksById *h, unsigned id);
 
+void lttv_hooks_by_id_copy(LttvHooksById *dest, LttvHooksById *src);
+
+/*
+ * Hooks per channel per id. Useful for GUI to save/restore hooks
+ * on a per trace basis (rather than per tracefile).
+ */
+
+/* Internal structure, contained in by the LttvHooksByIdChannelArray */
+typedef struct _LttvHooksByIdChannel {
+  LttvHooksById *hooks_by_id;
+  GQuark channel;
+} LttvHooksByIdChannel;
+
+typedef struct _LttvHooksByIdChannelArray {
+  GArray *array;       /* Array of LttvHooksByIdChannel */
+} LttvHooksByIdChannelArray;
+
+LttvHooksByIdChannelArray *lttv_hooks_by_id_channel_new(void);
+
+void lttv_hooks_by_id_channel_destroy(LttvHooksByIdChannelArray *h);
+
+LttvHooks *lttv_hooks_by_id_channel_find(LttvHooksByIdChannelArray *h,
+    GQuark channel, guint16 id);
+
 #endif // HOOK_H
 #endif // HOOK_H
index 4afab112b444154c2c650e5ec61e132e08b3e85c..8bba69719df48a48d69ce92114c2f8d7c0750926 100644 (file)
@@ -46,8 +46,8 @@
 static inline void print_enum_events(LttEvent *e, struct marker_field *f,
                       guint64 value, GString *s, LttvTracefileState *tfs)
 {
 static inline void print_enum_events(LttEvent *e, struct marker_field *f,
                       guint64 value, GString *s, LttvTracefileState *tfs)
 {
-  LttTrace *trace = ltt_tracefile_get_trace(e->tracefile);
-  struct marker_info *info = marker_get_info_from_id(trace, e->event_id);
+  struct marker_info *info = marker_get_info_from_id(tfs->parent.tf->mdata,
+    e->event_id);
   LttvTraceState *ts = (LttvTraceState*)(tfs->parent.t_context);
   
   //TODO optimize with old quarks.
   LttvTraceState *ts = (LttvTraceState*)(tfs->parent.t_context);
   
   //TODO optimize with old quarks.
@@ -256,11 +256,10 @@ void lttv_event_to_string(LttEvent *e, GString *s,
   guint cpu = tfs->cpu;
   LttvTraceState *ts = (LttvTraceState*)tfs->parent.t_context;
   LttvProcessState *process = ts->running_process[cpu];
   guint cpu = tfs->cpu;
   LttvTraceState *ts = (LttvTraceState*)tfs->parent.t_context;
   LttvProcessState *process = ts->running_process[cpu];
-  LttTrace *trace = ts->parent.t;
 
   s = g_string_set_size(s,0);
 
 
   s = g_string_set_size(s,0);
 
-  info = marker_get_info_from_id(trace, e->event_id);
+  info = marker_get_info_from_id(tfs->parent.tf->mdata, e->event_id);
 
   if(mandatory_fields) {
     time = ltt_event_time(e);
 
   if(mandatory_fields) {
     time = ltt_event_time(e);
index d16e13e2efb8847194574148a6e1c48c8e674062..1a3d907db0adfb81f6447485c5d1ae1f31afc4eb 100644 (file)
 
 #define PREALLOCATED_EXECUTION_STACK 10
 
 
 #define PREALLOCATED_EXECUTION_STACK 10
 
-/* Facilities Quarks */
+/* Channel Quarks */
 
 GQuark
 
 GQuark
-    LTT_FACILITY_KERNEL,
-    LTT_FACILITY_LIST,
-    LTT_FACILITY_FS,
-    LTT_FACILITY_USER_GENERIC,
-    LTT_FACILITY_BLOCK,
-    LTT_FACILITY_STATEDUMP;
+    LTT_CHANNEL_FD_STATE,
+    LTT_CHANNEL_GLOBAL_STATE,
+    LTT_CHANNEL_IRQ_STATE,
+    LTT_CHANNEL_MODULE_STATE,
+    LTT_CHANNEL_NETIF_STATE,
+    LTT_CHANNEL_SOFTIRQ_STATE,
+    LTT_CHANNEL_SWAP_STATE,
+    LTT_CHANNEL_SYSCALL_STATE,
+    LTT_CHANNEL_TASK_STATE,
+    LTT_CHANNEL_VM_STATE,
+    LTT_CHANNEL_FS,
+    LTT_CHANNEL_KERNEL,
+    LTT_CHANNEL_MM,
+    LTT_CHANNEL_USERSPACE,
+    LTT_CHANNEL_BLOCK;
 
 /* Events Quarks */
 
 
 /* Events Quarks */
 
@@ -1875,7 +1884,7 @@ create_name_tables(LttvTraceState *tcs)
   hooks = g_array_sized_new(FALSE, FALSE, sizeof(LttvTraceHook), 1);
 
   if(!lttv_trace_find_hook(tcs->parent.t,
   hooks = g_array_sized_new(FALSE, FALSE, sizeof(LttvTraceHook), 1);
 
   if(!lttv_trace_find_hook(tcs->parent.t,
-      LTT_FACILITY_KERNEL,
+      LTT_CHANNEL_KERNEL,
       LTT_EVENT_SYSCALL_ENTRY,
       FIELD_ARRAY(LTT_FIELD_SYSCALL_ID),
       NULL, NULL, &hooks)) {
       LTT_EVENT_SYSCALL_ENTRY,
       FIELD_ARRAY(LTT_FIELD_SYSCALL_ID),
       NULL, NULL, &hooks)) {
@@ -1911,7 +1920,7 @@ create_name_tables(LttvTraceState *tcs)
   lttv_trace_hook_remove_all(&hooks);
 
   if(!lttv_trace_find_hook(tcs->parent.t,
   lttv_trace_hook_remove_all(&hooks);
 
   if(!lttv_trace_find_hook(tcs->parent.t,
-        LTT_FACILITY_KERNEL,
+        LTT_CHANNEL_KERNEL,
         LTT_EVENT_TRAP_ENTRY,
         FIELD_ARRAY(LTT_FIELD_TRAP_ID),
         NULL, NULL, &hooks)) {
         LTT_EVENT_TRAP_ENTRY,
         FIELD_ARRAY(LTT_FIELD_TRAP_ID),
         NULL, NULL, &hooks)) {
@@ -1940,7 +1949,7 @@ create_name_tables(LttvTraceState *tcs)
   lttv_trace_hook_remove_all(&hooks);
 
   if(!lttv_trace_find_hook(tcs->parent.t,
   lttv_trace_hook_remove_all(&hooks);
 
   if(!lttv_trace_find_hook(tcs->parent.t,
-        LTT_FACILITY_KERNEL,
+        LTT_CHANNEL_KERNEL,
         LTT_EVENT_IRQ_ENTRY,
         FIELD_ARRAY(LTT_FIELD_IRQ_ID),
         NULL, NULL, &hooks)) {
         LTT_EVENT_IRQ_ENTRY,
         FIELD_ARRAY(LTT_FIELD_IRQ_ID),
         NULL, NULL, &hooks)) {
@@ -3387,106 +3396,106 @@ void lttv_state_add_event_hooks(LttvTracesetState *self)
     //hn = 0;
 
     lttv_trace_find_hook(ts->parent.t,
     //hn = 0;
 
     lttv_trace_find_hook(ts->parent.t,
-        LTT_FACILITY_KERNEL,
+        LTT_CHANNEL_KERNEL,
         LTT_EVENT_SYSCALL_ENTRY,
         FIELD_ARRAY(LTT_FIELD_SYSCALL_ID),
        syscall_entry, NULL, &hooks);
 
     lttv_trace_find_hook(ts->parent.t,
         LTT_EVENT_SYSCALL_ENTRY,
         FIELD_ARRAY(LTT_FIELD_SYSCALL_ID),
        syscall_entry, NULL, &hooks);
 
     lttv_trace_find_hook(ts->parent.t,
-        LTT_FACILITY_KERNEL,
+        LTT_CHANNEL_KERNEL,
         LTT_EVENT_SYSCALL_EXIT,
         NULL,
         syscall_exit, NULL, &hooks);
 
     lttv_trace_find_hook(ts->parent.t,
         LTT_EVENT_SYSCALL_EXIT,
         NULL,
         syscall_exit, NULL, &hooks);
 
     lttv_trace_find_hook(ts->parent.t,
-        LTT_FACILITY_KERNEL,
+        LTT_CHANNEL_KERNEL,
         LTT_EVENT_TRAP_ENTRY,
         FIELD_ARRAY(LTT_FIELD_TRAP_ID),
         trap_entry, NULL, &hooks);
 
     lttv_trace_find_hook(ts->parent.t,
         LTT_EVENT_TRAP_ENTRY,
         FIELD_ARRAY(LTT_FIELD_TRAP_ID),
         trap_entry, NULL, &hooks);
 
     lttv_trace_find_hook(ts->parent.t,
-        LTT_FACILITY_KERNEL,
+        LTT_CHANNEL_KERNEL,
         LTT_EVENT_TRAP_EXIT,
         NULL,
         trap_exit, NULL, &hooks);
 
     lttv_trace_find_hook(ts->parent.t,
         LTT_EVENT_TRAP_EXIT,
         NULL,
         trap_exit, NULL, &hooks);
 
     lttv_trace_find_hook(ts->parent.t,
-        LTT_FACILITY_KERNEL,
+        LTT_CHANNEL_KERNEL,
         LTT_EVENT_IRQ_ENTRY,
         FIELD_ARRAY(LTT_FIELD_IRQ_ID),
         irq_entry, NULL, &hooks);
 
     lttv_trace_find_hook(ts->parent.t,
         LTT_EVENT_IRQ_ENTRY,
         FIELD_ARRAY(LTT_FIELD_IRQ_ID),
         irq_entry, NULL, &hooks);
 
     lttv_trace_find_hook(ts->parent.t,
-        LTT_FACILITY_KERNEL,
+        LTT_CHANNEL_KERNEL,
         LTT_EVENT_IRQ_EXIT,
         NULL,
         irq_exit, NULL, &hooks);
 
     lttv_trace_find_hook(ts->parent.t,
         LTT_EVENT_IRQ_EXIT,
         NULL,
         irq_exit, NULL, &hooks);
 
     lttv_trace_find_hook(ts->parent.t,
-        LTT_FACILITY_KERNEL,
+        LTT_CHANNEL_KERNEL,
         LTT_EVENT_SOFT_IRQ_RAISE,
         FIELD_ARRAY(LTT_FIELD_SOFT_IRQ_ID),
         soft_irq_raise, NULL, &hooks);
 
     lttv_trace_find_hook(ts->parent.t,
         LTT_EVENT_SOFT_IRQ_RAISE,
         FIELD_ARRAY(LTT_FIELD_SOFT_IRQ_ID),
         soft_irq_raise, NULL, &hooks);
 
     lttv_trace_find_hook(ts->parent.t,
-        LTT_FACILITY_KERNEL,
+        LTT_CHANNEL_KERNEL,
         LTT_EVENT_SOFT_IRQ_ENTRY,
         FIELD_ARRAY(LTT_FIELD_SOFT_IRQ_ID),
         soft_irq_entry, NULL, &hooks);
 
     lttv_trace_find_hook(ts->parent.t,
         LTT_EVENT_SOFT_IRQ_ENTRY,
         FIELD_ARRAY(LTT_FIELD_SOFT_IRQ_ID),
         soft_irq_entry, NULL, &hooks);
 
     lttv_trace_find_hook(ts->parent.t,
-        LTT_FACILITY_KERNEL,
+        LTT_CHANNEL_KERNEL,
         LTT_EVENT_SOFT_IRQ_EXIT,
         NULL,
         soft_irq_exit, NULL, &hooks);
 
     lttv_trace_find_hook(ts->parent.t,
         LTT_EVENT_SOFT_IRQ_EXIT,
         NULL,
         soft_irq_exit, NULL, &hooks);
 
     lttv_trace_find_hook(ts->parent.t,
-        LTT_FACILITY_KERNEL,
+        LTT_CHANNEL_KERNEL,
         LTT_EVENT_SCHED_SCHEDULE,
         FIELD_ARRAY(LTT_FIELD_PREV_PID, LTT_FIELD_NEXT_PID,
          LTT_FIELD_PREV_STATE),
         schedchange, NULL, &hooks);
 
     lttv_trace_find_hook(ts->parent.t,
         LTT_EVENT_SCHED_SCHEDULE,
         FIELD_ARRAY(LTT_FIELD_PREV_PID, LTT_FIELD_NEXT_PID,
          LTT_FIELD_PREV_STATE),
         schedchange, NULL, &hooks);
 
     lttv_trace_find_hook(ts->parent.t,
-        LTT_FACILITY_KERNEL,
+        LTT_CHANNEL_KERNEL,
         LTT_EVENT_PROCESS_FORK,
         FIELD_ARRAY(LTT_FIELD_PARENT_PID, LTT_FIELD_CHILD_PID,
          LTT_FIELD_CHILD_TGID),
         process_fork, NULL, &hooks);
 
     lttv_trace_find_hook(ts->parent.t,
         LTT_EVENT_PROCESS_FORK,
         FIELD_ARRAY(LTT_FIELD_PARENT_PID, LTT_FIELD_CHILD_PID,
          LTT_FIELD_CHILD_TGID),
         process_fork, NULL, &hooks);
 
     lttv_trace_find_hook(ts->parent.t,
-        LTT_FACILITY_KERNEL,
+        LTT_CHANNEL_KERNEL,
         LTT_EVENT_KTHREAD_CREATE,
         FIELD_ARRAY(LTT_FIELD_PID),
         process_kernel_thread, NULL, &hooks);
 
     lttv_trace_find_hook(ts->parent.t,
         LTT_EVENT_KTHREAD_CREATE,
         FIELD_ARRAY(LTT_FIELD_PID),
         process_kernel_thread, NULL, &hooks);
 
     lttv_trace_find_hook(ts->parent.t,
-        LTT_FACILITY_KERNEL,
+        LTT_CHANNEL_KERNEL,
         LTT_EVENT_PROCESS_EXIT,
         FIELD_ARRAY(LTT_FIELD_PID),
         process_exit, NULL, &hooks);
     
     lttv_trace_find_hook(ts->parent.t,
         LTT_EVENT_PROCESS_EXIT,
         FIELD_ARRAY(LTT_FIELD_PID),
         process_exit, NULL, &hooks);
     
     lttv_trace_find_hook(ts->parent.t,
-        LTT_FACILITY_KERNEL,
+        LTT_CHANNEL_KERNEL,
         LTT_EVENT_PROCESS_FREE,
         FIELD_ARRAY(LTT_FIELD_PID),
         process_free, NULL, &hooks);
 
     lttv_trace_find_hook(ts->parent.t,
         LTT_EVENT_PROCESS_FREE,
         FIELD_ARRAY(LTT_FIELD_PID),
         process_free, NULL, &hooks);
 
     lttv_trace_find_hook(ts->parent.t,
-        LTT_FACILITY_FS,
+        LTT_CHANNEL_FS,
         LTT_EVENT_EXEC,
         FIELD_ARRAY(LTT_FIELD_FILENAME),
         process_exec, NULL, &hooks);
 
     lttv_trace_find_hook(ts->parent.t,
         LTT_EVENT_EXEC,
         FIELD_ARRAY(LTT_FIELD_FILENAME),
         process_exec, NULL, &hooks);
 
     lttv_trace_find_hook(ts->parent.t,
-        LTT_FACILITY_USER_GENERIC,
+        LTT_CHANNEL_USERSPACE,
         LTT_EVENT_THREAD_BRAND,
         FIELD_ARRAY(LTT_FIELD_NAME),
         thread_brand, NULL, &hooks);
 
      /* statedump-related hooks */
     lttv_trace_find_hook(ts->parent.t,
         LTT_EVENT_THREAD_BRAND,
         FIELD_ARRAY(LTT_FIELD_NAME),
         thread_brand, NULL, &hooks);
 
      /* statedump-related hooks */
     lttv_trace_find_hook(ts->parent.t,
-        LTT_FACILITY_LIST,
+        LTT_CHANNEL_TASK_STATE,
         LTT_EVENT_PROCESS_STATE,
         FIELD_ARRAY(LTT_FIELD_PID, LTT_FIELD_PARENT_PID, LTT_FIELD_NAME,
          LTT_FIELD_TYPE, LTT_FIELD_MODE, LTT_FIELD_SUBMODE,
         LTT_EVENT_PROCESS_STATE,
         FIELD_ARRAY(LTT_FIELD_PID, LTT_FIELD_PARENT_PID, LTT_FIELD_NAME,
          LTT_FIELD_TYPE, LTT_FIELD_MODE, LTT_FIELD_SUBMODE,
@@ -3494,49 +3503,49 @@ void lttv_state_add_event_hooks(LttvTracesetState *self)
         enum_process_state, NULL, &hooks);
 
     lttv_trace_find_hook(ts->parent.t,
         enum_process_state, NULL, &hooks);
 
     lttv_trace_find_hook(ts->parent.t,
-        LTT_FACILITY_LIST,
+        LTT_CHANNEL_GLOBAL_STATE,
         LTT_EVENT_STATEDUMP_END,
         NULL,
         statedump_end, NULL, &hooks);
 
     lttv_trace_find_hook(ts->parent.t,
         LTT_EVENT_STATEDUMP_END,
         NULL,
         statedump_end, NULL, &hooks);
 
     lttv_trace_find_hook(ts->parent.t,
-        LTT_FACILITY_LIST,
+        LTT_CHANNEL_IRQ_STATE,
         LTT_EVENT_LIST_INTERRUPT,
         FIELD_ARRAY(LTT_FIELD_ACTION, LTT_FIELD_IRQ_ID),
         enum_interrupt, NULL, &hooks);
 
     lttv_trace_find_hook(ts->parent.t,
         LTT_EVENT_LIST_INTERRUPT,
         FIELD_ARRAY(LTT_FIELD_ACTION, LTT_FIELD_IRQ_ID),
         enum_interrupt, NULL, &hooks);
 
     lttv_trace_find_hook(ts->parent.t,
-        LTT_FACILITY_BLOCK,
+        LTT_CHANNEL_BLOCK,
         LTT_EVENT_REQUEST_ISSUE,
         FIELD_ARRAY(LTT_FIELD_MAJOR, LTT_FIELD_MINOR, LTT_FIELD_OPERATION),
         bdev_request_issue, NULL, &hooks);
 
     lttv_trace_find_hook(ts->parent.t,
         LTT_EVENT_REQUEST_ISSUE,
         FIELD_ARRAY(LTT_FIELD_MAJOR, LTT_FIELD_MINOR, LTT_FIELD_OPERATION),
         bdev_request_issue, NULL, &hooks);
 
     lttv_trace_find_hook(ts->parent.t,
-        LTT_FACILITY_BLOCK,
+        LTT_CHANNEL_BLOCK,
         LTT_EVENT_REQUEST_COMPLETE,
         FIELD_ARRAY(LTT_FIELD_MAJOR, LTT_FIELD_MINOR, LTT_FIELD_OPERATION),
         bdev_request_complete, NULL, &hooks);
 
     lttv_trace_find_hook(ts->parent.t,
         LTT_EVENT_REQUEST_COMPLETE,
         FIELD_ARRAY(LTT_FIELD_MAJOR, LTT_FIELD_MINOR, LTT_FIELD_OPERATION),
         bdev_request_complete, NULL, &hooks);
 
     lttv_trace_find_hook(ts->parent.t,
-        LTT_FACILITY_USER_GENERIC,
+        LTT_CHANNEL_USERSPACE,
         LTT_EVENT_FUNCTION_ENTRY,
         FIELD_ARRAY(LTT_FIELD_THIS_FN, LTT_FIELD_CALL_SITE),
         function_entry, NULL, &hooks);
 
     lttv_trace_find_hook(ts->parent.t,
         LTT_EVENT_FUNCTION_ENTRY,
         FIELD_ARRAY(LTT_FIELD_THIS_FN, LTT_FIELD_CALL_SITE),
         function_entry, NULL, &hooks);
 
     lttv_trace_find_hook(ts->parent.t,
-        LTT_FACILITY_USER_GENERIC,
+        LTT_CHANNEL_USERSPACE,
         LTT_EVENT_FUNCTION_EXIT,
         FIELD_ARRAY(LTT_FIELD_THIS_FN, LTT_FIELD_CALL_SITE),
         function_exit, NULL, &hooks);
 
     lttv_trace_find_hook(ts->parent.t,
         LTT_EVENT_FUNCTION_EXIT,
         FIELD_ARRAY(LTT_FIELD_THIS_FN, LTT_FIELD_CALL_SITE),
         function_exit, NULL, &hooks);
 
     lttv_trace_find_hook(ts->parent.t,
-        LTT_FACILITY_STATEDUMP,
+        LTT_CHANNEL_SYSCALL_STATE,
         LTT_EVENT_SYS_CALL_TABLE,
         FIELD_ARRAY(LTT_FIELD_ID, LTT_FIELD_ADDRESS, LTT_FIELD_SYMBOL),
         dump_syscall, NULL, &hooks);
 
     lttv_trace_find_hook(ts->parent.t,
         LTT_EVENT_SYS_CALL_TABLE,
         FIELD_ARRAY(LTT_FIELD_ID, LTT_FIELD_ADDRESS, LTT_FIELD_SYMBOL),
         dump_syscall, NULL, &hooks);
 
     lttv_trace_find_hook(ts->parent.t,
-        LTT_FACILITY_STATEDUMP,
+        LTT_CHANNEL_SOFTIRQ_STATE,
         LTT_EVENT_SOFTIRQ_VEC,
         FIELD_ARRAY(LTT_FIELD_ID, LTT_FIELD_ADDRESS, LTT_FIELD_SYMBOL),
         dump_softirq, NULL, &hooks);
         LTT_EVENT_SOFTIRQ_VEC,
         FIELD_ARRAY(LTT_FIELD_ID, LTT_FIELD_ADDRESS, LTT_FIELD_SYMBOL),
         dump_softirq, NULL, &hooks);
@@ -3552,11 +3561,12 @@ void lttv_state_add_event_hooks(LttvTracesetState *self)
 
       for(k = 0 ; k < hooks->len ; k++) {
         th = &g_array_index(hooks, LttvTraceHook, k);
 
       for(k = 0 ; k < hooks->len ; k++) {
         th = &g_array_index(hooks, LttvTraceHook, k);
-          lttv_hooks_add(
-            lttv_hooks_by_id_find(tfs->parent.event_by_id, th->id),
-            th->h,
-            th,
-            LTTV_PRIO_STATE);
+         if (th->mdata == tfs->parent.tf->mdata)
+            lttv_hooks_add(
+              lttv_hooks_by_id_find(tfs->parent.event_by_id, th->id),
+              th->h,
+              th,
+              LTTV_PRIO_STATE);
       }
     }
     lttv_attribute_find(ts->parent.a, LTTV_STATE_HOOKS, LTTV_POINTER, &val);
       }
     }
     lttv_attribute_find(ts->parent.a, LTTV_STATE_HOOKS, LTTV_POINTER, &val);
@@ -3607,6 +3617,7 @@ void lttv_state_remove_event_hooks(LttvTracesetState *self)
 
       for(k = 0 ; k < hooks->len ; k++) {
         th = &g_array_index(hooks, LttvTraceHook, k);
 
       for(k = 0 ; k < hooks->len ; k++) {
         th = &g_array_index(hooks, LttvTraceHook, k);
+       if (th->mdata == tfs->parent.tf->mdata)
           lttv_hooks_remove_data(
             lttv_hooks_by_id_find(tfs->parent.event_by_id, th->id),
                     th->h,
           lttv_hooks_remove_data(
             lttv_hooks_by_id_find(tfs->parent.event_by_id, th->id),
                     th->h,
@@ -4197,14 +4208,22 @@ static void module_init()
   LTTV_STATE_RESOURCE_TRAPS = g_quark_from_string("trap resource states");
   LTTV_STATE_RESOURCE_BLKDEVS = g_quark_from_string("blkdevs resource states");
 
   LTTV_STATE_RESOURCE_TRAPS = g_quark_from_string("trap resource states");
   LTTV_STATE_RESOURCE_BLKDEVS = g_quark_from_string("blkdevs resource states");
 
-  
-  LTT_FACILITY_KERNEL     = g_quark_from_string("kernel");
-  LTT_FACILITY_FS    = g_quark_from_string("fs");
-  LTT_FACILITY_LIST = g_quark_from_string("list");
-  LTT_FACILITY_USER_GENERIC    = g_quark_from_string("user_generic");
-  LTT_FACILITY_BLOCK = g_quark_from_string("block");
-  LTT_FACILITY_STATEDUMP = g_quark_from_string("statedump");
+  LTT_CHANNEL_FD_STATE     = g_quark_from_string("fd_state");
+  LTT_CHANNEL_GLOBAL_STATE     = g_quark_from_string("global_state");
+  LTT_CHANNEL_IRQ_STATE     = g_quark_from_string("irq_state");
+  LTT_CHANNEL_MODULE_STATE     = g_quark_from_string("module_state");
+  LTT_CHANNEL_NETIF_STATE     = g_quark_from_string("netif_state");
+  LTT_CHANNEL_SOFTIRQ_STATE     = g_quark_from_string("softirq_state");
+  LTT_CHANNEL_SWAP_STATE     = g_quark_from_string("swap_state");
+  LTT_CHANNEL_SYSCALL_STATE     = g_quark_from_string("syscall_state");
+  LTT_CHANNEL_TASK_STATE     = g_quark_from_string("task_state");
+  LTT_CHANNEL_VM_STATE     = g_quark_from_string("vm_state");
+  LTT_CHANNEL_FS     = g_quark_from_string("fs");
+  LTT_CHANNEL_KERNEL     = g_quark_from_string("kernel");
+  LTT_CHANNEL_MM     = g_quark_from_string("mm");
+  LTT_CHANNEL_USERSPACE     = g_quark_from_string("userspace");
+  LTT_CHANNEL_BLOCK     = g_quark_from_string("block");
+
   LTT_EVENT_SYSCALL_ENTRY = g_quark_from_string("syscall_entry");
   LTT_EVENT_SYSCALL_EXIT  = g_quark_from_string("syscall_exit");
   LTT_EVENT_TRAP_ENTRY    = g_quark_from_string("trap_entry");
   LTT_EVENT_SYSCALL_ENTRY = g_quark_from_string("syscall_entry");
   LTT_EVENT_SYSCALL_EXIT  = g_quark_from_string("syscall_exit");
   LTT_EVENT_TRAP_ENTRY    = g_quark_from_string("trap_entry");
index 6e8164b6f882634c416f6af0462c978d398590d4..b24badbb52966406f5ed92278ebf755bbd267966 100644 (file)
 
 #define LTTV_STATE_SAVE_INTERVAL 50000
 
 
 #define LTTV_STATE_SAVE_INTERVAL 50000
 
-/* Facilities Quarks */
+/* Channel Quarks */
 
 extern GQuark
 
 extern GQuark
-    LTT_FACILITY_KERNEL,
-    LTT_FACILITY_FS,
-    LTT_FACILITY_LIST,
-    LTT_FACILITY_USER_GENERIC,
-    LTT_FACILITY_BLOCK,
-    LTT_FACILITY_STATEDUMP;
+    LTT_CHANNEL_FD_STATE,
+    LTT_CHANNEL_GLOBAL_STATE,
+    LTT_CHANNEL_IRQ_STATE,
+    LTT_CHANNEL_MODULE_STATE,
+    LTT_CHANNEL_NETIF_STATE,
+    LTT_CHANNEL_SOFTIRQ_STATE,
+    LTT_CHANNEL_SWAP_STATE,
+    LTT_CHANNEL_SYSCALL_STATE,
+    LTT_CHANNEL_TASK_STATE,
+    LTT_CHANNEL_VM_STATE,
+    LTT_CHANNEL_FS,
+    LTT_CHANNEL_KERNEL,
+    LTT_CHANNEL_MM,
+    LTT_CHANNEL_USERSPACE,
+    LTT_CHANNEL_BLOCK;
 
 /* Events Quarks */
 
 
 /* Events Quarks */
 
index cb09fd0d8a73ec86fde9de43ad90614b027cd085..6aef4403c61584d7ed869d70c6455cb917c695c8 100644 (file)
@@ -781,8 +781,6 @@ static gboolean every_event(void *hook_data, void *call_data)
 
   LttvAttributeValue v;
 
 
   LttvAttributeValue v;
 
-  LttTrace *trace = ((LttvTracefileContext *)tfcs)->t_context->t;
-
   struct marker_info *info;
 
   /* The current branch corresponds to the tracefile/process/interrupt state.
   struct marker_info *info;
 
   /* The current branch corresponds to the tracefile/process/interrupt state.
@@ -790,7 +788,7 @@ static gboolean every_event(void *hook_data, void *call_data)
      type occuring in this context. A quark has been pre-allocated for each
      event type and is used as name. */
 
      type occuring in this context. A quark has been pre-allocated for each
      event type and is used as name. */
 
-  info = marker_get_info_from_id(trace, e->event_id);
+  info = marker_get_info_from_id(tfcs->parent.parent.tf->mdata, e->event_id);
 
   lttv_attribute_find(tfcs->current_event_types_tree, 
       info->name, LTTV_UINT, &v);
 
   lttv_attribute_find(tfcs->current_event_types_tree, 
       info->name, LTTV_UINT, &v);
@@ -1068,77 +1066,77 @@ void lttv_stats_add_event_hooks(LttvTracesetStats *self)
     hooks = g_array_sized_new(FALSE, FALSE, sizeof(LttvTraceHook), 12);
 
     lttv_trace_find_hook(ts->parent.parent.t,
     hooks = g_array_sized_new(FALSE, FALSE, sizeof(LttvTraceHook), 12);
 
     lttv_trace_find_hook(ts->parent.parent.t,
-        LTT_FACILITY_KERNEL,
+        LTT_CHANNEL_KERNEL,
         LTT_EVENT_SYSCALL_ENTRY,
         FIELD_ARRAY(LTT_FIELD_SYSCALL_ID),
         before_syscall_entry, NULL, 
         &hooks);
 
     lttv_trace_find_hook(ts->parent.parent.t,
         LTT_EVENT_SYSCALL_ENTRY,
         FIELD_ARRAY(LTT_FIELD_SYSCALL_ID),
         before_syscall_entry, NULL, 
         &hooks);
 
     lttv_trace_find_hook(ts->parent.parent.t,
-        LTT_FACILITY_KERNEL,
+        LTT_CHANNEL_KERNEL,
         LTT_EVENT_SYSCALL_EXIT,
         NULL,
         before_syscall_exit, NULL, 
         &hooks);
 
     lttv_trace_find_hook(ts->parent.parent.t,
         LTT_EVENT_SYSCALL_EXIT,
         NULL,
         before_syscall_exit, NULL, 
         &hooks);
 
     lttv_trace_find_hook(ts->parent.parent.t,
-        LTT_FACILITY_KERNEL,
+        LTT_CHANNEL_KERNEL,
         LTT_EVENT_TRAP_ENTRY,
         FIELD_ARRAY(LTT_FIELD_TRAP_ID),
         before_trap_entry, NULL, 
         &hooks);
 
     lttv_trace_find_hook(ts->parent.parent.t,
         LTT_EVENT_TRAP_ENTRY,
         FIELD_ARRAY(LTT_FIELD_TRAP_ID),
         before_trap_entry, NULL, 
         &hooks);
 
     lttv_trace_find_hook(ts->parent.parent.t,
-        LTT_FACILITY_KERNEL,
+        LTT_CHANNEL_KERNEL,
         LTT_EVENT_TRAP_EXIT,
         NULL,
         before_trap_exit, NULL,
         &hooks);
 
     lttv_trace_find_hook(ts->parent.parent.t,
         LTT_EVENT_TRAP_EXIT,
         NULL,
         before_trap_exit, NULL,
         &hooks);
 
     lttv_trace_find_hook(ts->parent.parent.t,
-        LTT_FACILITY_KERNEL,
+        LTT_CHANNEL_KERNEL,
         LTT_EVENT_IRQ_ENTRY,
         FIELD_ARRAY(LTT_FIELD_IRQ_ID),
         before_irq_entry, NULL,
         &hooks);
 
     lttv_trace_find_hook(ts->parent.parent.t,
         LTT_EVENT_IRQ_ENTRY,
         FIELD_ARRAY(LTT_FIELD_IRQ_ID),
         before_irq_entry, NULL,
         &hooks);
 
     lttv_trace_find_hook(ts->parent.parent.t,
-        LTT_FACILITY_KERNEL,
+        LTT_CHANNEL_KERNEL,
         LTT_EVENT_IRQ_EXIT,
         NULL,
         before_irq_exit, NULL,
         &hooks);
 
     lttv_trace_find_hook(ts->parent.parent.t,
         LTT_EVENT_IRQ_EXIT,
         NULL,
         before_irq_exit, NULL,
         &hooks);
 
     lttv_trace_find_hook(ts->parent.parent.t,
-        LTT_FACILITY_KERNEL,
+        LTT_CHANNEL_KERNEL,
         LTT_EVENT_SOFT_IRQ_ENTRY,
         FIELD_ARRAY(LTT_FIELD_SOFT_IRQ_ID),
         before_soft_irq_entry, NULL,
         &hooks);
 
     lttv_trace_find_hook(ts->parent.parent.t,
         LTT_EVENT_SOFT_IRQ_ENTRY,
         FIELD_ARRAY(LTT_FIELD_SOFT_IRQ_ID),
         before_soft_irq_entry, NULL,
         &hooks);
 
     lttv_trace_find_hook(ts->parent.parent.t,
-        LTT_FACILITY_KERNEL,
+        LTT_CHANNEL_KERNEL,
         LTT_EVENT_SOFT_IRQ_EXIT,
         NULL,
         before_soft_irq_exit, NULL,
         &hooks);
 
     lttv_trace_find_hook(ts->parent.parent.t,
         LTT_EVENT_SOFT_IRQ_EXIT,
         NULL,
         before_soft_irq_exit, NULL,
         &hooks);
 
     lttv_trace_find_hook(ts->parent.parent.t,
-        LTT_FACILITY_KERNEL,
+        LTT_CHANNEL_KERNEL,
         LTT_EVENT_SCHED_SCHEDULE,
         FIELD_ARRAY(LTT_FIELD_PREV_PID, LTT_FIELD_NEXT_PID, LTT_FIELD_PREV_STATE),
         before_schedchange, NULL, 
         &hooks);
 
     lttv_trace_find_hook(ts->parent.parent.t,
         LTT_EVENT_SCHED_SCHEDULE,
         FIELD_ARRAY(LTT_FIELD_PREV_PID, LTT_FIELD_NEXT_PID, LTT_FIELD_PREV_STATE),
         before_schedchange, NULL, 
         &hooks);
 
     lttv_trace_find_hook(ts->parent.parent.t,
-        LTT_FACILITY_USER_GENERIC,
+        LTT_CHANNEL_USERSPACE,
         LTT_EVENT_FUNCTION_ENTRY,
         FIELD_ARRAY(LTT_FIELD_THIS_FN, LTT_FIELD_CALL_SITE),
         before_function_entry, NULL,
         &hooks);
 
     lttv_trace_find_hook(ts->parent.parent.t,
         LTT_EVENT_FUNCTION_ENTRY,
         FIELD_ARRAY(LTT_FIELD_THIS_FN, LTT_FIELD_CALL_SITE),
         before_function_entry, NULL,
         &hooks);
 
     lttv_trace_find_hook(ts->parent.parent.t,
-        LTT_FACILITY_USER_GENERIC,
+        LTT_CHANNEL_USERSPACE,
         LTT_EVENT_FUNCTION_EXIT,
         FIELD_ARRAY(LTT_FIELD_THIS_FN, LTT_FIELD_CALL_SITE),
         before_function_exit, NULL,
         LTT_EVENT_FUNCTION_EXIT,
         FIELD_ARRAY(LTT_FIELD_THIS_FN, LTT_FIELD_CALL_SITE),
         before_function_exit, NULL,
@@ -1146,7 +1144,7 @@ void lttv_stats_add_event_hooks(LttvTracesetStats *self)
 
     /* statedump-related hooks */
     lttv_trace_find_hook(ts->parent.parent.t,
 
     /* statedump-related hooks */
     lttv_trace_find_hook(ts->parent.parent.t,
-        LTT_FACILITY_LIST,
+        LTT_CHANNEL_TASK_STATE,
         LTT_EVENT_PROCESS_STATE,
         FIELD_ARRAY(LTT_FIELD_PID, LTT_FIELD_PARENT_PID, LTT_FIELD_NAME),
         before_enum_process_state, NULL,
         LTT_EVENT_PROCESS_STATE,
         FIELD_ARRAY(LTT_FIELD_PID, LTT_FIELD_PARENT_PID, LTT_FIELD_NAME),
         before_enum_process_state, NULL,
@@ -1157,98 +1155,98 @@ void lttv_stats_add_event_hooks(LttvTracesetStats *self)
     hooks = g_array_sized_new(FALSE, FALSE, sizeof(LttvTraceHook), 16);
 
     lttv_trace_find_hook(ts->parent.parent.t,
     hooks = g_array_sized_new(FALSE, FALSE, sizeof(LttvTraceHook), 16);
 
     lttv_trace_find_hook(ts->parent.parent.t,
-        LTT_FACILITY_KERNEL,
+        LTT_CHANNEL_KERNEL,
         LTT_EVENT_SYSCALL_ENTRY,
         FIELD_ARRAY(LTT_FIELD_SYSCALL_ID),
         after_syscall_entry, NULL, 
         &hooks);
 
     lttv_trace_find_hook(ts->parent.parent.t,
         LTT_EVENT_SYSCALL_ENTRY,
         FIELD_ARRAY(LTT_FIELD_SYSCALL_ID),
         after_syscall_entry, NULL, 
         &hooks);
 
     lttv_trace_find_hook(ts->parent.parent.t,
-        LTT_FACILITY_KERNEL,
+        LTT_CHANNEL_KERNEL,
         LTT_EVENT_SYSCALL_EXIT,
         NULL,
         after_syscall_exit, NULL, 
         &hooks);
 
     lttv_trace_find_hook(ts->parent.parent.t,
         LTT_EVENT_SYSCALL_EXIT,
         NULL,
         after_syscall_exit, NULL, 
         &hooks);
 
     lttv_trace_find_hook(ts->parent.parent.t,
-        LTT_FACILITY_KERNEL,
+        LTT_CHANNEL_KERNEL,
         LTT_EVENT_TRAP_ENTRY, 
         FIELD_ARRAY(LTT_FIELD_TRAP_ID),
         after_trap_entry, NULL,
         &hooks);
 
     lttv_trace_find_hook(ts->parent.parent.t,
         LTT_EVENT_TRAP_ENTRY, 
         FIELD_ARRAY(LTT_FIELD_TRAP_ID),
         after_trap_entry, NULL,
         &hooks);
 
     lttv_trace_find_hook(ts->parent.parent.t,
-        LTT_FACILITY_KERNEL,
+        LTT_CHANNEL_KERNEL,
         LTT_EVENT_TRAP_EXIT,
         NULL,
         after_trap_exit, NULL,
         &hooks);
 
     lttv_trace_find_hook(ts->parent.parent.t,
         LTT_EVENT_TRAP_EXIT,
         NULL,
         after_trap_exit, NULL,
         &hooks);
 
     lttv_trace_find_hook(ts->parent.parent.t,
-        LTT_FACILITY_KERNEL,
+        LTT_CHANNEL_KERNEL,
         LTT_EVENT_IRQ_ENTRY, 
         FIELD_ARRAY(LTT_FIELD_IRQ_ID),
         after_irq_entry, NULL,
         &hooks);
 
     lttv_trace_find_hook(ts->parent.parent.t,
         LTT_EVENT_IRQ_ENTRY, 
         FIELD_ARRAY(LTT_FIELD_IRQ_ID),
         after_irq_entry, NULL,
         &hooks);
 
     lttv_trace_find_hook(ts->parent.parent.t,
-        LTT_FACILITY_KERNEL,
+        LTT_CHANNEL_KERNEL,
         LTT_EVENT_IRQ_EXIT,
         NULL,
         after_irq_exit, NULL,
         &hooks);
 
     lttv_trace_find_hook(ts->parent.parent.t,
         LTT_EVENT_IRQ_EXIT,
         NULL,
         after_irq_exit, NULL,
         &hooks);
 
     lttv_trace_find_hook(ts->parent.parent.t,
-        LTT_FACILITY_KERNEL,
+        LTT_CHANNEL_KERNEL,
         LTT_EVENT_SOFT_IRQ_ENTRY, 
         FIELD_ARRAY(LTT_FIELD_SOFT_IRQ_ID),
         after_soft_irq_entry, NULL,
         &hooks);
 
     lttv_trace_find_hook(ts->parent.parent.t,
         LTT_EVENT_SOFT_IRQ_ENTRY, 
         FIELD_ARRAY(LTT_FIELD_SOFT_IRQ_ID),
         after_soft_irq_entry, NULL,
         &hooks);
 
     lttv_trace_find_hook(ts->parent.parent.t,
-        LTT_FACILITY_KERNEL,
+        LTT_CHANNEL_KERNEL,
         LTT_EVENT_SOFT_IRQ_EXIT,
         NULL,
         after_soft_irq_exit, NULL,
         &hooks);
 
     lttv_trace_find_hook(ts->parent.parent.t,
         LTT_EVENT_SOFT_IRQ_EXIT,
         NULL,
         after_soft_irq_exit, NULL,
         &hooks);
 
     lttv_trace_find_hook(ts->parent.parent.t,
-        LTT_FACILITY_KERNEL,
+        LTT_CHANNEL_KERNEL,
         LTT_EVENT_SCHED_SCHEDULE,
         FIELD_ARRAY(LTT_FIELD_PREV_PID, LTT_FIELD_NEXT_PID, LTT_FIELD_PREV_STATE),
         after_schedchange, NULL, 
         &hooks);
 
     lttv_trace_find_hook(ts->parent.parent.t,
         LTT_EVENT_SCHED_SCHEDULE,
         FIELD_ARRAY(LTT_FIELD_PREV_PID, LTT_FIELD_NEXT_PID, LTT_FIELD_PREV_STATE),
         after_schedchange, NULL, 
         &hooks);
 
     lttv_trace_find_hook(ts->parent.parent.t,
-        LTT_FACILITY_KERNEL,
+        LTT_CHANNEL_KERNEL,
         LTT_EVENT_PROCESS_FORK, 
         FIELD_ARRAY(LTT_FIELD_PARENT_PID, LTT_FIELD_CHILD_PID),
         process_fork, NULL, 
         &hooks);
 
     lttv_trace_find_hook(ts->parent.parent.t,
         LTT_EVENT_PROCESS_FORK, 
         FIELD_ARRAY(LTT_FIELD_PARENT_PID, LTT_FIELD_CHILD_PID),
         process_fork, NULL, 
         &hooks);
 
     lttv_trace_find_hook(ts->parent.parent.t,
-        LTT_FACILITY_KERNEL,
+        LTT_CHANNEL_KERNEL,
         LTT_EVENT_PROCESS_EXIT,
         FIELD_ARRAY(LTT_FIELD_PID),
         process_exit, NULL,
         &hooks);
     
     lttv_trace_find_hook(ts->parent.parent.t,
         LTT_EVENT_PROCESS_EXIT,
         FIELD_ARRAY(LTT_FIELD_PID),
         process_exit, NULL,
         &hooks);
     
     lttv_trace_find_hook(ts->parent.parent.t,
-        LTT_FACILITY_KERNEL,
+        LTT_CHANNEL_KERNEL,
         LTT_EVENT_PROCESS_FREE,
         FIELD_ARRAY(LTT_FIELD_PID),
         process_free, NULL,
         &hooks);
 
     lttv_trace_find_hook(ts->parent.parent.t,
         LTT_EVENT_PROCESS_FREE,
         FIELD_ARRAY(LTT_FIELD_PID),
         process_free, NULL,
         &hooks);
 
     lttv_trace_find_hook(ts->parent.parent.t,
-        LTT_FACILITY_USER_GENERIC,
+        LTT_CHANNEL_USERSPACE,
         LTT_EVENT_FUNCTION_ENTRY,
         FIELD_ARRAY(LTT_FIELD_THIS_FN, LTT_FIELD_CALL_SITE),
         after_function_entry, NULL,
         &hooks);
 
     lttv_trace_find_hook(ts->parent.parent.t,
         LTT_EVENT_FUNCTION_ENTRY,
         FIELD_ARRAY(LTT_FIELD_THIS_FN, LTT_FIELD_CALL_SITE),
         after_function_entry, NULL,
         &hooks);
 
     lttv_trace_find_hook(ts->parent.parent.t,
-        LTT_FACILITY_USER_GENERIC,
+        LTT_CHANNEL_USERSPACE,
         LTT_EVENT_FUNCTION_EXIT,
         FIELD_ARRAY(LTT_FIELD_THIS_FN, LTT_FIELD_CALL_SITE),
         after_function_exit, NULL,
         LTT_EVENT_FUNCTION_EXIT,
         FIELD_ARRAY(LTT_FIELD_THIS_FN, LTT_FIELD_CALL_SITE),
         after_function_exit, NULL,
@@ -1256,14 +1254,14 @@ void lttv_stats_add_event_hooks(LttvTracesetStats *self)
 
     /* statedump-related hooks */
     lttv_trace_find_hook(ts->parent.parent.t,
 
     /* statedump-related hooks */
     lttv_trace_find_hook(ts->parent.parent.t,
-        LTT_FACILITY_LIST,
+        LTT_CHANNEL_TASK_STATE,
         LTT_EVENT_PROCESS_STATE,
         FIELD_ARRAY(LTT_FIELD_PID, LTT_FIELD_PARENT_PID, LTT_FIELD_NAME),
         after_enum_process_state, NULL,
         &hooks);
 
     lttv_trace_find_hook(ts->parent.parent.t,
         LTT_EVENT_PROCESS_STATE,
         FIELD_ARRAY(LTT_FIELD_PID, LTT_FIELD_PARENT_PID, LTT_FIELD_NAME),
         after_enum_process_state, NULL,
         &hooks);
 
     lttv_trace_find_hook(ts->parent.parent.t,
-        LTT_FACILITY_LIST,
+        LTT_CHANNEL_GLOBAL_STATE,
         LTT_EVENT_STATEDUMP_END,
         NULL,
         after_statedump_end, NULL,
         LTT_EVENT_STATEDUMP_END,
         NULL,
         after_statedump_end, NULL,
@@ -1283,19 +1281,21 @@ void lttv_stats_add_event_hooks(LttvTracesetStats *self)
 
       for(k = 0 ; k < before_hooks->len ; k++) {
         th = &g_array_index(before_hooks, LttvTraceHook, k);
 
       for(k = 0 ; k < before_hooks->len ; k++) {
         th = &g_array_index(before_hooks, LttvTraceHook, k);
-        lttv_hooks_add(
-            lttv_hooks_by_id_find(tfs->parent.parent.event_by_id, th->id),
-            th->h,
-            th,
-            LTTV_PRIO_STATS_BEFORE_STATE);
+        if (th->mdata == tfs->parent.parent.tf->mdata)
+          lttv_hooks_add(
+              lttv_hooks_by_id_find(tfs->parent.parent.event_by_id, th->id),
+              th->h,
+              th,
+              LTTV_PRIO_STATS_BEFORE_STATE);
       }
       for(k = 0 ; k < after_hooks->len ; k++) {
         th = &g_array_index(after_hooks, LttvTraceHook, k);
       }
       for(k = 0 ; k < after_hooks->len ; k++) {
         th = &g_array_index(after_hooks, LttvTraceHook, k);
-        lttv_hooks_add(
-            lttv_hooks_by_id_find(tfs->parent.parent.event_by_id, th->id),
-            th->h,
-            th,
-            LTTV_PRIO_STATS_AFTER_STATE);
+        if (th->mdata == tfs->parent.parent.tf->mdata)
+          lttv_hooks_add(
+              lttv_hooks_by_id_find(tfs->parent.parent.event_by_id, th->id),
+              th->h,
+              th,
+              LTTV_PRIO_STATS_AFTER_STATE);
       }
     }
     lttv_attribute_find(self->parent.parent.a, LTTV_STATS_BEFORE_HOOKS, 
       }
     }
     lttv_attribute_find(self->parent.parent.a, LTTV_STATS_BEFORE_HOOKS, 
@@ -1355,17 +1355,19 @@ void lttv_stats_remove_event_hooks(LttvTracesetStats *self)
 
       for(k = 0 ; k < before_hooks->len ; k++) {
         th = &g_array_index(before_hooks, LttvTraceHook, k);
 
       for(k = 0 ; k < before_hooks->len ; k++) {
         th = &g_array_index(before_hooks, LttvTraceHook, k);
-        lttv_hooks_remove_data(
-            lttv_hooks_by_id_find(tfs->parent.parent.event_by_id, th->id),
-            th->h,
-            th);
+        if (th->mdata == tfs->parent.parent.tf->mdata)
+          lttv_hooks_remove_data(
+              lttv_hooks_by_id_find(tfs->parent.parent.event_by_id, th->id),
+              th->h,
+              th);
       }
       for(k = 0 ; k < after_hooks->len ; k++) {
         th = &g_array_index(after_hooks, LttvTraceHook, k);
       }
       for(k = 0 ; k < after_hooks->len ; k++) {
         th = &g_array_index(after_hooks, LttvTraceHook, k);
-        lttv_hooks_remove_data(
-            lttv_hooks_by_id_find(tfs->parent.parent.event_by_id, th->id),
-            th->h,
-            th);
+        if (th->mdata == tfs->parent.parent.tf->mdata)
+          lttv_hooks_remove_data(
+              lttv_hooks_by_id_find(tfs->parent.parent.event_by_id, th->id),
+              th->h,
+              th);
         
       }
     }
         
       }
     }
index f5b78b5cbfdd8d640fe6b91576b68d415c840010..dbac9928dcacbbe5097a49010cc4f7d59a9d9e2a 100644 (file)
@@ -28,9 +28,6 @@
 #include <lttv/filter.h>
 #include <errno.h>
 
 #include <lttv/filter.h>
 #include <errno.h>
 
-#define min(a,b) (((a)<(b))?(a):(b))
-
-
 gint compare_tracefile(gconstpointer a, gconstpointer b)
 {
   gint comparison = 0;
 gint compare_tracefile(gconstpointer a, gconstpointer b)
 {
   gint comparison = 0;
@@ -291,7 +288,7 @@ void lttv_traceset_context_add_hooks(LttvTracesetContext *self,
     LttvHooks *before_trace, 
     LttvHooks *before_tracefile,
     LttvHooks *event,
     LttvHooks *before_trace, 
     LttvHooks *before_tracefile,
     LttvHooks *event,
-    LttvHooksById *event_by_id)
+    LttvHooksByIdChannelArray *event_by_id_channel)
 {
   LttvTraceset *ts = self->ts;
 
 {
   LttvTraceset *ts = self->ts;
 
@@ -309,7 +306,7 @@ void lttv_traceset_context_add_hooks(LttvTracesetContext *self,
                                  before_trace,
                                  before_tracefile,
                                  event,
                                  before_trace,
                                  before_tracefile,
                                  event,
-                                 event_by_id);
+                                 event_by_id_channel);
   }
 }
 
   }
 }
 
@@ -319,7 +316,7 @@ void lttv_traceset_context_remove_hooks(LttvTracesetContext *self,
     LttvHooks *after_trace, 
     LttvHooks *after_tracefile,
     LttvHooks *event, 
     LttvHooks *after_trace, 
     LttvHooks *after_tracefile,
     LttvHooks *event, 
-    LttvHooksById *event_by_id)
+    LttvHooksByIdChannelArray *event_by_id_channel)
 {
 
   LttvTraceset *ts = self->ts;
 {
 
   LttvTraceset *ts = self->ts;
@@ -336,7 +333,7 @@ void lttv_traceset_context_remove_hooks(LttvTracesetContext *self,
                                     after_trace,
                                     after_tracefile,
                                     event,
                                     after_trace,
                                     after_tracefile,
                                     event,
-                                    event_by_id);
+                                    event_by_id_channel);
   }
 
   lttv_hooks_call(after_traceset, self);
   }
 
   lttv_hooks_call(after_traceset, self);
@@ -348,11 +345,11 @@ void lttv_trace_context_add_hooks(LttvTraceContext *self,
     LttvHooks *before_trace, 
     LttvHooks *before_tracefile,
     LttvHooks *event, 
     LttvHooks *before_trace, 
     LttvHooks *before_tracefile,
     LttvHooks *event, 
-    LttvHooksById *event_by_id)
+    LttvHooksByIdChannelArray *event_by_id_channel)
 {
 {
-  guint i, nb_tracefile;
-
+  guint i, j, nb_tracefile;
   LttvTracefileContext **tfc;
   LttvTracefileContext **tfc;
+  LttTracefile *tf;
 
   lttv_hooks_call(before_trace, self);
 
 
   lttv_hooks_call(before_trace, self);
 
@@ -360,10 +357,22 @@ void lttv_trace_context_add_hooks(LttvTraceContext *self,
 
   for(i = 0 ; i < nb_tracefile ; i++) {
     tfc = &g_array_index(self->tracefiles, LttvTracefileContext*, i);
 
   for(i = 0 ; i < nb_tracefile ; i++) {
     tfc = &g_array_index(self->tracefiles, LttvTracefileContext*, i);
+    tf = (*tfc)->tf;
     lttv_tracefile_context_add_hooks(*tfc,
                                      before_tracefile,
                                      event,
     lttv_tracefile_context_add_hooks(*tfc,
                                      before_tracefile,
                                      event,
-                                     event_by_id);
+                                     NULL);
+    if (event_by_id_channel) {
+      for(j = 0; j < event_by_id_channel->array->len; j++) {
+        LttvHooksByIdChannel *hooks = &g_array_index(event_by_id_channel->array,
+                                                    LttvHooksByIdChannel, j);
+        if (tf->name == hooks->channel)
+          lttv_tracefile_context_add_hooks(*tfc,
+                                       NULL,
+                                       NULL,
+                                       hooks->hooks_by_id);
+      }
+    }
   }
 }
 
   }
 }
 
@@ -373,20 +382,33 @@ void lttv_trace_context_remove_hooks(LttvTraceContext *self,
     LttvHooks *after_trace, 
     LttvHooks *after_tracefile,
     LttvHooks *event, 
     LttvHooks *after_trace, 
     LttvHooks *after_tracefile,
     LttvHooks *event, 
-    LttvHooksById *event_by_id)
+    LttvHooksByIdChannelArray *event_by_id_channel)
 {
 {
-  guint i, nb_tracefile;
-
+  guint i, j, nb_tracefile;
   LttvTracefileContext **tfc;
   LttvTracefileContext **tfc;
+  LttTracefile *tf;
 
   nb_tracefile = self->tracefiles->len;
 
   for(i = 0 ; i < nb_tracefile ; i++) {
     tfc = &g_array_index(self->tracefiles, LttvTracefileContext*, i);
 
   nb_tracefile = self->tracefiles->len;
 
   for(i = 0 ; i < nb_tracefile ; i++) {
     tfc = &g_array_index(self->tracefiles, LttvTracefileContext*, i);
+    tf = (*tfc)->tf;
+    if (event_by_id_channel) {
+      for(j = 0; j < event_by_id_channel->array->len; j++) {
+        LttvHooksByIdChannel *hooks = &g_array_index(event_by_id_channel->array,
+                                                    LttvHooksByIdChannel, j);
+        if (tf->name == hooks->channel)
+          lttv_tracefile_context_remove_hooks(*tfc,
+                                       NULL,
+                                       NULL,
+                                       hooks->hooks_by_id);
+      }
+    }
     lttv_tracefile_context_remove_hooks(*tfc,
     lttv_tracefile_context_remove_hooks(*tfc,
-                                        after_tracefile,
-                                        event,
-                                        event_by_id);
+                                     after_tracefile,
+                                     event,
+                                     NULL);
+
   }
 
   lttv_hooks_call(after_trace, self);
   }
 
   lttv_hooks_call(after_trace, self);
@@ -398,7 +420,6 @@ void lttv_tracefile_context_add_hooks(LttvTracefileContext *self,
           LttvHooksById *event_by_id)
 {
   guint i, index;
           LttvHooksById *event_by_id)
 {
   guint i, index;
-
   LttvHooks *hook;
   
   lttv_hooks_call(before_tracefile, self);
   LttvHooks *hook;
   
   lttv_hooks_call(before_tracefile, self);
@@ -434,23 +455,6 @@ void lttv_tracefile_context_remove_hooks(LttvTracefileContext *self,
   lttv_hooks_call(after_tracefile, self);
 }
 
   lttv_hooks_call(after_tracefile, self);
 }
 
-
-
-void lttv_tracefile_context_add_hooks_by_id(LttvTracefileContext *tfc,
-                                           unsigned i,
-                                           LttvHooks *event_by_id)
-{
-  LttvHooks * h;
-  h = lttv_hooks_by_id_find(tfc->event_by_id, i);
-  lttv_hooks_add_list(h, event_by_id);
-}
-
-void lttv_tracefile_context_remove_hooks_by_id(LttvTracefileContext *tfc,
-                                              unsigned i)
-{
-  lttv_hooks_by_id_remove(tfc->event_by_id, i);
-}
-
 static LttvTracesetContext *
 new_traceset_context(LttvTracesetContext *self)
 {
 static LttvTracesetContext *
 new_traceset_context(LttvTracesetContext *self)
 {
@@ -667,7 +671,7 @@ void lttv_process_traceset_begin(LttvTracesetContext *self,
                                  LttvHooks       *before_trace,
                                  LttvHooks       *before_tracefile,
                                  LttvHooks       *event,
                                  LttvHooks       *before_trace,
                                  LttvHooks       *before_tracefile,
                                  LttvHooks       *event,
-                                 LttvHooksById   *event_by_id)
+                                 LttvHooksByIdChannelArray *event_by_id_channel)
 {
 
   /* simply add hooks in context. _before hooks are called by add_hooks. */
 {
 
   /* simply add hooks in context. _before hooks are called by add_hooks. */
@@ -677,7 +681,7 @@ void lttv_process_traceset_begin(LttvTracesetContext *self,
                                   before_trace,
                                   before_tracefile,
                                   event,
                                   before_trace,
                                   before_tracefile,
                                   event,
-                                  event_by_id);
+                                  event_by_id_channel);
   
 }
 
   
 }
 
@@ -810,7 +814,7 @@ void lttv_process_traceset_end(LttvTracesetContext *self,
                                LttvHooks           *after_trace,
                                LttvHooks           *after_tracefile,
                                LttvHooks           *event,
                                LttvHooks           *after_trace,
                                LttvHooks           *after_tracefile,
                                LttvHooks           *event,
-                               LttvHooksById       *event_by_id)
+                               LttvHooksByIdChannelArray *event_by_id_channel)
 {
   /* Remove hooks from context. _after hooks are called by remove_hooks. */
   /* It calls all after_traceset, after_trace, and after_tracefile hooks. */
 {
   /* Remove hooks from context. _after hooks are called by remove_hooks. */
   /* It calls all after_traceset, after_trace, and after_tracefile hooks. */
@@ -819,7 +823,7 @@ void lttv_process_traceset_end(LttvTracesetContext *self,
                                      after_trace,
                                      after_tracefile,
                                      event,
                                      after_trace,
                                      after_tracefile,
                                      event,
-                                     event_by_id);
+                                     event_by_id_channel);
 }
 
 /* Subtile modification : 
 }
 
 /* Subtile modification : 
@@ -962,22 +966,30 @@ find_field(LttEventType *et, const GQuark field)
 
 struct marker_info *lttv_trace_hook_get_marker(LttTrace *t, LttvTraceHook *th)
 {
 
 struct marker_info *lttv_trace_hook_get_marker(LttTrace *t, LttvTraceHook *th)
 {
-  return marker_get_info_from_id(t, th->id);
+  return marker_get_info_from_id(th->mdata, th->id);
 }
 
 }
 
-int lttv_trace_find_hook(LttTrace *t, GQuark facility_name, GQuark event_name,
+int lttv_trace_find_hook(LttTrace *t, GQuark channel_name, GQuark event_name,
     GQuark fields[], LttvHook h, gpointer hook_data, GArray **trace_hooks)
 {
   struct marker_info *info;
   guint16 marker_id;
   int init_array_size;
     GQuark fields[], LttvHook h, gpointer hook_data, GArray **trace_hooks)
 {
   struct marker_info *info;
   guint16 marker_id;
   int init_array_size;
-  GQuark marker_name;
+  GArray *group;
+  struct marker_data *mdata;
 
 
-  marker_name = lttv_merge_facility_event_name(facility_name, event_name);
+  group = g_datalist_id_get_data(&t->tracefiles, channel_name);
+  if (unlikely(!group || group->len == 0)) {
+    g_warning("No channel for marker named %s.%s found",
+    g_quark_to_string(channel_name), g_quark_to_string(event_name));
+    return 1;
+  }
 
 
-  info = marker_get_info_from_name(t, marker_name);
+  mdata = g_array_index (group, LttTracefile, 0).mdata;
+  info = marker_get_info_from_name(mdata, event_name);
   if(unlikely(info == NULL)) {
   if(unlikely(info == NULL)) {
-    g_warning("No marker of name %s found", g_quark_to_string(marker_name));
+    g_warning("No marker named %s.%s found",
+    g_quark_to_string(channel_name), g_quark_to_string(event_name));
     return 1;
   }
 
     return 1;
   }
 
@@ -990,9 +1002,11 @@ int lttv_trace_find_hook(LttTrace *t, GQuark facility_name, GQuark event_name,
     GQuark *f;
     struct marker_field *marker_field;
 
     GQuark *f;
     struct marker_field *marker_field;
 
-    marker_id = marker_get_id_from_info(t, info);
+    marker_id = marker_get_id_from_info(mdata, info);
 
     tmpth.h = h;
 
     tmpth.h = h;
+    tmpth.mdata = mdata;
+    tmpth.channel = channel_name;
     tmpth.id = marker_id;
     tmpth.hook_data = hook_data;
     tmpth.fields = g_ptr_array_new();
     tmpth.id = marker_id;
     tmpth.hook_data = hook_data;
     tmpth.fields = g_ptr_array_new();
@@ -1012,8 +1026,9 @@ int lttv_trace_find_hook(LttTrace *t, GQuark facility_name, GQuark event_name,
            marker. Print a warning and skip this marker completely.
           Still iterate on other markers with same name. */
         g_ptr_array_free(tmpth.fields, TRUE);
            marker. Print a warning and skip this marker completely.
           Still iterate on other markers with same name. */
         g_ptr_array_free(tmpth.fields, TRUE);
-        g_warning("Field %s cannot be found in marker %s",
-                g_quark_to_string(*f), g_quark_to_string(marker_name));
+        g_warning("Field %s cannot be found in marker %s.%s",
+                g_quark_to_string(*f), g_quark_to_string(channel_name),
+                                       g_quark_to_string(event_name));
         goto skip_marker;
       }
     }
         goto skip_marker;
       }
     }
@@ -1025,8 +1040,8 @@ skip_marker:
 
   /* Error if no new trace hook has been added */
   if (init_array_size == (*trace_hooks)->len) {
 
   /* Error if no new trace hook has been added */
   if (init_array_size == (*trace_hooks)->len) {
-        g_warning("No marker of name %s has all requested fields",
-                g_quark_to_string(marker_name));
+        g_warning("No marker of name %s.%s has all requested fields",
+                g_quark_to_string(channel_name), g_quark_to_string(event_name));
         return 1;
   }
   return 0;
         return 1;
   }
   return 0;
index 8bee889086bd95755a4dbfca47f954e38f920999..5a768b4b931b74d21b9bf3fb985a6d5686da099a 100644 (file)
@@ -201,11 +201,11 @@ void lttv_process_traceset(LttvTracesetContext *self, LttTime end,
 
 
 void lttv_process_traceset_begin(LttvTracesetContext *self,
 
 
 void lttv_process_traceset_begin(LttvTracesetContext *self,
-                                 LttvHooks       *before_traceset,
-                                 LttvHooks       *before_trace,
-                                 LttvHooks       *before_tracefile,
-                                 LttvHooks       *event,
-                                 LttvHooksById   *event_by_id);
+                             LttvHooks       *before_traceset,
+                             LttvHooks       *before_trace,
+                             LttvHooks       *before_tracefile,
+                             LttvHooks       *event,
+                             LttvHooksByIdChannelArray   *event_by_id_channel);
 
 
 guint lttv_process_traceset_middle(LttvTracesetContext *self,
 
 
 guint lttv_process_traceset_middle(LttvTracesetContext *self,
@@ -214,11 +214,11 @@ guint lttv_process_traceset_middle(LttvTracesetContext *self,
                               const LttvTracesetContextPosition *end_position);
 
 void lttv_process_traceset_end(LttvTracesetContext *self,
                               const LttvTracesetContextPosition *end_position);
 
 void lttv_process_traceset_end(LttvTracesetContext *self,
-                               LttvHooks           *after_traceset,
-                               LttvHooks           *after_trace,
-                               LttvHooks           *after_tracefile,
-                               LttvHooks           *event,
-                               LttvHooksById       *event_by_id);
+                             LttvHooks           *after_traceset,
+                             LttvHooks           *after_trace,
+                             LttvHooks           *after_tracefile,
+                             LttvHooks           *event,
+                             LttvHooksByIdChannelArray   *event_by_id_channel);
 
 
 void lttv_process_traceset_seek_time(LttvTracesetContext *self, LttTime start);
 
 
 void lttv_process_traceset_seek_time(LttvTracesetContext *self, LttTime start);
@@ -233,26 +233,26 @@ void lttv_traceset_context_add_hooks(LttvTracesetContext *self,
     LttvHooks *before_trace, 
     LttvHooks *before_tracefile,
     LttvHooks *event,
     LttvHooks *before_trace, 
     LttvHooks *before_tracefile,
     LttvHooks *event,
-    LttvHooksById *event_by_id);
+    LttvHooksByIdChannelArray *event_by_id_channel);
 
 void lttv_traceset_context_remove_hooks(LttvTracesetContext *self,
     LttvHooks *after_traceset,
     LttvHooks *after_trace, 
     LttvHooks *after_tracefile,
     LttvHooks *event, 
 
 void lttv_traceset_context_remove_hooks(LttvTracesetContext *self,
     LttvHooks *after_traceset,
     LttvHooks *after_trace, 
     LttvHooks *after_tracefile,
     LttvHooks *event, 
-    LttvHooksById *event_by_id);
+    LttvHooksByIdChannelArray *event_by_id_channel);
 
 void lttv_trace_context_add_hooks(LttvTraceContext *self,
     LttvHooks *before_trace, 
     LttvHooks *before_tracefile,
     LttvHooks *event, 
 
 void lttv_trace_context_add_hooks(LttvTraceContext *self,
     LttvHooks *before_trace, 
     LttvHooks *before_tracefile,
     LttvHooks *event, 
-    LttvHooksById *event_by_id);
+    LttvHooksByIdChannelArray *event_by_id_channel);
 
 void lttv_trace_context_remove_hooks(LttvTraceContext *self,
     LttvHooks *after_trace, 
     LttvHooks *after_tracefile,
     LttvHooks *event, 
 
 void lttv_trace_context_remove_hooks(LttvTraceContext *self,
     LttvHooks *after_trace, 
     LttvHooks *after_tracefile,
     LttvHooks *event, 
-    LttvHooksById *event_by_id);
+    LttvHooksByIdChannelArray *event_by_id_channel);
 
 void lttv_tracefile_context_add_hooks(LttvTracefileContext *self,
           LttvHooks *before_tracefile,
 
 void lttv_tracefile_context_add_hooks(LttvTracefileContext *self,
           LttvHooks *before_tracefile,
@@ -261,20 +261,14 @@ void lttv_tracefile_context_add_hooks(LttvTracefileContext *self,
 
 
 void lttv_tracefile_context_remove_hooks(LttvTracefileContext *self,
 
 
 void lttv_tracefile_context_remove_hooks(LttvTracefileContext *self,
-           LttvHooks *after_tracefile,
-           LttvHooks *event, 
-           LttvHooksById *event_by_id);
-
-
-void lttv_tracefile_context_add_hooks_by_id(LttvTracefileContext *self,
-                                           unsigned i,
-                                           LttvHooks *event_by_id);
-
-void lttv_tracefile_context_remove_hooks_by_id(LttvTracefileContext *self,
-                                              unsigned i);
+          LttvHooks *after_tracefile,
+          LttvHooks *event, 
+          LttvHooksById *event_by_id);
 
 typedef struct _LttvTraceHook {
   LttvHook h;
 
 typedef struct _LttvTraceHook {
   LttvHook h;
+  struct marker_data *mdata;
+  GQuark channel;
   guint16 id;  /* id of the marker associated with this hook */
   GPtrArray *fields;  /* struct marker_fields pointers */
   gpointer hook_data;
   guint16 id;  /* id of the marker associated with this hook */
   GPtrArray *fields;  /* struct marker_fields pointers */
   gpointer hook_data;
@@ -308,6 +302,7 @@ lttv_trace_get_hook_field(LttvTraceHook *hook, unsigned int index)
        return g_ptr_array_index(hook->fields, index);
 }
 
        return g_ptr_array_index(hook->fields, index);
 }
 
+#if 0
 static inline GQuark lttv_merge_facility_event_name(GQuark fac, GQuark ev)
 {
   char *tmp;
 static inline GQuark lttv_merge_facility_event_name(GQuark fac, GQuark ev)
 {
   char *tmp;
@@ -324,6 +319,7 @@ static inline GQuark lttv_merge_facility_event_name(GQuark fac, GQuark ev)
   g_free(tmp);
   return ret;
 }
   g_free(tmp);
   return ret;
 }
+#endif //0
 
 LttvTracefileContext *lttv_traceset_context_get_current_tfc(
                              LttvTracesetContext *self);
 
 LttvTracefileContext *lttv_traceset_context_get_current_tfc(
                              LttvTracesetContext *self);
index 8ef0fcdb36ba96e93a1a87ac47ad2965710e0c62..2c0355a45fc71d23a9e1bbce4eac3c62a4979861 100644 (file)
@@ -6,7 +6,7 @@
 
 # WARNING : subdirs order is important : mainWin depends on API
 
 
 # WARNING : subdirs order is important : mainWin depends on API
 
-SUBDIRS = lttvwindow controlflow detailedevents statistics filter tracecontrol resourceview histogram interrupts
+SUBDIRS = lttvwindow controlflow detailedevents statistics filter tracecontrol histogram interrupts resourceview
 
 # TODO: PORT for 0.10
 #diskperformance tutorial
 
 # TODO: PORT for 0.10
 #diskperformance tutorial
index 0d977d41b5f434b51905814735138ddc433d629d..2f3cc0c2616bbb7370cb2d6ff1b465c65481109a 100644 (file)
@@ -26,6 +26,7 @@ AM_CFLAGS = $(GLIB_CFLAGS)
 AM_CFLAGS += $(GTK_CFLAGS)
 AM_CFLAGS += -fvisibility=hidden
 LIBS += $(GLIB_LIBS)
 AM_CFLAGS += $(GTK_CFLAGS)
 AM_CFLAGS += -fvisibility=hidden
 LIBS += $(GLIB_LIBS)
+LIBS += $(THREAD_LIBS)
 LIBS += $(GTK_LIBS) -L${top_builddir}/lttv/modules/gui/lttvwindow/lttvwindow -llttvwindow
 
 libdir = ${lttvplugindir}
 LIBS += $(GTK_LIBS) -L${top_builddir}/lttv/modules/gui/lttvwindow/lttvwindow -llttvwindow
 
 libdir = ${lttvplugindir}
index afd530d2cb1236be806c13adb29fc00aaad95570..cde87124dd71e0791c23aa3a395bacc0acc861c0 100644 (file)
@@ -173,8 +173,6 @@ void drawing_data_request(Drawing_t *drawing,
 
     GArray *hooks;
 
 
     GArray *hooks;
 
-    LttvTraceHook *hook;
-
     LttvTraceHook *th;
 
     guint ret;
     LttvTraceHook *th;
 
     guint ret;
@@ -186,7 +184,8 @@ void drawing_data_request(Drawing_t *drawing,
       EventsRequest *events_request = g_new(EventsRequest, 1);
       // Create the hooks
       //LttvHooks *event = lttv_hooks_new();
       EventsRequest *events_request = g_new(EventsRequest, 1);
       // Create the hooks
       //LttvHooks *event = lttv_hooks_new();
-      LttvHooksById *event_by_id = lttv_hooks_by_id_new();
+      LttvHooksByIdChannelArray *event_by_id_channel =
+          lttv_hooks_by_id_channel_new();
       LttvHooks *before_chunk_traceset = lttv_hooks_new();
       LttvHooks *after_chunk_traceset = lttv_hooks_new();
       LttvHooks *before_request_hook = lttv_hooks_new();
       LttvHooks *before_chunk_traceset = lttv_hooks_new();
       LttvHooks *after_chunk_traceset = lttv_hooks_new();
       LttvHooks *before_request_hook = lttv_hooks_new();
@@ -223,7 +222,7 @@ void drawing_data_request(Drawing_t *drawing,
       /* before hooks */
       
       lttv_trace_find_hook(ts->parent.t,
       /* before hooks */
       
       lttv_trace_find_hook(ts->parent.t,
-          LTT_FACILITY_KERNEL,
+          LTT_CHANNEL_KERNEL,
           LTT_EVENT_SYSCALL_ENTRY,
           FIELD_ARRAY(LTT_FIELD_SYSCALL_ID),
           before_execmode_hook,
           LTT_EVENT_SYSCALL_ENTRY,
           FIELD_ARRAY(LTT_FIELD_SYSCALL_ID),
           before_execmode_hook,
@@ -231,7 +230,7 @@ void drawing_data_request(Drawing_t *drawing,
           &hooks);
 
       lttv_trace_find_hook(ts->parent.t,
           &hooks);
 
       lttv_trace_find_hook(ts->parent.t,
-          LTT_FACILITY_KERNEL,
+          LTT_CHANNEL_KERNEL,
           LTT_EVENT_SYSCALL_EXIT,
           NULL,
           before_execmode_hook,
           LTT_EVENT_SYSCALL_EXIT,
           NULL,
           before_execmode_hook,
@@ -239,7 +238,7 @@ void drawing_data_request(Drawing_t *drawing,
           &hooks);
 
       lttv_trace_find_hook(ts->parent.t,
           &hooks);
 
       lttv_trace_find_hook(ts->parent.t,
-          LTT_FACILITY_KERNEL,
+          LTT_CHANNEL_KERNEL,
           LTT_EVENT_TRAP_ENTRY,
           FIELD_ARRAY(LTT_FIELD_TRAP_ID),
           before_execmode_hook,
           LTT_EVENT_TRAP_ENTRY,
           FIELD_ARRAY(LTT_FIELD_TRAP_ID),
           before_execmode_hook,
@@ -247,7 +246,7 @@ void drawing_data_request(Drawing_t *drawing,
           &hooks);
 
       lttv_trace_find_hook(ts->parent.t,
           &hooks);
 
       lttv_trace_find_hook(ts->parent.t,
-          LTT_FACILITY_KERNEL,
+          LTT_CHANNEL_KERNEL,
           LTT_EVENT_TRAP_EXIT,
           NULL, 
           before_execmode_hook,
           LTT_EVENT_TRAP_EXIT,
           NULL, 
           before_execmode_hook,
@@ -255,7 +254,7 @@ void drawing_data_request(Drawing_t *drawing,
           &hooks);
 
       lttv_trace_find_hook(ts->parent.t,
           &hooks);
 
       lttv_trace_find_hook(ts->parent.t,
-          LTT_FACILITY_KERNEL,
+          LTT_CHANNEL_KERNEL,
           LTT_EVENT_IRQ_ENTRY,
           FIELD_ARRAY(LTT_FIELD_IRQ_ID),
           before_execmode_hook,
           LTT_EVENT_IRQ_ENTRY,
           FIELD_ARRAY(LTT_FIELD_IRQ_ID),
           before_execmode_hook,
@@ -263,7 +262,7 @@ void drawing_data_request(Drawing_t *drawing,
           &hooks);
 
       lttv_trace_find_hook(ts->parent.t,
           &hooks);
 
       lttv_trace_find_hook(ts->parent.t,
-          LTT_FACILITY_KERNEL,
+          LTT_CHANNEL_KERNEL,
           LTT_EVENT_IRQ_EXIT,
           NULL,
           before_execmode_hook,
           LTT_EVENT_IRQ_EXIT,
           NULL,
           before_execmode_hook,
@@ -271,7 +270,7 @@ void drawing_data_request(Drawing_t *drawing,
           &hooks);
 
       lttv_trace_find_hook(ts->parent.t,
           &hooks);
 
       lttv_trace_find_hook(ts->parent.t,
-          LTT_FACILITY_KERNEL,
+          LTT_CHANNEL_KERNEL,
           LTT_EVENT_SOFT_IRQ_ENTRY,
           FIELD_ARRAY(LTT_FIELD_SOFT_IRQ_ID),
           before_execmode_hook,
           LTT_EVENT_SOFT_IRQ_ENTRY,
           FIELD_ARRAY(LTT_FIELD_SOFT_IRQ_ID),
           before_execmode_hook,
@@ -279,7 +278,7 @@ void drawing_data_request(Drawing_t *drawing,
           &hooks);
 
       lttv_trace_find_hook(ts->parent.t,
           &hooks);
 
       lttv_trace_find_hook(ts->parent.t,
-          LTT_FACILITY_KERNEL,
+          LTT_CHANNEL_KERNEL,
           LTT_EVENT_SOFT_IRQ_EXIT,
           NULL,
           before_execmode_hook,
           LTT_EVENT_SOFT_IRQ_EXIT,
           NULL,
           before_execmode_hook,
@@ -288,7 +287,7 @@ void drawing_data_request(Drawing_t *drawing,
 
 
       lttv_trace_find_hook(ts->parent.t,
 
 
       lttv_trace_find_hook(ts->parent.t,
-          LTT_FACILITY_KERNEL,
+          LTT_CHANNEL_KERNEL,
           LTT_EVENT_SCHED_SCHEDULE,
           FIELD_ARRAY(LTT_FIELD_PREV_PID, LTT_FIELD_NEXT_PID, LTT_FIELD_PREV_STATE),
           before_schedchange_hook,
           LTT_EVENT_SCHED_SCHEDULE,
           FIELD_ARRAY(LTT_FIELD_PREV_PID, LTT_FIELD_NEXT_PID, LTT_FIELD_PREV_STATE),
           before_schedchange_hook,
@@ -296,7 +295,7 @@ void drawing_data_request(Drawing_t *drawing,
           &hooks);
 
       lttv_trace_find_hook(ts->parent.t,
           &hooks);
 
       lttv_trace_find_hook(ts->parent.t,
-          LTT_FACILITY_KERNEL,
+          LTT_CHANNEL_KERNEL,
           LTT_EVENT_PROCESS_EXIT,
           FIELD_ARRAY(LTT_FIELD_PID),
           before_process_exit_hook,
           LTT_EVENT_PROCESS_EXIT,
           FIELD_ARRAY(LTT_FIELD_PID),
           before_process_exit_hook,
@@ -304,7 +303,7 @@ void drawing_data_request(Drawing_t *drawing,
           &hooks);
       
       lttv_trace_find_hook(ts->parent.t,
           &hooks);
       
       lttv_trace_find_hook(ts->parent.t,
-          LTT_FACILITY_KERNEL,
+          LTT_CHANNEL_KERNEL,
           LTT_EVENT_PROCESS_FREE,
           FIELD_ARRAY(LTT_FIELD_PID),
           before_process_release_hook,
           LTT_EVENT_PROCESS_FREE,
           FIELD_ARRAY(LTT_FIELD_PID),
           before_process_release_hook,
@@ -312,7 +311,7 @@ void drawing_data_request(Drawing_t *drawing,
           &hooks);
 
       lttv_trace_find_hook(ts->parent.t,
           &hooks);
 
       lttv_trace_find_hook(ts->parent.t,
-          LTT_FACILITY_LIST,
+          LTT_CHANNEL_GLOBAL_STATE,
           LTT_EVENT_STATEDUMP_END,
           NULL,
           before_statedump_end,
           LTT_EVENT_STATEDUMP_END,
           NULL,
           before_statedump_end,
@@ -323,7 +322,7 @@ void drawing_data_request(Drawing_t *drawing,
       first_after = hooks->len;
  
       lttv_trace_find_hook(ts->parent.t,
       first_after = hooks->len;
  
       lttv_trace_find_hook(ts->parent.t,
-          LTT_FACILITY_KERNEL,
+          LTT_CHANNEL_KERNEL,
           LTT_EVENT_SCHED_SCHEDULE,
           FIELD_ARRAY(LTT_FIELD_PREV_PID, LTT_FIELD_NEXT_PID, LTT_FIELD_PREV_STATE),
           after_schedchange_hook,
           LTT_EVENT_SCHED_SCHEDULE,
           FIELD_ARRAY(LTT_FIELD_PREV_PID, LTT_FIELD_NEXT_PID, LTT_FIELD_PREV_STATE),
           after_schedchange_hook,
@@ -331,7 +330,7 @@ void drawing_data_request(Drawing_t *drawing,
           &hooks);
 
       lttv_trace_find_hook(ts->parent.t,
           &hooks);
 
       lttv_trace_find_hook(ts->parent.t,
-          LTT_FACILITY_KERNEL,
+          LTT_CHANNEL_KERNEL,
           LTT_EVENT_PROCESS_FORK,
           FIELD_ARRAY(LTT_FIELD_PARENT_PID, LTT_FIELD_CHILD_PID),
           after_process_fork_hook,
           LTT_EVENT_PROCESS_FORK,
           FIELD_ARRAY(LTT_FIELD_PARENT_PID, LTT_FIELD_CHILD_PID),
           after_process_fork_hook,
@@ -339,7 +338,7 @@ void drawing_data_request(Drawing_t *drawing,
           &hooks);
 
       lttv_trace_find_hook(ts->parent.t,
           &hooks);
 
       lttv_trace_find_hook(ts->parent.t,
-          LTT_FACILITY_KERNEL,
+          LTT_CHANNEL_KERNEL,
           LTT_EVENT_PROCESS_EXIT,
           FIELD_ARRAY(LTT_FIELD_PID),
           after_process_exit_hook,
           LTT_EVENT_PROCESS_EXIT,
           FIELD_ARRAY(LTT_FIELD_PID),
           after_process_exit_hook,
@@ -347,7 +346,7 @@ void drawing_data_request(Drawing_t *drawing,
           &hooks);
 
       lttv_trace_find_hook(ts->parent.t,
           &hooks);
 
       lttv_trace_find_hook(ts->parent.t,
-          LTT_FACILITY_FS,
+          LTT_CHANNEL_FS,
           LTT_EVENT_EXEC,
           NULL,
           after_fs_exec_hook,
           LTT_EVENT_EXEC,
           NULL,
           after_fs_exec_hook,
@@ -355,7 +354,7 @@ void drawing_data_request(Drawing_t *drawing,
           &hooks);
 
       lttv_trace_find_hook(ts->parent.t,
           &hooks);
 
       lttv_trace_find_hook(ts->parent.t,
-          LTT_FACILITY_USER_GENERIC,
+          LTT_CHANNEL_USERSPACE,
           LTT_EVENT_THREAD_BRAND,
           FIELD_ARRAY(LTT_FIELD_NAME),
           after_user_generic_thread_brand_hook,
           LTT_EVENT_THREAD_BRAND,
           FIELD_ARRAY(LTT_FIELD_NAME),
           after_user_generic_thread_brand_hook,
@@ -363,7 +362,7 @@ void drawing_data_request(Drawing_t *drawing,
           &hooks);
 
       lttv_trace_find_hook(ts->parent.t,
           &hooks);
 
       lttv_trace_find_hook(ts->parent.t,
-          LTT_FACILITY_LIST,
+          LTT_CHANNEL_TASK_STATE,
           LTT_EVENT_PROCESS_STATE,
           FIELD_ARRAY(LTT_FIELD_PID, LTT_FIELD_PARENT_PID, LTT_FIELD_NAME),
           after_event_enum_process_hook,
           LTT_EVENT_PROCESS_STATE,
           FIELD_ARRAY(LTT_FIELD_PID, LTT_FIELD_PARENT_PID, LTT_FIELD_NAME),
           after_event_enum_process_hook,
@@ -371,11 +370,12 @@ void drawing_data_request(Drawing_t *drawing,
           &hooks);
 
       
           &hooks);
 
       
-      /* Add these hooks to each event_by_id hooks list */
+      /* Add these hooks to each event_by_id_channel hooks list */
       /* add before */
       for(k = 0 ; k < first_after ; k++) {
         th = &g_array_index(hooks, LttvTraceHook, k);
       /* add before */
       for(k = 0 ; k < first_after ; k++) {
         th = &g_array_index(hooks, LttvTraceHook, k);
-        lttv_hooks_add(lttv_hooks_by_id_find(event_by_id, th->id),
+        lttv_hooks_add(lttv_hooks_by_id_channel_find(event_by_id_channel,
+                                                    th->channel, th->id),
                         th->h,
                         th,
                         LTTV_PRIO_STATE-5);
                         th->h,
                         th,
                         LTTV_PRIO_STATE-5);
@@ -384,7 +384,8 @@ void drawing_data_request(Drawing_t *drawing,
       /* add after */
       for(k = first_after ; k < hooks->len ; k++) {
         th = &g_array_index(hooks, LttvTraceHook, k);
       /* add after */
       for(k = first_after ; k < hooks->len ; k++) {
         th = &g_array_index(hooks, LttvTraceHook, k);
-        lttv_hooks_add(lttv_hooks_by_id_find(event_by_id, th->id),
+        lttv_hooks_add(lttv_hooks_by_id_channel_find(event_by_id_channel,
+                                                    th->channel, th->id),
                        th->h,
                        th,
                        LTTV_PRIO_STATE+5);
                        th->h,
                        th,
                        LTTV_PRIO_STATE+5);
@@ -407,7 +408,7 @@ void drawing_data_request(Drawing_t *drawing,
       events_request->before_chunk_trace = NULL;
       events_request->before_chunk_tracefile = NULL;
       events_request->event = NULL;
       events_request->before_chunk_trace = NULL;
       events_request->before_chunk_tracefile = NULL;
       events_request->event = NULL;
-      events_request->event_by_id = event_by_id;
+      events_request->event_by_id_channel = event_by_id_channel;
       events_request->after_chunk_tracefile = NULL;
       events_request->after_chunk_trace = NULL;
       events_request->after_chunk_traceset = after_chunk_traceset;
       events_request->after_chunk_tracefile = NULL;
       events_request->after_chunk_trace = NULL;
       events_request->after_chunk_traceset = after_chunk_traceset;
index 20cfacef40a940660722317f323486f0390482a8..51a63d64b047657b34f4e329735b37d4164ce692 100644 (file)
@@ -27,6 +27,7 @@ AM_CFLAGS = $(GLIB_CFLAGS)
 AM_CFLAGS += $(GTK_CFLAGS)
 AM_CFLAGS += -fvisibility=hidden
 LIBS += $(GLIB_LIBS)
 AM_CFLAGS += $(GTK_CFLAGS)
 AM_CFLAGS += -fvisibility=hidden
 LIBS += $(GLIB_LIBS)
+LIBS += $(THREAD_LIBS)
 LIBS += $(GTK_LIBS) -L${top_builddir}/lttv/modules/gui/lttvwindow/lttvwindow -llttvwindow
 
 libdir = ${lttvplugindir}
 LIBS += $(GTK_LIBS) -L${top_builddir}/lttv/modules/gui/lttvwindow/lttvwindow -llttvwindow
 
 libdir = ${lttvplugindir}
index f1cca3c775fff7b8f86505c4240e2fa311a396ef..9376349c9bcfbf0dfb2fbd55ce61fbb9b2f83801 100644 (file)
@@ -1593,7 +1593,8 @@ int event_hook(void *hook_data, void *call_data)
       TRACE_NAME_COLUMN, g_quark_to_string(ltt_trace_name(tfc->t_context->t)),
       TRACEFILE_NAME_COLUMN, g_quark_to_string(ltt_tracefile_name(tfc->tf)),
       CPUID_COLUMN, cpu,
       TRACE_NAME_COLUMN, g_quark_to_string(ltt_trace_name(tfc->t_context->t)),
       TRACEFILE_NAME_COLUMN, g_quark_to_string(ltt_tracefile_name(tfc->tf)),
       CPUID_COLUMN, cpu,
-      EVENT_COLUMN, g_quark_to_string(marker_get_info_from_id(tfc->t_context->t, e->event_id)->name),
+      EVENT_COLUMN, g_quark_to_string(marker_get_info_from_id(tfc->tf->mdata,
+        e->event_id)->name),
       TIME_S_COLUMN, time.tv_sec,
       TIME_NS_COLUMN, time.tv_nsec,
       PID_COLUMN, process->pid,
       TIME_S_COLUMN, time.tv_sec,
       TIME_NS_COLUMN, time.tv_nsec,
       PID_COLUMN, process->pid,
index 572c17403585ba24e2ce7e73a2c5d6d2b167413d..4c2c77124912179cdace3a4add6054a0cd3d72d9 100644 (file)
@@ -27,6 +27,7 @@ AM_CFLAGS = $(GLIB_CFLAGS)
 AM_CFLAGS += $(GTK_CFLAGS)
 AM_CFLAGS += -fvisibility=hidden
 LIBS += $(GLIB_LIBS)
 AM_CFLAGS += $(GTK_CFLAGS)
 AM_CFLAGS += -fvisibility=hidden
 LIBS += $(GLIB_LIBS)
+LIBS += $(THREAD_LIBS)
 LIBS += $(GTK_LIBS) -L${top_builddir}/lttv/modules/gui/lttvwindow/lttvwindow -llttvwindow
 
 libdir = ${lttvplugindir}
 LIBS += $(GTK_LIBS) -L${top_builddir}/lttv/modules/gui/lttvwindow/lttvwindow -llttvwindow
 
 libdir = ${lttvplugindir}
index d09da7e65daa55b06a686edd3f19c24decd76b1a..117cb38e3c9c38ae9de8d71faf7711aae7de54d4 100644 (file)
@@ -88,7 +88,7 @@ typedef struct _DiskPerformanceData {
   
   GArray *disk_array; 
   
   
   GArray *disk_array; 
   
-  LttvHooksById * event_by_id_hooks;
+  LttvHooksByIdChannelArray * event_by_id_hooks;
   
 } DiskPerformanceData;
 
   
 } DiskPerformanceData;
 
@@ -445,17 +445,17 @@ static void request_event(DiskPerformanceData *disk_performance)
        /* Get a trace state */
        ts = (LttvTraceState *)tsc->traces[i];
         
        /* Get a trace state */
        ts = (LttvTraceState *)tsc->traces[i];
         
-       disk_performance->event_by_id_hooks = lttv_hooks_by_id_new();
+       disk_performance->event_by_id_hooks = lttv_hooks_by_id_channel_new();
        /* Register event_by_id_hooks with a callback function */ 
         ret = lttv_trace_find_hook(ts->parent.t,
        /* Register event_by_id_hooks with a callback function */ 
         ret = lttv_trace_find_hook(ts->parent.t,
-               LTT_FACILITY_BLOCK, LTT_EVENT_BLOCK_READ,
+               LTT_CHANNEL_BLOCK, LTT_EVENT_BLOCK_READ,
                0, 0, 0,
                block_read_callback,
                disk_performance,
                &g_array_index(hooks, LttvTraceHook, 0));
         
        ret = lttv_trace_find_hook(ts->parent.t,
                0, 0, 0,
                block_read_callback,
                disk_performance,
                &g_array_index(hooks, LttvTraceHook, 0));
         
        ret = lttv_trace_find_hook(ts->parent.t,
-               LTT_FACILITY_BLOCK, LTT_EVENT_BLOCK_WRITE,
+               LTT_CHANNEL_BLOCK, LTT_EVENT_BLOCK_WRITE,
                0, 0, 0,
                block_write_callback,
                disk_performance,
                0, 0, 0,
                block_write_callback,
                disk_performance,
@@ -470,7 +470,9 @@ static void request_event(DiskPerformanceData *disk_performance)
                for(l=0; l<hook->fac_list->len; l++) 
                {
                        thf = g_array_index(hook->fac_list, LttvTraceHookByFacility*, l); 
                for(l=0; l<hook->fac_list->len; l++) 
                {
                        thf = g_array_index(hook->fac_list, LttvTraceHookByFacility*, l); 
-                       lttv_hooks_add(lttv_hooks_by_id_find(disk_performance->event_by_id_hooks, thf->id),
+                       lttv_hooks_add(lttv_hooks_by_id_channel_find(
+                              disk_performance->event_by_id_hooks,
+                             thf->channel, thf->id),
                                thf->h,
                                disk_performance,
                                LTTV_PRIO_DEFAULT);
                                thf->h,
                                disk_performance,
                                LTTV_PRIO_DEFAULT);
@@ -502,7 +504,7 @@ static void request_event(DiskPerformanceData *disk_performance)
        events_request->before_chunk_trace    = disk_performance->hooks_trace_before;
        events_request->before_chunk_tracefile= NULL;
        events_request->event                   = NULL; 
        events_request->before_chunk_trace    = disk_performance->hooks_trace_before;
        events_request->before_chunk_tracefile= NULL;
        events_request->event                   = NULL; 
-       events_request->event_by_id             = disk_performance->event_by_id_hooks;
+       events_request->event_by_id_channel = disk_performance->event_by_id_hooks;
        events_request->after_chunk_tracefile = NULL;
        events_request->after_chunk_trace     = NULL;
        events_request->after_chunk_traceset    = NULL;
        events_request->after_chunk_tracefile = NULL;
        events_request->after_chunk_trace     = NULL;
        events_request->after_chunk_traceset    = NULL;
index 89819a25633378ecf36e83102445fa603c55b499..79d86fdfb5fd794c20e1ae563411c1da70151b6f 100644 (file)
@@ -6,6 +6,7 @@
 
 AM_CFLAGS = $(GLIB_CFLAGS) 
 AM_CFLAGS += $(GTK_CFLAGS)
 
 AM_CFLAGS = $(GLIB_CFLAGS) 
 AM_CFLAGS += $(GTK_CFLAGS)
+LIBS += $(THREAD_LIBS)
 AM_CFLAGS += -fvisibility=hidden
 LIBS += $(GLIB_LIBS)
 LIBS += $(GTK_LIBS) -L${top_builddir}/lttv/modules/gui/lttvwindow/lttvwindow -llttvwindow
 AM_CFLAGS += -fvisibility=hidden
 LIBS += $(GLIB_LIBS)
 LIBS += $(GTK_LIBS) -L${top_builddir}/lttv/modules/gui/lttvwindow/lttvwindow -llttvwindow
index 3cb65bb925d88b49f6c221ae21c63cfd817d09af..a40c59b2c15a7db724d8e6fbe1bb49806be3e5cb 100644 (file)
@@ -27,6 +27,7 @@ AM_CFLAGS = $(GLIB_CFLAGS)
 AM_CFLAGS += $(GTK_CFLAGS)
 AM_CFLAGS += -fvisibility=hidden
 LIBS += $(GLIB_LIBS)
 AM_CFLAGS += $(GTK_CFLAGS)
 AM_CFLAGS += -fvisibility=hidden
 LIBS += $(GLIB_LIBS)
+LIBS += $(THREAD_LIBS)
 LIBS += $(GTK_LIBS) -L${top_builddir}/lttv/modules/gui/lttvwindow/lttvwindow -llttvwindow
 
 libdir = ${lttvplugindir}
 LIBS += $(GTK_LIBS) -L${top_builddir}/lttv/modules/gui/lttvwindow/lttvwindow -llttvwindow
 
 libdir = ${lttvplugindir}
index f0a61ca4794cd4af941d50037747965a10f70feb..b0781b10bb3dccc31b6ca88c3a799c28a064d0c7 100644 (file)
@@ -302,7 +302,7 @@ void histo_request_event( HistoControlFlowData *histocontrol_flow_data, guint x,
        histo_events_request->before_chunk_trace    = NULL; 
        histo_events_request->before_chunk_tracefile= NULL; 
        histo_events_request->event                 = histo_count_event_hooks; 
        histo_events_request->before_chunk_trace    = NULL; 
        histo_events_request->before_chunk_tracefile= NULL; 
        histo_events_request->event                 = histo_count_event_hooks; 
-       histo_events_request->event_by_id           = NULL;//histo_event_by_id;//NULL; 
+       histo_events_request->event_by_id_channel   = NULL;//histo_event_by_id;//NULL; 
        histo_events_request->after_chunk_tracefile = NULL; 
        histo_events_request->after_chunk_trace     = NULL;   
        histo_events_request->after_chunk_traceset  = histo_after_chunk_traceset;//NULL; 
        histo_events_request->after_chunk_tracefile = NULL; 
        histo_events_request->after_chunk_trace     = NULL;   
        histo_events_request->after_chunk_traceset  = histo_after_chunk_traceset;//NULL; 
index 00c1d8f7319a35e7222d5994c381f2ae1b99bdc0..c564049a249b32d240cb6cd8bb72085b9ec75107 100644 (file)
@@ -27,6 +27,7 @@ AM_CFLAGS = $(GLIB_CFLAGS)
 AM_CFLAGS += $(GTK_CFLAGS)
 AM_CFLAGS += -fvisibility=hidden
 LIBS += $(GLIB_LIBS)
 AM_CFLAGS += $(GTK_CFLAGS)
 AM_CFLAGS += -fvisibility=hidden
 LIBS += $(GLIB_LIBS)
+LIBS += $(THREAD_LIBS)
 LIBS += $(GTK_LIBS) -L${top_builddir}/lttv/modules/gui/lttvwindow/lttvwindow -llttvwindow
 
 libdir = ${lttvplugindir}
 LIBS += $(GTK_LIBS) -L${top_builddir}/lttv/modules/gui/lttvwindow/lttvwindow -llttvwindow
 
 libdir = ${lttvplugindir}
index 608e2b2730e1e0cf1148791278e46567b50126ed..949668bd8160044b79ad2e87c67d8da846d8cc68 100644 (file)
@@ -148,7 +148,7 @@ typedef struct _InterruptEventData {
   LttvHooks  * hooks_trace_after;
   LttvHooks  * hooks_trace_before;
   TimeWindow   time_window;
   LttvHooks  * hooks_trace_after;
   LttvHooks  * hooks_trace_before;
   TimeWindow   time_window;
-  LttvHooksById * event_by_id_hooks;
+  LttvHooksByIdChannelArray * event_by_id_hooks;
   GArray *FirstRequestIrqExit;
   GArray *FirstRequestIrqEntry;
   GArray *SecondRequestIrqEntry;
   GArray *FirstRequestIrqExit;
   GArray *FirstRequestIrqEntry;
   GArray *SecondRequestIrqEntry;
@@ -461,11 +461,11 @@ static void FirstRequest(InterruptEventData *event_data )
        /* Get a trace state */
        ts = (LttvTraceState *)tsc->traces[i];
        /* Create event_by_Id hooks */
        /* Get a trace state */
        ts = (LttvTraceState *)tsc->traces[i];
        /* Create event_by_Id hooks */
-       event_data->event_by_id_hooks = lttv_hooks_by_id_new();
+       event_data->event_by_id_hooks = lttv_hooks_by_id_channel_new();
   
        /*Register event_by_id_hooks with a callback function*/ 
         lttv_trace_find_hook(ts->parent.t,
   
        /*Register event_by_id_hooks with a callback function*/ 
         lttv_trace_find_hook(ts->parent.t,
-               LTT_FACILITY_KERNEL,
+               LTT_CHANNEL_KERNEL,
                 LTT_EVENT_IRQ_ENTRY,
                FIELD_ARRAY(LTT_FIELD_IRQ_ID),
                FirstRequestIrqEntryCallback,
                 LTT_EVENT_IRQ_ENTRY,
                FIELD_ARRAY(LTT_FIELD_IRQ_ID),
                FirstRequestIrqEntryCallback,
@@ -473,7 +473,7 @@ static void FirstRequest(InterruptEventData *event_data )
                &hooks);
         
        lttv_trace_find_hook(ts->parent.t,
                &hooks);
         
        lttv_trace_find_hook(ts->parent.t,
-               LTT_FACILITY_KERNEL,
+               LTT_CHANNEL_KERNEL,
                 LTT_EVENT_IRQ_EXIT,
                NULL,
                FirstRequestIrqExitCallback,
                 LTT_EVENT_IRQ_EXIT,
                NULL,
                FirstRequestIrqExitCallback,
@@ -484,7 +484,9 @@ static void FirstRequest(InterruptEventData *event_data )
        for(k = 0 ; k < hooks->len; k++) 
        { 
                th = &g_array_index(hooks, LttvTraceHook, k); 
        for(k = 0 ; k < hooks->len; k++) 
        { 
                th = &g_array_index(hooks, LttvTraceHook, k); 
-               lttv_hooks_add(lttv_hooks_by_id_find(event_data->event_by_id_hooks, th->id),
+               lttv_hooks_add(lttv_hooks_by_id_channel_find(
+                                              event_data->event_by_id_hooks,
+                                              th->channel, th->id),
                        th->h,
                        th,
                        LTTV_PRIO_DEFAULT);
                        th->h,
                        th,
                        LTTV_PRIO_DEFAULT);
@@ -508,7 +510,7 @@ static void FirstRequest(InterruptEventData *event_data )
        events_request->before_chunk_trace    = event_data->hooks_trace_before; 
        events_request->before_chunk_tracefile= NULL; 
        events_request->event                   = NULL;  
        events_request->before_chunk_trace    = event_data->hooks_trace_before; 
        events_request->before_chunk_tracefile= NULL; 
        events_request->event                   = NULL;  
-       events_request->event_by_id             = event_data->event_by_id_hooks; 
+       events_request->event_by_id_channel     = event_data->event_by_id_hooks; 
        events_request->after_chunk_tracefile = NULL; 
        events_request->after_chunk_trace     = NULL;    
        events_request->after_chunk_traceset    = NULL; 
        events_request->after_chunk_tracefile = NULL; 
        events_request->after_chunk_trace     = NULL;    
        events_request->after_chunk_traceset    = NULL; 
@@ -721,11 +723,11 @@ static gboolean SecondRequest(void *hook_data, void *call_data)
        /* Get a trace state */
        ts = (LttvTraceState *)tsc->traces[i];
        /* Create event_by_Id hooks */
        /* Get a trace state */
        ts = (LttvTraceState *)tsc->traces[i];
        /* Create event_by_Id hooks */
-       event_data->event_by_id_hooks = lttv_hooks_by_id_new();
+       event_data->event_by_id_hooks = lttv_hooks_by_id_channel_new();
   
        /*Register event_by_id_hooks with a callback function*/ 
           ret = lttv_trace_find_hook(ts->parent.t,
   
        /*Register event_by_id_hooks with a callback function*/ 
           ret = lttv_trace_find_hook(ts->parent.t,
-               LTT_FACILITY_KERNEL,
+               LTT_CHANNEL_KERNEL,
                LTT_EVENT_IRQ_ENTRY,
                FIELD_ARRAY(LTT_FIELD_IRQ_ID),
                SecondRequestIrqEntryCallback,
                LTT_EVENT_IRQ_ENTRY,
                FIELD_ARRAY(LTT_FIELD_IRQ_ID),
                SecondRequestIrqEntryCallback,
@@ -733,7 +735,7 @@ static gboolean SecondRequest(void *hook_data, void *call_data)
                &hooks);
         
         ret = lttv_trace_find_hook(ts->parent.t,
                &hooks);
         
         ret = lttv_trace_find_hook(ts->parent.t,
-               LTT_FACILITY_KERNEL,
+               LTT_CHANNEL_KERNEL,
                LTT_EVENT_IRQ_EXIT,
                NULL,
                SecondRequestIrqExitCallback,
                LTT_EVENT_IRQ_EXIT,
                NULL,
                SecondRequestIrqExitCallback,
@@ -746,7 +748,9 @@ static gboolean SecondRequest(void *hook_data, void *call_data)
        for(k = 0 ; k < hooks->len; k++) 
        { 
                th = &g_array_index(hooks, LttvTraceHook, k); 
        for(k = 0 ; k < hooks->len; k++) 
        { 
                th = &g_array_index(hooks, LttvTraceHook, k); 
-               lttv_hooks_add(lttv_hooks_by_id_find(event_data->event_by_id_hooks, th->id),
+               lttv_hooks_add(lttv_hooks_by_id_channel_find(
+                           event_data->event_by_id_hooks,
+                           th->channel, th->id),
                        th->h,
                        th,
                        LTTV_PRIO_DEFAULT);
                        th->h,
                        th,
                        LTTV_PRIO_DEFAULT);
@@ -770,7 +774,7 @@ static gboolean SecondRequest(void *hook_data, void *call_data)
        events_request->before_chunk_trace    = NULL; 
        events_request->before_chunk_tracefile= NULL; 
        events_request->event                   = NULL;  
        events_request->before_chunk_trace    = NULL; 
        events_request->before_chunk_tracefile= NULL; 
        events_request->event                   = NULL;  
-       events_request->event_by_id             = event_data->event_by_id_hooks; 
+       events_request->event_by_id_channel     = event_data->event_by_id_hooks; 
        events_request->after_chunk_tracefile = NULL; 
        events_request->after_chunk_trace     = NULL;    
        events_request->after_chunk_traceset    = NULL; 
        events_request->after_chunk_tracefile = NULL; 
        events_request->after_chunk_trace     = NULL;    
        events_request->after_chunk_traceset    = NULL; 
index 243bd4f7a19d2dce05ae285887aa4e0ea33db9ce..be552644bccfd4759af3d1a3f14c0c103d31136f 100644 (file)
@@ -4,6 +4,7 @@ AM_CFLAGS = $(GLIB_CFLAGS)
 AM_CFLAGS += $(GTK_CFLAGS)
 AM_CFLAGS += -fvisibility=hidden
 LIBS += $(GLIB_LIBS)
 AM_CFLAGS += $(GTK_CFLAGS)
 AM_CFLAGS += -fvisibility=hidden
 LIBS += $(GLIB_LIBS)
+LIBS += $(THREAD_LIBS)
 LIBS += $(GTK_LIBS)
 
 INCLUDES = \
 LIBS += $(GTK_LIBS)
 
 INCLUDES = \
index 817044b89539fa1d7c069c31ca157960c18a7221..97e7556126a6cfa2c44b12e1101ebc9ff25e10bb 100644 (file)
@@ -1229,7 +1229,7 @@ gboolean lttvwindow_process_pending_requests(Tab *tab)
                 events_request->before_chunk_trace,
                 events_request->before_chunk_tracefile,
                 events_request->event,
                 events_request->before_chunk_trace,
                 events_request->before_chunk_tracefile,
                 events_request->event,
-                events_request->event_by_id);
+                events_request->event_by_id_channel);
           else {
             guint nb_trace = lttv_traceset_number(tsc->ts);
             g_assert((guint)events_request->trace < nb_trace &&
           else {
             guint nb_trace = lttv_traceset_number(tsc->ts);
             g_assert((guint)events_request->trace < nb_trace &&
@@ -1242,7 +1242,7 @@ gboolean lttvwindow_process_pending_requests(Tab *tab)
                                          events_request->before_chunk_trace,
                                          events_request->before_chunk_tracefile,
                                          events_request->event,
                                          events_request->before_chunk_trace,
                                          events_request->before_chunk_tracefile,
                                          events_request->event,
-                                         events_request->event_by_id);
+                                         events_request->event_by_id_channel);
           }
         }
       }
           }
         }
       }
@@ -1266,7 +1266,7 @@ gboolean lttvwindow_process_pending_requests(Tab *tab)
                 events_request->before_chunk_trace,
                 events_request->before_chunk_tracefile,
                 events_request->event,
                 events_request->before_chunk_trace,
                 events_request->before_chunk_tracefile,
                 events_request->event,
-                events_request->event_by_id);
+                events_request->event_by_id_channel);
           else {
             guint nb_trace = lttv_traceset_number(tsc->ts);
             g_assert((guint)events_request->trace < nb_trace &&
           else {
             guint nb_trace = lttv_traceset_number(tsc->ts);
             g_assert((guint)events_request->trace < nb_trace &&
@@ -1279,7 +1279,7 @@ gboolean lttvwindow_process_pending_requests(Tab *tab)
                                          events_request->before_chunk_trace,
                                          events_request->before_chunk_tracefile,
                                          events_request->event,
                                          events_request->before_chunk_trace,
                                          events_request->before_chunk_tracefile,
                                          events_request->event,
-                                         events_request->event_by_id);
+                                         events_request->event_by_id_channel);
           }
 
           iter = g_slist_next(iter);
           }
 
           iter = g_slist_next(iter);
@@ -1330,7 +1330,7 @@ gboolean lttvwindow_process_pending_requests(Tab *tab)
                   events_request->before_chunk_trace,
                   events_request->before_chunk_tracefile,
                   events_request->event,
                   events_request->before_chunk_trace,
                   events_request->before_chunk_tracefile,
                   events_request->event,
-                  events_request->event_by_id);
+                  events_request->event_by_id_channel);
             else {
               guint nb_trace = lttv_traceset_number(tsc->ts);
               g_assert((guint)events_request->trace < nb_trace &&
             else {
               guint nb_trace = lttv_traceset_number(tsc->ts);
               g_assert((guint)events_request->trace < nb_trace &&
@@ -1343,7 +1343,7 @@ gboolean lttvwindow_process_pending_requests(Tab *tab)
                                            events_request->before_chunk_trace,
                                            events_request->before_chunk_tracefile,
                                            events_request->event,
                                            events_request->before_chunk_trace,
                                            events_request->before_chunk_tracefile,
                                            events_request->event,
-                                           events_request->event_by_id);
+                                           events_request->event_by_id_channel);
           }
 
 
           }
 
 
@@ -1483,7 +1483,7 @@ gboolean lttvwindow_process_pending_requests(Tab *tab)
                                          events_request->after_chunk_trace,
                                          events_request->after_chunk_tracefile,
                                          events_request->event,
                                          events_request->after_chunk_trace,
                                          events_request->after_chunk_tracefile,
                                          events_request->event,
-                                         events_request->event_by_id);
+                                         events_request->event_by_id_channel);
 
           else {
             guint nb_trace = lttv_traceset_number(tsc->ts);
 
           else {
             guint nb_trace = lttv_traceset_number(tsc->ts);
@@ -1495,7 +1495,7 @@ gboolean lttvwindow_process_pending_requests(Tab *tab)
                                          events_request->after_chunk_trace,
                                          events_request->after_chunk_tracefile,
                                          events_request->event,
                                          events_request->after_chunk_trace,
                                          events_request->after_chunk_tracefile,
                                          events_request->event,
-                                         events_request->event_by_id);
+                                         events_request->event_by_id_channel);
             lttv_hooks_call(events_request->after_chunk_traceset, tsc);
 
 
             lttv_hooks_call(events_request->after_chunk_traceset, tsc);
 
 
@@ -1541,7 +1541,7 @@ gboolean lttvwindow_process_pending_requests(Tab *tab)
                                          events_request->after_chunk_trace,
                                          events_request->after_chunk_tracefile,
                                          events_request->event,
                                          events_request->after_chunk_trace,
                                          events_request->after_chunk_tracefile,
                                          events_request->event,
-                                         events_request->event_by_id);
+                                         events_request->event_by_id_channel);
 
           else {
             guint nb_trace = lttv_traceset_number(tsc->ts);
 
           else {
             guint nb_trace = lttv_traceset_number(tsc->ts);
@@ -1553,7 +1553,7 @@ gboolean lttvwindow_process_pending_requests(Tab *tab)
                                          events_request->after_chunk_trace,
                                          events_request->after_chunk_tracefile,
                                          events_request->event,
                                          events_request->after_chunk_trace,
                                          events_request->after_chunk_tracefile,
                                          events_request->event,
-                                         events_request->event_by_id);
+                                         events_request->event_by_id_channel);
 
             lttv_hooks_call(events_request->after_chunk_traceset, tsc);
           }
 
             lttv_hooks_call(events_request->after_chunk_traceset, tsc);
           }
index c964481db12e80244a2c56523bc765c002ea72b5..ffbf291772ea40df03f58c6aa85ca0aee889b113 100644 (file)
@@ -69,7 +69,7 @@ __EXPORT LttvTraceInfo
        LTTV_BEFORE_REQUEST,
        LTTV_AFTER_REQUEST,
        LTTV_EVENT_HOOK,
        LTTV_BEFORE_REQUEST,
        LTTV_AFTER_REQUEST,
        LTTV_EVENT_HOOK,
-       LTTV_EVENT_HOOK_BY_ID,
+       LTTV_EVENT_HOOK_BY_ID_CHANNEL,
        LTTV_HOOK_ADDER,
        LTTV_HOOK_REMOVER,
        LTTV_IN_PROGRESS,
        LTTV_HOOK_ADDER,
        LTTV_HOOK_REMOVER,
        LTTV_IN_PROGRESS,
@@ -159,7 +159,7 @@ static void init() {
   LTTV_BEFORE_REQUEST = g_quark_from_string("before_request");
   LTTV_AFTER_REQUEST = g_quark_from_string("after_request");
   LTTV_EVENT_HOOK = g_quark_from_string("event_hook");
   LTTV_BEFORE_REQUEST = g_quark_from_string("before_request");
   LTTV_AFTER_REQUEST = g_quark_from_string("after_request");
   LTTV_EVENT_HOOK = g_quark_from_string("event_hook");
-  LTTV_EVENT_HOOK_BY_ID = g_quark_from_string("event_hook_by_id");
+  LTTV_EVENT_HOOK_BY_ID_CHANNEL = g_quark_from_string("event_hook_by_id_channel");
   LTTV_HOOK_ADDER = g_quark_from_string("hook_adder");
   LTTV_HOOK_REMOVER = g_quark_from_string("hook_remover");
   LTTV_IN_PROGRESS = g_quark_from_string("in_progress");
   LTTV_HOOK_ADDER = g_quark_from_string("hook_adder");
   LTTV_HOOK_REMOVER = g_quark_from_string("hook_remover");
   LTTV_IN_PROGRESS = g_quark_from_string("in_progress");
index 3dea5a927257b9a9ebc2b12eadad88c7e93f3b5d..529e4ac6c21aed90cb33f611b543bd69b7dccd02 100644 (file)
@@ -1126,8 +1126,8 @@ void events_request_free(EventsRequest *events_request)
        lttv_hooks_destroy(events_request->before_chunk_tracefile);
   if(events_request->event != NULL)
        lttv_hooks_destroy(events_request->event);
        lttv_hooks_destroy(events_request->before_chunk_tracefile);
   if(events_request->event != NULL)
        lttv_hooks_destroy(events_request->event);
-  if(events_request->event_by_id != NULL)
-       lttv_hooks_by_id_destroy(events_request->event_by_id);
+  if(events_request->event_by_id_channel != NULL)
+       lttv_hooks_by_id_channel_destroy(events_request->event_by_id_channel);
   if(events_request->after_chunk_tracefile != NULL)
        lttv_hooks_destroy(events_request->after_chunk_tracefile);
   if(events_request->after_chunk_trace != NULL)
   if(events_request->after_chunk_tracefile != NULL)
        lttv_hooks_destroy(events_request->after_chunk_tracefile);
   if(events_request->after_chunk_trace != NULL)
index 3078ed15a368f906e8fe3d67a0dca5a9db5cb053..df04a3f00cae399331af4a1dcf41ab6d5eacde5e 100644 (file)
@@ -137,7 +137,7 @@ EventsRequest consists in
 - a stop_flag, ending the read process when set to TRUE
 - a end timestamp and/or position and/or number of events to read
 - hook lists to call for traceset/trace/tracefile begin and end, and for each
 - a stop_flag, ending the read process when set to TRUE
 - a end timestamp and/or position and/or number of events to read
 - hook lists to call for traceset/trace/tracefile begin and end, and for each
-  event (event hooks and event_by_id hooks).
+  event (event hooks and event_by_id_channel hooks).
   
 The main window will deliver events for every EventRequests it has
 pending through an algorithm that guarantee that all events requested,
   
 The main window will deliver events for every EventRequests it has
 pending through an algorithm that guarantee that all events requested,
@@ -665,7 +665,7 @@ typedef struct _EventsRequest {
   LttvHooks                   *before_chunk_trace;    /* Unset : NULL       */
   LttvHooks                   *before_chunk_tracefile;/* Unset : NULL       */
   LttvHooks                   *event;           /* Unset : NULL             */
   LttvHooks                   *before_chunk_trace;    /* Unset : NULL       */
   LttvHooks                   *before_chunk_tracefile;/* Unset : NULL       */
   LttvHooks                   *event;           /* Unset : NULL             */
-  LttvHooksById               *event_by_id;     /* Unset : NULL             */
+  LttvHooksByIdChannelArray   *event_by_id_channel;/* Unset : NULL          */
   LttvHooks                   *after_chunk_tracefile; /* Unset : NULL       */
   LttvHooks                   *after_chunk_trace;     /* Unset : NULL       */
   LttvHooks                   *after_chunk_traceset;  /* Unset : NULL       */
   LttvHooks                   *after_chunk_tracefile; /* Unset : NULL       */
   LttvHooks                   *after_chunk_trace;     /* Unset : NULL       */
   LttvHooks                   *after_chunk_traceset;  /* Unset : NULL       */
index caa84cee813fe146f03e45f6433118f794f46ddf..375eb689e97133977b988261624c79c2b91fbd7f 100644 (file)
@@ -759,7 +759,7 @@ void lttvwindowtraces_call_before_chunk(LttvAttributeName module_name,
   LttvHooks *before_chunk_trace=NULL;
   LttvHooks *before_chunk_tracefile=NULL;
   LttvHooks *event_hook=NULL;
   LttvHooks *before_chunk_trace=NULL;
   LttvHooks *before_chunk_tracefile=NULL;
   LttvHooks *event_hook=NULL;
-  LttvHooksById *event_hook_by_id=NULL;
+  LttvHooksByIdChannelArray *event_hook_by_id_channel=NULL;
 
  
   module_attribute =
 
  
   module_attribute =
@@ -802,10 +802,10 @@ void lttvwindowtraces_call_before_chunk(LttvAttributeName module_name,
   }
 
   type = lttv_iattribute_get_by_name(LTTV_IATTRIBUTE(module_attribute),
   }
 
   type = lttv_iattribute_get_by_name(LTTV_IATTRIBUTE(module_attribute),
-                                     LTTV_EVENT_HOOK_BY_ID,
+                                     LTTV_EVENT_HOOK_BY_ID_CHANNEL,
                                      &value);
   if(type == LTTV_POINTER) {
                                      &value);
   if(type == LTTV_POINTER) {
-    event_hook_by_id = (LttvHooksById*)*(value.v_pointer);
+    event_hook_by_id_channel = (LttvHooksById*)*(value.v_pointer);
   }
 
   lttv_process_traceset_begin(tsc,
   }
 
   lttv_process_traceset_begin(tsc,
@@ -813,7 +813,7 @@ void lttvwindowtraces_call_before_chunk(LttvAttributeName module_name,
                               before_chunk_trace,
                               before_chunk_tracefile,
                               event_hook,
                               before_chunk_trace,
                               before_chunk_tracefile,
                               event_hook,
-                              event_hook_by_id);
+                              event_hook_by_id_channel);
 }
 
 
 }
 
 
@@ -829,7 +829,7 @@ void lttvwindowtraces_call_after_chunk(LttvAttributeName module_name,
   LttvHooks *after_chunk_trace=NULL;
   LttvHooks *after_chunk_tracefile=NULL;
   LttvHooks *event_hook=NULL;
   LttvHooks *after_chunk_trace=NULL;
   LttvHooks *after_chunk_tracefile=NULL;
   LttvHooks *event_hook=NULL;
-  LttvHooksById *event_hook_by_id=NULL;
+  LttvHooksById *event_hook_by_id_channel=NULL;
  
   module_attribute =
       LTTV_ATTRIBUTE(lttv_iattribute_find_subdir(LTTV_IATTRIBUTE(g_attribute),
  
   module_attribute =
       LTTV_ATTRIBUTE(lttv_iattribute_find_subdir(LTTV_IATTRIBUTE(g_attribute),
@@ -871,10 +871,10 @@ void lttvwindowtraces_call_after_chunk(LttvAttributeName module_name,
   }
 
   type = lttv_iattribute_get_by_name(LTTV_IATTRIBUTE(module_attribute),
   }
 
   type = lttv_iattribute_get_by_name(LTTV_IATTRIBUTE(module_attribute),
-                                     LTTV_EVENT_HOOK_BY_ID,
+                                     LTTV_EVENT_HOOK_BY_ID_CHANNEL,
                                      &value);
   if(type == LTTV_POINTER) {
                                      &value);
   if(type == LTTV_POINTER) {
-    event_hook_by_id = (LttvHooksById*)*(value.v_pointer);
+    event_hook_by_id_channel = (LttvHooksById*)*(value.v_pointer);
   }
   
   lttv_process_traceset_end(tsc,
   }
   
   lttv_process_traceset_end(tsc,
@@ -882,7 +882,7 @@ void lttvwindowtraces_call_after_chunk(LttvAttributeName module_name,
                             after_chunk_trace,
                             after_chunk_tracefile,
                             event_hook,
                             after_chunk_trace,
                             after_chunk_tracefile,
                             event_hook,
-                            event_hook_by_id);
+                            event_hook_by_id_channel);
 
 }
 
 
 }
 
@@ -1500,18 +1500,18 @@ gboolean lttvwindowtraces_process_pending_requests(LttvTrace *trace)
  *                    information.
  */
 void lttvwindowtraces_register_computation_hooks(LttvAttributeName module_name,
  *                    information.
  */
 void lttvwindowtraces_register_computation_hooks(LttvAttributeName module_name,
-                                          LttvHooks *before_chunk_traceset,
-                                          LttvHooks *before_chunk_trace,
-                                          LttvHooks *before_chunk_tracefile,
-                                          LttvHooks *after_chunk_traceset,
-                                          LttvHooks *after_chunk_trace,
-                                          LttvHooks *after_chunk_tracefile,
-                                          LttvHooks *before_request,
-                                          LttvHooks *after_request,
-                                          LttvHooks *event_hook,
-                                          LttvHooksById *event_hook_by_id,
-                                          LttvHooks *hook_adder,
-                                          LttvHooks *hook_remover)
+                                        LttvHooks *before_chunk_traceset,
+                                        LttvHooks *before_chunk_trace,
+                                        LttvHooks *before_chunk_tracefile,
+                                        LttvHooks *after_chunk_traceset,
+                                        LttvHooks *after_chunk_trace,
+                                        LttvHooks *after_chunk_tracefile,
+                                        LttvHooks *before_request,
+                                        LttvHooks *after_request,
+                                        LttvHooks *event_hook,
+                                        LttvHooksById *event_hook_by_id_channel,
+                                        LttvHooks *hook_adder,
+                                        LttvHooks *hook_remover)
 {
   LttvAttribute *g_attribute = lttv_global_attributes();
   LttvAttribute *attribute;
 {
   LttvAttribute *g_attribute = lttv_global_attributes();
   LttvAttribute *attribute;
@@ -1593,11 +1593,11 @@ void lttvwindowtraces_register_computation_hooks(LttvAttributeName module_name,
   *(value.v_pointer) = event_hook;
 
   result = lttv_iattribute_find(LTTV_IATTRIBUTE(attribute),
   *(value.v_pointer) = event_hook;
 
   result = lttv_iattribute_find(LTTV_IATTRIBUTE(attribute),
-                                LTTV_EVENT_HOOK_BY_ID,
+                                LTTV_EVENT_HOOK_BY_ID_CHANNEL,
                                 LTTV_POINTER,
                                 &value);
   g_assert(result);
                                 LTTV_POINTER,
                                 &value);
   g_assert(result);
-  *(value.v_pointer) = event_hook_by_id;
+  *(value.v_pointer) = event_hook_by_id_channel;
 
   result = lttv_iattribute_find(LTTV_IATTRIBUTE(attribute),
                                 LTTV_HOOK_ADDER,
 
   result = lttv_iattribute_find(LTTV_IATTRIBUTE(attribute),
                                 LTTV_HOOK_ADDER,
@@ -1827,14 +1827,14 @@ void lttvwindowtraces_unregister_computation_hooks
     lttv_hooks_destroy(event_hook);
  
   result = lttv_iattribute_find(LTTV_IATTRIBUTE(attribute),
     lttv_hooks_destroy(event_hook);
  
   result = lttv_iattribute_find(LTTV_IATTRIBUTE(attribute),
-                                LTTV_EVENT_HOOK_BY_ID,
+                                LTTV_EVENT_HOOK_BY_ID_CHANNEL,
                                 LTTV_POINTER,
                                 &value);
   g_assert(result);
 
                                 LTTV_POINTER,
                                 &value);
   g_assert(result);
 
-  LttvHooksById *event_hook_by_id = (LttvHooksById*)*(value.v_pointer);
-  if(event_hook_by_id != NULL)
-    lttv_hooks_by_id_destroy(event_hook_by_id);
+  LttvHooksById *event_hook_by_id_channel = (LttvHooksById*)*(value.v_pointer);
+  if(event_hook_by_id_channel != NULL)
+    lttv_hooks_by_id_channel_destroy(event_hook_by_id_channel);
  
   result = lttv_iattribute_find(LTTV_IATTRIBUTE(attribute),
                                 LTTV_HOOK_ADDER,
  
   result = lttv_iattribute_find(LTTV_IATTRIBUTE(attribute),
                                 LTTV_HOOK_ADDER,
@@ -1858,7 +1858,7 @@ void lttvwindowtraces_unregister_computation_hooks
  
 
   lttv_iattribute_remove_by_name(LTTV_IATTRIBUTE(attribute),
  
 
   lttv_iattribute_remove_by_name(LTTV_IATTRIBUTE(attribute),
-                                     LTTV_EVENT_HOOK_BY_ID);
+                                     LTTV_EVENT_HOOK_BY_ID_CHANNEL);
   lttv_iattribute_remove_by_name(LTTV_IATTRIBUTE(attribute),
                                      LTTV_EVENT_HOOK);
 
   lttv_iattribute_remove_by_name(LTTV_IATTRIBUTE(attribute),
                                      LTTV_EVENT_HOOK);
 
index 2345030896de616fda79aef715733e7235b6dcf7..45ad7e228c53a68db3379e87fb0025e3d59e4c52 100644 (file)
@@ -92,7 +92,7 @@ extern LttvTraceInfo LTTV_TRACES,
               LTTV_BEFORE_REQUEST,
               LTTV_AFTER_REQUEST,
               LTTV_EVENT_HOOK,
               LTTV_BEFORE_REQUEST,
               LTTV_AFTER_REQUEST,
               LTTV_EVENT_HOOK,
-              LTTV_EVENT_HOOK_BY_ID,
+              LTTV_EVENT_HOOK_BY_ID_CHANNEL,
               LTTV_HOOK_ADDER,
               LTTV_HOOK_REMOVER,
               LTTV_IN_PROGRESS,
               LTTV_HOOK_ADDER,
               LTTV_HOOK_REMOVER,
               LTTV_IN_PROGRESS,
index 52bf12cba41103946d839fc59723029fce99aaf7..eea691a8368a60edd7b9bd9eaebd2ac89bad6c3e 100644 (file)
@@ -26,6 +26,7 @@ AM_CFLAGS = $(GLIB_CFLAGS)
 AM_CFLAGS += $(GTK_CFLAGS)
 AM_CFLAGS += -fvisibility=hidden
 LIBS += $(GLIB_LIBS)
 AM_CFLAGS += $(GTK_CFLAGS)
 AM_CFLAGS += -fvisibility=hidden
 LIBS += $(GLIB_LIBS)
+LIBS += $(THREAD_LIBS)
 LIBS += $(GTK_LIBS) -L${top_builddir}/lttv/modules/gui/lttvwindow/lttvwindow -llttvwindow
 
 libdir = ${lttvplugindir}
 LIBS += $(GTK_LIBS) -L${top_builddir}/lttv/modules/gui/lttvwindow/lttvwindow -llttvwindow
 
 libdir = ${lttvplugindir}
index 3af879f76ca64af26c415cde405c7047931e32e1..2959cac79fc7a580d4c2f288f7fd29b5dc2ad602 100644 (file)
@@ -210,7 +210,8 @@ void drawing_data_request(Drawing_t *drawing,
       EventsRequest *events_request = g_new(EventsRequest, 1);
       // Create the hooks
       //LttvHooks *event = lttv_hooks_new();
       EventsRequest *events_request = g_new(EventsRequest, 1);
       // Create the hooks
       //LttvHooks *event = lttv_hooks_new();
-      LttvHooksById *event_by_id = lttv_hooks_by_id_new();
+      LttvHooksByIdChannelArray *event_by_id_channel =
+        lttv_hooks_by_id_channel_new();
       LttvHooks *before_chunk_traceset = lttv_hooks_new();
       LttvHooks *after_chunk_traceset = lttv_hooks_new();
       LttvHooks *before_request_hook = lttv_hooks_new();
       LttvHooks *before_chunk_traceset = lttv_hooks_new();
       LttvHooks *after_chunk_traceset = lttv_hooks_new();
       LttvHooks *before_request_hook = lttv_hooks_new();
@@ -263,7 +264,7 @@ void drawing_data_request(Drawing_t *drawing,
 //          &hooks);
 //
       lttv_trace_find_hook(ts->parent.t,
 //          &hooks);
 //
       lttv_trace_find_hook(ts->parent.t,
-          LTT_FACILITY_KERNEL,
+          LTT_CHANNEL_KERNEL,
           LTT_EVENT_TRAP_ENTRY,
           FIELD_ARRAY(LTT_FIELD_TRAP_ID),
           before_execmode_hook,
           LTT_EVENT_TRAP_ENTRY,
           FIELD_ARRAY(LTT_FIELD_TRAP_ID),
           before_execmode_hook,
@@ -271,7 +272,7 @@ void drawing_data_request(Drawing_t *drawing,
           &hooks);
 
       lttv_trace_find_hook(ts->parent.t,
           &hooks);
 
       lttv_trace_find_hook(ts->parent.t,
-          LTT_FACILITY_KERNEL,
+          LTT_CHANNEL_KERNEL,
           LTT_EVENT_TRAP_EXIT,
           NULL,
           before_execmode_hook,
           LTT_EVENT_TRAP_EXIT,
           NULL,
           before_execmode_hook,
@@ -279,7 +280,7 @@ void drawing_data_request(Drawing_t *drawing,
           &hooks);
 
       lttv_trace_find_hook(ts->parent.t,
           &hooks);
 
       lttv_trace_find_hook(ts->parent.t,
-          LTT_FACILITY_KERNEL,
+          LTT_CHANNEL_KERNEL,
           LTT_EVENT_IRQ_ENTRY,
           FIELD_ARRAY(LTT_FIELD_IRQ_ID),
           before_execmode_hook,
           LTT_EVENT_IRQ_ENTRY,
           FIELD_ARRAY(LTT_FIELD_IRQ_ID),
           before_execmode_hook,
@@ -287,7 +288,7 @@ void drawing_data_request(Drawing_t *drawing,
           &hooks);
 
       lttv_trace_find_hook(ts->parent.t,
           &hooks);
 
       lttv_trace_find_hook(ts->parent.t,
-          LTT_FACILITY_KERNEL,
+          LTT_CHANNEL_KERNEL,
           LTT_EVENT_IRQ_EXIT,
           NULL,
           before_execmode_hook,
           LTT_EVENT_IRQ_EXIT,
           NULL,
           before_execmode_hook,
@@ -295,7 +296,7 @@ void drawing_data_request(Drawing_t *drawing,
           &hooks);
 
       lttv_trace_find_hook(ts->parent.t,
           &hooks);
 
       lttv_trace_find_hook(ts->parent.t,
-          LTT_FACILITY_KERNEL,
+          LTT_CHANNEL_KERNEL,
           LTT_EVENT_SOFT_IRQ_RAISE,
           FIELD_ARRAY(LTT_FIELD_SOFT_IRQ_ID),
           before_execmode_hook,
           LTT_EVENT_SOFT_IRQ_RAISE,
           FIELD_ARRAY(LTT_FIELD_SOFT_IRQ_ID),
           before_execmode_hook,
@@ -303,7 +304,7 @@ void drawing_data_request(Drawing_t *drawing,
           &hooks);
 
       lttv_trace_find_hook(ts->parent.t,
           &hooks);
 
       lttv_trace_find_hook(ts->parent.t,
-          LTT_FACILITY_KERNEL,
+          LTT_CHANNEL_KERNEL,
           LTT_EVENT_SOFT_IRQ_ENTRY,
           FIELD_ARRAY(LTT_FIELD_SOFT_IRQ_ID),
           before_execmode_hook,
           LTT_EVENT_SOFT_IRQ_ENTRY,
           FIELD_ARRAY(LTT_FIELD_SOFT_IRQ_ID),
           before_execmode_hook,
@@ -311,7 +312,7 @@ void drawing_data_request(Drawing_t *drawing,
           &hooks);
 
       lttv_trace_find_hook(ts->parent.t,
           &hooks);
 
       lttv_trace_find_hook(ts->parent.t,
-          LTT_FACILITY_KERNEL,
+          LTT_CHANNEL_KERNEL,
           LTT_EVENT_SOFT_IRQ_EXIT,
           NULL,
           before_execmode_hook,
           LTT_EVENT_SOFT_IRQ_EXIT,
           NULL,
           before_execmode_hook,
@@ -320,7 +321,7 @@ void drawing_data_request(Drawing_t *drawing,
 
 
       lttv_trace_find_hook(ts->parent.t,
 
 
       lttv_trace_find_hook(ts->parent.t,
-          LTT_FACILITY_KERNEL,
+          LTT_CHANNEL_KERNEL,
           LTT_EVENT_SCHED_SCHEDULE,
           FIELD_ARRAY(LTT_FIELD_PREV_PID, LTT_FIELD_NEXT_PID, LTT_FIELD_PREV_STATE),
           before_schedchange_hook,
           LTT_EVENT_SCHED_SCHEDULE,
           FIELD_ARRAY(LTT_FIELD_PREV_PID, LTT_FIELD_NEXT_PID, LTT_FIELD_PREV_STATE),
           before_schedchange_hook,
@@ -328,7 +329,7 @@ void drawing_data_request(Drawing_t *drawing,
           &hooks);
 
 //      lttv_trace_find_hook(ts->parent.t,
           &hooks);
 
 //      lttv_trace_find_hook(ts->parent.t,
-//          LTT_FACILITY_KERNEL,
+//          LTT_CHANNEL_KERNEL,
 //          LTT_EVENT_PROCESS_EXIT,
 //          FIELD_ARRAY(LTT_FIELD_PID),
 //          before_process_exit_hook,
 //          LTT_EVENT_PROCESS_EXIT,
 //          FIELD_ARRAY(LTT_FIELD_PID),
 //          before_process_exit_hook,
@@ -336,7 +337,7 @@ void drawing_data_request(Drawing_t *drawing,
 //          &hooks);
 //      
 //      lttv_trace_find_hook(ts->parent.t,
 //          &hooks);
 //      
 //      lttv_trace_find_hook(ts->parent.t,
-//          LTT_FACILITY_KERNEL,
+//          LTT_CHANNEL_KERNEL,
 //          LTT_EVENT_PROCESS_FREE,
 //          FIELD_ARRAY(LTT_FIELD_PID),
 //          before_process_release_hook,
 //          LTT_EVENT_PROCESS_FREE,
 //          FIELD_ARRAY(LTT_FIELD_PID),
 //          before_process_release_hook,
@@ -352,7 +353,7 @@ void drawing_data_request(Drawing_t *drawing,
 //          &hooks);
 
       lttv_trace_find_hook(ts->parent.t,
 //          &hooks);
 
       lttv_trace_find_hook(ts->parent.t,
-          LTT_FACILITY_KERNEL,
+          LTT_CHANNEL_BLOCK,
           LTT_EVENT_REQUEST_ISSUE,
           FIELD_ARRAY(LTT_FIELD_MAJOR, LTT_FIELD_MINOR, LTT_FIELD_OPERATION),
           before_bdev_event_hook,
           LTT_EVENT_REQUEST_ISSUE,
           FIELD_ARRAY(LTT_FIELD_MAJOR, LTT_FIELD_MINOR, LTT_FIELD_OPERATION),
           before_bdev_event_hook,
@@ -360,7 +361,7 @@ void drawing_data_request(Drawing_t *drawing,
           &hooks);
 
       lttv_trace_find_hook(ts->parent.t,
           &hooks);
 
       lttv_trace_find_hook(ts->parent.t,
-          LTT_FACILITY_KERNEL,
+          LTT_CHANNEL_BLOCK,
           LTT_EVENT_REQUEST_COMPLETE,
           FIELD_ARRAY(LTT_FIELD_MAJOR, LTT_FIELD_MINOR, LTT_FIELD_OPERATION),
           before_bdev_event_hook,
           LTT_EVENT_REQUEST_COMPLETE,
           FIELD_ARRAY(LTT_FIELD_MAJOR, LTT_FIELD_MINOR, LTT_FIELD_OPERATION),
           before_bdev_event_hook,
@@ -371,7 +372,7 @@ void drawing_data_request(Drawing_t *drawing,
       first_after = hooks->len;
       
       lttv_trace_find_hook(ts->parent.t,
       first_after = hooks->len;
       
       lttv_trace_find_hook(ts->parent.t,
-          LTT_FACILITY_KERNEL,
+          LTT_CHANNEL_KERNEL,
           LTT_EVENT_SCHED_SCHEDULE,
           FIELD_ARRAY(LTT_FIELD_PREV_PID, LTT_FIELD_NEXT_PID, LTT_FIELD_PREV_STATE),
           after_schedchange_hook,
           LTT_EVENT_SCHED_SCHEDULE,
           FIELD_ARRAY(LTT_FIELD_PREV_PID, LTT_FIELD_NEXT_PID, LTT_FIELD_PREV_STATE),
           after_schedchange_hook,
@@ -379,7 +380,7 @@ void drawing_data_request(Drawing_t *drawing,
           &hooks);
 
 //      lttv_trace_find_hook(ts->parent.t,
           &hooks);
 
 //      lttv_trace_find_hook(ts->parent.t,
-//          LTT_FACILITY_KERNEL,
+//          LTT_CHANNEL_KERNEL,
 //          LTT_EVENT_PROCESS_FORK,
 //          FIELD_ARRAY(LTT_FIELD_PARENT_PID, LTT_FIELD_CHILD_PID),
 //          after_process_fork_hook,
 //          LTT_EVENT_PROCESS_FORK,
 //          FIELD_ARRAY(LTT_FIELD_PARENT_PID, LTT_FIELD_CHILD_PID),
 //          after_process_fork_hook,
@@ -387,7 +388,7 @@ void drawing_data_request(Drawing_t *drawing,
 //          &hooks);
 //
 //      lttv_trace_find_hook(ts->parent.t,
 //          &hooks);
 //
 //      lttv_trace_find_hook(ts->parent.t,
-//          LTT_FACILITY_KERNEL,
+//          LTT_CHANNEL_KERNEL,
 //          LTT_EVENT_PROCESS_EXIT,
 //          FIELD_ARRAY(LTT_FIELD_PID),
 //          after_process_exit_hook,
 //          LTT_EVENT_PROCESS_EXIT,
 //          FIELD_ARRAY(LTT_FIELD_PID),
 //          after_process_exit_hook,
@@ -395,7 +396,7 @@ void drawing_data_request(Drawing_t *drawing,
 //          &hooks);
 //
 //      lttv_trace_find_hook(ts->parent.t,
 //          &hooks);
 //
 //      lttv_trace_find_hook(ts->parent.t,
-//          LTT_FACILITY_KERNEL,
+//          LTT_CHANNEL_KERNEL,
 //          LTT_EVENT_EXEC,
 //          NULL,
 //          after_fs_exec_hook,
 //          LTT_EVENT_EXEC,
 //          NULL,
 //          after_fs_exec_hook,
@@ -423,19 +424,21 @@ void drawing_data_request(Drawing_t *drawing,
       /* add before */
       for(k = 0 ; k < first_after ; k++) {
         th = &g_array_index(hooks, LttvTraceHook, k);
       /* add before */
       for(k = 0 ; k < first_after ; k++) {
         th = &g_array_index(hooks, LttvTraceHook, k);
-        lttv_hooks_add(lttv_hooks_by_id_find(event_by_id, th->id),
-                        th->h,
-                        th,
-                        LTTV_PRIO_STATE-5);
+        lttv_hooks_add(lttv_hooks_by_id_channel_find(event_by_id_channel,
+                                                     th->channel, th->id),
+          th->h,
+          th,
+          LTTV_PRIO_STATE-5);
       }
 
       /* add after */
       for(k = first_after ; k < hooks->len ; k++) {
         th = &g_array_index(hooks, LttvTraceHook, k);
       }
 
       /* add after */
       for(k = first_after ; k < hooks->len ; k++) {
         th = &g_array_index(hooks, LttvTraceHook, k);
-        lttv_hooks_add(lttv_hooks_by_id_find(event_by_id, th->id),
-                       th->h,
-                       th,
-                       LTTV_PRIO_STATE+5);
+        lttv_hooks_add(lttv_hooks_by_id_channel_find(event_by_id_channel,
+                                                     th->channel, th->id),
+          th->h,
+          th,
+          LTTV_PRIO_STATE+5);
       }
       
       events_request->hooks = hooks;
       }
       
       events_request->hooks = hooks;
@@ -455,7 +458,7 @@ void drawing_data_request(Drawing_t *drawing,
       events_request->before_chunk_trace = NULL;
       events_request->before_chunk_tracefile = NULL;
       events_request->event = NULL;
       events_request->before_chunk_trace = NULL;
       events_request->before_chunk_tracefile = NULL;
       events_request->event = NULL;
-      events_request->event_by_id = event_by_id;
+      events_request->event_by_id_channel = event_by_id_channel;
       events_request->after_chunk_tracefile = NULL;
       events_request->after_chunk_trace = NULL;
       events_request->after_chunk_traceset = after_chunk_traceset;
       events_request->after_chunk_tracefile = NULL;
       events_request->after_chunk_trace = NULL;
       events_request->after_chunk_traceset = after_chunk_traceset;
@@ -479,7 +482,7 @@ static void set_last_start(gpointer key, gpointer value, gpointer user_data)
 {
   //ResourceInfo *process_info = (ResourceInfo*)key;
   HashedResourceData *hashed_process_data = (HashedResourceData*)value;
 {
   //ResourceInfo *process_info = (ResourceInfo*)key;
   HashedResourceData *hashed_process_data = (HashedResourceData*)value;
-  guint x = (guint)user_data;
+  guint x = (guint)(gulong)user_data;
 
   hashed_process_data->x.over = x;
   hashed_process_data->x.over_used = FALSE;
 
   hashed_process_data->x.over = x;
   hashed_process_data->x.over_used = FALSE;
@@ -518,7 +521,7 @@ void drawing_data_request_begin(EventsRequest *events_request, LttvTracesetState
 
   for(i=0; i<RV_RESOURCE_COUNT; i++) {
     g_hash_table_foreach(cfd->process_list->restypes[i].hash_table, set_last_start,
 
   for(i=0; i<RV_RESOURCE_COUNT; i++) {
     g_hash_table_foreach(cfd->process_list->restypes[i].hash_table, set_last_start,
-                         (gpointer)x);
+                         (gpointer)(gulong)x);
   }
 
 }
   }
 
 }
index b6d3c5493fc11303a322713e55183f93a0c43ebe..d174da034883e3701878a547ef10df1ee9546f0e 100644 (file)
@@ -813,6 +813,7 @@ int before_execmode_hook_irq(void *hook_data, void *call_data)
 
   LttvTracefileState *tfs = (LttvTracefileState *)call_data;
   LttvTraceState *ts = (LttvTraceState *)tfc->t_context;
 
   LttvTracefileState *tfs = (LttvTracefileState *)call_data;
   LttvTraceState *ts = (LttvTraceState *)tfc->t_context;
+  struct marker_info *minfo;
 
   LttEvent *e;
   e = ltt_tracefile_get_event(tfc->tf);
 
   LttEvent *e;
   e = ltt_tracefile_get_event(tfc->tf);
@@ -830,17 +831,20 @@ int before_execmode_hook_irq(void *hook_data, void *call_data)
   guint64 irq;
   guint cpu = tfs->cpu;
 
   guint64 irq;
   guint cpu = tfs->cpu;
 
-  guint16 ev_id_entry = marker_get_id_from_info(trace, marker_get_info_from_name(trace, lttv_merge_facility_event_name(LTT_FACILITY_KERNEL, LTT_EVENT_IRQ_ENTRY)));
-  guint16 ev_id_exit = marker_get_id_from_info(trace, marker_get_info_from_name(trace, lttv_merge_facility_event_name(LTT_FACILITY_KERNEL, LTT_EVENT_IRQ_EXIT)));
-  if(ev_id_entry == e->event_id) {
+  /*
+   * Check for LTT_CHANNEL_KERNEL channel name and event ID
+   * corresponding to LTT_EVENT_IRQ_ENTRY or LTT_EVENT_IRQ_EXIT.
+   */
+  if (tfc->tf->name != LTT_CHANNEL_KERNEL)
+    return 0;
+  minfo = marker_get_info_from_id(tfc->tf->mdata, e->event_id);
+  g_assert(minfo != NULL);
+  if (minfo->name == LTT_EVENT_IRQ_ENTRY) {
     irq = ltt_event_get_long_unsigned(e, lttv_trace_get_hook_field(th, 0));
     irq = ltt_event_get_long_unsigned(e, lttv_trace_get_hook_field(th, 0));
-  }
-  else if(ev_id_exit == e->event_id) {
+  } else if (minfo->name == LTT_EVENT_IRQ_EXIT) {
     irq = ts->cpu_states[cpu].last_irq;
     irq = ts->cpu_states[cpu].last_irq;
-  }
-  else {
+  } else
     return 0;
     return 0;
-  }
 
   guint trace_num = ts->parent.index;
 
 
   guint trace_num = ts->parent.index;
 
@@ -987,6 +991,7 @@ int before_execmode_hook_soft_irq(void *hook_data, void *call_data)
 
   LttvTracefileState *tfs = (LttvTracefileState *)call_data;
   LttvTraceState *ts = (LttvTraceState *)tfc->t_context;
 
   LttvTracefileState *tfs = (LttvTracefileState *)call_data;
   LttvTraceState *ts = (LttvTraceState *)tfc->t_context;
+  struct marker_info *minfo;
 
   LttEvent *e;
   e = ltt_tracefile_get_event(tfc->tf);
 
   LttEvent *e;
   e = ltt_tracefile_get_event(tfc->tf);
@@ -1004,18 +1009,22 @@ int before_execmode_hook_soft_irq(void *hook_data, void *call_data)
   guint64 softirq;
   guint cpu = tfs->cpu;
 
   guint64 softirq;
   guint cpu = tfs->cpu;
 
-  guint16 ev_id_raise = marker_get_id_from_info(trace, marker_get_info_from_name(trace, lttv_merge_facility_event_name(LTT_FACILITY_KERNEL, LTT_EVENT_SOFT_IRQ_RAISE)));
-  guint16 ev_id_entry = marker_get_id_from_info(trace, marker_get_info_from_name(trace, lttv_merge_facility_event_name(LTT_FACILITY_KERNEL, LTT_EVENT_SOFT_IRQ_ENTRY)));
-  guint16 ev_id_exit = marker_get_id_from_info(trace, marker_get_info_from_name(trace, lttv_merge_facility_event_name(LTT_FACILITY_KERNEL, LTT_EVENT_SOFT_IRQ_EXIT)));
-  if(ev_id_entry == e->event_id || ev_id_raise == e->event_id) {
+  /*
+   * Check for LTT_CHANNEL_KERNEL channel name and event ID
+   * corresponding to LTT_EVENT_SOFT_IRQ_RAISE, LTT_EVENT_SOFT_IRQ_ENTRY
+   * or LTT_EVENT_SOFT_IRQ_EXIT.
+   */
+  if (tfc->tf->name != LTT_CHANNEL_KERNEL)
+    return 0;
+  minfo = marker_get_info_from_id(tfc->tf->mdata, e->event_id);
+  g_assert(minfo != NULL);
+  if (minfo->name == LTT_EVENT_SOFT_IRQ_RAISE
+      || minfo->name == LTT_EVENT_SOFT_IRQ_ENTRY) {
     softirq = ltt_event_get_long_unsigned(e, lttv_trace_get_hook_field(th, 0));
     softirq = ltt_event_get_long_unsigned(e, lttv_trace_get_hook_field(th, 0));
-  }
-  else if(ev_id_exit == e->event_id) {
+  } else if (minfo->name == LTT_EVENT_SOFT_IRQ_EXIT) {
     softirq = ts->cpu_states[cpu].last_soft_irq;
     softirq = ts->cpu_states[cpu].last_soft_irq;
-  }
-  else {
+  } else
     return 0;
     return 0;
-  }
 
   guint trace_num = ts->parent.index;
 
 
   guint trace_num = ts->parent.index;
 
@@ -1153,6 +1162,7 @@ int before_execmode_hook_trap(void *hook_data, void *call_data)
 
   LttvTracefileState *tfs = (LttvTracefileState *)call_data;
   LttvTraceState *ts = (LttvTraceState *)tfc->t_context;
 
   LttvTracefileState *tfs = (LttvTracefileState *)call_data;
   LttvTraceState *ts = (LttvTraceState *)tfc->t_context;
+  struct marker_info *minfo;
 
   LttEvent *e;
   e = ltt_tracefile_get_event(tfc->tf);
 
   LttEvent *e;
   e = ltt_tracefile_get_event(tfc->tf);
@@ -1170,17 +1180,20 @@ int before_execmode_hook_trap(void *hook_data, void *call_data)
   guint64 trap;
   guint cpu = tfs->cpu;
 
   guint64 trap;
   guint cpu = tfs->cpu;
 
-  guint16 ev_id_entry = marker_get_id_from_info(trace, marker_get_info_from_name(trace, lttv_merge_facility_event_name(LTT_FACILITY_KERNEL, LTT_EVENT_TRAP_ENTRY)));
-  guint16 ev_id_exit = marker_get_id_from_info(trace, marker_get_info_from_name(trace, lttv_merge_facility_event_name(LTT_FACILITY_KERNEL, LTT_EVENT_TRAP_EXIT)));
-  if(ev_id_entry == e->event_id) {
+  /*
+   * Check for LTT_CHANNEL_KERNEL channel name and event ID
+   * corresponding to LTT_EVENT_TRAP_ENTRY or LTT_EVENT_TRAP_EXIT.
+   */
+  if (tfc->tf->name != LTT_CHANNEL_KERNEL)
+    return 0;
+  minfo = marker_get_info_from_id(tfc->tf->mdata, e->event_id);
+  g_assert(minfo != NULL);
+  if (minfo->name == LTT_EVENT_TRAP_ENTRY) {
     trap = ltt_event_get_long_unsigned(e, lttv_trace_get_hook_field(th, 0));
     trap = ltt_event_get_long_unsigned(e, lttv_trace_get_hook_field(th, 0));
-  }
-  else if(ev_id_exit == e->event_id) {
+  } else if (minfo->name == LTT_EVENT_TRAP_EXIT) {
     trap = ts->cpu_states[cpu].last_trap;
     trap = ts->cpu_states[cpu].last_trap;
-  }
-  else {
+  } else
     return 0;
     return 0;
-  }
 
   guint trace_num = ts->parent.index;
 
 
   guint trace_num = ts->parent.index;
 
index 4be0cffc0f3ecd9d4997eece2368b5e110c3d9a1..9ff63b32a3dfdd49a6a44b8c14bfbaace9b60b62 100644 (file)
@@ -120,4 +120,21 @@ gint continue_notify(void *hook_data, void *call_data);
 
 void legend_destructor(GtkWindow *legend);
 
 
 void legend_destructor(GtkWindow *legend);
 
+ControlFlowData *resourceview(LttvPluginTab *ptab);
+
+HashedResourceData *resourcelist_obtain_cpu(ControlFlowData *resourceview_data,
+  guint trace_num, guint id);
+
+HashedResourceData *resourcelist_obtain_irq(ControlFlowData *resourceview_data,
+  guint trace_num, guint id);
+
+HashedResourceData *resourcelist_obtain_soft_irq(
+  ControlFlowData *resourceview_data, guint trace_num, guint id);
+
+HashedResourceData *resourcelist_obtain_trap(ControlFlowData *resourceview_data,
+  guint trace_num, guint id);
+
+HashedResourceData *resourcelist_obtain_bdev(ControlFlowData *resourceview_data,
+  guint trace_num, guint id);
+
 #endif // _EVENT_HOOKS_H
 #endif // _EVENT_HOOKS_H
index 912dfba23b9c5155a9ad46b2c1d25f8c39eb9292..f6568c514b878e74b99c0cbeddc107483b55065d 100644 (file)
@@ -8,6 +8,7 @@ AM_CFLAGS = $(GLIB_CFLAGS)
 AM_CFLAGS += $(GTK_CFLAGS)
 AM_CFLAGS += -fvisibility=hidden
 LIBS += $(GLIB_LIBS)
 AM_CFLAGS += $(GTK_CFLAGS)
 AM_CFLAGS += -fvisibility=hidden
 LIBS += $(GLIB_LIBS)
+LIBS += $(THREAD_LIBS)
 LIBS += $(GTK_LIBS) -L${top_builddir}/lttv/modules/gui/lttvwindow/lttvwindow -llttvwindow
 
 libdir = ${lttvplugindir}
 LIBS += $(GTK_LIBS) -L${top_builddir}/lttv/modules/gui/lttvwindow/lttvwindow -llttvwindow
 
 libdir = ${lttvplugindir}
index 42925da7900c29ca0971c2d786c3f1195776bb72..96a13df54cfe2590aabffc83d90711f7b4d470d6 100644 (file)
@@ -9,6 +9,7 @@ AM_CFLAGS += $(GTK_CFLAGS)
 AM_CFLAGS += -DPACKAGE_DATA_DIR=\""$(datadir)"\" -DPACKAGE_BIN_DIR=\""$(bindir)"\"
 AM_CFLAGS += -fvisibility=hidden
 LIBS += $(GLIB_LIBS)
 AM_CFLAGS += -DPACKAGE_DATA_DIR=\""$(datadir)"\" -DPACKAGE_BIN_DIR=\""$(bindir)"\"
 AM_CFLAGS += -fvisibility=hidden
 LIBS += $(GLIB_LIBS)
+LIBS += $(THREAD_LIBS)
 LIBS += $(GTK_LIBS) -L${top_builddir}/lttv/modules/gui/lttvwindow/lttvwindow -llttvwindow
 LIBS += $(UTIL_LIBS)
 
 LIBS += $(GTK_LIBS) -L${top_builddir}/lttv/modules/gui/lttvwindow/lttvwindow -llttvwindow
 LIBS += $(UTIL_LIBS)
 
index ab5513bc2e7774ba3d29e0bbca84ea75b18f0f80..7aed5b42b2854a3a10ff9274c9bf0c85e4c55282 100644 (file)
@@ -27,6 +27,7 @@ AM_CFLAGS = $(GLIB_CFLAGS)
 AM_CFLAGS += $(GTK_CFLAGS)
 AM_CFLAGS += -fvisibility=hidden
 LIBS += $(GLIB_LIBS)
 AM_CFLAGS += $(GTK_CFLAGS)
 AM_CFLAGS += -fvisibility=hidden
 LIBS += $(GLIB_LIBS)
+LIBS += $(THREAD_LIBS)
 LIBS += $(GTK_LIBS) -L${top_builddir}/lttv/modules/gui/lttvwindow/lttvwindow -llttvwindow
 
 libdir = ${lttvplugindir}
 LIBS += $(GTK_LIBS) -L${top_builddir}/lttv/modules/gui/lttvwindow/lttvwindow -llttvwindow
 
 libdir = ${lttvplugindir}
index 9971ef80082dac15de9e23107fc501ef73bcf5f0..03425fb395f5c9e42abe761db7c30a45f8a8006f 100644 (file)
@@ -1,4 +1,5 @@
 AM_CFLAGS = $(GLIB_CFLAGS) 
 AM_CFLAGS = $(GLIB_CFLAGS) 
+LIBS += $(THREAD_LIBS)
 LIBS += $(GLIB_LIBS) -lgobject-2.0 -L${top_builddir}/ltt -llttvtraceread
 
 libdir = ${lttvplugindir}
 LIBS += $(GLIB_LIBS) -lgobject-2.0 -L${top_builddir}/ltt -llttvtraceread
 
 libdir = ${lttvplugindir}
This page took 0.07664 seconds and 4 git commands to generate.