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
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
(
DEBUG_ENABLED
(
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
(
DEBUG_ENABLED
(
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
#ifndef NDEBUG
74
void
dump
(std::string
const
&);
75
#endif
76
77
private
:
78
cycles_t
_current_ref
;
79
int
*
_point
;
80
cycles_t
*
_value
;
81
cycles_t
*
_ref
;
82
int
_points
;
83
int
_max_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
get_mhz
float get_mhz()
CycleTimer
Definition:
ardour/ardour/cycle_timer.h:33
CycleTimer::_name
std::string _name
Definition:
ardour/ardour/cycle_timer.h:39
CycleTimer::_exit
cycles_t _exit
Definition:
ardour/ardour/cycle_timer.h:38
CycleTimer::cycles_per_usec
static float cycles_per_usec
Definition:
ardour/ardour/cycle_timer.h:35
CycleTimer::_entry
cycles_t _entry
Definition:
ardour/ardour/cycle_timer.h:37
CycleTimer::~CycleTimer
~CycleTimer()
Definition:
ardour/ardour/cycle_timer.h:57
CycleTimer::CycleTimer
CycleTimer(const std::string &name)
Definition:
ardour/ardour/cycle_timer.h:43
StoringTimer
Definition:
ardour/ardour/cycle_timer.h:68
StoringTimer::_value
cycles_t * _value
Definition:
ardour/ardour/cycle_timer.h:80
StoringTimer::_point
int * _point
Definition:
ardour/ardour/cycle_timer.h:79
StoringTimer::_points
int _points
Definition:
ardour/ardour/cycle_timer.h:82
StoringTimer::StoringTimer
StoringTimer(int)
StoringTimer::_current_ref
cycles_t _current_ref
Definition:
ardour/ardour/cycle_timer.h:78
StoringTimer::_max_points
int _max_points
Definition:
ardour/ardour/cycle_timer.h:83
StoringTimer::check
void check(int)
StoringTimer::_ref
cycles_t * _ref
Definition:
ardour/ardour/cycle_timer.h:81
StoringTimer::dump
void dump(std::string const &)
StoringTimer::ref
void ref()
cycles.h
get_cycles
static cycles_t get_cycles(void)
Definition:
cycles.h:244
cycles_t
long cycles_t
Definition:
cycles.h:242
name
GtkImageIconNameData name
Definition:
gtkimage.h:6
libardour_visibility.h
LIBARDOUR_API
#define LIBARDOUR_API
Definition:
libardour_visibility.h:38
DEBUG_ENABLED
#define DEBUG_ENABLED(bits)
Definition:
libs/pbd/pbd/debug.h:85
PBD::DEBUG::CycleTimers
DebugBits CycleTimers
libs
ardour
ardour
cycle_timer.h
Generated on Wed Dec 25 2024 05:44:11 for Ardour by
1.9.1