diff --git a/test/perf/perf.cc b/test/perf/perf.cc index 1e08519677..389e94284c 100644 --- a/test/perf/perf.cc +++ b/test/perf/perf.cc @@ -30,11 +30,12 @@ void scheduling_latency_measurer::schedule_tick() { })); } -std::ostream& operator<<(std::ostream& out, const scheduling_latency_measurer& slm) { +auto fmt::formatter::format(const scheduling_latency_measurer& slm, fmt::format_context& ctx) const + -> decltype(ctx.out()) { auto to_ms = [] (int64_t nanos) { return float(nanos) / 1e6; }; - return out << fmt::format("{{count: {}, " + return fmt::format_to(ctx.out(), "{{count: {}, " //"min: {:.6f} [ms], " //"50%: {:.6f} [ms], " //"90%: {:.6f} [ms], " @@ -48,11 +49,10 @@ std::ostream& operator<<(std::ostream& out, const scheduling_latency_measurer& s to_ms(slm.max().count())); } -std::ostream& -operator<<(std::ostream& os, const perf_result& result) { - fmt::print(os, "{:.2f} tps ({:5.1f} allocs/op, {:5.1f} tasks/op, {:7.0f} insns/op, {:8} errors)", +auto fmt::formatter::format(const perf_result& result, fmt::format_context& ctx) const + -> decltype(ctx.out()) { + return fmt::format_to(ctx.out(), "{:.2f} tps ({:5.1f} allocs/op, {:5.1f} tasks/op, {:7.0f} insns/op, {:8} errors)", result.throughput, result.mallocs_per_op, result.tasks_per_op, result.instructions_per_op, result.errors); - return os; } aio_writes_result_mixin::aio_writes_result_mixin() diff --git a/test/perf/perf.hh b/test/perf/perf.hh index ca1418666b..6ca495c2a3 100644 --- a/test/perf/perf.hh +++ b/test/perf/perf.hh @@ -157,8 +157,6 @@ struct perf_result { uint64_t errors; }; -std::ostream& operator<<(std::ostream& os, const perf_result& result); - // Use to make a perf_result with aio_writes added. Need to give "update" as // update-func to time_parallel_ex to make it work. struct aio_writes_result_mixin { @@ -213,7 +211,7 @@ std::vector time_parallel_ex(Func func, unsigned concurrency_per_core, int uf(result, stats); - std::cout << result << std::endl; + fmt::print("{}\n", result); results.emplace_back(result); } return results; @@ -282,3 +280,11 @@ public: }; } // namespace perf + +template <> struct fmt::formatter : fmt::formatter { + auto format(const scheduling_latency_measurer&, fmt::format_context& ctx) const -> decltype(ctx.out()); +}; + +template <> struct fmt::formatter : fmt::formatter { + auto format(const perf_result&, fmt::format_context& ctx) const -> decltype(ctx.out()); +};