diff --git a/bench/CMakeLists.txt b/bench/CMakeLists.txt index 1a3856ac..31636d66 100644 --- a/bench/CMakeLists.txt +++ b/bench/CMakeLists.txt @@ -42,8 +42,8 @@ set(CMAKE_CXX_STANDARD_LIBRARIES -lbenchmark) target_link_libraries(latency spdlog::spdlog Threads::Threads) -add_executable(padder_bench padder_bench.cpp) +add_executable(formatter-bench formatter-bench.cpp) set(CMAKE_CXX_STANDARD_LIBRARIES -lbenchmark) -target_link_libraries(padder_bench spdlog::spdlog Threads::Threads) +target_link_libraries(formatter-bench spdlog::spdlog Threads::Threads) file(MAKE_DIRECTORY "${CMAKE_CURRENT_BINARY_DIR}/logs") diff --git a/bench/Makefile b/bench/Makefile index 181f4664..868a7335 100644 --- a/bench/Makefile +++ b/bench/Makefile @@ -3,7 +3,7 @@ CXXFLAGS = -march=native -Wall -Wextra -pedantic -Wconversion -std=c++11 -pthrea CXX_RELEASE_FLAGS = -O3 -flto -Wl,--no-as-needed -binaries=bench.cpp async_bench latency padder_bench +binaries=bench async_bench latency formatter-bench all: $(binaries) @@ -19,8 +19,8 @@ latency: latency.cpp $(CXX) latency.cpp -o latency $(CXXFLAGS) $(CXX_RELEASE_FLAGS) -lbenchmark -padder_bench: padder_bench.cpp - $(CXX) padder_bench.cpp -o padder_bench $(CXXFLAGS) $(CXX_RELEASE_FLAGS) -lbenchmark +formatter-bench: formatter-bench.cpp + $(CXX) formatter-bench.cpp -o formatter-bench $(CXXFLAGS) $(CXX_RELEASE_FLAGS) -lbenchmark .PHONY: clean diff --git a/bench/padder_bench.cpp b/bench/formatter-bench.cpp similarity index 51% rename from bench/padder_bench.cpp rename to bench/formatter-bench.cpp index cbb0e67f..0dbf6d82 100644 --- a/bench/padder_bench.cpp +++ b/bench/formatter-bench.cpp @@ -16,16 +16,57 @@ void bench_scoped_pad(benchmark::State &state, size_t wrapped_size, spdlog::deta { spdlog::details::scoped_pad p(wrapped_size, padinfo, dest); benchmark::DoNotOptimize(p); + dest.clear(); } - // if(dest.size() != (padinfo.width_-wrapped_size)) - // { - // printf("NOT GOOD wrapped_size=%zu\t padinfo.width= %zu\tdest = %zu\n", wrapped_size, padinfo.width_, dest.size()); - // } - dest.clear(); } } -int main(int argc, char *argv[]) + +void bench_formatter(benchmark::State &state, std::string pattern) +{ + auto formatter = spdlog::details::make_unique(pattern); + fmt::memory_buffer dest; + std::string logger_name = "logger-name"; + const char* text = "Hello. This is some message with length of 80 "; + + + spdlog::details::log_msg msg(&logger_name, spdlog::level::info, text); +// formatter->format(msg, dest); +// printf("%s\n", fmt::to_string(dest).c_str()); + + for (auto _ : state) + { + dest.clear(); + formatter->format(msg, dest); + benchmark::DoNotOptimize(dest); + } +} + +void bench_formatters() +{ + // basic patterns(single flag) + std::string all_flags = "+vtPnlLaAbBcCYDmdHIMSefFprRTXzEi%"; + std::vector basic_patterns; + for(auto &flag:all_flags) + { + auto pattern = std::string("%") + flag; + benchmark::RegisterBenchmark(pattern.c_str(), bench_formatter, pattern); + + } + + // complex patterns + std::vector patterns = { + "[%D %X] [%l] [%n] %v", + "[%Y-%m-%d %H:%M:%S.%e] [%l] [%n] %v", + "[%Y-%m-%d %H:%M:%S.%e] [%l] [%n] [%t] %v", + }; + for(auto &pattern:patterns) + { + benchmark::RegisterBenchmark(pattern.c_str(), bench_formatter, pattern); + } +} + +void bench_padders() { using spdlog::details::padding_info; std::vector sizes = {0, 2, 4, 8, 16, 32, 64, 128}; @@ -45,7 +86,15 @@ int main(int argc, char *argv[]) title = "scoped_pad::center::" + std::to_string(size); benchmark::RegisterBenchmark(title.c_str(), bench_scoped_pad, wrapped_size, padding_info(padding_size, padding_info::center)); } +} + + +int main(int argc, char *argv[]) +{ + bench_formatters(); + //bench_padders(); benchmark::Initialize(&argc, argv); benchmark::RunSpecifiedBenchmarks(); } +