obs-studio/build_dependencies/aja/include/ajalibraries/ajabase/common/performance.h
Ward Nakchbandi b48576284b first commit
2023-03-04 20:33:16 +03:00

175 lines
5.1 KiB
C++

/* SPDX-License-Identifier: MIT */
/**
@file performance.h
@brief Declaration of the AJAPerformance class.
@copyright (C) 2011-2021 AJA Video Systems, Inc. All rights reserved.
**/
#ifndef AJA_PERFORMANCE_H
#define AJA_PERFORMANCE_H
/////////////////////////////
// Includes
/////////////////////////////
#include "ajabase/common/timer.h"
#include <string>
#include <map>
typedef std::map<std::string, uint64_t> AJAPerformanceExtraMap;
/////////////////////////////
// Declarations
/////////////////////////////
class AJAExport AJAPerformance
{
public:
/**
* Constructor
*
* @param[in] name The name for the performance object.
* @param[in] precision The Precision units to use.
* @param[in] skipEntries The number of entries to skip over before tracking performance,
* the idea here is to skip over any "warm-up" period.
*/
AJAPerformance(const std::string& name,
AJATimerPrecision precision = AJATimerPrecisionMilliseconds,
uint64_t skipEntries = 0);
/**
* Constructor
*
* @param[in] name The name for the performance object.
* @param[in] values Extra values that can be stored along with performance info.
* @param[in] precision The Precision units to use.
* @param[in] skipEntries The number of entries to skip over before tracking performance,
* the idea here is to skip over any "warm-up" period.
*/
AJAPerformance(const std::string& name, const AJAPerformanceExtraMap& values,
AJATimerPrecision precision = AJATimerPrecisionMilliseconds,
uint64_t skipEntries = 0);
/**
* Constructor
*
* @param[in] precision The Precision units to use.
* @param[in] skipEntries The number of entries to skip over before tracking performance,
* the idea here is to skip over any "warm-up" period.
*/
AJAPerformance(AJATimerPrecision precision = AJATimerPrecisionMilliseconds,
uint64_t skipEntries = 0);
~AJAPerformance(void);
/**
* Set extra values that can be stored along with performance info
*
* @param[in] values The extra values to assign to this object
*/
void SetExtras(const AJAPerformanceExtraMap& values);
/**
* Start the timer of the performance object
*/
void Start(void);
/**
* Stop the timer of the performance object and updates the performance stats:
* number of entries, min time, max time, total time
*/
void Stop(void);
/**
* Print out a performance report to AJADebug
* @param[in] name Name to use in printout, if empty will use the name passed in constructor
* @param[in] pFileName The source filename reporting the performace.
* @param[in] lineNumber The line number in the source file reporting the performance.
*/
void Report(const std::string& name = "", const char *pFileName = NULL, int32_t lineNumber = -1);
/**
* Returns the name for the performance object that was set in the constructor
*/
std::string Name(void);
/**
* Returns the Precision units set in the constructor
*/
AJATimerPrecision Precision(void);
/**
* Returns the number of times that the start/stop pair has been called
*/
uint64_t Entries(void);
/**
* Returns the total elapsed time between all start/stop pairs (in Precision units)
*/
uint64_t TotalTime(void);
/**
* Returns the minimum time between all start/stop pairs (in Precision units)
*/
uint64_t MinTime(void);
/**
* Returns the maximum time between all start/stop pairs (in Precision units)
*/
uint64_t MaxTime(void);
/**
* Returns the mean (average) time of all start/stop pairs (in Precision units)
*/
double Mean(void);
/**
* Returns the variance of all start/stop pairs (in Precision units)
*/
double Variance(void);
/**
* Returns the standard deviation of all start/stop pairs (in Precision units)
*/
double StandardDeviation(void);
/**
* Returns a map of any extra values stored in the performance object
*/
const AJAPerformanceExtraMap Extras(void);
private:
AJATimer mTimer;
std::string mName;
uint64_t mTotalTime;
uint64_t mEntries;
uint64_t mMinTime;
uint64_t mMaxTime;
double mMean;
double mM2;
uint64_t mNumEntriesToSkipAtStart;
AJAPerformanceExtraMap mExtras;
};
// Helper functions to track/report many performance timers and store in a map
typedef std::map<std::string, AJAPerformance> AJAPerformanceTracking;
extern bool AJAPerformanceTracking_start(AJAPerformanceTracking& stats,
std::string key,
AJATimerPrecision precision = AJATimerPrecisionMilliseconds,
uint64_t skipEntries = 0);
extern bool AJAPerformanceTracking_start(AJAPerformanceTracking& stats,
std::string key, const AJAPerformanceExtraMap& extras,
AJATimerPrecision precision = AJATimerPrecisionMilliseconds,
uint64_t skipEntries = 0);
extern bool AJAPerformanceTracking_stop(AJAPerformanceTracking& stats, std::string key);
extern bool AJAPerformanceTracking_report(AJAPerformanceTracking& stats, std::string title = "",
const char *pFileName = NULL, int32_t lineNumber = -1);
#endif // AJA_PERFORMANCE_H
//////////////////////// End of performance.h ///////////////////////