All of lore.kernel.org
 help / color / mirror / Atom feed
From: Steven Rostedt <rostedt@goodmis.org>
To: Tzvetomir Stoyanov <tstoyanov@vmware.com>
Cc: linux-trace-devel@vger.kernel.org
Subject: Re: [PATCH v5 17/30] tools/lib/traceevent: Man pages for libtraceevent event print related APIs
Date: Tue, 30 Apr 2019 18:36:38 -0400	[thread overview]
Message-ID: <20190430183638.03277d83@gandalf.local.home> (raw)
In-Reply-To: <20190412133811.15878-18-tstoyanov@vmware.com>

On Fri, 12 Apr 2019 16:37:58 +0300
Tzvetomir Stoyanov <tstoyanov@vmware.com> wrote:

> Added new man pages, describing libtraceevent event print related APIs:
>   tep_print_event(),
>   tep_print_event_data(),
>   tep_event_info(),
>   tep_print_event_task(),
>   tep_print_event_time(),
>   tep_set_print_raw()

Yeah, here's another set that needs to change.

> 
> Signed-off-by: Tzvetomir Stoyanov <tstoyanov@vmware.com>
> ---
>  .../libtraceevent-event_print.txt             | 138 ++++++++++++++++++
>  1 file changed, 138 insertions(+)
>  create mode 100644 tools/lib/traceevent/Documentation/libtraceevent-event_print.txt
> 
> diff --git a/tools/lib/traceevent/Documentation/libtraceevent-event_print.txt b/tools/lib/traceevent/Documentation/libtraceevent-event_print.txt
> new file mode 100644
> index 000000000000..2a0dec71fd99
> --- /dev/null
> +++ b/tools/lib/traceevent/Documentation/libtraceevent-event_print.txt
> @@ -0,0 +1,138 @@
> +libtraceevent(3)
> +================
> +
> +NAME
> +----
> +tep_print_event, tep_print_event_data, tep_event_info, tep_print_event_task,
> +tep_print_event_time, tep_set_print_raw - Parses the data into the print format.
> +
> +SYNOPSIS
> +--------
> +[verse]
> +--
> +*#include <event-parse.h>*
> +*#include <trace-seq.h>*
> +
> +void *tep_print_event_time*(struct tep_handle pass:[*]_tep_, struct trace_seq pass:[*]_s_, struct tep_event pass:[*]_event_, struct tep_record pass:[*]record, bool _use_trace_clock_);

The "use_trace_clock" needs to go. It's probably best to pass in a
precision and divisor.

	tep_print_event_time(tep, &seq, event, record, precision, divisor)

For a counter we would just have:

	0, 0)

For full nsecs:

	9, 0)

For usecs:

	6, 1000)

Where we would take the number and do:

