Skip to content

Commit eedaf90

Browse files
committed
Add get_secure_random_bytes() benchmark
1 parent 8bc3428 commit eedaf90

File tree

1 file changed

+55
-0
lines changed

1 file changed

+55
-0
lines changed

lightning/src/chain/keysinterface.rs

+55
Original file line numberDiff line numberDiff line change
@@ -1469,3 +1469,58 @@ impl PhantomKeysManager {
14691469
pub fn dyn_sign() {
14701470
let _signer: Box<dyn EcdsaChannelSigner>;
14711471
}
1472+
1473+
#[cfg(all(test, feature = "_bench_unstable", not(feature = "no-std")))]
1474+
mod benches {
1475+
use std::sync::{Arc, mpsc};
1476+
use std::sync::mpsc::TryRecvError;
1477+
use std::thread;
1478+
use std::time::Duration;
1479+
use bitcoin::blockdata::constants::genesis_block;
1480+
use bitcoin::Network;
1481+
use crate::chain::keysinterface::{EntropySource, KeysManager};
1482+
1483+
use test::Bencher;
1484+
1485+
#[bench]
1486+
fn bench_get_secure_random_bytes(bench: &mut Bencher) {
1487+
let seed = [0u8; 32];
1488+
let now = Duration::from_secs(genesis_block(Network::Testnet).header.time as u64);
1489+
let keys_manager = Arc::new(KeysManager::new(&seed, now.as_secs(), now.subsec_micros()));
1490+
1491+
let mut handles = Vec::new();
1492+
let mut stops = Vec::new();
1493+
for _ in 1..5 {
1494+
let keys_manager_clone = Arc::clone(&keys_manager);
1495+
let (stop_sender, stop_receiver) = mpsc::channel();
1496+
let handle = thread::spawn(move || {
1497+
loop {
1498+
keys_manager_clone.get_secure_random_bytes();
1499+
match stop_receiver.try_recv() {
1500+
Ok(_) | Err(TryRecvError::Disconnected) => {
1501+
println!("Terminating.");
1502+
break;
1503+
}
1504+
Err(TryRecvError::Empty) => {}
1505+
}
1506+
}
1507+
});
1508+
handles.push(handle);
1509+
stops.push(stop_sender);
1510+
}
1511+
1512+
bench.iter(|| {
1513+
for _ in 1..100 {
1514+
keys_manager.get_secure_random_bytes();
1515+
}
1516+
});
1517+
1518+
for stop in stops {
1519+
let _ = stop.send(());
1520+
}
1521+
for handle in handles {
1522+
handle.join().unwrap();
1523+
}
1524+
}
1525+
1526+
}

0 commit comments

Comments
 (0)