mirror of
https://github.com/gabime/spdlog.git
synced 2024-12-25 01:51:38 +08:00
Optimized nano seconds formatting
This commit is contained in:
parent
11d83515dd
commit
4a34cd0662
@ -50,8 +50,7 @@ void bench_formatters()
|
||||
for(auto &flag:all_flags)
|
||||
{
|
||||
auto pattern = std::string("%") + flag;
|
||||
benchmark::RegisterBenchmark(pattern.c_str(), bench_formatter, pattern);
|
||||
|
||||
benchmark::RegisterBenchmark(pattern.c_str(), bench_formatter, pattern)->Iterations(2500000);
|
||||
}
|
||||
|
||||
// complex patterns
|
||||
@ -62,7 +61,7 @@ void bench_formatters()
|
||||
};
|
||||
for(auto &pattern:patterns)
|
||||
{
|
||||
benchmark::RegisterBenchmark(pattern.c_str(), bench_formatter, pattern);
|
||||
benchmark::RegisterBenchmark(pattern.c_str(), bench_formatter, pattern)->Iterations(2500000);
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -110,6 +110,19 @@ inline void pad6(size_t n, fmt::basic_memory_buffer<char, Buffer_Size> &dest)
|
||||
pad3(static_cast<int>(n % 1000), dest);
|
||||
}
|
||||
|
||||
|
||||
template<size_t Buffer_Size>
|
||||
inline void pad9(size_t n, fmt::basic_memory_buffer<char, Buffer_Size> &dest)
|
||||
{
|
||||
if (n > 99999999)
|
||||
{
|
||||
append_int(n, dest);
|
||||
return;
|
||||
}
|
||||
pad6(static_cast<int>(n / 1000), dest);
|
||||
pad3(static_cast<int>(n % 1000), dest);
|
||||
}
|
||||
|
||||
// return fraction of a second of the given time_point.
|
||||
// e.g.
|
||||
// fraction<std::milliseconds>(tp) -> will return the millis part of the second
|
||||
|
@ -486,7 +486,8 @@ public:
|
||||
scoped_pad p(field_size, padinfo_, dest);
|
||||
|
||||
auto ns = fmt_helper::time_fraction<std::chrono::nanoseconds>(msg.time);
|
||||
fmt::format_to(dest, "{:09}", ns.count());
|
||||
fmt_helper::pad9(static_cast<size_t>(ns.count()), dest);
|
||||
|
||||
}
|
||||
};
|
||||
|
||||
|
@ -22,6 +22,13 @@ void test_pad6(std::size_t n, const char *expected)
|
||||
REQUIRE(fmt::to_string(buf) == expected);
|
||||
}
|
||||
|
||||
void test_pad9(std::size_t n, const char *expected)
|
||||
{
|
||||
fmt::memory_buffer buf;
|
||||
spdlog::details::fmt_helper::pad9(n, buf);
|
||||
REQUIRE(fmt::to_string(buf) == expected);
|
||||
}
|
||||
|
||||
TEST_CASE("pad2", "[fmt_helper]")
|
||||
{
|
||||
test_pad2(0, "00");
|
||||
@ -52,3 +59,19 @@ TEST_CASE("pad6", "[fmt_helper]")
|
||||
test_pad6(12345, "012345");
|
||||
test_pad6(123456, "123456");
|
||||
}
|
||||
|
||||
|
||||
TEST_CASE("pad9", "[fmt_helper]")
|
||||
{
|
||||
test_pad9(0,"000000000");
|
||||
test_pad9(3, "000000003");
|
||||
test_pad9(23, "000000023");
|
||||
test_pad9(123, "000000123");
|
||||
test_pad9(1234, "000001234");
|
||||
test_pad9(12345, "000012345");
|
||||
test_pad9(123456, "000123456");
|
||||
test_pad9(1234567, "001234567");
|
||||
test_pad9(12345678, "012345678");
|
||||
test_pad9(123456789, "123456789");
|
||||
test_pad9(1234567891, "1234567891");
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user