aboutsummaryrefslogtreecommitdiff
path: root/apps/systemlib
diff options
context:
space:
mode:
authorAndrew Tridgell <tridge@samba.org>2013-01-24 10:00:23 +1100
committerAndrew Tridgell <tridge@samba.org>2013-01-24 10:26:02 +1100
commitf4da4bb8ca29a48e1bf10958cbc45fc9fb10e9f7 (patch)
tree212316bada5b3e659ff2a0fba4e21e2cad788291 /apps/systemlib
parentcc74874d7ed2f94a030a97b52c91d684f1d4cfa4 (diff)
downloadpx4-firmware-f4da4bb8ca29a48e1bf10958cbc45fc9fb10e9f7.tar.gz
px4-firmware-f4da4bb8ca29a48e1bf10958cbc45fc9fb10e9f7.tar.bz2
px4-firmware-f4da4bb8ca29a48e1bf10958cbc45fc9fb10e9f7.zip
perf_counter: added perf_reset() and perf_reset_all() calls
useful for watching counters after system reaches stable flight
Diffstat (limited to 'apps/systemlib')
-rw-r--r--apps/systemlib/perf_counter.c45
-rw-r--r--apps/systemlib/perf_counter.h13
2 files changed, 58 insertions, 0 deletions
diff --git a/apps/systemlib/perf_counter.c b/apps/systemlib/perf_counter.c
index ff15ef479..879f4715a 100644
--- a/apps/systemlib/perf_counter.c
+++ b/apps/systemlib/perf_counter.c
@@ -219,6 +219,40 @@ perf_end(perf_counter_t handle)
}
void
+perf_reset(perf_counter_t handle)
+{
+ if (handle == NULL)
+ return;
+
+ switch (handle->type) {
+ case PC_COUNT:
+ ((struct perf_ctr_count *)handle)->event_count = 0;
+ break;
+
+ case PC_ELAPSED: {
+ struct perf_ctr_elapsed *pce = (struct perf_ctr_elapsed *)handle;
+ pce->event_count = 0;
+ pce->time_start = 0;
+ pce->time_total = 0;
+ pce->time_least = 0;
+ pce->time_most = 0;
+ break;
+ }
+
+ case PC_INTERVAL: {
+ struct perf_ctr_interval *pci = (struct perf_ctr_interval *)handle;
+ pci->event_count = 0;
+ pci->time_event = 0;
+ pci->time_first = 0;
+ pci->time_last = 0;
+ pci->time_least = 0;
+ pci->time_most = 0;
+ break;
+ }
+ }
+}
+
+void
perf_print_counter(perf_counter_t handle)
{
if (handle == NULL)
@@ -270,3 +304,14 @@ perf_print_all(void)
handle = (perf_counter_t)sq_next(&handle->link);
}
}
+
+void
+perf_reset_all(void)
+{
+ perf_counter_t handle = (perf_counter_t)sq_peek(&perf_counters);
+
+ while (handle != NULL) {
+ perf_reset(handle);
+ handle = (perf_counter_t)sq_next(&handle->link);
+ }
+}
diff --git a/apps/systemlib/perf_counter.h b/apps/systemlib/perf_counter.h
index 6e6c80d5b..5c2cb15b2 100644
--- a/apps/systemlib/perf_counter.h
+++ b/apps/systemlib/perf_counter.h
@@ -97,6 +97,14 @@ __EXPORT extern void perf_begin(perf_counter_t handle);
*/
__EXPORT extern void perf_end(perf_counter_t handle);
+/**
+ * Reset a performance event.
+ *
+ * This call resets performance counter to initial state
+ *
+ * @param handle The handle returned from perf_alloc.
+ */
+__EXPORT extern void perf_reset(perf_counter_t handle);
/**
* Print one performance counter.
@@ -110,6 +118,11 @@ __EXPORT extern void perf_print_counter(perf_counter_t handle);
*/
__EXPORT extern void perf_print_all(void);
+/**
+ * Reset all of the performance counters.
+ */
+__EXPORT extern void perf_reset_all(void);
+
__END_DECLS
#endif