aboutsummaryrefslogtreecommitdiffstats
path: root/tools/perf/builtin-script.c
diff options
context:
space:
mode:
Diffstat (limited to 'tools/perf/builtin-script.c')
-rw-r--r--tools/perf/builtin-script.c34
1 files changed, 28 insertions, 6 deletions
diff --git a/tools/perf/builtin-script.c b/tools/perf/builtin-script.c
index 77e47cf39f2c..330dcd9b9b8f 100644
--- a/tools/perf/builtin-script.c
+++ b/tools/perf/builtin-script.c
@@ -1436,6 +1436,8 @@ static int perf_sample__fprintf_synth(struct perf_sample *sample,
1436 return 0; 1436 return 0;
1437} 1437}
1438 1438
1439#define PTIME_RANGE_MAX 10
1440
1439struct perf_script { 1441struct perf_script {
1440 struct perf_tool tool; 1442 struct perf_tool tool;
1441 struct perf_session *session; 1443 struct perf_session *session;
@@ -1449,7 +1451,8 @@ struct perf_script {
1449 struct thread_map *threads; 1451 struct thread_map *threads;
1450 int name_width; 1452 int name_width;
1451 const char *time_str; 1453 const char *time_str;
1452 struct perf_time_interval ptime; 1454 struct perf_time_interval ptime_range[PTIME_RANGE_MAX];
1455 int range_num;
1453}; 1456};
1454 1457
1455static int perf_evlist__max_name_len(struct perf_evlist *evlist) 1458static int perf_evlist__max_name_len(struct perf_evlist *evlist)
@@ -1734,8 +1737,10 @@ static int process_sample_event(struct perf_tool *tool,
1734 struct perf_script *scr = container_of(tool, struct perf_script, tool); 1737 struct perf_script *scr = container_of(tool, struct perf_script, tool);
1735 struct addr_location al; 1738 struct addr_location al;
1736 1739
1737 if (perf_time__skip_sample(&scr->ptime, sample->time)) 1740 if (perf_time__ranges_skip_sample(scr->ptime_range, scr->range_num,
1741 sample->time)) {
1738 return 0; 1742 return 0;
1743 }
1739 1744
1740 if (debug_mode) { 1745 if (debug_mode) {
1741 if (sample->time < last_timestamp) { 1746 if (sample->time < last_timestamp) {
@@ -3360,10 +3365,27 @@ int cmd_script(int argc, const char **argv)
3360 goto out_delete; 3365 goto out_delete;
3361 3366
3362 /* needs to be parsed after looking up reference time */ 3367 /* needs to be parsed after looking up reference time */
3363 if (perf_time__parse_str(&script.ptime, script.time_str) != 0) { 3368 if (perf_time__parse_str(script.ptime_range, script.time_str) != 0) {
3364 pr_err("Invalid time string\n"); 3369 if (session->evlist->first_sample_time == 0 &&
3365 err = -EINVAL; 3370 session->evlist->last_sample_time == 0) {
3366 goto out_delete; 3371 pr_err("No first/last sample time in perf data\n");
3372 err = -EINVAL;
3373 goto out_delete;
3374 }
3375
3376 script.range_num = perf_time__percent_parse_str(
3377 script.ptime_range, PTIME_RANGE_MAX,
3378 script.time_str,
3379 session->evlist->first_sample_time,
3380 session->evlist->last_sample_time);
3381
3382 if (script.range_num < 0) {
3383 pr_err("Invalid time string\n");
3384 err = -EINVAL;
3385 goto out_delete;
3386 }
3387 } else {
3388 script.range_num = 1;
3367 } 3389 }
3368 3390
3369 err = __cmd_script(&script); 3391 err = __cmd_script(&script);