Browse Source

Add a mechanism for cancelling begin/end perf counters.

sbg
px4dev 12 years ago
parent
commit
6871d2909b
  1. 27
      src/modules/systemlib/perf_counter.c
  2. 14
      src/modules/systemlib/perf_counter.h

27
src/modules/systemlib/perf_counter.c

@ -201,6 +201,8 @@ perf_end(perf_counter_t handle)
switch (handle->type) { switch (handle->type) {
case PC_ELAPSED: { case PC_ELAPSED: {
struct perf_ctr_elapsed *pce = (struct perf_ctr_elapsed *)handle; struct perf_ctr_elapsed *pce = (struct perf_ctr_elapsed *)handle;
if (pce->time_start != 0) {
hrt_abstime elapsed = hrt_absolute_time() - pce->time_start; hrt_abstime elapsed = hrt_absolute_time() - pce->time_start;
pce->event_count++; pce->event_count++;
@ -211,13 +213,38 @@ perf_end(perf_counter_t handle)
if (pce->time_most < elapsed) if (pce->time_most < elapsed)
pce->time_most = elapsed; pce->time_most = elapsed;
pce->time_start = 0;
}
} }
break;
default: default:
break; 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 void
perf_reset(perf_counter_t handle) perf_reset(perf_counter_t handle)
{ {

14
src/modules/systemlib/perf_counter.h

@ -92,13 +92,25 @@ __EXPORT extern void perf_begin(perf_counter_t handle);
* End a performance event. * End a performance event.
* *
* This call applies to counters that operate over ranges of time; PC_ELAPSED etc. * This call applies to counters that operate over ranges of time; PC_ELAPSED etc.
* If a call is made without a corresopnding perf_begin call, or if perf_cancel
* has been called subsequently, no change is made to the counter.
* *
* @param handle The handle returned from perf_alloc. * @param handle The handle returned from perf_alloc.
*/ */
__EXPORT extern void perf_end(perf_counter_t handle); __EXPORT extern void perf_end(perf_counter_t handle);
/** /**
* Reset a performance event. * Cancel a performance event.
*
* This call applies to counters that operate over ranges of time; PC_ELAPSED etc.
* It reverts the effect of a previous perf_begin.
*
* @param handle The handle returned from perf_alloc.
*/
__EXPORT extern void perf_cancel(perf_counter_t handle);
/**
* Reset a performance counter.
* *
* This call resets performance counter to initial state * This call resets performance counter to initial state
* *

Loading…
Cancel
Save