long long divisors[] = {
	1, 10, 100, 1000, 10000, 100000, 1000000,
	10000000, 100000000, 1000000000, 10000000000 }

	ts = record->ts;
	if (divisor)
		ts /= divisor;
	if (precision) {
		if (precision > (sizeof(divisors) / sizeof(divisors[0])) {
			warn();
			last = ts;
		} else {
			first = ts / divisors[precision];
			last = ts - first * divisors[precision];
		}
		trace_seq_printf(seq, " %5lu.%0*lu", first, precision, last);
	} else
		trace_seq_printf(seq, " %12lu", ts);

something like that.


> +void *tep_print_event_task*(struct tep_handle pass:[*]_tep_, struct trace_seq pass:[*]_s_, struct tep_event pass:[*]_event_, struct tep_record pass:[*]_record_);
> +void *tep_event_info*(struct trace_seq pass:[*]_s_, struct tep_event pass:[*]_event_, struct tep_record pass:[*]_record_);
> +void *tep_print_event_data*(struct tep_handle pass:[*]_tep_, struct trace_seq pass:[*]_s_, struct tep_event pass:[*]_event_, struct tep_record pass:[*]_record_);
> +void *tep_print_event*(struct tep_handle pass:[*]_tep_, struct trace_seq pass:[*]_s_, struct tep_record pass:[*]_record_, bool _use_trace_clock_);
> +void *tep_set_print_raw*(struct tep_handle pass:[*]_tep_, int _print_raw_);

I'm also thinking of modifying all of these to be the bare minimum of
what they do, and have the callers do the rest.

Let's hold off on these man pages. I think we are going to rewrite a
lot of this code first.

-- Steve


> +--
> +
> +DESCRIPTION
> +-----------
> +The _tep_print_event_time()_ function writes the timestamp of the given _record_
> +into the trace sequence _s_. The _tep_ argument is trace event parser context.
> +The _use_trace_clock_ argument indicates if the tep->trace_clock should be used
> +for parsing the timestamp.
> +
> +The _tep_print_event_task()_ function writes the task command, pid and CPU of
> +the given _record_ using the given _event_ information into the trace sequence
> +_s_. The _tep_ argument is trace event parser context.
> +
> +The _tep_event_info()_ function parses the raw data from the _record_ using
> +the given _event_ information and writes the print format into the trace
> +sequence _s_.
> +
> +The _tep_print_event_data()_ function writes the name of the _record_ using the
> +given _event_ information into the trace sequence _s_ and calls
> +_tep_event_info()_ to parse and write the raw data from the _record_. The _tep_
> +argument is trace event parser context.
> +
> +The _tep_print_event()_ function writes the _record_ information. It finds the
> +corresponding event and calls _tep_print_event_task()_, _tep_print_event_time()_
> +and _tep_print_event_data()_ to parse and write the information, into the trace
> +sequence _s_. The _tep_ argument is trace event parser context.
> +The _use_trace_clock_ argument indicates if the tep->trace_clock should be used
> +for parsing the timestamp.
> +
> +The _tep_set_print_raw()_ function forces event's information to be printed in
> +raw format. It changes the behavior of _tep_event_info()_ function. The _tep_
> +argument is trace event parser context. The _print_raw_ argument specifies
> +whether to print in raw format or not.
> +
> +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)
> +{
> +	struct tep_event *event;
> +
> +	/* print all event information */
> +	trace_seq_reset(&seq);
> +	tep_print_event(tep, &seq, record, TRUE);
> +
> +	event = tep_find_event_by_record(tep, record);
> +
> +	if (event != NULL) {
> +		/* print event timestamp */
> +		trace_seq_reset(&seq);
> +		tep_print_event_time(tep, &seq, event, record, TRUE);
> +
> +		/* print event task information */
> +		trace_seq_reset(&seq);
> +		tep_print_event_task(tep, &seq, event, record);
> +
> +		/* print event name and raw data */
> +		trace_seq_reset(&seq);
> +		tep_print_event_data(tep, &seq, event, record);
> +
> +		/* print event raw data */
> +		trace_seq_reset(&seq);
> +		tep_event_info(&seq, event, record);
> +
> +		/* print event raw data in raw format */
> +		trace_seq_reset(&seq);
> +		tep_set_print_raw(tep, 1);
> +		tep_event_info(&seq, event, record);
> +	}
> +}
> +...
> +--
> +
> +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


  reply	other threads:[~2019-04-30 22:36 UTC|newest]

