#include <sys/time.h>
-#define GL_GLEXT_PROTOTYPES
-#include <GL/gl.h>
+#include "fips-dispatch-gl.h"
#include "metrics.h"
context_t current_context;
+int frames;
+int verbose;
+
unsigned
-metrics_add_counter (void)
+metrics_counter_new (void)
{
counter_t *counter;
return counter->id;
}
+void
+metrics_counter_start (unsigned counter)
+{
+ glBeginQuery (GL_TIME_ELAPSED, counter);
+}
+
+void
+metrics_counter_stop (void)
+{
+ glEndQuery (GL_TIME_ELAPSED);
+}
+
void
metrics_set_current_program (unsigned program)
{
}
}
+/* Called at program exit */
+static void
+metrics_exit (void)
+{
+ if (verbose)
+ printf ("fips: terminating\n");
+}
+
+
void
metrics_end_frame (void)
{
static int initialized = 0;
- static int frames;
static struct timeval tv_start, tv_now;
if (! initialized) {
- frames = 0;
gettimeofday (&tv_start, NULL);
+ atexit (metrics_exit);
+ if (getenv ("FIPS_VERBOSE"))
+ verbose = 1;
initialized = 1;
}
+ if (verbose)
+ printf ("fips: frame %d complete\n", frames);
frames++;
-
- if (frames % 60 == 0) {
- double fps;
- gettimeofday (&tv_now, NULL);
-
- fps = (double) frames / (tv_now.tv_sec - tv_start.tv_sec +
- (tv_now.tv_usec - tv_start.tv_usec) / 1.0e6);
-
- printf("FPS: %.3f\n", fps);
-
- print_program_metrics ();
- }
+ gettimeofday (&tv_now, NULL);
/* Consume all counters that are ready. */
counter_t *counter = current_context.counter_head;
while (counter) {
- GLint available;
- GLuint elapsed;
+ GLuint available, elapsed;
- glGetQueryObjectiv (counter->id, GL_QUERY_RESULT_AVAILABLE,
- &available);
+ glGetQueryObjectuiv (counter->id, GL_QUERY_RESULT_AVAILABLE,
+ &available);
if (! available)
break;
free (counter);
counter = current_context.counter_head;
}
+
+ if (frames % 60 == 0) {
+ double fps;
+
+ fps = (double) frames / (tv_now.tv_sec - tv_start.tv_sec +
+ (tv_now.tv_usec - tv_start.tv_usec) / 1.0e6);
+
+ printf("FPS: %.3f\n", fps);
+
+ print_program_metrics ();
+ }
}