LMMS
Loading...
Searching...
No Matches
AudioEngineProfiler.h
Go to the documentation of this file.
1/*
2 * AudioEngineProfiler.h - class for profiling performance of AudioEngine
3 *
4 * Copyright (c) 2014 Tobias Doerffel <tobydox/at/users.sourceforge.net>
5 *
6 * This file is part of LMMS - https://lmms.io
7 *
8 * This program is free software; you can redistribute it and/or
9 * modify it under the terms of the GNU General Public
10 * License as published by the Free Software Foundation; either
11 * version 2 of the License, or (at your option) any later version.
12 *
13 * This program is distributed in the hope that it will be useful,
14 * but WITHOUT ANY WARRANTY; without even the implied warranty of
15 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
16 * General Public License for more details.
17 *
18 * You should have received a copy of the GNU General Public
19 * License along with this program (see COPYING); if not, write to the
20 * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
21 * Boston, MA 02110-1301 USA.
22 *
23 */
24
25#ifndef LMMS_AUDIO_ENGINE_PROFILER_H
26#define LMMS_AUDIO_ENGINE_PROFILER_H
27
28#include <array>
29#include <atomic>
30#include <QFile>
31
32#include "LmmsTypes.h"
33#include "MicroTimer.h"
34
35namespace lmms
36{
37
39{
40public:
43
45 {
46 m_periodTimer.reset();
47 }
48
49 void finishPeriod( sample_rate_t sampleRate, f_cnt_t framesPerPeriod );
50
51 int cpuLoad() const
52 {
53 return m_cpuLoad;
54 }
55
56 void setOutputFile( const QString& outputFile );
57
65
66 constexpr static auto DetailCount = static_cast<std::size_t>(DetailType::Count);
67
68 int detailLoad(const DetailType type) const
69 {
70 return m_detailLoad[static_cast<std::size_t>(type)].load(std::memory_order_relaxed);
71 }
72
73 class Probe
74 {
75 public:
77 : m_profiler(profiler)
78 , m_type(type)
79 {
80 profiler.startDetail(type);
81 }
82 ~Probe() { m_profiler.finishDetail(m_type); }
83 Probe& operator=(const Probe&) = delete;
84 Probe(const Probe&) = delete;
85 Probe(Probe&&) = delete;
86
87 private:
90 };
91
92private:
93 void startDetail(const DetailType type) { m_detailTimer[static_cast<std::size_t>(type)].reset(); }
95 {
96 m_detailTime[static_cast<std::size_t>(type)] = m_detailTimer[static_cast<std::size_t>(type)].elapsed();
97 }
98
100 std::atomic<float> m_cpuLoad;
102
103 // Use arrays to avoid dynamic allocations in realtime code
104 std::array<MicroTimer, DetailCount> m_detailTimer;
105 std::array<int, DetailCount> m_detailTime{0};
106 std::array<std::atomic<float>, DetailCount> m_detailLoad{0};
107};
108
109} // namespace lmms
110
111#endif // LMMS_AUDIO_ENGINE_PROFILER_H
CAdPlugDatabase::CRecord::RecordType type
Definition adplugdb.cpp:93
AudioEngineProfiler & m_profiler
Definition AudioEngineProfiler.h:88
Probe(const Probe &)=delete
const AudioEngineProfiler::DetailType m_type
Definition AudioEngineProfiler.h:89
Probe(AudioEngineProfiler &profiler, AudioEngineProfiler::DetailType type)
Definition AudioEngineProfiler.h:76
Probe & operator=(const Probe &)=delete
~Probe()
Definition AudioEngineProfiler.h:82
std::array< MicroTimer, DetailCount > m_detailTimer
Definition AudioEngineProfiler.h:104
void startPeriod()
Definition AudioEngineProfiler.h:44
std::array< std::atomic< float >, DetailCount > m_detailLoad
Definition AudioEngineProfiler.h:106
void finishPeriod(sample_rate_t sampleRate, f_cnt_t framesPerPeriod)
Definition AudioEngineProfiler.cpp:41
std::array< int, DetailCount > m_detailTime
Definition AudioEngineProfiler.h:105
std::atomic< float > m_cpuLoad
Definition AudioEngineProfiler.h:100
MicroTimer m_periodTimer
Definition AudioEngineProfiler.h:99
QFile m_outputFile
Definition AudioEngineProfiler.h:101
void finishDetail(const DetailType type)
Definition AudioEngineProfiler.h:94
static constexpr auto DetailCount
Definition AudioEngineProfiler.h:66
void setOutputFile(const QString &outputFile)
Definition AudioEngineProfiler.cpp:70
DetailType
Definition AudioEngineProfiler.h:58
@ Effects
Definition AudioEngineProfiler.h:61
@ Mixing
Definition AudioEngineProfiler.h:62
@ NoteSetup
Definition AudioEngineProfiler.h:59
@ Instruments
Definition AudioEngineProfiler.h:60
@ Count
Definition AudioEngineProfiler.h:63
int detailLoad(const DetailType type) const
Definition AudioEngineProfiler.h:68
void startDetail(const DetailType type)
Definition AudioEngineProfiler.h:93
int cpuLoad() const
Definition AudioEngineProfiler.h:51
AudioEngineProfiler()
Definition AudioEngineProfiler.cpp:32
Definition MicroTimer.h:34
Definition AudioAlsa.cpp:35
std::uint32_t sample_rate_t
Definition LmmsTypes.h:42
std::uint64_t f_cnt_t
Definition LmmsTypes.h:43