use std::sync::atomic::{AtomicBool, Ordering};
static WARMED_UP: AtomicBool = AtomicBool::new(false);
#[inline]
pub fn warmup_parser() {
if WARMED_UP.swap(true, Ordering::SeqCst) {
return; }
warmup_rayon();
warmup_simd_finders();
warmup_base64();
}
#[inline]
fn warmup_rayon() {
rayon::join(|| {}, || {});
}
#[inline]
fn warmup_simd_finders() {
use memchr::memmem;
let dummy_log = b"Program data: Program 6EF8rrecthR5Dkzon8Nwu78hRvfCKubJ14M5uBEwF6P invoke [1]";
let _ = memmem::find(dummy_log, b"Program data: ");
let _ = memmem::find(dummy_log, b"6EF8rrecthR5Dkzon8Nwu78hRvfCKubJ14M5uBEwF6P");
let _ = memmem::find(dummy_log, b"675kPX9MHTjS2zt1qfr1NYHuzeLXfQM9H24wFSUt1Mp8");
let _ = memmem::find(dummy_log, b"invoke [");
let _ = memmem::find(dummy_log, b"Program");
let _ = memmem::find(dummy_log, b"pumpswap");
let _ = memmem::find(dummy_log, b"PumpSwap");
let _ = memmem::find(dummy_log, b"whirL");
let _ = memmem::find(dummy_log, b"meteora");
let _ = crate::logs::optimized_matcher::parse_invoke_info(
"Program 6EF8rrecthR5Dkzon8Nwu78hRvfCKubJ14M5uBEwF6P invoke [1]",
);
let _ = crate::logs::optimized_matcher::detect_log_type("Program data: test");
}
#[inline]
fn warmup_base64() {
use base64::Engine;
let mut buf = [0u8; 32];
let _ = base64::engine::general_purpose::STANDARD.decode_slice(b"AAAAAAAAAAAAAAAA", &mut buf);
}
#[inline]
pub fn is_warmed_up() -> bool {
WARMED_UP.load(Ordering::SeqCst)
}
#[cfg(test)]
mod tests {
use super::*;
#[test]
fn test_warmup() {
assert!(!is_warmed_up());
warmup_parser();
assert!(is_warmed_up());
warmup_parser();
assert!(is_warmed_up());
}
}