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
|
@ -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…
Reference in New Issue