perf inject: Make --strip keep evsels
authorAdrian Hunter <adrian.hunter@intel.com>
Tue, 5 Nov 2019 10:00:57 +0000 (12:00 +0200)
committerArnaldo Carvalho de Melo <acme@redhat.com>
Wed, 6 Nov 2019 18:49:40 +0000 (15:49 -0300)
create_gcov (refer to the autofdo example in tools/perf/Documentation/intel-pt.txt)
now needs the evsels to read the perf.data file. So don't strip them.

Signed-off-by: Adrian Hunter <adrian.hunter@intel.com>
Acked-by: Jiri Olsa <jolsa@kernel.org>
Link: http://lore.kernel.org/lkml/20191105100057.21465-1-adrian.hunter@intel.com
Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>
tools/perf/builtin-inject.c

index 372ecb3e2c06fb93b551c1e158ba598759c34309..1e5d28311e143423b15532472991445062c46728 100644 (file)
@@ -578,58 +578,6 @@ static void strip_init(struct perf_inject *inject)
                evsel->handler = drop_sample;
 }
 
-static bool has_tracking(struct evsel *evsel)
-{
-       return evsel->core.attr.mmap || evsel->core.attr.mmap2 || evsel->core.attr.comm ||
-              evsel->core.attr.task;
-}
-
-#define COMPAT_MASK (PERF_SAMPLE_ID | PERF_SAMPLE_TID | PERF_SAMPLE_TIME | \
-                    PERF_SAMPLE_ID | PERF_SAMPLE_CPU | PERF_SAMPLE_IDENTIFIER)
-
-/*
- * In order that the perf.data file is parsable, tracking events like MMAP need
- * their selected event to exist, except if there is only 1 selected event left
- * and it has a compatible sample type.
- */
-static bool ok_to_remove(struct evlist *evlist,
-                        struct evsel *evsel_to_remove)
-{
-       struct evsel *evsel;
-       int cnt = 0;
-       bool ok = false;
-
-       if (!has_tracking(evsel_to_remove))
-               return true;
-
-       evlist__for_each_entry(evlist, evsel) {
-               if (evsel->handler != drop_sample) {
-                       cnt += 1;
-                       if ((evsel->core.attr.sample_type & COMPAT_MASK) ==
-                           (evsel_to_remove->core.attr.sample_type & COMPAT_MASK))
-                               ok = true;
-               }
-       }
-
-       return ok && cnt == 1;
-}
-
-static void strip_fini(struct perf_inject *inject)
-{
-       struct evlist *evlist = inject->session->evlist;
-       struct evsel *evsel, *tmp;
-
-       /* Remove non-synthesized evsels if possible */
-       evlist__for_each_entry_safe(evlist, tmp, evsel) {
-               if (evsel->handler == drop_sample &&
-                   ok_to_remove(evlist, evsel)) {
-                       pr_debug("Deleting %s\n", perf_evsel__name(evsel));
-                       evlist__remove(evlist, evsel);
-                       evsel__delete(evsel);
-               }
-       }
-}
-
 static int __cmd_inject(struct perf_inject *inject)
 {
        int ret = -EINVAL;
@@ -729,8 +677,6 @@ static int __cmd_inject(struct perf_inject *inject)
                                evlist__remove(session->evlist, evsel);
                                evsel__delete(evsel);
                        }
-                       if (inject->strip)
-                               strip_fini(inject);
                }
                session->header.data_offset = output_data_offset;
                session->header.data_size = inject->bytes_written;