mirror of
https://github.com/pezkuwichain/revive.git
synced 2026-05-06 23:17:55 +00:00
393d90165e
Signed-off-by: xermicus <cyrill@parity.io>
71 lines
2.2 KiB
Rust
71 lines
2.2 KiB
Rust
#[cfg(feature = "bench-pvm-interpreter")]
|
|
pub fn create_specs(contract: &revive_integration::cases::Contract) -> revive_runner::Specs {
|
|
use revive_runner::*;
|
|
use SpecsAction::*;
|
|
Specs {
|
|
differential: false,
|
|
actions: vec![
|
|
Instantiate {
|
|
code: Code::Bytes(contract.pvm_runtime.to_vec()),
|
|
origin: TestAddress::Alice,
|
|
data: Default::default(),
|
|
value: Default::default(),
|
|
gas_limit: Default::default(),
|
|
storage_deposit_limit: Default::default(),
|
|
salt: Default::default(),
|
|
},
|
|
Call {
|
|
origin: TestAddress::Alice,
|
|
dest: TestAddress::Instantiated(0),
|
|
data: contract.calldata.to_vec(),
|
|
value: Default::default(),
|
|
gas_limit: Default::default(),
|
|
storage_deposit_limit: Default::default(),
|
|
},
|
|
],
|
|
..Default::default()
|
|
}
|
|
}
|
|
|
|
#[cfg(feature = "bench-pvm-interpreter")]
|
|
pub fn measure_pvm(specs: &revive_runner::Specs, iters: u64) -> std::time::Duration {
|
|
use revive_runner::*;
|
|
let mut total_time = std::time::Duration::default();
|
|
|
|
for _ in 0..iters {
|
|
let results = specs.clone().run();
|
|
|
|
let CallResult::Exec { result, wall_time } =
|
|
results.get(1).expect("contract should have been called")
|
|
else {
|
|
panic!("expected a execution result");
|
|
};
|
|
let ret = result.result.as_ref().unwrap();
|
|
assert!(!ret.did_revert());
|
|
|
|
total_time += *wall_time;
|
|
}
|
|
|
|
total_time
|
|
}
|
|
|
|
#[cfg(feature = "bench-evm")]
|
|
pub fn measure_evm(code: &[u8], input: &[u8], iters: u64) -> std::time::Duration {
|
|
let mut total_time = std::time::Duration::default();
|
|
|
|
let code = hex::encode(code);
|
|
|
|
for _ in 0..iters {
|
|
let log = revive_differential::Evm::default()
|
|
.code_blob(code.as_bytes().to_vec())
|
|
.input(input.to_vec().into())
|
|
.bench(true)
|
|
.run();
|
|
assert!(log.output.run_success(), "evm run failed: {log:?}");
|
|
|
|
total_time += log.execution_time().unwrap();
|
|
}
|
|
|
|
total_time
|
|
}
|