Merge tag 'vfio-v3.16-rc1' of git://github.com/awilliam/linux-vfio into next
[cascardo/linux.git] / tools / perf / builtin-top.c
index 65aaa5b..5b389ce 100644 (file)
@@ -253,6 +253,9 @@ static struct hist_entry *perf_evsel__add_hist_entry(struct perf_evsel *evsel,
                return NULL;
 
        hists__inc_nr_events(&evsel->hists, PERF_RECORD_SAMPLE);
+       if (!he->filtered)
+               evsel->hists.stats.nr_non_filtered_samples++;
+
        return he;
 }
 
@@ -694,8 +697,7 @@ static void perf_event__process_sample(struct perf_tool *tool,
        if (event->header.misc & PERF_RECORD_MISC_EXACT_IP)
                top->exact_samples++;
 
-       if (perf_event__preprocess_sample(event, machine, &al, sample) < 0 ||
-           al.filtered)
+       if (perf_event__preprocess_sample(event, machine, &al, sample) < 0)
                return;
 
        if (!top->kptr_restrict_warned &&
@@ -1081,8 +1083,10 @@ int cmd_top(int argc, const char **argv, const char *prefix __maybe_unused)
        OPT_INCR('v', "verbose", &verbose,
                    "be more verbose (show counter open errors, etc)"),
        OPT_STRING('s', "sort", &sort_order, "key[,key2...]",
-                  "sort by key(s): pid, comm, dso, symbol, parent, weight, local_weight,"
-                  " abort, in_tx, transaction"),
+                  "sort by key(s): pid, comm, dso, symbol, parent, cpu, srcline, ..."
+                  " Please refer the man page for the complete list."),
+       OPT_STRING(0, "fields", &field_order, "key[,keys...]",
+                  "output field(s): overhead, period, sample plus all of sort keys"),
        OPT_BOOLEAN('n', "show-nr-samples", &symbol_conf.show_nr_samples,
                    "Show a column with the number of samples"),
        OPT_CALLBACK_NOOPT('g', NULL, &top.record_opts,
@@ -1116,6 +1120,8 @@ int cmd_top(int argc, const char **argv, const char *prefix __maybe_unused)
        OPT_STRING('u', "uid", &target->uid_str, "user", "user to profile"),
        OPT_CALLBACK(0, "percent-limit", &top, "percent",
                     "Don't show entries under that percent", parse_percent_limit),
+       OPT_CALLBACK(0, "percentage", NULL, "relative|absolute",
+                    "How to display percentage of filtered entries", parse_filter_percentage),
        OPT_END()
        };
        const char * const top_usage[] = {
@@ -1133,17 +1139,19 @@ int cmd_top(int argc, const char **argv, const char *prefix __maybe_unused)
        if (argc)
                usage_with_options(top_usage, options);
 
-       if (sort_order == default_sort_order)
-               sort_order = "dso,symbol";
+       sort__mode = SORT_MODE__TOP;
+       /* display thread wants entries to be collapsed in a different tree */
+       sort__need_collapse = 1;
 
        if (setup_sorting() < 0) {
-               parse_options_usage(top_usage, options, "s", 1);
+               if (sort_order)
+                       parse_options_usage(top_usage, options, "s", 1);
+               if (field_order)
+                       parse_options_usage(sort_order ? NULL : top_usage,
+                                           options, "fields", 0);
                goto out_delete_evlist;
        }
 
-       /* display thread wants entries to be collapsed in a different tree */
-       sort__need_collapse = 1;
-
        if (top.use_stdio)
                use_browser = 0;
        else if (top.use_tui)