summaryrefslogtreecommitdiff
path: root/libs/ardour/cycle_timer.cc
diff options
context:
space:
mode:
authorCarl Hetherington <carl@carlh.net>2012-01-14 22:02:59 +0000
committerCarl Hetherington <carl@carlh.net>2012-01-14 22:02:59 +0000
commitb087721d8aaf9470833414d01a72d826162946ab (patch)
treedc700fbb71685ab54eaa70b03ab53f35120f6155 /libs/ardour/cycle_timer.cc
parentd4bab8aeed61d7de331d5fb10230de78edfd423b (diff)
Add some debug code to time things in the process
thread(s). git-svn-id: svn://localhost/ardour2/branches/3.0@11246 d708f5d6-7413-0410-9779-e7cbd77b26cf
Diffstat (limited to 'libs/ardour/cycle_timer.cc')
-rw-r--r--libs/ardour/cycle_timer.cc55
1 files changed, 54 insertions, 1 deletions
diff --git a/libs/ardour/cycle_timer.cc b/libs/ardour/cycle_timer.cc
index 7a6b1fcab2..02d1abb930 100644
--- a/libs/ardour/cycle_timer.cc
+++ b/libs/ardour/cycle_timer.cc
@@ -18,17 +18,19 @@
*/
#include <cstdio>
+#include <fstream>
#include "pbd/error.h"
#include "ardour/cycle_timer.h"
#include "i18n.h"
+using namespace std;
using namespace PBD;
float CycleTimer::cycles_per_usec = 0;
float
-CycleTimer::get_mhz()
+get_mhz()
{
FILE *f;
@@ -72,3 +74,54 @@ CycleTimer::get_mhz()
/*NOTREACHED*/
return 0.0f;
}
+
+StoringTimer::StoringTimer (int N)
+{
+ _point = new int[N];
+ _value = new cycles_t[N];
+ _ref = new cycles_t[N];
+ _max_points = N;
+ _points = 0;
+}
+
+
+void
+StoringTimer::dump (string const & file)
+{
+ ofstream f (file.c_str ());
+
+ f << min (_points, _max_points) << "\n";
+ f << get_mhz () << "\n";
+ for (int i = 0; i < min (_points, _max_points); ++i) {
+ f << _point[i] << " " << _ref[i] << " " << _value[i] << "\n";
+ }
+}
+
+void
+StoringTimer::ref ()
+{
+ _current_ref = get_cycles ();
+}
+
+void
+StoringTimer::check (int p)
+{
+ if (_points == _max_points) {
+ ++_points;
+ return;
+ } else if (_points > _max_points) {
+ return;
+ }
+
+ _point[_points] = p;
+ _value[_points] = get_cycles ();
+ _ref[_points] = _current_ref;
+
+ ++_points;
+}
+
+#ifdef PT_TIMING
+StoringTimer ST (64 * 1024);
+#endif
+
+