diff options
Diffstat (limited to 'tools/perf/util/hist.h')
-rw-r--r-- | tools/perf/util/hist.h | 63 |
1 files changed, 16 insertions, 47 deletions
diff --git a/tools/perf/util/hist.h b/tools/perf/util/hist.h index 587d375d3430..3beb97c4d822 100644 --- a/tools/perf/util/hist.h +++ b/tools/perf/util/hist.h | |||
@@ -9,33 +9,6 @@ extern struct callchain_param callchain_param; | |||
9 | struct hist_entry; | 9 | struct hist_entry; |
10 | struct addr_location; | 10 | struct addr_location; |
11 | struct symbol; | 11 | struct symbol; |
12 | struct rb_root; | ||
13 | |||
14 | struct objdump_line { | ||
15 | struct list_head node; | ||
16 | s64 offset; | ||
17 | char *line; | ||
18 | }; | ||
19 | |||
20 | void objdump_line__free(struct objdump_line *self); | ||
21 | struct objdump_line *objdump__get_next_ip_line(struct list_head *head, | ||
22 | struct objdump_line *pos); | ||
23 | |||
24 | struct sym_hist { | ||
25 | u64 sum; | ||
26 | u64 ip[0]; | ||
27 | }; | ||
28 | |||
29 | struct sym_ext { | ||
30 | struct rb_node node; | ||
31 | double percent; | ||
32 | char *path; | ||
33 | }; | ||
34 | |||
35 | struct sym_priv { | ||
36 | struct sym_hist *hist; | ||
37 | struct sym_ext *ext; | ||
38 | }; | ||
39 | 12 | ||
40 | /* | 13 | /* |
41 | * The kernel collects the number of events it couldn't send in a stretch and | 14 | * The kernel collects the number of events it couldn't send in a stretch and |
@@ -52,8 +25,11 @@ struct sym_priv { | |||
52 | struct events_stats { | 25 | struct events_stats { |
53 | u64 total_period; | 26 | u64 total_period; |
54 | u64 total_lost; | 27 | u64 total_lost; |
28 | u64 total_invalid_chains; | ||
55 | u32 nr_events[PERF_RECORD_HEADER_MAX]; | 29 | u32 nr_events[PERF_RECORD_HEADER_MAX]; |
56 | u32 nr_unknown_events; | 30 | u32 nr_unknown_events; |
31 | u32 nr_invalid_chains; | ||
32 | u32 nr_unknown_id; | ||
57 | }; | 33 | }; |
58 | 34 | ||
59 | enum hist_column { | 35 | enum hist_column { |
@@ -67,14 +43,13 @@ enum hist_column { | |||
67 | }; | 43 | }; |
68 | 44 | ||
69 | struct hists { | 45 | struct hists { |
70 | struct rb_node rb_node; | ||
71 | struct rb_root entries; | 46 | struct rb_root entries; |
72 | u64 nr_entries; | 47 | u64 nr_entries; |
73 | struct events_stats stats; | 48 | struct events_stats stats; |
74 | u64 config; | ||
75 | u64 event_stream; | 49 | u64 event_stream; |
76 | u32 type; | ||
77 | u16 col_len[HISTC_NR_COLS]; | 50 | u16 col_len[HISTC_NR_COLS]; |
51 | /* Best would be to reuse the session callchain cursor */ | ||
52 | struct callchain_cursor callchain_cursor; | ||
78 | }; | 53 | }; |
79 | 54 | ||
80 | struct hist_entry *__hists__add_entry(struct hists *self, | 55 | struct hist_entry *__hists__add_entry(struct hists *self, |
@@ -100,9 +75,8 @@ size_t hists__fprintf_nr_events(struct hists *self, FILE *fp); | |||
100 | size_t hists__fprintf(struct hists *self, struct hists *pair, | 75 | size_t hists__fprintf(struct hists *self, struct hists *pair, |
101 | bool show_displacement, FILE *fp); | 76 | bool show_displacement, FILE *fp); |
102 | 77 | ||
103 | int hist_entry__inc_addr_samples(struct hist_entry *self, u64 ip); | 78 | int hist_entry__inc_addr_samples(struct hist_entry *self, int evidx, u64 addr); |
104 | int hist_entry__annotate(struct hist_entry *self, struct list_head *head, | 79 | int hist_entry__annotate(struct hist_entry *self, size_t privsize); |
105 | size_t privsize); | ||
106 | 80 | ||
107 | void hists__filter_by_dso(struct hists *self, const struct dso *dso); | 81 | void hists__filter_by_dso(struct hists *self, const struct dso *dso); |
108 | void hists__filter_by_thread(struct hists *self, const struct thread *thread); | 82 | void hists__filter_by_thread(struct hists *self, const struct thread *thread); |
@@ -111,21 +85,18 @@ u16 hists__col_len(struct hists *self, enum hist_column col); | |||
111 | void hists__set_col_len(struct hists *self, enum hist_column col, u16 len); | 85 | void hists__set_col_len(struct hists *self, enum hist_column col, u16 len); |
112 | bool hists__new_col_len(struct hists *self, enum hist_column col, u16 len); | 86 | bool hists__new_col_len(struct hists *self, enum hist_column col, u16 len); |
113 | 87 | ||
114 | #ifdef NO_NEWT_SUPPORT | 88 | struct perf_evlist; |
115 | static inline int hists__browse(struct hists *self __used, | ||
116 | const char *helpline __used, | ||
117 | const char *ev_name __used) | ||
118 | { | ||
119 | return 0; | ||
120 | } | ||
121 | 89 | ||
122 | static inline int hists__tui_browse_tree(struct rb_root *self __used, | 90 | #ifdef NO_NEWT_SUPPORT |
123 | const char *help __used) | 91 | static inline |
92 | int perf_evlist__tui_browse_hists(struct perf_evlist *evlist __used, | ||
93 | const char *help __used) | ||
124 | { | 94 | { |
125 | return 0; | 95 | return 0; |
126 | } | 96 | } |
127 | 97 | ||
128 | static inline int hist_entry__tui_annotate(struct hist_entry *self __used) | 98 | static inline int hist_entry__tui_annotate(struct hist_entry *self __used, |
99 | int evidx __used) | ||
129 | { | 100 | { |
130 | return 0; | 101 | return 0; |
131 | } | 102 | } |
@@ -133,14 +104,12 @@ static inline int hist_entry__tui_annotate(struct hist_entry *self __used) | |||
133 | #define KEY_RIGHT -2 | 104 | #define KEY_RIGHT -2 |
134 | #else | 105 | #else |
135 | #include <newt.h> | 106 | #include <newt.h> |
136 | int hists__browse(struct hists *self, const char *helpline, | 107 | int hist_entry__tui_annotate(struct hist_entry *self, int evidx); |
137 | const char *ev_name); | ||
138 | int hist_entry__tui_annotate(struct hist_entry *self); | ||
139 | 108 | ||
140 | #define KEY_LEFT NEWT_KEY_LEFT | 109 | #define KEY_LEFT NEWT_KEY_LEFT |
141 | #define KEY_RIGHT NEWT_KEY_RIGHT | 110 | #define KEY_RIGHT NEWT_KEY_RIGHT |
142 | 111 | ||
143 | int hists__tui_browse_tree(struct rb_root *self, const char *help); | 112 | int perf_evlist__tui_browse_hists(struct perf_evlist *evlist, const char *help); |
144 | #endif | 113 | #endif |
145 | 114 | ||
146 | unsigned int hists__sort_list_width(struct hists *self); | 115 | unsigned int hists__sort_list_width(struct hists *self); |