[PATCH 3/6] perf header: Use pre-processed session env when printing

2012-09-24 Thread Namhyung Kim
>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

2012-09-24 Thread Namhyung Kim
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 =