X-Git-Url: https://git.carlh.net/gitweb/?a=blobdiff_plain;f=libs%2Fardour%2Fcycle_timer.cc;h=a86124c5555901b4f4e1f413222c6ff07dac4928;hb=e77729125ec262b6a01e8fc22b236995cd37a7f6;hp=143cb841ecf8f2e8878132a312df3c5de7842811;hpb=c268314b64c2235b0d69c3854e303accd2cad4d9;p=ardour.git diff --git a/libs/ardour/cycle_timer.cc b/libs/ardour/cycle_timer.cc index 143cb841ec..a86124c555 100644 --- a/libs/ardour/cycle_timer.cc +++ b/libs/ardour/cycle_timer.cc @@ -18,23 +18,27 @@ */ #include -#include -#include +#include +#include "pbd/error.h" +#include "ardour/cycle_timer.h" + +#include "ardour/libardour_visibility.h" #include "i18n.h" +using namespace std; using namespace PBD; float CycleTimer::cycles_per_usec = 0; float -CycleTimer::get_mhz() +get_mhz() { FILE *f; - + if ((f = fopen("/proc/cpuinfo", "r")) == 0) { fatal << _("CycleTimer::get_mhz(): can't open /proc/cpuinfo") << endmsg; - /*NOTREACHED*/ + abort(); /*NOTREACHED*/ return 0.0f; } @@ -46,7 +50,7 @@ CycleTimer::get_mhz() if (fgets (buf, sizeof(buf), f) == 0) { fatal << _("CycleTimer::get_mhz(): cannot locate cpu MHz in /proc/cpuinfo") << endmsg; - /*NOTREACHED*/ + abort(); /*NOTREACHED*/ return 0.0f; } @@ -68,7 +72,59 @@ CycleTimer::get_mhz() } } - fatal << _("cannot locate cpu MHz in /proc/cpuinfo") << endmsg; - /*NOTREACHED*/ + fatal << _("cannot locate cpu MHz in /proc/cpuinfo") << endmsg; + abort(); /*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; +} + +#ifndef NDEBUG +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"; + } +} +#endif + +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 + +