free (group->name);
}
-static void
-metrics_info_fini (metrics_info_t *info);
-
/* A helper function, part of metrics_info_init below. */
typedef enum {
GLuint *group_ids;
metrics_info_t *info = ¤t_context.metrics_info;
- if (info->initialized)
- metrics_info_fini (info);
-
glGetPerfMonitorGroupsAMD ((int *) &info->num_groups, 0, NULL);
group_ids = xmalloc (info->num_groups * sizeof (GLuint));
info->initialized = 1;
}
-static void
-metrics_info_fini (metrics_info_t *info)
+void
+metrics_info_fini (void)
{
+ metrics_info_t *info = ¤t_context.metrics_info;
unsigned i;
+ timer_query_t *timer, *timer_next;
+ monitor_t *monitor, *monitor_next;
+
+ if (! info->initialized)
+ return;
+
+ for (timer = current_context.timer_head;
+ timer;
+ timer = timer_next)
+ {
+ timer_next = timer->next;
+ free (timer);
+ }
+ current_context.timer_head = NULL;
+ current_context.timer_tail = NULL;
+
+ for (monitor = current_context.monitor_head;
+ monitor;
+ monitor = monitor_next)
+ {
+ monitor_next = monitor->next;
+ free (monitor);
+ }
+ current_context.monitor_head = NULL;
+ current_context.monitor_tail = NULL;
for (i = 0; i < info->num_groups; i++)
metrics_group_info_fini (&info->groups[i]);
free (info->groups);
+ info->groups = NULL;
for (i = 0; i < info->num_shader_stages; i++)
free (info->stages[i].name);
free (info->stages);
+ info->stages = NULL;
+
+ info->initialized = 0;
}
static const char *
context_t *ctx = ¤t_context;
metrics_info_t *info = &ctx->metrics_info;
+ op_metrics_t *metrics = ctx_get_op_metrics (ctx, op);
unsigned char *p = (unsigned char *) result;
while (p < ((unsigned char *) result) + size)
break;
}
- ctx->op_metrics[op].counters[group_index][counter_index] += value;
+ metrics->counters[group_index][counter_index] += value;
}
}
if (verbose)
printf ("fips: terminating\n");
- metrics_info_fini (¤t_context.metrics_info);
+ metrics_info_fini ();
}