From f482ed955ab2b6490d03e00dcb176315634e26e1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Juli=C3=A1n=20Gonz=C3=A1lez=20Calder=C3=B3n?= Date: Thu, 28 Nov 2024 16:43:09 -0300 Subject: [PATCH] Save execution time in call info --- crates/blockifier/src/execution/call_info.rs | 1 + crates/blockifier/src/execution/entry_point_execution.rs | 6 ++++++ .../src/execution/native/entry_point_execution.rs | 7 ++++++- 3 files changed, 13 insertions(+), 1 deletion(-) diff --git a/crates/blockifier/src/execution/call_info.rs b/crates/blockifier/src/execution/call_info.rs index e078376b481..75fce412e4a 100644 --- a/crates/blockifier/src/execution/call_info.rs +++ b/crates/blockifier/src/execution/call_info.rs @@ -145,6 +145,7 @@ pub struct CallInfo { pub charged_resources: ChargedResources, // Additional information gathered during execution. + pub time: std::time::Duration, pub storage_read_values: Vec, pub accessed_storage_keys: HashSet, pub read_class_hash_values: Vec, diff --git a/crates/blockifier/src/execution/entry_point_execution.rs b/crates/blockifier/src/execution/entry_point_execution.rs index 070e55be8a5..fc3bd75e6f6 100644 --- a/crates/blockifier/src/execution/entry_point_execution.rs +++ b/crates/blockifier/src/execution/entry_point_execution.rs @@ -61,6 +61,8 @@ pub fn execute_entry_point_call( state: &mut dyn State, context: &mut EntryPointExecutionContext, ) -> EntryPointExecutionResult { + let pre_time = std::time::Instant::now(); + // Fetch the class hash from `call`. let class_hash = call.class_hash.ok_or(EntryPointExecutionError::InternalError( "Class hash must not be None when executing an entry point.".into(), @@ -99,12 +101,14 @@ pub fn execute_entry_point_call( bytecode_length, )?; + let time = pre_time.elapsed(); Ok(finalize_execution( runner, syscall_handler, n_total_args, program_extra_data_length, tracked_resource, + time, )?) } @@ -392,6 +396,7 @@ pub fn finalize_execution( n_total_args: usize, program_extra_data_length: usize, tracked_resource: TrackedResource, + time: std::time::Duration, ) -> Result { // Close memory holes in segments (OS code touches those memory cells, we simulate it). let program_start_ptr = runner @@ -454,6 +459,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, }) } diff --git a/crates/blockifier/src/execution/native/entry_point_execution.rs b/crates/blockifier/src/execution/native/entry_point_execution.rs index 34b3460c678..384bddd27ce 100644 --- a/crates/blockifier/src/execution/native/entry_point_execution.rs +++ b/crates/blockifier/src/execution/native/entry_point_execution.rs @@ -22,6 +22,8 @@ pub fn execute_entry_point_call( state: &mut dyn State, context: &mut EntryPointExecutionContext, ) -> EntryPointExecutionResult { + let pre_time = std::time::Instant::now(); + let entry_point = contract_class.get_entry_point(&call)?; let mut syscall_handler: NativeSyscallHandler<'_> = @@ -54,12 +56,14 @@ pub fn execute_entry_point_call( return Err(EntryPointExecutionError::NativeUnrecoverableError(Box::new(error))); } - create_callinfo(call_result, syscall_handler) + let time = pre_time.elapsed(); + create_callinfo(call_result, syscall_handler, time) } fn create_callinfo( call_result: ContractExecutionResult, syscall_handler: NativeSyscallHandler<'_>, + time: std::time::Duration, ) -> Result { let remaining_gas = call_result.remaining_gas; @@ -99,5 +103,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, }) }