1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42
pub trait QPS { fn qps(&self, total: u64); fn time(&self, total: u64); fn cost(&self); } impl QPS for std::time::Instant { fn qps(&self, total: u64) { let time = self.elapsed(); println!( "use QPS: {} QPS/s", (total as u128 * 1000000000 as u128 / time.as_nanos() as u128) ); } fn time(&self, total: u64) { let time = self.elapsed(); println!( "use Time: {:?} ,each:{} ns/op", &time, time.as_nanos() / (total as u128) ); } fn cost(&self) { let time = self.elapsed(); println!("cost:{:?}", time); } } #[macro_export] macro_rules! bench { ($total:expr,$body:block) => {{ use rbatis::utils::bencher::QPS; let now = std::time::Instant::now(); for _ in 0..$total { $body; } now.time($total); now.qps($total); }}; }