#include "metrics.h"
#include "xmalloc.h"
+typedef struct context
+{
+ /* Pointer to the system's context ID, (such as a GLXContext) */
+ void *system_id;
+
+ metrics_info_t metrics_info;
+ metrics_t *metrics;
+} context_t;
+
context_t *current_context;
static context_t *
fips_dispatch_init (api);
metrics_info_init (&ctx->metrics_info);
+ ctx->metrics = metrics_create (&ctx->metrics_info);
return ctx;
}
current_context = context_create (api, system_context_id);
- metrics_set_current_op (METRICS_OP_SHADER + 0);
- metrics_counter_start ();
+ metrics_set_current_op (current_context->metrics,
+ METRICS_OP_SHADER + 0);
+ metrics_counter_start (current_context->metrics);
}
void
context_leave (void)
{
context_t *ctx = current_context;
- timer_query_t *timer, *timer_next;
- monitor_t *monitor, *monitor_next;
if (ctx == NULL)
return;
- metrics_collect_available ();
-
- if (ctx->timer_begun_id) {
- glEndQuery (GL_TIME_ELAPSED);
- glDeleteQueries (1, &ctx->timer_begun_id);
- ctx->timer_begun_id = 0;
- }
-
- for (timer = ctx->timer_head;
- timer;
- timer = timer_next)
- {
- glDeleteQueries (1, &timer->id);
- timer_next = timer->next;
- free (timer);
- }
- ctx->timer_head = NULL;
- ctx->timer_tail = NULL;
-
- if (ctx->monitor_begun_id) {
- glEndPerfMonitorAMD (ctx->monitor_begun_id);
- glDeletePerfMonitorsAMD (1, &ctx->monitor_begun_id);
- ctx->monitor_begun_id = 0;
- }
-
- for (monitor = ctx->monitor_head;
- monitor;
- monitor = monitor_next)
- {
- glDeletePerfMonitorsAMD (1, &monitor->id);
- monitor_next = monitor->next;
- free (monitor);
- }
- ctx->monitor_head = NULL;
- ctx->monitor_tail = NULL;
-
- ctx->monitors_in_flight = 0;
+ metrics_destroy (ctx->metrics);
+}
+
+void
+context_counter_start (void)
+{
+ metrics_counter_start (current_context->metrics);
}
-context_t *
-context_get_current (void)
+void
+context_counter_stop (void)
+{
+ metrics_counter_stop (current_context->metrics);
+}
+
+void
+context_set_current_op (metrics_op_t op)
+{
+ metrics_set_current_op (current_context->metrics, op);
+}
+
+metrics_op_t
+context_get_current_op (void)
+{
+ return metrics_get_current_op (current_context->metrics);
+}
+
+void
+context_end_frame (void)
{
- return current_context;
+ return metrics_end_frame (current_context->metrics);
}