* Count compute units even when transaction errors (#22059)
(cherry picked from commit eaa8c67bde
)
# Conflicts:
# program-runtime/src/invoke_context.rs
# runtime/src/bank.rs
# runtime/src/message_processor.rs
* Fix merge conflicts
Co-authored-by: carllin <carl@solana.com>
This commit is contained in:
@ -1,9 +1,13 @@
|
||||
use {
|
||||
crate::cost_model::ExecutionCost,
|
||||
serde::{Deserialize, Serialize},
|
||||
solana_measure::measure::Measure,
|
||||
solana_program_runtime::{
|
||||
instruction_recorder::InstructionRecorder,
|
||||
invoke_context::{BuiltinProgram, Executors, InvokeContext, TransactionAccountRefCell},
|
||||
invoke_context::{
|
||||
BuiltinProgram, Executors, InvokeContext, ProcessInstructionResult,
|
||||
TransactionAccountRefCell,
|
||||
},
|
||||
log_collector::LogCollector,
|
||||
timings::ExecuteDetailsTimings,
|
||||
},
|
||||
@ -45,6 +49,7 @@ impl MessageProcessor {
|
||||
builtin_programs: &[BuiltinProgram],
|
||||
message: &Message,
|
||||
program_indices: &[Vec<usize>],
|
||||
estimated_execution_cost: ExecutionCost,
|
||||
accounts: &[TransactionAccountRefCell],
|
||||
rent: Rent,
|
||||
log_collector: Option<Rc<RefCell<LogCollector>>>,
|
||||
@ -105,16 +110,21 @@ impl MessageProcessor {
|
||||
Some(&instruction_recorders[instruction_index]);
|
||||
}
|
||||
let mut time = Measure::start("execute_instruction");
|
||||
let compute_meter_consumption = invoke_context
|
||||
.process_instruction(message, instruction, program_indices, &[], &[])
|
||||
.map_err(|err| TransactionError::InstructionError(instruction_index as u8, err))?;
|
||||
let ProcessInstructionResult {
|
||||
compute_units_consumed,
|
||||
result,
|
||||
} = invoke_context.process_instruction(message, instruction, program_indices, &[], &[]);
|
||||
time.stop();
|
||||
timings.accumulate_program(
|
||||
instruction.program_id(&message.account_keys),
|
||||
time.as_us(),
|
||||
compute_meter_consumption,
|
||||
compute_units_consumed,
|
||||
estimated_execution_cost,
|
||||
result.is_err(),
|
||||
);
|
||||
timings.accumulate(&invoke_context.timings);
|
||||
result
|
||||
.map_err(|err| TransactionError::InstructionError(instruction_index as u8, err))?;
|
||||
}
|
||||
Ok(())
|
||||
}
|
||||
@ -230,6 +240,7 @@ mod tests {
|
||||
builtin_programs,
|
||||
&message,
|
||||
&program_indices,
|
||||
0,
|
||||
&accounts,
|
||||
rent_collector.rent,
|
||||
None,
|
||||
@ -259,6 +270,7 @@ mod tests {
|
||||
builtin_programs,
|
||||
&message,
|
||||
&program_indices,
|
||||
0,
|
||||
&accounts,
|
||||
rent_collector.rent,
|
||||
None,
|
||||
@ -292,6 +304,7 @@ mod tests {
|
||||
builtin_programs,
|
||||
&message,
|
||||
&program_indices,
|
||||
0,
|
||||
&accounts,
|
||||
rent_collector.rent,
|
||||
None,
|
||||
@ -436,6 +449,7 @@ mod tests {
|
||||
builtin_programs,
|
||||
&message,
|
||||
&program_indices,
|
||||
0,
|
||||
&accounts,
|
||||
rent_collector.rent,
|
||||
None,
|
||||
@ -469,6 +483,7 @@ mod tests {
|
||||
builtin_programs,
|
||||
&message,
|
||||
&program_indices,
|
||||
0,
|
||||
&accounts,
|
||||
rent_collector.rent,
|
||||
None,
|
||||
@ -499,6 +514,7 @@ mod tests {
|
||||
builtin_programs,
|
||||
&message,
|
||||
&program_indices,
|
||||
0,
|
||||
&accounts,
|
||||
rent_collector.rent,
|
||||
None,
|
||||
@ -556,6 +572,7 @@ mod tests {
|
||||
builtin_programs,
|
||||
&message,
|
||||
&[vec![0], vec![1]],
|
||||
0,
|
||||
&accounts,
|
||||
RentCollector::default().rent,
|
||||
None,
|
||||
|
Reference in New Issue
Block a user