time add and sub performance tweaks
[lttv.git] / ltt / branches / poly / lttv / modules / gui / lttvwindow / lttvwindow / callbacks.c
index 5630febb54977dd490786ea726e9d9c4459d60ca..2f42d26398a1051ede60d028fdf4a50828278ea6 100644 (file)
@@ -879,6 +879,8 @@ static void events_request_free(EventsRequest *events_request)
        lttv_traceset_context_position_destroy(events_request->start_position);
   if(events_request->end_position != NULL)
        lttv_traceset_context_position_destroy(events_request->end_position);
+  if(events_request->hooks != NULL)
+    g_array_free(events_request->hooks, TRUE);
   if(events_request->before_chunk_traceset != NULL)
        lttv_hooks_destroy(events_request->before_chunk_traceset);
   if(events_request->before_chunk_trace != NULL)
@@ -1223,11 +1225,27 @@ gboolean lttvwindow_process_pending_requests(Tab *tab)
           /* 1.3.2 call before chunk
            * 1.3.3 events hooks added
            */
-          lttv_process_traceset_begin(tsc, events_request->before_chunk_traceset,
-                                           events_request->before_chunk_trace,
-                                           events_request->before_chunk_tracefile,
-                                           events_request->event,
-                                           events_request->event_by_id);
+          if(events_request->trace == -1)
+            lttv_process_traceset_begin(tsc,
+                events_request->before_chunk_traceset,
+                events_request->before_chunk_trace,
+                events_request->before_chunk_tracefile,
+                events_request->event,
+                events_request->event_by_id);
+          else {
+            guint nb_trace = lttv_traceset_number(tsc->ts);
+            g_assert(events_request->trace < nb_trace &&
+                      events_request->trace > -1);
+            LttvTraceContext *tc = tsc->traces[events_request->trace];
+
+            lttv_hooks_call(events_request->before_chunk_traceset, tsc);
+
+            lttv_trace_context_add_hooks(tc,
+                                         events_request->before_chunk_trace,
+                                         events_request->before_chunk_tracefile,
+                                         events_request->event,
+                                         events_request->event_by_id);
+          }
         }
       }
     } else {
@@ -1244,11 +1262,27 @@ gboolean lttvwindow_process_pending_requests(Tab *tab)
           /* - Call before chunk
            * - events hooks added
            */
-          lttv_process_traceset_begin(tsc, events_request->before_chunk_traceset,
+          if(events_request->trace == -1)
+            lttv_process_traceset_begin(tsc,
+                events_request->before_chunk_traceset,
+                events_request->before_chunk_trace,
+                events_request->before_chunk_tracefile,
+                events_request->event,
+                events_request->event_by_id);
+          else {
+            guint nb_trace = lttv_traceset_number(tsc->ts);
+            g_assert(events_request->trace < nb_trace &&
+                      events_request->trace > -1);
+            LttvTraceContext *tc = tsc->traces[events_request->trace];
+
+            lttv_hooks_call(events_request->before_chunk_traceset, tsc);
+
+            lttv_trace_context_add_hooks(tc,
                                          events_request->before_chunk_trace,
                                          events_request->before_chunk_tracefile,
                                          events_request->event,
                                          events_request->event_by_id);
+          }
 
           iter = g_slist_next(iter);
         }
@@ -1292,11 +1326,29 @@ gboolean lttvwindow_process_pending_requests(Tab *tab)
             /* call before chunk
              * events hooks added
              */
-            lttv_process_traceset_begin(tsc, events_request->before_chunk_traceset,
-                                             events_request->before_chunk_trace,
-                                             events_request->before_chunk_tracefile,
-                                             events_request->event,
-                                             events_request->event_by_id);
+            if(events_request->trace == -1)
+              lttv_process_traceset_begin(tsc,
+                  events_request->before_chunk_traceset,
+                  events_request->before_chunk_trace,
+                  events_request->before_chunk_tracefile,
+                  events_request->event,
+                  events_request->event_by_id);
+            else {
+              guint nb_trace = lttv_traceset_number(tsc->ts);
+              g_assert(events_request->trace < nb_trace &&
+                        events_request->trace > -1);
+              LttvTraceContext *tc = tsc->traces[events_request->trace];
+
+              lttv_hooks_call(events_request->before_chunk_traceset, tsc);
+
+              lttv_trace_context_add_hooks(tc,
+                                           events_request->before_chunk_trace,
+                                           events_request->before_chunk_tracefile,
+                                           events_request->event,
+                                           events_request->event_by_id);
+          }
+
+
           }
 
           /* Go to next */
@@ -1426,11 +1478,31 @@ gboolean lttvwindow_process_pending_requests(Tab *tab)
           /* - Remove events hooks for req
            * - Call end chunk for req
            */
