1use std::sync::atomic::{AtomicBool, Ordering};
10
11static WARMED_UP: AtomicBool = AtomicBool::new(false);
13
14#[inline]
30pub fn warmup_parser() {
31 if WARMED_UP.swap(true, Ordering::SeqCst) {
32 return; }
34
35 warmup_rayon();
37
38 warmup_simd_finders();
40
41 warmup_base64();
43}
44
45#[inline]
47fn warmup_rayon() {
48 rayon::join(|| {}, || {});
50}
51
52#[inline]
54fn warmup_simd_finders() {
55 use memchr::memmem;
56
57 let dummy_log = b"Program data: Program 6EF8rrecthR5Dkzon8Nwu78hRvfCKubJ14M5uBEwF6P invoke [1]";
62
63 let _ = memmem::find(dummy_log, b"Program data: ");
65 let _ = memmem::find(dummy_log, b"6EF8rrecthR5Dkzon8Nwu78hRvfCKubJ14M5uBEwF6P");
66 let _ = memmem::find(dummy_log, b"675kPX9MHTjS2zt1qfr1NYHuzeLXfQM9H24wFSUt1Mp8");
67 let _ = memmem::find(dummy_log, b"invoke [");
68 let _ = memmem::find(dummy_log, b"Program");
69 let _ = memmem::find(dummy_log, b"pumpswap");
70 let _ = memmem::find(dummy_log, b"PumpSwap");
71 let _ = memmem::find(dummy_log, b"whirL");
72 let _ = memmem::find(dummy_log, b"meteora");
73
74 let _ = crate::logs::optimized_matcher::parse_invoke_info(
76 "Program 6EF8rrecthR5Dkzon8Nwu78hRvfCKubJ14M5uBEwF6P invoke [1]"
77 );
78
79 let _ = crate::logs::optimized_matcher::detect_log_type(
81 "Program data: test"
82 );
83}
84
85#[inline]
87fn warmup_base64() {
88 use base64::Engine;
89
90 let mut buf = [0u8; 32];
92 let _ = base64::engine::general_purpose::STANDARD.decode_slice(
93 b"AAAAAAAAAAAAAAAA",
94 &mut buf
95 );
96}
97
98#[inline]
100pub fn is_warmed_up() -> bool {
101 WARMED_UP.load(Ordering::SeqCst)
102}
103
104#[cfg(test)]
105mod tests {
106 use super::*;
107
108 #[test]
109 fn test_warmup() {
110 assert!(!is_warmed_up());
111 warmup_parser();
112 assert!(is_warmed_up());
113
114 warmup_parser();
116 assert!(is_warmed_up());
117 }
118}