[Mesa-dev] [PATCH v2] gallium/hud: use double values for all graphs
Marek Olšák
maraeo at gmail.com
Fri Jul 14 15:36:42 UTC 2017
Pushed, thanks!
Marek
On Fri, Jul 14, 2017 at 9:59 AM, Christoph Haag
<haagch+mesadev at frickel.club> wrote:
> The fps graph for example calculates the fps as double with small
> variations based on when query_new_value() is called, which causes
> many values to be truncated on the cast to uint64_t.
>
> The HUD internally stores the values as double, so just use double
> everywhere instead of fixing this with rounding. Using doubles also
> allows the hud to show small variations instead of being clamped to
> discrete values.
>
> v2: Don't print decimals in the dump file when not necessary
> Signed-off-by: Christoph Haag <haagch+mesadev at frickel.club>
> ---
> src/gallium/auxiliary/hud/hud_context.c | 14 ++++++++++----
> src/gallium/auxiliary/hud/hud_fps.c | 4 ++--
> src/gallium/auxiliary/hud/hud_private.h | 4 ++--
> 3 files changed, 14 insertions(+), 8 deletions(-)
>
> diff --git a/src/gallium/auxiliary/hud/hud_context.c b/src/gallium/auxiliary/hud/hud_context.c
> index 8172313605..2deb48d18e 100644
> --- a/src/gallium/auxiliary/hud/hud_context.c
> +++ b/src/gallium/auxiliary/hud/hud_context.c
> @@ -204,7 +204,7 @@ hud_draw_string(struct hud_context *hud, unsigned x, unsigned y,
> }
>
> static void
> -number_to_human_readable(uint64_t num, enum pipe_driver_query_type type,
> +number_to_human_readable(double num, enum pipe_driver_query_type type,
> char *out)
> {
> static const char *byte_units[] =
> @@ -861,13 +861,19 @@ hud_pane_add_graph(struct hud_pane *pane, struct hud_graph *gr)
> }
>
> void
> -hud_graph_add_value(struct hud_graph *gr, uint64_t value)
> +hud_graph_add_value(struct hud_graph *gr, double value)
> {
> gr->current_value = value;
> value = value > gr->pane->ceiling ? gr->pane->ceiling : value;
>
> - if (gr->fd)
> - fprintf(gr->fd, "%" PRIu64 "\n", value);
> + if (gr->fd) {
> + if (fabs(value - lround(value)) > FLT_EPSILON) {
> + fprintf(gr->fd, "%f\n", value);
> + }
> + else {
> + fprintf(gr->fd, "%" PRIu64 "\n", (uint64_t) lround(value));
> + }
> + }
>
> if (gr->index == gr->pane->max_num_vertices) {
> gr->vertices[0] = 0;
> diff --git a/src/gallium/auxiliary/hud/hud_fps.c b/src/gallium/auxiliary/hud/hud_fps.c
> index a360bc2ed0..8aa7a665a3 100644
> --- a/src/gallium/auxiliary/hud/hud_fps.c
> +++ b/src/gallium/auxiliary/hud/hud_fps.c
> @@ -47,12 +47,12 @@ query_fps(struct hud_graph *gr)
>
> if (info->last_time) {
> if (info->last_time + gr->pane->period <= now) {
> - double fps = (uint64_t)info->frames * 1000000 /
> + double fps = ((uint64_t)info->frames) * 1000000 /
> (double)(now - info->last_time);
> info->frames = 0;
> info->last_time = now;
>
> - hud_graph_add_value(gr, (uint64_t) fps);
> + hud_graph_add_value(gr, fps);
> }
> }
> else {
> diff --git a/src/gallium/auxiliary/hud/hud_private.h b/src/gallium/auxiliary/hud/hud_private.h
> index 2b1717d2c4..65baa8aa7e 100644
> --- a/src/gallium/auxiliary/hud/hud_private.h
> +++ b/src/gallium/auxiliary/hud/hud_private.h
> @@ -104,7 +104,7 @@ struct hud_graph {
> /* mutable variables */
> unsigned num_vertices;
> unsigned index; /* vertex index being updated */
> - uint64_t current_value;
> + double current_value;
> FILE *fd;
> };
>
> @@ -139,7 +139,7 @@ struct hud_pane {
> /* core */
> void hud_pane_add_graph(struct hud_pane *pane, struct hud_graph *gr);
> void hud_pane_set_max_value(struct hud_pane *pane, uint64_t value);
> -void hud_graph_add_value(struct hud_graph *gr, uint64_t value);
> +void hud_graph_add_value(struct hud_graph *gr, double value);
>
> /* graphs/queries */
> struct hud_batch_query_context;
> --
> 2.13.3
>
> _______________________________________________
> mesa-dev mailing list
> mesa-dev at lists.freedesktop.org
> https://lists.freedesktop.org/mailman/listinfo/mesa-dev
More information about the mesa-dev
mailing list