mirror of
https://github.com/gabime/spdlog.git
synced 2024-11-15 16:35:45 +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)
|
for(auto &flag:all_flags)
|
||||||
{
|
{
|
||||||
auto pattern = std::string("%") + flag;
|
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
|
// complex patterns
|
||||||
@ -62,7 +61,7 @@ void bench_formatters()
|
|||||||
};
|
};
|
||||||
for(auto &pattern:patterns)
|
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);
|
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.
|
// return fraction of a second of the given time_point.
|
||||||
// e.g.
|
// e.g.
|
||||||
// fraction<std::milliseconds>(tp) -> will return the millis part of the second
|
// fraction<std::milliseconds>(tp) -> will return the millis part of the second
|
||||||
|
@ -486,7 +486,8 @@ public:
|
|||||||
scoped_pad p(field_size, padinfo_, dest);
|
scoped_pad p(field_size, padinfo_, dest);
|
||||||
|
|
||||||
auto ns = fmt_helper::time_fraction<std::chrono::nanoseconds>(msg.time);
|
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);
|
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_CASE("pad2", "[fmt_helper]")
|
||||||
{
|
{
|
||||||
test_pad2(0, "00");
|
test_pad2(0, "00");
|
||||||
@ -52,3 +59,19 @@ TEST_CASE("pad6", "[fmt_helper]")
|
|||||||
test_pad6(12345, "012345");
|
test_pad6(12345, "012345");
|
||||||
test_pad6(123456, "123456");
|
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