magicblock-delegation-program 1.2.0

Delegation program for the Ephemeral Rollups
Documentation
use pinocchio::syscalls::sol_remaining_compute_units;
use pinocchio_log::log;

pub struct BenchmarkComputeUnit {
    name: &'static str,
    remaining_at_start: u64,
}

impl BenchmarkComputeUnit {
    pub fn start(name: &'static str) -> BenchmarkComputeUnit {
        log!("BENCHMARK BEGIN: [{}]", name);
        Self {
            name,
            remaining_at_start: Self::remaining_cu(),
        }
    }

    fn remaining_cu() -> u64 {
        unsafe { sol_remaining_compute_units() }
    }
}

impl Drop for BenchmarkComputeUnit {
    fn drop(&mut self) {
        let consumed = self.remaining_at_start - Self::remaining_cu();
        log!(
            "BENCHMARK END: [{}] consumed {} of {} compute units.",
            self.name,
            consumed,
            self.remaining_at_start
        )
    }
}

#[macro_export]
macro_rules! compute {
    ($msg:expr=> $($tt:tt)*) => {
        let _log = $crate::cu::BenchmarkComputeUnit::start($msg);
        $($tt)*
    };
}