#include "callbacks.h"
#include "interface.h"
#include "support.h"
-#include <ltt/trace.h>
-#include <ltt/time.h>
-#include <ltt/event.h>
+#include <lttv/time.h>
#include <lttv/lttv.h>
#include <lttv/module.h>
#include <lttv/iattribute.h>
+#include <lttv/traceset.h>
+#include <lttv/state.h>
+#ifdef BABEL_CLEANUP
#include <lttv/stats.h>
-#include <lttv/filter.h>
#include <lttv/sync/sync_chain_lttv.h>
+#endif /* BABEL_CLEANUP */
+#include <lttv/filter.h>
#include <lttvwindow/mainwindow.h>
#include <lttvwindow/mainwindow-private.h>
#include <lttvwindow/menu.h>
#include <lttvwindow/lttvwindowtraces.h>
#include <lttvwindow/lttv_plugin_tab.h>
+#include <babeltrace/babeltrace.h>
+#include <babeltrace/ctf/events.h>
+#include <babeltrace/ctf/iterator.h>
+
static LttTime lttvwindow_default_time_width = { 1, 0 };
#define CLIP_BUF 256 // size of clipboard buffer
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))
{
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
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);
current_time_change_manager(tab, new_current_time);
return retval;
+
}
/**
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;
/* 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
/* 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;
/* - 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)
{
guint iter_trace=0;
for(iter_trace=0;
- iter_trace<lttv_traceset_number(tsc->ts);
+ iter_trace<lttv_traceset_number(ts);
iter_trace++) {
- LttvTrace *trace_v = lttv_traceset_get(tsc->ts, 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");
}
/* 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
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 {
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);
}
/* 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
/* 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
} 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);
}
/* 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 */
/* - 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);
}
}
}
/* - 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);
}
{
- tfc = lttv_traceset_context_get_current_tfc(tsc);
+
/* 2.1 For each req of list_out */
GSList *iter = list_out;
/* 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
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;
/* - 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);
+
}
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;
}
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;
}
{
/* 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;
/* - 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 */
/* - 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
||
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;
/* 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;
}
/* 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_trace<lttv_traceset_number(tsc->ts);
+ iter_trace<lttv_traceset_number(ts);
iter_trace++) {
- LttvTrace *trace_v = lttv_traceset_get(tsc->ts, iter_trace);
+ LttvTrace *trace_v = lttv_traceset_get(ts, iter_trace);
lttvwindowtraces_unlock(trace_v);
}
NULL);
return FALSE;
*/
+
+
}
#undef list_out
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;
/* 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);
(GSourceFunc) live_trace_update_handler,
tab);
}
-
+#endif /* BABEL_CLEANUP */
}
/* add_trace adds a trace into the current traceset. It first displays a
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);
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",
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);
}
void remove_trace(GtkWidget *widget, gpointer user_data)
{
+#ifdef BABEL_CLEANUP
LttTrace *trace;
LttvTrace * trace_v;
LttvTraceset * traceset;
SetTraceset(tab, (gpointer)traceset);
}
g_free(name);
+#endif /* BABEL_CLEANUP */
}
#if 0
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),
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;
gtk_notebook_get_current_page(GTK_NOTEBOOK(notebook)));
Tab *copy_tab;
- if(!page) {
+ if(!page || TRUE ) {
copy_tab = NULL;
} else {
LttvPluginTab *ptab;
on_button_new_clicked (GtkButton *button,
gpointer user_data)
{
+#ifdef BABEL_CLEANUP
create_new_window((GtkWidget*)button, user_data, TRUE);
+#else
+ GtkWidget *dialogue =
+ gtk_message_dialog_new(
+ GTK_WINDOW(gtk_widget_get_toplevel(button)),
+ GTK_DIALOG_MODAL|GTK_DIALOG_DESTROY_WITH_PARENT,
+ GTK_MESSAGE_ERROR,
+ GTK_BUTTONS_OK,
+ "Opening multiple windows is disabled.");
+ gtk_dialog_run(GTK_DIALOG(dialogue));
+ gtk_widget_destroy(dialogue);
+#endif
}
void
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;
/* 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)
set_time_window(tab, &new_time_window);
tab->time_manager_lock = FALSE;
+
+
}
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);
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);
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.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)
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);
time_change_manager(tab, new_time_window);
+
#if 0
//time_window = tab->time_window;
/* call viewer hooks for new time window */
set_time_window(tab, &time_window);
#endif //0
+
}
void tab_destructor(LttvPluginTab * ptab)
{
+#ifdef BABEL_CLEANUP
int i, nb, ref_count;
LttvTrace * trace;
Tab *tab = ptab->tab;
g_free(tab->traceset_info);
//g_free(tab);
g_object_unref(ptab);
+#endif /* BABEL_CLEANUP */
}
void init_tab(Tab *tab, MainWindow * mw, Tab *copy_tab,
GtkNotebook * notebook, char * label)
{
+
GList * list;
//Tab * tab;
//LttvFilter *filter = NULL;
/* 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
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){
lttvwindow_report_time_window(tab, time_window);
lttvwindow_report_current_time(tab, ltt_time_zero);
}
-
+
LttvTraceset *traceset = tab->traceset_info->traceset;
SetTraceset(tab, traceset);
}
}
-__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 */
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(
"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);
+ }
+ }
}