#include <lttv/module.h>
#include <lttv/iattribute.h>
#include <lttv/traceset.h>
+#include <lttv/state.h>
#ifdef BABEL_CLEANUP
#include <lttv/stats.h>
#include <lttv/sync/sync_chain_lttv.h>
}
#endif /*BABEL_CLEANUP*/
- time_span = lttv_traceset_get_time_span(traceset);
+ time_span = lttv_traceset_get_time_span_real(traceset);
tab->traceset_info->traceset = traceset;
new_time_window.end_time = ltt_time_add(new_time_window.start_time,
new_time_window.time_width) ;
}
+ lttv_state_add_event_hooks(traceset);
+ //TODO ybrosseau 2012-08-03 Temporarly compute checkpoints right at the adding
+ // of the traceset
+ //Compute the traceset state checkpoint
+ {
+
+ EventsRequest *events_request = g_new(EventsRequest, 1);
+
+ LttvHooks *hook_adder = lttv_hooks_new();
+ lttv_hooks_add(hook_adder, lttv_state_save_hook_add_event_hooks, NULL,
+ LTTV_PRIO_DEFAULT);
+ LttvHooks *hook_remover = lttv_hooks_new();
+ lttv_hooks_add(hook_remover, lttv_state_save_hook_remove_event_hooks,
+ NULL, LTTV_PRIO_DEFAULT);
+
+ // Fill the events request
+ events_request->owner = NULL;
+ events_request->viewer_data = NULL;
+ events_request->servicing = FALSE;
+ events_request->start_time = ltt_time_zero;
+ events_request->start_position = NULL;
+ events_request->stop_flag = FALSE;
+ events_request->end_time = ltt_time_infinite;
+ events_request->num_events = G_MAXUINT;
+ events_request->end_position = NULL;
+ events_request->trace = 1; //fixed /* FIXME */
+ events_request->before_chunk_traceset = NULL;
+ events_request->before_chunk_trace = NULL;
+ events_request->before_chunk_tracefile = NULL;
+ events_request->event = NULL;
+ events_request->after_chunk_tracefile = NULL;
+ events_request->after_chunk_trace = NULL;
+ events_request->after_chunk_traceset = NULL;
+ events_request->before_request = hook_adder;
+ events_request->after_request = hook_remover;
+
+ lttvwindow_events_request(tab, events_request);
+ }
+
/* Finally, call the update hooks of the viewers */
gint retval = update_traceset(tab, traceset);
/* - Seek to that time */
g_debug("SEEK TIME : %lu, %lu", events_request->start_time.tv_sec,
events_request->start_time.tv_nsec);
- //lttv_process_traceset_seek_time(tsc, events_request->start_time);
- lttv_process_traceset_seek_time(ts,
+ lttv_state_traceset_seek_time_closest(ts,
events_request->start_time);
/* Process the traceset with only state hooks */
} else {
- //LttTime pos_time;
+ LttTime pos_time;
//LttvTracefileContext *tfc =
// lttv_traceset_context_get_current_tfc(tsc);
/* Else, the first request in list_in is a position request */
/* 1.2.2.1 Seek to that position */
g_debug("SEEK POSITION");
//lttv_process_traceset_seek_position(tsc, events_request->start_position);
- //pos_time = lttv_traceset_position_get_time(
- // events_request->start_position);
- //
- //lttv_state_traceset_seek_time(ts,
- // pos_time);
- lttv_traceset_seek_to_position( events_request->start_position);
+ pos_time = lttv_traceset_position_get_time(
+ events_request->start_position);
+
+ lttv_state_traceset_seek_time_closest(ts,
+ pos_time);
+ //lttv_traceset_seek_to_position( events_request->start_position);
/* Process the traceset with only state hooks */
#ifdef DEBUG
seek_count =
-
+#endif
lttv_process_traceset_middle(ts,
ltt_time_infinite,
G_MAXUINT,
events_request->start_position);
-#endif
+
//g_assert(lttv_traceset_context_ctx_pos_compare(tsc,
// events_request->start_position) == 0);
/* 1.3 Add hooks and call before request for all list_in members */
{
GSList *iter = NULL;
-
for(iter=list_in;iter!=NULL;iter=g_slist_next(iter)) {
EventsRequest *events_request = (EventsRequest*)iter->data;
/* 1.3.1 If !servicing */
*/
//TODO ybrosseau 2012-07-10: || TRUE added since we only support
// traceset wide requests
- if(events_request->trace == -1 || TRUE)
+ if(events_request->trace == -1 || TRUE) {
+
lttv_process_traceset_begin(ts,
events_request->before_chunk_traceset,
events_request->before_chunk_trace,
events_request->event
);
- else {
+ } else {
guint nb_trace = lttv_traceset_number(ts);
g_assert((guint)events_request->trace < nb_trace &&
events_request->trace > -1);
lttv_hooks_call(events_request->before_chunk_traceset, ts);
- lttv_trace_add_hooks(trace,
- events_request->before_chunk_trace,
-
- events_request->event
- );
+ lttv_trace_add_hooks(trace, events_request->before_chunk_trace,
+ events_request->event);
}
}
}
lttv_trace_add_hooks(trace,
events_request->before_chunk_trace,
-
events_request->event
);
}
/* 5. After process traceset middle */
LttTime curTime = lttv_traceset_get_current_time(ts);
- /* - if current context time > traceset.end time */
- if(ltt_time_compare(curTime,
- lttv_traceset_get_time_span_real(ts).end_time) > 0) {
+ /* - if the iterator is not valid anymore (got to the end) */
+ if(bt_ctf_iter_read_event(ts->iter) == NULL) {
/* - For each req in list_in */
GSList *iter = list_in;
*/
//TODO ybrosseau 2012-07-10: || TRUE added since we only support
// traceset wide requests
- if(events_request->trace == -1 || TRUE)
+ if(events_request->trace == -1 || TRUE) {
lttv_process_traceset_end(ts,
events_request->after_chunk_traceset,
events_request->after_chunk_trace,
-
events_request->event);
-
-
- else {
+ } else {
guint nb_trace = lttv_traceset_number(ts);
g_assert(events_request->trace < nb_trace &&
events_request->trace > -1);
ptab = (LttvPluginTab *)g_object_get_data(G_OBJECT(page), "Tab_Plugin");
tab = ptab->tab;
}
-//TODO fdeslauriers 2012-07-06: Remove this popup when we support multiple traces
- traceset = lttvwindow_get_traceset(tab);
- if(traceset != NULL && lttv_traceset_number(traceset) > 0){
- GtkWidget *dialogue =
- gtk_message_dialog_new(
- GTK_WINDOW(gtk_widget_get_toplevel(widget)),
- GTK_DIALOG_MODAL|GTK_DIALOG_DESTROY_WITH_PARENT,
- GTK_MESSAGE_ERROR,
- GTK_BUTTONS_OK,
- "Loading multiple traces is not supported at the moment.");
- gtk_dialog_run(GTK_DIALOG(dialogue));
- gtk_widget_destroy(dialogue);
- return;
- }
-
+
/* Create a new traceset*/
- traceset = lttv_traceset_new();
+ traceset = tab->traceset_info->traceset;
+ if(traceset == NULL) {
+ traceset = lttv_traceset_new();
+ }
/* File open dialog management */
#ifdef BABEL_CLEANUP
GtkWidget *extra_live_button;
void zoom(GtkWidget * widget, double size)
{
-#ifdef BABEL_CLEANUP
+
TimeInterval time_span;
TimeWindow new_time_window;
LttTime current_time, time_delta;
- LttvTracesetContext *tsc;
+ LttvTraceset *ts;
GtkWidget * notebook = lookup_widget(widget, "MNotebook");
GtkWidget *page = gtk_notebook_get_nth_page(GTK_NOTEBOOK(notebook),
if(size == 1) return;
- tsc = LTTV_TRACESET_CONTEXT(tab->traceset_info->traceset_context);
- time_span = tsc->time_span;
+ ts = lttvwindow_get_traceset(tab);
+ time_span = lttv_traceset_get_time_span_real(ts);
new_time_window = tab->time_window;
current_time = tab->current_time;
} else {
time_change_manager(tab, new_time_window);
}
-
-#endif /* BABEL_CLEANUP */
}
void zoom_in(GtkWidget * widget, gpointer user_data)
gtk_notebook_get_current_page(GTK_NOTEBOOK(notebook)));
Tab *copy_tab;
- if(!page) {
+ if(!page || TRUE ) {
copy_tab = NULL;
} else {
LttvPluginTab *ptab;
on_button_new_clicked (GtkButton *button,
gpointer user_data)
{
+#ifdef BABEL_CLEANUP
create_new_window((GtkWidget*)button, user_data, TRUE);
+#else
+ GtkWidget *dialogue =
+ gtk_message_dialog_new(
+ GTK_WINDOW(gtk_widget_get_toplevel(button)),
+ GTK_DIALOG_MODAL|GTK_DIALOG_DESTROY_WITH_PARENT,
+ GTK_MESSAGE_ERROR,
+ GTK_BUTTONS_OK,
+ "Opening multiple windows is disabled.");
+ gtk_dialog_run(GTK_DIALOG(dialogue));
+ gtk_widget_destroy(dialogue);
+#endif
}
void
TimeInterval time_span;
LttvTraceset *ts = tab->traceset_info->traceset;
- time_span.start_time =ltt_time_from_uint64( lttv_traceset_get_timestamp_begin(ts));
- time_span.end_time = ltt_time_from_uint64(lttv_traceset_get_timestamp_end(ts));
+ time_span = lttv_traceset_get_time_span_real(ts);
LttTime start_time = new_time_window.start_time;
LttTime end_time = new_time_window.end_time;
LttTime new_time = lttv_traceset_position_get_time(pos);
/* Put the context in a state coherent position */
-#ifdef BABEL_CLEANUP
- lttv_state_traceset_seek_time_closest((LttvTracesetState*)tsc, ltt_time_zero);
-#endif /* BABEL_CLEANUP */
+
+ lttv_state_traceset_seek_time_closest(tab->traceset_info->traceset, ltt_time_zero);
+
current_time_change_manager(tab, new_time);
set_current_position(tab, pos);
{
Tab *tab = (Tab *)user_data;
LttvTraceset * ts =tab->traceset_info->traceset;
- TimeInterval time_span = lttv_traceset_get_time_span(ts);
+ TimeInterval time_span = lttv_traceset_get_time_span_real(ts);
TimeWindow new_time_window = tab->time_window;
new_time_window.start_time = timebar_get_start_time(timebar);
{
Tab *tab = (Tab *)user_data;
LttvTraceset * ts =tab->traceset_info->traceset;
- TimeInterval time_span = lttv_traceset_get_time_span(ts);
+ TimeInterval time_span = lttv_traceset_get_time_span_real(ts);
TimeWindow new_time_window = tab->time_window;
gdouble page_size;
LttvTraceset * ts = tab->traceset_info->traceset;
- TimeInterval time_span = lttv_traceset_get_time_span(ts);
+ TimeInterval time_span = lttv_traceset_get_time_span_real(ts);
time = ltt_time_add(ltt_time_from_double(value),
time_span.start_time);
tab->traceset_info->traceset_context =
g_object_new(LTTV_TRACESET_STATS_TYPE, NULL);
//add state update hooks
- lttv_state_add_event_hooks(
- (LttvTracesetState*)tab->traceset_info->traceset_context);
#endif //BABEL_CLEANUP
+ lttv_state_add_event_hooks(
+ tab->traceset_info->traceset);
+
//determine the current_time and time_window of the tab
#if 0
if(copy_tab != NULL){