<p dir="ltr">Hi <br>
</p>
<p dir="ltr"></p>
<p dir="ltr">On Wed, 4 Nov 2015, 8:53 a.m. Samuel Pitoiset <<a href="mailto:samuel.pitoiset@gmail.com">samuel.pitoiset@gmail.com</a>> wrote:</p>
<blockquote><p dir="ltr">Hi Jimmy,</p>
<p dir="ltr">Some comments below.</p>
<p dir="ltr">On 11/04/2015 06:17 AM, Jimmy Berry wrote:<br>
> - env GALLIUM_HUD_VISIBLE: control default visibility<br>
> - env GALLIUM_HUD_SIGNAL_TOGGLE: toggle visibility via signal<br>
> ---<br>
> Thanks for the feedback.<br>
><br>
> I believe all the suggested changes have been implemented.<br>
><br>
> One note, all the logic except for the toggle was already in hud_create() and<br>
> not hud_draw().<br>
><br>
> On the subject of allowing the user to specify the signo to use. It was<br>
> suggested in the original thread that using a fixed signal might end up stealing<br>
> signals from the parent application. Seems like the user should except funny<br>
> behavior if they set the signal to something like SIGKILL. I am not opposed to a<br>
> fixed signo or alternatively providing a default. Something like:<br>
><br>
> GALLIUM_HUD_TOGGLE_SIGNAL=-1 # (results in SIGUSR1)<br>
><br>
><br>
>   docs/envvars.html                       |  6 ++++++<br>
>   src/gallium/auxiliary/hud/hud_context.c | 29 +++++++++++++++++++++++++++++<br>
>   2 files changed, 35 insertions(+)<br>
><br>
> diff --git a/docs/envvars.html b/docs/envvars.html<br>
> index bdfe999..530bbb7 100644<br>
> --- a/docs/envvars.html<br>
> +++ b/docs/envvars.html<br>
> @@ -179,6 +179,12 @@ Mesa EGL supports different sets of environment variables.  See the<br>
>   <li>GALLIUM_HUD - draws various information on the screen, like framerate,<br>
>       cpu load, driver statistics, performance counters, etc.<br>
>       Set GALLIUM_HUD=help and run e.g. glxgears for more info.<br>
> +<li>GALLIUM_HUD_VISIBLE - control default visibility, defaults to true.<br>
> +<li>GALLIUM_HUD_TOGGLE_SIGNAL - toggle visibility via user specified signal.<br>
> +    Especially useful to toggle hud at specific points of application and<br>
> +    disable for unencumbered viewing the rest of the time. For example, set<br>
> +    GALLIUM_HUD_VISIBLE to false and GALLIUM_HUD_SIGNAL_TOGGLE to 10 (SIGUSR1).<br>
> +    Use kill -10 <pid> to toggle the hud as desired.<br>
>   <li>GALLIUM_LOG_FILE - specifies a file for logging all errors, warnings, etc.<br>
>       rather than stderr.<br>
>   <li>GALLIUM_PRINT_OPTIONS - if non-zero, print all the Gallium environment<br>
> diff --git a/src/gallium/auxiliary/hud/hud_context.c b/src/gallium/auxiliary/hud/hud_context.c<br>
> index ffe30b8..bffbc2f 100644<br>
> --- a/src/gallium/auxiliary/hud/hud_context.c<br>
> +++ b/src/gallium/auxiliary/hud/hud_context.c<br>
> @@ -33,6 +33,7 @@<br>
>    * Set GALLIUM_HUD=help for more info.<br>
>    */<br>
><br>
> +#include <signal.h><br>
>   #include <stdio.h><br>
><br>
>   #include "hud/hud_context.h"<br>
> @@ -51,6 +52,8 @@<br>
>   #include "tgsi/tgsi_text.h"<br>
>   #include "tgsi/tgsi_dump.h"<br>
><br>
> +/* controlls the visibility of all hud contexts */</p>
<p dir="ltr">"Control the visibility of all HUD contexts"</p>
<p dir="ltr">> +static boolean huds_visible = TRUE;</p>
<p dir="ltr">Maybe, hud_is_hidden or something looks like a better name.</p>
</blockquote>
<p dir="ltr"></p>
<p dir="ltr">I'd have thought keeping the boolean TRUE/1 for the hud being on would make more sense</p>
<blockquote><p dir="ltr"></p>
<p dir="ltr">><br>
>   struct hud_context {<br>
>      struct pipe_context *pipe;<br>
> @@ -95,6 +98,11 @@ struct hud_context {<br>
>      } text, bg, whitelines;<br>
>   };<br>
><br>
> +static void<br>
> +signal_visible_handler(int sig, siginfo_t *siginfo, void *context)<br>
> +{<br>
> +   huds_visible = !huds_visible;<br>
> +}<br>
><br>
>   static void<br>
>   hud_draw_colored_prims(struct hud_context *hud, unsigned prim,<br>
> @@ -441,6 +449,9 @@ hud_draw(struct hud_context *hud, struct pipe_resource *tex)<br>
>      struct hud_pane *pane;<br>
>      struct hud_graph *gr;<br>
><br>
> +   if (!huds_visible)<br>
> +      return;<br>
> +<br>
>      hud->fb_width = tex->width0;<br>
>      hud->fb_height = tex->height0;<br>
>      hud->constants.two_div_fb_width = 2.0f / hud->fb_width;<br>
> @@ -1125,6 +1136,10 @@ hud_create(struct pipe_context *pipe, struct cso_context *cso)<br>
>      struct pipe_sampler_view view_templ;<br>
>      unsigned i;<br>
>      const char *env = debug_get_option("GALLIUM_HUD", NULL);<br>
> +   long signo = debug_get_num_option("GALLIUM_HUD_TOGGLE_SIGNAL", 0);<br>
> +   boolean sig_handled = FALSE;<br>
> +   struct sigaction action;<br>
> +   huds_visible = debug_get_bool_option("GALLIUM_HUD_VISIBLE", TRUE);<br>
><br>
>      if (!env || !*env)<br>
>         return NULL;<br>
> @@ -1267,6 +1282,20 @@ hud_create(struct pipe_context *pipe, struct cso_context *cso)<br>
><br>
>      LIST_INITHEAD(&hud->pane_list);<br>
><br>
> +   /* setup sig handler once for all hud contexts */<br>
> +   if (!sig_handled) {<br>
> +      memset(&action, 0, sizeof(action));</p>
<p dir="ltr">I think you can get rid of this memset() by doing 'struct sigaction<br>
action = {};' above.</p>
<p dir="ltr">> +      action.sa_sigaction = &signal_visible_handler;<br>
> +      action.sa_flags = SA_SIGINFO;<br>
> +<br>
> +      if (signo < 1 || signo >= NSIG)<br>
> +         fprintf(stderr, "gallium_hud: invalid signal %ld\n", signo);<br>
> +      else if (sigaction(signo, &action, NULL) < 0)<br>
> +         fprintf(stderr, "gallium_hud: unable to set handler for signal %ld\n", signo);<br>
> +<br>
> +      sig_handled = TRUE;<br>
> +   }<br>
> +<br>
>      hud_parse_env_var(hud, env);<br>
>      return hud;<br>
>   }<br>
></p>
<p dir="ltr">--<br>
-Samuel<br>
_______________________________________________<br>
mesa-dev mailing list<br>
<a href="mailto:mesa-dev@lists.freedesktop.org">mesa-dev@lists.freedesktop.org</a><br>
<a href="http://lists.freedesktop.org/mailman/listinfo/mesa-dev">http://</a><a href="http://lists.freedesktop.org/mailman/listinfo/mesa-dev">lists.freedesktop.org</a><a href="http://lists.freedesktop.org/mailman/listinfo/mesa-dev">/mailman/</a><a href="http://lists.freedesktop.org/mailman/listinfo/mesa-dev">listinfo</a><a href="http://lists.freedesktop.org/mailman/listinfo/mesa-dev">/</a><a href="http://lists.freedesktop.org/mailman/listinfo/mesa-dev">mesa-dev</a><br>
</p>
</blockquote>
<p dir="ltr"><br>
</p>