Thread overview: 52+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2019-04-12 13:37 [PATCH v5 00/30] Libtraceevent MAN pages Tzvetomir Stoyanov
2019-04-12 13:37 ` [PATCH v5 01/30] tools/lib/traceevent: Implement libtraceevent man pages Tzvetomir Stoyanov
2019-04-24 20:27   ` Steven Rostedt
2019-04-25 14:47     ` [PATCH v6] " Tzvetomir Stoyanov
2019-04-12 13:37 ` [PATCH v5 02/30] tools/lib/traceevent: Add support for man pages with multiple names Tzvetomir Stoyanov
2019-04-12 13:37 ` [PATCH v5 03/30] tools/lib/traceevent: libtraceevent man pages for tep_handler related APIs Tzvetomir Stoyanov
2019-04-12 13:37 ` [PATCH v5 04/30] tools/lib/traceevent: Man page for header_page APIs Tzvetomir Stoyanov
2019-04-26  1:53   ` Steven Rostedt
2019-04-12 13:37 ` [PATCH v5 05/30] tools/lib/traceevent: Man page for get/set cpus APIs Tzvetomir Stoyanov
2019-04-12 13:37 ` [PATCH v5 06/30] tools/lib/traceevent: Man page for file endian APIs Tzvetomir Stoyanov
2019-04-12 13:37 ` [PATCH v5 07/30] tools/lib/traceevent: Man page for host " Tzvetomir Stoyanov
2019-04-26  2:01   ` Steven Rostedt
2019-04-12 13:37 ` [PATCH v5 08/30] tools/lib/traceevent: Man page for page size APIs Tzvetomir Stoyanov
2019-04-26  2:38   ` Steven Rostedt
2019-04-12 13:37 ` [PATCH v5 09/30] tools/lib/traceevent: Man page for tep_strerror() Tzvetomir Stoyanov
2019-04-26  2:41   ` Steven Rostedt
2019-04-12 13:37 ` [PATCH v5 10/30] tools/lib/traceevent: Man page for tep_register_trace_clock() Tzvetomir Stoyanov
2019-04-26  2:47   ` Steven Rostedt
2019-04-12 13:37 ` [PATCH v5 11/30] tools/lib/traceevent: Man pages for event handler APIs Tzvetomir Stoyanov
2019-04-26  2:49   ` Steven Rostedt
2019-04-12 13:37 ` [PATCH v5 12/30] tools/lib/traceevent: Man pages for function related libtraceevent APIs Tzvetomir Stoyanov
2019-04-30 22:02   ` Steven Rostedt
2019-04-12 13:37 ` [PATCH v5 13/30] tools/lib/traceevent: Man pages for registering print function Tzvetomir Stoyanov
2019-04-12 13:37 ` [PATCH v5 14/30] tools/lib/traceevent: Man page for tep_read_number() Tzvetomir Stoyanov
2019-04-12 13:37 ` [PATCH v5 15/30] tools/lib/traceevent: Man pages for event find APIs Tzvetomir Stoyanov
2019-04-30 22:08   ` Steven Rostedt
2019-04-12 13:37 ` [PATCH v5 16/30] tools/lib/traceevent: Man page for list events APIs Tzvetomir Stoyanov
2019-04-30 22:11   ` Steven Rostedt
2019-04-12 13:37 ` [PATCH v5 17/30] tools/lib/traceevent: Man pages for libtraceevent event print related APIs Tzvetomir Stoyanov
2019-04-30 22:36   ` Steven Rostedt [this message]
2019-04-12 13:37 ` [PATCH v5 18/30] tools/lib/traceevent: Man pages for libtraceevent event get APIs Tzvetomir Stoyanov
2019-04-12 13:38 ` [PATCH v5 19/30] tools/lib/traceevent: Man pages find field APIs Tzvetomir Stoyanov
2019-04-12 13:38 ` [PATCH v5 20/30] tools/lib/traceevent: Man pages get field value APIs Tzvetomir Stoyanov
2019-04-30 22:44   ` Steven Rostedt
2019-04-12 13:38 ` [PATCH v5 21/30] tools/lib/traceevent: Man pages for print field APIs Tzvetomir Stoyanov
2019-04-30 22:49   ` Steven Rostedt
2019-04-12 13:38 ` [PATCH v5 22/30] tools/lib/traceevent: Man page for tep_read_number_field() Tzvetomir Stoyanov
2019-04-30 23:58   ` Steven Rostedt
2019-04-12 13:38 ` [PATCH v5 23/30] tools/lib/traceevent: Man pages for event fields APIs Tzvetomir Stoyanov
2019-04-12 13:38 ` [PATCH v5 24/30] tools/lib/traceevent: Man pages for event filter APIs Tzvetomir Stoyanov
2019-05-01  0:52   ` Steven Rostedt
2019-04-12 13:38 ` [PATCH v5 25/30] tools/lib/traceevent: Man pages for parse event APIs Tzvetomir Stoyanov
2019-04-12 13:38 ` [PATCH v5 26/30] tools/lib/traceevent: Man page for tep_parse_header_page() Tzvetomir Stoyanov
2019-04-12 13:38 ` [PATCH v5 27/30] tools/lib/traceevent: Man pages for tep plugins APIs Tzvetomir Stoyanov
2019-05-01  1:38   ` Steven Rostedt
2019-05-02 15:23     ` Tzvetomir Stoyanov
2019-05-02 15:36       ` Steven Rostedt
2019-04-12 13:38 ` [PATCH v5 28/30] tools/lib/traceevent: Man pages for "latency format" APIs Tzvetomir Stoyanov
2019-05-01  1:39   ` Steven Rostedt
2019-04-12 13:38 ` [PATCH v5 29/30] tools/lib/traceevent: Man pages for APIs, used to extract common fields from a record Tzvetomir Stoyanov
2019-05-01  1:41   ` Steven Rostedt
2019-04-12 13:38 ` [PATCH v5 30/30] tools/lib/traceevent: Man pages for trace sequences APIs Tzvetomir Stoyanov

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20190430183638.03277d83@gandalf.local.home \
    --to=rostedt@goodmis.org \
    --cc=linux-trace-devel@vger.kernel.org \
    --cc=tstoyanov@vmware.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.