2011-02-01 00:50:39 +08:00
|
|
|
|
#ifndef __PERF_TOP_H
|
|
|
|
|
#define __PERF_TOP_H 1
|
|
|
|
|
|
2011-11-28 18:30:20 +08:00
|
|
|
|
#include "tool.h"
|
2011-02-01 00:50:39 +08:00
|
|
|
|
#include "types.h"
|
|
|
|
|
#include <stddef.h>
|
2011-11-28 18:30:20 +08:00
|
|
|
|
#include <stdbool.h>
|
2012-09-08 08:43:18 +08:00
|
|
|
|
#include <termios.h>
|
2011-02-01 00:50:39 +08:00
|
|
|
|
|
|
|
|
|
struct perf_evlist;
|
|
|
|
|
struct perf_evsel;
|
2011-11-28 18:30:20 +08:00
|
|
|
|
struct perf_session;
|
2011-02-01 00:50:39 +08:00
|
|
|
|
|
|
|
|
|
struct perf_top {
|
2011-11-28 18:30:20 +08:00
|
|
|
|
struct perf_tool tool;
|
2011-02-01 00:50:39 +08:00
|
|
|
|
struct perf_evlist *evlist;
|
2012-12-12 03:48:41 +08:00
|
|
|
|
struct perf_record_opts record_opts;
|
2011-02-01 00:50:39 +08:00
|
|
|
|
/*
|
|
|
|
|
* Symbols will be added here in perf_event__process_sample and will
|
|
|
|
|
* get out after decayed.
|
|
|
|
|
*/
|
|
|
|
|
u64 samples;
|
|
|
|
|
u64 kernel_samples, us_samples;
|
|
|
|
|
u64 exact_samples;
|
|
|
|
|
u64 guest_us_samples, guest_kernel_samples;
|
|
|
|
|
int print_entries, count_filter, delay_secs;
|
2013-10-18 22:38:49 +08:00
|
|
|
|
int max_stack;
|
2011-02-01 00:50:39 +08:00
|
|
|
|
bool hide_kernel_symbols, hide_user_symbols, zero;
|
2011-11-28 19:37:05 +08:00
|
|
|
|
bool use_tui, use_stdio;
|
|
|
|
|
bool kptr_restrict_warned;
|
|
|
|
|
bool vmlinux_warned;
|
|
|
|
|
bool dump_symtab;
|
perf top: Reuse the 'report' hist_entry/hists classes
This actually fixes several problems we had in the old 'perf top':
1. Unresolved symbols not show, limitation that came from the old
"KernelTop" codebase, to solve it we would need to do changes
that would make sym_entry have most of the hist_entry fields.
2. It was using the number of samples, not the sum of sample->period.
And brings the --sort code that allows us to have all the views in
'perf report', for instance:
[root@emilia ~]# perf top --sort dso
PerfTop: 5903 irqs/sec kernel:77.5% exact: 0.0% [1000Hz cycles], (all, 8 CPUs)
------------------------------------------------------------------------------
31.59% libcrypto.so.1.0.0
21.55% [kernel]
18.57% libpython2.6.so.1.0
7.04% libc-2.12.so
6.99% _backend_agg.so
4.72% sshd
1.48% multiarray.so
1.39% libfreetype.so.6.3.22
1.37% perf
0.71% libgobject-2.0.so.0.2200.5
0.53% [tg3]
0.48% libglib-2.0.so.0.2200.5
0.44% libstdc++.so.6.0.13
0.40% libcairo.so.2.10800.8
0.38% libm-2.12.so
0.34% umath.so
0.30% libgdk-x11-2.0.so.0.1800.9
0.22% libpthread-2.12.so
0.20% libgtk-x11-2.0.so.0.1800.9
0.20% librt-2.12.so
0.15% _path.so
0.13% libpango-1.0.so.0.2800.1
0.11% libatlas.so.3.0
0.09% ft2font.so
0.09% libpangoft2-1.0.so.0.2800.1
0.08% libX11.so.6.3.0
0.07% [vdso]
0.06% cyclictest
^C
All the filter lists can be used as well: --dsos, --comms, --symbols,
etc.
The 'perf report' TUI is also reused, being possible to apply all the
zoom operations, do annotation, etc.
This change will allow multiple simplifications in the symbol system as
well, that will be detailed in upcoming changesets.
Cc: David Ahern <dsahern@gmail.com>
Cc: Frederic Weisbecker <fweisbec@gmail.com>
Cc: Mike Galbraith <efault@gmx.de>
Cc: Paul Mackerras <paulus@samba.org>
Cc: Peter Zijlstra <peterz@infradead.org>
Cc: Stephane Eranian <eranian@google.com>
Link: http://lkml.kernel.org/n/tip-xzaaldxq7zhqrrxdxjifk1mh@git.kernel.org
Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>
2011-10-06 06:16:15 +08:00
|
|
|
|
struct hist_entry *sym_filter_entry;
|
2011-02-01 00:50:39 +08:00
|
|
|
|
struct perf_evsel *sym_evsel;
|
2011-09-02 01:27:58 +08:00
|
|
|
|
struct perf_session *session;
|
2011-11-28 19:37:05 +08:00
|
|
|
|
struct winsize winsize;
|
|
|
|
|
int realtime_prio;
|
|
|
|
|
int sym_pcnt_filter;
|
|
|
|
|
const char *sym_filter;
|
2013-05-14 10:09:05 +08:00
|
|
|
|
float min_percent;
|
2011-02-01 00:50:39 +08:00
|
|
|
|
};
|
|
|
|
|
|
2013-08-03 04:05:39 +08:00
|
|
|
|
#define CONSOLE_CLEAR "[H[2J"
|
|
|
|
|
|
2011-02-01 00:50:39 +08:00
|
|
|
|
size_t perf_top__header_snprintf(struct perf_top *top, char *bf, size_t size);
|
|
|
|
|
void perf_top__reset_sample_counters(struct perf_top *top);
|
|
|
|
|
#endif /* __PERF_TOP_H */
|