Em Wed, May 06, 2020 at 09:20:54PM +0300, Alexey Budankov escreveu: > > Extend -D,--delay option with -1 value to start monitoring 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/builtin-stat.c | 18 ++++++++++++++---- > tools/perf/util/evlist.h | 3 +++ > tools/perf/util/stat.h | 2 +-
You forgot to update tools/perf/Documentation/perf-stat.h > 3 files changed, 18 insertions(+), 5 deletions(-) > > diff --git a/tools/perf/builtin-stat.c b/tools/perf/builtin-stat.c > index 9775b0905146..bda777ca0420 100644 > --- a/tools/perf/builtin-stat.c > +++ b/tools/perf/builtin-stat.c > @@ -383,16 +383,26 @@ static bool print_interval_and_stop(struct > perf_stat_config *config, int *times) > > static void enable_counters(void) > { > - if (stat_config.initial_delay) > + if (stat_config.initial_delay < 0) { > + pr_info(PERF_EVLIST__DISABLED_MSG); > + return; > + } > + > + if (stat_config.initial_delay > 0) { > + pr_info(PERF_EVLIST__DISABLED_MSG); > usleep(stat_config.initial_delay * USEC_PER_MSEC); > + } > > /* > * We need to enable counters only if: > * - we don't have tracee (attaching to task or cpu) > * - we have initial delay configured > */ > - if (!target__none(&target) || stat_config.initial_delay) > + if (!target__none(&target) || stat_config.initial_delay) { > evlist__enable(evsel_list); > + if (stat_config.initial_delay > 0) > + pr_info(PERF_EVLIST__ENABLED_MSG); > + } > } > > static void disable_counters(void) > @@ -929,8 +939,8 @@ static struct option stat_options[] = { > "aggregate counts per thread", AGGR_THREAD), > OPT_SET_UINT(0, "per-node", &stat_config.aggr_mode, > "aggregate counts per numa node", AGGR_NODE), > - OPT_UINTEGER('D', "delay", &stat_config.initial_delay, > - "ms to wait before starting measurement after program > start"), > + OPT_INTEGER('D', "delay", &stat_config.initial_delay, > + "ms to wait before starting measurement after program start > (-1: start with events disabled"), > OPT_CALLBACK_NOOPT(0, "metric-only", &stat_config.metric_only, NULL, > "Only print computed metrics. No raw values", > enable_metric_only), > OPT_BOOLEAN(0, "topdown", &topdown_run, > diff --git a/tools/perf/util/evlist.h b/tools/perf/util/evlist.h > index 84386850c290..874ecf068ac9 100644 > --- a/tools/perf/util/evlist.h > +++ b/tools/perf/util/evlist.h > @@ -366,6 +366,9 @@ enum evlist_ctl_cmd { > CTL_CMD_ACK = 'a' > }; > > +#define PERF_EVLIST__ENABLED_MSG "Events enabled\n" > +#define PERF_EVLIST__DISABLED_MSG "Events disabled\n" > + > int perf_evlist__initialize_ctlfd(struct evlist *evlist, int ctl_fd, int > ctl_fd_ack); > int perf_evlist__finalize_ctlfd(struct evlist *evlist); > int perf_evlist__ctlfd_process(struct evlist *evlist, enum evlist_ctl_cmd > *cmd); > diff --git a/tools/perf/util/stat.h b/tools/perf/util/stat.h > index b4fdfaa7f2c0..027b9dcd902f 100644 > --- a/tools/perf/util/stat.h > +++ b/tools/perf/util/stat.h > @@ -113,7 +113,7 @@ struct perf_stat_config { > FILE *output; > unsigned int interval; > unsigned int timeout; > - unsigned int initial_delay; > + int initial_delay; > unsigned int unit_width; > unsigned int metric_only_len; > int times; > -- > 2.24.1 > > -- - Arnaldo