1*58e6ee5fSAndroid Build Coastguard Workerlibtracecmd(3) 2*58e6ee5fSAndroid Build Coastguard Worker============= 3*58e6ee5fSAndroid Build Coastguard Worker 4*58e6ee5fSAndroid Build Coastguard WorkerNAME 5*58e6ee5fSAndroid Build Coastguard Worker---- 6*58e6ee5fSAndroid Build Coastguard Workertracecmd_open, tracecmd_open_fd, tracecmd_open_head, tracecmd_init_data, 7*58e6ee5fSAndroid Build Coastguard Workertracecmd_close - Open and close a trace file. 8*58e6ee5fSAndroid Build Coastguard Worker 9*58e6ee5fSAndroid Build Coastguard WorkerSYNOPSIS 10*58e6ee5fSAndroid Build Coastguard Worker-------- 11*58e6ee5fSAndroid Build Coastguard Worker[verse] 12*58e6ee5fSAndroid Build Coastguard Worker-- 13*58e6ee5fSAndroid Build Coastguard Worker*#include <trace-cmd.h>* 14*58e6ee5fSAndroid Build Coastguard Worker 15*58e6ee5fSAndroid Build Coastguard Workerstruct tracecmd_input pass:[*]*tracecmd_open*(const char pass:[*]_file_, int _flags_); 16*58e6ee5fSAndroid Build Coastguard Workerstruct tracecmd_input pass:[*]*tracecmd_open_fd*(int _fd_, int _flags_); 17*58e6ee5fSAndroid Build Coastguard Workerstruct tracecmd_input pass:[*]*tracecmd_open_head*(const char pass:[*]_file_, int _flags_); 18*58e6ee5fSAndroid Build Coastguard Workerint *tracecmd_init_data*(struct tracecmd_input pass:[*]_handle_); 19*58e6ee5fSAndroid Build Coastguard Workervoid *tracecmd_close*(struct tracecmd_input pass:[*]_handle_); 20*58e6ee5fSAndroid Build Coastguard Worker-- 21*58e6ee5fSAndroid Build Coastguard Worker 22*58e6ee5fSAndroid Build Coastguard WorkerDESCRIPTION 23*58e6ee5fSAndroid Build Coastguard Worker----------- 24*58e6ee5fSAndroid Build Coastguard WorkerThis set of APIs can be used to open and close a trace file recorded by 25*58e6ee5fSAndroid Build Coastguard Worker_trace-cmd(1)_ and containing tracing information from ftrace, the official 26*58e6ee5fSAndroid Build Coastguard WorkerLinux kernel tracer. The opened file is represented by a _tracecmd_input_ 27*58e6ee5fSAndroid Build Coastguard Workerstructure, all other library APIs that work with the file require a pointer 28*58e6ee5fSAndroid Build Coastguard Workerto the structure. The APIs for opening a trace file have a _flag_ input 29*58e6ee5fSAndroid Build Coastguard Workerparameter, which controls how the file will be opened and parsed. The _flag_ 30*58e6ee5fSAndroid Build Coastguard Workeris a combination of these options: 31*58e6ee5fSAndroid Build Coastguard Worker 32*58e6ee5fSAndroid Build Coastguard Worker TRACECMD_FL_LOAD_NO_PLUGINS - Do not load any plugins 33*58e6ee5fSAndroid Build Coastguard Worker TRACECMD_FL_LOAD_NO_SYSTEM_PLUGINS - Do not load system wide plugins, load only "local only" 34*58e6ee5fSAndroid Build Coastguard Worker plugins from user's home directory. 35*58e6ee5fSAndroid Build Coastguard Worker 36*58e6ee5fSAndroid Build Coastguard WorkerThe _tracecmd_open()_ function opens a given trace _file_, parses the 37*58e6ee5fSAndroid Build Coastguard Workermetadata headers from the file, allocates and initializes а _tracecmd_input_ 38*58e6ee5fSAndroid Build Coastguard Workerhandler structure representing the file. It also initializes the handler 39*58e6ee5fSAndroid Build Coastguard Workerfor reading trace data from the file. The returned handler is ready to be 40*58e6ee5fSAndroid Build Coastguard Workerused with _tracecmd_read__ APIs. 41*58e6ee5fSAndroid Build Coastguard Worker 42*58e6ee5fSAndroid Build Coastguard WorkerThe _tracecmd_open_fd()_ function does the same as _tracecmd_open()_, but 43*58e6ee5fSAndroid Build Coastguard Workerworks with a file descriptor to a trace file, opened for reading. 44*58e6ee5fSAndroid Build Coastguard Worker 45*58e6ee5fSAndroid Build Coastguard WorkerThe _tracecmd_open_head()_ function is the same as _tracecmd_open()_, but 46*58e6ee5fSAndroid Build Coastguard Workerdoes not initialize the handler for reading trace data. It reads and parses 47*58e6ee5fSAndroid Build Coastguard Workerthe metadata headers only. The _tracecmd_init_data()_ should be used before 48*58e6ee5fSAndroid Build Coastguard Workerusing the _tracecmd_read__ APIs. 49*58e6ee5fSAndroid Build Coastguard Worker 50*58e6ee5fSAndroid Build Coastguard WorkerThe _tracecmd_init_data()_ function initializes a _handle_, allocated with 51*58e6ee5fSAndroid Build Coastguard Worker_tracecmd_open_head()_, for reading trace data from the file associated with 52*58e6ee5fSAndroid Build Coastguard Workerit. This API must be called before any of the _tracecmd_read__ APIs. 53*58e6ee5fSAndroid Build Coastguard Worker 54*58e6ee5fSAndroid Build Coastguard WorkerThe _tracecmd_close()_ function frees a _handle_, pointer to tracecmd_input 55*58e6ee5fSAndroid Build Coastguard Workerstructure, previously allocated with _tracecmd_open()_, _tracecmd_open_fd()_ 56*58e6ee5fSAndroid Build Coastguard Workeror _tracecmd_open_head()_ APIs. 57*58e6ee5fSAndroid Build Coastguard Worker 58*58e6ee5fSAndroid Build Coastguard WorkerRETURN VALUE 59*58e6ee5fSAndroid Build Coastguard Worker------------ 60*58e6ee5fSAndroid Build Coastguard WorkerThe _tracecmd_open()_, _tracecmd_open_fd()_ and _tracecmd_open_head()_ 61*58e6ee5fSAndroid Build Coastguard Workerfunctions return a pointer to tracecmd_input structure or NULL in case of 62*58e6ee5fSAndroid Build Coastguard Workeran error. The returned structure must be free with _tracecmd_close()_. 63*58e6ee5fSAndroid Build Coastguard WorkerNote that if _tracecmd_open_fd()_ is used to allocate a tracecmd_input handler, 64*58e6ee5fSAndroid Build Coastguard Workerwhen _tracecmd_close()_ is called to close it, that fd will be closed also. 65*58e6ee5fSAndroid Build Coastguard Worker 66*58e6ee5fSAndroid Build Coastguard WorkerThe _tracecmd_init_data()_ function returns -1 in case of an error or 67*58e6ee5fSAndroid Build Coastguard Worker0 otherwise. 68*58e6ee5fSAndroid Build Coastguard Worker 69*58e6ee5fSAndroid Build Coastguard WorkerEXAMPLE 70*58e6ee5fSAndroid Build Coastguard Worker------- 71*58e6ee5fSAndroid Build Coastguard Worker[source,c] 72*58e6ee5fSAndroid Build Coastguard Worker-- 73*58e6ee5fSAndroid Build Coastguard WorkerThe are two different use patterns for opening and reading trace data from 74*58e6ee5fSAndroid Build Coastguard Workera trace file, which can be used depending on the use case. 75*58e6ee5fSAndroid Build Coastguard Worker 76*58e6ee5fSAndroid Build Coastguard Worker1. Open and initialise the trace file in а single step: 77*58e6ee5fSAndroid Build Coastguard Worker 78*58e6ee5fSAndroid Build Coastguard Worker#include <trace-cmd.h> 79*58e6ee5fSAndroid Build Coastguard Worker... 80*58e6ee5fSAndroid Build Coastguard Workerstruct tracecmd_input *handle = tracecmd_open("trace.dat"); 81*58e6ee5fSAndroid Build Coastguard Worker if (!handle) { 82*58e6ee5fSAndroid Build Coastguard Worker /* Failed to open trace.dat file */ 83*58e6ee5fSAndroid Build Coastguard Worker } 84*58e6ee5fSAndroid Build Coastguard Worker... 85*58e6ee5fSAndroid Build Coastguard Worker /* Read tracing data from the file, using the handle */ 86*58e6ee5fSAndroid Build Coastguard Worker... 87*58e6ee5fSAndroid Build Coastguard Worker tracecmd_close(handle); 88*58e6ee5fSAndroid Build Coastguard Worker... 89*58e6ee5fSAndroid Build Coastguard Workerint fd; 90*58e6ee5fSAndroid Build Coastguard Worker fd = = open("trace.dat", O_RDONLY); 91*58e6ee5fSAndroid Build Coastguard Worker if (fd < 0) { 92*58e6ee5fSAndroid Build Coastguard Worker /* Failed to open trace file for reading */ 93*58e6ee5fSAndroid Build Coastguard Worker } 94*58e6ee5fSAndroid Build Coastguard Worker handle = tracecmd_open_fd(fd); 95*58e6ee5fSAndroid Build Coastguard Worker if (!handle) { 96*58e6ee5fSAndroid Build Coastguard Worker close(fd); 97*58e6ee5fSAndroid Build Coastguard Worker /* Failed to initialise handler for reading the trace file */ 98*58e6ee5fSAndroid Build Coastguard Worker } 99*58e6ee5fSAndroid Build Coastguard Worker... 100*58e6ee5fSAndroid Build Coastguard Worker /* Read tracing data from the file, using the handle */ 101*58e6ee5fSAndroid Build Coastguard Worker... 102*58e6ee5fSAndroid Build Coastguard Worker tracecmd_close(handle); 103*58e6ee5fSAndroid Build Coastguard Worker... 104*58e6ee5fSAndroid Build Coastguard Worker 105*58e6ee5fSAndroid Build Coastguard Worker2. Open and initialise the trace file in two steps. This allows to perform 106*58e6ee5fSAndroid Build Coastguard Workersome processing based on metadata, read from the file, before initialising 107*58e6ee5fSAndroid Build Coastguard Workerthe trace data for reading. Example for such use case is when opening multiple 108*58e6ee5fSAndroid Build Coastguard Workertrace files recorded in a same trace session. In that case timestamps of all 109*58e6ee5fSAndroid Build Coastguard Workertrace events must be adjusted based on the information from the file's metadata 110*58e6ee5fSAndroid Build Coastguard Workerand before reading the trace data. 111*58e6ee5fSAndroid Build Coastguard Worker 112*58e6ee5fSAndroid Build Coastguard Worker#include <trace-cmd.h> 113*58e6ee5fSAndroid Build Coastguard Worker... 114*58e6ee5fSAndroid Build Coastguard Workerstruct tracecmd_input *handle = tracecmd_open_head("trace.dat"); 115*58e6ee5fSAndroid Build Coastguard Worker if (!handle) { 116*58e6ee5fSAndroid Build Coastguard Worker /* Failed to open trace.dat file */ 117*58e6ee5fSAndroid Build Coastguard Worker } 118*58e6ee5fSAndroid Build Coastguard Worker... 119*58e6ee5fSAndroid Build Coastguard Worker /* do some processing, before initialising the trace data for reading */ 120*58e6ee5fSAndroid Build Coastguard Worker... 121*58e6ee5fSAndroid Build Coastguard Worker if (tracecmd_init_data(handle) < 0) { 122*58e6ee5fSAndroid Build Coastguard Worker /* Failed to initialize hadle for reading the trace data */ 123*58e6ee5fSAndroid Build Coastguard Worker } 124*58e6ee5fSAndroid Build Coastguard Worker... 125*58e6ee5fSAndroid Build Coastguard Worker /* Read tracing data from the file, using the handle */ 126*58e6ee5fSAndroid Build Coastguard Worker... 127*58e6ee5fSAndroid Build Coastguard Worker tracecmd_close(handle); 128*58e6ee5fSAndroid Build Coastguard Worker... 129*58e6ee5fSAndroid Build Coastguard Worker-- 130*58e6ee5fSAndroid Build Coastguard WorkerFILES 131*58e6ee5fSAndroid Build Coastguard Worker----- 132*58e6ee5fSAndroid Build Coastguard Worker[verse] 133*58e6ee5fSAndroid Build Coastguard Worker-- 134*58e6ee5fSAndroid Build Coastguard Worker*trace-cmd.h* 135*58e6ee5fSAndroid Build Coastguard Worker Header file to include in order to have access to the library APIs. 136*58e6ee5fSAndroid Build Coastguard Worker*-ltracecmd* 137*58e6ee5fSAndroid Build Coastguard Worker Linker switch to add when building a program that uses the library. 138*58e6ee5fSAndroid Build Coastguard Worker-- 139*58e6ee5fSAndroid Build Coastguard Worker 140*58e6ee5fSAndroid Build Coastguard WorkerSEE ALSO 141*58e6ee5fSAndroid Build Coastguard Worker-------- 142*58e6ee5fSAndroid Build Coastguard Worker_libtracefs(3)_, 143*58e6ee5fSAndroid Build Coastguard Worker_libtraceevent(3)_, 144*58e6ee5fSAndroid Build Coastguard Worker_trace-cmd(1)_ 145*58e6ee5fSAndroid Build Coastguard Worker_trace-cmd.dat(5)_ 146*58e6ee5fSAndroid Build Coastguard Worker 147*58e6ee5fSAndroid Build Coastguard WorkerAUTHOR 148*58e6ee5fSAndroid Build Coastguard Worker------ 149*58e6ee5fSAndroid Build Coastguard Worker[verse] 150*58e6ee5fSAndroid Build Coastguard Worker-- 151*58e6ee5fSAndroid Build Coastguard Worker*Steven Rostedt* <[email protected]> 152*58e6ee5fSAndroid Build Coastguard Worker*Tzvetomir Stoyanov* <[email protected]> 153*58e6ee5fSAndroid Build Coastguard Worker-- 154*58e6ee5fSAndroid Build Coastguard WorkerREPORTING BUGS 155*58e6ee5fSAndroid Build Coastguard Worker-------------- 156*58e6ee5fSAndroid Build Coastguard WorkerReport bugs to <[email protected]> 157*58e6ee5fSAndroid Build Coastguard Worker 158*58e6ee5fSAndroid Build Coastguard WorkerLICENSE 159*58e6ee5fSAndroid Build Coastguard Worker------- 160*58e6ee5fSAndroid Build Coastguard Workerlibtracecmd is Free Software licensed under the GNU LGPL 2.1 161*58e6ee5fSAndroid Build Coastguard Worker 162*58e6ee5fSAndroid Build Coastguard WorkerRESOURCES 163*58e6ee5fSAndroid Build Coastguard Worker--------- 164*58e6ee5fSAndroid Build Coastguard Workerhttps://git.kernel.org/pub/scm/utils/trace-cmd/trace-cmd.git/ 165*58e6ee5fSAndroid Build Coastguard Worker 166*58e6ee5fSAndroid Build Coastguard WorkerCOPYING 167*58e6ee5fSAndroid Build Coastguard Worker------- 168*58e6ee5fSAndroid Build Coastguard WorkerCopyright \(C) 2020 VMware, Inc. Free use of this software is granted under 169*58e6ee5fSAndroid Build Coastguard Workerthe terms of the GNU Public License (GPL). 170