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
Iterator end,
String& output) {
assert(begin != end);
+ if (std::is_same<Delim, StringPiece>::value &&
+ delimSize(delimiter) == 1) {
+ internalJoinAppend(delimFront(delimiter), begin, end, output);
+ return;
+ }
toAppend(*begin, &output);
while (++begin != end) {
toAppend(delimiter, *begin, &output);
}
}
-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 = {
"one", "two", "three", "four", "five", "six", "seven" };
for (int i = 0; i < iters << 4; ++i) {