-          lttv_process_traceset_end(tsc, events_request->after_chunk_traceset,
+
+          if(events_request->trace == -1) 
+               lttv_process_traceset_end(tsc,
+                                         events_request->after_chunk_traceset,
+                                         events_request->after_chunk_trace,
+                                         events_request->after_chunk_tracefile,
+                                         events_request->event,
+                                         events_request->event_by_id);
+
+          else {
+            guint nb_trace = lttv_traceset_number(tsc->ts);
+            g_assert(events_request->trace < nb_trace &&
+                      events_request->trace > -1);
+            LttvTraceContext *tc = tsc->traces[events_request->trace];
+
+            lttv_trace_context_remove_hooks(tc,
                                          events_request->after_chunk_trace,
                                          events_request->after_chunk_tracefile,
                                          events_request->event,
                                          events_request->event_by_id);
+            lttv_hooks_call(events_request->after_chunk_traceset, tsc);
+
+
+          }
+
           /* - Call end request for req */
           lttv_hooks_call(events_request->after_request, (gpointer)tsc);
           
@@ -1465,12 +1537,29 @@ gboolean lttvwindow_process_pending_requests(Tab *tab)
           /* - Remove events hooks for req
            * - Call end chunk for req
            */
-          lttv_process_traceset_end(tsc, events_request->after_chunk_traceset,
+          if(events_request->trace == -1) 
+               lttv_process_traceset_end(tsc,
+                                         events_request->after_chunk_traceset,
+                                         events_request->after_chunk_trace,
+                                         events_request->after_chunk_tracefile,
+                                         events_request->event,
+                                         events_request->event_by_id);
+
+          else {
+            guint nb_trace = lttv_traceset_number(tsc->ts);
+            g_assert(events_request->trace < nb_trace &&
+                      events_request->trace > -1);
+            LttvTraceContext *tc = tsc->traces[events_request->trace];
+
+            lttv_trace_context_remove_hooks(tc,
                                          events_request->after_chunk_trace,
                                          events_request->after_chunk_tracefile,
                                          events_request->event,
                                          events_request->event_by_id);
 
+            lttv_hooks_call(events_request->after_chunk_traceset, tsc);
+          }
+
           /* - req.num -= count */
           g_assert(events_request->num_events >= count);
           events_request->num_events -= count;
@@ -4308,6 +4397,50 @@ void construct_main_window(MainWindow * parent)
     }
     LttvTraceset *traceset = new_tab->traceset_info->traceset;
     SetTraceset(new_tab, traceset);
+
+    /* Insert default viewers */
+    {
+      LttvAttributeType type;
+      LttvAttributeName name;
+      LttvAttributeValue value;
+      LttvAttribute *attribute;
+      
+      LttvIAttribute *attributes_global = 
+         LTTV_IATTRIBUTE(lttv_global_attributes());
+
+      g_assert(attribute = 
+        LTTV_ATTRIBUTE(lttv_iattribute_find_subdir(
+                                  LTTV_IATTRIBUTE(attributes_global),
+                                  LTTV_VIEWER_CONSTRUCTORS)));
+
+      name = g_quark_from_string("guievents");
+      type = lttv_iattribute_get_by_name(LTTV_IATTRIBUTE(attribute),
+                                         name, &value);
+      if(type == LTTV_POINTER) {
+        lttvwindow_viewer_constructor viewer_constructor = 
+                  (lttvwindow_viewer_constructor)*value.v_pointer;
+        insert_viewer(new_window, viewer_constructor);
+      }
+
+      name = g_quark_from_string("guicontrolflow");
+      type = lttv_iattribute_get_by_name(LTTV_IATTRIBUTE(attribute),
+                                         name, &value);
+      if(type == LTTV_POINTER) {
+        lttvwindow_viewer_constructor viewer_constructor = 
+                  (lttvwindow_viewer_constructor)*value.v_pointer;
+        insert_viewer(new_window, viewer_constructor);
+      }
+
+      name = g_quark_from_string("guistatistics");
+      type = lttv_iattribute_get_by_name(LTTV_IATTRIBUTE(attribute),
+                                         name, &value);
+      if(type == LTTV_POINTER) {
+        lttvwindow_viewer_constructor viewer_constructor = 
+                  (lttvwindow_viewer_constructor)*value.v_pointer;
+        insert_viewer(new_window, viewer_constructor);
+      }
+
+    }
   }
 
   g_printf("There are now : %d windows\n",g_slist_length(g_main_window_list));
@@ -4323,7 +4456,7 @@ void tab_destructor(Tab * tab)
   int i, nb, ref_count;
   LttvTrace * trace;
 
-  g_object_free(tab->tooltips);
+  gtk_object_destroy(GTK_OBJECT(tab->tooltips));
   
   if(tab->attributes)
     g_object_unref(tab->attributes);
This page took 0.026318 seconds and 4 git commands to generate.