On Thu, Sep 6, 2012 at 7:09 PM, Rajagopal Venkat <rajagopal.ven...@linaro.org> wrote: > Fix timer and work perf events timestamp tracing by > - considering event exit timestamp relative to measurement first > timestamp for events which entry timestamp is not recorded. > Currently these events exit timestamp itself is considered as > usage period resulting in false usage report. > - clearing event timestamps from global map at the end of each > measurement to avoid collision with earlier recorded timestamps.
Adding the explanation with the real timestamp values from your other email will make this changelog easier to understand. > Signed-off-by: Rajagopal Venkat <rajagopal.ven...@linaro.org> > --- > src/process/do_process.cpp | 12 ++++++++++++ > src/process/timer.cpp | 4 ++++ > src/process/work.cpp | 4 ++++ > 3 files changed, 20 insertions(+) > > diff --git a/src/process/do_process.cpp b/src/process/do_process.cpp > index cb7c672..eaef7f1 100644 > --- a/src/process/do_process.cpp > +++ b/src/process/do_process.cpp > @@ -490,6 +490,10 @@ void perf_process_bundle::handle_trace_point(void > *trace, int cpu, uint64_t time > } > pop_consumer(cpu); > t = timer->done(time, tmr); > + if (t == ~0ULL) { > + timer->fire(first_stamp, tmr); > + t = timer->done(time, tmr); > + } > consumer_child_time(cpu, t); > } > else if (strcmp(event->name, "hrtimer_expire_entry") == 0) { > @@ -532,6 +536,10 @@ void perf_process_bundle::handle_trace_point(void > *trace, int cpu, uint64_t time > > pop_consumer(cpu); > t = timer->done(time, tmr); > + if (t == ~0ULL) { > + timer->fire(first_stamp, tmr); > + t = timer->done(time, tmr); > + } > consumer_child_time(cpu, t); > } > else if (strcmp(event->name, "workqueue_execute_start") == 0) { > @@ -575,6 +583,10 @@ void perf_process_bundle::handle_trace_point(void > *trace, int cpu, uint64_t time > } > pop_consumer(cpu); > t = work->done(time, wk); > + if (t == ~0ULL) { > + work->fire(first_stamp, wk); > + t = work->done(time, wk); > + } > consumer_child_time(cpu, t); > } > else if (strcmp(event->name, "cpu_idle") == 0) { > diff --git a/src/process/timer.cpp b/src/process/timer.cpp > index 8917490..1ca8c25 100644 > --- a/src/process/timer.cpp > +++ b/src/process/timer.cpp > @@ -79,6 +79,9 @@ uint64_t timer::done(uint64_t time, uint64_t timer_struct) > { > int64_t delta; > > + if (running_since.find(timer_struct) == running_since.end()) > + return ~0ULL; > + > if (running_since[timer_struct] > time) > return 0; > > @@ -147,6 +150,7 @@ void clear_timers(void) > all_timers.erase(it); > it = all_timers.begin(); > } > + running_since.clear(); > } > > bool timer::is_deferred(void) > diff --git a/src/process/work.cpp b/src/process/work.cpp > index 82f13a2..e62e5d3 100644 > --- a/src/process/work.cpp > +++ b/src/process/work.cpp > @@ -56,6 +56,9 @@ uint64_t work::done(uint64_t time, uint64_t work_struct) > { > int64_t delta; > > + if (running_since.find(work_struct) == running_since.end()) > + return ~0ULL; > + > if (running_since[work_struct] > time) > return 0; > > @@ -102,6 +105,7 @@ void clear_work(void) > all_work.erase(it); > it = all_work.begin(); > } > + running_since.clear(); > } > > > -- > 1.7.11.3 > > > _______________________________________________ > linaro-dev mailing list > linaro-dev@lists.linaro.org > http://lists.linaro.org/mailman/listinfo/linaro-dev _______________________________________________ linaro-dev mailing list linaro-dev@lists.linaro.org http://lists.linaro.org/mailman/listinfo/linaro-dev