On Sat, Nov 7, 2015 at 11:42 PM, Jimmy Berry <ji...@boombatower.com> wrote: > - env GALLIUM_HUD_VISIBLE: control default visibility > - env GALLIUM_HUD_SIGNAL_TOGGLE: toggle visibility via signal > --- > > per imirkin's comments: > - long to unsigned > - ignore signal value of 0 rather than always printing error message > (oversight) > > docs/envvars.html | 6 ++++++ > src/gallium/auxiliary/hud/hud_context.c | 28 ++++++++++++++++++++++++++++ > 2 files changed, 34 insertions(+) > > diff --git a/docs/envvars.html b/docs/envvars.html > index bdfe999..530bbb7 100644 > --- a/docs/envvars.html > +++ b/docs/envvars.html > @@ -179,6 +179,12 @@ Mesa EGL supports different sets of environment > variables. See the > <li>GALLIUM_HUD - draws various information on the screen, like framerate, > cpu load, driver statistics, performance counters, etc. > Set GALLIUM_HUD=help and run e.g. glxgears for more info. > +<li>GALLIUM_HUD_VISIBLE - control default visibility, defaults to true. > +<li>GALLIUM_HUD_TOGGLE_SIGNAL - toggle visibility via user specified signal. > + Especially useful to toggle hud at specific points of application and > + disable for unencumbered viewing the rest of the time. For example, set > + GALLIUM_HUD_VISIBLE to false and GALLIUM_HUD_SIGNAL_TOGGLE to 10 > (SIGUSR1). > + Use kill -10 <pid> to toggle the hud as desired. > <li>GALLIUM_LOG_FILE - specifies a file for logging all errors, warnings, > etc. > rather than stderr. > <li>GALLIUM_PRINT_OPTIONS - if non-zero, print all the Gallium environment > diff --git a/src/gallium/auxiliary/hud/hud_context.c > b/src/gallium/auxiliary/hud/hud_context.c > index ffe30b8..f9dfcc7 100644 > --- a/src/gallium/auxiliary/hud/hud_context.c > +++ b/src/gallium/auxiliary/hud/hud_context.c > @@ -33,6 +33,7 @@ > * Set GALLIUM_HUD=help for more info. > */ > > +#include <signal.h> > #include <stdio.h> > > #include "hud/hud_context.h" > @@ -51,6 +52,8 @@ > #include "tgsi/tgsi_text.h" > #include "tgsi/tgsi_dump.h" > > +/* Control the visibility of all HUD contexts */ > +static boolean huds_visible = TRUE; > > struct hud_context { > struct pipe_context *pipe; > @@ -95,6 +98,11 @@ struct hud_context { > } text, bg, whitelines; > }; > > +static void > +signal_visible_handler(int sig, siginfo_t *siginfo, void *context) > +{ > + huds_visible = !huds_visible; > +} > > static void > hud_draw_colored_prims(struct hud_context *hud, unsigned prim, > @@ -441,6 +449,9 @@ hud_draw(struct hud_context *hud, struct pipe_resource > *tex) > struct hud_pane *pane; > struct hud_graph *gr; > > + if (!huds_visible) > + return; > + > hud->fb_width = tex->width0; > hud->fb_height = tex->height0; > hud->constants.two_div_fb_width = 2.0f / hud->fb_width; > @@ -1125,6 +1136,10 @@ hud_create(struct pipe_context *pipe, struct > cso_context *cso) > struct pipe_sampler_view view_templ; > unsigned i; > const char *env = debug_get_option("GALLIUM_HUD", NULL); > + unsigned signo = debug_get_num_option("GALLIUM_HUD_TOGGLE_SIGNAL", 0); > + boolean sig_handled = FALSE; > + struct sigaction action = {}; > + huds_visible = debug_get_bool_option("GALLIUM_HUD_VISIBLE", TRUE); > > if (!env || !*env) > return NULL; > @@ -1267,6 +1282,19 @@ hud_create(struct pipe_context *pipe, struct > cso_context *cso) > > LIST_INITHEAD(&hud->pane_list); > > + /* setup sig handler once for all hud contexts */ > + if (!sig_handled && signo != 0) { > + action.sa_sigaction = &signal_visible_handler; > + action.sa_flags = SA_SIGINFO; > + > + if (signo >= NSIG) > + fprintf(stderr, "gallium_hud: invalid signal %u\n", signo); > + else if (sigaction(signo, &action, NULL) < 0) > + fprintf(stderr, "gallium_hud: unable to set handler for signal > %u\n", signo); > + > + sig_handled = TRUE;
sig_handled is scoped to this function, so this will have fairly minimal effect. Did you mean to make it a global / pthread_once_t type of thing? > + } > + > hud_parse_env_var(hud, env); > return hud; > } > -- > 2.6.2 > > _______________________________________________ > mesa-dev mailing list > mesa-dev@lists.freedesktop.org > http://lists.freedesktop.org/mailman/listinfo/mesa-dev _______________________________________________ mesa-dev mailing list mesa-dev@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/mesa-dev