spdlog
Loading...
Searching...
No Matches
formatter-bench.cpp
Go to the documentation of this file.
1//
2// Copyright(c) 2018 Gabi Melman.
3// Distributed under the MIT License (http://opensource.org/licenses/MIT)
4//
5
6#include "benchmark/benchmark.h"
7
8#include "spdlog/spdlog.h"
10
11void bench_formatter(benchmark::State &state, std::string pattern)
12{
13 auto formatter = spdlog::details::make_unique<spdlog::pattern_formatter>(pattern);
15 std::string logger_name = "logger-name";
16 const char *text = "Hello. This is some message with length of 80 ";
17
18 spdlog::source_loc source_loc{"a/b/c/d/myfile.cpp", 123, "some_func()"};
19 spdlog::details::log_msg msg(source_loc, logger_name, spdlog::level::info, text);
20
21 for (auto _ : state)
22 {
23 dest.clear();
24 formatter->format(msg, dest);
25 benchmark::DoNotOptimize(dest);
26 }
27}
28
30{
31 // basic patterns(single flag)
32 std::string all_flags = "+vtPnlLaAbBcCYDmdHIMSefFprRTXzEisg@luioO%";
33 std::vector<std::string> basic_patterns;
34 for (auto &flag : all_flags)
35 {
36 auto pattern = std::string("%") + flag;
37 benchmark::RegisterBenchmark(pattern.c_str(), &bench_formatter, pattern);
38
39 // pattern = std::string("%16") + flag;
40 // benchmark::RegisterBenchmark(pattern.c_str(), &bench_formatter, pattern);
41 //
42 // // bench center padding
43 // pattern = std::string("%=16") + flag;
44 // benchmark::RegisterBenchmark(pattern.c_str(), &bench_formatter, pattern);
45 }
46
47 // complex patterns
48 std::vector<std::string> patterns = {
49 "[%D %X] [%l] [%n] %v",
50 "[%Y-%m-%d %H:%M:%S.%e] [%l] [%n] %v",
51 "[%Y-%m-%d %H:%M:%S.%e] [%l] [%n] [%t] %v",
52 };
53 for (auto &pattern : patterns)
54 {
55 benchmark::RegisterBenchmark(pattern.c_str(), &bench_formatter, pattern)->Iterations(2500000);
56 }
57}
58
59int main(int argc, char *argv[])
60{
61
62 spdlog::set_pattern("[%^%l%$] %v");
63 if (argc != 2)
64 {
65 spdlog::error("Usage: {} <pattern> (or \"all\" to bench all)", argv[0]);
66 exit(1);
67 }
68
69 std::string pattern = argv[1];
70 if (pattern == "all")
71 {
73 }
74 else
75 {
76 benchmark::RegisterBenchmark(pattern.c_str(), &bench_formatter, pattern);
77 }
78 benchmark::Initialize(&argc, argv);
79 benchmark::RunSpecifiedBenchmarks();
80}
T c_str(T... args)
int main(int argc, char *argv[])
void bench_formatter(benchmark::State &state, std::string pattern)
void bench_formatters()
void error(fmt::format_string< Args... > fmt, Args &&...args)
Definition spdlog.h:167
SPDLOG_INLINE void set_pattern(std::string pattern, pattern_time_type time_type)
Definition spdlog-inl.h:30
fmt::basic_memory_buffer< char, 250 > memory_buf_t
Definition common.h:116