mirror of
https://github.com/NVIDIA/nvbench.git
synced 2026-04-20 14:58:54 +00:00
Clean up some virtual interfaces.
- nvbench::benchmark doesn't add state, no need to override the destructor. - nvbench::printer_base's virtual API should support decoration, not just overriding. Making the virtual API protected instead of private allows derived classes to extend base class behavior. - nvbench::printer_base needs a virtual destructor. - Fix a bug in nvbench::printer_multiplex that caused the new `get_[total|completed]_state_count()` methods to always return 0.
This commit is contained in:
@@ -64,11 +64,6 @@ struct benchmark final : public benchmark_base
|
||||
: benchmark_base(type_axes{})
|
||||
{}
|
||||
|
||||
// Note that this inline virtual dtor may cause vtable issues if linking
|
||||
// benchmark TUs together. That's not a likely scenario, so we'll deal with
|
||||
// that if it comes up.
|
||||
~benchmark() override = default;
|
||||
|
||||
private:
|
||||
std::unique_ptr<benchmark_base> do_clone() const final
|
||||
{
|
||||
|
||||
@@ -30,7 +30,7 @@ struct csv_printer : nvbench::printer_base
|
||||
{
|
||||
using printer_base::printer_base;
|
||||
|
||||
private:
|
||||
protected:
|
||||
// Virtual API from printer_base:
|
||||
void do_print_benchmark_results(const benchmark_vector &benches) override;
|
||||
};
|
||||
|
||||
@@ -30,7 +30,7 @@ struct json_printer : nvbench::printer_base
|
||||
{
|
||||
using printer_base::printer_base;
|
||||
|
||||
private:
|
||||
protected:
|
||||
// Virtual API from printer_base:
|
||||
void do_print_benchmark_results(const benchmark_vector &benches) override;
|
||||
};
|
||||
|
||||
@@ -50,7 +50,7 @@ struct markdown_printer : nvbench::printer_base
|
||||
[[nodiscard]] bool get_color() const { return m_color; }
|
||||
/*!@}*/
|
||||
|
||||
private:
|
||||
protected:
|
||||
// Virtual API from printer_base:
|
||||
void do_print_device_info() override;
|
||||
void do_print_log_preamble() override;
|
||||
|
||||
@@ -56,7 +56,7 @@ struct printer_base
|
||||
* Construct a new printer_base that will write to ostream.
|
||||
*/
|
||||
explicit printer_base(std::ostream &ostream);
|
||||
~printer_base();
|
||||
virtual ~printer_base();
|
||||
|
||||
// move-only
|
||||
printer_base(const printer_base &) = delete;
|
||||
@@ -141,12 +141,6 @@ struct printer_base
|
||||
/*!@}*/
|
||||
|
||||
protected:
|
||||
std::ostream &m_ostream;
|
||||
|
||||
std::size_t m_completed_state_count{};
|
||||
std::size_t m_total_state_count{};
|
||||
|
||||
private:
|
||||
// Implementation hooks for subclasses:
|
||||
virtual void do_print_device_info() {}
|
||||
virtual void do_print_log_preamble() {}
|
||||
@@ -156,24 +150,17 @@ private:
|
||||
virtual void do_print_benchmark_list(const benchmark_vector &) {}
|
||||
virtual void do_print_benchmark_results(const benchmark_vector &) {}
|
||||
|
||||
virtual void do_set_completed_state_count(std::size_t states)
|
||||
{
|
||||
m_completed_state_count = states;
|
||||
}
|
||||
virtual void do_add_completed_state() { ++m_completed_state_count; }
|
||||
[[nodiscard]] virtual std::size_t do_get_completed_state_count() const
|
||||
{
|
||||
return m_completed_state_count;
|
||||
}
|
||||
virtual void do_set_completed_state_count(std::size_t states);
|
||||
virtual void do_add_completed_state();
|
||||
[[nodiscard]] virtual std::size_t do_get_completed_state_count() const;
|
||||
|
||||
virtual void do_set_total_state_count(std::size_t states)
|
||||
{
|
||||
m_total_state_count = states;
|
||||
}
|
||||
[[nodiscard]] virtual std::size_t do_get_total_state_count() const
|
||||
{
|
||||
return m_total_state_count;
|
||||
}
|
||||
virtual void do_set_total_state_count(std::size_t states);
|
||||
[[nodiscard]] virtual std::size_t do_get_total_state_count() const;
|
||||
|
||||
std::ostream &m_ostream;
|
||||
|
||||
std::size_t m_completed_state_count{};
|
||||
std::size_t m_total_state_count{};
|
||||
};
|
||||
|
||||
} // namespace nvbench
|
||||
|
||||
@@ -30,4 +30,26 @@ printer_base::printer_base(std::ostream &ostream)
|
||||
// Defined here to keep <ostream> out of the header
|
||||
printer_base::~printer_base() = default;
|
||||
|
||||
void printer_base::do_set_completed_state_count(std::size_t states)
|
||||
{
|
||||
m_completed_state_count = states;
|
||||
}
|
||||
|
||||
void printer_base::do_add_completed_state() { ++m_completed_state_count; }
|
||||
|
||||
std::size_t printer_base::do_get_completed_state_count() const
|
||||
{
|
||||
return m_completed_state_count;
|
||||
}
|
||||
|
||||
void printer_base::do_set_total_state_count(std::size_t states)
|
||||
{
|
||||
m_total_state_count = states;
|
||||
}
|
||||
|
||||
std::size_t printer_base::do_get_total_state_count() const
|
||||
{
|
||||
return m_total_state_count;
|
||||
}
|
||||
|
||||
} // namespace nvbench
|
||||
|
||||
@@ -31,7 +31,6 @@ namespace nvbench
|
||||
*/
|
||||
struct printer_multiplex : nvbench::printer_base
|
||||
{
|
||||
|
||||
printer_multiplex();
|
||||
|
||||
template <typename Format, typename... Ts>
|
||||
@@ -46,7 +45,7 @@ struct printer_multiplex : nvbench::printer_base
|
||||
return m_printers.size();
|
||||
}
|
||||
|
||||
private:
|
||||
protected:
|
||||
void do_print_device_info() override;
|
||||
void do_print_log_preamble() override;
|
||||
void do_print_log_epilogue() override;
|
||||
@@ -54,7 +53,6 @@ private:
|
||||
void do_log_run_state(const nvbench::state &) override;
|
||||
void do_print_benchmark_list(const benchmark_vector &benches) override;
|
||||
void do_print_benchmark_results(const benchmark_vector &benches) override;
|
||||
|
||||
void do_set_completed_state_count(std::size_t states) override;
|
||||
void do_add_completed_state() override;
|
||||
void do_set_total_state_count(std::size_t states) override;
|
||||
|
||||
@@ -85,6 +85,7 @@ void printer_multiplex::do_print_benchmark_results(
|
||||
}
|
||||
void printer_multiplex::do_set_completed_state_count(std::size_t states)
|
||||
{
|
||||
printer_base::do_set_completed_state_count(states);
|
||||
for (auto &format_ptr : m_printers)
|
||||
{
|
||||
format_ptr->set_completed_state_count(states);
|
||||
@@ -93,6 +94,7 @@ void printer_multiplex::do_set_completed_state_count(std::size_t states)
|
||||
|
||||
void printer_multiplex::do_add_completed_state()
|
||||
{
|
||||
printer_base::do_add_completed_state();
|
||||
for (auto &format_ptr : m_printers)
|
||||
{
|
||||
format_ptr->add_completed_state();
|
||||
@@ -101,6 +103,7 @@ void printer_multiplex::do_add_completed_state()
|
||||
|
||||
void printer_multiplex::do_set_total_state_count(std::size_t states)
|
||||
{
|
||||
printer_base::do_set_total_state_count(states);
|
||||
for (auto &format_ptr : m_printers)
|
||||
{
|
||||
format_ptr->set_total_state_count(states);
|
||||
|
||||
Reference in New Issue
Block a user