All of lore.kernel.org
 help / color / mirror / Atom feed
From: Jiri Olsa <jolsa@redhat.com>
To: Arnaldo Carvalho de Melo <acme@kernel.org>
Cc: Jiri Olsa <jolsa@kernel.org>,
	linux-kernel@vger.kernel.org,
	Corey Ashford <cjashfor@linux.vnet.ibm.com>,
	David Ahern <dsahern@gmail.com>,
	Frederic Weisbecker <fweisbec@gmail.com>,
	Ingo Molnar <mingo@kernel.org>,
	Namhyung Kim <namhyung@kernel.org>,
	Paul Mackerras <paulus@samba.org>,
	Peter Zijlstra <a.p.zijlstra@chello.nl>
Subject: Re: [PATCH 1/5] perf tools: Factor ui_browser ops out of ui_browser struct
Date: Thu, 19 Jun 2014 18:49:21 +0200	[thread overview]
Message-ID: <20140619164921.GA31520@krava.brq.redhat.com> (raw)
In-Reply-To: <20140619153851.GE20252@kernel.org>

On Thu, Jun 19, 2014 at 12:38:51PM -0300, Arnaldo Carvalho de Melo wrote:
> Em Thu, Jun 19, 2014 at 01:41:12PM +0200, Jiri Olsa escreveu:
> > Separating ops out of 'struct ui_browser' into
> > 'struct ui_browser_ops'.
> 
> You stated what you did, and that helps in understanding what this patch
> is about, now we only need to have a paragraph on _why_ this is needed
> :-)

well.. it's not ;-) but we always separated ops from the
structs IIRC

I introduced another callback in the early stage of this change,
but replaced it later.. this remained ;-)

no need to take it.. as I wrote in patch 0:

Patches 1 and 2 are not necessary for the functionality,
they are just byproducts of another early way I tried,
but I think they could go in.

jirka

