|
24 | 24 | #include "strbuf.h" |
25 | 25 | #include "mem-events.h" |
26 | 26 | #include "annotate.h" |
| 27 | +#include "annotate-data.h" |
27 | 28 | #include "event.h" |
28 | 29 | #include "time-utils.h" |
29 | 30 | #include "cgroup.h" |
@@ -2094,7 +2095,7 @@ struct sort_entry sort_dso_size = { |
2094 | 2095 | .se_width_idx = HISTC_DSO_SIZE, |
2095 | 2096 | }; |
2096 | 2097 |
|
2097 | | -/* --sort dso_size */ |
| 2098 | +/* --sort addr */ |
2098 | 2099 |
|
2099 | 2100 | static int64_t |
2100 | 2101 | sort__addr_cmp(struct hist_entry *left, struct hist_entry *right) |
@@ -2131,6 +2132,69 @@ struct sort_entry sort_addr = { |
2131 | 2132 | .se_width_idx = HISTC_ADDR, |
2132 | 2133 | }; |
2133 | 2134 |
|
| 2135 | +/* --sort type */ |
| 2136 | + |
| 2137 | +struct annotated_data_type unknown_type = { |
| 2138 | + .type_name = (char *)"(unknown)", |
| 2139 | +}; |
| 2140 | + |
| 2141 | +static int64_t |
| 2142 | +sort__type_cmp(struct hist_entry *left, struct hist_entry *right) |
| 2143 | +{ |
| 2144 | + return sort__addr_cmp(left, right); |
| 2145 | +} |
| 2146 | + |
| 2147 | +static void sort__type_init(struct hist_entry *he) |
| 2148 | +{ |
| 2149 | + if (he->mem_type) |
| 2150 | + return; |
| 2151 | + |
| 2152 | + he->mem_type = hist_entry__get_data_type(he); |
| 2153 | + if (he->mem_type == NULL) |
| 2154 | + he->mem_type = &unknown_type; |
| 2155 | +} |
| 2156 | + |
| 2157 | +static int64_t |
| 2158 | +sort__type_collapse(struct hist_entry *left, struct hist_entry *right) |
| 2159 | +{ |
| 2160 | + struct annotated_data_type *left_type = left->mem_type; |
| 2161 | + struct annotated_data_type *right_type = right->mem_type; |
| 2162 | + |
| 2163 | + if (!left_type) { |
| 2164 | + sort__type_init(left); |
| 2165 | + left_type = left->mem_type; |
| 2166 | + } |
| 2167 | + |
| 2168 | + if (!right_type) { |
| 2169 | + sort__type_init(right); |
| 2170 | + right_type = right->mem_type; |
| 2171 | + } |
| 2172 | + |
| 2173 | + return strcmp(left_type->type_name, right_type->type_name); |
| 2174 | +} |
| 2175 | + |
| 2176 | +static int64_t |
| 2177 | +sort__type_sort(struct hist_entry *left, struct hist_entry *right) |
| 2178 | +{ |
| 2179 | + return sort__type_collapse(left, right); |
| 2180 | +} |
| 2181 | + |
| 2182 | +static int hist_entry__type_snprintf(struct hist_entry *he, char *bf, |
| 2183 | + size_t size, unsigned int width) |
| 2184 | +{ |
| 2185 | + return repsep_snprintf(bf, size, "%-*s", width, he->mem_type->type_name); |
| 2186 | +} |
| 2187 | + |
| 2188 | +struct sort_entry sort_type = { |
| 2189 | + .se_header = "Data Type", |
| 2190 | + .se_cmp = sort__type_cmp, |
| 2191 | + .se_collapse = sort__type_collapse, |
| 2192 | + .se_sort = sort__type_sort, |
| 2193 | + .se_init = sort__type_init, |
| 2194 | + .se_snprintf = hist_entry__type_snprintf, |
| 2195 | + .se_width_idx = HISTC_TYPE, |
| 2196 | +}; |
| 2197 | + |
2134 | 2198 |
|
2135 | 2199 | struct sort_dimension { |
2136 | 2200 | const char *name; |
@@ -2185,7 +2249,8 @@ static struct sort_dimension common_sort_dimensions[] = { |
2185 | 2249 | DIM(SORT_ADDR, "addr", sort_addr), |
2186 | 2250 | DIM(SORT_LOCAL_RETIRE_LAT, "local_retire_lat", sort_local_p_stage_cyc), |
2187 | 2251 | DIM(SORT_GLOBAL_RETIRE_LAT, "retire_lat", sort_global_p_stage_cyc), |
2188 | | - DIM(SORT_SIMD, "simd", sort_simd) |
| 2252 | + DIM(SORT_SIMD, "simd", sort_simd), |
| 2253 | + DIM(SORT_ANNOTATE_DATA_TYPE, "type", sort_type), |
2189 | 2254 | }; |
2190 | 2255 |
|
2191 | 2256 | #undef DIM |
|
0 commit comments