[libc++] Make pmr::monotonic_buffer_resource bump down
Bumping down is significantly faster than bumping up. This is ABI breaking, but the ABI of `pmr::monotonic_buffer_resource` was only stabilized in this release cycle, so we can still change it.
For a more detailed explanation why bumping down is better, see https://fitzgeraldnick.com/2019/11/01/always-bump-downwards.html.
Reviewed By: ldionne, #libc
Spies: libcxx-commits
Differential Revision: https://reviews.llvm.org/D141435
NOKEYCHECK=True
GitOrigin-RevId: 549a5fd0b789578fcb5ee72c9f4446660f759758
diff --git a/benchmarks/monotonic_buffer.bench.cpp b/benchmarks/monotonic_buffer.bench.cpp
new file mode 100644
index 0000000..cfedbe5
--- /dev/null
+++ b/benchmarks/monotonic_buffer.bench.cpp
@@ -0,0 +1,28 @@
+//===----------------------------------------------------------------------===//
+//
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
+//
+//===----------------------------------------------------------------------===//
+
+#include <list>
+#include <memory_resource>
+
+#include "benchmark/benchmark.h"
+
+static void bm_list(benchmark::State& state) {
+ char buffer[16384];
+ std::pmr::monotonic_buffer_resource resource(buffer, sizeof(buffer));
+ for (auto _ : state) {
+ std::pmr::list<int> l(&resource);
+ for (size_t i = 0; i != state.range(); ++i) {
+ l.push_back(1);
+ benchmark::DoNotOptimize(l);
+ }
+ resource.release();
+ }
+}
+BENCHMARK(bm_list)->Range(1, 2048);
+
+BENCHMARK_MAIN();