提交 55369fc1 编写于 作者: N Namhyung Kim 提交者: Arnaldo Carvalho de Melo

perf sort: Introduce sort__mode variable

It's used for determining current sort mode which can be one of
NORMAL, BRANCH and new MEMORY.
Signed-off-by: NNamhyung Kim <namhyung@kernel.org>
Cc: Andi Kleen <andi@firstfloor.org>
Cc: David Ahern <dsahern@gmail.com>
Cc: Ingo Molnar <mingo@kernel.org>
Cc: Jiri Olsa <jolsa@redhat.com>
Cc: Paul Mackerras <paulus@samba.org>
Cc: Peter Zijlstra <a.p.zijlstra@chello.nl>
Cc: Stephane Eranian <eranian@google.com>
Link: http://lkml.kernel.org/r/1364816125-12212-5-git-send-email-namhyung@kernel.orgSigned-off-by: NArnaldo Carvalho de Melo <acme@redhat.com>
上级 ded19d57
...@@ -311,7 +311,7 @@ static int process_sample_event(struct perf_tool *tool, ...@@ -311,7 +311,7 @@ static int process_sample_event(struct perf_tool *tool,
if (rep->cpu_list && !test_bit(sample->cpu, rep->cpu_bitmap)) if (rep->cpu_list && !test_bit(sample->cpu, rep->cpu_bitmap))
return 0; return 0;
if (sort__branch_mode == 1) { if (sort__mode == SORT_MODE__BRANCH) {
if (perf_report__add_branch_hist_entry(tool, &al, sample, if (perf_report__add_branch_hist_entry(tool, &al, sample,
evsel, machine)) { evsel, machine)) {
pr_debug("problem adding lbr entry, skipping event\n"); pr_debug("problem adding lbr entry, skipping event\n");
...@@ -387,7 +387,7 @@ static int perf_report__setup_sample_type(struct perf_report *rep) ...@@ -387,7 +387,7 @@ static int perf_report__setup_sample_type(struct perf_report *rep)
} }
} }
if (sort__branch_mode == 1) { if (sort__mode == SORT_MODE__BRANCH) {
if (!self->fd_pipe && if (!self->fd_pipe &&
!(sample_type & PERF_SAMPLE_BRANCH_STACK)) { !(sample_type & PERF_SAMPLE_BRANCH_STACK)) {
ui__error("Selected -b but no branch data. " ui__error("Selected -b but no branch data. "
...@@ -694,7 +694,9 @@ static int ...@@ -694,7 +694,9 @@ static int
parse_branch_mode(const struct option *opt __maybe_unused, parse_branch_mode(const struct option *opt __maybe_unused,
const char *str __maybe_unused, int unset) const char *str __maybe_unused, int unset)
{ {
sort__branch_mode = !unset; int *branch_mode = opt->value;
*branch_mode = !unset;
return 0; return 0;
} }
...@@ -703,6 +705,7 @@ int cmd_report(int argc, const char **argv, const char *prefix __maybe_unused) ...@@ -703,6 +705,7 @@ int cmd_report(int argc, const char **argv, const char *prefix __maybe_unused)
struct perf_session *session; struct perf_session *session;
struct stat st; struct stat st;
bool has_br_stack = false; bool has_br_stack = false;
int branch_mode = -1;
int ret = -1; int ret = -1;
char callchain_default_opt[] = "fractal,0.5,callee"; char callchain_default_opt[] = "fractal,0.5,callee";
const char * const report_usage[] = { const char * const report_usage[] = {
...@@ -799,7 +802,7 @@ int cmd_report(int argc, const char **argv, const char *prefix __maybe_unused) ...@@ -799,7 +802,7 @@ int cmd_report(int argc, const char **argv, const char *prefix __maybe_unused)
"Show a column with the sum of periods"), "Show a column with the sum of periods"),
OPT_BOOLEAN(0, "group", &symbol_conf.event_group, OPT_BOOLEAN(0, "group", &symbol_conf.event_group,
"Show event group information together"), "Show event group information together"),
OPT_CALLBACK_NOOPT('b', "branch-stack", &sort__branch_mode, "", OPT_CALLBACK_NOOPT('b', "branch-stack", &branch_mode, "",
"use branch records for histogram filling", parse_branch_mode), "use branch records for histogram filling", parse_branch_mode),
OPT_STRING(0, "objdump", &objdump_path, "path", OPT_STRING(0, "objdump", &objdump_path, "path",
"objdump binary to use for disassembly and annotations"), "objdump binary to use for disassembly and annotations"),
...@@ -849,11 +852,11 @@ int cmd_report(int argc, const char **argv, const char *prefix __maybe_unused) ...@@ -849,11 +852,11 @@ int cmd_report(int argc, const char **argv, const char *prefix __maybe_unused)
has_br_stack = perf_header__has_feat(&session->header, has_br_stack = perf_header__has_feat(&session->header,
HEADER_BRANCH_STACK); HEADER_BRANCH_STACK);
if (sort__branch_mode == -1 && has_br_stack) if (branch_mode == -1 && has_br_stack)
sort__branch_mode = 1; sort__mode = SORT_MODE__BRANCH;
/* sort__branch_mode could be 0 if --no-branch-stack */ /* sort__mode could be NORMAL if --no-branch-stack */
if (sort__branch_mode == 1) { if (sort__mode == SORT_MODE__BRANCH) {
/* /*
* if no sort_order is provided, then specify * if no sort_order is provided, then specify
* branch-mode specific order * branch-mode specific order
...@@ -864,7 +867,7 @@ int cmd_report(int argc, const char **argv, const char *prefix __maybe_unused) ...@@ -864,7 +867,7 @@ int cmd_report(int argc, const char **argv, const char *prefix __maybe_unused)
} }
if (report.mem_mode) { if (report.mem_mode) {
if (sort__branch_mode == 1) { if (sort__mode == SORT_MODE__BRANCH) {
fprintf(stderr, "branch and mem mode incompatible\n"); fprintf(stderr, "branch and mem mode incompatible\n");
goto error; goto error;
} }
...@@ -934,7 +937,7 @@ int cmd_report(int argc, const char **argv, const char *prefix __maybe_unused) ...@@ -934,7 +937,7 @@ int cmd_report(int argc, const char **argv, const char *prefix __maybe_unused)
sort_entry__setup_elide(&sort_comm, symbol_conf.comm_list, "comm", stdout); sort_entry__setup_elide(&sort_comm, symbol_conf.comm_list, "comm", stdout);
if (sort__branch_mode == 1) { if (sort__mode == SORT_MODE__BRANCH) {
sort_entry__setup_elide(&sort_dso_from, symbol_conf.dso_from_list, "dso_from", stdout); sort_entry__setup_elide(&sort_dso_from, symbol_conf.dso_from_list, "dso_from", stdout);
sort_entry__setup_elide(&sort_dso_to, symbol_conf.dso_to_list, "dso_to", stdout); sort_entry__setup_elide(&sort_dso_to, symbol_conf.dso_to_list, "dso_to", stdout);
sort_entry__setup_elide(&sort_sym_from, symbol_conf.sym_from_list, "sym_from", stdout); sort_entry__setup_elide(&sort_sym_from, symbol_conf.sym_from_list, "sym_from", stdout);
......
...@@ -1155,7 +1155,7 @@ static struct hist_browser *hist_browser__new(struct hists *hists) ...@@ -1155,7 +1155,7 @@ static struct hist_browser *hist_browser__new(struct hists *hists)
browser->b.refresh = hist_browser__refresh; browser->b.refresh = hist_browser__refresh;
browser->b.seek = ui_browser__hists_seek; browser->b.seek = ui_browser__hists_seek;
browser->b.use_navkeypressed = true; browser->b.use_navkeypressed = true;
if (sort__branch_mode == 1) if (sort__mode == SORT_MODE__BRANCH)
browser->has_symbols = sort_sym_from.list.next != NULL; browser->has_symbols = sort_sym_from.list.next != NULL;
else else
browser->has_symbols = sort_sym.list.next != NULL; browser->has_symbols = sort_sym.list.next != NULL;
...@@ -1488,7 +1488,7 @@ static int perf_evsel__hists_browse(struct perf_evsel *evsel, int nr_events, ...@@ -1488,7 +1488,7 @@ static int perf_evsel__hists_browse(struct perf_evsel *evsel, int nr_events,
if (!browser->has_symbols) if (!browser->has_symbols)
goto add_exit_option; goto add_exit_option;
if (sort__branch_mode == 1) { if (sort__mode == SORT_MODE__BRANCH) {
bi = browser->he_selection->branch_info; bi = browser->he_selection->branch_info;
if (browser->selection != NULL && if (browser->selection != NULL &&
bi && bi &&
......
...@@ -9,7 +9,7 @@ const char *sort_order = default_sort_order; ...@@ -9,7 +9,7 @@ const char *sort_order = default_sort_order;
int sort__need_collapse = 0; int sort__need_collapse = 0;
int sort__has_parent = 0; int sort__has_parent = 0;
int sort__has_sym = 0; int sort__has_sym = 0;
int sort__branch_mode = -1; /* -1 = means not set */ enum sort_mode sort__mode = SORT_MODE__NORMAL;
enum sort_type sort__first_dimension; enum sort_type sort__first_dimension;
...@@ -943,7 +943,7 @@ int sort_dimension__add(const char *tok) ...@@ -943,7 +943,7 @@ int sort_dimension__add(const char *tok)
if (strncasecmp(tok, sd->name, strlen(tok))) if (strncasecmp(tok, sd->name, strlen(tok)))
continue; continue;
if (sort__branch_mode != 1) if (sort__mode != SORT_MODE__BRANCH)
return -EINVAL; return -EINVAL;
if (sd->entry == &sort_sym_from || sd->entry == &sort_sym_to) if (sd->entry == &sort_sym_from || sd->entry == &sort_sym_to)
......
...@@ -32,7 +32,7 @@ extern const char default_sort_order[]; ...@@ -32,7 +32,7 @@ extern const char default_sort_order[];
extern int sort__need_collapse; extern int sort__need_collapse;
extern int sort__has_parent; extern int sort__has_parent;
extern int sort__has_sym; extern int sort__has_sym;
extern int sort__branch_mode; extern enum sort_mode sort__mode;
extern struct sort_entry sort_comm; extern struct sort_entry sort_comm;
extern struct sort_entry sort_dso; extern struct sort_entry sort_dso;
extern struct sort_entry sort_sym; extern struct sort_entry sort_sym;
...@@ -123,6 +123,12 @@ static inline void hist_entry__add_pair(struct hist_entry *he, ...@@ -123,6 +123,12 @@ static inline void hist_entry__add_pair(struct hist_entry *he,
list_add_tail(&he->pairs.head, &pair->pairs.node); list_add_tail(&he->pairs.head, &pair->pairs.node);
} }
enum sort_mode {
SORT_MODE__NORMAL,
SORT_MODE__BRANCH,
SORT_MODE__MEMORY,
};
enum sort_type { enum sort_type {
/* common sort keys */ /* common sort keys */
SORT_PID, SORT_PID,
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册