[Mesa-dev] [PATCH] gallium/hud: add frametime graph (v2)

Marek Olšák maraeo at gmail.com
Tue May 15 23:34:27 UTC 2018


Pushed, thanks!

Marek

On Tue, May 15, 2018 at 5:09 PM, Matthias Groß <grmat at sub.red> wrote:

> Thanks for your comment. This version has an additional boolean in the
> fps_info struct to distinguish between fps and frame time calculation.
> The struct is initialised in the respecting install functions for this
> purpose.
> ---
>  src/gallium/auxiliary/hud/hud_context.c |  4 +++
>  src/gallium/auxiliary/hud/hud_fps.c     | 34 ++++++++++++++++++++++++-
>  src/gallium/auxiliary/hud/hud_private.h |  1 +
>  3 files changed, 38 insertions(+), 1 deletion(-)
>
> diff --git a/src/gallium/auxiliary/hud/hud_context.c
> b/src/gallium/auxiliary/hud/hud_context.c
> index 6ed9ccffdb..61db98b4b0 100644
> --- a/src/gallium/auxiliary/hud/hud_context.c
> +++ b/src/gallium/auxiliary/hud/hud_context.c
> @@ -1247,6 +1247,9 @@ hud_parse_env_var(struct hud_context *hud, struct
> pipe_screen *screen,
>        if (strcmp(name, "fps") == 0) {
>           hud_fps_graph_install(pane);
>        }
> +      else if (strcmp(name, "frametime") == 0) {
> +         hud_frametime_graph_install(pane);
> +      }
>        else if (strcmp(name, "cpu") == 0) {
>           hud_cpu_graph_install(pane, ALL_CPUS);
>        }
> @@ -1557,6 +1560,7 @@ print_help(struct pipe_screen *screen)
>     puts("");
>     puts("  Available names:");
>     puts("    fps");
> +   puts("    frametime");
>     puts("    cpu");
>
>     for (i = 0; i < num_cpus; i++)
> diff --git a/src/gallium/auxiliary/hud/hud_fps.c
> b/src/gallium/auxiliary/hud/hud_fps.c
> index c8438d0f5e..29110f5575 100644
> --- a/src/gallium/auxiliary/hud/hud_fps.c
> +++ b/src/gallium/auxiliary/hud/hud_fps.c
> @@ -33,6 +33,7 @@
>  #include "util/u_memory.h"
>
>  struct fps_info {
> +   boolean frametime;
>     int frames;
>     uint64_t last_time;
>  };
> @@ -46,7 +47,12 @@ query_fps(struct hud_graph *gr, struct pipe_context
> *pipe)
>     info->frames++;
>
>     if (info->last_time) {
> -      if (info->last_time + gr->pane->period <= now) {
> +      if (info->frametime) {
> +         double frametime = ((double)now - (double)info->last_time) /
> 1000.0;
> +         hud_graph_add_value(gr, frametime);
> +         info->last_time = now;
> +      }
> +      else if (info->last_time + gr->pane->period <= now) {
>           double fps = ((uint64_t)info->frames) * 1000000 /
>                        (double)(now - info->last_time);
>           info->frames = 0;
> @@ -80,6 +86,8 @@ hud_fps_graph_install(struct hud_pane *pane)
>        FREE(gr);
>        return;
>     }
> +   struct fps_info *info = gr->query_data;
> +   info->frametime = false;
>
>     gr->query_new_value = query_fps;
>
> @@ -90,3 +98,27 @@ hud_fps_graph_install(struct hud_pane *pane)
>
>     hud_pane_add_graph(pane, gr);
>  }
> +
> +void
> +hud_frametime_graph_install(struct hud_pane *pane)
> +{
> +   struct hud_graph *gr = CALLOC_STRUCT(hud_graph);
> +
> +   if (!gr)
> +      return;
> +
> +   strcpy(gr->name, "frametime (ms)");
> +   gr->query_data = CALLOC_STRUCT(fps_info);
> +   if (!gr->query_data) {
> +      FREE(gr);
> +      return;
> +   }
> +   struct fps_info *info = gr->query_data;
> +   info->frametime = true;
> +
> +   gr->query_new_value = query_fps;
> +
> +   gr->free_query_data = free_query_data;
> +
> +   hud_pane_add_graph(pane, gr);
> +}
> diff --git a/src/gallium/auxiliary/hud/hud_private.h
> b/src/gallium/auxiliary/hud/hud_private.h
> index b64e29e93e..deed329a8a 100644
> --- a/src/gallium/auxiliary/hud/hud_private.h
> +++ b/src/gallium/auxiliary/hud/hud_private.h
> @@ -157,6 +157,7 @@ struct hud_batch_query_context;
>  int hud_get_num_cpus(void);
>
>  void hud_fps_graph_install(struct hud_pane *pane);
> +void hud_frametime_graph_install(struct hud_pane *pane);
>  void hud_cpu_graph_install(struct hud_pane *pane, unsigned cpu_index);
>  void hud_thread_busy_install(struct hud_pane *pane, const char *name,
> bool main);
>  void hud_thread_counter_install(struct hud_pane *pane, const char *name,
> --
> 2.17.0
>
> _______________________________________________
> mesa-dev mailing list
> mesa-dev at lists.freedesktop.org
> https://lists.freedesktop.org/mailman/listinfo/mesa-dev
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <https://lists.freedesktop.org/archives/mesa-dev/attachments/20180515/b761c165/attachment.html>


More information about the mesa-dev mailing list