> 
> So, what is the intent of this patch? Why do we need it?
>  
> > Cc: Arnaldo Carvalho de Melo <acme@kernel.org>
> > Cc: Corey Ashford <cjashfor@linux.vnet.ibm.com>
> > Cc: David Ahern <dsahern@gmail.com>
> > Cc: Frederic Weisbecker <fweisbec@gmail.com>
> > Cc: Ingo Molnar <mingo@kernel.org>
> > Cc: Namhyung Kim <namhyung@kernel.org>
> > Cc: Paul Mackerras <paulus@samba.org>
> > Cc: Peter Zijlstra <a.p.zijlstra@chello.nl>
> > Signed-off-by: Jiri Olsa <jolsa@kernel.org>
> > ---
> >  tools/perf/ui/browser.c           | 37 ++++++++++++++++++++++---------------
> >  tools/perf/ui/browser.h           | 28 +++++++++++++++++-----------
> >  tools/perf/ui/browsers/annotate.c | 19 +++++++++++--------
> >  tools/perf/ui/browsers/header.c   |  8 +++++---
> >  tools/perf/ui/browsers/hists.c    | 14 ++++++++------
> >  tools/perf/ui/browsers/map.c      |  8 +++++---
> >  tools/perf/ui/browsers/scripts.c  |  2 +-
> >  tools/perf/ui/tui/util.c          |  8 +++++---
> >  8 files changed, 74 insertions(+), 50 deletions(-)
> > 
> > diff --git a/tools/perf/ui/browser.c b/tools/perf/ui/browser.c
> > index 3ccf6e1..e6f96be 100644
> > --- a/tools/perf/ui/browser.c
> > +++ b/tools/perf/ui/browser.c
> > @@ -46,12 +46,18 @@ void ui_browser__gotorc(struct ui_browser *browser, int y, int x)
> >  	SLsmg_gotorc(browser->y + y, browser->x + x);
> >  }
> >  
> > +static bool ui_browser__filter(struct ui_browser *browser, void *entry)
> > +{
> > +	return browser->ops.filter ? browser->ops.filter(browser, entry) :
> > +				     false;
> > +}
> > +
> >  static struct list_head *
> >  ui_browser__list_head_filter_entries(struct ui_browser *browser,
> >  				     struct list_head *pos)
> >  {
> >  	do {
> > -		if (!browser->filter || !browser->filter(browser, pos))
> > +		if (!ui_browser__filter(browser, pos))
> >  			return pos;
> >  		pos = pos->next;
> >  	} while (pos != browser->entries);
> > @@ -64,7 +70,7 @@ ui_browser__list_head_filter_prev_entries(struct ui_browser *browser,
> >  					  struct list_head *pos)
> >  {
> >  	do {
> > -		if (!browser->filter || !browser->filter(browser, pos))
> > +		if (!ui_browser__filter(browser, pos))
> >  			return pos;
> >  		pos = pos->prev;
> >  	} while (pos != browser->entries);
> > @@ -149,7 +155,7 @@ unsigned int ui_browser__rb_tree_refresh(struct ui_browser *browser)
> >  
> >  	while (nd != NULL) {
> >  		ui_browser__gotorc(browser, row, 0);
> > -		browser->write(browser, nd, row);
> > +		browser->ops.write(browser, nd, row);
> >  		if (++row == browser->height)
> >  			break;
> >  		nd = rb_next(nd);
> > @@ -227,7 +233,7 @@ bool ui_browser__dialog_yesno(struct ui_browser *browser, const char *text)
> >  void ui_browser__reset_index(struct ui_browser *browser)
> >  {
> >  	browser->index = browser->top_idx = 0;
> > -	browser->seek(browser, 0, SEEK_SET);
> > +	browser->ops.seek(browser, 0, SEEK_SET);
> >  }
> >  
> >  void __ui_browser__show_title(struct ui_browser *browser, const char *title)
> > @@ -302,7 +308,7 @@ static int __ui_browser__refresh(struct ui_browser *browser)
> >  	int row;
> >  	int width = browser->width;
> >  
> > -	row = browser->refresh(browser);
> > +	row = browser->ops.refresh(browser);
> >  	ui_browser__set_color(browser, HE_COLORSET_NORMAL);
> >  
> >  	if (!browser->use_navkeypressed || browser->navkeypressed)
> > @@ -346,11 +352,12 @@ void ui_browser__update_nr_entries(struct ui_browser *browser, u32 nr_entries)
> >  	}
> >  
> >  	browser->top = NULL;
> > -	browser->seek(browser, browser->top_idx, SEEK_SET);
> > +	browser->ops.seek(browser, browser->top_idx, SEEK_SET);
> >  }
> >  
> >  int ui_browser__run(struct ui_browser *browser, int delay_secs)
> >  {
> > +	struct ui_browser_ops *ops = &browser->ops;
> >  	int err, key;
> >  
> >  	while (1) {
> > @@ -391,7 +398,7 @@ int ui_browser__run(struct ui_browser *browser, int delay_secs)
> >  			++browser->index;
> >  			if (browser->index == browser->top_idx + browser->height) {
> >  				++browser->top_idx;
> > -				browser->seek(browser, +1, SEEK_CUR);
> > +				ops->seek(browser, +1, SEEK_CUR);
> >  			}
> >  			break;
> >  		case K_UP:
> > @@ -400,7 +407,7 @@ int ui_browser__run(struct ui_browser *browser, int delay_secs)
> >  			--browser->index;
> >  			if (browser->index < browser->top_idx) {
> >  				--browser->top_idx;
> > -				browser->seek(browser, -1, SEEK_CUR);
> > +				ops->seek(browser, -1, SEEK_CUR);
> >  			}
> >  			break;
> >  		case K_PGDN:
> > @@ -413,7 +420,7 @@ int ui_browser__run(struct ui_browser *browser, int delay_secs)
> >  				offset = browser->nr_entries - 1 - browser->index;
> >  			browser->index += offset;
> >  			browser->top_idx += offset;
> > -			browser->seek(browser, +offset, SEEK_CUR);
> > +			ops->seek(browser, +offset, SEEK_CUR);
> >  			break;
> >  		case K_PGUP:
> >  			if (browser->top_idx == 0)
> > @@ -426,7 +433,7 @@ int ui_browser__run(struct ui_browser *browser, int delay_secs)
> >  
> >  			browser->index -= offset;
> >  			browser->top_idx -= offset;
> > -			browser->seek(browser, -offset, SEEK_CUR);
> > +			ops->seek(browser, -offset, SEEK_CUR);
> >  			break;
> >  		case K_HOME:
> >  			ui_browser__reset_index(browser);
> > @@ -438,7 +445,7 @@ int ui_browser__run(struct ui_browser *browser, int delay_secs)
> >  
> >  			browser->index = browser->nr_entries - 1;
> >  			browser->top_idx = browser->index - offset;
> > -			browser->seek(browser, -offset, SEEK_END);
> > +			ops->seek(browser, -offset, SEEK_END);
> >  			break;
> >  		default:
> >  			return key;
> > @@ -459,9 +466,9 @@ unsigned int ui_browser__list_head_refresh(struct ui_browser *browser)
> >  	pos = browser->top;
> >  
> >  	list_for_each_from(pos, head) {
> > -		if (!browser->filter || !browser->filter(browser, pos)) {
> > +		if (!ui_browser__filter(browser, pos)) {
> >  			ui_browser__gotorc(browser, row, 0);
> > -			browser->write(browser, pos, row);
> > +			browser->ops.write(browser, pos, row);
> >  			if (++row == browser->height)
> >  				break;
> >  		}
> > @@ -584,9 +591,9 @@ unsigned int ui_browser__argv_refresh(struct ui_browser *browser)
> >  
> >  	pos = (char **)browser->top;
> >  	while (idx < browser->nr_entries) {
> > -		if (!browser->filter || !browser->filter(browser, *pos)) {
> > +		if (!ui_browser__filter(browser, *pos)) {
> >  			ui_browser__gotorc(browser, row, 0);
> > -			browser->write(browser, pos, row);
> > +			browser->ops.write(browser, pos, row);
> >  			if (++row == browser->height)
> >  				break;
> >  		}
> > diff --git a/tools/perf/ui/browser.h b/tools/perf/ui/browser.h
> > index 03d4d62..5887ca7 100644
> > --- a/tools/perf/ui/browser.h
> > +++ b/tools/perf/ui/browser.h
> > @@ -11,21 +11,27 @@
> >  #define HE_COLORSET_ADDR	55
> >  #define HE_COLORSET_ROOT	56
> >  
> > -struct ui_browser {
> > -	u64	      index, top_idx;
> > -	void	      *top, *entries;
> > -	u16	      y, x, width, height;
> > -	int	      current_color;
> > -	void	      *priv;
> > -	const char    *title;
> > -	char	      *helpline;
> > +struct ui_browser;
> > +
> > +struct ui_browser_ops {
> >  	unsigned int  (*refresh)(struct ui_browser *browser);
> >  	void	      (*write)(struct ui_browser *browser, void *entry, int row);
> >  	void	      (*seek)(struct ui_browser *browser, off_t offset, int whence);
> >  	bool	      (*filter)(struct ui_browser *browser, void *entry);
> > -	u32	      nr_entries;
> > -	bool	      navkeypressed;
> > -	bool	      use_navkeypressed;
> > +};
> > +
> > +struct ui_browser {
> > +	u64			index, top_idx;
> > +	void			*top, *entries;
> > +	u16			y, x, width, height;
> > +	int			current_color;
> > +	void			*priv;
> > +	const char		*title;
> > +	char			*helpline;
> > +	u32			nr_entries;
> > +	bool			navkeypressed;
> > +	bool			use_navkeypressed;
> > +	struct ui_browser_ops	ops;
> >  };
> >  
> >  int  ui_browser__set_color(struct ui_browser *browser, int color);
> > diff --git a/tools/perf/ui/browsers/annotate.c b/tools/perf/ui/browsers/annotate.c
> > index f0697a3..bc4bcfa 100644
> > --- a/tools/perf/ui/browsers/annotate.c
> > +++ b/tools/perf/ui/browsers/annotate.c
> > @@ -388,8 +388,9 @@ static bool annotate_browser__toggle_source(struct annotate_browser *browser)
> >  	struct disasm_line *dl;
> >  	struct browser_disasm_line *bdl;
> >  	off_t offset = browser->b.index - browser->b.top_idx;
> > +	struct ui_browser_ops *ops = &browser->b.ops;
> >  
> > -	browser->b.seek(&browser->b, offset, SEEK_CUR);
> > +	ops->seek(&browser->b, offset, SEEK_CUR);
> >  	dl = list_entry(browser->b.top, struct disasm_line, node);
> >  	bdl = disasm_line__browser(dl);
> >  
> > @@ -399,13 +400,13 @@ static bool annotate_browser__toggle_source(struct annotate_browser *browser)
> >  
> >  		browser->b.nr_entries = browser->nr_entries;
> >  		annotate_browser__opts.hide_src_code = false;
> > -		browser->b.seek(&browser->b, -offset, SEEK_CUR);
> > +		ops->seek(&browser->b, -offset, SEEK_CUR);
> >  		browser->b.top_idx = bdl->idx - offset;
> >  		browser->b.index = bdl->idx;
> >  	} else {
> >  		if (bdl->idx_asm < 0) {
> >  			ui_helpline__puts("Only available for assembly lines.");
> > -			browser->b.seek(&browser->b, -offset, SEEK_CUR);
> > +			ops->seek(&browser->b, -offset, SEEK_CUR);
> >  			return false;
> >  		}
> >  
> > @@ -414,7 +415,7 @@ static bool annotate_browser__toggle_source(struct annotate_browser *browser)
> >  
> >  		browser->b.nr_entries = browser->nr_asm_entries;
> >  		annotate_browser__opts.hide_src_code = true;
> > -		browser->b.seek(&browser->b, -offset, SEEK_CUR);
> > +		ops->seek(&browser->b, -offset, SEEK_CUR);
> >  		browser->b.top_idx = bdl->idx_asm - offset;
> >  		browser->b.index = bdl->idx_asm;
> >  	}
> > @@ -882,10 +883,12 @@ int symbol__tui_annotate(struct symbol *sym, struct map *map,
> >  	};
> >  	struct annotate_browser browser = {
> >  		.b = {
> > -			.refresh = annotate_browser__refresh,
> > -			.seek	 = ui_browser__list_head_seek,
> > -			.write	 = annotate_browser__write,
> > -			.filter  = disasm_line__filter,
> > +			.ops = {
> > +				.refresh = annotate_browser__refresh,
> > +				.seek	 = ui_browser__list_head_seek,
> > +				.write	 = annotate_browser__write,
> > +				.filter  = disasm_line__filter,
> > +			},
> >  			.priv	 = &ms,
> >  			.use_navkeypressed = true,
> >  		},
> > diff --git a/tools/perf/ui/browsers/header.c b/tools/perf/ui/browsers/header.c
> > index 89c16b9..69f1929 100644
> > --- a/tools/perf/ui/browsers/header.c
> > +++ b/tools/perf/ui/browsers/header.c
> > @@ -81,10 +81,12 @@ static int ui__list_menu(int argc, char * const argv[])
> >  {
> >  	struct ui_browser menu = {
> >  		.entries    = (void *)argv,
> > -		.refresh    = ui_browser__argv_refresh,
> > -		.seek	    = ui_browser__argv_seek,
> > -		.write	    = ui_browser__argv_write,
> >  		.nr_entries = argc,
> > +		.ops = {
> > +			.refresh    = ui_browser__argv_refresh,
> > +			.seek	    = ui_browser__argv_seek,
> > +			.write	    = ui_browser__argv_write,
> > +		},
> >  	};
> >  
> >  	return list_menu__run(&menu);
> > diff --git a/tools/perf/ui/browsers/hists.c b/tools/perf/ui/browsers/hists.c
> > index 04a229a..7cb6309 100644
> > --- a/tools/perf/ui/browsers/hists.c
> > +++ b/tools/perf/ui/browsers/hists.c
> > @@ -1190,8 +1190,8 @@ static struct hist_browser *hist_browser__new(struct hists *hists)
> >  
> >  	if (browser) {
> >  		browser->hists = hists;
> > -		browser->b.refresh = hist_browser__refresh;
> > -		browser->b.seek = ui_browser__hists_seek;
> > +		browser->b.ops.refresh = hist_browser__refresh;
> > +		browser->b.ops.seek = ui_browser__hists_seek;
> >  		browser->b.use_navkeypressed = true;
> >  	}
> >  
> > @@ -1947,11 +1947,13 @@ static int __perf_evlist__tui_browse_hists(struct perf_evlist *evlist,
> >  	struct perf_evsel *pos;
> >  	struct perf_evsel_menu menu = {
> >  		.b = {
> > +			.ops = {
> > +				.refresh    = ui_browser__list_head_refresh,
> > +				.seek	    = ui_browser__list_head_seek,
> > +				.write	    = perf_evsel_menu__write,
> > +				.filter	    = filter_group_entries,
> > +			},
> >  			.entries    = &evlist->entries,
> > -			.refresh    = ui_browser__list_head_refresh,
> > -			.seek	    = ui_browser__list_head_seek,
> > -			.write	    = perf_evsel_menu__write,
> > -			.filter	    = filter_group_entries,
> >  			.nr_entries = nr_entries,
> >  			.priv	    = evlist,
> >  		},
> > diff --git a/tools/perf/ui/browsers/map.c b/tools/perf/ui/browsers/map.c
> > index b11639f..6b09cd6 100644
> > --- a/tools/perf/ui/browsers/map.c
> > +++ b/tools/perf/ui/browsers/map.c
> > @@ -103,9 +103,11 @@ int map__browse(struct map *map)
> >  	struct map_browser mb = {
> >  		.b = {
> >  			.entries = &map->dso->symbols[map->type],
> > -			.refresh = ui_browser__rb_tree_refresh,
> > -			.seek	 = ui_browser__rb_tree_seek,
> > -			.write	 = map_browser__write,
> > +			.ops = {
> > +				.refresh = ui_browser__rb_tree_refresh,
> > +				.seek	 = ui_browser__rb_tree_seek,
> > +				.write	 = map_browser__write,
> > +			},
> >  		},
> >  		.map = map,
> >  	};
> > diff --git a/tools/perf/ui/browsers/scripts.c b/tools/perf/ui/browsers/scripts.c
> > index 402d2bd..bbbc442 100644
> > --- a/tools/perf/ui/browsers/scripts.c
> > +++ b/tools/perf/ui/browsers/scripts.c
> > @@ -116,7 +116,7 @@ int script_browse(const char *script_opt)
> >  	struct script_line *sline;
> >  
> >  	struct perf_script_browser script = {
> > -		.b = {
> > +		.b.ops = {
> >  			.refresh    = ui_browser__list_head_refresh,
> >  			.seek	    = ui_browser__list_head_seek,
> >  			.write	    = script_browser__write,
> > diff --git a/tools/perf/ui/tui/util.c b/tools/perf/ui/tui/util.c
> > index bf890f7..8ac0465 100644
> > --- a/tools/perf/ui/tui/util.c
> > +++ b/tools/perf/ui/tui/util.c
> > @@ -60,10 +60,12 @@ int ui__popup_menu(int argc, char * const argv[])
> >  {
> >  	struct ui_browser menu = {
> >  		.entries    = (void *)argv,
> > -		.refresh    = ui_browser__argv_refresh,
> > -		.seek	    = ui_browser__argv_seek,
> > -		.write	    = ui_browser__argv_write,
> >  		.nr_entries = argc,
> > +		.ops        = {
> > +			.refresh    = ui_browser__argv_refresh,
> > +			.seek	    = ui_browser__argv_seek,
> > +			.write	    = ui_browser__argv_write,
> > +		},
> >  	};
> >  
> >  	return popup_menu__run(&menu);
> > -- 
> > 1.8.3.1

  reply	other threads:[~2014-06-19 16:49 UTC|newest]

Thread overview: 21+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2014-06-19 11:41 [PATCHv2 0/5] perf tools tui: Display columns headers Jiri Olsa
2014-06-19 11:41 ` [PATCH 1/5] perf tools: Factor ui_browser ops out of ui_browser struct Jiri Olsa
2014-06-19 15:38   ` Arnaldo Carvalho de Melo
2014-06-19 16:49     ` Jiri Olsa [this message]
2014-06-19 23:33       ` Namhyung Kim
2014-06-19 11:41 ` [PATCH 2/5] perf tools: Remove ev_name argument from perf_evsel__hists_browse Jiri Olsa
2014-06-19 15:41   ` Arnaldo Carvalho de Melo
2014-06-25  5:51   ` [tip:perf/core] perf hists browser: " tip-bot for Jiri Olsa
2014-06-19 11:41 ` [PATCH 3/5] perf tools: Fix scrollbar refresh row index Jiri Olsa
2014-06-25  5:51   ` [tip:perf/core] perf ui browser: " tip-bot for Jiri Olsa
2014-06-19 11:41 ` [PATCH 4/5] perf tools tui: Display columns header text on 'H' press Jiri Olsa
2014-06-19 11:41 ` [PATCH 5/5] perf tools: Add report.show-headers config file option Jiri Olsa
2014-06-19 12:56   ` Namhyung Kim
2014-06-19 13:02     ` Jiri Olsa
2014-06-19 13:09       ` Namhyung Kim
2014-06-19 16:51         ` Jiri Olsa
2014-06-19 23:37           ` Namhyung Kim
2014-06-19 15:28     ` Arnaldo Carvalho de Melo
2014-06-19 16:58       ` Jiri Olsa
2014-06-19 23:46         ` Namhyung Kim
2014-06-20  8:03           ` Jiri Olsa

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20140619164921.GA31520@krava.brq.redhat.com \
    --to=jolsa@redhat.com \
    --cc=a.p.zijlstra@chello.nl \
    --cc=acme@kernel.org \
    --cc=cjashfor@linux.vnet.ibm.com \
    --cc=dsahern@gmail.com \
    --cc=fweisbec@gmail.com \
    --cc=jolsa@kernel.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=mingo@kernel.org \
    --cc=namhyung@kernel.org \
    --cc=paulus@samba.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.