Remove Perftimer classes
Performance can still be crudely measured by turning off the framelimit and observing the FPS count. For everything else, there's always callgrind / apitrace.
This commit is contained in:
		
							parent
							
								
									6c481e5eb8
								
							
						
					
					
						commit
						282d547ad4
					
				
					 7 changed files with 1 additions and 279 deletions
				
			
		| 
						 | 
					@ -128,7 +128,6 @@ set(MAIN_HEADERS
 | 
				
			||||||
	src/util.h
 | 
						src/util.h
 | 
				
			||||||
	src/config.h
 | 
						src/config.h
 | 
				
			||||||
	src/tileatlas.h
 | 
						src/tileatlas.h
 | 
				
			||||||
	src/perftimer.h
 | 
					 | 
				
			||||||
	src/sharedstate.h
 | 
						src/sharedstate.h
 | 
				
			||||||
	src/al-util.h
 | 
						src/al-util.h
 | 
				
			||||||
	src/boost-hash.h
 | 
						src/boost-hash.h
 | 
				
			||||||
| 
						 | 
					@ -161,7 +160,6 @@ set(MAIN_SOURCE
 | 
				
			||||||
	src/etc.cpp
 | 
						src/etc.cpp
 | 
				
			||||||
	src/config.cpp
 | 
						src/config.cpp
 | 
				
			||||||
	src/tileatlas.cpp
 | 
						src/tileatlas.cpp
 | 
				
			||||||
	src/perftimer.cpp
 | 
					 | 
				
			||||||
	src/sharedstate.cpp
 | 
						src/sharedstate.cpp
 | 
				
			||||||
	src/gl-fun.cpp
 | 
						src/gl-fun.cpp
 | 
				
			||||||
)
 | 
					)
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
							
								
								
									
										2
									
								
								mkxp.pro
									
										
									
									
									
								
							
							
						
						
									
										2
									
								
								mkxp.pro
									
										
									
									
									
								
							| 
						 | 
					@ -120,7 +120,6 @@ HEADERS += \
 | 
				
			||||||
	src/util.h \
 | 
						src/util.h \
 | 
				
			||||||
	src/config.h \
 | 
						src/config.h \
 | 
				
			||||||
	src/tileatlas.h \
 | 
						src/tileatlas.h \
 | 
				
			||||||
	src/perftimer.h \
 | 
					 | 
				
			||||||
	src/sharedstate.h \
 | 
						src/sharedstate.h \
 | 
				
			||||||
	src/al-util.h \
 | 
						src/al-util.h \
 | 
				
			||||||
	src/boost-hash.h \
 | 
						src/boost-hash.h \
 | 
				
			||||||
