libtraceevent(3)
================

NAME
----
tep_print_event - Writes event information into a trace sequence.

SYNOPSIS
--------
[verse]
--
*#include <event-parse.h>*
*#include <trace-seq.h>*

void *tep_print_event*(struct tep_handle pass:[*]_tep_, struct trace_seqpass:[*]_s_, struct tep_record pass:[*]_record_, const char pass:[*]_fmt_, _..._)
--

DESCRIPTION
-----------

The _tep_print_event()_ function parses the event information of the given
_record_ and writes it into the trace sequence _s_, according to the format
string _fmt_. The desired information is specified after the format string.
The _fmt_ is printf-like format string, following arguments are supported:
[verse]
--
	TEP_PRINT_PID, "%d"  - PID of the event.
	TEP_PRINT_CPU, "%d"  - Event CPU.
	TEP_PRINT_COMM, "%s" - Event command string.
	TEP_PRINT_NAME, "%s" - Event name.
	TEP_PRINT_LATENCY, "%s" - Latency of the event. It prints 4 or more
			fields - interrupt state, scheduling state,
			current context, and preemption count.
			Field 1 is the interrupt enabled state:
				d : Interrupts are disabled
				. : Interrupts are enabled
				X : The architecture does not support this
				    information
			Field 2 is the "need resched" state.
				N : The task is set to call the scheduler when
				    possible, as another higher priority task
				    may need to be scheduled in.
				. : The task is not set to call the scheduler.
			Field 3 is the context state.
				. : Normal context
				s : Soft interrupt context
				h : Hard interrupt context
				H : Hard interrupt context which triggered
				    during soft interrupt context.
				z : NMI context
				Z : NMI context which triggered during hard
				    interrupt context
			Field 4 is the preemption count.
				. : The preempt count is zero.
			On preemptible kernels (where the task can be scheduled
			out in arbitrary locations while in kernel context), the
			preempt count, when non zero, will prevent the kernel
			from scheduling out the current task. The preempt count
			number is displayed when it is not zero.
			Depending on the kernel, it may show other fields
			(lock depth, or migration disabled, which are unique to
			specialized kernels).
	TEP_PRINT_TIME, %d - event time stamp. A divisor and precision can be
			specified as part of this format string:
			"%precision.divisord". Example:
			"%3.1000d" - divide the time by 1000 and print the first
			3 digits before the dot. Thus, the time stamp
			"123456000" will be printed as "123.456"
	TEP_PRINT_INFO, "%s" - event information.
	TEP_PRINT_INFO_RAW, "%s" - event information, in raw format.

--
EXAMPLE
-------
[source,c]
--
#include <event-parse.h>
#include <trace-seq.h>
...
struct trace_seq seq;
trace_seq_init(&seq);
struct tep_handle *tep = tep_alloc();
...
void print_my_event(struct tep_record *record)
{
	trace_seq_reset(&seq);
	tep_print_event(tep, s, record, "%16s-%-5d [%03d] %s %6.1000d %s %s",
			TEP_PRINT_COMM, TEP_PRINT_PID, TEP_PRINT_CPU,
			TEP_PRINT_LATENCY, TEP_PRINT_TIME, TEP_PRINT_NAME,
			TEP_PRINT_INFO);
}
...
--

FILES
-----
[verse]
--
*event-parse.h*
	Header file to include in order to have access to the library APIs.
*trace-seq.h*
	Header file to include in order to have access to trace sequences related APIs.
	Trace sequences are used to allow a function to call several other functions
	to create a string of data to use.
*-ltraceevent*
	Linker switch to add when building a program that uses the library.
--

SEE ALSO
--------
_libtraceevent(3)_, _trace-cmd(1)_

AUTHOR
------
[verse]
--
*Steven Rostedt* <rostedt@goodmis.org>, author of *libtraceevent*.
*Tzvetomir Stoyanov* <tz.stoyanov@gmail.com>, author of this man page.
--
REPORTING BUGS
--------------
Report bugs to  <linux-trace-devel@vger.kernel.org>

LICENSE
-------
libtraceevent is Free Software licensed under the GNU LGPL 2.1

RESOURCES
---------
https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
