Commit 5df0c971 authored by Philip Pronin's avatar Philip Pronin Committed by Tudor Bosman

one more simple folly::join optimization

Summary:
Before:

_bin/folly/test/string_test --benchmark --bm_regex=join --bm_min_usec=1000000
============================================================================
folly/test/StringTest.cpp                       relative  time/iter  iters/s
============================================================================
joinCharStr                                                  3.59us  278.29K
joinStrStr                                                   4.44us  225.09K
joinInt                                                     10.55us   94.76K
============================================================================

And after:

_bin/folly/test/string_test --benchmark --bm_regex=join --bm_min_usec=1000000
============================================================================
folly/test/StringTest.cpp                       relative  time/iter  iters/s
============================================================================
joinCharStr                                                  3.61us  277.01K
joinStrStr                                                   3.77us  264.97K
joinInt                                                      9.92us  100.81K
============================================================================

Test Plan: unittests, benchmark

Reviewed By: tudorb@fb.com

FB internal diff: D552364
parent ff25e3b5
...@@ -312,6 +312,11 @@ void internalJoinAppend(Delim delimiter, ...@@ -312,6 +312,11 @@ void internalJoinAppend(Delim delimiter,
Iterator end, Iterator end,
String& output) { String& output) {
assert(begin != end); assert(begin != end);
if (std::is_same<Delim, StringPiece>::value &&
delimSize(delimiter) == 1) {
internalJoinAppend(delimFront(delimiter), begin, end, output);
return;
}
toAppend(*begin, &output); toAppend(*begin, &output);
while (++begin != end) { while (++begin != end) {
toAppend(delimiter, *begin, &output); toAppend(delimiter, *begin, &output);
......
...@@ -761,7 +761,16 @@ BENCHMARK(boost_splitOnSingleChar, iters) { ...@@ -761,7 +761,16 @@ BENCHMARK(boost_splitOnSingleChar, iters) {
} }
} }
BENCHMARK(joinStr, iters) { BENCHMARK(joinCharStr, iters) {
static const std::vector<std::string> input = {
"one", "two", "three", "four", "five", "six", "seven" };
for (int i = 0; i < iters << 4; ++i) {
std::string output;
folly::join(':', input, output);
}
}
BENCHMARK(joinStrStr, iters) {
static const std::vector<std::string> input = { static const std::vector<std::string> input = {
"one", "two", "three", "four", "five", "six", "seven" }; "one", "two", "three", "four", "five", "six", "seven" };
for (int i = 0; i < iters << 4; ++i) { for (int i = 0; i < iters << 4; ++i) {
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment