1e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng#include <stdlib.h> 2e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng 3e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng#include "util.h" 4e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng#include "values.h" 5e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng 6e6817ec1d8ab31fc7b01906e305f848542df6413Ben Chengvoid perf_read_values_init(struct perf_read_values *values) 7e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng{ 8e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng values->threads_max = 16; 9e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng values->pid = malloc(values->threads_max * sizeof(*values->pid)); 10e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng values->tid = malloc(values->threads_max * sizeof(*values->tid)); 11e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng values->value = malloc(values->threads_max * sizeof(*values->value)); 12e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng if (!values->pid || !values->tid || !values->value) 13e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng die("failed to allocate read_values threads arrays"); 14e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng values->threads = 0; 15e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng 16e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng values->counters_max = 16; 17e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng values->counterrawid = malloc(values->counters_max 18e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng * sizeof(*values->counterrawid)); 19e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng values->countername = malloc(values->counters_max 20e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng * sizeof(*values->countername)); 21e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng if (!values->counterrawid || !values->countername) 22e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng die("failed to allocate read_values counters arrays"); 23e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng values->counters = 0; 24e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng} 25e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng 26e6817ec1d8ab31fc7b01906e305f848542df6413Ben Chengvoid perf_read_values_destroy(struct perf_read_values *values) 27e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng{ 28e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng int i; 29e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng 30e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng if (!values->threads_max || !values->counters_max) 31e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng return; 32e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng 33e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng for (i = 0; i < values->threads; i++) 34e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng free(values->value[i]); 35e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng free(values->pid); 36e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng free(values->tid); 37e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng free(values->counterrawid); 38e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng for (i = 0; i < values->counters; i++) 39e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng free(values->countername[i]); 40e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng free(values->countername); 41e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng} 42e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng 43e6817ec1d8ab31fc7b01906e305f848542df6413Ben Chengstatic void perf_read_values__enlarge_threads(struct perf_read_values *values) 44e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng{ 45e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng values->threads_max *= 2; 46e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng values->pid = realloc(values->pid, 47e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng values->threads_max * sizeof(*values->pid)); 48e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng values->tid = realloc(values->tid, 49e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng values->threads_max * sizeof(*values->tid)); 50e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng values->value = realloc(values->value, 51e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng values->threads_max * sizeof(*values->value)); 52e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng if (!values->pid || !values->tid || !values->value) 53e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng die("failed to enlarge read_values threads arrays"); 54e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng} 55e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng 56e6817ec1d8ab31fc7b01906e305f848542df6413Ben Chengstatic int perf_read_values__findnew_thread(struct perf_read_values *values, 57e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng u32 pid, u32 tid) 58e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng{ 59e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng int i; 60e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng 61e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng for (i = 0; i < values->threads; i++) 62e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng if (values->pid[i] == pid && values->tid[i] == tid) 63e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng return i; 64e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng 65e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng if (values->threads == values->threads_max) 66e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng perf_read_values__enlarge_threads(values); 67e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng 68e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng i = values->threads++; 69e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng values->pid[i] = pid; 70e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng values->tid[i] = tid; 71e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng values->value[i] = malloc(values->counters_max * sizeof(**values->value)); 72e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng if (!values->value[i]) 73e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng die("failed to allocate read_values counters array"); 74e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng 75e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng return i; 76e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng} 77e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng 78e6817ec1d8ab31fc7b01906e305f848542df6413Ben Chengstatic void perf_read_values__enlarge_counters(struct perf_read_values *values) 79e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng{ 80e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng int i; 81e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng 82e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng values->counters_max *= 2; 83e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng values->counterrawid = realloc(values->counterrawid, 84e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng values->counters_max * sizeof(*values->counterrawid)); 85e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng values->countername = realloc(values->countername, 86e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng values->counters_max * sizeof(*values->countername)); 87e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng if (!values->counterrawid || !values->countername) 88e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng die("failed to enlarge read_values counters arrays"); 89e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng 90e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng for (i = 0; i < values->threads; i++) { 91e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng values->value[i] = realloc(values->value[i], 92e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng values->counters_max * sizeof(**values->value)); 93e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng if (!values->value[i]) 94e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng die("failed to enlarge read_values counters arrays"); 95e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng } 96e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng} 97e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng 98e6817ec1d8ab31fc7b01906e305f848542df6413Ben Chengstatic int perf_read_values__findnew_counter(struct perf_read_values *values, 99e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng u64 rawid, const char *name) 100e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng{ 101e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng int i; 102e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng 103e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng for (i = 0; i < values->counters; i++) 104e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng if (values->counterrawid[i] == rawid) 105e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng return i; 106e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng 107e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng if (values->counters == values->counters_max) 108e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng perf_read_values__enlarge_counters(values); 109e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng 110e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng i = values->counters++; 111e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng values->counterrawid[i] = rawid; 112e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng values->countername[i] = strdup(name); 113e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng 114e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng return i; 115e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng} 116e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng 117e6817ec1d8ab31fc7b01906e305f848542df6413Ben Chengvoid perf_read_values_add_value(struct perf_read_values *values, 118e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng u32 pid, u32 tid, 119e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng u64 rawid, const char *name, u64 value) 120e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng{ 121e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng int tindex, cindex; 122e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng 123e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng tindex = perf_read_values__findnew_thread(values, pid, tid); 124e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng cindex = perf_read_values__findnew_counter(values, rawid, name); 125e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng 126e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng values->value[tindex][cindex] = value; 127e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng} 128e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng 129e6817ec1d8ab31fc7b01906e305f848542df6413Ben Chengstatic void perf_read_values__display_pretty(FILE *fp, 130e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng struct perf_read_values *values) 131e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng{ 132e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng int i, j; 133e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng int pidwidth, tidwidth; 134e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng int *counterwidth; 135e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng 136e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng counterwidth = malloc(values->counters * sizeof(*counterwidth)); 137e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng if (!counterwidth) 138e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng die("failed to allocate counterwidth array"); 139e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng tidwidth = 3; 140e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng pidwidth = 3; 141e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng for (j = 0; j < values->counters; j++) 142e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng counterwidth[j] = strlen(values->countername[j]); 143e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng for (i = 0; i < values->threads; i++) { 144e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng int width; 145e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng 146e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng width = snprintf(NULL, 0, "%d", values->pid[i]); 147e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng if (width > pidwidth) 148e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng pidwidth = width; 149e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng width = snprintf(NULL, 0, "%d", values->tid[i]); 150e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng if (width > tidwidth) 151e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng tidwidth = width; 152e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng for (j = 0; j < values->counters; j++) { 153e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng width = snprintf(NULL, 0, "%" PRIu64, values->value[i][j]); 154e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng if (width > counterwidth[j]) 155e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng counterwidth[j] = width; 156e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng } 157e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng } 158e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng 159e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng fprintf(fp, "# %*s %*s", pidwidth, "PID", tidwidth, "TID"); 160e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng for (j = 0; j < values->counters; j++) 161e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng fprintf(fp, " %*s", counterwidth[j], values->countername[j]); 162e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng fprintf(fp, "\n"); 163e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng 164e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng for (i = 0; i < values->threads; i++) { 165e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng fprintf(fp, " %*d %*d", pidwidth, values->pid[i], 166e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng tidwidth, values->tid[i]); 167e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng for (j = 0; j < values->counters; j++) 168e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng fprintf(fp, " %*" PRIu64, 169e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng counterwidth[j], values->value[i][j]); 170e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng fprintf(fp, "\n"); 171e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng } 172e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng free(counterwidth); 173e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng} 174e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng 175e6817ec1d8ab31fc7b01906e305f848542df6413Ben Chengstatic void perf_read_values__display_raw(FILE *fp, 176e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng struct perf_read_values *values) 177e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng{ 178e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng int width, pidwidth, tidwidth, namewidth, rawwidth, countwidth; 179e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng int i, j; 180e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng 181e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng tidwidth = 3; /* TID */ 182e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng pidwidth = 3; /* PID */ 183e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng namewidth = 4; /* "Name" */ 184e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng rawwidth = 3; /* "Raw" */ 185e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng countwidth = 5; /* "Count" */ 186e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng 187e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng for (i = 0; i < values->threads; i++) { 188e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng width = snprintf(NULL, 0, "%d", values->pid[i]); 189e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng if (width > pidwidth) 190e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng pidwidth = width; 191e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng width = snprintf(NULL, 0, "%d", values->tid[i]); 192e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng if (width > tidwidth) 193e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng tidwidth = width; 194e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng } 195e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng for (j = 0; j < values->counters; j++) { 196e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng width = strlen(values->countername[j]); 197e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng if (width > namewidth) 198e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng namewidth = width; 199e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng width = snprintf(NULL, 0, "%" PRIx64, values->counterrawid[j]); 200e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng if (width > rawwidth) 201e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng rawwidth = width; 202e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng } 203e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng for (i = 0; i < values->threads; i++) { 204e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng for (j = 0; j < values->counters; j++) { 205e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng width = snprintf(NULL, 0, "%" PRIu64, values->value[i][j]); 206e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng if (width > countwidth) 207e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng countwidth = width; 208e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng } 209e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng } 210e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng 211e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng fprintf(fp, "# %*s %*s %*s %*s %*s\n", 212e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng pidwidth, "PID", tidwidth, "TID", 213e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng namewidth, "Name", rawwidth, "Raw", 214e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng countwidth, "Count"); 215e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng for (i = 0; i < values->threads; i++) 216e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng for (j = 0; j < values->counters; j++) 217e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng fprintf(fp, " %*d %*d %*s %*" PRIx64 " %*" PRIu64, 218e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng pidwidth, values->pid[i], 219e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng tidwidth, values->tid[i], 220e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng namewidth, values->countername[j], 221e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng rawwidth, values->counterrawid[j], 222e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng countwidth, values->value[i][j]); 223e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng} 224e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng 225e6817ec1d8ab31fc7b01906e305f848542df6413Ben Chengvoid perf_read_values_display(FILE *fp, struct perf_read_values *values, int raw) 226e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng{ 227e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng if (raw) 228e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng perf_read_values__display_raw(fp, values); 229e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng else 230e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng perf_read_values__display_pretty(fp, values); 231e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng} 232