X-Git-Url: https://git.cworth.org/git?a=blobdiff_plain;f=metrics.c;h=5c5cd1b77585cf881260e75cfab023ed754102c4;hb=cc60267c8ddfcc6681106193294da2d8221160cf;hp=38e9e954a6fc7dc941ce4bb608d76d1e886a4a32;hpb=cff9de18eebbbbc9b88e51483f5e471afbafaac1;p=fips diff --git a/metrics.c b/metrics.c index 38e9e95..5c5cd1b 100644 --- a/metrics.c +++ b/metrics.c @@ -77,6 +77,8 @@ typedef struct metrics_group_info typedef struct metrics_info { + int initialized; + unsigned num_groups; metrics_group_info_t *groups; } metrics_info_t; @@ -167,6 +169,24 @@ metrics_group_info_init (metrics_group_info_t *group, GLuint id) } } +static void +metrics_group_info_fini (metrics_group_info_t *group) +{ + unsigned i; + + for (i = 0; i < group->num_counters; i++) + free (group->counter_names[i]); + + free (group->counter_types); + free (group->counter_names); + free (group->counters); + + free (group->name); +} + +static void +metrics_info_fini (metrics_info_t *info); + void metrics_info_init (void) { @@ -174,6 +194,9 @@ metrics_info_init (void) GLuint *group_ids; metrics_info_t *metrics_info = ¤t_context.metrics_info; + if (metrics_info->initialized) + metrics_info_fini (metrics_info); + glGetPerfMonitorGroupsAMD ((int *) &metrics_info->num_groups, 0, NULL); group_ids = xmalloc (metrics_info->num_groups * sizeof (GLuint)); @@ -186,6 +209,19 @@ metrics_info_init (void) metrics_group_info_init (&metrics_info->groups[i], i); free (group_ids); + + metrics_info->initialized = 1; +} + +static void +metrics_info_fini (metrics_info_t *info) +{ + unsigned i; + + for (i = 0; i < info->num_groups; i++) + metrics_group_info_fini (&info->groups[i]); + + free (info->groups); } static const char * @@ -499,6 +535,8 @@ metrics_exit (void) { if (verbose) printf ("fips: terminating\n"); + + metrics_info_fini (¤t_context.metrics_info); }