From 270e7cc5de6c9fdf7c757ab0d76a53d4dcaf90e0 Mon Sep 17 00:00:00 2001 From: yangxx Date: Thu, 11 Sep 2003 15:54:36 +0000 Subject: [PATCH] lttv_process_trace function takes another parameters: maxNumEvents git-svn-id: http://ltt.polymtl.ca/svn@232 04897980-b3bd-0310-b5e0-8ef037075253 --- ltt/branches/poly/lttv/batchAnalysis.c | 2 +- ltt/branches/poly/lttv/processTrace.c | 25 +++++++++++++++++++++++-- 2 files changed, 24 insertions(+), 3 deletions(-) diff --git a/ltt/branches/poly/lttv/batchAnalysis.c b/ltt/branches/poly/lttv/batchAnalysis.c index 0f169c71..a8d1c824 100644 --- a/ltt/branches/poly/lttv/batchAnalysis.c +++ b/ltt/branches/poly/lttv/batchAnalysis.c @@ -55,7 +55,7 @@ static gboolean process_traceset(void *hook_data, void *call_data) end.tv_sec = G_MAXULONG; end.tv_nsec = G_MAXULONG; - lttv_process_trace(start, end, traceset, LTTV_TRACESET_CONTEXT(tc)); + lttv_process_trace(start, end, traceset, LTTV_TRACESET_CONTEXT(tc),G_MAXULONG); lttv_traceset_context_remove_hooks(LTTV_TRACESET_CONTEXT(tc), before_traceset, after_traceset, NULL, before_trace, after_trace, NULL, before_tracefile, after_tracefile, NULL, before_event, after_event); diff --git a/ltt/branches/poly/lttv/processTrace.c b/ltt/branches/poly/lttv/processTrace.c index 550b9c42..122ce510 100644 --- a/ltt/branches/poly/lttv/processTrace.c +++ b/ltt/branches/poly/lttv/processTrace.c @@ -441,7 +441,7 @@ gboolean get_first(gpointer key, gpointer value, gpointer user_data) { void lttv_process_trace(LttTime start, LttTime end, LttvTraceset *traceset, - LttvTracesetContext *context) + LttvTracesetContext *context, unsigned maxNumEvents) { GPtrArray *traces = g_ptr_array_new(); @@ -460,6 +460,8 @@ void lttv_process_trace(LttTime start, LttTime end, LttvTraceset *traceset, LttvTracefileContext *tfc; LttEvent *event; + unsigned count = 0; + LttTime preTimestamp; /* Call all before_traceset, before_trace, and before_tracefile hooks. For all qualifying tracefiles, seek to the start time, create a context, @@ -521,6 +523,23 @@ void lttv_process_trace(LttTime start, LttTime end, LttvTraceset *traceset, or more tracefiles have events for the same time, hope that lookup and remove are consistent. */ + count++; + if(count > maxNumEvents){ + if(tfc->timestamp.tv_sec == preTimestamp.tv_sec && + tfc->timestamp.tv_nsec == preTimestamp.tv_nsec) { + count--; + }else{ + while(TRUE){ + tfc = NULL; + g_tree_foreach(pqueue, get_first, &tfc); + if(tfc == NULL) break; + g_tree_remove(pqueue, &(tfc->timestamp)); + } + break; + } + } + preTimestamp = tfc->timestamp; + tfc = g_tree_lookup(pqueue, &(tfc->timestamp)); g_tree_remove(pqueue, &(tfc->timestamp)); @@ -536,7 +555,9 @@ void lttv_process_trace(LttTime start, LttTime end, LttvTraceset *traceset, if(event != NULL) { tfc->e = event; tfc->timestamp = ltt_event_time(event); - g_tree_insert(pqueue, &(tfc->timestamp), tfc); + 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->timestamp), tfc); } } -- 2.34.1