lists.openwall.net   lists  /  announce  owl-users  owl-dev  john-users  john-dev  passwdqc-users  yescrypt  popa3d-users  /  oss-security  kernel-hardening  musl  sabotage  tlsify  passwords  /  crypt-dev  xvendor  /  Bugtraq  Full-Disclosure  linux-kernel  linux-netdev  linux-ext4  linux-hardening  linux-cve-announce  PHC 
Open Source and information security mailing list archives
 
Hash Suite: Windows password security audit tool. GUI, reports in PDF.
[<prev] [next>] [<thread-prev] [day] [month] [year] [list]
Message-ID: <20120815163417.GJ2370@infradead.org>
Date:	Wed, 15 Aug 2012 13:34:17 -0300
From:	Arnaldo Carvalho de Melo <acme@...stprotocols.net>
To:	Namhyung Kim <namhyung@...nel.org>
Cc:	Ingo Molnar <mingo@...nel.org>,
	Peter Zijlstra <peterz@...radead.org>,
	Pekka Enberg <penberg@...nel.org>,
	LKML <linux-kernel@...r.kernel.org>
Subject: Re: [PATCH 1/5] perf ui: Introduce struct perf_helpline

Em Wed, Aug 15, 2012 at 11:57:31PM +0900, Namhyung Kim escreveu:
> Add struct perf_helpline in order to provide flexible implementation
> of helpline APIs. And convert existing TUI implementation to use it.

I advise not to use struct perf_helpline but struct ui_helpline, as it
is just user interface, not exactly tied to perf, it is just its first
user.

We don't need to bend over backwardws trying to create yet another UI
widget set, but there is no need to use the "perf_" namespace on it, I
think.

- Arnaldo
 