| 
						 | 
					@ -152,7 +151,6 @@ SOURCES += \
 | 
				
			||||||
	src/etc.cpp \
 | 
						src/etc.cpp \
 | 
				
			||||||
	src/config.cpp \
 | 
						src/config.cpp \
 | 
				
			||||||
	src/tileatlas.cpp \
 | 
						src/tileatlas.cpp \
 | 
				
			||||||
	src/perftimer.cpp \
 | 
					 | 
				
			||||||
	src/sharedstate.cpp \
 | 
						src/sharedstate.cpp \
 | 
				
			||||||
	src/gl-fun.cpp
 | 
						src/gl-fun.cpp
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -108,27 +108,6 @@ void initGLFunctions()
 | 
				
			||||||
		GL_VAO_FUN;
 | 
							GL_VAO_FUN;
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	if (HAVE_EXT(ARB_timer_query))
 | 
					 | 
				
			||||||
	{
 | 
					 | 
				
			||||||
		gl.timerQuery = true;
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
#undef EXT_SUFFIX
 | 
					 | 
				
			||||||
#define EXT_SUFFIX ""
 | 
					 | 
				
			||||||
		GL_TIMER_QUERY_FUN;
 | 
					 | 
				
			||||||
	}
 | 
					 | 
				
			||||||
	else if (HAVE_EXT(EXT_timer_query))
 | 
					 | 
				
			||||||
	{
 | 
					 | 
				
			||||||
		gl.timerQuery = true;
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
#undef EXT_SUFFIX
 | 
					 | 
				
			||||||
#define EXT_SUFFIX "EXT"
 | 
					 | 
				
			||||||
		GL_TIMER_QUERY_FUN;
 | 
					 | 
				
			||||||
	}
 | 
					 | 
				
			||||||
	else
 | 
					 | 
				
			||||||
	{
 | 
					 | 
				
			||||||
		gl.timerQuery = false;
 | 
					 | 
				
			||||||
	}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
	if (HAVE_EXT(KHR_debug))
 | 
						if (HAVE_EXT(KHR_debug))
 | 
				
			||||||
	{
 | 
						{
 | 
				
			||||||
#undef EXT_SUFFIX
 | 
					#undef EXT_SUFFIX
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
							
								
								
									
										16
									
								
								src/gl-fun.h
									
										
									
									
									
								
							
							
						
						
									
										16
									
								
								src/gl-fun.h
									
										
									
									
									
								
							| 
						 | 
					@ -90,13 +90,7 @@ typedef void (APIENTRYP PFNGLDEBUGMESSAGECALLBACKPROC) (GLDEBUGPROC callback, co
 | 
				
			||||||
	/* Vertex attribute */ \
 | 
						/* Vertex attribute */ \
 | 
				
			||||||
	GL_FUN(BindAttribLocation, PFNGLBINDATTRIBLOCATIONPROC) \
 | 
						GL_FUN(BindAttribLocation, PFNGLBINDATTRIBLOCATIONPROC) \
 | 
				
			||||||
	GL_FUN(EnableVertexAttribArray, PFNGLENABLEVERTEXATTRIBARRAYPROC) \
 | 
						GL_FUN(EnableVertexAttribArray, PFNGLENABLEVERTEXATTRIBARRAYPROC) \
 | 
				
			||||||
	GL_FUN(VertexAttribPointer, PFNGLVERTEXATTRIBPOINTERPROC) \
 | 
						GL_FUN(VertexAttribPointer, PFNGLVERTEXATTRIBPOINTERPROC)
 | 
				
			||||||
	/* Queries */ \
 | 
					 | 
				
			||||||
	GL_FUN(GenQueries, PFNGLGENQUERIESPROC) \
 | 
					 | 
				
			||||||
	GL_FUN(DeleteQueries, PFNGLDELETEQUERIESPROC) \
 | 
					 | 
				
			||||||
	GL_FUN(BeginQuery, PFNGLBEGINQUERYPROC) \
 | 
					 | 
				
			||||||
	GL_FUN(EndQuery, PFNGLENDQUERYPROC) \
 | 
					 | 
				
			||||||
	GL_FUN(GetQueryObjectiv, PFNGLGETQUERYOBJECTIVPROC)
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
#define GL_FBO_FUN \
 | 
					#define GL_FBO_FUN \
 | 
				
			||||||
	/* Framebuffer object */ \
 | 
						/* Framebuffer object */ \
 | 
				
			||||||
| 
						 | 
					@ -118,10 +112,6 @@ typedef void (APIENTRYP PFNGLDEBUGMESSAGECALLBACKPROC) (GLDEBUGPROC callback, co
 | 
				
			||||||
	GL_FUN(DeleteVertexArrays, PFNGLDELETEVERTEXARRAYSPROC) \
 | 
						GL_FUN(DeleteVertexArrays, PFNGLDELETEVERTEXARRAYSPROC) \
 | 
				
			||||||
	GL_FUN(BindVertexArray, PFNGLBINDVERTEXARRAYPROC)
 | 
						GL_FUN(BindVertexArray, PFNGLBINDVERTEXARRAYPROC)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#define GL_TIMER_QUERY_FUN \
 | 
					 | 
				
			||||||
	GL_FUN(GetQueryObjecti64v, PFNGLGETQUERYOBJECTI64VPROC) \
 | 
					 | 
				
			||||||
	GL_FUN(GetQueryObjectui64v, PFNGLGETQUERYOBJECTUI64VPROC)
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
#define GL_DEBUG_KHR_FUN \
 | 
					#define GL_DEBUG_KHR_FUN \
 | 
				
			||||||
	GL_FUN(DebugMessageCallback, PFNGLDEBUGMESSAGECALLBACKPROC)
 | 
						GL_FUN(DebugMessageCallback, PFNGLDEBUGMESSAGECALLBACKPROC)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					@ -133,10 +123,6 @@ struct GLFunctions
 | 
				
			||||||
	GL_20_FUN
 | 
						GL_20_FUN
 | 
				
			||||||
	GL_FBO_FUN
 | 
						GL_FBO_FUN
 | 
				
			||||||
	GL_VAO_FUN
 | 
						GL_VAO_FUN
 | 
				
			||||||
 | 
					 | 
				
			||||||
	bool timerQuery;
 | 
					 | 
				
			||||||
	GL_TIMER_QUERY_FUN
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
	GL_DEBUG_KHR_FUN
 | 
						GL_DEBUG_KHR_FUN
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#undef GL_FUN
 | 
					#undef GL_FUN
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -33,7 +33,6 @@
 | 
				
			||||||
#include "bitmap.h"
 | 
					#include "bitmap.h"
 | 
				
			||||||
#include "etc-internal.h"
 | 
					#include "etc-internal.h"
 | 
				
			||||||
#include "binding.h"
 | 
					#include "binding.h"
 | 
				
			||||||
#include "perftimer.h"
 | 
					 | 
				
			||||||
#include "debugwriter.h"
 | 
					#include "debugwriter.h"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#include <SDL_video.h>
 | 
					#include <SDL_video.h>
 | 
				
			||||||
| 
						 | 
					@ -399,9 +398,6 @@ struct GraphicsPrivate
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	FPSLimiter fpsLimiter;
 | 
						FPSLimiter fpsLimiter;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	PerfTimer *gpuTimer;
 | 
					 | 
				
			||||||
	PerfTimer *cpuTimer;
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
	bool frozen;
 | 
						bool frozen;
 | 
				
			||||||
	TEXFBO frozenScene;
 | 
						TEXFBO frozenScene;
 | 
				
			||||||
	TEXFBO currentScene;
 | 
						TEXFBO currentScene;
 | 
				
			||||||
| 
						 | 
					@ -421,9 +417,6 @@ struct GraphicsPrivate
 | 
				
			||||||
	      fpsLimiter(frameRate),
 | 
						      fpsLimiter(frameRate),
 | 
				
			||||||
	      frozen(false)
 | 
						      frozen(false)
 | 
				
			||||||
	{
 | 
						{
 | 
				
			||||||
		gpuTimer = createGPUTimer(frameRate);
 | 
					 | 
				
			||||||
		cpuTimer = createCPUTimer(frameRate);
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
		TEXFBO::init(frozenScene);
 | 
							TEXFBO::init(frozenScene);
 | 
				
			||||||
		TEXFBO::allocEmpty(frozenScene, scRes.x, scRes.y);
 | 
							TEXFBO::allocEmpty(frozenScene, scRes.x, scRes.y);
 | 
				
			||||||
		TEXFBO::linkFBO(frozenScene);
 | 
							TEXFBO::linkFBO(frozenScene);
 | 
				
			||||||
| 
						 | 
					@ -442,9 +435,6 @@ struct GraphicsPrivate
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	~GraphicsPrivate()
 | 
						~GraphicsPrivate()
 | 
				
			||||||
	{
 | 
						{
 | 
				
			||||||
		delete gpuTimer;
 | 
					 | 
				
			||||||
		delete cpuTimer;
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
		TEXFBO::fini(frozenScene);
 | 
							TEXFBO::fini(frozenScene);
 | 
				
			||||||
		TEXFBO::fini(currentScene);
 | 
							TEXFBO::fini(currentScene);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					@ -556,9 +546,6 @@ void Graphics::update()
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
	shState->checkShutdown();
 | 
						shState->checkShutdown();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
//	p->cpuTimer->endTiming();
 | 
					 | 
				
			||||||
//	p->gpuTimer->startTiming();
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
	if (p->frozen)
 | 
						if (p->frozen)
 | 
				
			||||||
		return;
 | 
							return;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					@ -582,9 +569,6 @@ void Graphics::update()
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	p->checkResize();
 | 
						p->checkResize();
 | 
				
			||||||
	p->redrawScreen();
 | 
						p->redrawScreen();
 | 
				
			||||||
 | 
					 | 
				
			||||||
//	p->gpuTimer->endTiming();
 | 
					 | 
				
			||||||
//	p->cpuTimer->startTiming();
 | 
					 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
void Graphics::freeze()
 | 
					void Graphics::freeze()
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -1,205 +0,0 @@
 | 
				
			||||||
#include "perftimer.h"
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
#include <SDL_timer.h>
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
#include "gl-fun.h"
 | 
					 | 
				
			||||||
#include "debugwriter.h"
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
struct TimerQuery
 | 
					 | 
				
			||||||
{
 | 
					 | 
				
			||||||
	GLuint query;
 | 
					 | 
				
			||||||
	static bool queryActive;
 | 
					 | 
				
			||||||
	bool thisQueryActive;
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
	TimerQuery()
 | 
					 | 
				
			||||||
	    : thisQueryActive(false)
 | 
					 | 
				
			||||||
	{
 | 
					 | 
				
			||||||
		gl.GenQueries(1, &query);
 | 
					 | 
				
			||||||
	}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
	void begin()
 | 
					 | 
				
			||||||
	{
 | 
					 | 
				
			||||||
		if (queryActive)
 | 
					 | 
				
			||||||
			return;
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
		if (thisQueryActive)
 | 
					 | 
				
			||||||
			return;
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
		gl.BeginQuery(GL_TIME_ELAPSED, query);
 | 
					 | 
				
			||||||
		queryActive = true;
 | 
					 | 
				
			||||||
		thisQueryActive = true;
 | 
					 | 
				
			||||||
	}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
	void end()
 | 
					 | 
				
			||||||
	{
 | 
					 | 
				
			||||||
		if (!thisQueryActive)
 | 
					 | 
				
			||||||
			return;
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
		gl.EndQuery(GL_TIME_ELAPSED);
 | 
					 | 
				
			||||||
		queryActive = false;
 | 
					 | 
				
			||||||
		thisQueryActive = false;
 | 
					 | 
				
			||||||
	}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
	bool getResult(GLuint64 *result)
 | 
					 | 
				
			||||||
	{
 | 
					 | 
				
			||||||
		if (thisQueryActive)
 | 
					 | 
				
			||||||
			return false;
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
		GLint isReady = GL_FALSE;
 | 
					 | 
				
			||||||
		gl.GetQueryObjectiv(query, GL_QUERY_RESULT_AVAILABLE, &isReady);
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
		if (isReady != GL_TRUE)
 | 
					 | 
				
			||||||
			return false;
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
		gl.GetQueryObjectui64v(query, GL_QUERY_RESULT, result);
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
		if (gl.GetError() == GL_INVALID_OPERATION)
 | 
					 | 
				
			||||||
			return false;
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
		return true;
 | 
					 | 
				
			||||||
	}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
	GLuint64 getResultSync()
 | 
					 | 
				
			||||||
	{
 | 
					 | 
				
			||||||
		if (thisQueryActive)
 | 
					 | 
				
			||||||
			return 0;
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
		GLuint64 result;
 | 
					 | 
				
			||||||
		GLint isReady = GL_FALSE;
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
		while (isReady == GL_FALSE)
 | 
					 | 
				
			||||||
			gl.GetQueryObjectiv(query, GL_QUERY_RESULT_AVAILABLE, &isReady);
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
		gl.GetQueryObjectui64v(query, GL_QUERY_RESULT, &result);
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
		return result;
 | 
					 | 
				
			||||||
	}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
	~TimerQuery()
 | 
					 | 
				
			||||||
	{
 | 
					 | 
				
			||||||
		if (thisQueryActive)
 | 
					 | 
				
			||||||
			end();
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
		gl.DeleteQueries(1, &query);
 | 
					 | 
				
			||||||
	}
 | 
					 | 
				
			||||||
};
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
bool TimerQuery::queryActive = false;
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
#define GPU_QUERIES 2
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
struct GPUTimerGLQuery : public PerfTimer
 | 
					 | 
				
			||||||
{
 | 
					 | 
				
			||||||
	TimerQuery queries[GPU_QUERIES];
 | 
					 | 
				
			||||||
	const int iter;
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
	uint8_t ind;
 | 
					 | 
				
			||||||
	uint64_t acc;
 | 
					 | 
				
			||||||
	int32_t counter;
 | 
					 | 
				
			||||||
	bool first;
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
	GPUTimerGLQuery(int iter)
 | 
					 | 
				
			||||||
	    : iter(iter),
 | 
					 | 
				
			||||||
	      ind(0),
 | 
					 | 
				
			||||||
	      acc(0),
 | 
					 | 
				
			||||||
	      counter(0),
 | 
					 | 
				
			||||||
	      first(true)
 | 
					 | 
				
			||||||
	{}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
	void startTiming()
 | 
					 | 
				
			||||||
	{
 | 
					 | 
				
			||||||
		queries[ind].begin();
 | 
					 | 
				
			||||||
	}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
	void endTiming()
 | 
					 | 
				
			||||||
	{
 | 
					 | 
				
			||||||
		queries[ind].end();
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
		swapInd();
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
		if (first)
 | 
					 | 
				
			||||||
		{
 | 
					 | 
				
			||||||
			first = false;
 | 
					 | 
				
			||||||
			return;
 | 
					 | 
				
			||||||
		}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
		GLuint64 result;
 | 
					 | 
				
			||||||
		if (!queries[ind].getResult(&result))
 | 
					 | 
				
			||||||
			return;
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
		acc += result;
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
		if (++counter < iter)
 | 
					 | 
				
			||||||
			return;
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
		Debug() << "                                  "
 | 
					 | 
				
			||||||
		            "Avg. GPU time:" << ((double) acc / (iter * 1000 * 1000)) << "ms";
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
		acc = counter = 0;
 | 
					 | 
				
			||||||
	}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
	void swapInd()
 | 
					 | 
				
			||||||
	{
 | 
					 | 
				
			||||||
		if (++ind > GPU_QUERIES)
 | 
					 | 
				
			||||||
			ind = 0;
 | 
					 | 
				
			||||||
	}
 | 
					 | 
				
			||||||
};
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
struct GPUTimerDummy : public PerfTimer
 | 
					 | 
				
			||||||
{
 | 
					 | 
				
			||||||
	void startTiming() {}
 | 
					 | 
				
			||||||
	void endTiming() {}
 | 
					 | 
				
			||||||
};
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
struct CPUTimer : public PerfTimer
 | 
					 | 
				
			||||||
{
 | 
					 | 
				
			||||||
	const int iter;
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
	uint64_t acc;
 | 
					 | 
				
			||||||
	int32_t counter;
 | 
					 | 
				
			||||||
	Uint64 ticks;
 | 
					 | 
				
			||||||
	Uint64 perfFreq;
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
	CPUTimer(int iter)
 | 
					 | 
				
			||||||
	    : iter(iter),
 | 
					 | 
				
			||||||
	      acc(0),
 | 
					 | 
				
			||||||
	      counter(0),
 | 
					 | 
				
			||||||
	      ticks(0)
 | 
					 | 
				
			||||||
	{
 | 
					 | 
				
			||||||
		perfFreq = SDL_GetPerformanceFrequency();
 | 
					 | 
				
			||||||
	}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
	void startTiming()
 | 
					 | 
				
			||||||
	{
 | 
					 | 
				
			||||||
		ticks = SDL_GetPerformanceCounter();
 | 
					 | 
				
			||||||
	}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
	void endTiming()
 | 
					 | 
				
			||||||
	{
 | 
					 | 
				
			||||||
		acc += SDL_GetPerformanceCounter() - ticks;
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
		if (++counter < iter)
 | 
					 | 
				
			||||||
			return;
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
		Debug() << "Avg. CPU time:" << ((double) acc / (iter * (perfFreq / 1000))) << "ms";
 | 
					 | 
				
			||||||
		acc = counter = 0;
 | 
					 | 
				
			||||||
	}
 | 
					 | 
				
			||||||
};
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
PerfTimer *createCPUTimer(int iter)
 | 
					 | 
				
			||||||
{
 | 
					 | 
				
			||||||
	return new CPUTimer(iter);
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
PerfTimer *createGPUTimer(int iter)
 | 
					 | 
				
			||||||
{
 | 
					 | 
				
			||||||
	if (gl.timerQuery)
 | 
					 | 
				
			||||||
	{
 | 
					 | 
				
			||||||
		return new GPUTimerGLQuery(iter);
 | 
					 | 
				
			||||||
	}
 | 
					 | 
				
			||||||
	else
 | 
					 | 
				
			||||||
	{
 | 
					 | 
				
			||||||
		Debug() << "GL_EXT_timer_query not present: cannot measure GPU performance";
 | 
					 | 
				
			||||||
		return new GPUTimerDummy();
 | 
					 | 
				
			||||||
	}
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
| 
						 | 
					@ -1,18 +0,0 @@
 | 
				
			||||||
#ifndef PERFTIMER_H
 | 
					 | 
				
			||||||
#define PERFTIMER_H
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
struct PerfTimer
 | 
					 | 
				
			||||||
{
 | 
					 | 
				
			||||||
	virtual ~PerfTimer() {}
 | 
					 | 
				
			||||||
	virtual void startTiming() = 0;
 | 
					 | 
				
			||||||
	virtual void endTiming() = 0;
 | 
					 | 
				
			||||||
};
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
/* Create timers that run on either CPU or GPU.
 | 
					 | 
				
			||||||
 * After 'iter' pairs of startTiming()/endTiming(),
 | 
					 | 
				
			||||||
 * they will calculate the average measurement and
 | 
					 | 
				
			||||||
 * print it to the console */
 | 
					 | 
				
			||||||
PerfTimer *createGPUTimer(int iter);
 | 
					 | 
				
			||||||
PerfTimer *createCPUTimer(int iter);
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
#endif // PERFTIMER_H
 | 
					 | 
				
			||||||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue