cbe_program_runtime/
executor.rs1use {
2 crate::{invoke_context::InvokeContext, timings::ExecuteDetailsTimings},
3 cbe_sdk::{instruction::InstructionError, saturating_add_assign},
4};
5
6pub trait Executor: std::fmt::Debug + Send + Sync {
8 fn execute(&self, invoke_context: &mut InvokeContext) -> Result<(), InstructionError>;
10}
11
12#[derive(Debug, Default)]
13pub struct CreateMetrics {
14 pub program_id: String,
15 pub register_syscalls_us: u64,
16 pub load_elf_us: u64,
17 pub verify_code_us: u64,
18 pub jit_compile_us: u64,
19}
20
21impl CreateMetrics {
22 pub fn submit_datapoint(&self, timings: &mut ExecuteDetailsTimings) {
23 saturating_add_assign!(
24 timings.create_executor_register_syscalls_us,
25 self.register_syscalls_us
26 );
27 saturating_add_assign!(timings.create_executor_load_elf_us, self.load_elf_us);
28 saturating_add_assign!(timings.create_executor_verify_code_us, self.verify_code_us);
29 saturating_add_assign!(timings.create_executor_jit_compile_us, self.jit_compile_us);
30 datapoint_trace!(
31 "create_executor_trace",
32 ("program_id", self.program_id, String),
33 ("register_syscalls_us", self.register_syscalls_us, i64),
34 ("load_elf_us", self.load_elf_us, i64),
35 ("verify_code_us", self.verify_code_us, i64),
36 ("jit_compile_us", self.jit_compile_us, i64),
37 );
38 }
39}