Extend -D,--delay option with -1 to start collection
with events disabled to be enbled later by enable
command provided via control file descriptor.

Signed-off-by: Alexey Budankov <alexey.budan...@linux.intel.com>
---
 tools/perf/builtin-record.c | 12 ++++++++----
 tools/perf/builtin-trace.c  |  2 +-
 tools/perf/util/record.h    |  2 +-
 3 files changed, 10 insertions(+), 6 deletions(-)

diff --git a/tools/perf/builtin-record.c b/tools/perf/builtin-record.c
index e4efdbf1a81e..8a14e68b86ad 100644
--- a/tools/perf/builtin-record.c
+++ b/tools/perf/builtin-record.c
@@ -1704,8 +1704,12 @@ static int __cmd_record(struct record *rec, int argc, 
const char **argv)
        }
 
        if (opts->initial_delay) {
-               usleep(opts->initial_delay * USEC_PER_MSEC);
-               evlist__enable(rec->evlist);
+               pr_info(PERF_EVLIST__DISABLED_MSG);
+               if (opts->initial_delay > 0) {
+                       usleep(opts->initial_delay * USEC_PER_MSEC);
+                       evlist__enable(rec->evlist);
+                       pr_info(PERF_EVLIST__ENABLED_MSG);
+               }
        }
 
        trigger_ready(&auxtrace_snapshot_trigger);
@@ -2413,8 +2417,8 @@ static struct option __record_options[] = {
        OPT_CALLBACK('G', "cgroup", &record.evlist, "name",
                     "monitor event in cgroup name only",
                     parse_cgroups),
-       OPT_UINTEGER('D', "delay", &record.opts.initial_delay,
-                 "ms to wait before starting measurement after program start"),
+       OPT_INTEGER('D', "delay", &record.opts.initial_delay,
+                 "ms to wait before starting measurement after program start 
(-1: start with events disabled )"),
        OPT_BOOLEAN(0, "kcore", &record.opts.kcore, "copy /proc/kcore"),
        OPT_STRING('u', "uid", &record.opts.target.uid_str, "user",
                   "user to profile"),
diff --git a/tools/perf/builtin-trace.c b/tools/perf/builtin-trace.c
index a46efb907bd4..63f69a927f3c 100644
--- a/tools/perf/builtin-trace.c
+++ b/tools/perf/builtin-trace.c
@@ -4773,7 +4773,7 @@ int cmd_trace(int argc, const char **argv)
                        "per thread proc mmap processing timeout in ms"),
        OPT_CALLBACK('G', "cgroup", &trace, "name", "monitor event in cgroup 
name only",
                     trace__parse_cgroups),
-       OPT_UINTEGER('D', "delay", &trace.opts.initial_delay,
+       OPT_INTEGER('D', "delay", &trace.opts.initial_delay,
                     "ms to wait before starting measurement after program "
                     "start"),
        OPTS_EVSWITCH(&trace.evswitch),
diff --git a/tools/perf/util/record.h b/tools/perf/util/record.h
index 923565c3b155..96a73bbd8cd4 100644
--- a/tools/perf/util/record.h
+++ b/tools/perf/util/record.h
@@ -60,7 +60,7 @@ struct record_opts {
        const char    *auxtrace_snapshot_opts;
        const char    *auxtrace_sample_opts;
        bool          sample_transaction;
-       unsigned      initial_delay;
+       int           initial_delay;
        bool          use_clockid;
        clockid_t     clockid;
        u64           clockid_res_ns;
-- 
2.24.1


Reply via email to