]> git.karo-electronics.de Git - karo-tx-linux.git/commitdiff
perf record: Make feature initialization generic
authorRobert Richter <robert.richter@amd.com>
Fri, 9 Dec 2011 14:08:36 +0000 (15:08 +0100)
committerRobert Richter <robert.richter@amd.com>
Thu, 15 Dec 2011 13:31:29 +0000 (14:31 +0100)
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.

Signed-off-by: Robert Richter <robert.richter@amd.com>
tools/perf/builtin-record.c
tools/perf/util/header.h

index ec230e2160793d805e2ce9a7a91f72e701bbfd65..4684e7f1b199a8d0cd4a562c79caa1e5ad137ca5 100644 (file)
@@ -375,7 +375,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;
@@ -442,8 +442,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);
@@ -451,22 +457,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,