aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMartin Leitner-Ankerl <martin.ankerl@gmail.com>2023-03-26 15:19:43 +0200
committerMartin Leitner-Ankerl <martin.ankerl@gmail.com>2023-03-26 15:49:41 +0200
commitd380d2877ed45cf1e75a87d822b30e4e1e21e3d4 (patch)
tree4ed7de5da2eee4bbcb8d4de420d8b8cd071af9af
parente352f5ab6b60ec1cc549997275e945238508cdee (diff)
downloadbitcoin-d380d2877ed45cf1e75a87d822b30e4e1e21e3d4.tar.xz
bench: Add benchmark for prevector usage in std::vector
-rw-r--r--src/bench/prevector.cpp26
1 files changed, 26 insertions, 0 deletions
diff --git a/src/bench/prevector.cpp b/src/bench/prevector.cpp
index 59c4af086e..2524e215e4 100644
--- a/src/bench/prevector.cpp
+++ b/src/bench/prevector.cpp
@@ -80,6 +80,30 @@ static void PrevectorDeserialize(benchmark::Bench& bench)
});
}
+template <typename T>
+static void PrevectorFillVectorDirect(benchmark::Bench& bench)
+{
+ bench.run([&] {
+ std::vector<prevector<28, T>> vec;
+ for (size_t i = 0; i < 260; ++i) {
+ vec.emplace_back();
+ }
+ });
+}
+
+
+template <typename T>
+static void PrevectorFillVectorIndirect(benchmark::Bench& bench)
+{
+ bench.run([&] {
+ std::vector<prevector<28, T>> vec;
+ for (size_t i = 0; i < 260; ++i) {
+ // force allocation
+ vec.emplace_back(29, T{});
+ }
+ });
+}
+
#define PREVECTOR_TEST(name) \
static void Prevector##name##Nontrivial(benchmark::Bench& bench) \
{ \
@@ -96,3 +120,5 @@ PREVECTOR_TEST(Clear)
PREVECTOR_TEST(Destructor)
PREVECTOR_TEST(Resize)
PREVECTOR_TEST(Deserialize)
+PREVECTOR_TEST(FillVectorDirect)
+PREVECTOR_TEST(FillVectorIndirect)