X-Git-Url: http://git.liburcu.org/?a=blobdiff_plain;f=lttv%2Fmodules%2Fgui%2Flttvwindow%2Flttvwindow%2Fcallbacks.c;h=018947aaf9778e05825c3052fa87a8207fe4c2fe;hb=7c3c01d14690eee4d3c262f300a888680ae7a053;hp=401bb79c0b952cd43236882a839ab3ac3a2492d5;hpb=861fbe5f8862cd3797aecef4ab6903700a8aa837;p=lttv.git diff --git a/lttv/modules/gui/lttvwindow/lttvwindow/callbacks.c b/lttv/modules/gui/lttvwindow/lttvwindow/callbacks.c index 401bb79c..018947aa 100644 --- a/lttv/modules/gui/lttvwindow/lttvwindow/callbacks.c +++ b/lttv/modules/gui/lttvwindow/lttvwindow/callbacks.c @@ -31,13 +31,12 @@ #include "callbacks.h" #include "interface.h" #include "support.h" -#include -#include -#include +#include #include #include #include #include +#include #ifdef BABEL_CLEANUP #include #include @@ -226,7 +225,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,9 +281,7 @@ int SetTraceset(Tab * tab, LttvTraceset *traceset) } #endif /*BABEL_CLEANUP*/ - - time_span.start_time =ltt_time_from_uint64( lttv_traceset_get_timestamp_begin(traceset)); - time_span.end_time = ltt_time_from_uint64(lttv_traceset_get_timestamp_end(traceset)); + time_span = lttv_traceset_get_time_span_real(traceset); tab->traceset_info->traceset = traceset; @@ -316,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); @@ -712,14 +747,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; @@ -731,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 @@ -748,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; @@ -761,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) { @@ -787,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"); @@ -799,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 @@ -858,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 { @@ -881,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); } @@ -921,7 +958,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 @@ -931,20 +968,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 @@ -954,48 +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 = #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); } @@ -1005,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 */ @@ -1013,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); } } } @@ -1056,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); @@ -1083,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; @@ -1096,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 @@ -1104,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; @@ -1114,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); + } @@ -1220,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; } @@ -1234,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; } @@ -1242,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; @@ -1272,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 */ @@ -1331,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 @@ -1371,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; @@ -1423,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; @@ -1452,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); } @@ -1492,7 +1536,7 @@ gboolean lttvwindow_process_pending_requests(Tab *tab) return FALSE; */ - #endif /* BABEL_CLEANUP */ + } #undef list_out @@ -1502,8 +1546,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; @@ -1543,7 +1587,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); @@ -1615,7 +1659,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; @@ -1634,10 +1678,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", @@ -1646,12 +1696,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); @@ -1727,7 +1777,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; @@ -2069,11 +2119,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), @@ -2090,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; @@ -2153,8 +2203,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) @@ -2218,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; @@ -2949,90 +2997,36 @@ on_content_activate (GtkMenuItem *menuitem, } -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); - - 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_set_position(about_window, GTK_WIN_POS_CENTER_ALWAYS); - - 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); } @@ -3040,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 @@ -3259,9 +3265,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; @@ -3349,34 +3354,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) { - #ifdef BABEL_CLEANUP 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); @@ -3404,17 +3401,15 @@ static void on_timebar_starttime_changed(Timebar *timebar, /* Notify the time_manager */ time_change_manager(tab, new_time_window); -#endif /* BABEL_CLEANUP */ + } static void on_timebar_endtime_changed(Timebar *timebar, gpointer user_data) { - #ifdef BABEL_CLEANUP 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; @@ -3441,8 +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); - #endif /* BABEL_CLEANUP*/ + time_change_manager(tab, new_time_window); } static void on_timebar_currenttime_changed(Timebar *timebar, gpointer user_data) @@ -3457,7 +3451,6 @@ static void on_timebar_currenttime_changed(Timebar *timebar, void scroll_value_changed_cb(GtkWidget *scrollbar, gpointer user_data) { - #ifdef BABEL_CLEANUP Tab *tab = (Tab *)user_data; TimeWindow new_time_window; LttTime time; @@ -3465,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); @@ -3487,6 +3480,7 @@ void scroll_value_changed_cb(GtkWidget *scrollbar, time_change_manager(tab, new_time_window); + #if 0 //time_window = tab->time_window; @@ -3515,7 +3509,7 @@ void scroll_value_changed_cb(GtkWidget *scrollbar, /* call viewer hooks for new time window */ set_time_window(tab, &time_window); #endif //0 -#endif /* BABEL_CLEANUP */ + } @@ -3977,9 +3971,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){