X-Git-Url: https://git.cworth.org/git?a=blobdiff_plain;f=metrics.h;h=69afafb9b69b5cf6f164dba37d4042dbda4e4092;hb=de8d00c71c256ab967ece877050b5dbffe66b19d;hp=26de580d517066856133971fb5ac7641fb7559be;hpb=43fa296375ee35d811b7fed4537312ce9d08feac;p=fips diff --git a/metrics.h b/metrics.h index 26de580..69afafb 100644 --- a/metrics.h +++ b/metrics.h @@ -22,6 +22,8 @@ #ifndef METRICS_H #define METRICS_H +#include "metrics-info.h" + typedef enum { METRICS_OP_ACCUM, @@ -50,70 +52,28 @@ typedef enum METRICS_OP_SHADER } metrics_op_t; -/* Timer query */ -typedef struct timer_query -{ - unsigned id; - - metrics_op_t op; - struct timer_query *next; -} timer_query_t; - -/* Performance-monitor query */ -typedef struct monitor -{ - unsigned id; - - metrics_op_t op; - struct monitor *next; -} monitor_t; - -typedef struct op_metrics -{ - /* This happens to also be the index into the - * ctx->op_metrics array currently - */ - metrics_op_t op; - double time_ns; - - double **counters; -} op_metrics_t; - -typedef struct metrics -{ - metrics_op_t op; +typedef struct metrics metrics_t; - /* GL_TIME_ELAPSED query for which glEndQuery has not yet - * been called. */ - unsigned timer_begun_id; +/* Create a new metrics_t object for tracking metrics, given the + * pre-initialized metrics_info_t* describing available counters. */ +metrics_t * +metrics_create (metrics_info_t *info); - /* GL_TIME_ELAPSED queries for which glEndQuery has been - * called, (but results have not yet been queried). */ - timer_query_t *timer_head; - timer_query_t *timer_tail; - - /* Performance monitor for which glEndPerfMonitorAMD has not - * yet been called. */ - unsigned monitor_begun_id; - - /* Performance monitors for which glEndPerfMonitorAMD has - * been called, (but results have not yet been queried). */ - monitor_t *monitor_head; - monitor_t *monitor_tail; - - int monitors_in_flight; - - unsigned num_op_metrics; - op_metrics_t *op_metrics; -} metrics_t; - -/* Initialize a metrics_t object for tracking metrics. */ +/* Free all internal resources of a metrics_t + * + * All outstanding metrics counters are discarded. + * + * The metrics_t object remains valid and may be used again. + */ void -metrics_init (metrics_t *metrics); +metrics_fini (metrics_t *metrics); -/* Cleanup a metrics_t object that's no longer needed. */ +/* Destroy a metrics_t object. + * + * After this call, the metrics_t* value is and must not be used + * further. */ void -metrics_fini (metrics_t *metrics); +metrics_destroy (metrics_t *metrics); /* Start accumulating GPU time. * @@ -121,11 +81,11 @@ metrics_fini (metrics_t *metrics); * current program (as set with metrics_set_current_program). */ void -metrics_counter_start (void); +metrics_counter_start (metrics_t *metrics); /* Stop accumulating GPU time (stops the most-recently started counter) */ void -metrics_counter_stop (void); +metrics_counter_stop (metrics_t *metrics); /* Set a metrics_op_t value to indicate what kind of operation is * being performed. @@ -140,13 +100,13 @@ metrics_counter_stop (void); * METRICS_OP_SHADER + shader_program_number to this function. */ void -metrics_set_current_op (metrics_op_t op); +metrics_set_current_op (metrics_t *metrics, metrics_op_t op); /* Return the current metrics_op_t value, (the value most-recently-set * with a call to metrics_set_current_op). */ metrics_op_t -metrics_get_current_op (void); +metrics_get_current_op (metrics_t *metrics); /* Should be called at the end of every function wrapper for a * function that ends a frame, (glXSwapBuffers and similar). @@ -155,7 +115,7 @@ metrics_get_current_op (void); * generate a timing report, then emits that report. */ void -metrics_end_frame (void); +metrics_end_frame (metrics_t *metrics); /* Process outstanding metrics requests, accumulating results. * @@ -169,6 +129,6 @@ metrics_end_frame (void); * measured. */ void -metrics_collect_available (void); +metrics_collect_available (metrics_t *metrics); #endif