perf record: Make feature initialization generic
authorRobert Richter <robert.richter@amd.com>
Thu, 15 Dec 2011 16:32:40 +0000 (17:32 +0100)
committerArnaldo Carvalho de Melo <acme@redhat.com>
Thu, 2 Feb 2012 19:41:17 +0000 (17:41 -0200)
Loop over all features to enable it instead of explicitly enabling every
single feature. Reducing duplicate code and making it more robust to
later changes e.g. when adding more features.

Cc: Ingo Molnar <mingo@elte.hu>
Link: http://lkml.kernel.org/r/1323966762-8574-3-git-send-email-robert.richter@amd.com
Signed-off-by: Robert Richter <robert.richter@amd.com>
Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>
tools/perf/builtin-record.c
tools/perf/util/header.h

index 32870eef952fa7bdee7f830bdedb55f999cf1df4..f8d9a545dd6ec0b4c0c457173cc1c23d2208d42a 100644 (file)
@@ -386,7 +386,7 @@ static int __cmd_record(struct perf_record *rec, int argc, const char **argv)
 {
        struct stat st;
        int flags;
-       int err, output;
+       int err, output, feat;
        unsigned long waking = 0;
        const bool forks = argc > 0;
        struct machine *machine;
@@ -453,8 +453,14 @@ static int __cmd_record(struct perf_record *rec, int argc, const char **argv)
 
        rec->session = session;
 
-       if (!rec->no_buildid)
-               perf_header__set_feat(&session->header, HEADER_BUILD_ID);
+       for (feat = HEADER_FIRST_FEATURE; feat < HEADER_LAST_FEATURE; feat++)
+               perf_header__set_feat(&session->header, feat);
+
+       if (rec->no_buildid)
+               perf_header__clear_feat(&session->header, HEADER_BUILD_ID);
+
+       if (!have_tracepoints(&evsel_list->entries))
+               perf_header__clear_feat(&session->header, HEADER_TRACE_INFO);
 
        if (!rec->file_new) {
                err = perf_session__read_header(session, output);
@@ -462,22 +468,6 @@ static int __cmd_record(struct perf_record *rec, int argc, const char **argv)
                        goto out_delete_session;
        }
 
-       if (have_tracepoints(&evsel_list->entries))
-               perf_header__set_feat(&session->header, HEADER_TRACE_INFO);
-
-       perf_header__set_feat(&session->header, HEADER_HOSTNAME);
-       perf_header__set_feat(&session->header, HEADER_OSRELEASE);
-       perf_header__set_feat(&session->header, HEADER_ARCH);
-       perf_header__set_feat(&session->header, HEADER_CPUDESC);
-       perf_header__set_feat(&session->header, HEADER_NRCPUS);
-       perf_header__set_feat(&session->header, HEADER_EVENT_DESC);
-       perf_header__set_feat(&session->header, HEADER_CMDLINE);
-       perf_header__set_feat(&session->header, HEADER_VERSION);
-       perf_header__set_feat(&session->header, HEADER_CPU_TOPOLOGY);
-       perf_header__set_feat(&session->header, HEADER_TOTAL_MEM);
-       perf_header__set_feat(&session->header, HEADER_NUMA_TOPOLOGY);
-       perf_header__set_feat(&session->header, HEADER_CPUID);
-
        if (forks) {
                err = perf_evlist__prepare_workload(evsel_list, opts, argv);
                if (err < 0) {
index ac4ec956024e2eb17552860a36b231576701c56d..e68f617d082f5c77083b1fe755aa320b1ba10db2 100644 (file)
@@ -11,6 +11,7 @@
 
 enum {
        HEADER_RESERVED         = 0,    /* always cleared */
+       HEADER_FIRST_FEATURE    = 1,
        HEADER_TRACE_INFO       = 1,
        HEADER_BUILD_ID,