Added formatter becnhmarks
This commit is contained in:
		
							parent
							
								
									7ce8ae72e8
								
							
						
					
					
						commit
						11d83515dd
					
				@ -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")
 | 
			
		||||
 | 
			
		||||
@ -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
 | 
			
		||||
 | 
			
		||||
@ -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<spdlog::pattern_formatter>(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<std::string> basic_patterns;
 | 
			
		||||
    for(auto &flag:all_flags)
 | 
			
		||||
    {
 | 
			
		||||
        auto pattern = std::string("%") + flag;
 | 
			
		||||
        benchmark::RegisterBenchmark(pattern.c_str(), bench_formatter, pattern);
 | 
			
		||||
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    // complex patterns
 | 
			
		||||
    std::vector<std::string> 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<size_t> 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();
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user