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

From: Jin, Yao
Date: Wed Feb 27 2019 - 07:51:55 EST




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.

Thanks
Jin Yao