mirror of
https://github.com/1dot13/source.git
synced 2026-08-05 14:00:23 +02:00
Added profiler support
Fixed memory leak and CTD with editor summary info Added extra VS2K5 property pages for debug support git-svn-id: https://ja2svn.mooo.com/source/ja2/trunk/GameSource/ja2_v1.13/Build@1528 3b4a5df2-a311-0410-b5c6-a8a6f20db521
This commit is contained in:
+87
@@ -0,0 +1,87 @@
|
||||
#pragma once
|
||||
|
||||
#include <vector>
|
||||
#include <set>
|
||||
#include <ostream>
|
||||
|
||||
//#ifndef PROFILER_ENABLED
|
||||
//#define PROFILER_ENABLED
|
||||
//#endif
|
||||
|
||||
#ifdef PROFILER_ENABLED
|
||||
#define STRINGIZE(x) #x
|
||||
#define NAMED_ PERFORMANCE_MARKER(x) PerfMarker x(__FILE__, STRINGIZE(x), __LINE__);
|
||||
#define END_NAMED_ PERFORMANCE_MARKER(x) x.endMark();
|
||||
#define PERFORMANCE_MARKER PerfMarker MARK(__FILE__, __FUNCTION__, __LINE__);
|
||||
#define PERIODIC_PROFILING
|
||||
#else
|
||||
#define PERFORMANCE_MARKER
|
||||
#endif
|
||||
#pragma warning (disable : 4512)//disables assignment operator could not be generated
|
||||
|
||||
struct PerfDatum
|
||||
{
|
||||
PerfDatum( const char* const fileName,
|
||||
const char* const functionName,
|
||||
const int lineNumber,
|
||||
__int64 cycles = 0,
|
||||
__int64 calls = 0);
|
||||
const char* const _fileName;
|
||||
const char* const _functionName;
|
||||
const int _lineNumber;
|
||||
__int64 _cycles; //Number of CPU cycles used
|
||||
__int64 _calls; //Number of calls to this function
|
||||
};
|
||||
#pragma warning (default : 4512)//disables assignment operator could not be generated
|
||||
|
||||
class PerfSort
|
||||
{
|
||||
public:
|
||||
bool operator()(const PerfDatum& lhs, const PerfDatum& rhs) const;
|
||||
};
|
||||
|
||||
class PerfSort2
|
||||
{
|
||||
public:
|
||||
bool operator()(const PerfDatum& lhs, const PerfDatum& rhs) const;
|
||||
};
|
||||
|
||||
|
||||
typedef std::set<PerfDatum, PerfSort> PERF_LOG_T;
|
||||
typedef std::vector<PerfDatum* > PERF_STACK_T;
|
||||
|
||||
class PerfManager
|
||||
{
|
||||
public:
|
||||
~PerfManager(void);
|
||||
static PerfManager* instance();
|
||||
void enterFunction( const char* const fileName,
|
||||
const char* const functionName,
|
||||
const int lineNumber);
|
||||
void exitFunction();
|
||||
void log(std::ostream &os);
|
||||
private:
|
||||
PerfManager(void);
|
||||
__int64 getCPUCount(void) const;
|
||||
void calibrate(void);
|
||||
int getPercision(const double value) const; //used for formatting percentages
|
||||
static PerfManager* _instance;
|
||||
PERF_LOG_T _perfLog;
|
||||
PERF_STACK_T _perfStack;
|
||||
__int64 _callTime; //Time it takes to call the getCPUCount function
|
||||
__int64 _totalTime;
|
||||
__int64 _lastTime; //The last time we got hte CPU count.
|
||||
};
|
||||
|
||||
class PerfMarker
|
||||
{
|
||||
public:
|
||||
PerfMarker( const char* const fileName,
|
||||
const char* const functionName,
|
||||
const int lineNumber);
|
||||
~PerfMarker();
|
||||
void endMark();
|
||||
private:
|
||||
bool _onStack;
|
||||
};
|
||||
|
||||
Reference in New Issue
Block a user