X-Git-Url: https://git.lttng.org/?p=lttv.git;a=blobdiff_plain;f=lttv%2Fmodules%2Fgui%2Flttvwindow%2Flttvwindow%2Fcallbacks.c;h=9b70ee3f8c8c4f5e183b10c38a4cb475a02e076a;hp=34bce0a9bfd066e6e9832ea48a46e2657025bd8c;hb=e40cdd19296a4fbacf0738fb3671f6d0503d9e99;hpb=9aaa78dc9323698c4c44e5aaa24322d0c9e26dab diff --git a/lttv/modules/gui/lttvwindow/lttvwindow/callbacks.c b/lttv/modules/gui/lttvwindow/lttvwindow/callbacks.c index 34bce0a9..9b70ee3f 100644 --- a/lttv/modules/gui/lttvwindow/lttvwindow/callbacks.c +++ b/lttv/modules/gui/lttvwindow/lttvwindow/callbacks.c @@ -38,6 +38,7 @@ #include #include #include +#include #ifdef BABEL_CLEANUP #include #include @@ -226,7 +227,6 @@ void insert_viewer(GtkWidget* widget, lttvwindow_viewer_constructor constructor) int SetTraceset(Tab * tab, LttvTraceset *traceset) { - guint i; TimeInterval time_span; TimeWindow new_time_window; LttTime new_current_time; @@ -283,7 +283,7 @@ int SetTraceset(Tab * tab, LttvTraceset *traceset) } #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; @@ -314,7 +314,46 @@ int SetTraceset(Tab * tab, LttvTraceset *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); @@ -710,14 +749,14 @@ void open_traceset(GtkWidget * widget, gpointer user_data) gboolean lttvwindow_process_pending_requests(Tab *tab) { - #ifdef BABEL_CLEANUP - LttvTracesetContext *tsc; - LttvTracefileContext *tfc; + + LttvTraceset *ts; + GSList *list_in = NULL; LttTime end_time; guint end_nb_events; guint count; - LttvTracesetContextPosition *end_position; + LttvTracesetPosition *end_position; if(lttvwindow_preempt_count > 0) return TRUE; @@ -729,7 +768,7 @@ gboolean lttvwindow_process_pending_requests(Tab *tab) /* There is no events requests pending : we should never have been called! */ g_assert(g_slist_length(list_out) != 0); - tsc = LTTV_TRACESET_CONTEXT(tab->traceset_info->traceset_context); + ts = tab->traceset_info->traceset; //set the cursor to be X shape, indicating that the computer is busy in doing its job #if 0 @@ -746,7 +785,7 @@ gboolean lttvwindow_process_pending_requests(Tab *tab) /* Preliminary check for no trace in traceset */ /* Unregister the routine if empty, empty list_out too */ - if(lttv_traceset_number(tsc->ts) == 0) { + if(lttv_traceset_number(ts) == 0) { /* - For each req in list_out */ GSList *iter = list_out; @@ -759,13 +798,13 @@ gboolean lttvwindow_process_pending_requests(Tab *tab) /* - Call end request for req */ if(events_request->servicing == TRUE) - lttv_hooks_call(events_request->after_request, (gpointer)tsc); + lttv_hooks_call(events_request->after_request, (gpointer)ts); /* - remove req from list_out */ /* Destroy the request */ remove = TRUE; free_data = TRUE; - + //TODO ybrosseau: This if is always true /* Go to next */ if(remove) { @@ -785,9 +824,9 @@ gboolean lttvwindow_process_pending_requests(Tab *tab) guint iter_trace=0; for(iter_trace=0; - iter_tracets); + iter_tracets, iter_trace); + LttvTrace *trace_v = lttv_traceset_get(ts, iter_trace); if(lttvwindowtraces_lock(trace_v) != 0) { g_critical("Foreground processing : Unable to get trace lock"); @@ -797,9 +836,10 @@ gboolean lttvwindow_process_pending_requests(Tab *tab) } /* 0.2 Seek tracefiles positions to context position */ +#ifdef BABEL_CLEANUP //g_assert(lttv_process_traceset_seek_position(tsc, sync_position) == 0); lttv_process_traceset_synchronize_tracefiles(tsc); - +#endif /* Events processing algorithm implementation */ /* Warning : the gtk_events_pending takes a LOT of cpu time. So what we do @@ -856,7 +896,8 @@ gboolean lttvwindow_process_pending_requests(Tab *tab) if(event_request_lpos->start_position != NULL && event_request_list_out->start_position != NULL) { - comp = lttv_traceset_context_pos_pos_compare + //TODO ybrosseau: this compare is in fact an equal, so the behavior might not be right. + comp = lttv_traceset_position_time_compare (event_request_lpos->start_position, event_request_list_out->start_position); } else { @@ -879,7 +920,7 @@ gboolean lttvwindow_process_pending_requests(Tab *tab) if(event_request_lpos != NULL && event_request_lpos->start_position != NULL) { - lpos_start_time = lttv_traceset_context_position_get_time( + lpos_start_time = lttv_traceset_position_get_time( event_request_lpos->start_position); } @@ -919,7 +960,7 @@ gboolean lttvwindow_process_pending_requests(Tab *tab) /* 1.2 Seek */ { - tfc = lttv_traceset_context_get_current_tfc(tsc); + g_assert(g_slist_length(list_in)>0); EventsRequest *events_request = g_slist_nth_data(list_in, 0); #ifdef DEBUG @@ -929,20 +970,20 @@ gboolean lttvwindow_process_pending_requests(Tab *tab) /* 1.2.1 If first request in list_in is a time request */ if(events_request->start_position == NULL) { /* - If first req in list_in start time != current time */ - if(tfc == NULL || ltt_time_compare(events_request->start_time, - tfc->timestamp) != 0) + //TODO ybrosseau: if commented out, since it was only affecting the g_debug + //if(tfc == NULL || ltt_time_compare(events_request->start_time, + // tfc->timestamp) != 0) /* - 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_state_traceset_seek_time_closest(LTTV_TRACESET_STATE(tsc), + lttv_state_traceset_seek_time_closest(ts, events_request->start_time); /* Process the traceset with only state hooks */ #ifdef DEBUG seek_count = #endif //DEBUG - lttv_process_traceset_middle(tsc, + lttv_process_traceset_middle(ts, events_request->start_time, G_MAXUINT, NULL); #ifdef DEBUG @@ -952,48 +993,51 @@ gboolean lttvwindow_process_pending_requests(Tab *tab) } else { LttTime pos_time; - LttvTracefileContext *tfc = - lttv_traceset_context_get_current_tfc(tsc); + //LttvTracefileContext *tfc = + // lttv_traceset_context_get_current_tfc(tsc); /* Else, the first request in list_in is a position request */ /* If first req in list_in pos != current pos */ g_assert(events_request->start_position != NULL); g_debug("SEEK POS time : %lu, %lu", - lttv_traceset_context_position_get_time( + lttv_traceset_position_get_time( events_request->start_position).tv_sec, - lttv_traceset_context_position_get_time( + lttv_traceset_position_get_time( events_request->start_position).tv_nsec); - if(tfc) { - g_debug("SEEK POS context time : %lu, %lu", - tfc->timestamp.tv_sec, - tfc->timestamp.tv_nsec); + /*if(tfc) {*/ if(0) { + /* g_debug("SEEK POS context time : %lu, %lu", + tfc->timestamp.tv_sec, + tfc->timestamp.tv_nsec); */ } else { g_debug("SEEK POS context time : %lu, %lu", ltt_time_infinite.tv_sec, ltt_time_infinite.tv_nsec); } g_assert(events_request->start_position != NULL); - if(lttv_traceset_context_ctx_pos_compare(tsc, - events_request->start_position) != 0) { + //TODO ybrosseau: for now, always seek + if(/*lttv_traceset_context_ctx_pos_compare(tsc, + events_request->start_position) != 0*/1) { /* 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_context_position_get_time( + pos_time = lttv_traceset_position_get_time( events_request->start_position); - lttv_state_traceset_seek_time_closest(LTTV_TRACESET_STATE(tsc), + 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(tsc, + lttv_process_traceset_middle(ts, ltt_time_infinite, G_MAXUINT, events_request->start_position); - g_assert(lttv_traceset_context_ctx_pos_compare(tsc, - events_request->start_position) == 0); + + //g_assert(lttv_traceset_context_ctx_pos_compare(tsc, + // events_request->start_position) == 0); } @@ -1003,7 +1047,6 @@ gboolean lttvwindow_process_pending_requests(Tab *tab) /* 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 */ @@ -1011,32 +1054,31 @@ gboolean lttvwindow_process_pending_requests(Tab *tab) /* - begin request hooks called * - servicing = TRUE */ - lttv_hooks_call(events_request->before_request, (gpointer)tsc); + lttv_hooks_call(events_request->before_request, (gpointer)ts); events_request->servicing = TRUE; } /* 1.3.2 call before chunk * 1.3.3 events hooks added */ - if(events_request->trace == -1) - lttv_process_traceset_begin(tsc, + //TODO ybrosseau 2012-07-10: || TRUE added since we only support + // traceset wide requests + if(events_request->trace == -1 || TRUE) { + + lttv_process_traceset_begin(ts, events_request->before_chunk_traceset, events_request->before_chunk_trace, - events_request->before_chunk_tracefile, - events_request->event, - events_request->event_by_id_channel); - else { - guint nb_trace = lttv_traceset_number(tsc->ts); + events_request->event + ); + } else { + guint nb_trace = lttv_traceset_number(ts); g_assert((guint)events_request->trace < nb_trace && events_request->trace > -1); - LttvTraceContext *tc = tsc->traces[events_request->trace]; + LttvTrace *trace = lttv_traceset_get(ts, events_request->trace); - lttv_hooks_call(events_request->before_chunk_traceset, tsc); + lttv_hooks_call(events_request->before_chunk_traceset, ts); - lttv_trace_context_add_hooks(tc, - events_request->before_chunk_trace, - events_request->before_chunk_tracefile, - events_request->event, - events_request->event_by_id_channel); + lttv_trace_add_hooks(trace, events_request->before_chunk_trace, + events_request->event); } } } @@ -1054,26 +1096,26 @@ gboolean lttvwindow_process_pending_requests(Tab *tab) /* - Call before chunk * - events hooks added */ - if(events_request->trace == -1) - lttv_process_traceset_begin(tsc, + //TODO ybrosseau 2012-07-10: || TRUE added since we only support + // traceset wide requests + if(events_request->trace == -1 || TRUE) + lttv_process_traceset_begin(ts, events_request->before_chunk_traceset, events_request->before_chunk_trace, - events_request->before_chunk_tracefile, - events_request->event, - events_request->event_by_id_channel); + events_request->event + ); else { - guint nb_trace = lttv_traceset_number(tsc->ts); + guint nb_trace = lttv_traceset_number(ts); g_assert((guint)events_request->trace < nb_trace && events_request->trace > -1); - LttvTraceContext *tc = tsc->traces[events_request->trace]; + LttvTrace *trace = lttv_traceset_get(ts, events_request->trace); - lttv_hooks_call(events_request->before_chunk_traceset, tsc); + lttv_hooks_call(events_request->before_chunk_traceset, ts); - lttv_trace_context_add_hooks(tc, + lttv_trace_add_hooks(trace, events_request->before_chunk_trace, - events_request->before_chunk_tracefile, - events_request->event, - events_request->event_by_id_channel); + events_request->event + ); } iter = g_slist_next(iter); @@ -1081,7 +1123,7 @@ gboolean lttvwindow_process_pending_requests(Tab *tab) } { - tfc = lttv_traceset_context_get_current_tfc(tsc); + /* 2.1 For each req of list_out */ GSList *iter = list_out; @@ -1094,7 +1136,7 @@ gboolean lttvwindow_process_pending_requests(Tab *tab) /* if req.start time == current context time * or req.start position == current position*/ - if( ltt_time_compare(events_request->start_time, + /* if( ltt_time_compare(events_request->start_time, tfc->timestamp) == 0 || (events_request->start_position != NULL @@ -1102,6 +1144,9 @@ gboolean lttvwindow_process_pending_requests(Tab *tab) lttv_traceset_context_ctx_pos_compare(tsc, events_request->start_position) == 0) ) { + */ + if(lttv_traceset_position_compare_current(ts, events_request->start_position) == 0) { + /* - Add to list_in, remove from list_out */ list_in = g_slist_append(list_in, events_request); remove = TRUE; @@ -1112,32 +1157,33 @@ gboolean lttvwindow_process_pending_requests(Tab *tab) /* - begin request hooks called * - servicing = TRUE */ - lttv_hooks_call(events_request->before_request, (gpointer)tsc); + lttv_hooks_call(events_request->before_request, (gpointer)ts); events_request->servicing = TRUE; } /* call before chunk * events hooks added */ - if(events_request->trace == -1) - lttv_process_traceset_begin(tsc, + //TODO ybrosseau 2012-07-10: || TRUE added since we only support + // traceset wide requests + if(events_request->trace == -1 || TRUE) + lttv_process_traceset_begin(ts, events_request->before_chunk_traceset, events_request->before_chunk_trace, - events_request->before_chunk_tracefile, - events_request->event, - events_request->event_by_id_channel); + events_request->event + ); else { - guint nb_trace = lttv_traceset_number(tsc->ts); + guint nb_trace = lttv_traceset_number(ts); g_assert((guint)events_request->trace < nb_trace && events_request->trace > -1); - LttvTraceContext *tc = tsc->traces[events_request->trace]; + LttvTrace* trace = lttv_traceset_get(ts,events_request->trace); - lttv_hooks_call(events_request->before_chunk_traceset, tsc); + lttv_hooks_call(events_request->before_chunk_traceset, ts); - lttv_trace_context_add_hooks(tc, - events_request->before_chunk_trace, - events_request->before_chunk_tracefile, - events_request->event, - events_request->event_by_id_channel); + lttv_trace_add_hooks(trace, + events_request->before_chunk_trace, + + events_request->event); + } @@ -1218,7 +1264,7 @@ gboolean lttvwindow_process_pending_requests(Tab *tab) EventsRequest *events_request = (EventsRequest*)iter->data; if(events_request->end_position != NULL && end_position != NULL && - lttv_traceset_context_pos_pos_compare(events_request->end_position, + lttv_traceset_position_time_compare(events_request->end_position, end_position) <0) end_position = events_request->end_position; } @@ -1232,7 +1278,7 @@ gboolean lttvwindow_process_pending_requests(Tab *tab) EventsRequest *events_request = (EventsRequest*)iter->data; if(events_request->end_position != NULL && end_position != NULL && - lttv_traceset_context_pos_pos_compare(events_request->end_position, + lttv_traceset_position_time_compare(events_request->end_position, end_position) <0) end_position = events_request->end_position; } @@ -1240,24 +1286,25 @@ gboolean lttvwindow_process_pending_requests(Tab *tab) { /* 4. Call process traceset middle */ - g_debug("Calling process traceset middle with %p, %lu sec %lu nsec, %u nb ev, %p end pos", tsc, end_time.tv_sec, end_time.tv_nsec, end_nb_events, end_position); - count = lttv_process_traceset_middle(tsc, end_time, end_nb_events, end_position); + g_debug("Calling process traceset middle with %p, %lu sec %lu nsec, %u nb ev, %p end pos", ts, end_time.tv_sec, end_time.tv_nsec, end_nb_events, end_position); + count = lttv_process_traceset_middle(ts, end_time, end_nb_events, end_position); +#ifdef BABEL_CLEANUP tfc = lttv_traceset_context_get_current_tfc(tsc); if(tfc != NULL) g_debug("Context time after middle : %lu, %lu", tfc->timestamp.tv_sec, tfc->timestamp.tv_nsec); else g_debug("End of trace reached after middle."); - +#endif } + { /* 5. After process traceset middle */ - tfc = lttv_traceset_context_get_current_tfc(tsc); - /* - if current context time > traceset.end time */ - if(tfc == NULL || ltt_time_compare(tfc->timestamp, - tsc->time_span.end_time) > 0) { + LttTime curTime = lttv_traceset_get_current_time(ts); + /* - 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; @@ -1270,33 +1317,33 @@ gboolean lttvwindow_process_pending_requests(Tab *tab) /* - Remove events hooks for req * - Call end chunk for req */ - - if(events_request->trace == -1) - lttv_process_traceset_end(tsc, + //TODO ybrosseau 2012-07-10: || TRUE added since we only support + // traceset wide requests + if(events_request->trace == -1 || TRUE) + lttv_process_traceset_end(ts, events_request->after_chunk_traceset, events_request->after_chunk_trace, - events_request->after_chunk_tracefile, - events_request->event, - events_request->event_by_id_channel); + + events_request->event); else { - guint nb_trace = lttv_traceset_number(tsc->ts); + guint nb_trace = lttv_traceset_number(ts); g_assert(events_request->trace < nb_trace && events_request->trace > -1); - LttvTraceContext *tc = tsc->traces[events_request->trace]; + LttvTrace *trace = lttv_traceset_get(ts,events_request->trace); - lttv_trace_context_remove_hooks(tc, + lttv_trace_remove_hooks(trace, events_request->after_chunk_trace, - events_request->after_chunk_tracefile, - events_request->event, - events_request->event_by_id_channel); - lttv_hooks_call(events_request->after_chunk_traceset, tsc); + + events_request->event); + + lttv_hooks_call(events_request->after_chunk_traceset, ts); } /* - Call end request for req */ - lttv_hooks_call(events_request->after_request, (gpointer)tsc); + lttv_hooks_call(events_request->after_request, (gpointer)ts); /* - remove req from list_in */ /* Destroy the request */ @@ -1329,34 +1376,33 @@ gboolean lttvwindow_process_pending_requests(Tab *tab) /* - Remove events hooks for req * - Call end chunk for req */ - if(events_request->trace == -1) - lttv_process_traceset_end(tsc, + //TODO ybrosseau 2012-07-10: || TRUE added since we only support + // traceset wide requests + if(events_request->trace == -1 || TRUE) { + lttv_process_traceset_end(ts, events_request->after_chunk_traceset, events_request->after_chunk_trace, - events_request->after_chunk_tracefile, - events_request->event, - events_request->event_by_id_channel); - - else { - guint nb_trace = lttv_traceset_number(tsc->ts); + events_request->event); + } else { + guint nb_trace = lttv_traceset_number(ts); g_assert(events_request->trace < nb_trace && events_request->trace > -1); - LttvTraceContext *tc = tsc->traces[events_request->trace]; + LttvTrace *trace = lttv_traceset_get(ts, events_request->trace); - lttv_trace_context_remove_hooks(tc, + lttv_trace_remove_hooks(trace, events_request->after_chunk_trace, - events_request->after_chunk_tracefile, - events_request->event, - events_request->event_by_id_channel); - lttv_hooks_call(events_request->after_chunk_traceset, tsc); + events_request->event); + + + lttv_hooks_call(events_request->after_chunk_traceset, ts); } /* - req.num -= count */ g_assert(events_request->num_events >= count); events_request->num_events -= count; - g_assert(tfc != NULL); + //g_assert(tfc != NULL); /* - if req.num == 0 * or * current context time >= req.end time @@ -1369,19 +1415,19 @@ gboolean lttvwindow_process_pending_requests(Tab *tab) || events_request->stop_flag == TRUE || - ltt_time_compare(tfc->timestamp, + ltt_time_compare(lttv_traceset_get_current_time(ts), events_request->end_time) >= 0 || (events_request->end_position != NULL && - lttv_traceset_context_ctx_pos_compare(tsc, + lttv_traceset_position_compare_current(ts, events_request->end_position) == 0) ) { g_assert(events_request->servicing == TRUE); /* - Call end request for req * - remove req from list_in */ - lttv_hooks_call(events_request->after_request, (gpointer)tsc); + lttv_hooks_call(events_request->after_request, (gpointer)ts); /* - remove req from list_in */ /* Destroy the request */ remove = TRUE; @@ -1421,9 +1467,9 @@ gboolean lttvwindow_process_pending_requests(Tab *tab) /* 1.1. Use current postition as start position */ if(events_request->start_position != NULL) - lttv_traceset_context_position_destroy(events_request->start_position); - events_request->start_position = lttv_traceset_context_position_new(tsc); - lttv_traceset_context_position_save(tsc, events_request->start_position); + lttv_traceset_destroy_position(events_request->start_position); + events_request->start_position = lttv_traceset_create_current_position(ts); + /* 1.2. Remove start time */ events_request->start_time = ltt_time_infinite; @@ -1450,15 +1496,17 @@ gboolean lttvwindow_process_pending_requests(Tab *tab) } /* C Unlock Traces */ { +#ifdef BABEL_CLEANUP lttv_process_traceset_get_sync_data(tsc); +#endif //lttv_traceset_context_position_save(tsc, sync_position); guint iter_trace; for(iter_trace=0; - iter_tracets); + iter_tracets, iter_trace); + LttvTrace *trace_v = lttv_traceset_get(ts, iter_trace); lttvwindowtraces_unlock(trace_v); } @@ -1490,7 +1538,7 @@ gboolean lttvwindow_process_pending_requests(Tab *tab) return FALSE; */ - #endif /* BABEL_CLEANUP */ + } #undef list_out @@ -1500,8 +1548,8 @@ gboolean lttvwindow_process_pending_requests(Tab *tab) static gboolean live_trace_update_handler(Tab *tab) { - unsigned int updated_count; #ifdef BABEL_CLEANUP + unsigned int updated_count; LttvTracesetContext *tsc = LTTV_TRACESET_CONTEXT(tab->traceset_info->traceset_context); TimeInterval initial_time_span = tsc->time_span; TimeInterval updated_time_span; @@ -1541,7 +1589,7 @@ live_trace_update_handler(Tab *tab) static void lttvwindow_add_trace(Tab *tab, LttvTrace *trace_v) { - #ifdef BABEL_CLEANUP +#ifdef BABEL_CLEANUP LttvTraceset *traceset = tab->traceset_info->traceset; guint i; guint num_traces = lttv_traceset_number(traceset); @@ -1613,7 +1661,7 @@ static void lttvwindow_add_trace(Tab *tab, LttvTrace *trace_v) void add_trace(GtkWidget * widget, gpointer user_data) { - LttvTraceset * traceset; + LttvTraceset * traceset = NULL; const char * path; char abs_path[PATH_MAX]; gint id; @@ -1632,10 +1680,16 @@ void add_trace(GtkWidget * widget, gpointer user_data) ptab = (LttvPluginTab *)g_object_get_data(G_OBJECT(page), "Tab_Plugin"); tab = ptab->tab; } + /* Create a new traceset*/ - traceset = lttv_traceset_new(); + traceset = tab->traceset_info->traceset; + if(traceset == NULL) { + traceset = lttv_traceset_new(); + } /* File open dialog management */ - GtkWidget *extra_live_button; +#ifdef BABEL_CLEANUP + GtkWidget *extra_live_button; +#endif //babel_cleanup GtkFileChooser * file_chooser = GTK_FILE_CHOOSER( gtk_file_chooser_dialog_new ("Select a trace", @@ -1644,12 +1698,12 @@ void add_trace(GtkWidget * widget, gpointer user_data) GTK_STOCK_CANCEL, GTK_RESPONSE_CANCEL, GTK_STOCK_OPEN, GTK_RESPONSE_ACCEPT, NULL)); - +#ifdef BABEL_CLEANUP /* Button to indicate the opening of a live trace */ extra_live_button = gtk_check_button_new_with_mnemonic ("Trace is live (currently being writen)"); gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (extra_live_button), FALSE); gtk_file_chooser_set_extra_widget (GTK_FILE_CHOOSER (file_chooser), extra_live_button); - +#endif //babel_cleanup gtk_file_chooser_set_show_hidden (file_chooser, TRUE); if(remember_trace_dir[0] != '\0') gtk_file_chooser_set_filename(file_chooser, remember_trace_dir); @@ -1725,7 +1779,7 @@ void add_trace(GtkWidget * widget, gpointer user_data) void remove_trace(GtkWidget *widget, gpointer user_data) { - #ifdef BABEL_CLEANUP +#ifdef BABEL_CLEANUP LttTrace *trace; LttvTrace * trace_v; LttvTraceset * traceset; @@ -2067,11 +2121,11 @@ void save_as(GtkWidget * widget, gpointer user_data) 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), @@ -2088,8 +2142,8 @@ void zoom(GtkWidget * widget, double size) 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; @@ -2151,8 +2205,6 @@ void zoom(GtkWidget * widget, double size) } else { time_change_manager(tab, new_time_window); } - -#endif /* BABEL_CLEANUP */ } void zoom_in(GtkWidget * widget, gpointer user_data) @@ -2216,7 +2268,7 @@ LttvPluginTab *create_new_tab(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; @@ -3038,7 +3090,19 @@ void 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 @@ -3257,9 +3321,8 @@ void time_change_manager (Tab *tab, 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; @@ -3347,33 +3410,26 @@ void current_time_change_manager (Tab *tab, tab->current_time_manager_lock = FALSE; } -void current_position_change_manager(Tab *tab, - LttvTracesetPosition *pos) +void current_position_change_manager(Tab *tab, LttvTracesetPosition *pos) { - #ifdef BABEL_CLEANUP - LttvTracesetContext *tsc = - LTTV_TRACESET_CONTEXT(tab->traceset_info->traceset_context); - int retval; - - retval= lttv_process_traceset_seek_position(tsc, pos); - g_assert_cmpint(retval, ==, 0); - LttTime new_time = lttv_traceset_context_position_get_time(pos); + lttv_traceset_seek_to_position( pos); + + LttTime new_time = lttv_traceset_position_get_time(pos); /* Put the context in a state coherent position */ - lttv_state_traceset_seek_time_closest((LttvTracesetState*)tsc, ltt_time_zero); - + + 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); - #endif /* BABEL_CLEANUP */ } static void on_timebar_starttime_changed(Timebar *timebar, gpointer user_data) { - 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); @@ -3407,10 +3463,9 @@ static void on_timebar_starttime_changed(Timebar *timebar, static void on_timebar_endtime_changed(Timebar *timebar, gpointer user_data) { - 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; @@ -3452,7 +3507,6 @@ static void on_timebar_currenttime_changed(Timebar *timebar, void scroll_value_changed_cb(GtkWidget *scrollbar, gpointer user_data) { - Tab *tab = (Tab *)user_data; TimeWindow new_time_window; LttTime time; @@ -3462,7 +3516,7 @@ void scroll_value_changed_cb(GtkWidget *scrollbar, 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); @@ -3973,9 +4027,10 @@ void init_tab(Tab *tab, MainWindow * mw, Tab *copy_tab, 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){