93 lines
2.4 KiB
C++
93 lines
2.4 KiB
C++
/**********************************************************************
|
|
|
|
Audacity: A Digital Audio Editor
|
|
|
|
Profiler.h
|
|
|
|
Created by Michael Chinen (mchinen) on 8/12/08
|
|
Audacity(R) is copyright (c) 1999-2008 Audacity Team.
|
|
License: GPL v2. See License.txt.
|
|
|
|
******************************************************************//**
|
|
|
|
\class Profiler
|
|
\brief A simple profiler to measure the average time lengths that a
|
|
particular task/function takes. Currently not thread-safe and not thread-smart,
|
|
but it will probably work fine if you use it on a high level.
|
|
|
|
\class TaskProfile
|
|
\brief a simple class to keep track of one task that may be called multiple times.
|
|
|
|
*//*******************************************************************/
|
|
|
|
|
|
|
|
|
|
|
|
#ifndef __AUDACITY_PROFILER__
|
|
#define __AUDACITY_PROFILER__
|
|
#include <mutex>
|
|
#include <vector>
|
|
#include <time.h>
|
|
#include "MemoryX.h"
|
|
|
|
|
|
#define BEGIN_TASK_PROFILING(TASK_DESCRIPTION) Profiler::Instance()->Begin(__FILE__,__LINE__,TASK_DESCRIPTION)
|
|
#define END_TASK_PROFILING(TASK_DESCRIPTION) Profiler::Instance()->End(__FILE__,__LINE__,TASK_DESCRIPTION)
|
|
|
|
class TaskProfile;
|
|
class Profiler
|
|
{
|
|
public:
|
|
|
|
///write to a profile at the end of the test.
|
|
virtual ~Profiler();
|
|
|
|
///start the task timer.
|
|
void Begin(const char* fileName, int lineNum, const char* taskDescription);
|
|
///end the task timer.
|
|
void End(const char* fileName, int lineNum, const char* taskDescription);
|
|
|
|
///Gets the singleton instance
|
|
static Profiler* Instance();
|
|
|
|
protected:
|
|
///private constructor - Singleton.
|
|
Profiler(){};
|
|
|
|
///find a taskProfile for the given task, otherwise create
|
|
TaskProfile* GetOrCreateTaskProfile(const char* fileName, int lineNum);
|
|
TaskProfile* GetTaskProfileByDescription(const char* description);
|
|
|
|
//List of current Task to do.
|
|
std::vector<std::unique_ptr<TaskProfile>> mTasks;
|
|
//mutex for above variable
|
|
std::mutex mTasksMutex;
|
|
|
|
};
|
|
|
|
class TaskProfile
|
|
{
|
|
public:
|
|
TaskProfile();
|
|
virtual ~TaskProfile();
|
|
|
|
///start the task timer.
|
|
void Begin(const char* fileName, int lineNum, const char* taskDescription);
|
|
///end the task timer.
|
|
void End(const char* fileName, int lineNum, const char* taskDescription);
|
|
|
|
double ComputeAverageRunTime();
|
|
|
|
ArrayOf<char> mFileName;
|
|
int mLine;
|
|
ArrayOf<char> mDescription;
|
|
int mNumHits;
|
|
clock_t mCumTime;
|
|
clock_t mLastTime;
|
|
};
|
|
|
|
|
|
#endif
|
|
|