ifdef for EXTRA_CHECK, and precalculate time_width_double
[lttv.git] / ltt / branches / poly / lttv / modules / gui / lttvwindow / lttvwindow / callbacks.c
index 12b54c0be9a6316fef234384ae10b4d3a492b39f..be473deafd31b25bfae1465e6d6fa251d475f22a 100644 (file)
@@ -471,8 +471,7 @@ int SetTraceset(Tab * tab, LttvTraceset *traceset)
   /* Set the tab's time window and current time if
    * out of bounds */
   if(ltt_time_compare(tab->time_window.start_time, time_span.start_time) < 0
-     || ltt_time_compare(  ltt_time_add(tab->time_window.start_time,
-                                        tab->time_window.time_width),
+     || ltt_time_compare(tab->time_window.end_time,
                            time_span.end_time) > 0) {
     new_time_window.start_time = time_span.start_time;
     
@@ -486,6 +485,9 @@ int SetTraceset(Tab * tab, LttvTraceset *traceset)
       tmp_time.tv_sec = time_span.end_time.tv_sec;
     tmp_time.tv_nsec = 0;
     new_time_window.time_width = tmp_time ;
+    new_time_window.time_width_double = ltt_time_to_double(tmp_time);
+    new_time_window.end_time = ltt_time_add(new_time_window.start_time,
+                                            new_time_window.time_width) ;
   }
   time_change_manager(tab, new_time_window);
   current_time_change_manager(tab, new_current_time);
@@ -879,6 +881,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 +1227,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 +1264,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 +1328,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 +1480,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 +1539,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;
@@ -2194,31 +2285,46 @@ void zoom(GtkWidget * widget, double size)
   if(size == 0){
     new_time_window.start_time = time_span.start_time;
     new_time_window.time_width = time_delta;
+    new_time_window.time_width_double = ltt_time_to_double(time_delta);
+    new_time_window.end_time = ltt_time_add(new_time_window.start_time,
+                                            new_time_window.time_width) ;
   }else{
     new_time_window.time_width = ltt_time_div(new_time_window.time_width, size);
+    new_time_window.time_width_double = 
+                   ltt_time_to_double(new_time_window.time_width);
     if(ltt_time_compare(new_time_window.time_width,time_delta) > 0)
     { /* Case where zoom out is bigger than trace length */
       new_time_window.start_time = time_span.start_time;
       new_time_window.time_width = time_delta;
+      new_time_window.time_width_double = ltt_time_to_double(time_delta);
+      new_time_window.end_time = ltt_time_add(new_time_window.start_time,
+                                            new_time_window.time_width) ;
     }
     else
     {
       /* Center the image on the current time */
       new_time_window.start_time = 
-        ltt_time_sub(current_time, ltt_time_div(new_time_window.time_width, 2.0));
+        ltt_time_sub(current_time,
+            ltt_time_from_double(new_time_window.time_width_double/2.0));
+      new_time_window.end_time = ltt_time_add(new_time_window.start_time,
+                                            new_time_window.time_width) ;
       /* If on borders, don't fall off */
       if(ltt_time_compare(new_time_window.start_time, time_span.start_time) <0)
       {
         new_time_window.start_time = time_span.start_time;
+        new_time_window.end_time = ltt_time_add(new_time_window.start_time,
+                                            new_time_window.time_width) ;
       }
       else 
       {
-        if(ltt_time_compare(
-           ltt_time_add(new_time_window.start_time, new_time_window.time_width),
-           time_span.end_time) > 0)
+        if(ltt_time_compare(new_time_window.end_time,
+                            time_span.end_time) > 0)
         {
           new_time_window.start_time = 
                   ltt_time_sub(time_span.end_time, new_time_window.time_width);
+
+          new_time_window.end_time = ltt_time_add(new_time_window.start_time,
+                                                  new_time_window.time_width) ;
         }
       }
       
@@ -3343,8 +3449,7 @@ void time_change_manager               (Tab *tab,
   LttvTracesetContext *tsc = LTTV_TRACESET_CONTEXT(tab->traceset_info->traceset_context);
   TimeInterval time_span = tsc->time_span;
   LttTime start_time = new_time_window.start_time;
-  LttTime end_time = ltt_time_add(new_time_window.start_time,
-                                  new_time_window.time_width);
+  LttTime end_time = new_time_window.end_time;
 
   /* Set scrollbar */
   GtkAdjustment *adjustment = gtk_range_get_adjustment(GTK_RANGE(tab->scrollbar));
@@ -3365,18 +3470,15 @@ void time_change_manager               (Tab *tab,
                "lower",
                  0.0, /* lower */
                "upper",
-               ltt_time_to_double(upper) 
-                 * NANOSECONDS_PER_SECOND, /* upper */
+               ltt_time_to_double(upper), /* upper */
                "step_increment",
-               ltt_time_to_double(new_time_window.time_width)
-                             / SCROLL_STEP_PER_PAGE
-                             * NANOSECONDS_PER_SECOND, /* step increment */
+               new_time_window.time_width_double
+                             / SCROLL_STEP_PER_PAGE, /* step increment */
                "page_increment",
-               ltt_time_to_double(new_time_window.time_width) 
-                 * NANOSECONDS_PER_SECOND, /* page increment */
+               new_time_window.time_width_double, 
+                                                     /* page increment */
                "page_size",
-               ltt_time_to_double(new_time_window.time_width) 
-                 * NANOSECONDS_PER_SECOND, /* page size */
+               new_time_window.time_width_double, /* page size */
                NULL);
   gtk_adjustment_changed(adjustment);
 
@@ -3384,13 +3486,12 @@ void time_change_manager               (Tab *tab,
  //              "value",
  //              ltt_time_to_double(
  //               ltt_time_sub(start_time, time_span.start_time))
- //                  * NANOSECONDS_PER_SECOND, /* value */
+ //                 , /* value */
  //              NULL);
   //gtk_adjustment_value_changed(adjustment);
   gtk_range_set_value(GTK_RANGE(tab->scrollbar),
                ltt_time_to_double(
-                ltt_time_sub(start_time, time_span.start_time))
-                   * NANOSECONDS_PER_SECOND /* value */);
+                ltt_time_sub(start_time, time_span.start_time)) /* value */);
 
   /* set the time bar. */
   /* start seconds */
@@ -3482,8 +3583,7 @@ on_MEntry1_value_changed               (GtkSpinButton *spinbutton,
 
   TimeWindow new_time_window = tab->time_window;
  
-  LttTime end_time = ltt_time_add(new_time_window.start_time,
-                                  new_time_window.time_width);
+  LttTime end_time = new_time_window.end_time;
 
   new_time_window.start_time.tv_sec = value;
 
@@ -3504,19 +3604,21 @@ on_MEntry1_value_changed               (GtkSpinButton *spinbutton,
       new_time_window.start_time.tv_nsec = time_span.end_time.tv_nsec-1;
   }
 
-  /* check if end time selected is below or equal */
   if(ltt_time_compare(new_time_window.start_time, end_time) >= 0) {
     /* Then, we must push back end time : keep the same time width
      * if possible, else end traceset time */
-    end_time = LTT_TIME_MIN(time_span.end_time,
-                                  ltt_time_add(new_time_window.start_time,
-                                               new_time_window.time_width)
-                                 );
+    end_time = LTT_TIME_MIN(ltt_time_add(new_time_window.start_time,
+                                         new_time_window.time_width),
+                            time_span.end_time);
   }
 
   /* Fix the time width to fit start time and end time */
   new_time_window.time_width = ltt_time_sub(end_time,
                                             new_time_window.start_time);
+  new_time_window.time_width_double =
+              ltt_time_to_double(new_time_window.time_width);
+
+  new_time_window.end_time = end_time;
 
   time_change_manager(tab, new_time_window);
 
@@ -3534,24 +3636,25 @@ on_MEntry2_value_changed               (GtkSpinButton *spinbutton,
 
   TimeWindow new_time_window = tab->time_window;
  
-  LttTime end_time = ltt_time_add(new_time_window.start_time,
-                                  new_time_window.time_width);
+  LttTime end_time = new_time_window.end_time;
 
   new_time_window.start_time.tv_nsec = value;
 
-  /* check if end time selected is below or equal */
   if(ltt_time_compare(new_time_window.start_time, end_time) >= 0) {
     /* Then, we must push back end time : keep the same time width
      * if possible, else end traceset time */
-    end_time = LTT_TIME_MIN(time_span.end_time,
-                                  ltt_time_add(new_time_window.start_time,
-                                               new_time_window.time_width)
-                                 );
+    end_time = LTT_TIME_MIN(ltt_time_add(new_time_window.start_time,
+                                         new_time_window.time_width),
+                            time_span.end_time);
   }
 
   /* Fix the time width to fit start time and end time */
   new_time_window.time_width = ltt_time_sub(end_time,
                                             new_time_window.start_time);
+  new_time_window.time_width_double =
+              ltt_time_to_double(new_time_window.time_width);
+
+  new_time_window.end_time = end_time;
 
   time_change_manager(tab, new_time_window);
 
@@ -3569,8 +3672,8 @@ on_MEntry3_value_changed               (GtkSpinButton *spinbutton,
 
   TimeWindow new_time_window = tab->time_window;
  
-  LttTime end_time = ltt_time_add(new_time_window.start_time,
-                                  new_time_window.time_width);
+  LttTime end_time = new_time_window.end_time;
+
   end_time.tv_sec = value;
 
   /* end nanoseconds */
@@ -3590,20 +3693,23 @@ on_MEntry3_value_changed               (GtkSpinButton *spinbutton,
       end_time.tv_nsec = time_span.end_time.tv_nsec;
   }
 
-  /* check if end time selected is below or equal */
   if(ltt_time_compare(new_time_window.start_time, end_time) >= 0) {
     /* Then, we must push front start time : keep the same time width
      * if possible, else end traceset time */
-    new_time_window.start_time = LTT_TIME_MAX(time_span.start_time,
-                                        ltt_time_sub(end_time,
-                                                     new_time_window.time_width)
-                                             );
+    new_time_window.start_time = LTT_TIME_MAX(
+                                  ltt_time_sub(end_time,
+                                               new_time_window.time_width),
+                                  time_span.start_time);
   }
 
   /* Fix the time width to fit start time and end time */
   new_time_window.time_width = ltt_time_sub(end_time,
                                             new_time_window.start_time);
+  new_time_window.time_width_double =
+              ltt_time_to_double(new_time_window.time_width);
 
+  new_time_window.end_time = end_time;
+  
   time_change_manager(tab, new_time_window);
 
 }
@@ -3620,23 +3726,25 @@ on_MEntry4_value_changed               (GtkSpinButton *spinbutton,
 
   TimeWindow new_time_window = tab->time_window;
  
-  LttTime end_time = ltt_time_add(new_time_window.start_time,
-                                  new_time_window.time_width);
+  LttTime end_time = new_time_window.end_time;
+
   end_time.tv_nsec = value;
 
-  /* check if end time selected is below or equal */
   if(ltt_time_compare(new_time_window.start_time, end_time) >= 0) {
     /* Then, we must push front start time : keep the same time width
      * if possible, else end traceset time */
-    new_time_window.start_time = LTT_TIME_MAX(time_span.start_time,
-                                        ltt_time_sub(end_time,
-                                                     new_time_window.time_width)
-                                             );
+    new_time_window.start_time = LTT_TIME_MAX(
+                                ltt_time_sub(end_time,
+                                             new_time_window.time_width),
+                                time_span.start_time);
   }
 
   /* Fix the time width to fit start time and end time */
   new_time_window.time_width = ltt_time_sub(end_time,
                                             new_time_window.start_time);
+  new_time_window.time_width_double =
+              ltt_time_to_double(new_time_window.time_width);
+  new_time_window.end_time = end_time;
 
   time_change_manager(tab, new_time_window);
 
@@ -3752,7 +3860,7 @@ void scroll_value_changed_cb(GtkWidget *scrollbar,
     LTTV_TRACESET_CONTEXT(tab->traceset_info->traceset_context);
   TimeInterval time_span = tsc->time_span;
 
-  time = ltt_time_add(ltt_time_from_double(value/NANOSECONDS_PER_SECOND),
+  time = ltt_time_add(ltt_time_from_double(value),
                       time_span.start_time);
 
   new_time_window.start_time = time;
@@ -3760,7 +3868,13 @@ void scroll_value_changed_cb(GtkWidget *scrollbar,
   page_size = adjust->page_size;
 
   new_time_window.time_width = 
-    ltt_time_from_double(page_size/NANOSECONDS_PER_SECOND);
+    ltt_time_from_double(page_size);
+
+  new_time_window.time_width_double =
+              page_size;
+
+  new_time_window.end_time = ltt_time_add(new_time_window.start_time, 
+                                          new_time_window.time_width);
 
 
   time_change_manager(tab, new_time_window);
@@ -3775,7 +3889,7 @@ void scroll_value_changed_cb(GtkWidget *scrollbar,
   //time = ltt_time_sub(time_span->end_time, time_span->start_time);
   //time = ltt_time_mul(time, (float)ratio);
   //time = ltt_time_add(time_span->start_time, time);
-  time = ltt_time_add(ltt_time_from_double(value/NANOSECONDS_PER_SECOND),
+  time = ltt_time_add(ltt_time_from_double(value),
                       time_span.start_time);
 
   time_window.start_time = time;
@@ -3783,7 +3897,7 @@ void scroll_value_changed_cb(GtkWidget *scrollbar,
   page_size = adjust->page_size;
 
   time_window.time_width = 
-    ltt_time_from_double(page_size/NANOSECONDS_PER_SECOND);
+    ltt_time_from_double(page_size);
   //time = ltt_time_sub(time_span.end_time, time);
   //if(ltt_time_compare(time,time_window.time_width) < 0){
   //  time_window.time_width = time;
This page took 0.027639 seconds and 4 git commands to generate.