162306a36Sopenharmony_ci/* SPDX-License-Identifier: GPL-2.0 */
262306a36Sopenharmony_ci#ifndef __PERF_STREAM_H
362306a36Sopenharmony_ci#define __PERF_STREAM_H
462306a36Sopenharmony_ci
562306a36Sopenharmony_ci#include "callchain.h"
662306a36Sopenharmony_ci
762306a36Sopenharmony_cistruct stream {
862306a36Sopenharmony_ci	struct callchain_node	*cnode;
962306a36Sopenharmony_ci	struct callchain_node	*pair_cnode;
1062306a36Sopenharmony_ci};
1162306a36Sopenharmony_ci
1262306a36Sopenharmony_cistruct evsel_streams {
1362306a36Sopenharmony_ci	struct stream		*streams;
1462306a36Sopenharmony_ci	int			nr_streams_max;
1562306a36Sopenharmony_ci	int			nr_streams;
1662306a36Sopenharmony_ci	int			evsel_idx;
1762306a36Sopenharmony_ci	u64			streams_hits;
1862306a36Sopenharmony_ci};
1962306a36Sopenharmony_ci
2062306a36Sopenharmony_cistruct evlist_streams {
2162306a36Sopenharmony_ci	struct evsel_streams	*ev_streams;
2262306a36Sopenharmony_ci	int			nr_evsel;
2362306a36Sopenharmony_ci};
2462306a36Sopenharmony_ci
2562306a36Sopenharmony_cistruct evlist;
2662306a36Sopenharmony_ci
2762306a36Sopenharmony_civoid evlist_streams__delete(struct evlist_streams *els);
2862306a36Sopenharmony_ci
2962306a36Sopenharmony_cistruct evlist_streams *evlist__create_streams(struct evlist *evlist,
3062306a36Sopenharmony_ci					      int nr_streams_max);
3162306a36Sopenharmony_ci
3262306a36Sopenharmony_cistruct evsel_streams *evsel_streams__entry(struct evlist_streams *els,
3362306a36Sopenharmony_ci					   int evsel_idx);
3462306a36Sopenharmony_ci
3562306a36Sopenharmony_civoid evsel_streams__match(struct evsel_streams *es_base,
3662306a36Sopenharmony_ci			  struct evsel_streams *es_pair);
3762306a36Sopenharmony_ci
3862306a36Sopenharmony_civoid evsel_streams__report(struct evsel_streams *es_base,
3962306a36Sopenharmony_ci			   struct evsel_streams *es_pair);
4062306a36Sopenharmony_ci
4162306a36Sopenharmony_ci#endif /* __PERF_STREAM_H */
42