From 37035e20e8abd253ddd027fe283054fe63df6014 Mon Sep 17 00:00:00 2001 From: "Tobin C. Harding" Date: Fri, 21 Mar 2025 09:32:11 +1100 Subject: [PATCH] Simplify and improve transaction benchmarks We can use `deserialize_hex` when outside of the actual benchmark code to simplify the functions. Also add an additional test that benchmarks `deserialize_hex`. --- bitcoin/src/blockdata/transaction.rs | 28 +++++++++++++++------------- 1 file changed, 15 insertions(+), 13 deletions(-) diff --git a/bitcoin/src/blockdata/transaction.rs b/bitcoin/src/blockdata/transaction.rs index 341fba105..64daedd0b 100644 --- a/bitcoin/src/blockdata/transaction.rs +++ b/bitcoin/src/blockdata/transaction.rs @@ -1966,20 +1966,17 @@ mod tests { #[cfg(bench)] mod benches { - use hex::test_hex_unwrap as hex; use io::sink; use test::{black_box, Bencher}; use super::*; - use crate::consensus::{deserialize, Encodable}; + use crate::consensus::{encode, Encodable}; const SOME_TX: &str = "0100000001a15d57094aa7a21a28cb20b59aab8fc7d1149a3bdbcddba9c622e4f5f6a99ece010000006c493046022100f93bb0e7d8db7bd46e40132d1f8242026e045f03a0efe71bbb8e3f475e970d790221009337cd7f1f929f00cc6ff01f03729b069a7c21b59b1736ddfee5db5946c5da8c0121033b9b137ee87d5a812d6f506efdd37f0affa7ffc310711c06c7f3e097c9447c52ffffffff0100e1f505000000001976a9140389035a9225b3839e2bbf32d826a1e222031fd888ac00000000"; #[bench] pub fn bench_transaction_size(bh: &mut Bencher) { - let raw_tx = hex!(SOME_TX); - - let mut tx: Transaction = deserialize(&raw_tx).unwrap(); + let mut tx: Transaction = encode::deserialize_hex(SOME_TX).unwrap(); bh.iter(|| { black_box(black_box(&mut tx).total_size()); @@ -1988,10 +1985,8 @@ mod benches { #[bench] pub fn bench_transaction_serialize(bh: &mut Bencher) { - let raw_tx = hex!(SOME_TX); - let tx: Transaction = deserialize(&raw_tx).unwrap(); - - let mut data = Vec::with_capacity(raw_tx.len()); + let tx: Transaction = encode::deserialize_hex(SOME_TX).unwrap(); + let mut data = Vec::with_capacity(SOME_TX.len()); bh.iter(|| { let result = tx.consensus_encode(&mut data); @@ -2002,8 +1997,7 @@ mod benches { #[bench] pub fn bench_transaction_serialize_logic(bh: &mut Bencher) { - let raw_tx = hex!(SOME_TX); - let tx: Transaction = deserialize(&raw_tx).unwrap(); + let tx: Transaction = encode::deserialize_hex(SOME_TX).unwrap(); bh.iter(|| { let size = tx.consensus_encode(&mut sink()); @@ -2013,10 +2007,18 @@ mod benches { #[bench] pub fn bench_transaction_deserialize(bh: &mut Bencher) { - let raw_tx = hex!(SOME_TX); + let raw_tx = as hex::FromHex>::from_hex(SOME_TX).unwrap(); bh.iter(|| { - let tx: Transaction = deserialize(&raw_tx).unwrap(); + let tx: Transaction = encode::deserialize(&raw_tx).unwrap(); + black_box(&tx); + }); + } + + #[bench] + pub fn bench_transaction_deserialize_hex(bh: &mut Bencher) { + bh.iter(|| { + let tx: Transaction = encode::deserialize_hex(SOME_TX).unwrap(); black_box(&tx); }); }