Count compute units even when transaction errors (#22182)
This commit is contained in:
@@ -5,6 +5,18 @@ pub struct ProgramTiming {
|
||||
pub accumulated_us: u64,
|
||||
pub accumulated_units: u64,
|
||||
pub count: u32,
|
||||
pub errored_txs_compute_consumed: Vec<u64>,
|
||||
}
|
||||
|
||||
impl ProgramTiming {
|
||||
pub fn coalesce_error_timings(&mut self, current_estimated_program_cost: u64) {
|
||||
for tx_error_compute_consumed in self.errored_txs_compute_consumed.drain(..) {
|
||||
let compute_units_update =
|
||||
std::cmp::max(current_estimated_program_cost, tx_error_compute_consumed);
|
||||
self.accumulated_units = self.accumulated_units.saturating_add(compute_units_update);
|
||||
self.count = self.count.saturating_add(1);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
#[derive(Default, Debug)]
|
||||
@@ -46,10 +58,24 @@ impl ExecuteDetailsTimings {
|
||||
program_timing.count = program_timing.count.saturating_add(other.count);
|
||||
}
|
||||
}
|
||||
pub fn accumulate_program(&mut self, program_id: &Pubkey, us: u64, units: u64) {
|
||||
pub fn accumulate_program(
|
||||
&mut self,
|
||||
program_id: &Pubkey,
|
||||
us: u64,
|
||||
compute_units_consumed: u64,
|
||||
is_error: bool,
|
||||
) {
|
||||
let program_timing = self.per_program_timings.entry(*program_id).or_default();
|
||||
program_timing.accumulated_us = program_timing.accumulated_us.saturating_add(us);
|
||||
program_timing.accumulated_units = program_timing.accumulated_units.saturating_add(units);
|
||||
program_timing.count = program_timing.count.saturating_add(1);
|
||||
if is_error {
|
||||
program_timing
|
||||
.errored_txs_compute_consumed
|
||||
.push(compute_units_consumed);
|
||||
} else {
|
||||
program_timing.accumulated_units = program_timing
|
||||
.accumulated_units
|
||||
.saturating_add(compute_units_consumed);
|
||||
program_timing.count = program_timing.count.saturating_add(1);
|
||||
};
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user