From 189b0f092069b767d2f02e7e85e7c00939b46ba3 Mon Sep 17 00:00:00 2001 From: Konrad Sztyber Date: Tue, 14 Sep 2021 16:09:40 +0200 Subject: [PATCH] lib/trace_parser: method for retrieving entry count Signed-off-by: Konrad Sztyber Change-Id: If5f1b1bea0d30419be46e704ddd7c2f9556b4627 Reviewed-on: https://review.spdk.io/gerrit/c/spdk/spdk/+/9498 Tested-by: SPDK CI Jenkins Community-CI: Broadcom CI Reviewed-by: Krzysztof Karas Reviewed-by: Aleksey Marchuk Reviewed-by: Jim Harris --- include/spdk/trace_parser.h | 10 ++++++++++ lib/trace_parser/spdk_trace_parser.map | 1 + lib/trace_parser/trace.cpp | 22 ++++++++++++++++++++++ 3 files changed, 33 insertions(+) diff --git a/include/spdk/trace_parser.h b/include/spdk/trace_parser.h index de9b4b4aa..5cf371294 100644 --- a/include/spdk/trace_parser.h +++ b/include/spdk/trace_parser.h @@ -135,6 +135,16 @@ struct spdk_trace_parser_entry { bool spdk_trace_parser_next_entry(struct spdk_trace_parser *parser, struct spdk_trace_parser_entry *entry); +/** + * Return the number of entries recorded on a given core. + * + * \param parser Parser object to be used. + * \param lcore Logical core number. + * + * \return Number of entries. + */ +uint64_t spdk_trace_parser_get_entry_count(const struct spdk_trace_parser *parser, uint16_t lcore); + #ifdef __cplusplus } #endif diff --git a/lib/trace_parser/spdk_trace_parser.map b/lib/trace_parser/spdk_trace_parser.map index 1c5df9ea2..be54af7e3 100644 --- a/lib/trace_parser/spdk_trace_parser.map +++ b/lib/trace_parser/spdk_trace_parser.map @@ -7,6 +7,7 @@ spdk_trace_parser_get_flags; spdk_trace_parser_get_tsc_offset; spdk_trace_parser_next_entry; + spdk_trace_parser_get_entry_count; local: *; }; diff --git a/lib/trace_parser/trace.cpp b/lib/trace_parser/trace.cpp index 3c63f02f5..f165351ff 100644 --- a/lib/trace_parser/trace.cpp +++ b/lib/trace_parser/trace.cpp @@ -89,6 +89,7 @@ struct spdk_trace_parser { const spdk_trace_flags *flags() const { return &_histories->flags; } uint64_t tsc_offset() const { return _tsc_offset; } bool next_entry(spdk_trace_parser_entry *entry); + uint64_t entry_count(uint16_t lcore) const; private: spdk_trace_entry_buffer *get_next_buffer(spdk_trace_entry_buffer *buf, uint16_t lcore); bool build_arg(argument_context *argctx, const spdk_trace_argument *arg, int argid, @@ -105,6 +106,21 @@ private: entry_map::iterator _iter; }; +uint64_t +spdk_trace_parser::entry_count(uint16_t lcore) const +{ + spdk_trace_history *history; + + if (lcore >= SPDK_TRACE_MAX_LCORE) { + return 0; + } + + history = spdk_get_per_lcore_history(_histories, lcore); + assert(history); + + return history->num_entries; +} + spdk_trace_entry_buffer * spdk_trace_parser::get_next_buffer(spdk_trace_entry_buffer *buf, uint16_t lcore) { @@ -380,3 +396,9 @@ spdk_trace_parser_next_entry(struct spdk_trace_parser *parser, { return parser->next_entry(entry); } + +uint64_t +spdk_trace_parser_get_entry_count(const struct spdk_trace_parser *parser, uint16_t lcore) +{ + return parser->entry_count(lcore); +}