diff options
Diffstat (limited to 'tools/perf/builtin-annotate.c')
| -rw-r--r-- | tools/perf/builtin-annotate.c | 30 | 
1 files changed, 27 insertions, 3 deletions
| diff --git a/tools/perf/builtin-annotate.c b/tools/perf/builtin-annotate.c index dc870cf31b7..2e6961ea318 100644 --- a/tools/perf/builtin-annotate.c +++ b/tools/perf/builtin-annotate.c @@ -34,9 +34,10 @@  struct perf_annotate {  	struct perf_tool tool; -	bool	   force, use_tui, use_stdio; +	bool	   force, use_tui, use_stdio, use_gtk;  	bool	   full_paths;  	bool	   print_line; +	bool	   skip_missing;  	const char *sym_hist_filter;  	const char *cpu_list;  	DECLARE_BITMAP(cpu_bitmap, MAX_NR_CPUS); @@ -138,9 +139,22 @@ find_next:  			continue;  		} -		if (use_browser > 0) { +		if (use_browser == 2) { +			int ret; + +			ret = hist_entry__gtk_annotate(he, evidx, NULL); +			if (!ret || !ann->skip_missing) +				return; + +			/* skip missing symbols */ +			nd = rb_next(nd); +		} else if (use_browser == 1) {  			key = hist_entry__tui_annotate(he, evidx, NULL);  			switch (key) { +			case -1: +				if (!ann->skip_missing) +					return; +				/* fall through */  			case K_RIGHT:  				next = rb_next(nd);  				break; @@ -224,6 +238,10 @@ static int __cmd_annotate(struct perf_annotate *ann)  		ui__error("The %s file has no samples!\n", session->filename);  		goto out_delete;  	} + +	if (use_browser == 2) +		perf_gtk__show_annotations(); +  out_delete:  	/*  	 * Speed up the exit process, for large files this can @@ -270,6 +288,7 @@ int cmd_annotate(int argc, const char **argv, const char *prefix __maybe_unused)  		    "be more verbose (show symbol address, etc)"),  	OPT_BOOLEAN('D', "dump-raw-trace", &dump_trace,  		    "dump raw trace in ASCII"), +	OPT_BOOLEAN(0, "gtk", &annotate.use_gtk, "Use the GTK interface"),  	OPT_BOOLEAN(0, "tui", &annotate.use_tui, "Use the TUI interface"),  	OPT_BOOLEAN(0, "stdio", &annotate.use_stdio, "Use the stdio interface"),  	OPT_STRING('k', "vmlinux", &symbol_conf.vmlinux_name, @@ -280,6 +299,8 @@ int cmd_annotate(int argc, const char **argv, const char *prefix __maybe_unused)  		    "print matching source lines (may be slow)"),  	OPT_BOOLEAN('P', "full-paths", &annotate.full_paths,  		    "Don't shorten the displayed pathnames"), +	OPT_BOOLEAN(0, "skip-missing", &annotate.skip_missing, +		    "Skip symbols that cannot be annotated"),  	OPT_STRING('C', "cpu", &annotate.cpu_list, "cpu", "list of cpus to profile"),  	OPT_STRING(0, "symfs", &symbol_conf.symfs, "directory",  		   "Look for files with symbols relative to this directory"), @@ -300,6 +321,8 @@ int cmd_annotate(int argc, const char **argv, const char *prefix __maybe_unused)  		use_browser = 0;  	else if (annotate.use_tui)  		use_browser = 1; +	else if (annotate.use_gtk) +		use_browser = 2;  	setup_browser(true); @@ -309,7 +332,8 @@ int cmd_annotate(int argc, const char **argv, const char *prefix __maybe_unused)  	if (symbol__init() < 0)  		return -1; -	setup_sorting(annotate_usage, options); +	if (setup_sorting() < 0) +		usage_with_options(annotate_usage, options);  	if (argc) {  		/* | 
