diff options
author | Brian Paul <[email protected]> | 2015-07-07 09:15:59 -0600 |
---|---|---|
committer | Brian Paul <[email protected]> | 2015-07-07 12:36:48 -0600 |
commit | a804f5824352e4f714779bd9445c09b66d54bc4a (patch) | |
tree | 867b6dd84acdb016d4ef6a0efc5c4135fcb2722b /src | |
parent | 86ebd31c672f389f354e11b7aef4513dc8b76f13 (diff) |
gallium/hud: add PIPE_DRIVER_QUERY_TYPE_MICROSECONDS for HUD
This allows drivers to report queries in units of microseconds and
have the HUD display "us" (microseconds), "ms" (milliseconds) or "s"
(seconds) on the graph.
Reviewed-by: Marek Olšák <[email protected]>
Diffstat (limited to 'src')
-rw-r--r-- | src/gallium/auxiliary/hud/hud_context.c | 25 | ||||
-rw-r--r-- | src/gallium/include/pipe/p_defines.h | 11 |
2 files changed, 26 insertions, 10 deletions
diff --git a/src/gallium/auxiliary/hud/hud_context.c b/src/gallium/auxiliary/hud/hud_context.c index 9f42da9c219..cb552208d18 100644 --- a/src/gallium/auxiliary/hud/hud_context.c +++ b/src/gallium/auxiliary/hud/hud_context.c @@ -238,8 +238,9 @@ number_to_human_readable(uint64_t num, enum pipe_driver_query_type type, {"", " KB", " MB", " GB", " TB", " PB", " EB"}; static const char *metric_units[] = {"", " k", " M", " G", " T", " P", " E"}; - const char **units = - (type == PIPE_DRIVER_QUERY_TYPE_BYTES) ? byte_units : metric_units; + static const char *time_units[] = + {" us", " ms", " s"}; /* based on microseconds */ + const char *suffix; double divisor = (type == PIPE_DRIVER_QUERY_TYPE_BYTES) ? 1024 : 1000; int unit = 0; double d = num; @@ -249,12 +250,26 @@ number_to_human_readable(uint64_t num, enum pipe_driver_query_type type, unit++; } + switch (type) { + case PIPE_DRIVER_QUERY_TYPE_MICROSECONDS: + assert(unit < ARRAY_SIZE(time_units)); + suffix = time_units[unit]; + break; + case PIPE_DRIVER_QUERY_TYPE_BYTES: + assert(unit < ARRAY_SIZE(byte_units)); + suffix = byte_units[unit]; + break; + default: + assert(unit < ARRAY_SIZE(metric_units)); + suffix = metric_units[unit]; + } + if (d >= 100 || d == (int)d) - sprintf(out, "%.0f%s", d, units[unit]); + sprintf(out, "%.0f%s", d, suffix); else if (d >= 10 || d*10 == (int)(d*10)) - sprintf(out, "%.1f%s", d, units[unit]); + sprintf(out, "%.1f%s", d, suffix); else - sprintf(out, "%.2f%s", d, units[unit]); + sprintf(out, "%.2f%s", d, suffix); } static void diff --git a/src/gallium/include/pipe/p_defines.h b/src/gallium/include/pipe/p_defines.h index 153897af754..b0cd23dbeff 100644 --- a/src/gallium/include/pipe/p_defines.h +++ b/src/gallium/include/pipe/p_defines.h @@ -788,11 +788,12 @@ union pipe_color_union enum pipe_driver_query_type { - PIPE_DRIVER_QUERY_TYPE_UINT64 = 0, - PIPE_DRIVER_QUERY_TYPE_UINT = 1, - PIPE_DRIVER_QUERY_TYPE_FLOAT = 2, - PIPE_DRIVER_QUERY_TYPE_PERCENTAGE = 3, - PIPE_DRIVER_QUERY_TYPE_BYTES = 4, + PIPE_DRIVER_QUERY_TYPE_UINT64 = 0, + PIPE_DRIVER_QUERY_TYPE_UINT = 1, + PIPE_DRIVER_QUERY_TYPE_FLOAT = 2, + PIPE_DRIVER_QUERY_TYPE_PERCENTAGE = 3, + PIPE_DRIVER_QUERY_TYPE_BYTES = 4, + PIPE_DRIVER_QUERY_TYPE_MICROSECONDS = 5, }; enum pipe_driver_query_group_type |