cbe_program_runtime/
executor.rs

1use {
2    crate::{invoke_context::InvokeContext, timings::ExecuteDetailsTimings},
3    cbe_sdk::{instruction::InstructionError, saturating_add_assign},
4};
5
6/// Program executor
7pub trait Executor: std::fmt::Debug + Send + Sync {
8    /// Execute the program
9    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}