mirror of
https://github.com/torvalds/linux.git
synced 2024-11-10 22:21:40 +00:00
perf stat: Move 'initial_delay' to 'struct perf_stat_config'
Move the static 'initial_delay' variable to 'struct perf_stat_config', so it can be passed around and used outside the 'perf stat' command. Add 'struct perf_stat_config' argument to create_perf_stat_counter() and use its 'initial_delay' member instead of the static one. Signed-off-by: Jiri Olsa <jolsa@kernel.org> Cc: Alexander Shishkin <alexander.shishkin@linux.intel.com> Cc: Andi Kleen <andi@firstfloor.org> Cc: David Ahern <dsahern@gmail.com> Cc: Namhyung Kim <namhyung@kernel.org> Cc: Peter Zijlstra <peterz@infradead.org> Link: http://lkml.kernel.org/r/20180830063252.23729-3-jolsa@kernel.org Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>
This commit is contained in:
parent
d50ed0ce82
commit
728c0ee0a8
@ -164,7 +164,6 @@ static bool group = false;
|
||||
static const char *pre_cmd = NULL;
|
||||
static const char *post_cmd = NULL;
|
||||
static bool sync_run = false;
|
||||
static unsigned int initial_delay = 0;
|
||||
static unsigned int unit_width = 4; /* strlen("unit") */
|
||||
static bool forever = false;
|
||||
static bool metric_only = false;
|
||||
@ -236,7 +235,8 @@ static void perf_stat__reset_stats(void)
|
||||
perf_stat__reset_shadow_per_stat(&stat_config.stats[i]);
|
||||
}
|
||||
|
||||
static int create_perf_stat_counter(struct perf_evsel *evsel)
|
||||
static int create_perf_stat_counter(struct perf_evsel *evsel,
|
||||
struct perf_stat_config *config)
|
||||
{
|
||||
struct perf_event_attr *attr = &evsel->attr;
|
||||
struct perf_evsel *leader = evsel->leader;
|
||||
@ -286,7 +286,7 @@ static int create_perf_stat_counter(struct perf_evsel *evsel)
|
||||
* In case of initial_delay we enable tracee
|
||||
* events manually.
|
||||
*/
|
||||
if (target__none(&target) && !initial_delay)
|
||||
if (target__none(&target) && !config->initial_delay)
|
||||
attr->enable_on_exec = 1;
|
||||
}
|
||||
|
||||
@ -428,15 +428,15 @@ static void process_interval(void)
|
||||
|
||||
static void enable_counters(void)
|
||||
{
|
||||
if (initial_delay)
|
||||
usleep(initial_delay * USEC_PER_MSEC);
|
||||
if (stat_config.initial_delay)
|
||||
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) || initial_delay)
|
||||
if (!target__none(&target) || stat_config.initial_delay)
|
||||
perf_evlist__enable(evsel_list);
|
||||
}
|
||||
|
||||
@ -609,7 +609,7 @@ static int __run_perf_stat(int argc, const char **argv, int run_idx)
|
||||
|
||||
evlist__for_each_entry(evsel_list, counter) {
|
||||
try_again:
|
||||
if (create_perf_stat_counter(counter) < 0) {
|
||||
if (create_perf_stat_counter(counter, &stat_config) < 0) {
|
||||
|
||||
/* Weak group failed. Reset the group. */
|
||||
if ((errno == EINVAL || errno == EBADF) &&
|
||||
@ -2027,7 +2027,7 @@ static const struct option stat_options[] = {
|
||||
"aggregate counts per physical processor core", AGGR_CORE),
|
||||
OPT_SET_UINT(0, "per-thread", &stat_config.aggr_mode,
|
||||
"aggregate counts per thread", AGGR_THREAD),
|
||||
OPT_UINTEGER('D', "delay", &initial_delay,
|
||||
OPT_UINTEGER('D', "delay", &stat_config.initial_delay,
|
||||
"ms to wait before starting measurement after program start"),
|
||||
OPT_CALLBACK_NOOPT(0, "metric-only", &metric_only, NULL,
|
||||
"Only print computed metrics. No raw values", enable_metric_only),
|
||||
|
@ -6,6 +6,7 @@
|
||||
#include <stdio.h>
|
||||
#include "xyarray.h"
|
||||
#include "rblist.h"
|
||||
#include "perf.h"
|
||||
|
||||
struct stats {
|
||||
double n, mean, M2;
|
||||
@ -85,14 +86,15 @@ struct runtime_stat {
|
||||
};
|
||||
|
||||
struct perf_stat_config {
|
||||
enum aggr_mode aggr_mode;
|
||||
bool scale;
|
||||
FILE *output;
|
||||
unsigned int interval;
|
||||
unsigned int timeout;
|
||||
int times;
|
||||
struct runtime_stat *stats;
|
||||
int stats_num;
|
||||
enum aggr_mode aggr_mode;
|
||||
bool scale;
|
||||
FILE *output;
|
||||
unsigned int interval;
|
||||
unsigned int timeout;
|
||||
unsigned int initial_delay;
|
||||
int times;
|
||||
struct runtime_stat *stats;
|
||||
int stats_num;
|
||||
};
|
||||
|
||||
void update_stats(struct stats *stats, u64 val);
|
||||
|
Loading…
Reference in New Issue
Block a user