diff --git a/crates/blockifier/src/execution/call_info.rs b/crates/blockifier/src/execution/call_info.rs index 56d126ca048..9d60636ee4e 100644 --- a/crates/blockifier/src/execution/call_info.rs +++ b/crates/blockifier/src/execution/call_info.rs @@ -1,6 +1,7 @@ use std::collections::HashSet; use std::iter::Sum; use std::ops::{Add, AddAssign}; +use std::time::Duration; use cairo_vm::vm::runners::cairo_runner::ExecutionResources; use serde::Serialize; @@ -207,12 +208,13 @@ pub struct CallInfo { pub tracked_resource: TrackedResource, // Additional information gathered during execution. - pub time: std::time::Duration, - pub call_counter: usize, pub storage_read_values: Vec, pub accessed_storage_keys: HashSet, pub read_class_hash_values: Vec, pub accessed_contract_addresses: HashSet, + /// Execution time of the contract call. + /// None implies that the time was not measured. + pub time: Option, } impl CallInfo { diff --git a/crates/blockifier/src/execution/entry_point_execution.rs b/crates/blockifier/src/execution/entry_point_execution.rs index 59bcfda18fb..4ec74a42c3b 100644 --- a/crates/blockifier/src/execution/entry_point_execution.rs +++ b/crates/blockifier/src/execution/entry_point_execution.rs @@ -393,8 +393,7 @@ pub fn finalize_execution( accessed_storage_keys: syscall_handler_base.accessed_keys, read_class_hash_values: syscall_handler_base.read_class_hash_values, accessed_contract_addresses: syscall_handler_base.accessed_contract_addresses, - time: std::time::Duration::default(), - call_counter: 0, + time: None, }) } diff --git a/crates/blockifier/src/execution/execution_utils.rs b/crates/blockifier/src/execution/execution_utils.rs index 658a6db07f7..85cb4a6b9f4 100644 --- a/crates/blockifier/src/execution/execution_utils.rs +++ b/crates/blockifier/src/execution/execution_utils.rs @@ -1,4 +1,5 @@ use std::collections::HashMap; +use std::time::Instant; use cairo_vm::serde::deserialize_program::{ deserialize_array_of_bigint_hex, @@ -115,10 +116,8 @@ pub fn execute_entry_point_call( state: &mut dyn State, context: &mut EntryPointExecutionContext, ) -> EntryPointExecutionResult { - let current_call_counter = context.call_counter; - context.call_counter += 1; - let pre_time = std::time::Instant::now(); - let mut result = match compiled_class { + let pre_execution_instant = Instant::now(); + let mut call_info = match compiled_class { RunnableCompiledClass::V0(compiled_class) => { deprecated_entry_point_execution::execute_entry_point_call( call, @@ -153,9 +152,8 @@ pub fn execute_entry_point_call( } } }?; - result.time = pre_time.elapsed(); - result.call_counter = current_call_counter; - Ok(result) + call_info.time = Some(pre_execution_instant.elapsed()); + Ok(call_info) } pub fn update_remaining_gas(remaining_gas: &mut u64, call_info: &CallInfo) { diff --git a/crates/blockifier/src/execution/native/entry_point_execution.rs b/crates/blockifier/src/execution/native/entry_point_execution.rs index 66687e9773c..835493aed15 100644 --- a/crates/blockifier/src/execution/native/entry_point_execution.rs +++ b/crates/blockifier/src/execution/native/entry_point_execution.rs @@ -102,7 +102,6 @@ fn create_callinfo( accessed_contract_addresses: syscall_handler.base.accessed_contract_addresses, read_class_hash_values: syscall_handler.base.read_class_hash_values, tracked_resource: TrackedResource::SierraGas, - time: std::time::Duration::default(), - call_counter: 0, + time: None, }) } diff --git a/crates/blockifier/src/transaction/account_transaction.rs b/crates/blockifier/src/transaction/account_transaction.rs index fcc673c2789..d90c2d5c78c 100644 --- a/crates/blockifier/src/transaction/account_transaction.rs +++ b/crates/blockifier/src/transaction/account_transaction.rs @@ -1,4 +1,5 @@ use std::sync::Arc; +use std::time::Instant; use starknet_api::abi::abi_utils::selector_from_name; use starknet_api::block::GasPriceVector; @@ -796,6 +797,8 @@ impl ExecutableTransaction for AccountTransaction { block_context: &BlockContext, concurrency_mode: bool, ) -> TransactionExecutionResult { + let pre_execution_instant = Instant::now(); + let tx_context = Arc::new(block_context.to_tx_context(self)); self.verify_tx_version(tx_context.tx_info.version())?; @@ -836,6 +839,7 @@ impl ExecutableTransaction for AccountTransaction { gas: total_gas, }, revert_error, + time: Some(pre_execution_instant.elapsed()), }; Ok(tx_execution_info) } diff --git a/crates/blockifier/src/transaction/objects.rs b/crates/blockifier/src/transaction/objects.rs index 573517cd1a3..88647c371f1 100644 --- a/crates/blockifier/src/transaction/objects.rs +++ b/crates/blockifier/src/transaction/objects.rs @@ -1,4 +1,5 @@ use std::collections::HashMap; +use std::time::Duration; use cairo_vm::types::builtin_name::BuiltinName; use cairo_vm::vm::runners::cairo_runner::ExecutionResources; @@ -209,6 +210,9 @@ pub struct TransactionExecutionInfo { /// (including L1 gas and additional OS resources estimation), /// and total gas consumed. pub receipt: TransactionReceipt, + /// Total execution time of the transaction. + /// None implies that the time was not measured. + pub time: Option, } impl TransactionExecutionInfo { diff --git a/crates/blockifier/src/transaction/transaction_execution.rs b/crates/blockifier/src/transaction/transaction_execution.rs index 43f8f911eea..97d66d8f28a 100644 --- a/crates/blockifier/src/transaction/transaction_execution.rs +++ b/crates/blockifier/src/transaction/transaction_execution.rs @@ -1,4 +1,5 @@ use std::sync::Arc; +use std::time::Instant; use starknet_api::contract_class::ClassInfo; use starknet_api::core::{calculate_contract_address, ContractAddress, Nonce}; @@ -142,6 +143,8 @@ impl ExecutableTransaction for L1HandlerTransaction { block_context: &BlockContext, _concurrency_mode: bool, ) -> TransactionExecutionResult { + let pre_execution_instant = Instant::now(); + let tx_context = Arc::new(block_context.to_tx_context(self)); let limit_steps_by_resources = false; // The Sierra gas limit for L1 handler transaction is set to max_execute_sierra_gas. @@ -184,6 +187,7 @@ impl ExecutableTransaction for L1HandlerTransaction { gas: total_gas, }, revert_error: None, + time: Some(pre_execution_instant.elapsed()), }) } } diff --git a/crates/blockifier/src/transaction/transactions_test.rs b/crates/blockifier/src/transaction/transactions_test.rs index 85e40d1dd31..c3001e3e031 100644 --- a/crates/blockifier/src/transaction/transactions_test.rs +++ b/crates/blockifier/src/transaction/transactions_test.rs @@ -656,6 +656,7 @@ fn test_invoke_tx( gas: total_gas, }, revert_error: None, + time: None, }; // Test execution info result. @@ -1702,6 +1703,7 @@ fn test_declare_tx( gas: expected_total_gas, }, revert_error: None, + time: None, }; // Test execution info result. @@ -1947,6 +1949,7 @@ fn test_deploy_account_tx( gas: expected_total_gas, }, revert_error: None, + time: None, }; // Test execution info result. @@ -2538,6 +2541,7 @@ fn test_l1_handler(#[values(false, true)] use_kzg_da: bool) { gas: total_gas, }, revert_error: None, + time: None, }; // Check the actual returned execution info.