> Signed-off-by: Namhyung Kim <namhyung@...nel.org>
> ---
>  tools/perf/Makefile          |    5 ++--
>  tools/perf/ui/helpline.c     |   56 ++++++++++++++--------------------------
>  tools/perf/ui/helpline.h     |   10 +++++++-
>  tools/perf/ui/tui/helpline.c |   58 ++++++++++++++++++++++++++++++++++++++++++
>  4 files changed, 89 insertions(+), 40 deletions(-)
>  create mode 100644 tools/perf/ui/tui/helpline.c
> 
> diff --git a/tools/perf/Makefile b/tools/perf/Makefile
> index e457afa04b59..483fb69fa4ae 100644
> --- a/tools/perf/Makefile
> +++ b/tools/perf/Makefile
> @@ -335,6 +335,7 @@ LIB_H += util/rblist.h
>  LIB_H += util/intlist.h
>  LIB_H += util/perf_regs.h
>  LIB_H += util/unwind.h
> +LIB_H += ui/helpline.h
>  
>  LIB_OBJS += $(OUTPUT)util/abspath.o
>  LIB_OBJS += $(OUTPUT)util/alias.o
> @@ -402,6 +403,7 @@ LIB_OBJS += $(OUTPUT)util/cgroup.o
>  LIB_OBJS += $(OUTPUT)util/target.o
>  LIB_OBJS += $(OUTPUT)util/rblist.o
>  LIB_OBJS += $(OUTPUT)util/intlist.o
> +LIB_OBJS += $(OUTPUT)ui/helpline.o
>  
>  BUILTIN_OBJS += $(OUTPUT)builtin-annotate.o
>  
> @@ -567,14 +569,13 @@ else
>  		LIB_OBJS += $(OUTPUT)ui/browsers/annotate.o
>  		LIB_OBJS += $(OUTPUT)ui/browsers/hists.o
>  		LIB_OBJS += $(OUTPUT)ui/browsers/map.o
> -		LIB_OBJS += $(OUTPUT)ui/helpline.o
>  		LIB_OBJS += $(OUTPUT)ui/progress.o
>  		LIB_OBJS += $(OUTPUT)ui/util.o
>  		LIB_OBJS += $(OUTPUT)ui/tui/setup.o
>  		LIB_OBJS += $(OUTPUT)ui/tui/util.o
> +		LIB_OBJS += $(OUTPUT)ui/tui/helpline.o
>  		LIB_H += ui/browser.h
>  		LIB_H += ui/browsers/map.h
> -		LIB_H += ui/helpline.h
>  		LIB_H += ui/keysyms.h
>  		LIB_H += ui/libslang.h
>  		LIB_H += ui/progress.h
> diff --git a/tools/perf/ui/helpline.c b/tools/perf/ui/helpline.c
> index 2f950c2641c8..ac52dd0af49e 100644
> --- a/tools/perf/ui/helpline.c
> +++ b/tools/perf/ui/helpline.c
> @@ -5,23 +5,32 @@
>  #include "../debug.h"
>  #include "helpline.h"
>  #include "ui.h"
> -#include "libslang.h"
>  
> -void ui_helpline__pop(void)
> +char ui_helpline__current[512];
> +
> +static void perf_helpline__pop(void)
>  {
>  }
>  
> -char ui_helpline__current[512];
> +static void perf_helpline__push(const char *msg __used)
> +{
> +}
>  
> -void ui_helpline__push(const char *msg)
> +static struct perf_helpline default_helpline_fns = {
> +	.pop	= perf_helpline__pop,
> +	.push	= perf_helpline__push,
> +};
> +
> +struct perf_helpline *helpline_fns = &default_helpline_fns;
> +
> +void ui_helpline__pop(void)
>  {
> -	const size_t sz = sizeof(ui_helpline__current);
> +	helpline_fns->pop();
> +}
>  
> -	SLsmg_gotorc(SLtt_Screen_Rows - 1, 0);
> -	SLsmg_set_color(0);
> -	SLsmg_write_nstring((char *)msg, SLtt_Screen_Cols);
> -	SLsmg_refresh();
> -	strncpy(ui_helpline__current, msg, sz)[sz - 1] = '\0';
> +void ui_helpline__push(const char *msg)
> +{
> +	helpline_fns->push(msg);
>  }
>  
>  void ui_helpline__vpush(const char *fmt, va_list ap)
> @@ -50,30 +59,3 @@ void ui_helpline__puts(const char *msg)
>  	ui_helpline__pop();
>  	ui_helpline__push(msg);
>  }
> -
> -void ui_helpline__init(void)
> -{
> -	ui_helpline__puts(" ");
> -}
> -
> -char ui_helpline__last_msg[1024];
> -
> -int ui_helpline__show_help(const char *format, va_list ap)
> -{
> -	int ret;
> -	static int backlog;
> -
> -	pthread_mutex_lock(&ui__lock);
> -	ret = vscnprintf(ui_helpline__last_msg + backlog,
> -			sizeof(ui_helpline__last_msg) - backlog, format, ap);
> -	backlog += ret;
> -
> -	if (ui_helpline__last_msg[backlog - 1] == '\n') {
> -		ui_helpline__puts(ui_helpline__last_msg);
> -		SLsmg_refresh();
> -		backlog = 0;
> -	}
> -	pthread_mutex_unlock(&ui__lock);
> -
> -	return ret;
> -}
> diff --git a/tools/perf/ui/helpline.h b/tools/perf/ui/helpline.h
> index 7bab6b34e35e..eee8e2ff51d8 100644
> --- a/tools/perf/ui/helpline.h
> +++ b/tools/perf/ui/helpline.h
> @@ -4,13 +4,21 @@
>  #include <stdio.h>
>  #include <stdarg.h>
>  
> +struct perf_helpline {
> +	void (*pop)(void);
> +	void (*push)(const char *msg);
> +};
> +
> +extern struct perf_helpline *helpline_fns;
> +
>  void ui_helpline__init(void);
> +
>  void ui_helpline__pop(void);
>  void ui_helpline__push(const char *msg);
>  void ui_helpline__vpush(const char *fmt, va_list ap);
>  void ui_helpline__fpush(const char *fmt, ...);
>  void ui_helpline__puts(const char *msg);
>  
> -extern char ui_helpline__current[];
> +extern char ui_helpline__current[512];
>  
>  #endif /* _PERF_UI_HELPLINE_H_ */
> diff --git a/tools/perf/ui/tui/helpline.c b/tools/perf/ui/tui/helpline.c
> new file mode 100644
> index 000000000000..b63a9326d06b
> --- /dev/null
> +++ b/tools/perf/ui/tui/helpline.c
> @@ -0,0 +1,58 @@
> +#include <stdio.h>
> +#include <stdlib.h>
> +#include <string.h>
> +#include <pthread.h>
> +
> +#include "../../util/debug.h"
> +#include "../helpline.h"
> +#include "../ui.h"
> +#include "../libslang.h"
> +
> +
> +static void tui_helpline__pop(void)
> +{
> +}
> +
> +static void tui_helpline__push(const char *msg)
> +{
> +	const size_t sz = sizeof(ui_helpline__current);
> +
> +	SLsmg_gotorc(SLtt_Screen_Rows - 1, 0);
> +	SLsmg_set_color(0);
> +	SLsmg_write_nstring((char *)msg, SLtt_Screen_Cols);
> +	SLsmg_refresh();
> +	strncpy(ui_helpline__current, msg, sz)[sz - 1] = '\0';
> +}
> +
> +struct perf_helpline tui_helpline_fns = {
> +	.pop	= tui_helpline__pop,
> +	.push	= tui_helpline__push,
> +};
> +
> +void ui_helpline__init(void)
> +{
> +	helpline_fns = &tui_helpline_fns;
> +	ui_helpline__puts(" ");
> +}
> +
> +char ui_helpline__last_msg[1024];
> +
> +int ui_helpline__show_help(const char *format, va_list ap)
> +{
> +	int ret;
> +	static int backlog;
> +
> +	pthread_mutex_lock(&ui__lock);
> +	ret = vscnprintf(ui_helpline__last_msg + backlog,
> +			sizeof(ui_helpline__last_msg) - backlog, format, ap);
> +	backlog += ret;
> +
> +	if (ui_helpline__last_msg[backlog - 1] == '\n') {
> +		ui_helpline__puts(ui_helpline__last_msg);
> +		SLsmg_refresh();
> +		backlog = 0;
> +	}
> +	pthread_mutex_unlock(&ui__lock);
> +
> +	return ret;
> +}
> -- 
> 1.7.9.2
--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@...r.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Please read the FAQ at  http://www.tux.org/lkml/

Powered by blists - more mailing lists

Powered by Openwall GNU/*/Linux Powered by OpenVZ