***************************************************************************/
static void lttv_traceset_context_compute_time_span(
LttvTracesetContext *self,
- TimeInterval time_span)
+ TimeInterval *time_span)
{
LttvTraceset * traceset = self->ts;
int numTraces = lttv_traceset_number(traceset);
LttvTraceContext *tc;
LttTrace * trace;
- time_span.startTime.tv_sec = 0;
- time_span.startTime.tv_nsec = 0;
- time_span.endTime.tv_sec = 0;
- time_span.endTime.tv_nsec = 0;
+ time_span->start_time.tv_sec = 0;
+ time_span->start_time.tv_nsec = 0;
+ time_span->end_time.tv_sec = 0;
+ time_span->end_time.tv_nsec = 0;
for(i=0; i<numTraces;i++){
tc = self->traces[i];
ltt_trace_time_span_get(trace, &s, &e);
if(i==0){
- time_span.startTime = s;
- time_span.endTime = e;
+ time_span->start_time = s;
+ time_span->end_time = e;
}else{
- if(s.tv_sec < time_span.startTime.tv_sec
- || (s.tv_sec == time_span.startTime.tv_sec
- && s.tv_nsec < time_span.startTime.tv_nsec))
- time_span.startTime = s;
- if(e.tv_sec > time_span.endTime.tv_sec
- || (e.tv_sec == time_span.endTime.tv_sec
- && e.tv_nsec > time_span.endTime.tv_nsec))
- time_span.endTime = e;
+ if(s.tv_sec < time_span->start_time.tv_sec
+ || (s.tv_sec == time_span->start_time.tv_sec
+ && s.tv_nsec < time_span->start_time.tv_nsec))
+ time_span->start_time = s;
+ if(e.tv_sec > time_span->end_time.tv_sec
+ || (e.tv_sec == time_span->end_time.tv_sec
+ && e.tv_nsec > time_span->end_time.tv_nsec))
+ time_span->end_time = e;
}
}
}
}
}
lttv_process_traceset_seek_time(self, null_time);
- lttv_traceset_context_compute_time_span(self, self->time_span);
- self->e = NULL;
+ lttv_traceset_context_compute_time_span(self, &self->time_span);
self->pqueue = g_tree_new(compare_tracefile);
}
/* Note : a _middle must be preceded from a _seek or another middle */
guint lttv_process_traceset_middle(LttvTracesetContext *self,
LttTime end,
- unsigned nb_events,
+ guint nb_events,
const LttvTracesetContextPosition *end_position)
{
GTree *pqueue = self->pqueue;
while(TRUE) {
tfc = NULL;
g_tree_foreach(pqueue, get_first, &tfc);
+ /* End of traceset : tfc is NULL */
if(tfc == NULL)
{
- self->e = event;
return count;
}
if(last_ret == TRUE ||
count >= nb_events ||
- lttv_traceset_context_ctx_pos_compare(self,
- end_position) >= 0 ||
+ (end_position!=NULL)?FALSE:lttv_traceset_context_ctx_pos_compare(self,
+ end_position) >= 0 ||
ltt_time_compare(tfc->timestamp, end) >= 0)
{
- self->e = event;
return count;
}
if(event != NULL) {
tfc->e = event;
tfc->timestamp = ltt_event_time(event);
- if(tfc->timestamp.tv_sec < end.tv_sec ||
- (tfc->timestamp.tv_sec == end.tv_sec &&
- tfc->timestamp.tv_nsec <= end.tv_nsec))
- g_tree_insert(pqueue, tfc, tfc);
+ g_tree_insert(pqueue, tfc, tfc);
}
}
}
LttEvent *event;
+ GTree *pqueue = self->ts_context->pqueue;
+
nb_tracefile = ltt_trace_control_tracefile_number(self->t) +
ltt_trace_per_cpu_tracefile_number(self->t);
for(i = 0 ; i < nb_tracefile ; i++) {
tfc = self->tracefiles[i];
ltt_tracefile_seek_time(tfc->tf, start);
+ g_tree_remove(pqueue, tfc);
event = ltt_tracefile_read(tfc->tf);
tfc->e = event;
if(event != NULL) {
tfc->timestamp = ltt_event_time(event);
- g_tree_insert(self->ts_context->pqueue, tfc, tfc);
+ g_tree_insert(pqueue, tfc, tfc);
}
}
}
LttvTracefileContext *tfc;
- /* Empty the pqueue */
-
- while(TRUE){
- tfc = NULL;
- g_tree_foreach(self->pqueue, get_first, &tfc);
- if(tfc == NULL) break;
- g_tree_remove(self->pqueue, &(tfc->timestamp));
- }
-
nb_trace = lttv_traceset_number(self->ts);
for(i = 0 ; i < nb_trace ; i++) {
tc = self->traces[i];
}
+gboolean lttv_process_tracefile_seek_position(LttvTracefileContext *self,
+ const LttEventPosition *pos)
+{
+ LttvTracefileContext *tfc = self;
+
+ LttEvent *event;
+
+ GTree *pqueue = self->t_context->ts_context->pqueue;
+
+ ltt_tracefile_seek_position(tfc->tf, pos);
+ g_tree_remove(pqueue, tfc);
+ event = ltt_tracefile_read(tfc->tf);
+ tfc->e = event;
+ if(event != NULL) {
+ tfc->timestamp = ltt_event_time(event);
+ g_tree_insert(pqueue, tfc, tfc);
+ }
+
+
+}
+
gboolean lttv_process_trace_seek_position(LttvTraceContext *self,
const LttvTraceContextPosition *pos)
{
for(i = 0 ; i < nb_tracefile ; i++) {
tfc = self->tracefiles[i];
- ltt_tracefile_seek_position(tfc->tf, pos->tf_pos[i]);
- event = ltt_tracefile_read(tfc->tf);
- tfc->e = event;
- if(event != NULL) {
- tfc->timestamp = ltt_event_time(event);
- g_tree_insert(self->ts_context->pqueue, tfc, tfc);
- }
+ lttv_process_tracefile_seek_position(tfc, pos->tf_pos[i]);
}
return TRUE;
if(nb_trace != pos->nb_trace)
return FALSE; /* Error */
- /* Empty the pqueue */
-
- while(TRUE){
- tfc = NULL;
- g_tree_foreach(self->pqueue, get_first, &tfc);
- if(tfc == NULL) break;
- g_tree_remove(self->pqueue, &(tfc->timestamp));
- }
-
for(i = 0 ; i < nb_trace ; i++) {
tc = self->traces[i];
sum_ret = sum_ret && lttv_process_trace_seek_position(tc, &pos->t_pos[i]);