mirror of
https://github.com/bitcoin/bitcoin.git
synced 2026-05-12 23:13:25 +02:00
refactor: use SpanReader in PrevectorDeserialize
`PrevectorDeserialize` only needs a reusable read-only view over fixed serialized bytes.
Keeping a mutable `DataStream` around just to call `Rewind()` is unnecessary.
Rebuild a fresh `SpanReader` for each benchmark run and remove `DataStream::Rewind()`, whose remaining use was this benchmark-only reset path.
The benchmark can now serialize exactly the 1000 entries it deserializes, so drop the stale extra element that used to avoid full consumption.
Co-authored-by: MarcoFalke <*~=`'#}+{/-|&$^_@721217.xyz>
This commit is contained in:
@@ -66,22 +66,22 @@ static void PrevectorResize(benchmark::Bench& bench)
|
||||
template <typename T>
|
||||
static void PrevectorDeserialize(benchmark::Bench& bench)
|
||||
{
|
||||
DataStream s0{};
|
||||
DataStream data{};
|
||||
prevector<CScriptBase::STATIC_SIZE, T> t0;
|
||||
t0.resize(CScriptBase::STATIC_SIZE);
|
||||
for (auto x = 0; x < 900; ++x) {
|
||||
s0 << t0;
|
||||
data << t0;
|
||||
}
|
||||
t0.resize(100);
|
||||
for (auto x = 0; x < 101; ++x) {
|
||||
s0 << t0;
|
||||
for (auto x = 0; x < 100; ++x) {
|
||||
data << t0;
|
||||
}
|
||||
bench.batch(1000).run([&] {
|
||||
SpanReader s0{data};
|
||||
prevector<CScriptBase::STATIC_SIZE, T> t1;
|
||||
for (auto x = 0; x < 1000; ++x) {
|
||||
s0 >> t1;
|
||||
}
|
||||
s0.Rewind();
|
||||
});
|
||||
}
|
||||
|
||||
|
||||
@@ -206,21 +206,6 @@ public:
|
||||
value_type* data() { return vch.data() + m_read_pos; }
|
||||
const value_type* data() const { return vch.data() + m_read_pos; }
|
||||
|
||||
bool Rewind(std::optional<size_type> n = std::nullopt)
|
||||
{
|
||||
// Total rewind if no size is passed
|
||||
if (!n) {
|
||||
m_read_pos = 0;
|
||||
return true;
|
||||
}
|
||||
// Rewind by n characters if the buffer hasn't been compacted yet
|
||||
if (*n > m_read_pos)
|
||||
return false;
|
||||
m_read_pos -= *n;
|
||||
return true;
|
||||
}
|
||||
|
||||
|
||||
//
|
||||
// Stream subset
|
||||
//
|
||||
|
||||
Reference in New Issue
Block a user