-#include "Drawing.h"
-#include "CFV.h"
#include <gtk/gtk.h>
#include <gdk/gdk.h>
#include <lttv/processTrace.h>
+#include <lttv/gtkTraceSet.h>
+#include <lttv/hook.h>
+#include "Drawing.h"
+#include "CFV.h"
+#include "CFV-private.h"
+#include "Event_Hooks.h"
#define g_info(format...) g_log (G_LOG_DOMAIN, G_LOG_LEVEL_INFO, format)
#define g_debug(format...) g_log (G_LOG_DOMAIN, G_LOG_LEVEL_DEBUG, format)
gint width,
gint height)
{
-
-// start from pixel to time(x)
-// end from pixel to time (x + width)
-
-// LttvTracesetContext * tsc = get_traceset_context(event_viewer_data->mw);
-
if(width < 0) return ;
if(height < 0) return ;
-
+ ControlFlowData *control_flow_data =
+ (ControlFlowData*)g_object_get_data(
+ G_OBJECT(
+ Drawing->Drawing_Area_V),
+ "Control_Flow_Data");
+
+ LttTime start, end;
+ LttTime window_end = ltt_time_add(control_flow_data->Time_Window.time_width,
+ control_flow_data->Time_Window.start_time);
+
+ convert_pixels_to_time(Drawing, x,
+ &control_flow_data->Time_Window.start_time,
+ &window_end,
+ &start);
+
+ convert_pixels_to_time(Drawing, x + width,
+ &control_flow_data->Time_Window.start_time,
+ &window_end,
+ &end);
+
+ LttvTracesetContext * tsc =
+ get_traceset_context(control_flow_data->Parent_Window);
+
gdk_draw_rectangle (*Pixmap,
Drawing->Drawing_Area_V->style->white_gc,
TRUE,
send_test_process(
guicontrolflow_get_process_list(Drawing->Control_Flow_Data),
Drawing);
- send_test_drawing(
- guicontrolflow_get_process_list(Drawing->Control_Flow_Data),
- Drawing, *Pixmap, x, y, width, height);
+ //send_test_drawing(
+ //guicontrolflow_get_process_list(Drawing->Control_Flow_Data),
+ //Drawing, *Pixmap, x, y, width, height);
// Let's call processTrace() !!
-
-
- //lttv_process_traceset_seek_time(tsc, start);
- //lttv_traceset_context_add_hooks(
- //lttv_process_traceset
- //lttv_traceset_context_remove_hooks
+ EventRequest event_request; // Variable freed at the end of the function.
+ event_request.Control_Flow_Data = control_flow_data;
+ event_request.time_begin = start;
+ event_request.time_end = end;
+
+ LttvHooks *event = lttv_hooks_new();
+ lttv_hooks_add(event, draw_event_hook, &event_request);
+
+ lttv_process_traceset_seek_time(tsc, start);
+ lttv_traceset_context_add_hooks(tsc,
+ NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, event, NULL);
+ lttv_process_traceset(tsc, end, G_MAXULONG);
+ lttv_traceset_context_remove_hooks(tsc, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, event, NULL);
+
+ lttv_hooks_destroy(event);
}
/* Callbacks */
return Drawing->Drawing_Area_V;
}
-/* get_time_from_pixels
+/* convert_pixels_to_time
*
- * Get the time interval from window time and pixels, and pixels requested.
+ * Convert from window pixel and time interval to an absolute time.
*/
void convert_pixels_to_time(
Drawing_t *Drawing,
ControlFlowData *Control_Flow_Data = guicontrolflow() ;
Control_Flow_Data->Parent_Window = pmParentWindow;
+ TimeWindow *time_window = guicontrolflow_get_time_window(Control_Flow_Data);
+ time_window->start_time.tv_sec = 0;
+ time_window->start_time.tv_nsec = 0;
+ time_window->time_width.tv_sec = 0;
+ time_window->time_width.tv_nsec = 0;
+ LttTime *current_time = guicontrolflow_get_current_time(Control_Flow_Data);
+ current_time->tv_sec = 0;
+ current_time->tv_nsec = 0;
+
+ //g_critical("time width1 : %u",time_window->time_width);
+
get_time_window(pmParentWindow,
- guicontrolflow_get_time_window(Control_Flow_Data));
+ time_window);
get_current_time(pmParentWindow,
- guicontrolflow_get_current_time(Control_Flow_Data));
+ current_time);
+ //g_critical("time width2 : %u",time_window->time_width);
// Unreg done in the GuiControlFlow_Destructor
reg_update_time_window(update_time_window_hook, Control_Flow_Data,
pmParentWindow);
}
-#ifdef DEBUG
/* Hook called before drawing. Gets the initial context at the beginning of the
* drawing interval and copy it to the context in Event_Request.
*/
int draw_before_hook(void *hook_data, void *call_data)
{
EventRequest *Event_Request = (EventRequest*)hook_data;
- EventsContext Events_Context = (EventsContext*)call_data;
+ //EventsContext Events_Context = (EventsContext*)call_data;
- Event_Request->Events_Context = Events_Context;
+ //Event_Request->Events_Context = Events_Context;
return 0;
}
{
EventRequest *Event_Request = (EventRequest*)hook_data;
+
return 0;
}
g_free(Event_Request);
return 0;
}
-#endif
#include <gtk/gtk.h>
#include <lttv/mainWindow.h>
+#include <ltt/time.h>
#include "Process_List.h"
#include "Drawing.h"
+#include "CFV.h"
+
+
+/* Structure used to store and use information relative to one events refresh
+ * request. Typically filled in by the expose event callback, then passed to the
+ * library call, then used by the drawing hooks. Then, once all the events are
+ * sent, it is freed by the hook called after the reading.
+ */
+typedef struct _EventRequest
+{
+ ControlFlowData *Control_Flow_Data;
+ LttTime time_begin, time_end;
+ /* Fill the Events_Context during the initial expose, before calling for
+ * events.
+ */
+ //GArray Events_Context; //FIXME
+} EventRequest ;
+
+
+
+
void send_test_data(ProcessList *Process_List, Drawing_t *Drawing);
void update_current_time_hook(void *hook_data, void *call_data);
+
+
#endif // _EVENT_HOOKS_H