f9224c5c94
Newt has widespread availability and provides a rather simple API as can be seen by the size of this patch. The work needed to support it will benefit other frontends too. In this initial patch it just checks if the output is a tty, if not it falls back to the previous behaviour, also if newt-devel/libnewt-dev is not installed the previous behaviour is maintaned. Pressing enter on a symbol will annotate it, ESC in the annotation window will return to the report symbol list. More work will be done to remove the special casing in color_fprintf, stop using fmemopen/FILE in the printing of hist_entries, etc. Also the annotation doesn't need to be done via spawning "perf annotate" and then browsing its output, we can do better by calling directly the builtin-annotate.c functions, that would then be moved to tools/perf/util/annotate.c and shared with perf top, etc But lets go by baby steps, this patch already improves perf usability by allowing to quickly do annotations on symbols from the report screen and provides a first experimentation with libnewt/TUI integration of tools. Tested on RHEL5 and Fedora12 X86_64 and on Debian PARISC64 to browse a perf.data file collected on a Fedora12 x86_64 box. Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com> Cc: Avi Kivity <avi@redhat.com> Cc: Frédéric Weisbecker <fweisbec@gmail.com> Cc: Mike Galbraith <efault@gmx.de> Cc: Peter Zijlstra <a.p.zijlstra@chello.nl> Cc: Paul Mackerras <paulus@samba.org> LKML-Reference: <1268349164-5822-5-git-send-email-acme@infradead.org> Signed-off-by: Ingo Molnar <mingo@elte.hu>
35 lines
1.1 KiB
C
35 lines
1.1 KiB
C
#ifndef __PERF_HIST_H
|
|
#define __PERF_HIST_H
|
|
|
|
#include <linux/types.h>
|
|
#include "callchain.h"
|
|
|
|
extern struct callchain_param callchain_param;
|
|
|
|
struct perf_session;
|
|
struct hist_entry;
|
|
struct addr_location;
|
|
struct symbol;
|
|
struct rb_root;
|
|
|
|
struct hist_entry *__perf_session__add_hist_entry(struct rb_root *hists,
|
|
struct addr_location *al,
|
|
struct symbol *parent,
|
|
u64 count, bool *hit);
|
|
extern int64_t hist_entry__cmp(struct hist_entry *, struct hist_entry *);
|
|
extern int64_t hist_entry__collapse(struct hist_entry *, struct hist_entry *);
|
|
size_t hist_entry__fprintf(struct hist_entry *self,
|
|
struct perf_session *pair_session,
|
|
bool show_displacement,
|
|
long displacement, FILE *fp,
|
|
u64 session_total);
|
|
void hist_entry__free(struct hist_entry *);
|
|
|
|
void perf_session__output_resort(struct rb_root *hists, u64 total_samples);
|
|
void perf_session__collapse_resort(struct rb_root *hists);
|
|
size_t perf_session__fprintf_hists(struct rb_root *hists,
|
|
struct perf_session *pair,
|
|
bool show_displacement, FILE *fp,
|
|
u64 session_total);
|
|
#endif /* __PERF_HIST_H */
|