Provided by: trace-cmd_3.1.6-1_amd64
NAME
tracecmd_get_first_ts, tracecmd_add_ts_offset - Handle time stamps from a trace file.
SYNOPSIS
#include <trace-cmd.h> unsigned long long tracecmd_get_first_ts(struct tracecmd_input *handle); void tracecmd_add_ts_offset(struct tracecmd_input *handle, long long offset);
DESCRIPTION
This set of APIs can be used to read tracing data from a trace file opened with tracecmd_open()(3), tracecmd_open_fd()(3) or tracecmd_open_head()(3). The tracecmd_get_first_ts() function returns the time stamp of the first record in the handle. The tracecmd_add_ts_offset() function adds an offset to each of the records in the handle that represents a trace file. This is useful for associating two different tracing files by their offset (for example a trace file from a host and a trace file from a guest that were not synchronized when created).
RETURN VALUE
The tracecmd_get_first_ts() function returns the timestamp of the first record in a trace file for the given handle.
EXAMPLE
#include <stdlib.h> #include <trace-cmd.h> static int print_events(struct tracecmd_input *handle, struct tep_record *record, int cpu, void *data) { static struct trace_seq seq; struct tep_handle *tep = tracecmd_get_tep(handle); const char *file = tracecmd_get_private(handle); if (!seq.buffer) trace_seq_init(&seq); trace_seq_reset(&seq); trace_seq_printf(&seq, "%s: ", file); tep_print_event(tep, &seq, record, "%6.1000d [%03d] %s-%d %s: %s\n", TEP_PRINT_TIME, TEP_PRINT_CPU, TEP_PRINT_COMM, TEP_PRINT_PID, TEP_PRINT_NAME, TEP_PRINT_INFO); trace_seq_terminate(&seq); trace_seq_do_printf(&seq); return 0; } int main(int argc, char **argv) { struct tracecmd_input **handles = NULL; unsigned long long ts, first_ts = 0; int nr_handles = 0; int i; if (argc < 2) { printf("usage: %s trace.dat [trace.dat ...]\n", argv[0]); exit(-1); } for (i = 1; i < argc; i++) { handles = realloc(handles, sizeof(*handles) * (nr_handles + 1)); if (!handles) exit(-1); handles[nr_handles] = tracecmd_open(argv[i], 0); if (!handles[nr_handles]) exit(-1); tracecmd_set_private(handles[nr_handles], argv[i]); ts = tracecmd_get_first_ts(handles[nr_handles]); if (!first_ts || ts < first_ts) first_ts = ts; nr_handles++; } /* Set the time stamp to start at the first record found */ for (i = 0; i < nr_handles; i++) tracecmd_add_ts_offset(handles[i], -first_ts); tracecmd_iterate_events_multi(handles, nr_handles, print_events, NULL); for (i = 0; i < nr_handles; i++) tracecmd_close(handles[i]); free(handles); }
FILES
trace-cmd.h Header file to include in order to have access to the library APIs. -ltracecmd Linker switch to add when building a program that uses the library.
SEE ALSO
libtracefs(3), libtraceevent(3), trace-cmd(1) trace-cmd.dat(5)
AUTHOR
Steven Rostedt <rostedt@goodmis.org[1]> Tzvetomir Stoyanov <tz.stoyanov@gmail.com[2]>
REPORTING BUGS
Report bugs to <linux-trace-devel@vger.kernel.org[3]>
LICENSE
libtracecmd is Free Software licensed under the GNU LGPL 2.1
RESOURCES
https://git.kernel.org/pub/scm/utils/trace-cmd/trace-cmd.git/
COPYING
Copyright (C) 2020 VMware, Inc. Free use of this software is granted under the terms of the GNU Public License (GPL).
NOTES
1. rostedt@goodmis.org mailto:rostedt@goodmis.org 2. tz.stoyanov@gmail.com mailto:tz.stoyanov@gmail.com 3. linux-trace-devel@vger.kernel.org mailto:linux-trace-devel@vger.kernel.org