xref: /aosp_15_r20/external/fmtlib/test/perf-sanity.cc (revision 5c90c05cd622c0a81b57953a4d343e0e489f2e08)
1*5c90c05cSAndroid Build Coastguard Worker // A quick and dirty performance test.
2*5c90c05cSAndroid Build Coastguard Worker // For actual benchmarks see https://github.com/fmtlib/format-benchmark.
3*5c90c05cSAndroid Build Coastguard Worker 
4*5c90c05cSAndroid Build Coastguard Worker #include <atomic>
5*5c90c05cSAndroid Build Coastguard Worker #include <chrono>
6*5c90c05cSAndroid Build Coastguard Worker #include <iterator>
7*5c90c05cSAndroid Build Coastguard Worker 
8*5c90c05cSAndroid Build Coastguard Worker #include "fmt/format.h"
9*5c90c05cSAndroid Build Coastguard Worker 
main()10*5c90c05cSAndroid Build Coastguard Worker int main() {
11*5c90c05cSAndroid Build Coastguard Worker   const int n = 10000000;
12*5c90c05cSAndroid Build Coastguard Worker 
13*5c90c05cSAndroid Build Coastguard Worker   auto start = std::chrono::steady_clock::now();
14*5c90c05cSAndroid Build Coastguard Worker   for (int iteration = 0; iteration < n; ++iteration) {
15*5c90c05cSAndroid Build Coastguard Worker     auto buf = fmt::memory_buffer();
16*5c90c05cSAndroid Build Coastguard Worker     fmt::format_to(std::back_inserter(buf),
17*5c90c05cSAndroid Build Coastguard Worker                    "Hello, {}. The answer is {} and {}.", 1, 2345, 6789);
18*5c90c05cSAndroid Build Coastguard Worker   }
19*5c90c05cSAndroid Build Coastguard Worker   std::atomic_signal_fence(std::memory_order_acq_rel);  // Clobber memory.
20*5c90c05cSAndroid Build Coastguard Worker   auto end = std::chrono::steady_clock::now();
21*5c90c05cSAndroid Build Coastguard Worker 
22*5c90c05cSAndroid Build Coastguard Worker   // Print time in milliseconds.
23*5c90c05cSAndroid Build Coastguard Worker   std::chrono::duration<double> duration = end - start;
24*5c90c05cSAndroid Build Coastguard Worker   fmt::print("{:.1f}\n", duration.count() * 1000);
25*5c90c05cSAndroid Build Coastguard Worker }
26