X-Git-Url: https://git.notmuchmail.org/git?a=blobdiff_plain;f=context.c;fp=context.c;h=f4694c1ae8052152c9d36383e64170ccca2a0832;hb=076c1c37c1fc8bf3e56a615adfb4c38542cbd4c5;hp=6fbd7f2228ea2bfc2ff3b4b1d2d933f24f4ed27a;hpb=158a5862aeea9224fcd60c28b0bb19cb6b9f9381;p=fips diff --git a/context.c b/context.c index 6fbd7f2..f4694c1 100644 --- a/context.c +++ b/context.c @@ -23,12 +23,19 @@ #include "metrics.h" +/* FIXME: Need a map from integers to context objects and track the + * current context with glXMakeContextCurrent, eglMakeCurrent, etc. */ + +context_t current_context; + void context_enter (fips_api_t api, void *system_context_id unused) { + context_t *ctx = ¤t_context; + fips_dispatch_init (api); - metrics_info_init (); + metrics_info_init (&ctx->metrics_info); metrics_set_current_op (METRICS_OP_SHADER + 0); metrics_counter_start (); @@ -37,5 +44,53 @@ context_enter (fips_api_t api, void *system_context_id unused) void context_leave (void) { - metrics_info_fini (); + context_t *ctx = ¤t_context; + timer_query_t *timer, *timer_next; + monitor_t *monitor, *monitor_next; + + 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; + + current_context.monitors_in_flight = 0; + + metrics_info_fini (&ctx->metrics_info); +} + +context_t * +context_get_current (void) +{ + return ¤t_context; }