From: Ross Zwisler <zwisler@google.com>
To: Steven Rostedt <rostedt@goodmis.org>
Cc: linux-trace-devel@vger.kernel.org,
	Stevie Alvarez <stevie.6strings@gmail.com>
Subject: Re: [PATCH 2/9] libtraceeval: Add traceeval_iterator_query()
Date: Thu, 24 Aug 2023 13:57:22 -0600	[thread overview]
Message-ID: <20230824195722.GB110858@google.com> (raw)
In-Reply-To: <20230817222422.118568-3-rostedt@goodmis.org>
On Thu, Aug 17, 2023 at 06:24:15PM -0400, Steven Rostedt wrote:
> From: "Steven Rostedt (Google)" <rostedt@goodmis.org>
> 
> Add a query to the iterator that will return the values of the last entry
> that matches the keys returned by the last call of traceeval_iterator_next().
> 
> Signed-off-by: Steven Rostedt (Google) <rostedt@goodmis.org>
> ---
>  include/traceeval-hist.h |  2 ++
>  samples/task-eval.c      |  2 +-
>  src/histograms.c         | 30 ++++++++++++++++++++++++++++++
>  3 files changed, 33 insertions(+), 1 deletion(-)
> 
> diff --git a/include/traceeval-hist.h b/include/traceeval-hist.h
> index 0cee9bcbeb83..837a74f61a66 100644
> --- a/include/traceeval-hist.h
> +++ b/include/traceeval-hist.h
> @@ -186,5 +186,7 @@ int traceeval_iterator_sort_custom(struct traceeval_iterator *iter,
>  				   traceeval_cmp_fn sort_fn, void *data);
>  int traceeval_iterator_next(struct traceeval_iterator *iter,
>  			    const union traceeval_data **keys);
> +int traceeval_iterator_query(struct traceeval_iterator *iter,
> +			     const union traceeval_data **results);
>  
>  #endif /* __LIBTRACEEVAL_HIST_H__ */
> diff --git a/samples/task-eval.c b/samples/task-eval.c
> index 66d0c40dc0c8..18e07f44e11e 100644
> --- a/samples/task-eval.c
> +++ b/samples/task-eval.c
> @@ -836,7 +836,7 @@ static void display_processes(struct traceeval *teval,
>  		struct process_data *pdata = NULL;
>  		const char *comm = keys[0].cstring;
>  
> -		ret = traceeval_query(teval_data, keys, &results);
> +		ret = traceeval_iterator_query(iter, &results);
>  		if (ret < 0)
>  			pdie("Could not query iterator");
>  		if (ret < 1)
> diff --git a/src/histograms.c b/src/histograms.c
> index 66bdc1769985..4f603ce36c8c 100644
> --- a/src/histograms.c
> +++ b/src/histograms.c
> @@ -1306,3 +1306,33 @@ int traceeval_iterator_next(struct traceeval_iterator *iter,
>  	*keys = entry->keys;
>  	return 1;
>  }
> +
> +/**
> + * traceeval_iterator_query - return the results of the last entry in the iterator
> + * @iter: The iterator to retrieve the entry results from
> + * @results: The returned results of the last entry (if exists)
> + *
> + * This returns the @results of the values from the last instance of
> + * traceeval_iterator_next(). It is equivalent of calling:
> + *
> + * traceeval_query_size() with the keys returned by traceeval_iterator_next().
      traceeval_query()
> + *
> + * Except that it will always quickly return the last entry, whereas the
> + * traceeval_query_size() will reset the cached next_entry and do a full
      traceeval_query()
Aside from these you can add:
Reviewed-by: Ross Zwisler <zwisler@google.com>
I do agree that having a dedicated traceeval_iterator_results_release() would
be nice.
> + * lookup again.
> + *
> + * Returns 1 if another entry is returned, or 0 if not (or negative on error)
> + */
> +int traceeval_iterator_query(struct traceeval_iterator *iter,
> +			     const union traceeval_data **results)
> +{
> +	struct entry *entry;
> +
> +	if (iter->next < 1 || iter->next > iter->nr_entries)
> +		return 0;
> +
> +	entry = iter->entries[iter->next - 1];
> +	*results = entry->vals;
> +
> +	return 1;
> +}
> -- 
> 2.40.1
> 
next prev parent reply	other threads:[~2023-08-24 19:58 UTC|newest]
Thread overview: 25+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2023-08-17 22:24 [PATCH 0/9] libtraceeval: Even more updates! Steven Rostedt
2023-08-17 22:24 ` [PATCH 1/9] libtraceeval: Add check for updates to know to recreate iter array Steven Rostedt
2023-08-24 19:41   ` Ross Zwisler
2023-08-17 22:24 ` [PATCH 2/9] libtraceeval: Add traceeval_iterator_query() Steven Rostedt
2023-08-17 22:50   ` Steven Rostedt
2023-08-20 18:18   ` Stevie Alvarez
2023-08-21 14:33     ` Steven Rostedt
2023-08-24 19:57   ` Ross Zwisler [this message]
2023-08-17 22:24 ` [PATCH 3/9] libtraceeval: Add traceeval_iterator_stat() Steven Rostedt
2023-08-24 20:07   ` Ross Zwisler
2023-08-17 22:24 ` [PATCH 4/9] libtraceeval: Add traceeval_iterator_remove() Steven Rostedt
2023-08-24 20:19   ` Ross Zwisler
2023-08-24 20:23     ` Ross Zwisler
2023-09-27  9:51       ` Steven Rostedt
2023-09-27  9:09     ` Steven Rostedt
2023-08-17 22:24 ` [PATCH 5/9] libtraceeval histogram: Add type to traceeval_data and make it a structure Steven Rostedt
2023-08-24 21:09   ` Ross Zwisler
2023-08-17 22:24 ` [PATCH 6/9] libtraceveal: Add type checks to traceeval_data vals and keys Steven Rostedt
2023-08-24 21:23   ` Ross Zwisler
2023-08-17 22:24 ` [PATCH 7/9] libtraceeval: Add size checks to insert and query functions Steven Rostedt
2023-08-17 22:39   ` Steven Rostedt
2023-08-17 22:24 ` [PATCH 8/9] libtraceeval: Add checks to traceeval_insert() and query() Steven Rostedt
2023-08-24 21:36   ` Ross Zwisler
2023-08-17 22:24 ` [PATCH 9/9] libtraceeval: Only do stats on values marked with the STAT flag Steven Rostedt
2023-08-24 22:02   ` Ross Zwisler
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=20230824195722.GB110858@google.com \
    --to=zwisler@google.com \
    --cc=linux-trace-devel@vger.kernel.org \
    --cc=rostedt@goodmis.org \
    --cc=stevie.6strings@gmail.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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).