+/* $Id$
+
+This file is part of gldbg
+Copyright © 2010 Mikko Rasa, Mikkosoft Productions
+Distributed under the GPL
+*/
+
#include <msp/io/print.h>
#include <msp/time/units.h>
#include <msp/time/utils.h>
+#include "gldbg.h"
#include "profiler.h"
+using namespace std;
using namespace Msp;
-Profiler::Profiler():
+Profiler::Profiler(GlDbg &dbg):
decoder(gldecoder_new(this, 0)),
enabled(false)
{
+ dbg.get_command_interpreter().register_command("profile", this, &Profiler::cmd_profile)
+ .set_help("Profiles GL usage and performance",
+ "profile {on|off}\n"
+ " Enables or disables profiling\n");
+
decoder->glDrawArrays = glDrawArrays;
decoder->glDrawElements = glDrawElements;
decoder->glDrawRangeElements = glDrawRangeElements;
decoder->glXSwapBuffers = glXSwapBuffers;
}
-void Profiler::enable()
-{
- enabled = true;
- frames = 0;
- draw_calls = 0;
- vertices = 0;
- triangles = 0;
- start = Msp::Time::now();
-}
-
-void Profiler::disable()
+void Profiler::decode(const char *data, unsigned len)
{
- enabled = false;
+ if(enabled)
+ gldecoder_decode(decoder, data, len);
}
-int Profiler::decode(const char *data, unsigned len)
+void Profiler::cmd_profile(const string &args)
{
- if(enabled)
- return gldecoder_decode(decoder, data, len);
+ if(args.empty() || args=="on")
+ {
+ enabled = true;
+ frames = 0;
+ draw_calls = 0;
+ vertices = 0;
+ triangles = 0;
+ start = Msp::Time::now();
+ }
+ else if(args=="off")
+ enabled = false;
else
- return 0;
+ throw InvalidParameterValue("Invalid argument");
}
void Profiler::glDrawArrays(void *user_data, GLenum mode, int, int count)