Re: [PATCH v2 1/3] perf diff: Support --time filter option

From: Jin, Yao
Date: Wed Feb 27 2019 - 09:24:35 EST




On 2/27/2019 9:10 PM, Jiri Olsa wrote:
On Wed, Feb 27, 2019 at 08:51:44PM +0800, Jin, Yao wrote:


On 2/27/2019 5:28 PM, Jiri Olsa wrote:
On Tue, Feb 26, 2019 at 08:11:07PM +0800, Jin Yao wrote:

SNIP

+ .ordered_events = true,
+ .ordering_requires_timestamps = true,
+ },
};
static struct perf_evsel *evsel_match(struct perf_evsel *evsel,
@@ -771,19 +788,136 @@ static void data__free(struct data__file *d)
}
}
+static int parse_time_range(struct data__file *d,
+ struct perf_time_interval *ptime_range,
+ const char *time_str)
+{
+ if (perf_time__parse_str(ptime_range,
+ time_str) != 0) {
+ if (d->session->evlist->first_sample_time == 0 &&
+ d->session->evlist->last_sample_time == 0) {
+ pr_err("HINT: no first/last sample time found in perf data.\n"
+ "Please use latest perf binary to execute 'perf record'\n"
+ "(if '--buildid-all' is enabled, please set '--timestamp-boundary').\n");
+ return -EINVAL;
+ }
+
+ pdiff.range_num = perf_time__percent_parse_str(
+ ptime_range, pdiff.range_size, time_str,
+ d->session->evlist->first_sample_time,
+ d->session->evlist->last_sample_time);
+
+ if (pdiff.range_num < 0) {
+ pr_err("Invalid time string\n");
+ return -EINVAL;
+ }
+ } else {
+ pdiff.range_num = 1;

I dont understand why we set range_num to 1 if there's
not time option set.. it should be 0 and we should take
no action in diff__process_sample_event, right?

then I checked the report code and we do the same,
could we fix that? I'm assuming we don't need any
time check if the time option is not set.. please
correct me if I miss something

jirka


We support multiple complicated time strings. :(

In parse_time_range(), perf_time__parse_str() returns 0 if the time string
is a simple start/stop format. So next, we set the range_num to 1. If the
time string contains multiple time percent ranges (e.g. "10%/1,10%/2,..."),
perf_time__parse_str() will return with error (<0), then we will continue
checking with perf_time__percent_parse_str().

So when range_num is set to 1, it just means it's the simple time string.

why do we need to have time range set if there's no --time
option set by user?

jirka


Yes, that could be refined if no --time option set by user. I think I can add a new patch to fix these for perf report/script.

Thanks
Jin Yao