Ardour  9.0-pre0-582-g084a23a80d
ardour/ardour/cycle_timer.h
Go to the documentation of this file.
1 /*
2  * Copyright (C) 2006-2015 Paul Davis <paul@linuxaudiosystems.com>
3  * Copyright (C) 2009-2012 Carl Hetherington <carl@carlh.net>
4  * Copyright (C) 2009 David Robillard <d@drobilla.net>
5  *
6  * This program is free software; you can redistribute it and/or modify
7  * it under the terms of the GNU General Public License as published by
8  * the Free Software Foundation; either version 2 of the License, or
9  * (at your option) any later version.
10  *
11  * This program is distributed in the hope that it will be useful,
12  * but WITHOUT ANY WARRANTY; without even the implied warranty of
13  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14  * GNU General Public License for more details.
15  *
16  * You should have received a copy of the GNU General Public License along
17  * with this program; if not, write to the Free Software Foundation, Inc.,
18  * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
19  */
20 
21 #pragma once
22 
23 #include <string>
24 #include <iostream>
25 #include <cstdlib>
26 
28 #include "ardour/cycles.h"
29 #include "ardour/debug.h"
30 
31 float get_mhz ();
32 
34  private:
35  static float cycles_per_usec;
36 #ifndef NDEBUG
39  std::string _name;
40 #endif
41 
42  public:
43  CycleTimer(const std::string& name) {
44 #ifndef NDEBUG
46  _name = name;
47  if (cycles_per_usec == 0) {
48  cycles_per_usec = get_mhz ();
49  }
50  _entry = get_cycles();
51  }
52 #else
53  (void) name;
54 #endif
55  }
56 
58 #ifndef NDEBUG
60  _exit = get_cycles();
61  std::cerr << _name << ": " << (float) (_exit - _entry) / cycles_per_usec << " (" << _entry << ", " << _exit << ')' << std::endl;
62  }
63 #endif
64  }
65 };
66 
68 {
69 public:
70  StoringTimer (int);
71  void ref ();
72  void check (int);
73 #ifndef NDEBUG
74  void dump (std::string const &);
75 #endif
76 
77 private:
79  int* _point;
82  int _points;
84 };
85 
86 #ifdef PT_TIMING
87 extern StoringTimer ST;
88 #define PT_TIMING_REF ST.ref();
89 #define PT_TIMING_CHECK(x) ST.check(x);
90 #endif
91 
92 #ifndef PT_TIMING
93 #define PT_TIMING_REF
94 #define PT_TIMING_CHECK(x)
95 #endif
96 
float get_mhz()
static float cycles_per_usec
CycleTimer(const std::string &name)
void check(int)
void dump(std::string const &)
static cycles_t get_cycles(void)
Definition: cycles.h:244
long cycles_t
Definition: cycles.h:242
GtkImageIconNameData name
Definition: gtkimage.h:6
#define LIBARDOUR_API
#define DEBUG_ENABLED(bits)
DebugBits CycleTimers