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

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

diff --git a/tools/perf/Documentation/perf-record.txt 
b/tools/perf/Documentation/perf-record.txt
index fa8a5fcd27ab..a84376605805 100644
--- a/tools/perf/Documentation/perf-record.txt
+++ b/tools/perf/Documentation/perf-record.txt
@@ -407,8 +407,9 @@ if combined with -a or -C options.
 
 -D::
 --delay=::
-After starting the program, wait msecs before measuring. This is useful to
-filter out the startup phase of the program, which is often very different.
+After starting the program, wait msecs before measuring (-1: start with events
+disabled). This is useful to filter out the startup phase of the program, which
+is often very different.
 
 -I::
 --intr-regs::
diff --git a/tools/perf/builtin-record.c b/tools/perf/builtin-record.c
index e108d90ae2ed..d0b29a1070a0 100644
--- a/tools/perf/builtin-record.c
+++ b/tools/perf/builtin-record.c
@@ -1749,8 +1749,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(EVLIST_DISABLED_MSG);
+               if (opts->initial_delay > 0) {
+                       usleep(opts->initial_delay * USEC_PER_MSEC);
+                       evlist__enable(rec->evlist);
+                       pr_info(EVLIST_ENABLED_MSG);
+               }
        }
 
        trigger_ready(&auxtrace_snapshot_trigger);
@@ -2462,8 +2466,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 4cbb64edc998..290149b1b3b5 100644
--- a/tools/perf/builtin-trace.c
+++ b/tools/perf/builtin-trace.c
@@ -4813,7 +4813,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 39d1de4b2a36..da138dcb4d34 100644
--- a/tools/perf/util/record.h
+++ b/tools/perf/util/record.h
@@ -61,7 +61,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