perf tools: Introduce stat perf.data header feature
authorJiri Olsa <jolsa@kernel.org>
Sun, 25 Oct 2015 14:51:43 +0000 (15:51 +0100)
committerArnaldo Carvalho de Melo <acme@redhat.com>
Thu, 17 Dec 2015 18:15:14 +0000 (15:15 -0300)
Introducing the 'stat' feature to mark a perf.data as created by  the
'perf stat record' command. It contains no data.

It's needed so that the report tools (report/script) can differentiate
sampling data from counting data, because they need to be treated in a
different way.

In the future it might be used to store the version of the stat storage
system used.

Signed-off-by: Jiri Olsa <jolsa@kernel.org>
Tested-by: Kan Liang <kan.liang@intel.com>
Cc: David Ahern <dsahern@gmail.com>
Cc: Namhyung Kim <namhyung@kernel.org>
Cc: Peter Zijlstra <a.p.zijlstra@chello.nl>
Link: http://lkml.kernel.org/r/1445784728-21732-28-git-send-email-jolsa@kernel.org
Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>
tools/perf/builtin-record.c
tools/perf/util/header.c
tools/perf/util/header.h

index 1435ef6265b6d4fe58ffd2264e60497fd23bcd70..9c5cdc2c44714a937cb04e09a523373773b3a4e8 100644 (file)
@@ -452,6 +452,8 @@ static void record__init_features(struct record *rec)
 
        if (!rec->opts.full_auxtrace)
                perf_header__clear_feat(&session->header, HEADER_AUXTRACE);
+
+       perf_header__clear_feat(&session->header, HEADER_STAT);
 }
 
 static volatile int workload_exec_errno;
index 49676c14c8ae33380ab6c475e8408b09bafa0cf5..f50b7235ecb6558d167a475bf4199e8b05f52143 100644 (file)
@@ -868,6 +868,13 @@ static int write_auxtrace(int fd, struct perf_header *h,
        return err;
 }
 
+static int write_stat(int fd __maybe_unused,
+                     struct perf_header *h __maybe_unused,
+                     struct perf_evlist *evlist __maybe_unused)
+{
+       return 0;
+}
+
 static void print_hostname(struct perf_header *ph, int fd __maybe_unused,
                           FILE *fp)
 {
@@ -1159,6 +1166,12 @@ static void print_auxtrace(struct perf_header *ph __maybe_unused,
        fprintf(fp, "# contains AUX area data (e.g. instruction trace)\n");
 }
 
+static void print_stat(struct perf_header *ph __maybe_unused,
+                      int fd __maybe_unused, FILE *fp)
+{
+       fprintf(fp, "# contains stat data\n");
+}
+
 static void print_pmu_mappings(struct perf_header *ph, int fd __maybe_unused,
                               FILE *fp)
 {
@@ -1948,6 +1961,7 @@ static const struct feature_ops feat_ops[HEADER_LAST_FEATURE] = {
        FEAT_OPP(HEADER_PMU_MAPPINGS,   pmu_mappings),
        FEAT_OPP(HEADER_GROUP_DESC,     group_desc),
        FEAT_OPP(HEADER_AUXTRACE,       auxtrace),
+       FEAT_OPA(HEADER_STAT,           stat),
 };
 
 struct header_print_data {
index 710deecf8f80cb4ae393db4127379202bed73c05..cff9892452ee393764726a12895ad95d36f766fe 100644 (file)
@@ -31,6 +31,7 @@ enum {
        HEADER_PMU_MAPPINGS,
        HEADER_GROUP_DESC,
        HEADER_AUXTRACE,
+       HEADER_STAT,
        HEADER_LAST_FEATURE,
        HEADER_FEAT_BITS        = 256,
 };