Count compute units even when transaction errors (#22059)

This commit is contained in:
carllin
2021-12-28 17:05:11 -05:00
committed by GitHub
parent f061059e45
commit eaa8c67bde
13 changed files with 295 additions and 97 deletions

View File

@@ -1,9 +1,10 @@
use {
crate::cost_model::ExecutionCost,
serde::{Deserialize, Serialize},
solana_measure::measure::Measure,
solana_program_runtime::{
instruction_recorder::InstructionRecorder,
invoke_context::{BuiltinProgram, Executors, InvokeContext},
invoke_context::{BuiltinProgram, Executors, InvokeContext, ProcessInstructionResult},
log_collector::LogCollector,
timings::ExecuteDetailsTimings,
},
@@ -53,6 +54,7 @@ impl MessageProcessor {
builtin_programs: &[BuiltinProgram],
message: &Message,
program_indices: &[Vec<usize>],
estimated_execution_cost: ExecutionCost,
transaction_context: &TransactionContext,
rent: Rent,
log_collector: Option<Rc<RefCell<LogCollector>>>,
@@ -127,21 +129,26 @@ impl MessageProcessor {
})
.collect::<Vec<_>>();
let mut time = Measure::start("execute_instruction");
let compute_meter_consumption = invoke_context
.process_instruction(
&instruction.data,
&instruction_accounts,
None,
program_indices,
)
.map_err(|err| TransactionError::InstructionError(instruction_index as u8, err))?;
let ProcessInstructionResult {
compute_units_consumed,
result,
} = invoke_context.process_instruction(
&instruction.data,
&instruction_accounts,
None,
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(ProcessedMessageInfo {
accounts_data_len: invoke_context.get_accounts_data_meter().current(),
@@ -258,6 +265,7 @@ mod tests {
builtin_programs,
&message,
&program_indices,
0,
&transaction_context,
rent_collector.rent,
None,
@@ -299,6 +307,7 @@ mod tests {
builtin_programs,
&message,
&program_indices,
0,
&transaction_context,
rent_collector.rent,
None,
@@ -332,6 +341,7 @@ mod tests {
builtin_programs,
&message,
&program_indices,
0,
&transaction_context,
rent_collector.rent,
None,
@@ -476,6 +486,7 @@ mod tests {
builtin_programs,
&message,
&program_indices,
0,
&transaction_context,
rent_collector.rent,
None,
@@ -510,6 +521,7 @@ mod tests {
builtin_programs,
&message,
&program_indices,
0,
&transaction_context,
rent_collector.rent,
None,
@@ -541,6 +553,7 @@ mod tests {
builtin_programs,
&message,
&program_indices,
0,
&transaction_context,
rent_collector.rent,
None,
@@ -614,6 +627,7 @@ mod tests {
builtin_programs,
&message,
&[vec![0], vec![1]],
0,
&transaction_context,
RentCollector::default().rent,
None,