Lines Matching +full:se +full:- +full:pos

1 // SPDX-License-Identifier: GPL-2.0
25 #include "mem-events.h"
28 #include "time-utils.h"
31 #include "trace-event.h"
36 #include <traceevent/event-parse.h>
66 * -t, --field-separator
92 return size - 1; in repsep_snprintf()
101 return -1; in cmp_null()
106 /* --sort pid */
111 return thread__tid(right->thread) - thread__tid(left->thread); in sort__thread_cmp()
117 const char *comm = thread__comm_str(he->thread); in hist_entry__thread_snprintf()
119 width = max(7U, width) - 8; in hist_entry__thread_snprintf()
120 return repsep_snprintf(bf, size, "%7d:%-*.*s", thread__tid(he->thread), in hist_entry__thread_snprintf()
129 return -1; in hist_entry__thread_filter()
131 return th && RC_CHK_ACCESS(he->thread) != RC_CHK_ACCESS(th); in hist_entry__thread_filter()
142 /* --sort simd */
147 if (left->simd_flags.arch != right->simd_flags.arch) in sort__simd_cmp()
148 return (int64_t) left->simd_flags.arch - right->simd_flags.arch; in sort__simd_cmp()
150 return (int64_t) left->simd_flags.pred - right->simd_flags.pred; in sort__simd_cmp()
155 u64 arch = simd_flags->arch; in hist_entry__get_simd_name()
168 if (!he->simd_flags.arch) in hist_entry__simd_snprintf()
171 name = hist_entry__get_simd_name(&he->simd_flags); in hist_entry__simd_snprintf()
173 if (he->simd_flags.pred & SIMD_OP_FLAGS_PRED_EMPTY) in hist_entry__simd_snprintf()
175 else if (he->simd_flags.pred & SIMD_OP_FLAGS_PRED_PARTIAL) in hist_entry__simd_snprintf()
188 /* --sort comm */
198 return strcmp(comm__str(right->comm), comm__str(left->comm)); in sort__comm_cmp()
204 return strcmp(comm__str(right->comm), comm__str(left->comm)); in sort__comm_collapse()
210 return strcmp(comm__str(right->comm), comm__str(left->comm)); in sort__comm_sort()
216 return repsep_snprintf(bf, size, "%-*.*s", width, width, comm__str(he->comm)); in hist_entry__comm_snprintf()
229 /* --sort dso */
241 dso_name_l = dso_l->long_name; in _sort__dso_cmp()
242 dso_name_r = dso_r->long_name; in _sort__dso_cmp()
244 dso_name_l = dso_l->short_name; in _sort__dso_cmp()
245 dso_name_r = dso_r->short_name; in _sort__dso_cmp()
254 return _sort__dso_cmp(right->ms.map, left->ms.map); in sort__dso_cmp()
264 dso_name = verbose > 0 ? dso->long_name : dso->short_name; in _hist_entry__dso_snprintf()
266 return repsep_snprintf(bf, size, "%-*.*s", width, width, dso_name); in _hist_entry__dso_snprintf()
272 return _hist_entry__dso_snprintf(he->ms.map, bf, size, width); in hist_entry__dso_snprintf()
280 return -1; in hist_entry__dso_filter()
282 return dso && (!he->ms.map || map__dso(he->ms.map) != dso); in hist_entry__dso_filter()
293 /* --sort symbol */
297 return (int64_t)(right_ip - left_ip); in _sort__addr_cmp()
308 if (sym_l->inlined || sym_r->inlined) { in _sort__sym_cmp()
309 int ret = strcmp(sym_l->name, sym_r->name); in _sort__sym_cmp()
313 if ((sym_l->start <= sym_r->end) && (sym_l->end >= sym_r->start)) in _sort__sym_cmp()
317 if (sym_l->start != sym_r->start) in _sort__sym_cmp()
318 return (int64_t)(sym_r->start - sym_l->start); in _sort__sym_cmp()
320 return (int64_t)(sym_r->end - sym_l->end); in _sort__sym_cmp()
328 if (!left->ms.sym && !right->ms.sym) in sort__sym_cmp()
329 return _sort__addr_cmp(left->ip, right->ip); in sort__sym_cmp()
335 if (!hists__has(left->hists, dso)) { in sort__sym_cmp()
341 return _sort__sym_cmp(left->ms.sym, right->ms.sym); in sort__sym_cmp()
347 if (!left->ms.sym || !right->ms.sym) in sort__sym_sort()
348 return cmp_null(left->ms.sym, right->ms.sym); in sort__sym_sort()
350 return strcmp(right->ms.sym->name, left->ms.sym->name); in sort__sym_sort()
357 struct symbol *sym = ms->sym; in _hist_entry__sym_snprintf()
358 struct map *map = ms->map; in _hist_entry__sym_snprintf()
366 if (dso && dso->kernel && dso->adjust_symbols) in _hist_entry__sym_snprintf()
369 ret += repsep_snprintf(bf, size, "%-#*llx %c ", in _hist_entry__sym_snprintf()
373 ret += repsep_snprintf(bf + ret, size - ret, "[%c] ", level); in _hist_entry__sym_snprintf()
375 if (sym->type == STT_OBJECT) { in _hist_entry__sym_snprintf()
376 ret += repsep_snprintf(bf + ret, size - ret, "%s", sym->name); in _hist_entry__sym_snprintf()
377 ret += repsep_snprintf(bf + ret, size - ret, "+0x%llx", in _hist_entry__sym_snprintf()
378 ip - map__unmap_ip(map, sym->start)); in _hist_entry__sym_snprintf()
380 ret += repsep_snprintf(bf + ret, size - ret, "%.*s", in _hist_entry__sym_snprintf()
381 width - ret, in _hist_entry__sym_snprintf()
382 sym->name); in _hist_entry__sym_snprintf()
383 if (sym->inlined) in _hist_entry__sym_snprintf()
384 ret += repsep_snprintf(bf + ret, size - ret, in _hist_entry__sym_snprintf()
389 ret += repsep_snprintf(bf + ret, size - ret, "%-#.*llx", in _hist_entry__sym_snprintf()
398 return _hist_entry__sym_snprintf(&he->ms, he->ip, in hist_entry__sym_snprintf()
399 he->level, bf, size, width); in hist_entry__sym_snprintf()
407 return -1; in hist_entry__sym_filter()
409 return sym && (!he->ms.sym || !strstr(he->ms.sym->name, sym)); in hist_entry__sym_filter()
421 /* --sort srcline */
425 return map__srcline(he->ms.map, he->ip, he->ms.sym); in hist_entry__srcline()
433 ret = _sort__addr_cmp(left->ip, right->ip); in sort__srcline_cmp()
443 if (!left->srcline) in sort__srcline_collapse()
444 left->srcline = hist_entry__srcline(left); in sort__srcline_collapse()
445 if (!right->srcline) in sort__srcline_collapse()
446 right->srcline = hist_entry__srcline(right); in sort__srcline_collapse()
448 return strcmp(right->srcline, left->srcline); in sort__srcline_collapse()
460 if (!he->srcline) in sort__srcline_init()
461 he->srcline = hist_entry__srcline(he); in sort__srcline_init()
467 return repsep_snprintf(bf, size, "%-.*s", width, he->srcline); in hist_entry__srcline_snprintf()
480 /* --sort srcline_from */
484 return map__srcline(ams->ms.map, ams->al_addr, ams->ms.sym); in addr_map_symbol__srcline()
490 return left->branch_info->from.addr - right->branch_info->from.addr; in sort__srcline_from_cmp()
496 if (!left->branch_info->srcline_from) in sort__srcline_from_collapse()
497 left->branch_info->srcline_from = addr_map_symbol__srcline(&left->branch_info->from); in sort__srcline_from_collapse()
499 if (!right->branch_info->srcline_from) in sort__srcline_from_collapse()
500 right->branch_info->srcline_from = addr_map_symbol__srcline(&right->branch_info->from); in sort__srcline_from_collapse()
502 return strcmp(right->branch_info->srcline_from, left->branch_info->srcline_from); in sort__srcline_from_collapse()
513 if (!he->branch_info->srcline_from) in sort__srcline_from_init()
514 he->branch_info->srcline_from = addr_map_symbol__srcline(&he->branch_info->from); in sort__srcline_from_init()
520 return repsep_snprintf(bf, size, "%-*.*s", width, width, he->branch_info->srcline_from); in hist_entry__srcline_from_snprintf()
533 /* --sort srcline_to */
538 return left->branch_info->to.addr - right->branch_info->to.addr; in sort__srcline_to_cmp()
544 if (!left->branch_info->srcline_to) in sort__srcline_to_collapse()
545 left->branch_info->srcline_to = addr_map_symbol__srcline(&left->branch_info->to); in sort__srcline_to_collapse()
547 if (!right->branch_info->srcline_to) in sort__srcline_to_collapse()
548 right->branch_info->srcline_to = addr_map_symbol__srcline(&right->branch_info->to); in sort__srcline_to_collapse()
550 return strcmp(right->branch_info->srcline_to, left->branch_info->srcline_to); in sort__srcline_to_collapse()
561 if (!he->branch_info->srcline_to) in sort__srcline_to_init()
562 he->branch_info->srcline_to = addr_map_symbol__srcline(&he->branch_info->to); in sort__srcline_to_init()
568 return repsep_snprintf(bf, size, "%-*.*s", width, width, he->branch_info->srcline_to); in hist_entry__srcline_to_snprintf()
585 struct symbol *sym = he->ms.sym; in hist_entry__sym_ipc_snprintf()
591 return repsep_snprintf(bf, size, "%-*s", width, "-"); in hist_entry__sym_ipc_snprintf()
593 branch = symbol__annotation(sym)->branch; in hist_entry__sym_ipc_snprintf()
595 if (branch && branch->hit_cycles) in hist_entry__sym_ipc_snprintf()
596 ipc = branch->hit_insn / ((double)branch->hit_cycles); in hist_entry__sym_ipc_snprintf()
598 if (branch && branch->total_insn) { in hist_entry__sym_ipc_snprintf()
599 coverage = branch->cover_insn * 100.0 / in hist_entry__sym_ipc_snprintf()
600 ((double)branch->total_insn); in hist_entry__sym_ipc_snprintf()
603 snprintf(tmp, sizeof(tmp), "%-5.2f [%5.1f%%]", ipc, coverage); in hist_entry__sym_ipc_snprintf()
604 return repsep_snprintf(bf, size, "%-*s", width, tmp); in hist_entry__sym_ipc_snprintf()
621 snprintf(tmp, sizeof(tmp), "%-5s %2s", "-", "-"); in hist_entry__sym_ipc_null_snprintf()
622 return repsep_snprintf(bf, size, "%-*s", width, tmp); in hist_entry__sym_ipc_null_snprintf()
632 /* --sort srcfile */
639 struct map *map = e->ms.map; in hist_entry__get_srcfile()
644 sf = __get_srcline(map__dso(map), map__rip_2objdump(map, e->ip), in hist_entry__get_srcfile()
645 e->ms.sym, false, true, true, e->ip); in hist_entry__get_srcfile()
666 if (!left->srcfile) in sort__srcfile_collapse()
667 left->srcfile = hist_entry__get_srcfile(left); in sort__srcfile_collapse()
668 if (!right->srcfile) in sort__srcfile_collapse()
669 right->srcfile = hist_entry__get_srcfile(right); in sort__srcfile_collapse()
671 return strcmp(right->srcfile, left->srcfile); in sort__srcfile_collapse()
682 if (!he->srcfile) in sort__srcfile_init()
683 he->srcfile = hist_entry__get_srcfile(he); in sort__srcfile_init()
689 return repsep_snprintf(bf, size, "%-.*s", width, he->srcfile); in hist_entry__srcfile_snprintf()
702 /* --sort parent */
707 struct symbol *sym_l = left->parent; in sort__parent_cmp()
708 struct symbol *sym_r = right->parent; in sort__parent_cmp()
713 return strcmp(sym_r->name, sym_l->name); in sort__parent_cmp()
719 return repsep_snprintf(bf, size, "%-*.*s", width, width, in hist_entry__parent_snprintf()
720 he->parent ? he->parent->name : "[other]"); in hist_entry__parent_snprintf()
730 /* --sort cpu */
735 return right->cpu - left->cpu; in sort__cpu_cmp()
741 return repsep_snprintf(bf, size, "%*.*d", width, width, he->cpu); in hist_entry__cpu_snprintf()
751 /* --sort cgroup_id */
755 return (int64_t)(right_dev - left_dev); in _sort__cgroup_dev_cmp()
760 return (int64_t)(right_ino - left_ino); in _sort__cgroup_inode_cmp()
768 ret = _sort__cgroup_dev_cmp(right->cgroup_id.dev, left->cgroup_id.dev); in sort__cgroup_id_cmp()
772 return _sort__cgroup_inode_cmp(right->cgroup_id.ino, in sort__cgroup_id_cmp()
773 left->cgroup_id.ino); in sort__cgroup_id_cmp()
780 return repsep_snprintf(bf, size, "%lu/0x%lx", he->cgroup_id.dev, in hist_entry__cgroup_id_snprintf()
781 he->cgroup_id.ino); in hist_entry__cgroup_id_snprintf()
791 /* --sort cgroup */
796 return right->cgroup - left->cgroup; in sort__cgroup_cmp()
805 if (he->cgroup) { in hist_entry__cgroup_snprintf()
806 struct cgroup *cgrp = cgroup__find(maps__machine(he->ms.maps)->env, in hist_entry__cgroup_snprintf()
807 he->cgroup); in hist_entry__cgroup_snprintf()
809 cgrp_name = cgrp->name; in hist_entry__cgroup_snprintf()
824 /* --sort socket */
829 return right->socket - left->socket; in sort__socket_cmp()
835 return repsep_snprintf(bf, size, "%*.*d", width, width-3, he->socket); in hist_entry__socket_snprintf()
843 return -1; in hist_entry__socket_filter()
845 return sk >= 0 && he->socket != sk; in hist_entry__socket_filter()
856 /* --sort time */
861 return right->time - left->time; in sort__time_cmp()
870 timestamp__scnprintf_nsec(he->time, he_time, in hist_entry__time_snprintf()
873 timestamp__scnprintf_usec(he->time, he_time, in hist_entry__time_snprintf()
876 return repsep_snprintf(bf, size, "%-.*s", width, he_time); in hist_entry__time_snprintf()
886 /* --sort trace */
894 .data = he->raw_data, in get_trace_output()
895 .size = he->raw_size, in get_trace_output()
898 evsel = hists_to_evsel(he->hists); in get_trace_output()
902 tep_print_fields(&seq, he->raw_data, he->raw_size, in get_trace_output()
903 evsel->tp_format); in get_trace_output()
905 tep_print_event(evsel->tp_format->tep, in get_trace_output()
920 evsel = hists_to_evsel(left->hists); in sort__trace_cmp()
921 if (evsel->core.attr.type != PERF_TYPE_TRACEPOINT) in sort__trace_cmp()
924 if (left->trace_output == NULL) in sort__trace_cmp()
925 left->trace_output = get_trace_output(left); in sort__trace_cmp()
926 if (right->trace_output == NULL) in sort__trace_cmp()
927 right->trace_output = get_trace_output(right); in sort__trace_cmp()
929 return strcmp(right->trace_output, left->trace_output); in sort__trace_cmp()
937 evsel = hists_to_evsel(he->hists); in hist_entry__trace_snprintf()
938 if (evsel->core.attr.type != PERF_TYPE_TRACEPOINT) in hist_entry__trace_snprintf()
939 return scnprintf(bf, size, "%-.*s", width, "N/A"); in hist_entry__trace_snprintf()
941 if (he->trace_output == NULL) in hist_entry__trace_snprintf()
942 he->trace_output = get_trace_output(he); in hist_entry__trace_snprintf()
943 return repsep_snprintf(bf, size, "%-.*s", width, he->trace_output); in hist_entry__trace_snprintf()
959 if (!left->branch_info || !right->branch_info) in sort__dso_from_cmp()
960 return cmp_null(left->branch_info, right->branch_info); in sort__dso_from_cmp()
962 return _sort__dso_cmp(left->branch_info->from.ms.map, in sort__dso_from_cmp()
963 right->branch_info->from.ms.map); in sort__dso_from_cmp()
969 if (he->branch_info) in hist_entry__dso_from_snprintf()
970 return _hist_entry__dso_snprintf(he->branch_info->from.ms.map, in hist_entry__dso_from_snprintf()
973 return repsep_snprintf(bf, size, "%-*.*s", width, width, "N/A"); in hist_entry__dso_from_snprintf()
982 return -1; in hist_entry__dso_from_filter()
984 return dso && (!he->branch_info || !he->branch_info->from.ms.map || in hist_entry__dso_from_filter()
985 map__dso(he->branch_info->from.ms.map) != dso); in hist_entry__dso_from_filter()
991 if (!left->branch_info || !right->branch_info) in sort__dso_to_cmp()
992 return cmp_null(left->branch_info, right->branch_info); in sort__dso_to_cmp()
994 return _sort__dso_cmp(left->branch_info->to.ms.map, in sort__dso_to_cmp()
995 right->branch_info->to.ms.map); in sort__dso_to_cmp()
1001 if (he->branch_info) in hist_entry__dso_to_snprintf()
1002 return _hist_entry__dso_snprintf(he->branch_info->to.ms.map, in hist_entry__dso_to_snprintf()
1005 return repsep_snprintf(bf, size, "%-*.*s", width, width, "N/A"); in hist_entry__dso_to_snprintf()
1014 return -1; in hist_entry__dso_to_filter()
1016 return dso && (!he->branch_info || !he->branch_info->to.ms.map || in hist_entry__dso_to_filter()
1017 map__dso(he->branch_info->to.ms.map) != dso); in hist_entry__dso_to_filter()
1025 if (!left->branch_info || !right->branch_info) in sort__sym_from_cmp()
1026 return cmp_null(left->branch_info, right->branch_info); in sort__sym_from_cmp()
1028 from_l = &left->branch_info->from; in sort__sym_from_cmp()
1029 from_r = &right->branch_info->from; in sort__sym_from_cmp()
1031 if (!from_l->ms.sym && !from_r->ms.sym) in sort__sym_from_cmp()
1032 return _sort__addr_cmp(from_l->addr, from_r->addr); in sort__sym_from_cmp()
1034 return _sort__sym_cmp(from_l->ms.sym, from_r->ms.sym); in sort__sym_from_cmp()
1042 if (!left->branch_info || !right->branch_info) in sort__sym_to_cmp()
1043 return cmp_null(left->branch_info, right->branch_info); in sort__sym_to_cmp()
1045 to_l = &left->branch_info->to; in sort__sym_to_cmp()
1046 to_r = &right->branch_info->to; in sort__sym_to_cmp()
1048 if (!to_l->ms.sym && !to_r->ms.sym) in sort__sym_to_cmp()
1049 return _sort__addr_cmp(to_l->addr, to_r->addr); in sort__sym_to_cmp()
1051 return _sort__sym_cmp(to_l->ms.sym, to_r->ms.sym); in sort__sym_to_cmp()
1057 if (he->branch_info) { in hist_entry__sym_from_snprintf()
1058 struct addr_map_symbol *from = &he->branch_info->from; in hist_entry__sym_from_snprintf()
1060 return _hist_entry__sym_snprintf(&from->ms, from->al_addr, in hist_entry__sym_from_snprintf()
1061 from->al_level, bf, size, width); in hist_entry__sym_from_snprintf()
1064 return repsep_snprintf(bf, size, "%-*.*s", width, width, "N/A"); in hist_entry__sym_from_snprintf()
1070 if (he->branch_info) { in hist_entry__sym_to_snprintf()
1071 struct addr_map_symbol *to = &he->branch_info->to; in hist_entry__sym_to_snprintf()
1073 return _hist_entry__sym_snprintf(&to->ms, to->al_addr, in hist_entry__sym_to_snprintf()
1074 to->al_level, bf, size, width); in hist_entry__sym_to_snprintf()
1077 return repsep_snprintf(bf, size, "%-*.*s", width, width, "N/A"); in hist_entry__sym_to_snprintf()
1086 return -1; in hist_entry__sym_from_filter()
1088 return sym && !(he->branch_info && he->branch_info->from.ms.sym && in hist_entry__sym_from_filter()
1089 strstr(he->branch_info->from.ms.sym->name, sym)); in hist_entry__sym_from_filter()
1098 return -1; in hist_entry__sym_to_filter()
1100 return sym && !(he->branch_info && he->branch_info->to.ms.sym && in hist_entry__sym_to_filter()
1101 strstr(he->branch_info->to.ms.sym->name, sym)); in hist_entry__sym_to_filter()
1140 struct symbol *sym = ms->sym; in _hist_entry__addr_snprintf()
1141 struct map *map = ms->map; in _hist_entry__addr_snprintf()
1144 ret += repsep_snprintf(bf + ret, size - ret, "[%c] ", level); in _hist_entry__addr_snprintf()
1146 if (sym->type == STT_OBJECT) { in _hist_entry__addr_snprintf()
1147 ret += repsep_snprintf(bf + ret, size - ret, "%s", sym->name); in _hist_entry__addr_snprintf()
1148 ret += repsep_snprintf(bf + ret, size - ret, "+0x%llx", in _hist_entry__addr_snprintf()
1149 ip - map__unmap_ip(map, sym->start)); in _hist_entry__addr_snprintf()
1151 ret += repsep_snprintf(bf + ret, size - ret, "%.*s", in _hist_entry__addr_snprintf()
1152 width - ret, in _hist_entry__addr_snprintf()
1153 sym->name); in _hist_entry__addr_snprintf()
1154 offs = ip - sym->start; in _hist_entry__addr_snprintf()
1156 ret += repsep_snprintf(bf + ret, size - ret, "+0x%llx", offs); in _hist_entry__addr_snprintf()
1160 ret += repsep_snprintf(bf + ret, size - ret, "%-#.*llx", in _hist_entry__addr_snprintf()
1170 if (he->branch_info) { in hist_entry__addr_from_snprintf()
1171 struct addr_map_symbol *from = &he->branch_info->from; in hist_entry__addr_from_snprintf()
1173 return _hist_entry__addr_snprintf(&from->ms, from->al_addr, in hist_entry__addr_from_snprintf()
1174 he->level, bf, size, width); in hist_entry__addr_from_snprintf()
1177 return repsep_snprintf(bf, size, "%-*.*s", width, width, "N/A"); in hist_entry__addr_from_snprintf()
1183 if (he->branch_info) { in hist_entry__addr_to_snprintf()
1184 struct addr_map_symbol *to = &he->branch_info->to; in hist_entry__addr_to_snprintf()
1186 return _hist_entry__addr_snprintf(&to->ms, to->al_addr, in hist_entry__addr_to_snprintf()
1187 he->level, bf, size, width); in hist_entry__addr_to_snprintf()
1190 return repsep_snprintf(bf, size, "%-*.*s", width, width, "N/A"); in hist_entry__addr_to_snprintf()
1200 if (!left->branch_info || !right->branch_info) in sort__addr_from_cmp()
1201 return cmp_null(left->branch_info, right->branch_info); in sort__addr_from_cmp()
1203 from_l = &left->branch_info->from; in sort__addr_from_cmp()
1204 from_r = &right->branch_info->from; in sort__addr_from_cmp()
1210 ret = _sort__dso_cmp(from_l->ms.map, from_r->ms.map); in sort__addr_from_cmp()
1214 return _sort__addr_cmp(from_l->addr, from_r->addr); in sort__addr_from_cmp()
1224 if (!left->branch_info || !right->branch_info) in sort__addr_to_cmp()
1225 return cmp_null(left->branch_info, right->branch_info); in sort__addr_to_cmp()
1227 to_l = &left->branch_info->to; in sort__addr_to_cmp()
1228 to_r = &right->branch_info->to; in sort__addr_to_cmp()
1234 ret = _sort__dso_cmp(to_l->ms.map, to_r->ms.map); in sort__addr_to_cmp()
1238 return _sort__addr_cmp(to_l->addr, to_r->addr); in sort__addr_to_cmp()
1263 if (!left->branch_info || !right->branch_info) in sort__mispredict_cmp()
1264 return cmp_null(left->branch_info, right->branch_info); in sort__mispredict_cmp()
1266 mp = left->branch_info->flags.mispred != right->branch_info->flags.mispred; in sort__mispredict_cmp()
1267 p = left->branch_info->flags.predicted != right->branch_info->flags.predicted; in sort__mispredict_cmp()
1275 if (he->branch_info) { in hist_entry__mispredict_snprintf()
1276 if (he->branch_info->flags.predicted) in hist_entry__mispredict_snprintf()
1278 else if (he->branch_info->flags.mispred) in hist_entry__mispredict_snprintf()
1282 return repsep_snprintf(bf, size, "%-*.*s", width, width, out); in hist_entry__mispredict_snprintf()
1288 if (!left->branch_info || !right->branch_info) in sort__cycles_cmp()
1289 return cmp_null(left->branch_info, right->branch_info); in sort__cycles_cmp()
1291 return left->branch_info->flags.cycles - in sort__cycles_cmp()
1292 right->branch_info->flags.cycles; in sort__cycles_cmp()
1298 if (!he->branch_info) in hist_entry__cycles_snprintf()
1299 return scnprintf(bf, size, "%-.*s", width, "N/A"); in hist_entry__cycles_snprintf()
1300 if (he->branch_info->flags.cycles == 0) in hist_entry__cycles_snprintf()
1301 return repsep_snprintf(bf, size, "%-*s", width, "-"); in hist_entry__cycles_snprintf()
1302 return repsep_snprintf(bf, size, "%-*hd", width, in hist_entry__cycles_snprintf()
1303 he->branch_info->flags.cycles); in hist_entry__cycles_snprintf()
1313 /* --sort daddr_sym */
1319 if (left->mem_info) in sort__daddr_cmp()
1320 l = left->mem_info->daddr.addr; in sort__daddr_cmp()
1321 if (right->mem_info) in sort__daddr_cmp()
1322 r = right->mem_info->daddr.addr; in sort__daddr_cmp()
1324 return (int64_t)(r - l); in sort__daddr_cmp()
1333 if (he->mem_info) { in hist_entry__daddr_snprintf()
1334 addr = he->mem_info->daddr.addr; in hist_entry__daddr_snprintf()
1335 ms = &he->mem_info->daddr.ms; in hist_entry__daddr_snprintf()
1337 return _hist_entry__sym_snprintf(ms, addr, he->level, bf, size, width); in hist_entry__daddr_snprintf()
1345 if (left->mem_info) in sort__iaddr_cmp()
1346 l = left->mem_info->iaddr.addr; in sort__iaddr_cmp()
1347 if (right->mem_info) in sort__iaddr_cmp()
1348 r = right->mem_info->iaddr.addr; in sort__iaddr_cmp()
1350 return (int64_t)(r - l); in sort__iaddr_cmp()
1359 if (he->mem_info) { in hist_entry__iaddr_snprintf()
1360 addr = he->mem_info->iaddr.addr; in hist_entry__iaddr_snprintf()
1361 ms = &he->mem_info->iaddr.ms; in hist_entry__iaddr_snprintf()
1363 return _hist_entry__sym_snprintf(ms, addr, he->level, bf, size, width); in hist_entry__iaddr_snprintf()
1372 if (left->mem_info) in sort__dso_daddr_cmp()
1373 map_l = left->mem_info->daddr.ms.map; in sort__dso_daddr_cmp()
1374 if (right->mem_info) in sort__dso_daddr_cmp()
1375 map_r = right->mem_info->daddr.ms.map; in sort__dso_daddr_cmp()
1385 if (he->mem_info) in hist_entry__dso_daddr_snprintf()
1386 map = he->mem_info->daddr.ms.map; in hist_entry__dso_daddr_snprintf()
1397 if (left->mem_info) in sort__locked_cmp()
1398 data_src_l = left->mem_info->data_src; in sort__locked_cmp()
1402 if (right->mem_info) in sort__locked_cmp()
1403 data_src_r = right->mem_info->data_src; in sort__locked_cmp()
1407 return (int64_t)(data_src_r.mem_lock - data_src_l.mem_lock); in sort__locked_cmp()
1415 perf_mem__lck_scnprintf(out, sizeof(out), he->mem_info); in hist_entry__locked_snprintf()
1425 if (left->mem_info) in sort__tlb_cmp()
1426 data_src_l = left->mem_info->data_src; in sort__tlb_cmp()
1430 if (right->mem_info) in sort__tlb_cmp()
1431 data_src_r = right->mem_info->data_src; in sort__tlb_cmp()
1435 return (int64_t)(data_src_r.mem_dtlb - data_src_l.mem_dtlb); in sort__tlb_cmp()
1443 perf_mem__tlb_scnprintf(out, sizeof(out), he->mem_info); in hist_entry__tlb_snprintf()
1444 return repsep_snprintf(bf, size, "%-*s", width, out); in hist_entry__tlb_snprintf()
1453 if (left->mem_info) in sort__lvl_cmp()
1454 data_src_l = left->mem_info->data_src; in sort__lvl_cmp()
1458 if (right->mem_info) in sort__lvl_cmp()
1459 data_src_r = right->mem_info->data_src; in sort__lvl_cmp()
1463 return (int64_t)(data_src_r.mem_lvl - data_src_l.mem_lvl); in sort__lvl_cmp()
1471 perf_mem__lvl_scnprintf(out, sizeof(out), he->mem_info); in hist_entry__lvl_snprintf()
1472 return repsep_snprintf(bf, size, "%-*s", width, out); in hist_entry__lvl_snprintf()
1481 if (left->mem_info) in sort__snoop_cmp()
1482 data_src_l = left->mem_info->data_src; in sort__snoop_cmp()
1486 if (right->mem_info) in sort__snoop_cmp()
1487 data_src_r = right->mem_info->data_src; in sort__snoop_cmp()
1491 return (int64_t)(data_src_r.mem_snoop - data_src_l.mem_snoop); in sort__snoop_cmp()
1499 perf_mem__snp_scnprintf(out, sizeof(out), he->mem_info); in hist_entry__snoop_snprintf()
1500 return repsep_snprintf(bf, size, "%-*s", width, out); in hist_entry__snoop_snprintf()
1511 if (!left->mem_info) return -1; in sort__dcacheline_cmp()
1512 if (!right->mem_info) return 1; in sort__dcacheline_cmp()
1515 if (left->cpumode > right->cpumode) return -1; in sort__dcacheline_cmp()
1516 if (left->cpumode < right->cpumode) return 1; in sort__dcacheline_cmp()
1518 l_map = left->mem_info->daddr.ms.map; in sort__dcacheline_cmp()
1519 r_map = right->mem_info->daddr.ms.map; in sort__dcacheline_cmp()
1525 if (!l_map) return -1; in sort__dcacheline_cmp()
1537 * The kernel and non-zero major/minor mapped areas are in sort__dcacheline_cmp()
1541 if ((left->cpumode != PERF_RECORD_MISC_KERNEL) && in sort__dcacheline_cmp()
1542 (!(map__flags(l_map) & MAP_SHARED)) && !l_dso->id.maj && !l_dso->id.min && in sort__dcacheline_cmp()
1543 !l_dso->id.ino && !l_dso->id.ino_generation) { in sort__dcacheline_cmp()
1546 if (thread__pid(left->thread) > thread__pid(right->thread)) in sort__dcacheline_cmp()
1547 return -1; in sort__dcacheline_cmp()
1548 if (thread__pid(left->thread) < thread__pid(right->thread)) in sort__dcacheline_cmp()
1553 /* al_addr does all the right addr - start + offset calculations */ in sort__dcacheline_cmp()
1554 l = cl_address(left->mem_info->daddr.al_addr, chk_double_cl); in sort__dcacheline_cmp()
1555 r = cl_address(right->mem_info->daddr.al_addr, chk_double_cl); in sort__dcacheline_cmp()
1557 if (l > r) return -1; in sort__dcacheline_cmp()
1569 char level = he->level; in hist_entry__dcacheline_snprintf()
1571 if (he->mem_info) { in hist_entry__dcacheline_snprintf()
1572 struct map *map = he->mem_info->daddr.ms.map; in hist_entry__dcacheline_snprintf()
1575 addr = cl_address(he->mem_info->daddr.al_addr, chk_double_cl); in hist_entry__dcacheline_snprintf()
1576 ms = &he->mem_info->daddr.ms; in hist_entry__dcacheline_snprintf()
1579 if ((he->cpumode != PERF_RECORD_MISC_KERNEL) && in hist_entry__dcacheline_snprintf()
1582 (dso->id.maj || dso->id.min || dso->id.ino || dso->id.ino_generation)) in hist_entry__dcacheline_snprintf()
1600 return left->weight - right->weight; in sort__weight_cmp()
1606 return repsep_snprintf(bf, size, "%-*llu", width, he->weight); in hist_entry__local_weight_snprintf()
1619 return repsep_snprintf(bf, size, "%-*llu", width, in hist_entry__global_weight_snprintf()
1620 he->weight * he->stat.nr_events); in hist_entry__global_weight_snprintf()
1633 return left->ins_lat - right->ins_lat; in sort__ins_lat_cmp()
1639 return repsep_snprintf(bf, size, "%-*u", width, he->ins_lat); in hist_entry__local_ins_lat_snprintf()
1652 return repsep_snprintf(bf, size, "%-*u", width, in hist_entry__global_ins_lat_snprintf()
1653 he->ins_lat * he->stat.nr_events); in hist_entry__global_ins_lat_snprintf()
1666 return left->p_stage_cyc - right->p_stage_cyc; in sort__p_stage_cyc_cmp()
1672 return repsep_snprintf(bf, size, "%-*u", width, in hist_entry__global_p_stage_cyc_snprintf()
1673 he->p_stage_cyc * he->stat.nr_events); in hist_entry__global_p_stage_cyc_snprintf()
1680 return repsep_snprintf(bf, size, "%-*u", width, he->p_stage_cyc); in hist_entry__p_stage_cyc_snprintf()
1759 if (left->mem_info) in sort__blocked_cmp()
1760 data_src_l = left->mem_info->data_src; in sort__blocked_cmp()
1764 if (right->mem_info) in sort__blocked_cmp()
1765 data_src_r = right->mem_info->data_src; in sort__blocked_cmp()
1769 return (int64_t)(data_src_r.mem_blk - data_src_l.mem_blk); in sort__blocked_cmp()
1777 perf_mem__blk_scnprintf(out, sizeof(out), he->mem_info); in hist_entry__blocked_snprintf()
1793 if (left->mem_info) in sort__phys_daddr_cmp()
1794 l = left->mem_info->daddr.phys_addr; in sort__phys_daddr_cmp()
1795 if (right->mem_info) in sort__phys_daddr_cmp()
1796 r = right->mem_info->daddr.phys_addr; in sort__phys_daddr_cmp()
1798 return (int64_t)(r - l); in sort__phys_daddr_cmp()
1808 addr = he->mem_info->daddr.phys_addr; in hist_entry__phys_daddr_snprintf()
1810 ret += repsep_snprintf(bf + ret, size - ret, "[%c] ", he->level); in hist_entry__phys_daddr_snprintf()
1812 ret += repsep_snprintf(bf + ret, size - ret, "%-#.*llx", len, addr); in hist_entry__phys_daddr_snprintf()
1814 ret += repsep_snprintf(bf + ret, size - ret, "%-*s", width - ret, ""); in hist_entry__phys_daddr_snprintf()
1834 if (left->mem_info) in sort__data_page_size_cmp()
1835 l = left->mem_info->daddr.data_page_size; in sort__data_page_size_cmp()
1836 if (right->mem_info) in sort__data_page_size_cmp()
1837 r = right->mem_info->daddr.data_page_size; in sort__data_page_size_cmp()
1839 return (int64_t)(r - l); in sort__data_page_size_cmp()
1847 return repsep_snprintf(bf, size, "%-*s", width, in hist_entry__data_page_size_snprintf()
1848 get_page_size_name(he->mem_info->daddr.data_page_size, str)); in hist_entry__data_page_size_snprintf()
1861 uint64_t l = left->code_page_size; in sort__code_page_size_cmp()
1862 uint64_t r = right->code_page_size; in sort__code_page_size_cmp()
1864 return (int64_t)(r - l); in sort__code_page_size_cmp()
1872 return repsep_snprintf(bf, size, "%-*s", width, in hist_entry__code_page_size_snprintf()
1873 get_page_size_name(he->code_page_size, str)); in hist_entry__code_page_size_snprintf()
1886 if (!left->branch_info || !right->branch_info) in sort__abort_cmp()
1887 return cmp_null(left->branch_info, right->branch_info); in sort__abort_cmp()
1889 return left->branch_info->flags.abort != in sort__abort_cmp()
1890 right->branch_info->flags.abort; in sort__abort_cmp()
1898 if (he->branch_info) { in hist_entry__abort_snprintf()
1899 if (he->branch_info->flags.abort) in hist_entry__abort_snprintf()
1905 return repsep_snprintf(bf, size, "%-*s", width, out); in hist_entry__abort_snprintf()
1918 if (!left->branch_info || !right->branch_info) in sort__in_tx_cmp()
1919 return cmp_null(left->branch_info, right->branch_info); in sort__in_tx_cmp()
1921 return left->branch_info->flags.in_tx != in sort__in_tx_cmp()
1922 right->branch_info->flags.in_tx; in sort__in_tx_cmp()
1930 if (he->branch_info) { in hist_entry__in_tx_snprintf()
1931 if (he->branch_info->flags.in_tx) in hist_entry__in_tx_snprintf()
1937 return repsep_snprintf(bf, size, "%-*s", width, out); in hist_entry__in_tx_snprintf()
1950 return left->transaction - right->transaction; in sort__transaction_cmp()
1970 { PERF_TXN_CAPACITY_WRITE, "CAP-WRITE ", 1 },
1971 { PERF_TXN_CAPACITY_READ, "CAP-READ ", 0 },
1991 u64 t = he->transaction; in hist_entry__transaction_snprintf()
2009 return repsep_snprintf(bf, size, "%-*s", width, buf); in hist_entry__transaction_snprintf()
2019 /* --sort symbol_size */
2026 return size_l < size_r ? -1 : in _sort__sym_size_cmp()
2033 return _sort__sym_size_cmp(right->ms.sym, left->ms.sym); in sort__sym_size_cmp()
2048 return _hist_entry__sym_size_snprintf(he->ms.sym, bf, size, width); in hist_entry__sym_size_snprintf()
2058 /* --sort dso_size */
2065 return size_l < size_r ? -1 : in _sort__dso_size_cmp()
2072 return _sort__dso_size_cmp(right->ms.map, left->ms.map); in sort__dso_size_cmp()
2087 return _hist_entry__dso_size_snprintf(he->ms.map, bf, size, width); in hist_entry__dso_size_snprintf()
2097 /* --sort dso_size */
2102 u64 left_ip = left->ip; in sort__addr_cmp()
2103 u64 right_ip = right->ip; in sort__addr_cmp()
2104 struct map *left_map = left->ms.map; in sort__addr_cmp()
2105 struct map *right_map = right->ms.map; in sort__addr_cmp()
2118 u64 ip = he->ip; in hist_entry__addr_snprintf()
2119 struct map *map = he->ms.map; in hist_entry__addr_snprintf()
2124 return repsep_snprintf(bf, size, "%-#*llx", width, ip); in hist_entry__addr_snprintf()
2153 sd->entry->se_header = arch_perf_header_entry(sd->entry->se_header); in sort_dimension_add_dynamic_header()
2193 #define DIM(d, n, func) [d - __SORT_BRANCH_STACK] = { .name = n, .entry = &(func) }
2213 #define DIM(d, n, func) [d - __SORT_MEMORY_MODE] = { .name = n, .entry = &(func) }
2254 struct sort_entry *se; member
2265 hists__new_col_len(hists, hse->se->se_width_idx, strlen(fmt->name)); in perf_hpp__reset_sort_width()
2273 size_t len = fmt->user_len; in __sort__hpp_header()
2278 len = hists__col_len(hists, hse->se->se_width_idx); in __sort__hpp_header()
2280 return scnprintf(hpp->buf, hpp->size, "%-*.*s", len, len, fmt->name); in __sort__hpp_header()
2288 size_t len = fmt->user_len; in __sort__hpp_width()
2293 len = hists__col_len(hists, hse->se->se_width_idx); in __sort__hpp_width()
2302 size_t len = fmt->user_len; in __sort__hpp_entry()
2307 len = hists__col_len(he->hists, hse->se->se_width_idx); in __sort__hpp_entry()
2309 return hse->se->se_snprintf(he, hpp->buf, hpp->size, len); in __sort__hpp_entry()
2318 return hse->se->se_cmp(a, b); in __sort__hpp_cmp()
2328 collapse_fn = hse->se->se_collapse ?: hse->se->se_cmp; in __sort__hpp_collapse()
2339 sort_fn = hse->se->se_sort ?: hse->se->se_cmp; in __sort__hpp_sort()
2345 return format->header == __sort__hpp_header; in perf_hpp__is_sort_entry()
2357 return hse->se == &sort_ ## key ; \
2387 return hse_a->se == hse_b->se; in MK_SORT_ENTRY_CHK()
2407 if (hse->se->se_init) in hse_init()
2408 hse->se->se_init(he); in hse_init()
2422 hse->se = sd->entry; in __sort_dimension__alloc_hpp()
2423 hse->hpp.name = sd->entry->se_header; in __sort_dimension__alloc_hpp()
2424 hse->hpp.header = __sort__hpp_header; in __sort_dimension__alloc_hpp()
2425 hse->hpp.width = __sort__hpp_width; in __sort_dimension__alloc_hpp()
2426 hse->hpp.entry = __sort__hpp_entry; in __sort_dimension__alloc_hpp()
2427 hse->hpp.color = NULL; in __sort_dimension__alloc_hpp()
2429 hse->hpp.cmp = __sort__hpp_cmp; in __sort_dimension__alloc_hpp()
2430 hse->hpp.collapse = __sort__hpp_collapse; in __sort_dimension__alloc_hpp()
2431 hse->hpp.sort = __sort__hpp_sort; in __sort_dimension__alloc_hpp()
2432 hse->hpp.equal = __sort__hpp_equal; in __sort_dimension__alloc_hpp()
2433 hse->hpp.free = hse_free; in __sort_dimension__alloc_hpp()
2434 hse->hpp.init = hse_init; in __sort_dimension__alloc_hpp()
2436 INIT_LIST_HEAD(&hse->hpp.list); in __sort_dimension__alloc_hpp()
2437 INIT_LIST_HEAD(&hse->hpp.sort_list); in __sort_dimension__alloc_hpp()
2438 hse->hpp.elide = false; in __sort_dimension__alloc_hpp()
2439 hse->hpp.len = 0; in __sort_dimension__alloc_hpp()
2440 hse->hpp.user_len = 0; in __sort_dimension__alloc_hpp()
2441 hse->hpp.level = level; in __sort_dimension__alloc_hpp()
2456 fmt = memdup(hd->fmt, sizeof(*fmt)); in __hpp_dimension__alloc_hpp()
2458 INIT_LIST_HEAD(&fmt->list); in __hpp_dimension__alloc_hpp()
2459 INIT_LIST_HEAD(&fmt->sort_list); in __hpp_dimension__alloc_hpp()
2460 fmt->free = hpp_free; in __hpp_dimension__alloc_hpp()
2461 fmt->level = level; in __hpp_dimension__alloc_hpp()
2471 int ret = -1; in hist_entry__filter()
2474 perf_hpp_list__for_each_format(he->hpp_list, fmt) { in hist_entry__filter()
2479 if (hse->se->se_filter == NULL) in hist_entry__filter()
2484 * is applied. But it should skip non-matched filter types. in hist_entry__filter()
2486 r = hse->se->se_filter(he, type, arg); in hist_entry__filter()
2504 return -1; in __sort_dimension__add_hpp_sort()
2506 perf_hpp_list__register_sort_field(list, &hse->hpp); in __sort_dimension__add_hpp_sort()
2516 return -1; in __sort_dimension__add_hpp_output()
2518 perf_hpp_list__column_register(list, &hse->hpp); in __sort_dimension__add_hpp_output()
2543 if (!hde->hpp.len) { in hde_width()
2544 int len = hde->dynamic_len; in hde_width()
2545 int namelen = strlen(hde->field->name); in hde_width()
2546 int fieldlen = hde->field->size; in hde_width()
2551 if (!(hde->field->flags & TEP_FIELD_IS_STRING)) { in hde_width()
2553 fieldlen = hde->field->size * 2 + 2; in hde_width()
2558 hde->hpp.len = len; in hde_width()
2560 return hde->hpp.len; in hde_width()
2566 char *str, *pos; in update_dynamic_len() local
2567 struct tep_format_field *field = hde->field; in update_dynamic_len()
2571 if (hde->raw_trace) in update_dynamic_len()
2575 if (!he->trace_output) in update_dynamic_len()
2576 he->trace_output = get_trace_output(he); in update_dynamic_len()
2578 namelen = strlen(field->name); in update_dynamic_len()
2579 str = he->trace_output; in update_dynamic_len()
2582 pos = strchr(str, ' '); in update_dynamic_len()
2583 if (pos == NULL) { in update_dynamic_len()
2585 pos = str + strlen(str); in update_dynamic_len()
2588 if (!strncmp(str, field->name, namelen)) { in update_dynamic_len()
2592 len = pos - str; in update_dynamic_len()
2594 if (len > hde->dynamic_len) in update_dynamic_len()
2595 hde->dynamic_len = len; in update_dynamic_len()
2602 str = pos + 1; in update_dynamic_len()
2612 size_t len = fmt->user_len; in __sort__hde_header()
2619 return scnprintf(hpp->buf, hpp->size, "%*.*s", len, len, hde->field->name); in __sort__hde_header()
2627 size_t len = fmt->user_len; in __sort__hde_width()
2643 return hists_to_evsel(hists) == hde->evsel; in perf_hpp__defined_dynamic_entry()
2650 size_t len = fmt->user_len; in __sort__hde_entry()
2651 char *str, *pos; in __sort__hde_entry() local
2662 if (hde->raw_trace) in __sort__hde_entry()
2665 if (!he->trace_output) in __sort__hde_entry()
2666 he->trace_output = get_trace_output(he); in __sort__hde_entry()
2668 field = hde->field; in __sort__hde_entry()
2669 namelen = strlen(field->name); in __sort__hde_entry()
2670 str = he->trace_output; in __sort__hde_entry()
2673 pos = strchr(str, ' '); in __sort__hde_entry()
2674 if (pos == NULL) { in __sort__hde_entry()
2676 pos = str + strlen(str); in __sort__hde_entry()
2679 if (!strncmp(str, field->name, namelen)) { in __sort__hde_entry()
2681 str = strndup(str, pos - str); in __sort__hde_entry()
2684 return scnprintf(hpp->buf, hpp->size, in __sort__hde_entry()
2692 str = pos + 1; in __sort__hde_entry()
2699 tep_print_field(&seq, he->raw_data, hde->field); in __sort__hde_entry()
2703 ret = scnprintf(hpp->buf, hpp->size, "%*.*s", len, len, str); in __sort__hde_entry()
2717 field = hde->field; in __sort__hde_cmp()
2718 if (field->flags & TEP_FIELD_IS_DYNAMIC) { in __sort__hde_cmp()
2721 tep_read_number_field(field, a->raw_data, &dyn); in __sort__hde_cmp()
2724 if (tep_field_is_relative(field->flags)) in __sort__hde_cmp()
2725 offset += field->offset + field->size; in __sort__hde_cmp()
2727 if (size > hde->dynamic_len) in __sort__hde_cmp()
2728 hde->dynamic_len = size; in __sort__hde_cmp()
2730 offset = field->offset; in __sort__hde_cmp()
2731 size = field->size; in __sort__hde_cmp()
2734 return memcmp(a->raw_data + offset, b->raw_data + offset, size); in __sort__hde_cmp()
2739 return fmt->cmp == __sort__hde_cmp; in perf_hpp__is_dynamic_entry()
2753 return hde_a->field == hde_b->field; in __sort__hde_equal()
2787 hde->evsel = evsel; in __alloc_dynamic_entry()
2788 hde->field = field; in __alloc_dynamic_entry()
2789 hde->dynamic_len = 0; in __alloc_dynamic_entry()
2791 hde->hpp.name = field->name; in __alloc_dynamic_entry()
2792 hde->hpp.header = __sort__hde_header; in __alloc_dynamic_entry()
2793 hde->hpp.width = __sort__hde_width; in __alloc_dynamic_entry()
2794 hde->hpp.entry = __sort__hde_entry; in __alloc_dynamic_entry()
2795 hde->hpp.color = NULL; in __alloc_dynamic_entry()
2797 hde->hpp.init = __sort__hde_init; in __alloc_dynamic_entry()
2798 hde->hpp.cmp = __sort__hde_cmp; in __alloc_dynamic_entry()
2799 hde->hpp.collapse = __sort__hde_cmp; in __alloc_dynamic_entry()
2800 hde->hpp.sort = __sort__hde_cmp; in __alloc_dynamic_entry()
2801 hde->hpp.equal = __sort__hde_equal; in __alloc_dynamic_entry()
2802 hde->hpp.free = hde_free; in __alloc_dynamic_entry()
2804 INIT_LIST_HEAD(&hde->hpp.list); in __alloc_dynamic_entry()
2805 INIT_LIST_HEAD(&hde->hpp.sort_list); in __alloc_dynamic_entry()
2806 hde->hpp.elide = false; in __alloc_dynamic_entry()
2807 hde->hpp.len = 0; in __alloc_dynamic_entry()
2808 hde->hpp.user_len = 0; in __alloc_dynamic_entry()
2809 hde->hpp.level = level; in __alloc_dynamic_entry()
2825 new_fmt = &new_hse->hpp; in perf_hpp_fmt__dup()
2833 new_fmt = &new_hde->hpp; in perf_hpp_fmt__dup()
2839 INIT_LIST_HEAD(&new_fmt->list); in perf_hpp_fmt__dup()
2840 INIT_LIST_HEAD(&new_fmt->sort_list); in perf_hpp_fmt__dup()
2878 struct evsel *pos; in find_evsel() local
2885 if (nr > evlist->core.nr_entries) in find_evsel()
2889 while (--nr > 0) in find_evsel()
2896 evlist__for_each_entry(evlist, pos) { in find_evsel()
2898 if (full_name && evsel__name_is(pos, event_name)) in find_evsel()
2899 return pos; in find_evsel()
2901 if (!full_name && strstr(pos->name, event_name)) { in find_evsel()
2904 event_name, evsel->name, pos->name); in find_evsel()
2907 evsel = pos; in find_evsel()
2923 return -ENOMEM; in __dynamic_dimension__add()
2925 hde->raw_trace = raw_trace; in __dynamic_dimension__add()
2927 perf_hpp__register_sort_field(&hde->hpp); in __dynamic_dimension__add()
2936 field = evsel->tp_format->format.fields; in add_evsel_fields()
2942 field = field->next; in add_evsel_fields()
2954 if (evsel->core.attr.type != PERF_TYPE_TRACEPOINT) in add_all_dynamic_fields()
2967 int ret = -ESRCH; in add_all_matching_fields()
2972 if (evsel->core.attr.type != PERF_TYPE_TRACEPOINT) in add_all_matching_fields()
2975 field = tep_find_any_field(evsel->tp_format, field_name); in add_all_matching_fields()
2996 return -ENOENT; in add_dynamic_entry()
3000 return -ENOMEM; in add_dynamic_entry()
3003 ret = -EINVAL; in add_dynamic_entry()
3010 ret = -EINVAL; in add_dynamic_entry()
3028 if (evsel->core.attr.type == PERF_TYPE_TRACEPOINT) { in add_dynamic_entry()
3030 ret = -ENOTSUP; in add_dynamic_entry()
3043 ret = -ENOENT; in add_dynamic_entry()
3047 if (evsel->core.attr.type != PERF_TYPE_TRACEPOINT) { in add_dynamic_entry()
3049 ret = -EINVAL; in add_dynamic_entry()
3057 struct tep_format_field *field = tep_find_any_field(evsel->tp_format, field_name); in add_dynamic_entry()
3062 return -ENOENT; in add_dynamic_entry()
3081 if (sd->taken) in __sort_dimension__add()
3085 return -1; in __sort_dimension__add()
3087 if (sd->entry->se_collapse) in __sort_dimension__add()
3088 list->need_collapse = 1; in __sort_dimension__add()
3090 sd->taken = 1; in __sort_dimension__add()
3101 if (hd->taken) in __hpp_dimension__add()
3106 return -1; in __hpp_dimension__add()
3108 hd->taken = 1; in __hpp_dimension__add()
3116 if (sd->taken) in __sort_dimension__add_output()
3120 return -1; in __sort_dimension__add_output()
3122 sd->taken = 1; in __sort_dimension__add_output()
3131 if (hd->taken) in __hpp_dimension__add_output()
3136 return -1; in __hpp_dimension__add_output()
3138 hd->taken = 1; in __hpp_dimension__add_output()
3171 if (!sd->name || strncasecmp(tok, sd->name, strlen(tok))) in sort_dimension__add()
3175 if (sd->name && !strcmp(dynamic_headers[j], sd->name)) in sort_dimension__add()
3179 if (sd->entry == &sort_parent) { in sort_dimension__add()
3186 return -EINVAL; in sort_dimension__add()
3188 list->parent = 1; in sort_dimension__add()
3189 } else if (sd->entry == &sort_sym) { in sort_dimension__add()
3190 list->sym = 1; in sort_dimension__add()
3198 sd->entry->se_collapse = sort__sym_sort; in sort_dimension__add()
3200 } else if (sd->entry == &sort_dso) { in sort_dimension__add()
3201 list->dso = 1; in sort_dimension__add()
3202 } else if (sd->entry == &sort_socket) { in sort_dimension__add()
3203 list->socket = 1; in sort_dimension__add()
3204 } else if (sd->entry == &sort_thread) { in sort_dimension__add()
3205 list->thread = 1; in sort_dimension__add()
3206 } else if (sd->entry == &sort_comm) { in sort_dimension__add()
3207 list->comm = 1; in sort_dimension__add()
3216 if (strncasecmp(tok, hd->name, strlen(tok))) in sort_dimension__add()
3225 if (!sd->name || strncasecmp(tok, sd->name, strlen(tok))) in sort_dimension__add()
3229 return -EINVAL; in sort_dimension__add()
3231 if (sd->entry == &sort_sym_from || sd->entry == &sort_sym_to) in sort_dimension__add()
3232 list->sym = 1; in sort_dimension__add()
3241 if (!sd->name || strncasecmp(tok, sd->name, strlen(tok))) in sort_dimension__add()
3245 return -EINVAL; in sort_dimension__add()
3247 if (sd->entry == &sort_mem_dcacheline && cacheline_size() == 0) in sort_dimension__add()
3248 return -EINVAL; in sort_dimension__add()
3250 if (sd->entry == &sort_mem_daddr_sym) in sort_dimension__add()
3251 list->sym = 1; in sort_dimension__add()
3260 return -ESRCH; in sort_dimension__add()
3292 if (ret == -EINVAL) { in setup_sort_list()
3294 …ui__error("The \"dcacheline\" --sort key needs to know the cacheline size and it couldn't be deter… in setup_sort_list()
3296 ui__error("Invalid --sort key: `%s'", tok); in setup_sort_list()
3298 } else if (ret == -ESRCH) { in setup_sort_list()
3299 ui__error("Unknown --sort key: `%s'", tok); in setup_sort_list()
3329 if (evsel->core.attr.type != PERF_TYPE_TRACEPOINT) { in get_default_sort_order()
3349 * Append '+'-prefixed sort order to the default sort in setup_sort_order()
3356 ui__error("Invalid --sort key: `+'"); in setup_sort_order()
3357 return -EINVAL; in setup_sort_order()
3366 pr_err("Not enough memory to set up --sort"); in setup_sort_order()
3367 return -ENOMEM; in setup_sort_order()
3431 return -ENOMEM; in __setup_sorting()
3441 return -ENOMEM; in __setup_sorting()
3461 if (hse->se->se_width_idx == idx) { in perf_hpp__set_elide()
3462 fmt->elide = elide; in perf_hpp__set_elide()
3473 strlist__entry(list, 0)->s); in __get_elide()
3525 fmt->elide = get_elide(hse->se->se_width_idx, output); in sort__setup_elide()
3536 if (!fmt->elide) in sort__setup_elide()
3544 fmt->elide = false; in sort__setup_elide()
3555 if (!sd->name || strncasecmp(tok, sd->name, strlen(tok))) in output_field_add()
3564 if (strncasecmp(tok, hd->name, strlen(tok))) in output_field_add()
3573 if (!sd->name || strncasecmp(tok, sd->name, strlen(tok))) in output_field_add()
3577 return -EINVAL; in output_field_add()
3585 if (!sd->name || strncasecmp(tok, sd->name, strlen(tok))) in output_field_add()
3589 return -EINVAL; in output_field_add()
3594 return -ESRCH; in output_field_add()
3605 if (ret == -EINVAL) { in setup_output_list()
3606 ui__error("Invalid --fields key: `%s'", tok); in setup_output_list()
3608 } else if (ret == -ESRCH) { in setup_output_list()
3609 ui__error("Unknown --fields key: `%s'", tok); in setup_output_list()
3642 int ret = -EINVAL; in __setup_output_field()
3650 return -ENOMEM; in __setup_output_field()
3657 ui__error("Invalid --fields key: `+'"); in __setup_output_field()
3677 err = sort_dimension__add(&perf_hpp_list, "parent", evlist, -1); in setup_sorting()
3699 /* setup hists-specific output fields */ in setup_sorting()
3701 return -1; in setup_sorting()