diff options
Diffstat (limited to 'tools/perf/builtin-script.c')
| -rw-r--r-- | tools/perf/builtin-script.c | 18 | 
1 files changed, 16 insertions, 2 deletions
diff --git a/tools/perf/builtin-script.c b/tools/perf/builtin-script.c index 2f93d60c5a17..61cfd8f70989 100644 --- a/tools/perf/builtin-script.c +++ b/tools/perf/builtin-script.c @@ -53,6 +53,8 @@  static char const		*script_name;  static char const		*generate_script_lang; +static bool			reltime; +static u64			initial_time;  static bool			debug_mode;  static u64			last_timestamp;  static u64			nr_unordered; @@ -686,7 +688,13 @@ static int perf_sample__fprintf_start(struct perf_sample *sample,  	}  	if (PRINT_FIELD(TIME)) { -		nsecs = sample->time; +		u64 t = sample->time; +		if (reltime) { +			if (!initial_time) +				initial_time = sample->time; +			t = sample->time - initial_time; +		} +		nsecs = t;  		secs = nsecs / NSEC_PER_SEC;  		nsecs -= secs * NSEC_PER_SEC; @@ -694,7 +702,7 @@ static int perf_sample__fprintf_start(struct perf_sample *sample,  			printed += fprintf(fp, "%5lu.%09llu: ", secs, nsecs);  		else {  			char sample_time[32]; -			timestamp__scnprintf_usec(sample->time, sample_time, sizeof(sample_time)); +			timestamp__scnprintf_usec(t, sample_time, sizeof(sample_time));  			printed += fprintf(fp, "%12s: ", sample_time);  		}  	} @@ -3413,6 +3421,7 @@ int cmd_script(int argc, const char **argv)  		     "Set the maximum stack depth when parsing the callchain, "  		     "anything beyond the specified depth will be ignored. "  		     "Default: kernel.perf_event_max_stack or " __stringify(PERF_MAX_STACK_DEPTH)), +	OPT_BOOLEAN(0, "reltime", &reltime, "Show time stamps relative to start"),  	OPT_BOOLEAN('I', "show-info", &show_full_info,  		    "display extended information from perf.data file"),  	OPT_BOOLEAN('\0', "show-kernel-path", &symbol_conf.show_kernel_path, @@ -3487,6 +3496,11 @@ int cmd_script(int argc, const char **argv)  		}  	} +	if (script.time_str && reltime) { +		fprintf(stderr, "Don't combine --reltime with --time\n"); +		return -1; +	} +  	if (itrace_synth_opts.callchain &&  	    itrace_synth_opts.callchain_sz > scripting_max_stack)  		scripting_max_stack = itrace_synth_opts.callchain_sz;  | 
