diff options
author | px4dev <px4@purgatory.org> | 2013-07-05 22:53:57 -0700 |
---|---|---|
committer | px4dev <px4@purgatory.org> | 2013-07-05 22:53:57 -0700 |
commit | 6871d2909b5be7eb93bf23aea771a86aa1b0ae3f (patch) | |
tree | bcbc21d87ec3bcf020e27442e4c9110bf476fab1 /src/modules/systemlib/perf_counter.c | |
parent | 3c8c596ac7a2eacc3f4ac047a58bd5dceb36a203 (diff) | |
download | px4-firmware-6871d2909b5be7eb93bf23aea771a86aa1b0ae3f.tar.gz px4-firmware-6871d2909b5be7eb93bf23aea771a86aa1b0ae3f.tar.bz2 px4-firmware-6871d2909b5be7eb93bf23aea771a86aa1b0ae3f.zip |
Add a mechanism for cancelling begin/end perf counters.
Diffstat (limited to 'src/modules/systemlib/perf_counter.c')
-rw-r--r-- | src/modules/systemlib/perf_counter.c | 41 |
1 files changed, 34 insertions, 7 deletions
diff --git a/src/modules/systemlib/perf_counter.c b/src/modules/systemlib/perf_counter.c index 879f4715a..3c1e10287 100644 --- a/src/modules/systemlib/perf_counter.c +++ b/src/modules/systemlib/perf_counter.c @@ -201,23 +201,50 @@ perf_end(perf_counter_t handle) switch (handle->type) { case PC_ELAPSED: { struct perf_ctr_elapsed *pce = (struct perf_ctr_elapsed *)handle; - hrt_abstime elapsed = hrt_absolute_time() - pce->time_start; - pce->event_count++; - pce->time_total += elapsed; + if (pce->time_start != 0) { + hrt_abstime elapsed = hrt_absolute_time() - pce->time_start; - if ((pce->time_least > elapsed) || (pce->time_least == 0)) - pce->time_least = elapsed; + pce->event_count++; + pce->time_total += elapsed; - if (pce->time_most < elapsed) - pce->time_most = elapsed; + if ((pce->time_least > elapsed) || (pce->time_least == 0)) + pce->time_least = elapsed; + + if (pce->time_most < elapsed) + pce->time_most = elapsed; + + pce->time_start = 0; + } + } + break; + + default: + break; + } +} + +void +perf_cancel(perf_counter_t handle) +{ + if (handle == NULL) + return; + + switch (handle->type) { + case PC_ELAPSED: { + struct perf_ctr_elapsed *pce = (struct perf_ctr_elapsed *)handle; + + pce->time_start = 0; } + break; default: break; } } + + void perf_reset(perf_counter_t handle) { |