X-Git-Url: http://git.liburcu.org/?a=blobdiff_plain;f=lttv%2Fmodules%2Fgui%2Flttvwindow%2Flttvwindow%2Fcallbacks.c;h=018947aaf9778e05825c3052fa87a8207fe4c2fe;hb=7c3c01d14690eee4d3c262f300a888680ae7a053;hp=7243082e325ea8a209f061d5700301b2274ef643;hpb=68764dfffffe968cf26a3ed26544597cc5edfff1;p=lttv.git diff --git a/lttv/modules/gui/lttvwindow/lttvwindow/callbacks.c b/lttv/modules/gui/lttvwindow/lttvwindow/callbacks.c index 7243082e..018947aa 100644 --- a/lttv/modules/gui/lttvwindow/lttvwindow/callbacks.c +++ b/lttv/modules/gui/lttvwindow/lttvwindow/callbacks.c @@ -31,15 +31,17 @@ #include "callbacks.h" #include "interface.h" #include "support.h" -#include -#include -#include +#include #include #include #include +#include +#include +#ifdef BABEL_CLEANUP #include -#include #include +#endif /* BABEL_CLEANUP */ +#include #include #include #include @@ -49,6 +51,10 @@ #include #include +#include +#include +#include + static LttTime lttvwindow_default_time_width = { 1, 0 }; #define CLIP_BUF 256 // size of clipboard buffer @@ -218,13 +224,12 @@ 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; - LttvTracesetContext *tsc = - LTTV_TRACESET_CONTEXT(tab->traceset_info->traceset_context); +#ifdef BABEL_CLEANUP // Perform time synchronization on the traces if (syncTraceset(tsc)) { @@ -274,11 +279,15 @@ int SetTraceset(Tab * tab, LttvTraceset *traceset) tsc = LTTV_TRACESET_CONTEXT(tab->traceset_info->traceset_context); } +#endif /*BABEL_CLEANUP*/ - time_span = tsc->time_span; + time_span = lttv_traceset_get_time_span_real(traceset); + + tab->traceset_info->traceset = traceset; + new_time_window = tab->time_window; - new_current_time = tab->current_time; - + new_current_time = tab->current_time; + /* 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 @@ -303,7 +312,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); @@ -311,6 +359,7 @@ int SetTraceset(Tab * tab, LttvTraceset *traceset) current_time_change_manager(tab, new_current_time); return retval; + } /** @@ -628,7 +677,8 @@ void delete_viewer(GtkWidget * widget, gpointer user_data) g_object_set_data(G_OBJECT(tab->viewer_container), "focused_viewer", NULL); } - +#if UNFINISHED_FEATURE +/* TODO ybrosseau 2012-03-15: Function is half implemented. Should be removed */ /* open_traceset will open a traceset saved in a file * Right now, it is not finished yet, (not working) * FIXME @@ -665,7 +715,7 @@ void open_traceset(GtkWidget * widget, gpointer user_data) } } - +#endif /* lttvwindow_process_pending_requests * * Process requests for parts of the trace from viewers. @@ -697,13 +747,14 @@ void open_traceset(GtkWidget * widget, gpointer user_data) gboolean lttvwindow_process_pending_requests(Tab *tab) { - 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; @@ -715,7 +766,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 @@ -732,7 +783,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; @@ -745,13 +796,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) { @@ -771,9 +822,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"); @@ -783,9 +834,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 @@ -842,7 +894,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 { @@ -865,7 +918,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); } @@ -905,26 +958,30 @@ 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 guint seek_count; +#endif /* 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 = - lttv_process_traceset_middle(tsc, +#endif //DEBUG + lttv_process_traceset_middle(ts, events_request->start_time, G_MAXUINT, NULL); #ifdef DEBUG @@ -934,46 +991,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 = - lttv_process_traceset_middle(tsc, +#endif + 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); } @@ -983,7 +1045,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 */ @@ -991,32 +1052,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); } } } @@ -1034,26 +1094,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); @@ -1061,7 +1121,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; @@ -1074,7 +1134,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 @@ -1082,6 +1142,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; @@ -1092,32 +1155,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); + } @@ -1198,7 +1262,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; } @@ -1212,7 +1276,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; } @@ -1220,24 +1284,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; @@ -1250,33 +1315,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 */ @@ -1309,34 +1374,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 @@ -1349,19 +1413,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; @@ -1401,9 +1465,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; @@ -1430,15 +1494,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); } @@ -1469,6 +1535,8 @@ gboolean lttvwindow_process_pending_requests(Tab *tab) NULL); return FALSE; */ + + } #undef list_out @@ -1478,8 +1546,8 @@ gboolean lttvwindow_process_pending_requests(Tab *tab) static gboolean live_trace_update_handler(Tab *tab) { +#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; @@ -1514,10 +1582,12 @@ live_trace_update_handler(Tab *tab) /* Timer will be recalled as long as there is files to update */ return (updated_count > 0); +#endif /* BABEL_CLEANUP */ } static void lttvwindow_add_trace(Tab *tab, LttvTrace *trace_v) { +#ifdef BABEL_CLEANUP LttvTraceset *traceset = tab->traceset_info->traceset; guint i; guint num_traces = lttv_traceset_number(traceset); @@ -1578,7 +1648,7 @@ static void lttvwindow_add_trace(Tab *tab, LttvTrace *trace_v) (GSourceFunc) live_trace_update_handler, tab); } - +#endif /* BABEL_CLEANUP */ } /* add_trace adds a trace into the current traceset. It first displays a @@ -1588,10 +1658,9 @@ static void lttvwindow_add_trace(Tab *tab, LttvTrace *trace_v) void add_trace(GtkWidget * widget, gpointer user_data) { - LttTrace *trace; - LttvTrace * trace_v; - LttvTraceset * traceset; - const char * dir; + + LttvTraceset * traceset = NULL; + const char * path; char abs_path[PATH_MAX]; gint id; MainWindow * mw_data = get_window_data_struct(widget); @@ -1610,8 +1679,15 @@ void add_trace(GtkWidget * widget, gpointer user_data) tab = ptab->tab; } + /* Create a new traceset*/ + 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", @@ -1619,78 +1695,70 @@ void add_trace(GtkWidget * widget, gpointer user_data) GTK_FILE_CHOOSER_ACTION_SELECT_FOLDER, GTK_STOCK_CANCEL, GTK_RESPONSE_CANCEL, GTK_STOCK_OPEN, GTK_RESPONSE_ACCEPT, - NULL)); - + 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); - id = gtk_dialog_run(GTK_DIALOG(file_chooser)); + gboolean closeFileChooserDialog = TRUE; - switch(id){ - case GTK_RESPONSE_ACCEPT: - case GTK_RESPONSE_OK: - dir = gtk_file_chooser_get_filename (file_chooser); + do + { + id = gtk_dialog_run(GTK_DIALOG(file_chooser)); + switch(id){ + case GTK_RESPONSE_ACCEPT: + case GTK_RESPONSE_OK: + path = gtk_file_chooser_get_filename (file_chooser); - strncpy(remember_trace_dir, dir, PATH_MAX); - strncat(remember_trace_dir, "/", PATH_MAX); - if(!dir || strlen(dir) == 0){ - break; - } - get_absolute_pathname(dir, abs_path); - trace_v = lttvwindowtraces_get_trace_by_name(abs_path); - if(trace_v == NULL) { - if(gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (extra_live_button))) { - trace = ltt_trace_open_live(abs_path); - } else { - trace = ltt_trace_open(abs_path); + strncpy(remember_trace_dir, path, PATH_MAX); + strncat(remember_trace_dir, "/", PATH_MAX); + if(!path || strlen(path) == 0){ + break; } - - if(trace == NULL) { - g_warning("cannot open trace %s", abs_path); - - 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, - "Cannot open trace : maybe you should enter in the trace " - "directory to select it ?"); - gtk_dialog_run(GTK_DIALOG(dialogue)); - gtk_widget_destroy(dialogue); - - } else { - trace_v = lttv_trace_new(trace); - lttvwindowtraces_add_trace(trace_v); - lttvwindow_add_trace(tab, trace_v); - } - } else { - lttvwindow_add_trace(tab, trace_v); - } - + get_absolute_pathname(path, abs_path); + + if(lttv_traceset_add_path(traceset,abs_path) != 0 ){ /*failure*/ - //update current tab - //update_traceset(mw_data); + g_warning("cannot open trace %s", abs_path); + strncpy(remember_trace_dir, "\0", PATH_MAX); + 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, + "Cannot open trace : maybe you should enter in the directory " + "to select it ?"); + gtk_dialog_run(GTK_DIALOG(dialogue)); + gtk_widget_destroy(dialogue); + closeFileChooserDialog = FALSE; + } + else{ + closeFileChooserDialog = TRUE; + SetTraceset(tab, traceset); + } + break; + //update current tab + //update_traceset(mw_data); - /* Call the updatetraceset hooks */ - - traceset = tab->traceset_info->traceset; - SetTraceset(tab, traceset); - // in expose now call_pending_read_hooks(mw_data); + // in expose now call_pending_read_hooks(mw_data); + + //lttvwindow_report_current_time(mw_data,&(tab->current_time)); - //lttvwindow_report_current_time(mw_data,&(tab->current_time)); - break; - case GTK_RESPONSE_REJECT: - case GTK_RESPONSE_CANCEL: - default: - break; - } + case GTK_RESPONSE_REJECT: + case GTK_RESPONSE_CANCEL: + default: + closeFileChooserDialog = TRUE; + break; + } + }while(!closeFileChooserDialog); + gtk_widget_destroy((GtkWidget*)file_chooser); } @@ -1709,6 +1777,7 @@ void add_trace(GtkWidget * widget, gpointer user_data) void remove_trace(GtkWidget *widget, gpointer user_data) { +#ifdef BABEL_CLEANUP LttTrace *trace; LttvTrace * trace_v; LttvTraceset * traceset; @@ -1797,6 +1866,7 @@ void remove_trace(GtkWidget *widget, gpointer user_data) SetTraceset(tab, (gpointer)traceset); } g_free(name); +#endif /* BABEL_CLEANUP */ } #if 0 @@ -2049,10 +2119,11 @@ void save_as(GtkWidget * widget, gpointer user_data) void zoom(GtkWidget * widget, double size) { + 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), @@ -2069,8 +2140,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; @@ -2195,7 +2266,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; @@ -2232,7 +2303,9 @@ void on_open_activate (GtkMenuItem *menuitem, gpointer user_data) { +#ifdef UNFINISHED_FEATURE open_traceset((GtkWidget*)menuitem, user_data); +#endif } @@ -2908,99 +2981,52 @@ void on_content_activate (GtkMenuItem *menuitem, gpointer user_data) { + char* filename = NULL, + *path; + GdkScreen *screen; + const char* relativePath = "doc/user/user_guide/html/index.html"; + filename = g_build_filename (g_get_current_dir(), relativePath, NULL); + path = g_strdup_printf ("ghelp://%s", filename); + + screen = gdk_screen_get_default(); + gtk_show_uri (screen, path, gtk_get_current_event_time(), NULL); + + g_free(filename); + g_free(path); g_info("Content\n"); } -static void -on_about_close_activate (GtkButton *button, - gpointer user_data) -{ - GtkWidget *about_widget = GTK_WIDGET(user_data); - - gtk_widget_destroy(about_widget); -} - void on_about_activate (GtkMenuItem *menuitem, gpointer user_data) { MainWindow *main_window = get_window_data_struct(GTK_WIDGET(menuitem)); - GtkWidget *window_widget = main_window->mwindow; - GtkWidget *about_widget = gtk_window_new(GTK_WINDOW_TOPLEVEL); - GtkWindow *about_window = GTK_WINDOW(about_widget); - gint window_width, window_height; - - gtk_window_set_title(about_window, "About Linux Trace Toolkit"); - - gtk_window_set_resizable(about_window, FALSE); - gtk_window_set_transient_for(about_window, GTK_WINDOW(window_widget)); - gtk_window_set_destroy_with_parent(about_window, TRUE); - gtk_window_set_modal(about_window, FALSE); - - /* Put the about window at the center of the screen */ - gtk_window_get_size(about_window, &window_width, &window_height); - gtk_window_move (about_window, - (gdk_screen_width() - window_width)/2, - (gdk_screen_height() - window_height)/2); - - GtkWidget *vbox = gtk_vbox_new(FALSE, 1); - - gtk_container_add(GTK_CONTAINER(about_widget), vbox); - - /* Text to show */ - GtkWidget *label1 = gtk_label_new(""); - gtk_misc_set_padding(GTK_MISC(label1), 10, 20); - gtk_label_set_markup(GTK_LABEL(label1), "\ -Linux Trace Toolkit " VERSION ""); - gtk_label_set_justify(GTK_LABEL(label1), GTK_JUSTIFY_CENTER); + gchar * authors[] = { "Yannick Brosseau", + "Francis Deslauriers", + "Mathieu Desnoyer", + "Michel Dagenais", + "Benoit Des Ligneris", + "Eric Clement", + "Xang-Xiu Yang", + "Tom Zanussi", + NULL }; + + static const gchar *comments = "Trace visualiser for LTTng 2.x data\ +\nInspired from the original Linux Trace Toolkit Visualizer made by Karim Yaghmour"; - GtkWidget *label2 = gtk_label_new(""); - gtk_misc_set_padding(GTK_MISC(label2), 10, 20); - gtk_label_set_markup(GTK_LABEL(label2), "\ -Contributors :\n\ -\n\ -Michel Dagenais (New trace format, lttv main)\n\ -Mathieu Desnoyers (Kernel Tracer, Directory structure, build with automake/conf,\n\ - lttv gui, control flow view, gui cooperative trace reading\n\ - scheduler with interruptible foreground and background\n\ - computation, detailed event list (rewrite), trace reading\n\ - library (rewrite))\n\ -Benoit Des Ligneris, Eric Clement (Cluster adaptation, work in progress)\n\ -Xang-Xiu Yang (new trace reading library and converter, lttv gui, \n\ - detailed event list and statistics view)\n\ -Tom Zanussi (RelayFS)\n\ -\n\ -Inspired from the original Linux Trace Toolkit Visualizer made by\n\ -Karim Yaghmour"); - - GtkWidget *label3 = gtk_label_new(""); - gtk_label_set_markup(GTK_LABEL(label3), "\ -Linux Trace Toolkit Viewer, Copyright (C) 2004, 2005, 2006\n\ - Michel Dagenais\n\ - Mathieu Desnoyers\n\ - Xang-Xiu Yang\n\ -Linux Trace Toolkit comes with ABSOLUTELY NO WARRANTY.\n\ -This is free software, and you are welcome to redistribute it\n\ -under certain conditions. See COPYING for details."); - gtk_misc_set_padding(GTK_MISC(label3), 10, 20); - - gtk_box_pack_start_defaults(GTK_BOX(vbox), label1); - gtk_box_pack_start_defaults(GTK_BOX(vbox), label2); - gtk_box_pack_start_defaults(GTK_BOX(vbox), label3); - - GtkWidget *hbox = gtk_hbox_new(TRUE, 0); - gtk_box_pack_end(GTK_BOX(vbox), hbox, FALSE, FALSE, 0); - GtkWidget *close_button = gtk_button_new_with_mnemonic("_Close"); - gtk_box_pack_end(GTK_BOX(hbox), close_button, FALSE, FALSE, 0); - gtk_container_set_border_width(GTK_CONTAINER(close_button), 20); - - g_signal_connect(G_OBJECT(close_button), "clicked", - G_CALLBACK(on_about_close_activate), - (gpointer)about_widget); - - gtk_widget_show_all(about_widget); + static const gchar *copyright = "Copyright \xc2\xa9 2004-2013"; + + gtk_show_about_dialog(main_window->mwindow, + "authors", authors, + "comments", comments, + "version", VERSION, + "program-name", "LTTV", + "license", "GPLv2, see COPYING file for details", + "website", "http://lttng.org/lttv/", + "copyright", copyright, + NULL); } @@ -3008,7 +3034,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 @@ -3022,7 +3060,9 @@ void on_button_open_clicked (GtkButton *button, gpointer user_data) { +#ifdef UNFINISHED_FEATURE open_traceset((GtkWidget*)button, user_data); +#endif } @@ -3216,14 +3256,18 @@ on_MNotebook_switch_page (GtkNotebook *notebook, void time_change_manager (Tab *tab, TimeWindow new_time_window) -{ +{ + /* Only one source of time change */ if(tab->time_manager_lock == TRUE) return; tab->time_manager_lock = TRUE; + TimeInterval time_span; + + LttvTraceset *ts = tab->traceset_info->traceset; + + time_span = lttv_traceset_get_time_span_real(ts); - 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 = new_time_window.end_time; @@ -3231,7 +3275,8 @@ void time_change_manager (Tab *tab, /* Set scrollbar */ GtkAdjustment *adjustment = gtk_range_get_adjustment(GTK_RANGE(tab->scrollbar)); - LttTime upper = ltt_time_sub(time_span.end_time, time_span.start_time); + LttTime upper = ltt_time_sub(time_span.end_time, time_span.start_time); + #if 0 gtk_range_set_increments(GTK_RANGE(tab->scrollbar), ltt_time_to_double(new_time_window.time_width) @@ -3286,6 +3331,8 @@ void time_change_manager (Tab *tab, set_time_window(tab, &new_time_window); tab->time_manager_lock = FALSE; + + } @@ -3307,19 +3354,15 @@ void current_time_change_manager (Tab *tab, tab->current_time_manager_lock = FALSE; } -void current_position_change_manager(Tab *tab, - LttvTracesetContextPosition *pos) +void current_position_change_manager(Tab *tab, LttvTracesetPosition *pos) { - LttvTracesetContext *tsc = - LTTV_TRACESET_CONTEXT(tab->traceset_info->traceset_context); - int retval; + lttv_traceset_seek_to_position( pos); - retval= lttv_process_traceset_seek_position(tsc, pos); - g_assert_cmpint(retval, ==, 0); - LttTime new_time = lttv_traceset_context_position_get_time(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); @@ -3329,9 +3372,8 @@ static void on_timebar_starttime_changed(Timebar *timebar, gpointer user_data) { Tab *tab = (Tab *)user_data; - LttvTracesetContext * tsc = - LTTV_TRACESET_CONTEXT(tab->traceset_info->traceset_context); - TimeInterval time_span = tsc->time_span; + LttvTraceset * ts =tab->traceset_info->traceset; + 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); @@ -3366,9 +3408,8 @@ static void on_timebar_endtime_changed(Timebar *timebar, gpointer user_data) { Tab *tab = (Tab *)user_data; - LttvTracesetContext * tsc = - LTTV_TRACESET_CONTEXT(tab->traceset_info->traceset_context); - TimeInterval time_span = tsc->time_span; + LttvTraceset * ts =tab->traceset_info->traceset; + TimeInterval time_span = lttv_traceset_get_time_span_real(ts); TimeWindow new_time_window = tab->time_window; @@ -3395,7 +3436,7 @@ static void on_timebar_endtime_changed(Timebar *timebar, new_time_window.end_time = end_time; /* Notify the time_manager */ - time_change_manager(tab, new_time_window); + time_change_manager(tab, new_time_window); } static void on_timebar_currenttime_changed(Timebar *timebar, gpointer user_data) @@ -3417,9 +3458,9 @@ void scroll_value_changed_cb(GtkWidget *scrollbar, gdouble value = gtk_adjustment_get_value(adjust); // gdouble upper, lower, ratio, page_size; gdouble page_size; - LttvTracesetContext * tsc = - LTTV_TRACESET_CONTEXT(tab->traceset_info->traceset_context); - TimeInterval time_span = tsc->time_span; + + LttvTraceset * ts = tab->traceset_info->traceset; + TimeInterval time_span = lttv_traceset_get_time_span_real(ts); time = ltt_time_add(ltt_time_from_double(value), time_span.start_time); @@ -3439,6 +3480,7 @@ void scroll_value_changed_cb(GtkWidget *scrollbar, time_change_manager(tab, new_time_window); + #if 0 //time_window = tab->time_window; @@ -3467,6 +3509,7 @@ void scroll_value_changed_cb(GtkWidget *scrollbar, /* call viewer hooks for new time window */ set_time_window(tab, &time_window); #endif //0 + } @@ -3710,8 +3753,7 @@ MainWindow *construct_main_window(MainWindow * parent) LttvIAttribute *attributes = LTTV_IATTRIBUTE(g_object_new(LTTV_ATTRIBUTE_TYPE, NULL)); LttvAttributeValue value; - Tab *new_tab; - + new_m_window = g_new(MainWindow, 1); // Add the object's information to the module's array @@ -3772,7 +3814,6 @@ MainWindow *construct_main_window(MainWindow * parent) "Tab_Plugin", ptab, (GDestroyNotify)tab_destructor); - new_tab = ptab->tab; } else { LttvPluginTab *ptab = g_object_new(LTTV_TYPE_PLUGIN_TAB, NULL); init_tab(ptab->tab, new_m_window, NULL, notebook, "Traceset"); @@ -3782,7 +3823,6 @@ MainWindow *construct_main_window(MainWindow * parent) "Tab_Plugin", ptab, (GDestroyNotify)tab_destructor); - new_tab = ptab->tab; } /* Insert default viewers */ @@ -3840,6 +3880,7 @@ MainWindow *construct_main_window(MainWindow * parent) void tab_destructor(LttvPluginTab * ptab) { +#ifdef BABEL_CLEANUP int i, nb, ref_count; LttvTrace * trace; Tab *tab = ptab->tab; @@ -3878,6 +3919,7 @@ void tab_destructor(LttvPluginTab * ptab) g_free(tab->traceset_info); //g_free(tab); g_object_unref(ptab); +#endif /* BABEL_CLEANUP */ } @@ -3887,6 +3929,7 @@ void tab_destructor(LttvPluginTab * ptab) void init_tab(Tab *tab, MainWindow * mw, Tab *copy_tab, GtkNotebook * notebook, char * label) { + GList * list; //Tab * tab; //LttvFilter *filter = NULL; @@ -3904,9 +3947,13 @@ void init_tab(Tab *tab, MainWindow * mw, Tab *copy_tab, /* Copy the previous tab's filter */ /* We can clone the filter, as we copy the trace set also */ /* The filter must always be in sync with the trace set */ + +#ifdef BABEL_CLEANUP tab->filter = lttv_filter_clone(copy_tab->filter); +#endif /* BABEL_CLEANUP */ } else { tab->traceset_info->traceset = lttv_traceset_new(); + tab->filter = NULL; } #ifdef DEBUG @@ -3916,21 +3963,18 @@ void init_tab(Tab *tab, MainWindow * mw, Tab *copy_tab, 0, 4); fflush(stdout); #endif //DEBUG - +// tab->time_manager_lock = FALSE; tab->current_time_manager_lock = FALSE; - +#ifdef BABEL_CLEANUP //FIXME copy not implemented in lower level tab->traceset_info->traceset_context = g_object_new(LTTV_TRACESET_STATS_TYPE, NULL); - g_assert(tab->traceset_info->traceset_context != NULL); - lttv_context_init( - LTTV_TRACESET_CONTEXT(tab->traceset_info->traceset_context), - tab->traceset_info->traceset); //add state update hooks +#endif //BABEL_CLEANUP lttv_state_add_event_hooks( - (LttvTracesetState*)tab->traceset_info->traceset_context); - + tab->traceset_info->traceset); + //determine the current_time and time_window of the tab #if 0 if(copy_tab != NULL){ @@ -4095,7 +4139,7 @@ void init_tab(Tab *tab, MainWindow * mw, Tab *copy_tab, lttvwindow_report_time_window(tab, time_window); lttvwindow_report_current_time(tab, ltt_time_zero); } - + LttvTraceset *traceset = tab->traceset_info->traceset; SetTraceset(tab, traceset); } @@ -4113,8 +4157,9 @@ gboolean execute_events_requests(Tab *tab) } -__EXPORT void create_main_window_with_trace_list(GSList *traces, gboolean is_live) +__EXPORT void create_main_window_with_trace_list(GSList *traces) { + GSList *iter = NULL; /* Create window */ @@ -4134,24 +4179,19 @@ __EXPORT void create_main_window_with_trace_list(GSList *traces, gboolean is_liv ptab = (LttvPluginTab *)g_object_get_data(G_OBJECT(page), "Tab_Plugin"); tab = ptab->tab; } - + + LttvTraceset * traceset = lttv_traceset_new(); for(iter=traces; iter!=NULL; iter=g_slist_next(iter)) { gchar *path = (gchar*)iter->data; /* Add trace */ gchar abs_path[PATH_MAX]; - LttvTrace *trace_v; - LttTrace *trace; + get_absolute_pathname(path, abs_path); - trace_v = lttvwindowtraces_get_trace_by_name(abs_path); - if(trace_v == NULL) { - if(is_live) { - trace = ltt_trace_open_live(abs_path); - } else { - trace = ltt_trace_open(abs_path); - } - if(trace == NULL) { - g_warning("cannot open trace %s", abs_path); + + if(lttv_traceset_add_path(traceset,abs_path) != 0 ){ /*failure*/ + + g_warning("cannot open trace %s", abs_path); GtkWidget *dialogue = gtk_message_dialog_new( @@ -4163,19 +4203,10 @@ __EXPORT void create_main_window_with_trace_list(GSList *traces, gboolean is_liv "to select it ?"); gtk_dialog_run(GTK_DIALOG(dialogue)); gtk_widget_destroy(dialogue); - } else { - trace_v = lttv_trace_new(trace); - lttvwindowtraces_add_trace(trace_v); - lttvwindow_add_trace(tab, trace_v); - } - } else { - lttvwindow_add_trace(tab, trace_v); } - } - - LttvTraceset *traceset; - - traceset = tab->traceset_info->traceset; - SetTraceset(tab, traceset); + else{ + SetTraceset(tab, traceset); + } + } }