]> git.tdb.fi Git - gldbg.git/blobdiff - source/profiler.cpp
Decouple the existing tools from the debugger core
[gldbg.git] / source / profiler.cpp
index ec9138de8794936672e00866dd8dccc0e9329ec2..37caa68636745f85c0f6290e006fef426618370c 100644 (file)
@@ -1,41 +1,55 @@
+/* $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)