ardour
Main Page
Related Pages
Modules
Namespaces
Classes
Files
File List
File Members
libs
ardour
ardour
cycle_timer.h
Go to the documentation of this file.
1
/*
2
Copyright (C) 2002 Paul Davis
3
4
This program is free software; you can redistribute it and/or modify
5
it under the terms of the GNU General Public License as published by
6
the Free Software Foundation; either version 2 of the License, or
7
(at your option) any later version.
8
9
This program is distributed in the hope that it will be useful,
10
but WITHOUT ANY WARRANTY; without even the implied warranty of
11
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12
GNU General Public License for more details.
13
14
You should have received a copy of the GNU General Public License
15
along with this program; if not, write to the Free Software
16
Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
17
18
*/
19
20
#ifndef __ardour_cycle_timer_h__
21
#define __ardour_cycle_timer_h__
22
23
#include <string>
24
#include <iostream>
25
#include <cstdlib>
26
27
#include "
ardour/libardour_visibility.h
"
28
#include "
ardour/cycles.h
"
29
#include "ardour/debug.h"
30
31
float
get_mhz
();
32
33
class
LIBARDOUR_API
CycleTimer
{
34
private
:
35
static
float
cycles_per_usec
;
36
#ifndef NDEBUG
37
cycles_t
_entry
;
38
cycles_t
_exit
;
39
std::string
_name
;
40
#endif
41
42
public
:
43
CycleTimer
(
const
std::string&
name
) {
44
#ifndef NDEBUG
45
if
(
PBD::debug_bits
&
PBD::DEBUG::CycleTimers
) {
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
57
~CycleTimer
() {
58
#ifndef NDEBUG
59
if
(
PBD::debug_bits
&
PBD::DEBUG::CycleTimers
) {
60
_exit =
get_cycles
();
61
std::cerr << _name <<
": "
<< (float) (_exit - _entry) / cycles_per_usec <<
" ("
<< _entry <<
", "
<< _exit <<
')'
<< std::endl;
62
}
63
#endif
64
}
65
};
66
67
class
LIBARDOUR_API
StoringTimer
68
{
69
public
:
70
StoringTimer
(
int
);
71
void
ref ();
72
void
check (
int
);
73
void
dump (std::string
const
&);
74
75
private
:
76
cycles_t
_current_ref
;
77
int
*
_point
;
78
cycles_t
*
_value
;
79
cycles_t
*
_ref
;
80
int
_points
;
81
int
_max_points
;
82
};
83
84
#ifdef PT_TIMING
85
extern
StoringTimer
ST;
86
#define PT_TIMING_REF ST.ref();
87
#define PT_TIMING_CHECK(x) ST.check(x);
88
#endif
89
90
#ifndef PT_TIMING
91
#define PT_TIMING_REF
92
#define PT_TIMING_CHECK(x)
93
#endif
94
95
#endif
/* __ardour_cycle_timer_h__ */
CycleTimer::_entry
cycles_t _entry
Definition:
cycle_timer.h:37
cycles.h
StoringTimer::_point
int * _point
Definition:
cycle_timer.h:77
CycleTimer::~CycleTimer
~CycleTimer()
Definition:
cycle_timer.h:57
CycleTimer::CycleTimer
CycleTimer(const std::string &name)
Definition:
cycle_timer.h:43
CycleTimer::_name
std::string _name
Definition:
cycle_timer.h:39
CycleTimer::cycles_per_usec
static float cycles_per_usec
Definition:
cycle_timer.h:35
StoringTimer::_value
cycles_t * _value
Definition:
cycle_timer.h:78
get_cycles
static cycles_t get_cycles(void)
Definition:
cycles.h:230
StoringTimer::_ref
cycles_t * _ref
Definition:
cycle_timer.h:79
PBD::DEBUG::CycleTimers
LIBARDOUR_API uint64_t CycleTimers
Definition:
debug.cc:56
StoringTimer
Definition:
cycle_timer.h:67
CycleTimer::_exit
cycles_t _exit
Definition:
cycle_timer.h:38
libardour_visibility.h
StoringTimer::_points
int _points
Definition:
cycle_timer.h:80
LIBARDOUR_API
#define LIBARDOUR_API
Definition:
libardour_visibility.h:40
PBD::debug_bits
LIBPBD_API uint64_t debug_bits
Definition:
debug.cc:55
name
const char * name
Definition:
rc_option_editor.cc:257
get_mhz
float get_mhz()
Definition:
cycle_timer.cc:35
StoringTimer::_current_ref
cycles_t _current_ref
Definition:
cycle_timer.h:76
StoringTimer::_max_points
int _max_points
Definition:
cycle_timer.h:81
cycles_t
long cycles_t
Definition:
cycles.h:226
CycleTimer
Definition:
cycle_timer.h:33
Generated on Sun May 24 2015 12:15:05 for ardour by
1.8.8