X-Git-Url: https://git.cworth.org/git?a=blobdiff_plain;f=metrics.h;h=69afafb9b69b5cf6f164dba37d4042dbda4e4092;hb=47739542f4ffba033bb70a8f58d1a056889f717e;hp=b5f985977a5a6ecbeec45024a1a45864a5b196c0;hpb=61b4545d541527ca2bd76811195b964595db7ed1;p=fips diff --git a/metrics.h b/metrics.h index b5f9859..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,17 +52,40 @@ typedef enum METRICS_OP_SHADER } metrics_op_t; +typedef struct metrics metrics_t; + +/* 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); + +/* 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_fini (metrics_t *metrics); + +/* Destroy a metrics_t object. + * + * After this call, the metrics_t* value is and must not be used + * further. */ +void +metrics_destroy (metrics_t *metrics); + /* Start accumulating GPU time. * * The time accumulated will be accounted against the * 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. @@ -75,7 +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 (metrics_t *metrics); /* Should be called at the end of every function wrapper for a * function that ends a frame, (glXSwapBuffers and similar). @@ -84,6 +115,20 @@ metrics_set_current_op (metrics_op_t op); * 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. + * + * This function is called automatically by metrics_end_frame. + * + * During a frame, it may be important to call this function to avoid + * too many oustanding timer/performance-monitor queries. At the same + * time, it's important not to call this function too frequently, + * since collection of metrics information will result in flushes of + * the OpenGL pipeline which can interfere with the behavior being + * measured. + */ +void +metrics_collect_available (metrics_t *metrics); #endif