Commit 0a3cc3ae authored by Jin Yao's avatar Jin Yao Committed by Arnaldo Carvalho de Melo

perf report: Remove the time slices number limitation

Previously it was only allowed to use at most 10 time slices in 'perf
report --time'.

This patch removes this limitation.
For example, following command line is OK (12 time slices)

perf report --stdio --time 1%/1,1%/2,1%/3,1%/4,1%/5,1%/6,1%/7,1%/8,1%/9,1%/10,1%/11,1%/12
Signed-off-by: default avatarJin Yao <yao.jin@linux.intel.com>
Suggested-by: default avatarArnaldo Carvalho de Melo <acme@redhat.com>
Reviewed-by: default avatarJiri Olsa <jolsa@redhat.com>
Cc: Alexander Shishkin <alexander.shishkin@linux.intel.com>
Cc: Andi Kleen <ak@linux.intel.com>
Cc: Jiri Olsa <jolsa@kernel.org>
Cc: Kan Liang <kan.liang@intel.com>
Cc: Peter Zijlstra <peterz@infradead.org>
Link: http://lkml.kernel.org/r/1515596433-24653-8-git-send-email-yao.jin@linux.intel.com
[ No need to check for NULL to call free, use zfree ]
Signed-off-by: default avatarArnaldo Carvalho de Melo <acme@redhat.com>
parent 5a031f88
...@@ -403,7 +403,7 @@ OPTIONS ...@@ -403,7 +403,7 @@ OPTIONS
to end of file. to end of file.
Also support time percent with multiple time range. Time string is Also support time percent with multiple time range. Time string is
'a%/n,b%/m,...' or 'a%-b%,c%-%d,...'. The maximum number of slices is 10. 'a%/n,b%/m,...' or 'a%-b%,c%-%d,...'.
For example: For example:
Select the second 10% time slice: Select the second 10% time slice:
......
...@@ -54,8 +54,6 @@ ...@@ -54,8 +54,6 @@
#include <unistd.h> #include <unistd.h>
#include <linux/mman.h> #include <linux/mman.h>
#define PTIME_RANGE_MAX 10
struct report { struct report {
struct perf_tool tool; struct perf_tool tool;
struct perf_session *session; struct perf_session *session;
...@@ -76,7 +74,8 @@ struct report { ...@@ -76,7 +74,8 @@ struct report {
const char *cpu_list; const char *cpu_list;
const char *symbol_filter_str; const char *symbol_filter_str;
const char *time_str; const char *time_str;
struct perf_time_interval ptime_range[PTIME_RANGE_MAX]; struct perf_time_interval *ptime_range;
int range_size;
int range_num; int range_num;
float min_percent; float min_percent;
u64 nr_entries; u64 nr_entries;
...@@ -1300,24 +1299,33 @@ int cmd_report(int argc, const char **argv) ...@@ -1300,24 +1299,33 @@ int cmd_report(int argc, const char **argv)
if (symbol__init(&session->header.env) < 0) if (symbol__init(&session->header.env) < 0)
goto error; goto error;
report.ptime_range = perf_time__range_alloc(report.time_str,
&report.range_size);
if (!report.ptime_range) {
ret = -ENOMEM;
goto error;
}
if (perf_time__parse_str(report.ptime_range, report.time_str) != 0) { if (perf_time__parse_str(report.ptime_range, report.time_str) != 0) {
if (session->evlist->first_sample_time == 0 && if (session->evlist->first_sample_time == 0 &&
session->evlist->last_sample_time == 0) { session->evlist->last_sample_time == 0) {
pr_err("HINT: no first/last sample time found in perf data.\n" pr_err("HINT: no first/last sample time found in perf data.\n"
"Please use latest perf binary to execute 'perf record'\n" "Please use latest perf binary to execute 'perf record'\n"
"(if '--buildid-all' is enabled, please set '--timestamp-boundary').\n"); "(if '--buildid-all' is enabled, please set '--timestamp-boundary').\n");
return -EINVAL; ret = -EINVAL;
goto error;
} }
report.range_num = perf_time__percent_parse_str( report.range_num = perf_time__percent_parse_str(
report.ptime_range, PTIME_RANGE_MAX, report.ptime_range, report.range_size,
report.time_str, report.time_str,
session->evlist->first_sample_time, session->evlist->first_sample_time,
session->evlist->last_sample_time); session->evlist->last_sample_time);
if (report.range_num < 0) { if (report.range_num < 0) {
pr_err("Invalid time string\n"); pr_err("Invalid time string\n");
return -EINVAL; ret = -EINVAL;
goto error;
} }
} else { } else {
report.range_num = 1; report.range_num = 1;
...@@ -1333,6 +1341,8 @@ int cmd_report(int argc, const char **argv) ...@@ -1333,6 +1341,8 @@ int cmd_report(int argc, const char **argv)
ret = 0; ret = 0;
error: error:
zfree(&report.ptime_range);
perf_session__delete(session); perf_session__delete(session);
return ret; return ret;
} }
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment