summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorBrian Paul <[email protected]>2015-07-07 09:15:59 -0600
committerBrian Paul <[email protected]>2015-07-07 12:36:48 -0600
commita804f5824352e4f714779bd9445c09b66d54bc4a (patch)
tree867b6dd84acdb016d4ef6a0efc5c4135fcb2722b
parent86ebd31c672f389f354e11b7aef4513dc8b76f13 (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]>
-rw-r--r--src/gallium/auxiliary/hud/hud_context.c25
-rw-r--r--src/gallium/include/pipe/p_defines.h11
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