40 lines
1.4 KiB
Rust
40 lines
1.4 KiB
Rust
use {
|
|
crate::{invoke_context::InvokeContext, timings::ExecuteDetailsTimings},
|
|
solana_sdk::{instruction::InstructionError, saturating_add_assign},
|
|
};
|
|
|
|
/// Program executor
|
|
pub trait Executor: std::fmt::Debug + Send + Sync {
|
|
/// Execute the program
|
|
fn execute(&self, invoke_context: &mut InvokeContext) -> Result<(), InstructionError>;
|
|
}
|
|
|
|
#[derive(Debug, Default)]
|
|
pub struct CreateMetrics {
|
|
pub program_id: String,
|
|
pub register_syscalls_us: u64,
|
|
pub load_elf_us: u64,
|
|
pub verify_code_us: u64,
|
|
pub jit_compile_us: u64,
|
|
}
|
|
|
|
impl CreateMetrics {
|
|
pub fn submit_datapoint(&self, timings: &mut ExecuteDetailsTimings) {
|
|
saturating_add_assign!(
|
|
timings.create_executor_register_syscalls_us,
|
|
self.register_syscalls_us
|
|
);
|
|
saturating_add_assign!(timings.create_executor_load_elf_us, self.load_elf_us);
|
|
saturating_add_assign!(timings.create_executor_verify_code_us, self.verify_code_us);
|
|
saturating_add_assign!(timings.create_executor_jit_compile_us, self.jit_compile_us);
|
|
datapoint_trace!(
|
|
"create_executor_trace",
|
|
("program_id", self.program_id, String),
|
|
("register_syscalls_us", self.register_syscalls_us, i64),
|
|
("load_elf_us", self.load_elf_us, i64),
|
|
("verify_code_us", self.verify_code_us, i64),
|
|
("jit_compile_us", self.jit_compile_us, i64),
|
|
);
|
|
}
|
|
}
|