Lines Matching full:values
9 #include "values.h"
13 int perf_read_values_init(struct perf_read_values *values) in perf_read_values_init() argument
15 values->threads_max = 16; in perf_read_values_init()
16 values->pid = malloc(values->threads_max * sizeof(*values->pid)); in perf_read_values_init()
17 values->tid = malloc(values->threads_max * sizeof(*values->tid)); in perf_read_values_init()
18 values->value = zalloc(values->threads_max * sizeof(*values->value)); in perf_read_values_init()
19 if (!values->pid || !values->tid || !values->value) { in perf_read_values_init()
23 values->threads = 0; in perf_read_values_init()
25 values->counters_max = 16; in perf_read_values_init()
26 values->counters = malloc(values->counters_max * sizeof(*values->counters)); in perf_read_values_init()
27 if (!values->counters) { in perf_read_values_init()
31 values->num_counters = 0; in perf_read_values_init()
36 zfree(&values->counters); in perf_read_values_init()
38 zfree(&values->pid); in perf_read_values_init()
39 zfree(&values->tid); in perf_read_values_init()
40 zfree(&values->value); in perf_read_values_init()
44 void perf_read_values_destroy(struct perf_read_values *values) in perf_read_values_destroy() argument
48 if (!values->threads_max || !values->counters_max) in perf_read_values_destroy()
51 for (i = 0; i < values->threads; i++) in perf_read_values_destroy()
52 zfree(&values->value[i]); in perf_read_values_destroy()
53 zfree(&values->value); in perf_read_values_destroy()
54 zfree(&values->pid); in perf_read_values_destroy()
55 zfree(&values->tid); in perf_read_values_destroy()
56 zfree(&values->counters); in perf_read_values_destroy()
59 static int perf_read_values__enlarge_threads(struct perf_read_values *values) in perf_read_values__enlarge_threads() argument
61 int nthreads_max = values->threads_max * 2; in perf_read_values__enlarge_threads()
62 void *npid = realloc(values->pid, nthreads_max * sizeof(*values->pid)), in perf_read_values__enlarge_threads()
63 *ntid = realloc(values->tid, nthreads_max * sizeof(*values->tid)), in perf_read_values__enlarge_threads()
64 *nvalue = realloc(values->value, nthreads_max * sizeof(*values->value)); in perf_read_values__enlarge_threads()
69 values->threads_max = nthreads_max; in perf_read_values__enlarge_threads()
70 values->pid = npid; in perf_read_values__enlarge_threads()
71 values->tid = ntid; in perf_read_values__enlarge_threads()
72 values->value = nvalue; in perf_read_values__enlarge_threads()
82 static int perf_read_values__findnew_thread(struct perf_read_values *values, in perf_read_values__findnew_thread() argument
87 for (i = 0; i < values->threads; i++) in perf_read_values__findnew_thread()
88 if (values->pid[i] == pid && values->tid[i] == tid) in perf_read_values__findnew_thread()
91 if (values->threads == values->threads_max) { in perf_read_values__findnew_thread()
92 i = perf_read_values__enlarge_threads(values); in perf_read_values__findnew_thread()
97 i = values->threads; in perf_read_values__findnew_thread()
99 values->value[i] = zalloc(values->counters_max * sizeof(**values->value)); in perf_read_values__findnew_thread()
100 if (!values->value[i]) { in perf_read_values__findnew_thread()
104 values->pid[i] = pid; in perf_read_values__findnew_thread()
105 values->tid[i] = tid; in perf_read_values__findnew_thread()
106 values->threads = i + 1; in perf_read_values__findnew_thread()
111 static int perf_read_values__enlarge_counters(struct perf_read_values *values) in perf_read_values__enlarge_counters() argument
113 int counters_max = values->counters_max * 2; in perf_read_values__enlarge_counters()
114 struct evsel **new_counters = realloc(values->counters, in perf_read_values__enlarge_counters()
115 counters_max * sizeof(*values->counters)); in perf_read_values__enlarge_counters()
122 for (int i = 0; i < values->threads; i++) { in perf_read_values__enlarge_counters()
123 u64 *value = realloc(values->value[i], counters_max * sizeof(**values->value)); in perf_read_values__enlarge_counters()
126 pr_debug("failed to enlarge read_values ->values array"); in perf_read_values__enlarge_counters()
130 for (int j = values->counters_max; j < counters_max; j++) in perf_read_values__enlarge_counters()
133 values->value[i] = value; in perf_read_values__enlarge_counters()
136 values->counters_max = counters_max; in perf_read_values__enlarge_counters()
137 values->counters = new_counters; in perf_read_values__enlarge_counters()
146 static int perf_read_values__findnew_counter(struct perf_read_values *values, in perf_read_values__findnew_counter() argument
151 for (i = 0; i < values->num_counters; i++) in perf_read_values__findnew_counter()
152 if (values->counters[i] == evsel) in perf_read_values__findnew_counter()
155 if (values->num_counters == values->counters_max) { in perf_read_values__findnew_counter()
156 int err = perf_read_values__enlarge_counters(values); in perf_read_values__findnew_counter()
162 i = values->num_counters++; in perf_read_values__findnew_counter()
163 values->counters[i] = evsel; in perf_read_values__findnew_counter()
168 int perf_read_values_add_value(struct perf_read_values *values, in perf_read_values_add_value() argument
174 tindex = perf_read_values__findnew_thread(values, pid, tid); in perf_read_values_add_value()
177 cindex = perf_read_values__findnew_counter(values, evsel); in perf_read_values_add_value()
181 values->value[tindex][cindex] += value; in perf_read_values_add_value()
186 struct perf_read_values *values) in perf_read_values__display_pretty() argument
192 counterwidth = malloc(values->num_counters * sizeof(*counterwidth)); in perf_read_values__display_pretty()
199 for (j = 0; j < values->num_counters; j++) in perf_read_values__display_pretty()
200 counterwidth[j] = strlen(evsel__name(values->counters[j])); in perf_read_values__display_pretty()
201 for (i = 0; i < values->threads; i++) { in perf_read_values__display_pretty()
204 width = snprintf(NULL, 0, "%d", values->pid[i]); in perf_read_values__display_pretty()
207 width = snprintf(NULL, 0, "%d", values->tid[i]); in perf_read_values__display_pretty()
210 for (j = 0; j < values->num_counters; j++) { in perf_read_values__display_pretty()
211 width = snprintf(NULL, 0, "%" PRIu64, values->value[i][j]); in perf_read_values__display_pretty()
218 for (j = 0; j < values->num_counters; j++) in perf_read_values__display_pretty()
219 fprintf(fp, " %*s", counterwidth[j], evsel__name(values->counters[j])); in perf_read_values__display_pretty()
222 for (i = 0; i < values->threads; i++) { in perf_read_values__display_pretty()
223 fprintf(fp, " %*d %*d", pidwidth, values->pid[i], in perf_read_values__display_pretty()
224 tidwidth, values->tid[i]); in perf_read_values__display_pretty()
225 for (j = 0; j < values->num_counters; j++) in perf_read_values__display_pretty()
227 counterwidth[j], values->value[i][j]); in perf_read_values__display_pretty()
234 struct perf_read_values *values) in perf_read_values__display_raw() argument
245 for (i = 0; i < values->threads; i++) { in perf_read_values__display_raw()
246 width = snprintf(NULL, 0, "%d", values->pid[i]); in perf_read_values__display_raw()
249 width = snprintf(NULL, 0, "%d", values->tid[i]); in perf_read_values__display_raw()
253 for (j = 0; j < values->num_counters; j++) { in perf_read_values__display_raw()
254 width = strlen(evsel__name(values->counters[j])); in perf_read_values__display_raw()
257 width = snprintf(NULL, 0, "%x", values->counters[j]->core.idx); in perf_read_values__display_raw()
261 for (i = 0; i < values->threads; i++) { in perf_read_values__display_raw()
262 for (j = 0; j < values->num_counters; j++) { in perf_read_values__display_raw()
263 width = snprintf(NULL, 0, "%" PRIu64, values->value[i][j]); in perf_read_values__display_raw()
273 for (i = 0; i < values->threads; i++) in perf_read_values__display_raw()
274 for (j = 0; j < values->num_counters; j++) in perf_read_values__display_raw()
276 pidwidth, values->pid[i], in perf_read_values__display_raw()
277 tidwidth, values->tid[i], in perf_read_values__display_raw()
278 namewidth, evsel__name(values->counters[j]), in perf_read_values__display_raw()
279 rawwidth, values->counters[j]->core.idx, in perf_read_values__display_raw()
280 countwidth, values->value[i][j]); in perf_read_values__display_raw()
283 void perf_read_values_display(FILE *fp, struct perf_read_values *values, int raw) in perf_read_values_display() argument
286 perf_read_values__display_raw(fp, values); in perf_read_values_display()
288 perf_read_values__display_pretty(fp, values); in perf_read_values_display()