[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