#include <sys/time.h>
-#include "fips-dispatch.h"
+#include "fips-dispatch-gl.h"
+
#include "metrics.h"
typedef struct counter
typedef struct program_metrics
{
+ /* This happens to also be the index into the
+ * ctx->program_metrics array currently
+ */
unsigned id;
double ticks;
} program_metrics_t;
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)
{
for (i = 0; i < ctx->num_program_metrics; i++) {
if (ctx->program_metrics[i].ticks == 0.0)
continue;
- printf ("Program %d:\t%7.2f mega-ticks\n",
+ printf ("Program %d:\t%7.2f ms\n",
i, ctx->program_metrics[i].ticks / 1e6);
}
}
+/* 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++;
gettimeofday (&tv_now, NULL);