OpenShot Audio Library | OpenShotAudio  0.3.1
juce_PerformanceCounter.h
1 /*
2  ==============================================================================
3 
4  This file is part of the JUCE library.
5  Copyright (c) 2017 - ROLI Ltd.
6 
7  JUCE is an open source library subject to commercial or open-source
8  licensing.
9 
10  The code included in this file is provided under the terms of the ISC license
11  http://www.isc.org/downloads/software-support-policy/isc-license. Permission
12  To use, copy, modify, and/or distribute this software for any purpose with or
13  without fee is hereby granted provided that the above copyright notice and
14  this permission notice appear in all copies.
15 
16  JUCE IS PROVIDED "AS IS" WITHOUT ANY WARRANTY, AND ALL WARRANTIES, WHETHER
17  EXPRESSED OR IMPLIED, INCLUDING MERCHANTABILITY AND FITNESS FOR PURPOSE, ARE
18  DISCLAIMED.
19 
20  ==============================================================================
21 */
22 
23 namespace juce
24 {
25 
26 //==============================================================================
49 class JUCE_API PerformanceCounter
50 {
51 public:
52  //==============================================================================
61  PerformanceCounter (const String& counterName,
62  int runsPerPrintout = 100,
63  const File& loggingFile = File());
64 
67 
68  //==============================================================================
72  void start() noexcept;
73 
81  bool stop();
82 
89  void printStatistics();
90 
92  struct Statistics
93  {
94  Statistics() noexcept;
95 
96  void clear() noexcept;
97  String toString() const;
98 
99  void addResult (double elapsed) noexcept;
100 
101  String name;
102  double averageSeconds;
103  double maximumSeconds;
104  double minimumSeconds;
105  double totalSeconds;
106  int64 numRuns;
107  };
108 
110  Statistics getStatisticsAndReset();
111 
112 private:
113  //==============================================================================
114  Statistics stats;
115  int64 runsPerPrint, startTime;
116  File outputFile;
117 
118  JUCE_DECLARE_NON_COPYABLE_WITH_LEAK_DETECTOR (PerformanceCounter)
119 };
120 
121 
122 //==============================================================================
143 class JUCE_API ScopedTimeMeasurement
144 {
145 public:
146  ScopedTimeMeasurement (double& resultInSeconds) noexcept
147  : result (resultInSeconds)
148  {
149  result = 0.0;
150  }
151 
153  {
154  static auto scaler = 1.0 / static_cast<double> (Time::getHighResolutionTicksPerSecond());
155  result = static_cast<double> (Time::getHighResolutionTicks() - startTimeTicks) * scaler;
156  }
157 
158 private:
159  int64 startTimeTicks = Time::getHighResolutionTicks();
160  double& result;
161 
162  JUCE_DECLARE_NON_COPYABLE_WITH_LEAK_DETECTOR (ScopedTimeMeasurement)
163 };
164 
165 } // namespace juce
static int64 getHighResolutionTicksPerSecond() noexcept
static int64 getHighResolutionTicks() noexcept