summaryrefslogtreecommitdiff
path: root/kernel/log.h
diff options
context:
space:
mode:
authorClifford Wolf <clifford@clifford.at>2013-11-22 14:08:10 +0100
committerClifford Wolf <clifford@clifford.at>2013-11-22 14:08:10 +0100
commit058ceda6a0e955539d4439fc8fcf53ebf2787331 (patch)
treed5559d3adc66d2198ed47c8563681bd0b192c33d /kernel/log.h
parente4429c480ea224ab9b5b0a98dbf5d9661a291b11 (diff)
Added more performance measurement infrastructure
Diffstat (limited to 'kernel/log.h')
-rw-r--r--kernel/log.h41
1 files changed, 41 insertions, 0 deletions
diff --git a/kernel/log.h b/kernel/log.h
index dbfb6103..d88dda88 100644
--- a/kernel/log.h
+++ b/kernel/log.h
@@ -22,6 +22,7 @@
#include "kernel/rtlil.h"
#include <stdio.h>
+#include <time.h>
#include <vector>
extern std::vector<FILE*> log_files;
@@ -52,4 +53,44 @@ const char *log_signal(const RTLIL::SigSpec &sig, bool autoint = true);
#define log_abort() log_error("Abort in %s:%d.\n", __FILE__, __LINE__)
#define log_assert(_assert_expr_) do { if (_assert_expr_) break; log_error("Assert `%s' failed in %s:%d.\n", #_assert_expr_, __FILE__, __LINE__); } while (0)
+// simple timer for performance measurements
+// toggle the '#if 1' to get a baseline for the perormance penalty added by the measurement
+struct PerformanceTimer
+{
+#if 1
+ int64_t total_ns;
+
+ PerformanceTimer() {
+ total_ns = 0;
+ }
+
+ static int64_t query() {
+ struct timespec ts;
+ clock_gettime(CLOCK_PROCESS_CPUTIME_ID, &ts);
+ return int64_t(ts.tv_sec)*1000000000 + ts.tv_nsec;
+ }
+
+ void reset() {
+ total_ns = 0;
+ }
+
+ void add() {
+ total_ns += query();
+ }
+
+ void sub() {
+ total_ns -= query();
+ }
+
+ float sec() const {
+ return total_ns * 1e-9;
+ }
+#else
+ void reset() { }
+ void add() { }
+ void sub() { }
+ float sec() const { return 0; }
+#endif
+};
+
#endif