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); +}