diff options
author | Namhyung Kim <namhyung@kernel.org> | 2014-03-02 20:59:57 -0500 |
---|---|---|
committer | Jiri Olsa <jolsa@kernel.org> | 2014-05-21 05:45:33 -0400 |
commit | bc18b7f2e3ca09b360b26c25a7541ba6f170111b (patch) | |
tree | 69fffa9b2913a8650a493dba72bf4af6bb7fb7cd /tools/perf | |
parent | 6480c56130ba073df84d57d61062ec4118b10bbe (diff) |
perf tools: Add ->cmp(), ->collapse() and ->sort() to perf_hpp_fmt
Those function pointers will be used to sort report output based on
the selected fields. This is a preparation of later change.
Signed-off-by: Namhyung Kim <namhyung@kernel.org>
Acked-by: Ingo Molnar <mingo@kernel.org>
Link: http://lkml.kernel.org/r/1400480762-22852-2-git-send-email-namhyung@kernel.org
Signed-off-by: Jiri Olsa <jolsa@kernel.org>
Diffstat (limited to 'tools/perf')
-rw-r--r-- | tools/perf/ui/hist.c | 39 | ||||
-rw-r--r-- | tools/perf/util/hist.h | 3 |
2 files changed, 38 insertions, 4 deletions
diff --git a/tools/perf/ui/hist.c b/tools/perf/ui/hist.c index 0912805c08f4..d4a4f2e7eb43 100644 --- a/tools/perf/ui/hist.c +++ b/tools/perf/ui/hist.c | |||
@@ -192,6 +192,14 @@ static int hpp__entry_##_type(struct perf_hpp_fmt *_fmt __maybe_unused, \ | |||
192 | hpp_entry_scnprintf, true); \ | 192 | hpp_entry_scnprintf, true); \ |
193 | } | 193 | } |
194 | 194 | ||
195 | #define __HPP_SORT_FN(_type, _field) \ | ||
196 | static int64_t hpp__sort_##_type(struct hist_entry *a, struct hist_entry *b) \ | ||
197 | { \ | ||
198 | s64 __a = he_get_##_field(a); \ | ||
199 | s64 __b = he_get_##_field(b); \ | ||
200 | return __a - __b; \ | ||
201 | } | ||
202 | |||
195 | #define __HPP_ENTRY_RAW_FN(_type, _field) \ | 203 | #define __HPP_ENTRY_RAW_FN(_type, _field) \ |
196 | static u64 he_get_raw_##_field(struct hist_entry *he) \ | 204 | static u64 he_get_raw_##_field(struct hist_entry *he) \ |
197 | { \ | 205 | { \ |
@@ -206,16 +214,27 @@ static int hpp__entry_##_type(struct perf_hpp_fmt *_fmt __maybe_unused, \ | |||
206 | hpp_entry_scnprintf, false); \ | 214 | hpp_entry_scnprintf, false); \ |
207 | } | 215 | } |
208 | 216 | ||
217 | #define __HPP_SORT_RAW_FN(_type, _field) \ | ||
218 | static int64_t hpp__sort_##_type(struct hist_entry *a, struct hist_entry *b) \ | ||
219 | { \ | ||
220 | s64 __a = he_get_raw_##_field(a); \ | ||
221 | s64 __b = he_get_raw_##_field(b); \ | ||
222 | return __a - __b; \ | ||
223 | } | ||
224 | |||
225 | |||
209 | #define HPP_PERCENT_FNS(_type, _str, _field, _min_width, _unit_width) \ | 226 | #define HPP_PERCENT_FNS(_type, _str, _field, _min_width, _unit_width) \ |
210 | __HPP_HEADER_FN(_type, _str, _min_width, _unit_width) \ | 227 | __HPP_HEADER_FN(_type, _str, _min_width, _unit_width) \ |
211 | __HPP_WIDTH_FN(_type, _min_width, _unit_width) \ | 228 | __HPP_WIDTH_FN(_type, _min_width, _unit_width) \ |
212 | __HPP_COLOR_PERCENT_FN(_type, _field) \ | 229 | __HPP_COLOR_PERCENT_FN(_type, _field) \ |
213 | __HPP_ENTRY_PERCENT_FN(_type, _field) | 230 | __HPP_ENTRY_PERCENT_FN(_type, _field) \ |
231 | __HPP_SORT_FN(_type, _field) | ||
214 | 232 | ||
215 | #define HPP_RAW_FNS(_type, _str, _field, _min_width, _unit_width) \ | 233 | #define HPP_RAW_FNS(_type, _str, _field, _min_width, _unit_width) \ |
216 | __HPP_HEADER_FN(_type, _str, _min_width, _unit_width) \ | 234 | __HPP_HEADER_FN(_type, _str, _min_width, _unit_width) \ |
217 | __HPP_WIDTH_FN(_type, _min_width, _unit_width) \ | 235 | __HPP_WIDTH_FN(_type, _min_width, _unit_width) \ |
218 | __HPP_ENTRY_RAW_FN(_type, _field) | 236 | __HPP_ENTRY_RAW_FN(_type, _field) \ |
237 | __HPP_SORT_RAW_FN(_type, _field) | ||
219 | 238 | ||
220 | 239 | ||
221 | HPP_PERCENT_FNS(overhead, "Overhead", period, 8, 8) | 240 | HPP_PERCENT_FNS(overhead, "Overhead", period, 8, 8) |
@@ -227,19 +246,31 @@ HPP_PERCENT_FNS(overhead_guest_us, "guest usr", period_guest_us, 9, 8) | |||
227 | HPP_RAW_FNS(samples, "Samples", nr_events, 12, 12) | 246 | HPP_RAW_FNS(samples, "Samples", nr_events, 12, 12) |
228 | HPP_RAW_FNS(period, "Period", period, 12, 12) | 247 | HPP_RAW_FNS(period, "Period", period, 12, 12) |
229 | 248 | ||
249 | static int64_t hpp__nop_cmp(struct hist_entry *a __maybe_unused, | ||
250 | struct hist_entry *b __maybe_unused) | ||
251 | { | ||
252 | return 0; | ||
253 | } | ||
254 | |||
230 | #define HPP__COLOR_PRINT_FNS(_name) \ | 255 | #define HPP__COLOR_PRINT_FNS(_name) \ |
231 | { \ | 256 | { \ |
232 | .header = hpp__header_ ## _name, \ | 257 | .header = hpp__header_ ## _name, \ |
233 | .width = hpp__width_ ## _name, \ | 258 | .width = hpp__width_ ## _name, \ |
234 | .color = hpp__color_ ## _name, \ | 259 | .color = hpp__color_ ## _name, \ |
235 | .entry = hpp__entry_ ## _name \ | 260 | .entry = hpp__entry_ ## _name, \ |
261 | .cmp = hpp__nop_cmp, \ | ||
262 | .collapse = hpp__nop_cmp, \ | ||
263 | .sort = hpp__sort_ ## _name, \ | ||
236 | } | 264 | } |
237 | 265 | ||
238 | #define HPP__PRINT_FNS(_name) \ | 266 | #define HPP__PRINT_FNS(_name) \ |
239 | { \ | 267 | { \ |
240 | .header = hpp__header_ ## _name, \ | 268 | .header = hpp__header_ ## _name, \ |
241 | .width = hpp__width_ ## _name, \ | 269 | .width = hpp__width_ ## _name, \ |
242 | .entry = hpp__entry_ ## _name \ | 270 | .entry = hpp__entry_ ## _name, \ |
271 | .cmp = hpp__nop_cmp, \ | ||
272 | .collapse = hpp__nop_cmp, \ | ||
273 | .sort = hpp__sort_ ## _name, \ | ||
243 | } | 274 | } |
244 | 275 | ||
245 | struct perf_hpp_fmt perf_hpp__format[] = { | 276 | struct perf_hpp_fmt perf_hpp__format[] = { |
diff --git a/tools/perf/util/hist.h b/tools/perf/util/hist.h index 38c3e874c164..36dbe00e3cc8 100644 --- a/tools/perf/util/hist.h +++ b/tools/perf/util/hist.h | |||
@@ -160,6 +160,9 @@ struct perf_hpp_fmt { | |||
160 | struct hist_entry *he); | 160 | struct hist_entry *he); |
161 | int (*entry)(struct perf_hpp_fmt *fmt, struct perf_hpp *hpp, | 161 | int (*entry)(struct perf_hpp_fmt *fmt, struct perf_hpp *hpp, |
162 | struct hist_entry *he); | 162 | struct hist_entry *he); |
163 | int64_t (*cmp)(struct hist_entry *a, struct hist_entry *b); | ||
164 | int64_t (*collapse)(struct hist_entry *a, struct hist_entry *b); | ||
165 | int64_t (*sort)(struct hist_entry *a, struct hist_entry *b); | ||
163 | 166 | ||
164 | struct list_head list; | 167 | struct list_head list; |
165 | }; | 168 | }; |