From: Feng Tang <feng.tang@intel.com>
To: acme@redhat.com
Cc: mingo@elte.hu, a.p.zijlstra@chello.nl, andi@firstfloor.org,
namhyung@kernel.org, dsahern@gmail.com,
linux-kernel@vger.kernel.org, Feng Tang <feng.tang@intel.com>
Subject: [PATCH v3 8/9] perf hists browser: Add option for runtime switching perf data file
Date: Mon, 24 Sep 2012 23:24:10 +0800 [thread overview]
Message-ID: <1348500251-9937-9-git-send-email-feng.tang@intel.com> (raw)
In-Reply-To: <1348500251-9937-1-git-send-email-feng.tang@intel.com>
Based on perf report/top/scripts browser integration idea from acme.
This will enable user to runtime swich the data file, when this option
is selected, it will popup all the legal data files in current working
directory, and the filename selected by user is saved in the global
variable "input_name", and a new key 'K_SWITCH_INPUT_DATA' will be
passed back and notify the builtin command that there is a pending data
switch, andd the command will perform the switch.
This initial version only enables it for 'perf report', by checking
the "timer" parameter of perf_evsel__hists_browser() equals NULL.
Signed-off-by: Feng Tang <feng.tang@intel.com>
---
tools/perf/ui/browsers/hists.c | 75 +++++++++++++++++++++++++++++++++++++++-
tools/perf/ui/keysyms.h | 1 +
2 files changed, 75 insertions(+), 1 deletions(-)
diff --git a/tools/perf/ui/browsers/hists.c b/tools/perf/ui/browsers/hists.c
index c491b78..7390614 100644
--- a/tools/perf/ui/browsers/hists.c
+++ b/tools/perf/ui/browsers/hists.c
@@ -1125,6 +1125,67 @@ static inline void free_popup_options(char **options, int n)
}
}
+static int switch_data_file(void)
+{
+ char *pwd, *options[256], *abs_path[256];
+ DIR *pwd_dir;
+ int nr_options = 0, choice = -1, ret = -1;
+
+ struct dirent *dent;
+
+ pwd = getenv("PWD");
+ if (!pwd)
+ return ret;
+
+ pwd_dir = opendir(pwd);
+ if (!pwd_dir)
+ return ret;
+
+ memset(options, 0, sizeof(options));
+ memset(options, 0, sizeof(abs_path));
+
+ while ((dent = readdir(pwd_dir))) {
+ char path[PATH_MAX];
+ u64 magic;
+ char *name = dent->d_name;
+ FILE *file;
+
+ if (!(dent->d_type == DT_REG))
+ continue;
+
+ snprintf(path, PATH_MAX, "%s/%s", pwd, name);
+
+ file = fopen(path, "r");
+ if (!file)
+ continue;
+
+ if (fread(&magic, 1, 8, file) < 8) {
+ fclose(file);
+ continue;
+ }
+
+ if (!check_perf_magic(magic)) {
+ options[nr_options] = strdup(name);
+ abs_path[nr_options++] = strdup(path);
+ }
+ fclose(file);
+ }
+ closedir(pwd_dir);
+
+ if (nr_options) {
+ choice = ui__popup_menu(nr_options, options);
+ if (choice < nr_options && choice >= 0) {
+ input_name = strdup(abs_path[choice]);
+ ret = 0;
+ }
+ }
+
+ free_popup_options(options, nr_options);
+ free_popup_options(abs_path, nr_options);
+ return ret;
+}
+
+
static int perf_evsel__hists_browse(struct perf_evsel *evsel, int nr_events,
const char *helpline, const char *ev_name,
bool left_exits,
@@ -1159,7 +1220,8 @@ static int perf_evsel__hists_browse(struct perf_evsel *evsel, int nr_events,
int choice = 0,
annotate = -2, zoom_dso = -2, zoom_thread = -2,
annotate_f = -2, annotate_t = -2, browse_map = -2;
- int scripts_comm = -2, scripts_symbol = -2, scripts_all = -2;
+ int scripts_comm = -2, scripts_symbol = -2,
+ scripts_all = -2, switch_data = -2;
nr_options = 0;
@@ -1340,6 +1402,9 @@ static int perf_evsel__hists_browse(struct perf_evsel *evsel, int nr_events,
if (asprintf(&options[nr_options], "Run scripts for all samples") > 0)
scripts_all = nr_options++;
+ if (!timer && asprintf(&options[nr_options],
+ "Switch to another data file in current dir") > 0)
+ switch_data = nr_options++;
add_exit_option:
options[nr_options++] = (char *)"Exit";
retry_popup_menu:
@@ -1446,6 +1511,13 @@ do_scripts:
script_browse(script_opt);
}
+ /* Switch to another data file */
+ else if (choice == switch_data) {
+ if (!switch_data_file()) {
+ key = K_SWITCH_INPUT_DATA;
+ break;
+ }
+ }
}
out_free_stack:
pstack__delete(fstack);
@@ -1560,6 +1632,7 @@ browse_hists:
"Do you really want to exit?"))
continue;
/* Fall thru */
+ case K_SWITCH_INPUT_DATA:
case 'q':
case CTRL('c'):
goto out;
diff --git a/tools/perf/ui/keysyms.h b/tools/perf/ui/keysyms.h
index 809eca5..65092d5 100644
--- a/tools/perf/ui/keysyms.h
+++ b/tools/perf/ui/keysyms.h
@@ -23,5 +23,6 @@
#define K_TIMER -1
#define K_ERROR -2
#define K_RESIZE -3
+#define K_SWITCH_INPUT_DATA -4
#endif /* _PERF_KEYSYMS_H_ */
--
1.7.1
next prev parent reply other threads:[~2012-09-24 15:30 UTC|newest]
Thread overview: 32+ messages / expand[flat|nested] mbox.gz Atom feed top
2012-09-24 15:24 [PATCH v3 0/9] perf tools: Add script browser and runtime data file switch Feng Tang
2012-09-24 15:24 ` [PATCH v3 1/9] perf hists: Move hists_init() from util/evsel.c to util/hist.c Feng Tang
2012-09-24 16:02 ` Arnaldo Carvalho de Melo
2012-09-25 1:25 ` Namhyung Kim
2012-09-25 11:05 ` Arnaldo Carvalho de Melo
2012-09-25 12:59 ` Namhyung Kim
2012-09-25 13:30 ` perf tools regression testing was " Arnaldo Carvalho de Melo
2012-09-25 13:47 ` Namhyung Kim
2012-09-25 14:10 ` Arnaldo Carvalho de Melo
2012-09-25 8:03 ` Feng Tang
2012-09-24 15:24 ` [PATCH v3 2/9] perf tool: Add a global variable "const char *input_name" Feng Tang
2012-09-24 15:24 ` [PATCH v3 3/9] perf script: Add more filter to find_scripts() Feng Tang
2012-09-25 1:47 ` Namhyung Kim
2012-09-26 8:56 ` Feng Tang
2012-09-27 4:45 ` Namhyung Kim
2012-09-27 10:39 ` Namhyung Kim
2012-09-24 15:24 ` [PATCH v3 4/9] perf ui/browser: Add a browser for perf script Feng Tang
2012-09-24 15:24 ` [PATCH v3 5/9] perf ui/browser: Integrate script browser into annotation browser Feng Tang
2012-09-24 15:24 ` [PATCH v3 6/9] perf ui/browser: Integrate script browser into main hists browser Feng Tang
2012-09-24 15:24 ` [PATCH v3 7/9] perf header: Add check_perf_magic() func Feng Tang
2012-09-24 16:01 ` Arnaldo Carvalho de Melo
2012-09-25 2:07 ` Namhyung Kim
2012-09-25 8:21 ` Feng Tang
2012-09-25 11:22 ` Arnaldo Carvalho de Melo
2012-09-24 15:24 ` Feng Tang [this message]
2012-09-25 2:11 ` [PATCH v3 8/9] perf hists browser: Add option for runtime switching perf data file Namhyung Kim
2012-09-25 8:20 ` Feng Tang
2012-09-25 11:17 ` Arnaldo Carvalho de Melo
2012-09-26 7:57 ` Feng Tang
2012-09-27 4:02 ` Namhyung Kim
2012-09-27 5:43 ` Feng Tang
2012-09-24 15:24 ` [PATCH v3 9/9] perf report: Enable the runtime switching of " Feng Tang
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=1348500251-9937-9-git-send-email-feng.tang@intel.com \
--to=feng.tang@intel.com \
--cc=a.p.zijlstra@chello.nl \
--cc=acme@redhat.com \
--cc=andi@firstfloor.org \
--cc=dsahern@gmail.com \
--cc=linux-kernel@vger.kernel.org \
--cc=mingo@elte.hu \
--cc=namhyung@kernel.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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox
all inboxes | Powered by JetHome®