time operations optimisation
[lttv.git] / ltt / branches / poly / lttv / modules / gui / controlflow / drawing.c
index ac278e97f36e4e8b1eecb96c21db75320d6bca68..c504cf5bc53beda7b66383807a2f44dae12cd7c1 100644 (file)
@@ -40,6 +40,7 @@ GdkColor drawing_colors[NUM_COLORS] =
   { 0, 0xFFFF, 0xFFFF, 0xFFFF }, /* COL_WHITE */
   { 0, 0x0FFF, 0xFFFF, 0xFFFF }, /* COL_WAIT_FORK : pale blue */
   { 0, 0xFFFF, 0xFFFF, 0x0000 }, /* COL_WAIT_CPU : yellow */
+  { 0, 0xFFFF, 0xA000, 0xFCFF }, /* COL_EXIT : pale magenta */
   { 0, 0xFFFF, 0x0000, 0xFFFF }, /* COL_ZOMBIE : purple */
   { 0, 0xFFFF, 0x0000, 0x0000 }, /* COL_WAIT : red */
   { 0, 0x0000, 0xFFFF, 0x0000 }, /* COL_RUN : green */
@@ -166,8 +167,12 @@ void drawing_data_request(Drawing_t *drawing,
                  after_execmode_hook,
                  events_request,
                  LTTV_PRIO_STATE+5);
- lttv_hooks_add(event,
-                 after_fork_hook,
+  lttv_hooks_add(event,
+                 before_process_hook,
+                 events_request,
+                 LTTV_PRIO_STATE-5);
+  lttv_hooks_add(event,
+                 after_process_hook,
                  events_request,
                  LTTV_PRIO_STATE+5);
 
@@ -479,6 +484,27 @@ after_expose_event( GtkWidget *widget, GdkEventExpose *event, gpointer user_data
 }
 
 
+void
+tree_row_activated(GtkTreeModel *treemodel,
+                   GtkTreePath *arg1,
+                   GtkTreeViewColumn *arg2,
+                   gpointer user_data)
+{
+  ControlFlowData *cfd = (ControlFlowData*)user_data;
+  Drawing_t *drawing = cfd->drawing;
+  GtkTreeView *treeview = cfd->process_list->process_list_widget;
+  gint *path_indices;
+  gint height;
+  
+  path_indices =  gtk_tree_path_get_indices (arg1);
+
+  height = get_cell_height(
+        GTK_TREE_VIEW(treeview));
+  drawing->horizontal_sel = height * path_indices[0];
+  g_critical("new hor sel : %i", drawing->horizontal_sel);
+}
+
+
 /* mouse click */
 static gboolean
 button_press_event( GtkWidget *widget, GdkEventButton *event, gpointer user_data )
@@ -596,6 +622,7 @@ Drawing_t *drawing_construct(ControlFlowData *control_flow_data)
   
   drawing->damage_begin = 0;
   drawing->damage_end = 0;
+  drawing->horizontal_sel = -1;
   
   //gtk_widget_set_size_request(drawing->drawing_area->window, 50, 50);
   g_object_set_data_full(
@@ -715,8 +742,7 @@ GtkWidget *drawing_get_widget(Drawing_t *drawing)
  *
  * Convert from window pixel and time interval to an absolute time.
  */
-//FIXME : could need ceil and floor versions of this function
-void convert_pixels_to_time(
+__inline void convert_pixels_to_time(
     gint width,
     guint x,
     LttTime window_time_begin,
@@ -724,16 +750,18 @@ void convert_pixels_to_time(
     LttTime *time)
 {
   LttTime window_time_interval;
+  guint64 time_ll;
   
   window_time_interval = ltt_time_sub(window_time_end, 
             window_time_begin);
-  *time = ltt_time_mul(window_time_interval, (x/(float)width));
+  time_ll = ltt_time_to_uint64(window_time_interval);
+  time_ll = time_ll * x / width;
+  *time = ltt_time_from_uint64(time_ll);
   *time = ltt_time_add(window_time_begin, *time);
 }
 
-//FIXME : could need ceil and floor versions of this function
 
-void convert_time_to_pixels(
+__inline void convert_time_to_pixels(
     LttTime window_time_begin,
     LttTime window_time_end,
     LttTime time,
@@ -741,7 +769,7 @@ void convert_time_to_pixels(
     guint *x)
 {
   LttTime window_time_interval;
-  double interval_double, time_double;
+  guint64 time_ll, interval_ll;
   
   g_assert(ltt_time_compare(window_time_begin, time) <= 0 &&
            ltt_time_compare(window_time_end, time) >= 0);
@@ -750,11 +778,10 @@ void convert_time_to_pixels(
   
   time = ltt_time_sub(time, window_time_begin);
   
-  /* LttTime to double conversions here should really be under 4000 hours.. */
-  interval_double = ltt_time_to_double(window_time_interval);
-  time_double = ltt_time_to_double(time);
+  time_ll = ltt_time_to_uint64(time);
+  interval_ll = ltt_time_to_uint64(window_time_interval);
 
-  *x = (guint)(time_double/interval_double * width);
+  *x = (guint)(time_ll * width / interval_ll);
   
 }
 
This page took 0.024588 seconds and 4 git commands to generate.