[PATCH 3/6] perf header: Use pre-processed session env when printing
>From now on each feature information is processed and saved in perf header so that it can be used for printing. The event desc and branch stack features are not touched since they're not saved. Cc: Stephane Eranian Cc: Robert Richter Signed-off-by: Namhyung Kim --- tools/perf/util/header.c | 207 +++ 1 file changed, 66 insertions(+), 141 deletions(-) diff --git a/tools/perf/util/header.c b/tools/perf/util/header.c index d74b58d4105d..b2929d7a3d4e 100644 --- a/tools/perf/util/header.c +++ b/tools/perf/util/header.c @@ -1103,118 +1103,80 @@ static int write_branch_stack(int fd __maybe_unused, return 0; } -static void print_hostname(struct perf_header *ph, int fd, FILE *fp) +static void print_hostname(struct perf_header *ph, int fd __maybe_unused, + FILE *fp) { - char *str = do_read_string(fd, ph); - fprintf(fp, "# hostname : %s\n", str); - free(str); + fprintf(fp, "# hostname : %s\n", ph->env.hostname); } -static void print_osrelease(struct perf_header *ph, int fd, FILE *fp) +static void print_osrelease(struct perf_header *ph, int fd __maybe_unused, + FILE *fp) { - char *str = do_read_string(fd, ph); - fprintf(fp, "# os release : %s\n", str); - free(str); + fprintf(fp, "# os release : %s\n", ph->env.os_release); } -static void print_arch(struct perf_header *ph, int fd, FILE *fp) +static void print_arch(struct perf_header *ph, int fd __maybe_unused, FILE *fp) { - char *str = do_read_string(fd, ph); - fprintf(fp, "# arch : %s\n", str); - free(str); + fprintf(fp, "# arch : %s\n", ph->env.arch); } -static void print_cpudesc(struct perf_header *ph, int fd, FILE *fp) +static void print_cpudesc(struct perf_header *ph, int fd __maybe_unused, + FILE *fp) { - char *str = do_read_string(fd, ph); - fprintf(fp, "# cpudesc : %s\n", str); - free(str); + fprintf(fp, "# cpudesc : %s\n", ph->env.cpu_desc); } -static void print_nrcpus(struct perf_header *ph, int fd, FILE *fp) +static void print_nrcpus(struct perf_header *ph, int fd __maybe_unused, +FILE *fp) { - ssize_t ret; - u32 nr; - - ret = read(fd, , sizeof(nr)); - if (ret != (ssize_t)sizeof(nr)) - nr = -1; /* interpreted as error */ - - if (ph->needs_swap) - nr = bswap_32(nr); - - fprintf(fp, "# nrcpus online : %u\n", nr); - - ret = read(fd, , sizeof(nr)); - if (ret != (ssize_t)sizeof(nr)) - nr = -1; /* interpreted as error */ - - if (ph->needs_swap) - nr = bswap_32(nr); - - fprintf(fp, "# nrcpus avail : %u\n", nr); + fprintf(fp, "# nrcpus online : %u\n", ph->env.nr_cpus_online); + fprintf(fp, "# nrcpus avail : %u\n", ph->env.nr_cpus_avail); } -static void print_version(struct perf_header *ph, int fd, FILE *fp) +static void print_version(struct perf_header *ph, int fd __maybe_unused, + FILE *fp) { - char *str = do_read_string(fd, ph); - fprintf(fp, "# perf version : %s\n", str); - free(str); + fprintf(fp, "# perf version : %s\n", ph->env.version); } -static void print_cmdline(struct perf_header *ph, int fd, FILE *fp) +static void print_cmdline(struct perf_header *ph, int fd __maybe_unused, + FILE *fp) { - ssize_t ret; + int nr, i; char *str; - u32 nr, i; - - ret = read(fd, , sizeof(nr)); - if (ret != (ssize_t)sizeof(nr)) - return; - if (ph->needs_swap) - nr = bswap_32(nr); + nr = ph->env.nr_cmdline; + str = ph->env.cmdline; fprintf(fp, "# cmdline : "); for (i = 0; i < nr; i++) { - str = do_read_string(fd, ph); fprintf(fp, "%s ", str); - free(str); + str += strlen(str) + 1; } fputc('\n', fp); } -static void print_cpu_topology(struct perf_header *ph, int fd, FILE *fp) +static void print_cpu_topology(struct perf_header *ph, int fd __maybe_unused, + FILE *fp) { - ssize_t ret; - u32 nr, i; + int nr, i; char *str; - ret = read(fd, , sizeof(nr)); - if (ret != (ssize_t)sizeof(nr)) - return; - - if (ph->needs_swap) - nr = bswap_32(nr); + nr = ph->env.nr_sibling_cores; + str = ph->env.sibling_cores; for (i = 0; i < nr; i++) { - str = do_read_string(fd, ph); fprintf(fp, "# sibling cores : %s\n", str); - free(str); + str += strlen(str) + 1; } - ret = read(fd, , sizeof(nr)); - if (ret != (ssize_t)sizeof(nr)) - return; - - if (ph->needs_swap) - nr = bswap_32(nr); + nr =
[PATCH 3/6] perf header: Use pre-processed session env when printing
From now on each feature information is processed and saved in perf header so that it can be used for printing. The event desc and branch stack features are not touched since they're not saved. Cc: Stephane Eranian eran...@google.com Cc: Robert Richter robert.rich...@amd.com Signed-off-by: Namhyung Kim namhy...@kernel.org --- tools/perf/util/header.c | 207 +++ 1 file changed, 66 insertions(+), 141 deletions(-) diff --git a/tools/perf/util/header.c b/tools/perf/util/header.c index d74b58d4105d..b2929d7a3d4e 100644 --- a/tools/perf/util/header.c +++ b/tools/perf/util/header.c @@ -1103,118 +1103,80 @@ static int write_branch_stack(int fd __maybe_unused, return 0; } -static void print_hostname(struct perf_header *ph, int fd, FILE *fp) +static void print_hostname(struct perf_header *ph, int fd __maybe_unused, + FILE *fp) { - char *str = do_read_string(fd, ph); - fprintf(fp, # hostname : %s\n, str); - free(str); + fprintf(fp, # hostname : %s\n, ph-env.hostname); } -static void print_osrelease(struct perf_header *ph, int fd, FILE *fp) +static void print_osrelease(struct perf_header *ph, int fd __maybe_unused, + FILE *fp) { - char *str = do_read_string(fd, ph); - fprintf(fp, # os release : %s\n, str); - free(str); + fprintf(fp, # os release : %s\n, ph-env.os_release); } -static void print_arch(struct perf_header *ph, int fd, FILE *fp) +static void print_arch(struct perf_header *ph, int fd __maybe_unused, FILE *fp) { - char *str = do_read_string(fd, ph); - fprintf(fp, # arch : %s\n, str); - free(str); + fprintf(fp, # arch : %s\n, ph-env.arch); } -static void print_cpudesc(struct perf_header *ph, int fd, FILE *fp) +static void print_cpudesc(struct perf_header *ph, int fd __maybe_unused, + FILE *fp) { - char *str = do_read_string(fd, ph); - fprintf(fp, # cpudesc : %s\n, str); - free(str); + fprintf(fp, # cpudesc : %s\n, ph-env.cpu_desc); } -static void print_nrcpus(struct perf_header *ph, int fd, FILE *fp) +static void print_nrcpus(struct perf_header *ph, int fd __maybe_unused, +FILE *fp) { - ssize_t ret; - u32 nr; - - ret = read(fd, nr, sizeof(nr)); - if (ret != (ssize_t)sizeof(nr)) - nr = -1; /* interpreted as error */ - - if (ph-needs_swap) - nr = bswap_32(nr); - - fprintf(fp, # nrcpus online : %u\n, nr); - - ret = read(fd, nr, sizeof(nr)); - if (ret != (ssize_t)sizeof(nr)) - nr = -1; /* interpreted as error */ - - if (ph-needs_swap) - nr = bswap_32(nr); - - fprintf(fp, # nrcpus avail : %u\n, nr); + fprintf(fp, # nrcpus online : %u\n, ph-env.nr_cpus_online); + fprintf(fp, # nrcpus avail : %u\n, ph-env.nr_cpus_avail); } -static void print_version(struct perf_header *ph, int fd, FILE *fp) +static void print_version(struct perf_header *ph, int fd __maybe_unused, + FILE *fp) { - char *str = do_read_string(fd, ph); - fprintf(fp, # perf version : %s\n, str); - free(str); + fprintf(fp, # perf version : %s\n, ph-env.version); } -static void print_cmdline(struct perf_header *ph, int fd, FILE *fp) +static void print_cmdline(struct perf_header *ph, int fd __maybe_unused, + FILE *fp) { - ssize_t ret; + int nr, i; char *str; - u32 nr, i; - - ret = read(fd, nr, sizeof(nr)); - if (ret != (ssize_t)sizeof(nr)) - return; - if (ph-needs_swap) - nr = bswap_32(nr); + nr = ph-env.nr_cmdline; + str = ph-env.cmdline; fprintf(fp, # cmdline : ); for (i = 0; i nr; i++) { - str = do_read_string(fd, ph); fprintf(fp, %s , str); - free(str); + str += strlen(str) + 1; } fputc('\n', fp); } -static void print_cpu_topology(struct perf_header *ph, int fd, FILE *fp) +static void print_cpu_topology(struct perf_header *ph, int fd __maybe_unused, + FILE *fp) { - ssize_t ret; - u32 nr, i; + int nr, i; char *str; - ret = read(fd, nr, sizeof(nr)); - if (ret != (ssize_t)sizeof(nr)) - return; - - if (ph-needs_swap) - nr = bswap_32(nr); + nr = ph-env.nr_sibling_cores; + str = ph-env.sibling_cores; for (i = 0; i nr; i++) { - str = do_read_string(fd, ph); fprintf(fp, # sibling cores : %s\n, str); - free(str); + str += strlen(str) + 1; } - ret = read(fd, nr, sizeof(nr)); - if (ret != (ssize_t)sizeof(nr)) - return; - - if (ph-needs_swap) - nr = bswap_32(nr); + nr =