[Mesa-dev] [PATCH 1/5] gallium/hud: add an option to rename each data source
Nicolai Hähnle
nhaehnle at gmail.com
Thu Jan 5 15:00:20 UTC 2017
On 01.01.2017 01:05, Marek Olšák wrote:
> From: Marek Olšák <marek.olsak at amd.com>
>
> useful for radeonsi performance counters
> ---
> src/gallium/auxiliary/hud/hud_context.c | 40 ++++++++++++++++++++++++---------
> 1 file changed, 30 insertions(+), 10 deletions(-)
>
> diff --git a/src/gallium/auxiliary/hud/hud_context.c b/src/gallium/auxiliary/hud/hud_context.c
> index 779c116..4c65af3 100644
> --- a/src/gallium/auxiliary/hud/hud_context.c
> +++ b/src/gallium/auxiliary/hud/hud_context.c
> @@ -782,20 +782,31 @@ hud_pane_create(unsigned x1, unsigned y1, unsigned x2, unsigned y2,
> pane->max_num_vertices = (x2 - x1 + 2) / 2;
> pane->ceiling = ceiling;
> pane->dyn_ceiling = dyn_ceiling;
> pane->dyn_ceil_last_ran = 0;
> pane->initial_max_value = max_value;
> hud_pane_set_max_value(pane, max_value);
> LIST_INITHEAD(&pane->graph_list);
> return pane;
> }
>
> +/* replace '-' with a space */
> +static void
> +strip_hyphens(char *s)
> +{
> + while (*s) {
> + if (*s == '-')
> + *s = ' ';
> + s++;
> + }
> +}
> +
> /**
> * Add a graph to an existing pane.
> * One pane can contain multiple graphs over each other.
> */
> void
> hud_pane_add_graph(struct hud_pane *pane, struct hud_graph *gr)
> {
> static const float colors[][3] = {
> {0, 1, 0},
> {1, 0, 0},
> @@ -885,21 +896,21 @@ hud_graph_set_dump_file(struct hud_graph *gr)
> /**
> * Read a string from the environment variable.
> * The separators "+", ",", ":", and ";" terminate the string.
> * Return the number of read characters.
> */
> static int
> parse_string(const char *s, char *out)
> {
> int i;
>
> - for (i = 0; *s && *s != '+' && *s != ',' && *s != ':' && *s != ';';
> + for (i = 0; *s && *s != '+' && *s != ',' && *s != ':' && *s != ';' && *s != '=';
> s++, out++, i++)
> *out = *s;
>
> *out = 0;
>
> if (*s && !i) {
> fprintf(stderr, "gallium_hud: syntax error: unexpected '%c' (%i) while "
> "parsing a string\n", *s, *s);
> fflush(stderr);
> }
> @@ -1164,41 +1175,48 @@ hud_parse_env_var(struct hud_context *hud, const char *env)
> /* driver queries */
> if (!processed) {
> if (!hud_driver_query_install(&hud->batch_query, pane, hud->pipe,
> name)) {
> fprintf(stderr, "gallium_hud: unknown driver query '%s'\n", name);
> fflush(stderr);
> }
> }
> }
>
> - if (*env == ':') {
> + if (*env == ':' || *env == '=') {
> + char key = *env;
> env++;
>
> if (!pane) {
> fprintf(stderr, "gallium_hud: syntax error: unexpected ':', "
> "expected a name\n");
> fflush(stderr);
> break;
> }
>
> num = parse_string(env, s);
> env += num;
>
> - if (num && sscanf(s, "%u", &i) == 1) {
> - hud_pane_set_max_value(pane, i);
> - pane->initial_max_value = i;
> - }
> - else {
> - fprintf(stderr, "gallium_hud: syntax error: unexpected '%c' (%i) "
> - "after ':'\n", *env, *env);
> - fflush(stderr);
> + if (key == ':') {
> + if (num && sscanf(s, "%u", &i) == 1) {
> + hud_pane_set_max_value(pane, i);
> + pane->initial_max_value = i;
> + }
> + else {
> + fprintf(stderr, "gallium_hud: syntax error: unexpected '%c' (%i) "
> + "after ':'\n", *env, *env);
> + fflush(stderr);
> + }
> + } else if (key == '=') {
> + strip_hyphens(s);
> + strcpy(LIST_ENTRY(struct hud_graph,
> + pane->graph_list.prev, head)->name, s);
> }
> }
I don't see why one shouldn't be able to put both :[max] and =[name].
Since the : is per-pane and the = is per-data-source, I think it makes
sense to have
if (*env == '=') {
...
}
if (*env == ':') {
...
}
I suppose a while-loop would also work and would be simpler.
Apart from this, the series is
Reviewed-by: Nicolai Hähnle <nicolai.haehnle at amd.com>
Nicolai
>
> if (*env == 0)
> break;
>
> /* parse a separator */
> switch (*env) {
> case '+':
> env++;
> @@ -1264,20 +1282,22 @@ print_help(struct pipe_screen *screen)
> puts("");
> puts(" Names are identifiers of data sources which will be drawn as graphs");
> puts(" in panes. Multiple graphs can be drawn in the same pane.");
> puts(" There can be multiple panes placed in rows and columns.");
> puts("");
> puts(" '+' separates names which will share a pane.");
> puts(" ':[value]' specifies the initial maximum value of the Y axis");
> puts(" for the given pane.");
> puts(" ',' creates a new pane below the last one.");
> puts(" ';' creates a new pane at the top of the next column.");
> + puts(" '=' followed by a string, changes the name of the last data source");
> + puts(" to that string");
> puts("");
> puts(" Example: GALLIUM_HUD=\"cpu,fps;primitives-generated\"");
> puts("");
> puts(" Additionally, by prepending '.[identifier][value]' modifiers to");
> puts(" a name, it is possible to explicitly set the location and size");
> puts(" of a pane, along with limiting overall maximum value of the");
> puts(" Y axis and activating dynamic readjustment of the Y axis.");
> puts(" Several modifiers may be applied to the same pane simultaneously.");
> puts("");
> puts(" 'x[value]' sets the location of the pane on the x axis relative");
>
More information about the mesa-dev
mailing list