diff --git a/README.md b/README.md index c85d4756..a32ab510 100644 --- a/README.md +++ b/README.md @@ -726,19 +726,18 @@ A comparison of merging three large log files running on Ubuntu 22 on WSL2. Using `hyperfine` and GNU `time` to measure Max RSS. -| Command | Mean [ms] | Min [ms] | Max [ms] |Max RSS [KB]| -|:--- |---: |---: |---: |---: | -| `grep+sort` | 40.8 ± 0.4 | 40.1 | 42.0 |2656 | -| `s4 (system)` | 38.3 ± 1.9 | 35.0 | 48.7 |48184 | -| `s4 (mimalloc)` | 28.4 ± 2.2 | 26.0 | 43.9 |77344 | -| `s4 (jemalloc)` | 35.1 ± 2.8 | 32.4 | 52.3 |70832 | -| `logmerger` | 729.2 ± 11.8 | 710.2 | 749.0 |56140 | -|`tl` | | | |53324 | +| Command | Mean [ms] | Min [ms] | Max [ms] | Relative |Max RSS [KB]| +|:--- |---: |---: |---: |---: |---: | +| `grep+sort` | 41.0 ± 0.5 | 40.5 | 43.8 | 1.00 |2740 | +| `s4 (system)` | 37.3 ± 1.5 | 35.3 | 44.6 | 1.00 |48084 | +| `s4 (mimalloc)` | 30.3 ± 1.8 | 27.1 | 36.6 | 1.00 |77020 | +| `s4 (jemalloc)` | 36.0 ± 2.0 | 32.5 | 43.2 | 1.00 |69028 | +| `logmerger` | 720.2 ± 4.9 | 712.9 | 728.0 | 1.00 |56332 | Programs tested: -- `grep` 3.7, `sort` 8.32 -- `s4` 0.7.74 +- GNU `grep` 3.7, GNU `sort` 8.32 +- `s4` 0.7.75 - `logmerger` 0.9.0 on Python 3.10.12 - `tl` 1.5.0 on Python 3.10.12 - `hyperfine` 1.11.0 @@ -746,7 +745,7 @@ Programs tested: See directory results in [`compare-log-mergers.txt`]. -[`compare-log-mergers.txt`]: https://github.com/jtmoon79/super-speedy-syslog-searcher/tree/0.7.74/releases/0.7.74 +[`compare-log-mergers.txt`]: https://github.com/jtmoon79/super-speedy-syslog-searcher/tree/0.7.75/releases/0.7.75 --- diff --git a/releases/0.7.75/callgrind.png b/releases/0.7.75/callgrind.png new file mode 100644 index 00000000..3157a9ac Binary files /dev/null and b/releases/0.7.75/callgrind.png differ diff --git a/releases/0.7.75/callgrind.svg b/releases/0.7.75/callgrind.svg new file mode 100644 index 00000000..0a92bd72 --- /dev/null +++ b/releases/0.7.75/callgrind.svg @@ -0,0 +1,2876 @@ + + + + + + +%3 + + + +(below main) + +s4 +(below main) +99.87% +(0.00%) + + + + +main + +s4 +main +99.86% +(0.00%) + + + + +(below main)->main + + +99.86% + + + + +std::rt::lang_start_internal + +s4 +std::rt::lang_start_internal +99.86% +(0.00%) + + + + +main->std::rt::lang_start_internal + + +99.86% + + + + +0x0000000000020290 + +ld-linux-x86-64.so.2 +0x0000000000020290 +100.00% +(0.00%) + + + + +0x0000000000020290->(below main) + + +99.87% + + + + +0x0000000004898620 + +??? +0x0000000004898620 +1.59% +(0.01%) +24897× + + + +__memcpy_avx_unaligned_erms + +libc.so.6 +__memcpy_avx_unaligned_erms +5.05% +(5.05%) +857257× + + + +0x0000000004898620->__memcpy_avx_unaligned_erms + + +1.58% +24897× + + + +<alloc::vec::Vec<T,A> as alloc::vec::spec_extend::SpecExtend<T,I>>::spec_extend + +s4 +<alloc::vec::Vec<T,A> as alloc::vec::spec_extend::SpecExtend<T,I>>::spec_extend +0.62% +(0.25%) +5074× + + + +alloc::raw_vec::RawVec<T,A>::reserve::do_reserve_and_handle + +s4 +alloc::raw_vec::RawVec<T,A>::reserve::do_reserve_and_handle +7.63% +(0.53%) +51547× + + + +<alloc::vec::Vec<T,A> as alloc::vec::spec_extend::SpecExtend<T,I>>::spec_extend->alloc::raw_vec::RawVec<T,A>::reserve::do_reserve_and_handle + + +0.37% +752× + + + +alloc::raw_vec::finish_grow + +s4 +alloc::raw_vec::finish_grow +18.74% +(1.54%) +202156× + + + +alloc::raw_vec::RawVec<T,A>::reserve::do_reserve_and_handle->alloc::raw_vec::finish_grow + + +7.10% +51547× + + + +<alloc::vec::Vec<T,A> as core::ops::drop::Drop>::drop + +s4 +<alloc::vec::Vec<T,A> as core::ops::drop::Drop>::drop +1.80% +(0.37%) +9112× + + + +__rust_dealloc + +s4 +__rust_dealloc +14.06% +(0.11%) +385984× + + + +<alloc::vec::Vec<T,A> as core::ops::drop::Drop>::drop->__rust_dealloc + + +1.28% +34693× + + + +__rdl_dealloc + +s4 +__rdl_dealloc +13.95% +(0.11%) +385984× + + + +__rust_dealloc->__rdl_dealloc + + +13.95% +385984× + + + +<core::iter::adapters::map::Map<I,F> as core::iter::traits::iterator::Iterator>::fold + +s4 +<core::iter::adapters::map::Map<I,F> as core::iter::traits::iterator::Iterator>::fold +0.50% +(0.00%) +85× + + + +__rust_alloc + +s4 +__rust_alloc +20.04% +(0.12%) +402402× + + + +<core::iter::adapters::map::Map<I,F> as core::iter::traits::iterator::Iterator>::fold->__rust_alloc + + +0.50% +81× + + + +__rdl_alloc + +s4 +__rdl_alloc +19.92% +(1.05%) +402402× + + + +__rust_alloc->__rdl_alloc + + +19.92% +402402× + + + +<core::iter::adapters::map::Map<I,F> as core::iter::traits::iterator::Iterator>::next + +s4 +<core::iter::adapters::map::Map<I,F> as core::iter::traits::iterator::Iterator>::next +24.13% +(0.01%) +350× + + + +regex_automata::nfa::thompson::compiler::Compiler::c_cap + +s4 +regex_automata::nfa::thompson::compiler::Compiler::c_cap +24.11% +(0.00%) +175× + + + +<core::iter::adapters::map::Map<I,F> as core::iter::traits::iterator::Iterator>::next->regex_automata::nfa::thompson::compiler::Compiler::c_cap + + +24.11% +175× + + + +regex_automata::nfa::thompson::compiler::Compiler::c + +s4 +regex_automata::nfa::thompson::compiler::Compiler::c +24.09% +(0.04%) +285× + + + +regex_automata::nfa::thompson::compiler::Compiler::c_cap->regex_automata::nfa::thompson::compiler::Compiler::c + + +24.09% +175× + + + +<regex_automata::meta::strategy::Core as regex_automata::meta::strategy::Strategy>::create_cache + +s4 +<regex_automata::meta::strategy::Core as regex_automata::meta::strategy::Strategy>::create_cache +2.32% +(0.00%) +42× + + + +regex_automata::hybrid::dfa::Cache::new + +s4 +regex_automata::hybrid::dfa::Cache::new +0.78% +(0.00%) +117× + + + +<regex_automata::meta::strategy::Core as regex_automata::meta::strategy::Strategy>::create_cache->regex_automata::hybrid::dfa::Cache::new + + +0.57% +84× + + + +regex_automata::nfa::thompson::pikevm::Cache::new + +s4 +regex_automata::nfa::thompson::pikevm::Cache::new +2.09% +(0.00%) +53× + + + +<regex_automata::meta::strategy::Core as regex_automata::meta::strategy::Strategy>::create_cache->regex_automata::nfa::thompson::pikevm::Cache::new + + +1.74% +42× + + + +regex_automata::hybrid::dfa::Lazy::init_cache + +s4 +regex_automata::hybrid::dfa::Lazy::init_cache +0.66% +(0.33%) +117× + + + +regex_automata::hybrid::dfa::Cache::new->regex_automata::hybrid::dfa::Lazy::init_cache + + +0.66% +117× + + + +regex_automata::nfa::thompson::pikevm::ActiveStates::reset + +s4 +regex_automata::nfa::thompson::pikevm::ActiveStates::reset +2.09% +(0.01%) +106× + + + +regex_automata::nfa::thompson::pikevm::Cache::new->regex_automata::nfa::thompson::pikevm::ActiveStates::reset + + +2.09% +106× + + + +<regex_automata::meta::strategy::ReverseInner as regex_automata::meta::strategy::Strategy>::create_cache + +s4 +<regex_automata::meta::strategy::ReverseInner as regex_automata::meta::strategy::Strategy>::create_cache +0.56% +(0.00%) +11× + + + +<regex_automata::meta::strategy::ReverseInner as regex_automata::meta::strategy::Strategy>::create_cache->regex_automata::hybrid::dfa::Cache::new + + +0.21% +33× + + + +<regex_automata::meta::strategy::ReverseInner as regex_automata::meta::strategy::Strategy>::create_cache->regex_automata::nfa::thompson::pikevm::Cache::new + + +0.35% +11× + + + +<regex_syntax::ast::Ast as core::ops::drop::Drop>::drop + +s4 +<regex_syntax::ast::Ast as core::ops::drop::Drop>::drop +7.62% +(0.62%) +774× + + + +<regex_syntax::ast::Ast as core::ops::drop::Drop>::drop->alloc::raw_vec::RawVec<T,A>::reserve::do_reserve_and_handle + + +0.58% +270× + + + +core::ptr::drop_in_place<regex_syntax::ast::Ast>'2 + +s4 +core::ptr::drop_in_place<regex_syntax::ast::Ast>'2 +6.37% +(0.55%) +73834× + + + +<regex_syntax::ast::Ast as core::ops::drop::Drop>::drop->core::ptr::drop_in_place<regex_syntax::ast::Ast>'2 + + +6.37% +71256× + + + +core::ptr::drop_in_place<regex_syntax::ast::Ast>'2->__rust_dealloc + + +3.53% +93316× + + + +core::ptr::drop_in_place<regex_syntax::ast::Ast>'2->core::ptr::drop_in_place<regex_syntax::ast::Ast>'2 + + +2578× + + + +core::ptr::drop_in_place<regex_syntax::ast::ClassSet> + +s4 +core::ptr::drop_in_place<regex_syntax::ast::ClassSet> +1.91% +(0.03%) +5577× + + + +core::ptr::drop_in_place<regex_syntax::ast::Ast>'2->core::ptr::drop_in_place<regex_syntax::ast::ClassSet> + + +1.86% +2753× + + + +<regex_syntax::ast::ClassSet as core::ops::drop::Drop>::drop + +s4 +<regex_syntax::ast::ClassSet as core::ops::drop::Drop>::drop +1.86% +(0.09%) +5577× + + + +<regex_syntax::ast::ClassSet as core::ops::drop::Drop>::drop->alloc::raw_vec::RawVec<T,A>::reserve::do_reserve_and_handle + + +1.60% +525× + + + +<regex_syntax::ast::parse::NestLimiter<P> as regex_syntax::ast::visitor::Visitor>::visit_pre + +s4 +<regex_syntax::ast::parse::NestLimiter<P> as regex_syntax::ast::visitor::Visitor>::visit_pre +0.56% +(0.56%) +71256× + + + +<regex_syntax::hir::Hir as core::ops::drop::Drop>::drop + +s4 +<regex_syntax::hir::Hir as core::ops::drop::Drop>::drop +4.05% +(0.62%) +39180× + + + +<regex_syntax::hir::Hir as core::ops::drop::Drop>::drop-><alloc::vec::Vec<T,A> as alloc::vec::spec_extend::SpecExtend<T,I>>::spec_extend + + +0.43% +2604× + + + +<regex_syntax::hir::Hir as core::ops::drop::Drop>::drop->__rust_dealloc + + +1.18% +27622× + + + +core::ptr::drop_in_place<regex_syntax::hir::HirKind> + +s4 +core::ptr::drop_in_place<regex_syntax::hir::HirKind> +1.83% +(0.51%) +66469× + + + +<regex_syntax::hir::Hir as core::ops::drop::Drop>::drop->core::ptr::drop_in_place<regex_syntax::hir::HirKind> + + +1.57% +27518× + + + +core::ptr::drop_in_place<regex_syntax::hir::HirKind>->__rust_dealloc + + +1.13% +30715× + + + +core::ptr::drop_in_place<regex_syntax::hir::HirKind>-><regex_syntax::hir::Hir as core::ops::drop::Drop>::drop + + +0.15% + + + + +<regex_syntax::hir::translate::TranslatorI as regex_syntax::ast::visitor::Visitor>::visit_post + +s4 +<regex_syntax::hir::translate::TranslatorI as regex_syntax::ast::visitor::Visitor>::visit_post +17.36% +(3.15%) +71256× + + + +<regex_syntax::hir::translate::TranslatorI as regex_syntax::ast::visitor::Visitor>::visit_post->__memcpy_avx_unaligned_erms + + +0.22% +48360× + + + +<regex_syntax::hir::translate::TranslatorI as regex_syntax::ast::visitor::Visitor>::visit_post->alloc::raw_vec::RawVec<T,A>::reserve::do_reserve_and_handle + + +1.05% +15399× + + + +<regex_syntax::hir::translate::TranslatorI as regex_syntax::ast::visitor::Visitor>::visit_post->__rust_alloc + + +0.87% +36032× + + + +__rust_realloc + +s4 +__rust_realloc +10.01% +(0.02%) +60654× + + + +<regex_syntax::hir::translate::TranslatorI as regex_syntax::ast::visitor::Visitor>::visit_post->__rust_realloc + + +0.74% +14913× + + + +alloc::raw_vec::RawVec<T,A>::reserve_for_push + +s4 +alloc::raw_vec::RawVec<T,A>::reserve_for_push +13.18% +(1.55%) +150607× + + + +<regex_syntax::hir::translate::TranslatorI as regex_syntax::ast::visitor::Visitor>::visit_post->alloc::raw_vec::RawVec<T,A>::reserve_for_push + + +0.99% +18030× + + + +core::str::converts::from_utf8 + +s4 +core::str::converts::from_utf8 +0.55% +(0.55%) +34897× + + + +<regex_syntax::hir::translate::TranslatorI as regex_syntax::ast::visitor::Visitor>::visit_post->core::str::converts::from_utf8 + + +0.26% +16096× + + + +regex_syntax::hir::Hir::alternation + +s4 +regex_syntax::hir::Hir::alternation +1.97% +(0.34%) +579× + + + +<regex_syntax::hir::translate::TranslatorI as regex_syntax::ast::visitor::Visitor>::visit_post->regex_syntax::hir::Hir::alternation + + +1.76% +512× + + + +regex_syntax::hir::Hir::class + +s4 +regex_syntax::hir::Hir::class +0.61% +(0.06%) +3879× + + + +<regex_syntax::hir::translate::TranslatorI as regex_syntax::ast::visitor::Visitor>::visit_post->regex_syntax::hir::Hir::class + + +0.61% +3878× + + + +regex_syntax::hir::Hir::concat + +s4 +regex_syntax::hir::Hir::concat +7.12% +(1.20%) +15943× + + + +<regex_syntax::hir::translate::TranslatorI as regex_syntax::ast::visitor::Visitor>::visit_post->regex_syntax::hir::Hir::concat + + +6.99% +15786× + + + +__rdl_realloc + +s4 +__rdl_realloc +9.99% +(0.35%) +60654× + + + +__rust_realloc->__rdl_realloc + + +9.99% +60654× + + + +alloc::raw_vec::RawVec<T,A>::reserve_for_push->alloc::raw_vec::finish_grow + + +11.64% +150607× + + + +regex_syntax::hir::Hir::alternation->__rust_dealloc + + +0.55% +18936× + + + +regex_syntax::hir::Hir::alternation->__rust_alloc + + +0.35% +18867× + + + +regex_syntax::hir::Hir::alternation-><regex_syntax::hir::Hir as core::ops::drop::Drop>::drop + + +0.13% +18288× + + + +regex_syntax::hir::Hir::alternation->core::ptr::drop_in_place<regex_syntax::hir::HirKind> + + +0.12% +18288× + + + +regex_syntax::hir::Hir::concat->__rust_dealloc + + +2.35% +81305× + + + +regex_syntax::hir::Hir::concat->__rust_alloc + + +1.82% +38101× + + + +regex_syntax::hir::Hir::concat-><regex_syntax::hir::Hir as core::ops::drop::Drop>::drop + + +0.15% +20618× + + + +regex_syntax::hir::Hir::concat->core::ptr::drop_in_place<regex_syntax::hir::HirKind> + + +0.14% +20618× + + + +regex_syntax::hir::Hir::concat->alloc::raw_vec::RawVec<T,A>::reserve_for_push + + +0.69% +16418× + + + +regex_syntax::hir::Hir::literal + +s4 +regex_syntax::hir::Hir::literal +0.69% +(0.21%) +15406× + + + +regex_syntax::hir::Hir::concat->regex_syntax::hir::Hir::literal + + +0.69% +15406× + + + +<regex_syntax::hir::translate::TranslatorI as regex_syntax::ast::visitor::Visitor>::visit_pre + +s4 +<regex_syntax::hir::translate::TranslatorI as regex_syntax::ast::visitor::Visitor>::visit_pre +0.72% +(0.59%) +71256× + + + +__memset_avx2_unaligned_erms + +libc.so.6 +__memset_avx2_unaligned_erms +1.90% +(1.90%) +3745× + + + +malloc + +libc.so.6 +malloc +18.86% +(6.48%) +402291× + + + +__rdl_alloc->malloc + + +18.86% +402281× + + + +_int_malloc + +libc.so.6 +_int_malloc +16.98% +(13.08%) +217950× + + + +malloc->_int_malloc + + +12.38% +191630× + + + +free + +libc.so.6 +free +13.84% +(3.67%) +386005× + + + +__rdl_dealloc->free + + +13.84% +385984× + + + +_int_free + +libc.so.6 +_int_free +10.90% +(10.04%) +414645× + + + +free->_int_free + + +10.16% +386002× + + + +realloc + +libc.so.6 +realloc +9.64% +(1.72%) +60661× + + + +__rdl_realloc->realloc + + +9.64% +60654× + + + +_int_realloc + +libc.so.6 +_int_realloc +7.92% +(1.05%) +60655× + + + +realloc->_int_realloc + + +7.92% +60655× + + + +malloc_consolidate + +libc.so.6 +malloc_consolidate +4.24% +(3.29%) +2786× + + + +_int_free->malloc_consolidate + + +0.80% +200× + + + +unlink_chunk.constprop.0 + +libc.so.6 +unlink_chunk.constprop.0 +1.48% +(1.48%) +221386× + + + +malloc_consolidate->unlink_chunk.constprop.0 + + +0.95% +145168× + + + +_int_malloc->malloc_consolidate + + +3.44% +2586× + + + +_int_malloc->unlink_chunk.constprop.0 + + +0.46% +65537× + + + +_int_realloc->0x0000000004898620 + + +1.59% +24838× + + + +_int_realloc->_int_free + + +0.72% +28103× + + + +_int_realloc->_int_malloc + + +4.53% +24869× + + + +aho_corasick::ahocorasick::AhoCorasickBuilder::build + +s4 +aho_corasick::ahocorasick::AhoCorasickBuilder::build +1.09% +(0.00%) + + + + +aho_corasick::dfa::Builder::build_from_noncontiguous + +s4 +aho_corasick::dfa::Builder::build_from_noncontiguous +3.25% +(0.37%) +48× + + + +aho_corasick::ahocorasick::AhoCorasickBuilder::build->aho_corasick::dfa::Builder::build_from_noncontiguous + + +0.54% + + + + +aho_corasick::nfa::noncontiguous::Builder::build + +s4 +aho_corasick::nfa::noncontiguous::Builder::build +2.72% +(0.48%) +48× + + + +aho_corasick::ahocorasick::AhoCorasickBuilder::build->aho_corasick::nfa::noncontiguous::Builder::build + + +0.54% + + + + +aho_corasick::dfa::Builder::build_from_noncontiguous->__memset_avx2_unaligned_erms + + +0.16% +66× + + + +aho_corasick::dfa::Builder::finish_build_one_start + +s4 +aho_corasick::dfa::Builder::finish_build_one_start +2.54% +(1.61%) +39× + + + +aho_corasick::dfa::Builder::build_from_noncontiguous->aho_corasick::dfa::Builder::finish_build_one_start + + +2.54% +39× + + + +aho_corasick::nfa::noncontiguous::Compiler::shuffle + +s4 +aho_corasick::nfa::noncontiguous::Compiler::shuffle +0.54% +(0.02%) +48× + + + +aho_corasick::nfa::noncontiguous::Builder::build->aho_corasick::nfa::noncontiguous::Compiler::shuffle + + +0.54% +48× + + + +aho_corasick::dfa::Builder::finish_build_one_start::{{closure}} + +s4 +aho_corasick::dfa::Builder::finish_build_one_start::{{closure}} +0.86% +(0.86%) +93597× + + + +aho_corasick::dfa::Builder::finish_build_one_start->aho_corasick::dfa::Builder::finish_build_one_start::{{closure}} + + +0.86% +93597× + + + +aho_corasick::util::remapper::Remapper::remap + +s4 +aho_corasick::util::remapper::Remapper::remap +0.50% +(0.07%) +48× + + + +aho_corasick::nfa::noncontiguous::Compiler::shuffle->aho_corasick::util::remapper::Remapper::remap + + +0.50% +48× + + + +aho_corasick::packed::api::Builder::build + +s4 +aho_corasick::packed::api::Builder::build +0.59% +(0.00%) +96× + + + +alloc::raw_vec::finish_grow->__rust_alloc + + +8.02% +158080× + + + +alloc::raw_vec::finish_grow->__rust_realloc + + +9.17% +44076× + + + +alloc::vec::Vec<T,A>::extend_with + +s4 +alloc::vec::Vec<T,A>::extend_with +4.84% +(2.32%) +67× + + + +alloc::vec::Vec<T,A>::extend_with->__memcpy_avx_unaligned_erms + + +2.52% +669933× + + + +alloc::vec::Vec<T,A>::retain_mut + +s4 +alloc::vec::Vec<T,A>::retain_mut +2.57% +(0.07%) +177× + + + +regex_syntax::hir::literal::PreferenceTrie::insert + +s4 +regex_syntax::hir::literal::PreferenceTrie::insert +2.41% +(1.14%) +16878× + + + +alloc::vec::Vec<T,A>::retain_mut->regex_syntax::hir::literal::PreferenceTrie::insert + + +2.41% +16878× + + + +regex_syntax::hir::literal::PreferenceTrie::insert->alloc::raw_vec::RawVec<T,A>::reserve::do_reserve_and_handle + + +0.82% +8722× + + + +regex_syntax::hir::literal::PreferenceTrie::insert->alloc::raw_vec::RawVec<T,A>::reserve_for_push + + +0.44% +2014× + + + +core::ptr::drop_in_place<regex_automata::nfa::thompson::compiler::Compiler> + +s4 +core::ptr::drop_in_place<regex_automata::nfa::thompson::compiler::Compiler> +3.35% +(1.18%) +674× + + + +core::ptr::drop_in_place<regex_automata::nfa::thompson::compiler::Compiler>-><alloc::vec::Vec<T,A> as core::ops::drop::Drop>::drop + + +1.60% +674× + + + +core::ptr::drop_in_place<regex_automata::nfa::thompson::compiler::Compiler>->__rust_dealloc + + +0.54% +2139× + + + +core::ptr::drop_in_place<regex_syntax::ast::Ast> + +s4 +core::ptr::drop_in_place<regex_syntax::ast::Ast> +7.65% +(0.01%) +774× + + + +core::ptr::drop_in_place<regex_syntax::ast::Ast>-><regex_syntax::ast::Ast as core::ops::drop::Drop>::drop + + +7.62% +774× + + + +core::ptr::drop_in_place<regex_syntax::ast::ClassSet>-><regex_syntax::ast::ClassSet as core::ops::drop::Drop>::drop + + +1.86% +5577× + + + +core::ptr::drop_in_place<regex_syntax::hir::Hir> + +s4 +core::ptr::drop_in_place<regex_syntax::hir::Hir> +3.39% +(0.00%) +224× + + + +core::ptr::drop_in_place<regex_syntax::hir::Hir>-><regex_syntax::hir::Hir as core::ops::drop::Drop>::drop + + +3.37% +224× + + + +std::rt::lang_start::{{closure}} + +s4 +std::rt::lang_start::{{closure}} +99.83% +(0.00%) + + + + +std::rt::lang_start_internal->std::rt::lang_start::{{closure}} + + +99.83% + + + + +once_cell::imp::OnceCell<T>::initialize + +s4 +once_cell::imp::OnceCell<T>::initialize +96.05% +(0.00%) +86× + + + +once_cell::imp::initialize_or_wait + +s4 +once_cell::imp::initialize_or_wait +96.05% +(0.00%) +86× + + + +once_cell::imp::OnceCell<T>::initialize->once_cell::imp::initialize_or_wait + + +96.05% +86× + + + +once_cell::imp::OnceCell<T>::initialize::{{closure}} + +s4 +once_cell::imp::OnceCell<T>::initialize::{{closure}} +96.05% +(0.00%) +86× + + + +once_cell::imp::initialize_or_wait->once_cell::imp::OnceCell<T>::initialize::{{closure}} + + +96.05% +86× + + + +regex::regex::bytes::Regex::new + +s4 +regex::regex::bytes::Regex::new +96.04% +(0.00%) +80× + + + +once_cell::imp::OnceCell<T>::initialize::{{closure}}->regex::regex::bytes::Regex::new + + +96.04% +80× + + + +regex::regex::bytes::Regex::new-><core::iter::adapters::map::Map<I,F> as core::iter::traits::iterator::Iterator>::fold + + +0.50% +80× + + + +regex::builders::Builder::build_one_bytes + +s4 +regex::builders::Builder::build_one_bytes +95.53% +(0.00%) +80× + + + +regex::regex::bytes::Regex::new->regex::builders::Builder::build_one_bytes + + +95.53% +80× + + + +regex_automata::meta::regex::Builder::build + +s4 +regex_automata::meta::regex::Builder::build +96.00% +(0.01%) +81× + + + +regex::builders::Builder::build_one_bytes->regex_automata::meta::regex::Builder::build + + +95.49% +80× + + + +regex_automata::meta::regex::Builder::build->core::ptr::drop_in_place<regex_syntax::ast::Ast> + + +7.62% +81× + + + +regex_automata::meta::regex::Builder::build->core::ptr::drop_in_place<regex_syntax::hir::Hir> + + +3.31% +81× + + + +regex_automata::meta::strategy::new + +s4 +regex_automata::meta::strategy::new +47.98% +(0.05%) +81× + + + +regex_automata::meta::regex::Builder::build->regex_automata::meta::strategy::new + + +47.98% +81× + + + +regex_syntax::ast::parse::Parser::parse + +s4 +regex_syntax::ast::parse::Parser::parse +17.10% +(0.00%) +81× + + + +regex_automata::meta::regex::Builder::build->regex_syntax::ast::parse::Parser::parse + + +17.10% +81× + + + +regex_syntax::hir::translate::Translator::translate + +s4 +regex_syntax::hir::translate::Translator::translate +19.85% +(0.00%) +81× + + + +regex_automata::meta::regex::Builder::build->regex_syntax::hir::translate::Translator::translate + + +19.85% +81× + + + +regex::builders::Builder::build_one_string + +s4 +regex::builders::Builder::build_one_string +0.51% +(0.00%) + + + + +regex::builders::Builder::build_one_string->regex_automata::meta::regex::Builder::build + + +0.51% + + + + +regex::regex::string::Regex::new + +s4 +regex::regex::string::Regex::new +0.51% +(0.00%) + + + + +regex::regex::string::Regex::new->regex::builders::Builder::build_one_string + + +0.51% + + + + +regex_automata::dfa::onepass::Builder::build_from_nfa + +s4 +regex_automata::dfa::onepass::Builder::build_from_nfa +0.71% +(0.04%) +81× + + + +regex_automata::meta::strategy::new->__rust_alloc + + +0.27% +81× + + + +regex_automata::meta::strategy::new->core::ptr::drop_in_place<regex_automata::nfa::thompson::compiler::Compiler> + + +3.32% +175× + + + +regex_automata::meta::reverse_inner::extract + +s4 +regex_automata::meta::reverse_inner::extract +9.68% +(0.00%) +13× + + + +regex_automata::meta::strategy::new->regex_automata::meta::reverse_inner::extract + + +9.68% +13× + + + +regex_automata::util::prefilter::Choice::new + +s4 +regex_automata::util::prefilter::Choice::new +6.84% +(0.00%) +50× + + + +regex_automata::meta::strategy::new->regex_automata::util::prefilter::Choice::new + + +0.85% +15× + + + +regex_automata::meta::wrappers::OnePass::new + +s4 +regex_automata::meta::wrappers::OnePass::new +0.72% +(0.00%) +81× + + + +regex_automata::meta::strategy::new->regex_automata::meta::wrappers::OnePass::new + + +0.72% +81× + + + +regex_automata::nfa::thompson::compiler::Compiler::build_many_from_hir + +s4 +regex_automata::nfa::thompson::compiler::Compiler::build_many_from_hir +29.72% +(0.01%) +175× + + + +regex_automata::meta::strategy::new->regex_automata::nfa::thompson::compiler::Compiler::build_many_from_hir + + +29.72% +175× + + + +regex_automata::util::prefilter::prefixes + +s4 +regex_automata::util::prefilter::prefixes +2.19% +(0.01%) +16× + + + +regex_automata::meta::strategy::new->regex_automata::util::prefilter::prefixes + + +2.19% +16× + + + +regex_automata::util::prefilter::suffixes + +s4 +regex_automata::util::prefilter::suffixes +0.71% +(0.00%) +13× + + + +regex_automata::meta::strategy::new->regex_automata::util::prefilter::suffixes + + +0.71% +13× + + + +regex_syntax::ast::parse::ParserI<P>::parse_with_comments + +s4 +regex_syntax::ast::parse::ParserI<P>::parse_with_comments +17.10% +(2.03%) +81× + + + +regex_syntax::ast::parse::Parser::parse->regex_syntax::ast::parse::ParserI<P>::parse_with_comments + + +17.10% +81× + + + +regex_syntax::ast::visitor::visit + +s4 +regex_syntax::ast::visitor::visit +21.53% +(2.33%) +162× + + + +regex_syntax::hir::translate::Translator::translate->regex_syntax::ast::visitor::visit + + +19.85% +81× + + + +regex_automata::meta::regex::Builder::build_many_from_hir::{{closure}} + +s4 +regex_automata::meta::regex::Builder::build_many_from_hir::{{closure}} +2.88% +(0.00%) +53× + + + +regex_automata::meta::regex::Builder::build_many_from_hir::{{closure}}-><regex_automata::meta::strategy::Core as regex_automata::meta::strategy::Strategy>::create_cache + + +2.32% +42× + + + +regex_automata::meta::regex::Builder::build_many_from_hir::{{closure}}-><regex_automata::meta::strategy::ReverseInner as regex_automata::meta::strategy::Strategy>::create_cache + + +0.56% +11× + + + +regex_automata::meta::reverse_inner::extract-><regex_syntax::hir::Hir as core::ops::drop::Drop>::drop + + +0.25% +13× + + + +regex_automata::meta::reverse_inner::flatten + +s4 +regex_automata::meta::reverse_inner::flatten +0.72% +(0.01%) +193× + + + +regex_automata::meta::reverse_inner::extract->regex_automata::meta::reverse_inner::flatten + + +0.72% +193× + + + +regex_automata::meta::reverse_inner::prefilter + +s4 +regex_automata::meta::reverse_inner::prefilter +8.54% +(0.01%) +44× + + + +regex_automata::meta::reverse_inner::extract->regex_automata::meta::reverse_inner::prefilter + + +8.54% +44× + + + +regex_automata::meta::reverse_inner::flatten->regex_syntax::hir::Hir::alternation + + +0.16% +55× + + + +regex_automata::meta::reverse_inner::prefilter->regex_automata::util::prefilter::Choice::new + + +5.99% +35× + + + +regex_syntax::hir::literal::Extractor::extract + +s4 +regex_syntax::hir::literal::Extractor::extract +2.38% +(0.02%) +73× + + + +regex_automata::meta::reverse_inner::prefilter->regex_syntax::hir::literal::Extractor::extract + + +0.96% +44× + + + +regex_syntax::hir::literal::Seq::optimize_by_preference + +s4 +regex_syntax::hir::literal::Seq::optimize_by_preference +2.94% +(0.04%) +73× + + + +regex_automata::meta::reverse_inner::prefilter->regex_syntax::hir::literal::Seq::optimize_by_preference + + +1.53% +44× + + + +regex_automata::util::prefilter::aho_corasick::AhoCorasick::new + +s4 +regex_automata::util::prefilter::aho_corasick::AhoCorasick::new +1.09% +(0.00%) + + + + +regex_automata::util::prefilter::Choice::new->regex_automata::util::prefilter::aho_corasick::AhoCorasick::new + + +1.09% + + + + +regex_automata::util::prefilter::teddy::Teddy::new + +s4 +regex_automata::util::prefilter::teddy::Teddy::new +5.75% +(0.01%) +48× + + + +regex_automata::util::prefilter::Choice::new->regex_automata::util::prefilter::teddy::Teddy::new + + +5.75% +48× + + + +regex_syntax::hir::literal::Extractor::cross + +s4 +regex_syntax::hir::literal::Extractor::cross +0.95% +(0.21%) +482× + + + +regex_syntax::hir::literal::Extractor::extract->regex_syntax::hir::literal::Extractor::cross + + +0.54% +111× + + + +regex_syntax::hir::literal::Extractor::extract'2 + +s4 +regex_syntax::hir::literal::Extractor::extract'2 +1.49% +(0.09%) +2919× + + + +regex_syntax::hir::literal::Extractor::extract->regex_syntax::hir::literal::Extractor::extract'2 + + +1.49% +975× + + + +regex_syntax::hir::literal::Extractor::union + +s4 +regex_syntax::hir::literal::Extractor::union +1.01% +(0.52%) +2447× + + + +regex_syntax::hir::literal::Extractor::extract->regex_syntax::hir::literal::Extractor::union + + +0.30% +864× + + + +regex_syntax::hir::literal::PreferenceTrie::minimize + +s4 +regex_syntax::hir::literal::PreferenceTrie::minimize +2.90% +(0.05%) +177× + + + +regex_syntax::hir::literal::Seq::optimize_by_preference->regex_syntax::hir::literal::PreferenceTrie::minimize + + +2.90% +177× + + + +regex_automata::meta::wrappers::OnePass::new->regex_automata::dfa::onepass::Builder::build_from_nfa + + +0.71% +81× + + + +regex_automata::nfa::thompson::compiler::Compiler::build_many_from_hir-><core::iter::adapters::map::Map<I,F> as core::iter::traits::iterator::Iterator>::next + + +24.13% +350× + + + +regex_automata::nfa::thompson::builder::Builder::build + +s4 +regex_automata::nfa::thompson::builder::Builder::build +5.53% +(1.10%) +175× + + + +regex_automata::nfa::thompson::compiler::Compiler::build_many_from_hir->regex_automata::nfa::thompson::builder::Builder::build + + +5.53% +175× + + + +regex_automata::util::prefilter::prefixes->regex_syntax::hir::literal::Extractor::extract + + +0.71% +16× + + + +regex_automata::util::prefilter::prefixes->regex_syntax::hir::literal::Seq::optimize_by_preference + + +1.42% +16× + + + +regex_automata::util::prefilter::suffixes->regex_syntax::hir::literal::Extractor::extract + + +0.71% +13× + + + +regex_automata::nfa::thompson::builder::Builder::add + +s4 +regex_automata::nfa::thompson::builder::Builder::add +2.12% +(1.21%) +89172× + + + +regex_automata::nfa::thompson::builder::Builder::add->alloc::raw_vec::RawVec<T,A>::reserve_for_push + + +0.91% +1376× + + + +regex_automata::nfa::thompson::builder::Builder::build->alloc::raw_vec::RawVec<T,A>::reserve::do_reserve_and_handle + + +0.12% +175× + + + +regex_automata::nfa::thompson::builder::Builder::build->__rust_alloc + + +0.83% +12199× + + + +regex_automata::nfa::thompson::builder::Builder::build->alloc::raw_vec::RawVec<T,A>::reserve_for_push + + +0.16% +1033× + + + +regex_automata::nfa::thompson::nfa::Inner::add + +s4 +regex_automata::nfa::thompson::nfa::Inner::add +2.07% +(1.68%) +64329× + + + +regex_automata::nfa::thompson::builder::Builder::build->regex_automata::nfa::thompson::nfa::Inner::add + + +2.07% +64329× + + + +regex_automata::nfa::thompson::nfa::Inner::add->alloc::raw_vec::RawVec<T,A>::reserve_for_push + + +0.39% +1275× + + + +regex_automata::nfa::thompson::builder::Builder::patch + +s4 +regex_automata::nfa::thompson::builder::Builder::patch +1.17% +(0.69%) +59946× + + + +regex_automata::nfa::thompson::builder::Builder::patch->alloc::raw_vec::RawVec<T,A>::reserve_for_push + + +0.48% +5350× + + + +regex_automata::nfa::thompson::compiler::Compiler::c'2 + +s4 +regex_automata::nfa::thompson::compiler::Compiler::c'2 +23.58% +(1.62%) +24591× + + + +regex_automata::nfa::thompson::compiler::Compiler::c->regex_automata::nfa::thompson::compiler::Compiler::c'2 + + +23.55% +2840× + + + +regex_automata::nfa::thompson::compiler::Compiler::c'2->__rust_dealloc + + +1.75% +44977× + + + +regex_automata::nfa::thompson::compiler::Compiler::c'2->regex_automata::nfa::thompson::builder::Builder::add + + +1.15% +49798× + + + +regex_automata::nfa::thompson::compiler::Compiler::c'2->regex_automata::nfa::thompson::builder::Builder::patch + + +0.76% +39677× + + + +regex_automata::nfa::thompson::compiler::Compiler::c'2->regex_automata::nfa::thompson::compiler::Compiler::c'2 + + +12493× + + + +regex_automata::nfa::thompson::compiler::Utf8Compiler::new + +s4 +regex_automata::nfa::thompson::compiler::Utf8Compiler::new +5.10% +(0.00%) +126× + + + +regex_automata::nfa::thompson::compiler::Compiler::c'2->regex_automata::nfa::thompson::compiler::Utf8Compiler::new + + +5.10% +126× + + + +regex_automata::nfa::thompson::literal_trie::LiteralTrie::add + +s4 +regex_automata::nfa::thompson::literal_trie::LiteralTrie::add +6.82% +(2.07%) +26711× + + + +regex_automata::nfa::thompson::compiler::Compiler::c'2->regex_automata::nfa::thompson::literal_trie::LiteralTrie::add + + +6.82% +26711× + + + +regex_automata::nfa::thompson::literal_trie::LiteralTrie::compile + +s4 +regex_automata::nfa::thompson::literal_trie::LiteralTrie::compile +4.90% +(1.18%) +495× + + + +regex_automata::nfa::thompson::compiler::Compiler::c'2->regex_automata::nfa::thompson::literal_trie::LiteralTrie::compile + + +4.90% +495× + + + +regex_automata::nfa::thompson::map::Utf8BoundedMap::clear + +s4 +regex_automata::nfa::thompson::map::Utf8BoundedMap::clear +5.09% +(0.00%) +126× + + + +regex_automata::nfa::thompson::compiler::Utf8Compiler::new->regex_automata::nfa::thompson::map::Utf8BoundedMap::clear + + +5.09% +126× + + + +regex_automata::nfa::thompson::literal_trie::LiteralTrie::add->alloc::raw_vec::RawVec<T,A>::reserve::do_reserve_and_handle + + +1.67% +19750× + + + +regex_automata::nfa::thompson::literal_trie::LiteralTrie::add->alloc::raw_vec::RawVec<T,A>::reserve_for_push + + +3.07% +29149× + + + +regex_automata::nfa::thompson::literal_trie::LiteralTrie::compile->__rust_dealloc + + +0.31% +10884× + + + +regex_automata::nfa::thompson::literal_trie::LiteralTrie::compile->alloc::raw_vec::RawVec<T,A>::reserve_for_push + + +2.62% +37448× + + + +regex_automata::nfa::thompson::literal_trie::LiteralTrie::compile->regex_automata::nfa::thompson::builder::Builder::add + + +0.79% +34476× + + + +regex_automata::nfa::thompson::map::Utf8BoundedMap::clear->__rust_alloc + + +0.25% +67× + + + +regex_automata::nfa::thompson::map::Utf8BoundedMap::clear->alloc::vec::Vec<T,A>::extend_with + + +4.84% +67× + + + +regex_automata::nfa::thompson::pikevm::ActiveStates::reset->alloc::raw_vec::RawVec<T,A>::reserve::do_reserve_and_handle + + +0.72% +318× + + + +regex_automata::nfa::thompson::pikevm::ActiveStates::reset->__memset_avx2_unaligned_erms + + +1.36% +318× + + + +regex_automata::util::pool::inner::Pool<T,F>::get_slow + +s4 +regex_automata::util::pool::inner::Pool<T,F>::get_slow +2.88% +(0.00%) +53× + + + +regex_automata::util::pool::inner::Pool<T,F>::get_slow->regex_automata::meta::regex::Builder::build_many_from_hir::{{closure}} + + +2.88% +53× + + + +regex_automata::util::prefilter::aho_corasick::AhoCorasick::new->aho_corasick::ahocorasick::AhoCorasickBuilder::build + + +1.09% + + + + +regex_automata::util::prefilter::teddy::Teddy::new->aho_corasick::dfa::Builder::build_from_noncontiguous + + +2.71% +39× + + + +regex_automata::util::prefilter::teddy::Teddy::new->aho_corasick::nfa::noncontiguous::Builder::build + + +2.18% +39× + + + +regex_automata::util::prefilter::teddy::Teddy::new->aho_corasick::packed::api::Builder::build + + +0.59% +48× + + + +regex_syntax::ast::Concat::into_ast + +s4 +regex_syntax::ast::Concat::into_ast +1.11% +(0.15%) +16703× + + + +regex_syntax::ast::Concat::into_ast->__rust_alloc + + +0.94% +15786× + + + +regex_syntax::ast::parse::NestLimiter<P>::check + +s4 +regex_syntax::ast::parse::NestLimiter<P>::check +1.68% +(0.00%) +81× + + + +regex_syntax::ast::parse::NestLimiter<P>::check->regex_syntax::ast::visitor::visit + + +1.68% +81× + + + +regex_syntax::ast::visitor::visit-><regex_syntax::ast::parse::NestLimiter<P> as regex_syntax::ast::visitor::Visitor>::visit_pre + + +0.56% +71256× + + + +regex_syntax::ast::visitor::visit-><regex_syntax::hir::translate::TranslatorI as regex_syntax::ast::visitor::Visitor>::visit_post + + +17.36% +71256× + + + +regex_syntax::ast::visitor::visit-><regex_syntax::hir::translate::TranslatorI as regex_syntax::ast::visitor::Visitor>::visit_pre + + +0.72% +71256× + + + +regex_syntax::ast::parse::ParserI<P>::parse_with_comments->__rust_alloc + + +3.29% +52360× + + + +regex_syntax::ast::parse::ParserI<P>::parse_with_comments->alloc::raw_vec::RawVec<T,A>::reserve_for_push + + +1.57% +18495× + + + +regex_syntax::ast::parse::ParserI<P>::parse_with_comments->regex_syntax::ast::parse::NestLimiter<P>::check + + +1.68% +81× + + + +regex_syntax::ast::parse::ParserI<P>::bump + +s4 +regex_syntax::ast::parse::ParserI<P>::bump +2.38% +(1.31%) +92423× + + + +regex_syntax::ast::parse::ParserI<P>::parse_with_comments->regex_syntax::ast::parse::ParserI<P>::bump + + +1.28% +49607× + + + +regex_syntax::ast::parse::ParserI<P>::char + +s4 +regex_syntax::ast::parse::ParserI<P>::char +2.84% +(2.84%) +490624× + + + +regex_syntax::ast::parse::ParserI<P>::parse_with_comments->regex_syntax::ast::parse::ParserI<P>::char + + +1.27% +220401× + + + +regex_syntax::ast::parse::ParserI<P>::parse_set_class + +s4 +regex_syntax::ast::parse::ParserI<P>::parse_set_class +2.38% +(0.24%) +2753× + + + +regex_syntax::ast::parse::ParserI<P>::parse_with_comments->regex_syntax::ast::parse::ParserI<P>::parse_set_class + + +2.38% +2753× + + + +regex_syntax::ast::parse::ParserI<P>::push_alternate + +s4 +regex_syntax::ast::parse::ParserI<P>::push_alternate +2.20% +(0.37%) +15929× + + + +regex_syntax::ast::parse::ParserI<P>::parse_with_comments->regex_syntax::ast::parse::ParserI<P>::push_alternate + + +2.20% +15929× + + + +regex_syntax::ast::parse::ParserI<P>::bump->regex_syntax::ast::parse::ParserI<P>::char + + +1.07% +184846× + + + +regex_syntax::ast::parse::ParserI<P>::parse_set_class->alloc::raw_vec::RawVec<T,A>::reserve_for_push + + +0.13% +2914× + + + +regex_syntax::ast::parse::ParserI<P>::pop_class + +s4 +regex_syntax::ast::parse::ParserI<P>::pop_class +0.60% +(0.09%) +2824× + + + +regex_syntax::ast::parse::ParserI<P>::parse_set_class->regex_syntax::ast::parse::ParserI<P>::pop_class + + +0.60% +2824× + + + +regex_syntax::ast::parse::ParserI<P>::push_class_open + +s4 +regex_syntax::ast::parse::ParserI<P>::push_class_open +0.57% +(0.12%) +2824× + + + +regex_syntax::ast::parse::ParserI<P>::parse_set_class->regex_syntax::ast::parse::ParserI<P>::push_class_open + + +0.57% +2824× + + + +regex_syntax::ast::parse::ParserI<P>::pop_class->__memcpy_avx_unaligned_erms + + +0.12% +13666× + + + +regex_syntax::ast::parse::ParserI<P>::push_class_open->alloc::raw_vec::RawVec<T,A>::reserve_for_push + + +0.19% +81× + + + +regex_syntax::ast::parse::ParserI<P>::push_alternate->alloc::raw_vec::RawVec<T,A>::reserve_for_push + + +0.25% +1445× + + + +regex_syntax::ast::parse::ParserI<P>::push_alternate->regex_syntax::ast::Concat::into_ast + + +1.06% +15929× + + + +regex_syntax::ast::parse::ParserI<P>::push_alternate->regex_syntax::ast::parse::ParserI<P>::bump + + +0.41% +15929× + + + +regex_syntax::hir::Hir::literal->__rust_alloc + + +0.24% +15406× + + + +regex_syntax::hir::Hir::literal->core::str::converts::from_utf8 + + +0.25% +15406× + + + +regex_syntax::hir::literal::Extractor::cross->__rust_dealloc + + +0.20% +5904× + + + +regex_syntax::hir::literal::Extractor::cross->__rust_alloc + + +0.43% +7320× + + + +regex_syntax::hir::literal::Extractor::extract'2->__rust_alloc + + +0.16% +5194× + + + +regex_syntax::hir::literal::Extractor::extract'2->regex_syntax::hir::literal::Extractor::cross + + +0.41% +371× + + + +regex_syntax::hir::literal::Extractor::extract'2->regex_syntax::hir::literal::Extractor::extract'2 + + +1944× + + + +regex_syntax::hir::literal::Extractor::extract'2->regex_syntax::hir::literal::Extractor::union + + +0.71% +1583× + + + +regex_syntax::hir::literal::Extractor::union-><alloc::vec::Vec<T,A> as alloc::vec::spec_extend::SpecExtend<T,I>>::spec_extend + + +0.15% +2443× + + + +regex_syntax::hir::literal::PreferenceTrie::minimize->__rust_dealloc + + +0.28% +7022× + + + +regex_syntax::hir::literal::PreferenceTrie::minimize->alloc::vec::Vec<T,A>::retain_mut + + +2.57% +177× + + + +s4::REGEX_DUR_OFFSET::__getit + +s4 +s4::REGEX_DUR_OFFSET::__getit +0.51% +(0.00%) + + + + +std::sys::common::thread_local::fast_local::fast::Key<T>::try_initialize + +s4 +std::sys::common::thread_local::fast_local::fast::Key<T>::try_initialize +0.51% +(0.00%) + + + + +s4::REGEX_DUR_OFFSET::__getit->std::sys::common::thread_local::fast_local::fast::Key<T>::try_initialize + + +0.51% + + + + +std::sys::common::thread_local::fast_local::fast::Key<T>::try_initialize->regex::regex::string::Regex::new + + +0.51% + + + + +s4::exec_fileprocessor_thread + +s4 +s4::exec_fileprocessor_thread +99.19% +(0.00%) + + + + +s4lib::readers::syslogprocessor::SyslogProcessor::process_stage1_blockzero_analysis + +s4 +s4lib::readers::syslogprocessor::SyslogProcessor::process_stage1_blockzero_analysis +99.16% +(0.00%) + + + + +s4::exec_fileprocessor_thread->s4lib::readers::syslogprocessor::SyslogProcessor::process_stage1_blockzero_analysis + + +99.16% + + + + +s4lib::readers::syslinereader::SyslineReader::find_sysline_in_block_year + +s4 +s4lib::readers::syslinereader::SyslineReader::find_sysline_in_block_year +99.12% +(0.00%) + + + + +s4lib::readers::syslogprocessor::SyslogProcessor::process_stage1_blockzero_analysis->s4lib::readers::syslinereader::SyslineReader::find_sysline_in_block_year + + +99.12% + + + + +s4::main + +s4 +s4::main +0.63% +(0.00%) + + + + +s4::string_wdhms_to_duration + +s4 +s4::string_wdhms_to_duration +0.54% +(0.00%) + + + + +s4::main->s4::string_wdhms_to_duration + + +0.54% + + + + +std::thread::local::LocalKey<T>::with + +s4 +std::thread::local::LocalKey<T>::with +0.54% +(0.00%) + + + + +s4::string_wdhms_to_duration->std::thread::local::LocalKey<T>::with + + +0.54% + + + + +std::thread::local::LocalKey<T>::with->s4::REGEX_DUR_OFFSET::__getit + + +0.51% + + + + +s4lib::data::datetime::bytes_to_regex_to_datetime + +s4 +s4lib::data::datetime::bytes_to_regex_to_datetime +99.10% +(0.00%) +84× + + + +s4lib::data::datetime::bytes_to_regex_to_datetime->once_cell::imp::OnceCell<T>::initialize + + +96.04% +80× + + + +s4lib::data::datetime::bytes_to_regex_to_datetime->regex_automata::util::pool::inner::Pool<T,F>::get_slow + + +2.84% +52× + + + +s4lib::readers::syslinereader::SyslineReader::parse_datetime_in_line_cached + +s4 +s4lib::readers::syslinereader::SyslineReader::parse_datetime_in_line_cached +99.13% +(0.00%) + + + + +s4lib::readers::syslinereader::SyslineReader::find_sysline_in_block_year->s4lib::readers::syslinereader::SyslineReader::parse_datetime_in_line_cached + + +99.12% + + + + +s4lib::readers::syslinereader::SyslineReader::parse_datetime_in_line_cached->s4lib::data::datetime::bytes_to_regex_to_datetime + + +99.10% +84× + + + +std::sys_common::backtrace::__rust_begin_short_backtrace + +s4 +std::sys_common::backtrace::__rust_begin_short_backtrace +99.83% +(0.00%) + + + + +std::rt::lang_start::{{closure}}->std::sys_common::backtrace::__rust_begin_short_backtrace + + +99.83% + + + + +std::sys_common::backtrace::__rust_begin_short_backtrace->s4::exec_fileprocessor_thread + + +99.19% + + + + +std::sys_common::backtrace::__rust_begin_short_backtrace->s4::main + + +0.63% + + + + diff --git a/releases/0.7.75/callgrind.txt b/releases/0.7.75/callgrind.txt new file mode 100644 index 00000000..72f3feab --- /dev/null +++ b/releases/0.7.75/callgrind.txt @@ -0,0 +1,21947 @@ +Linux host 5.15.153.1-microsoft-standard-WSL2 #1 SMP Fri Mar 29 23:14:13 UTC 2024 x86_64 x86_64 x86_64 GNU/Linux +d799548f HEAD -> main +super_speedy_syslog_searcher 0.7.75 +valgrind-3.23.0 + +-------------------------------------------------------------------------------- +Profile data file './callgrind.out' (creator: callgrind-3.23.0) +-------------------------------------------------------------------------------- +I1 cache: +D1 cache: +LL cache: +Timerange: Basic block 0 - 79425929 +Trigger: Program termination +Profiled target: ./target/valgrind/s4 -a 20000101T000000 -b 20000101T080000 ./logs/other/tests/gen-1000-3-foobar.log (PID 372403, part 1) +Events recorded: Ir Ge sysCount sysTime +Events shown: Ir Ge sysCount sysTime +Event sort order: Ir Ge sysCount sysTime +Thresholds: 99 0 0 0 +Include dirs: ./src/ + ./src/data/ + ./src/tests/ + ./src/libload/ + ./src/bindings/ + ./src/debug/ + ./src/bin/ + ./src/readers/ + ./src/printer/ +User annotated: +Auto-annotation: on + +-------------------------------------------------------------------------------- +Ir Ge sysCount sysTime +-------------------------------------------------------------------------------- +346,156,352 (100.0%) 809,752 (100.0%) 310 (100.0%) 1,386 (100.0%) PROGRAM TOTALS + +-------------------------------------------------------------------------------- +Ir Ge sysCount sysTime file:function +-------------------------------------------------------------------------------- + +42,846,430 (12.38%) 10,930 ( 1.35%) 65 (20.97%) 1 ( 0.07%) < ./malloc/./malloc/malloc.c:malloc (191,630x) [/usr/lib/x86_64-linux-gnu/libc.so.6] +15,690,130 ( 4.53%) 22,674 ( 2.80%) 71 (22.90%) . < ./malloc/./malloc/malloc.c:_int_realloc (24,869x) [/usr/lib/x86_64-linux-gnu/libc.so.6] + 216,507 ( 0.06%) 276 ( 0.03%) . . < ./malloc/./malloc/malloc.c:calloc (1,327x) [/usr/lib/x86_64-linux-gnu/libc.so.6] + 30,433 ( 0.01%) . . . < ./malloc/./malloc/malloc.c:_int_memalign (121x) [/usr/lib/x86_64-linux-gnu/libc.so.6] + 629 ( 0.00%) 0 2 ( 0.65%) . < ./malloc/./malloc/malloc.c:tcache_init.part.0 (3x) [/usr/lib/x86_64-linux-gnu/libc.so.6] +45,278,581 (13.08%) 8,016 ( 0.99%) . . * ./malloc/./malloc/malloc.c:_int_malloc [/usr/lib/x86_64-linux-gnu/libc.so.6] +11,896,840 ( 3.44%) 25,860 ( 3.19%) . . > ./malloc/./malloc/malloc.c:malloc_consolidate (2,586x) [/usr/lib/x86_64-linux-gnu/libc.so.6] + 1,591,722 ( 0.46%) . . . > ./malloc/./malloc/malloc.c:unlink_chunk.constprop.0 (65,537x) [/usr/lib/x86_64-linux-gnu/libc.so.6] + 16,986 ( 0.00%) 4 ( 0.00%) 138 (44.52%) 1 ( 0.07%) > ./malloc/./malloc/malloc.c:sysmalloc (137x) [/usr/lib/x86_64-linux-gnu/libc.so.6] + +35,175,603 (10.16%) 260,875 (32.22%) . . < ./malloc/./malloc/malloc.c:free (386,002x) [/usr/lib/x86_64-linux-gnu/libc.so.6] + 2,489,708 ( 0.72%) 2,171 ( 0.27%) . . < ./malloc/./malloc/malloc.c:_int_realloc (28,103x) [/usr/lib/x86_64-linux-gnu/libc.so.6] + 40,155 ( 0.01%) 709 ( 0.09%) . . < ./malloc/./malloc/malloc.c:__malloc_arena_thread_freeres (375x) + 13,235 ( 0.00%) 90 ( 0.01%) . . < ./malloc/./malloc/malloc.c:_int_memalign (165x) [/usr/lib/x86_64-linux-gnu/libc.so.6] +34,762,302 (10.04%) 261,845 (32.34%) . . * ./malloc/./malloc/malloc.c:_int_free [/usr/lib/x86_64-linux-gnu/libc.so.6] + 2,771,705 ( 0.80%) 2,000 ( 0.25%) . . > ./malloc/./malloc/malloc.c:malloc_consolidate (200x) [/usr/lib/x86_64-linux-gnu/libc.so.6] + 178,744 ( 0.05%) . . . > ./malloc/./malloc/malloc.c:unlink_chunk.constprop.0 (7,147x) [/usr/lib/x86_64-linux-gnu/libc.so.6] + +65,271,278 (18.86%) 392,878 (48.52%) 65 (20.97%) 1 ( 0.07%) < /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/std/src/sys/unix/alloc.rs:__rdl_alloc (402,281x) + 3,714 ( 0.00%) 22 ( 0.00%) 7 ( 2.26%) . < ./malloc/./malloc/malloc.c:realloc (6x) [/usr/lib/x86_64-linux-gnu/libc.so.6] + 2,226 ( 0.00%) 2 ( 0.00%) 3 ( 0.97%) . < ???:0x0000000004898380 (4x) [???] +20,324,703 ( 5.87%) 381,956 (47.17%) . . * ./malloc/./malloc/malloc.c:malloc [/usr/lib/x86_64-linux-gnu/libc.so.6] +42,846,430 (12.38%) 10,930 ( 1.35%) 65 (20.97%) 1 ( 0.07%) > ./malloc/./malloc/malloc.c:_int_malloc (191,630x) [/usr/lib/x86_64-linux-gnu/libc.so.6] + 2,960 ( 0.00%) 16 ( 0.00%) 9 ( 2.90%) . > ./malloc/./malloc/malloc.c:tcache_init.part.0 (3x) [/usr/lib/x86_64-linux-gnu/libc.so.6] + + 8,709,129 ( 2.52%) . . . < /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/core/src/intrinsics.rs:alloc::vec::Vec::extend_with (669,933x) + 5,456,176 ( 1.58%) . . . < ???:0x0000000004898620 (24,897x) [???] + 773,760 ( 0.22%) . . . < /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/core/src/intrinsics.rs:::visit_post (48,360x) + 264,180 ( 0.08%) . . . < /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/core/src/intrinsics.rs:regex_syntax::hir::Hir::concat (15,408x) + 254,160 ( 0.07%) . . . < /home/.cargo/registry/src/index.crates.io-6f17d22bba15001f/regex-syntax-0.8.2/src/ast/parse.rs:regex_syntax::ast::parse::ParserI

::pop_class (8,472x) [./target/valgrind/s4] + 223,949 ( 0.06%) . . . < /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/core/src/intrinsics.rs:regex_syntax::hir::literal::Extractor::cross (13,790x) + 169,440 ( 0.05%) . . . < /home/.cargo/registry/src/index.crates.io-6f17d22bba15001f/regex-syntax-0.8.2/src/ast/parse.rs:regex_syntax::ast::parse::ParserI

::pop_class_op (5,648x) [./target/valgrind/s4] + 165,480 ( 0.05%) . . . < /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/core/src/ptr/mod.rs:::drop (5,516x) + 155,491 ( 0.04%) . . . < /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/core/src/intrinsics.rs:regex_automata::nfa::thompson::builder::Builder::build (12,024x) + 106,470 ( 0.03%) . . . < /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/core/src/ptr/mod.rs:regex_syntax::ast::parse::ParserI

::parse_set_class (3,549x) + 84,870 ( 0.02%) . . . < /home/.cargo/registry/src/index.crates.io-6f17d22bba15001f/regex-syntax-0.8.2/src/ast/mod.rs:::drop (2,829x) [./target/valgrind/s4] + 84,720 ( 0.02%) . . . < /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/core/src/result.rs:regex_syntax::ast::parse::ParserI

::parse_set_class (2,824x) + 84,720 ( 0.02%) . . . < /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/core/src/ptr/mod.rs:regex_syntax::ast::parse::ParserI

::pop_class_op (2,824x) + 84,720 ( 0.02%) . . . < /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/core/src/ptr/mod.rs:regex_syntax::ast::parse::ParserI

::pop_class (2,824x) + 69,914 ( 0.02%) . . . < /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/core/src/intrinsics.rs:alloc::vec::from_elem (5,378x) + 68,970 ( 0.02%) . . . < /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/core/src/option.rs:regex_syntax::ast::parse::ParserI

::pop_class (2,299x) + 62,760 ( 0.02%) . . . < /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/core/src/iter/traits/iterator.rs:::drop (2,092x) + 56,690 ( 0.02%) . . . < /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/core/src/intrinsics.rs:regex_automata::nfa::thompson::literal_trie::LiteralTrie::add (4,122x) + 49,086 ( 0.01%) . . . < /home/.cargo/registry/src/index.crates.io-6f17d22bba15001f/regex-automata-0.4.6/src/meta/wrappers.rs:regex_automata::meta::wrappers::Hybrid::new (486x) [./target/valgrind/s4] + 41,720 ( 0.01%) . . . < /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/core/src/intrinsics.rs:regex_syntax::hir::literal::Extractor::extract'2 (2,411x) + 38,848 ( 0.01%) . . . < /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/core/src/intrinsics.rs:regex_syntax::hir::literal::PreferenceTrie::insert (2,611x) + 35,549 ( 0.01%) . . . < /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/core/src/intrinsics.rs:regex_automata::meta::reverse_inner::flatten'2 (2,071x) + 29,938 ( 0.01%) . . . < /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/core/src/intrinsics.rs:::write_str (1,871x) + 27,643 ( 0.01%) . . . < /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/core/src/intrinsics.rs: as core::clone::Clone>::clone (1,589x) + 24,523 ( 0.01%) . . . < /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/core/src/intrinsics.rs:aho_corasick::packed::pattern::Patterns::add (1,394x) + 23,975 ( 0.01%) . . . < /home/.cargo/registry/src/index.crates.io-6f17d22bba15001f/regex-automata-0.4.6/src/hybrid/dfa.rs:regex_automata::hybrid::dfa::Builder::build_from_nfa (525x) [./target/valgrind/s4] + 19,963 ( 0.01%) . . . < /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/core/src/intrinsics.rs:regex_syntax::ast::parse::ParserI

::parse_capture_name (980x) + 18,407 ( 0.01%) . . . < /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/core/src/intrinsics.rs:::clone (1,189x) + 16,604 ( 0.00%) . . . < /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/core/src/intrinsics.rs:regex_syntax::hir::interval::IntervalSet::canonicalize (1,318x) + 15,360 ( 0.00%) . . . < /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/core/src/ptr/mod.rs:regex_syntax::ast::parse::ParserI

::pop_group (512x) + 14,005 ( 0.00%) . . . < /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/alloc/src/boxed.rs:regex_automata::meta::regex::Builder::build (81x) + 11,375 ( 0.00%) . . . < /home/.cargo/registry/src/index.crates.io-6f17d22bba15001f/regex-automata-0.4.6/src/nfa/thompson/builder.rs:regex_automata::nfa::thompson::builder::Builder::build (175x) [./target/valgrind/s4] + 11,361 ( 0.00%) . . . < /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/alloc/src/boxed.rs:regex_automata::nfa::thompson::nfa::Inner::into_nfa (175x) + 11,238 ( 0.00%) . . . < /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/core/src/intrinsics.rs:regex::builders::Builder::build_one_bytes (80x) + 11,234 ( 0.00%) . . . < /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/core/src/intrinsics.rs: as core::iter::traits::iterator::Iterator>::fold (81x) + 10,742 ( 0.00%) . . . < /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/core/src/intrinsics.rs:::visit_class_set_item_post (846x) + 10,408 ( 0.00%) . . . < /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/core/src/intrinsics.rs:regex_automata::nfa::thompson::compiler::Utf8Compiler::compile (758x) + 9,984 ( 0.00%) . . . < /home/.cargo/registry/src/index.crates.io-6f17d22bba15001f/aho-corasick-1.1.2/src/nfa/noncontiguous.rs:aho_corasick::nfa::noncontiguous::Builder::build (144x) [./target/valgrind/s4] + 9,097 ( 0.00%) . . . < /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/core/src/intrinsics.rs:regex_automata::nfa::thompson::compiler::Compiler::c_cap'2 (586x) + 9,097 ( 0.00%) . . . < /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/core/src/intrinsics.rs:regex_automata::util::captures::GroupInfo::new (586x) + 8,544 ( 0.00%) . . . < /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/core/src/result.rs:aho_corasick::nfa::noncontiguous::Builder::build (96x) + 8,523 ( 0.00%) . . . < /home/.cargo/registry/src/index.crates.io-6f17d22bba15001f/regex-automata-0.4.6/src/util/pool.rs:regex_automata::util::pool::inner::Pool::get_slow (53x) [./target/valgrind/s4] + 7,730 ( 0.00%) . . . < /home/.cargo/registry/src/index.crates.io-6f17d22bba15001f/regex-automata-0.4.6/src/meta/wrappers.rs:regex_automata::meta::wrappers::OnePass::new (162x) [./target/valgrind/s4] + 6,967 ( 0.00%) . . . < /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/core/src/intrinsics.rs:alloc::collections::btree::node::Handle,alloc::collections::btree::node::marker::Edge>::insert_recursing (531x) + 6,006 ( 0.00%) . . . < /home/.cargo/registry/src/index.crates.io-6f17d22bba15001f/regex-automata-0.4.6/src/util/prefilter/mod.rs:regex_automata::util::prefilter::Choice::new (78x) [./target/valgrind/s4] + 6,006 ( 0.00%) . . . < /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/core/src/result.rs:regex_automata::util::prefilter::teddy::Teddy::new (78x) + 5,250 ( 0.00%) . . . < /home/.cargo/registry/src/index.crates.io-6f17d22bba15001f/regex-automata-0.4.6/src/util/start.rs:regex_automata::hybrid::dfa::Builder::build_from_nfa (175x) + 5,250 ( 0.00%) . . . < /home/.cargo/registry/src/index.crates.io-6f17d22bba15001f/regex-automata-0.4.6/src/nfa/thompson/nfa.rs:regex_automata::nfa::thompson::nfa::Inner::into_nfa (175x) [./target/valgrind/s4] + 4,914 ( 0.00%) . . . < /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/core/src/intrinsics.rs:alloc::collections::btree::remove::,alloc::collections::btree::node::marker::KV>>::remove_leaf_kv (354x) + 4,578 ( 0.00%) . . . < /home/.cargo/registry/src/index.crates.io-6f17d22bba15001f/clap_builder-4.2.1/src/builder/arg.rs:::augment_args (72x) + 4,242 ( 0.00%) . . . < /home/.cargo/registry/src/index.crates.io-6f17d22bba15001f/regex-automata-0.4.6/src/meta/wrappers.rs:::create_cache (42x) + 3,796 ( 0.00%) . . . < /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/core/src/intrinsics.rs:regex_automata::util::determinize::state::State::dead (292x) + 3,696 ( 0.00%) . . . < /home/.cargo/registry/src/index.crates.io-6f17d22bba15001f/aho-corasick-1.1.2/src/dfa.rs:aho_corasick::dfa::Builder::build_from_noncontiguous (48x) [./target/valgrind/s4] + 3,120 ( 0.00%) . . . < /home/.cargo/registry/src/index.crates.io-6f17d22bba15001f/aho-corasick-1.1.2/src/util/prefilter.rs:aho_corasick::nfa::noncontiguous::Compiler::new (48x) + 3,120 ( 0.00%) . . . < /home/.cargo/registry/src/index.crates.io-6f17d22bba15001f/aho-corasick-1.1.2/src/nfa/noncontiguous.rs:aho_corasick::nfa::noncontiguous::Compiler::new (48x) [./target/valgrind/s4] + 2,999 ( 0.00%) . . . < /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/alloc/src/boxed.rs:regex_automata::util::prefilter::Prefilter::from_choice (39x) + 2,695 ( 0.00%) . . . < /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/core/src/option.rs:regex_automata::meta::reverse_inner::prefilter (35x) + 2,470 ( 0.00%) . . . < /home/.cargo/registry/src/index.crates.io-6f17d22bba15001f/regex-automata-0.4.6/src/meta/strategy.rs:regex_automata::meta::strategy::new (26x) [./target/valgrind/s4] + 2,445 ( 0.00%) . . . < /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/core/src/result.rs:aho_corasick::packed::teddy::generic::Teddy<_>::new (57x) + 2,445 ( 0.00%) . . . < /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/core/src/ptr/mod.rs:aho_corasick::packed::teddy::generic::Teddy<_>::new (57x) + 2,430 ( 0.00%) . . . < /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/alloc/src/boxed.rs:regex_automata::meta::regex::RegexInfo::new (81x) + 2,314 ( 0.00%) . . . < /home/.cargo/registry/src/index.crates.io-6f17d22bba15001f/regex-automata-0.4.6/src/meta/wrappers.rs:regex_automata::meta::wrappers::ReverseHybrid::new (26x) [./target/valgrind/s4] + 2,232 ( 0.00%) . . . < /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/core/src/intrinsics.rs:regex_automata::hybrid::dfa::Lazy::cache_next_state (174x) + 2,144 ( 0.00%) . . . < /home/.cargo/registry/src/index.crates.io-6f17d22bba15001f/clap_builder-4.2.1/src/builder/command.rs:::augment_args (27x) + 2,130 ( 0.00%) . . . < /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/alloc/src/boxed.rs:regex_syntax::ast::parse::ParserI

::pop_class (71x) + 1,892 ( 0.00%) . . . < /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/core/src/intrinsics.rs:aho_corasick::util::remapper::Remapper::remap (48x) + 1,826 ( 0.00%) . . . < /home/.cargo/registry/src/index.crates.io-6f17d22bba15001f/regex-automata-0.4.6/src/meta/wrappers.rs:::create_cache (22x) + 1,665 ( 0.00%) . . . < /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/core/src/intrinsics.rs:clap_builder::util::flat_map::FlatMap::remove_entry (30x) + 1,650 ( 0.00%) . . . < /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/core/src/intrinsics.rs:regex_automata::nfa::thompson::nfa::Inner::into_nfa (96x) + 1,646 ( 0.00%) . . . < /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/core/src/intrinsics.rs:>::from (40x) + 1,560 ( 0.00%) . . . < /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/core/src/intrinsics.rs:alloc::collections::btree::node::BalancingContext::merge_tracking_child_edge (120x) + 1,513 ( 0.00%) . . . < /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/core/src/ptr/mod.rs:clap_builder::builder::command::Command::arg_internal (17x) + 1,386 ( 0.00%) . . . < /home/.cargo/registry/src/index.crates.io-6f17d22bba15001f/aho-corasick-1.1.2/src/ahocorasick.rs:aho_corasick::ahocorasick::AhoCorasickBuilder::build (18x) [./target/valgrind/s4] + 1,365 ( 0.00%) . . . < /home/.cargo/registry/src/index.crates.io-6f17d22bba15001f/aho-corasick-1.1.2/src/packed/teddy/generic.rs:aho_corasick::packed::teddy::builder::x86_64::FatAVX2<3_usize>::new_unchecked (21x) + 1,363 ( 0.00%) . . . < /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/alloc/src/boxed.rs:aho_corasick::packed::teddy::builder::x86_64::FatAVX2<3_usize>::new_unchecked (21x) + 1,311 ( 0.00%) . . . < /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/alloc/src/boxed.rs:regex_automata::meta::strategy::new (13x) + 1,304 ( 0.00%) . . . < /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/core/src/intrinsics.rs:regex_automata::meta::reverse_inner::extract (13x) + 1,278 ( 0.00%) . . . < /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/core/src/result.rs:aho_corasick::ahocorasick::AhoCorasickBuilder::build (18x) + 1,155 ( 0.00%) . . . < /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/core/src/option.rs:regex_automata::meta::strategy::new (15x) + 1,122 ( 0.00%) . . . < /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/core/src/intrinsics.rs:aho_corasick::packed::api::Builder::build (48x) + 1,122 ( 0.00%) . . . < /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/core/src/intrinsics.rs:aho_corasick::dfa::Builder::build_from_noncontiguous (48x) + 951 ( 0.00%) . . . < /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/core/src/intrinsics.rs:alloc::collections::vec_deque::VecDeque::grow (69x) + 865 ( 0.00%) . . . < /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/core/src/intrinsics.rs:core::slice::sort::merge_sort (15x) + 715 ( 0.00%) . . . < src/bin/s4.rs:s4::processing_loop (11x) [./target/valgrind/s4] + 693 ( 0.00%) . . . < /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/alloc/src/boxed.rs:aho_corasick::ahocorasick::AhoCorasickBuilder::build (9x) + 681 ( 0.00%) . . . < /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/core/src/intrinsics.rs:regex_syntax::hir::interval::IntervalSet::negate (61x) + 651 ( 0.00%) . . . < /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/core/src/intrinsics.rs:regex_syntax::hir::interval::IntervalSet::union (58x) + 586 ( 0.00%) . . . < /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/core/src/intrinsics.rs:regex_automata::hybrid::dfa::Lazy::cache_start_group (41x) + 557 ( 0.00%) . . . < src/bin/s4.rs:::augment_args (10x) [./target/valgrind/s4] + 551 ( 0.00%) . . . < /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/alloc/src/alloc.rs:::augment_args (11x) + 447 ( 0.00%) . . . < /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/core/src/intrinsics.rs:::write (33x) + 445 ( 0.00%) . . . < /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/core/src/ptr/mod.rs:crossbeam_channel::channel::read (5x) + 445 ( 0.00%) . . . < /home/.cargo/registry/src/index.crates.io-6f17d22bba15001f/crossbeam-channel-0.5.13/src/flavors/array.rs:crossbeam_channel::channel::read (5x) + 445 ( 0.00%) . . . < /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/core/src/result.rs:crossbeam_channel::select::SelectedOperation::recv (5x) + 443 ( 0.00%) . . . < /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/core/src/ptr/mod.rs:crossbeam_channel::channel::Sender::send (5x) + 435 ( 0.00%) . . . < /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/core/src/intrinsics.rs:s4lib::data::datetime::bytes_to_regex_to_datetime (25x) + 418 ( 0.00%) . . . < src/readers/syslinereader.rs:s4lib::readers::syslinereader::SyslineReader::new (2x) [./target/valgrind/s4] + 396 ( 0.00%) . . . < /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/core/src/intrinsics.rs:regex_automata::meta::reverse_inner::flatten (34x) + 394 ( 0.00%) . . . < src/readers/linereader.rs:s4lib::readers::syslinereader::SyslineReader::new (2x) + 358 ( 0.00%) . . . < src/bin/s4.rs:s4::exec_fileprocessor_thread (2x) [./target/valgrind/s4] + 340 ( 0.00%) . . . < /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/core/src/intrinsics.rs:alloc::collections::btree::node::BalancingContext::bulk_steal_right (24x) + 337 ( 0.00%) . . . < /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/core/src/intrinsics.rs:std::sys::unix::os_str::Slice::to_owned (24x) + 332 ( 0.00%) . . . < src/readers/summary.rs:s4lib::readers::summary::Summary::new (6x) [./target/valgrind/s4] + 330 ( 0.00%) . . . < /home/.cargo/registry/src/index.crates.io-6f17d22bba15001f/regex-automata-0.4.6/src/meta/strategy.rs:::create_cache (11x) [./target/valgrind/s4] + 269 ( 0.00%) . . . < /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/core/src/result.rs:s4lib::readers::syslogprocessor::SyslogProcessor::new (1x) + 269 ( 0.00%) . . . < src/readers/blockreader.rs:s4lib::readers::blockreader::BlockReader::new (7x) [./target/valgrind/s4] + 257 ( 0.00%) . . . < src/readers/syslogprocessor.rs:s4lib::readers::syslogprocessor::SyslogProcessor::new (1x) [./target/valgrind/s4] + 150 ( 0.00%) . . . < /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/core/src/intrinsics.rs:alloc::collections::btree::node::BalancingContext::merge_tracking_parent (12x) + 142 ( 0.00%) . . . < /home/.cargo/registry/src/index.crates.io-6f17d22bba15001f/aho-corasick-1.1.2/src/packed/teddy/builder.rs:aho_corasick::packed::teddy::builder::x86_64::SlimAVX2<4_usize>::new_unchecked (2x) [./target/valgrind/s4] + 119 ( 0.00%) . . . < /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/core/src/ptr/mod.rs:hashbrown::raw::RawTable::insert (2x) + 118 ( 0.00%) . . . < src/readers/syslogprocessor.rs:s4lib::readers::syslogprocessor::SyslogProcessor::summary_complete (2x) [./target/valgrind/s4] + 113 ( 0.00%) . . . < /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/alloc/src/sync.rs:aho_corasick::packed::teddy::builder::x86_64::SlimAVX2<4_usize>::new_unchecked (1x) + 111 ( 0.00%) . . . < /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/alloc/src/boxed.rs:aho_corasick::packed::teddy::builder::x86_64::SlimAVX2<4_usize>::new_unchecked (1x) + 101 ( 0.00%) . . . < /home/.cargo/registry/src/index.crates.io-6f17d22bba15001f/clap_builder-4.2.1/src/builder/command.rs:clap_builder::builder::command::Command::get_matches_from (1x) [./target/valgrind/s4] + 89 ( 0.00%) . . . < /cargo/registry/src/index.crates.io-6f17d22bba15001f/hashbrown-0.12.3/src/map.rs:hashbrown::map::HashMap::insert (1x) [./target/valgrind/s4] + 85 ( 0.00%) . . . < /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/core/src/intrinsics.rs:std::env::args_os (6x) + 78 ( 0.00%) . . . < src/printer/printers.rs:s4lib::printer::printers::PrinterLogMessage::print_sysline_color (6x) [./target/valgrind/s4] + 75 ( 0.00%) . . . < src/data/datetime.rs:s4lib::data::datetime::bytes_to_regex_to_datetime (5x) [./target/valgrind/s4] + 72 ( 0.00%) . . . < /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/core/src/intrinsics.rs:std::env::_var_os (5x) + 65 ( 0.00%) . . . < /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/core/src/intrinsics.rs:regex_automata::dfa::remapper::Remapper::remap (1x) + 65 ( 0.00%) . . . < /home/.cargo/registry/src/index.crates.io-6f17d22bba15001f/regex-automata-0.4.6/src/dfa/onepass.rs:regex_automata::dfa::onepass::Builder::build_from_nfa (1x) [./target/valgrind/s4] + 60 ( 0.00%) . . . < /cargo/registry/src/index.crates.io-6f17d22bba15001f/hashbrown-0.12.3/src/map.rs:s4::processing_loop (2x) + 60 ( 0.00%) . . . < /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/core/src/intrinsics.rs:regex_syntax::hir::lift_common_prefix (5x) + 60 ( 0.00%) . . . < /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/std/src/sys/unix/fs.rs:std::sys::unix::fs::stat (2x) [./target/valgrind/s4] + 54 ( 0.00%) . . . < /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/core/src/intrinsics.rs:<&mut W as core::fmt::Write>::write_str (4x) + 34 ( 0.00%) . . . < /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/core/src/intrinsics.rs:std::sys::unix::fs::canonicalize (2x) + 34 ( 0.00%) . . . < /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/core/src/intrinsics.rs:std::sys::unix::fs::stat (2x) + 30 ( 0.00%) . . . < /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/std/src/sys/unix/fs.rs:std::sys::unix::fs::lstat (1x) [./target/valgrind/s4] + 30 ( 0.00%) . . . < /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/core/src/intrinsics.rs:regex::builders::Builder::build_one_string (1x) + 30 ( 0.00%) . . . < /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/core/src/result.rs:std::fs::File::metadata (1x) + 30 ( 0.00%) . . . < /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/core/src/result.rs:chrono::offset::local::inner::Source::new (1x) + 30 ( 0.00%) . . . < /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/core/src/intrinsics.rs:::parse_ref (2x) + 30 ( 0.00%) . . . < /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/core/src/array/mod.rs:core::array::drain::drain_array_with (1x) + 30 ( 0.00%) . . . < /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/core/src/result.rs:nix::sys::signal::sigaction (1x) + 30 ( 0.00%) . . . < /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/std/src/sys/unix/fs.rs:std::fs::File::metadata (1x) + 30 ( 0.00%) . . . < /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/core/src/intrinsics.rs:core::ops::function::FnOnce::call_once (2x) + 30 ( 0.00%) . . . < /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/core/src/ptr/mod.rs:hashbrown::raw::RawTable::remove_entry (1x) + 30 ( 0.00%) . . . < /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/core/src/result.rs:s4::processing_loop (1x) + 28 ( 0.00%) . . . < /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/std/src/sys/unix/thread.rs:std::sys::unix::thread::Thread::set_name (2x) [./target/valgrind/s4] + 26 ( 0.00%) . . . < /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/core/src/intrinsics.rs:s4::process_dt_exit (2x) + 26 ( 0.00%) . . . < /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/core/src/intrinsics.rs:alloc::vec::Vec::remove (2x) + 18 ( 0.00%) . . . < /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/core/src/intrinsics.rs:s4lib::readers::filepreprocessor::pathbuf_to_filetype_impl (1x) + 18 ( 0.00%) . . . < /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/core/src/intrinsics.rs:clap_builder::builder::command::Command::get_matches_from (1x) + 15 ( 0.00%) . . . < /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/core/src/intrinsics.rs:<&str as alloc::ffi::c_str::CString::new::SpecNewImpl>::spec_new_impl (1x) + 13 ( 0.00%) . . . < /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/core/src/intrinsics.rs:std::fs::read::inner (1x) + 13 ( 0.00%) . . . < /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/core/src/intrinsics.rs:std::sys::unix::fs::lstat (1x) + 12 ( 0.00%) . . . < /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/core/src/intrinsics.rs:std::fs::OpenOptions::_open (1x) + 11 ( 0.00%) . . . < /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/core/src/intrinsics.rs:s4lib::readers::helpers::basename (1x) +17,469,765 ( 5.05%) . . . * ./string/../sysdeps/x86_64/multiarch/memmove-vec-unaligned-erms.S:__memcpy_avx_unaligned_erms [/usr/lib/x86_64-linux-gnu/libc.so.6] + +11,896,840 ( 3.44%) 25,860 ( 3.19%) . . < ./malloc/./malloc/malloc.c:_int_malloc (2,586x) [/usr/lib/x86_64-linux-gnu/libc.so.6] + 2,771,705 ( 0.80%) 2,000 ( 0.25%) . . < ./malloc/./malloc/malloc.c:_int_free (200x) [/usr/lib/x86_64-linux-gnu/libc.so.6] +11,396,501 ( 3.29%) 27,860 ( 3.44%) . . * ./malloc/./malloc/malloc.c:malloc_consolidate [/usr/lib/x86_64-linux-gnu/libc.so.6] + 3,272,044 ( 0.95%) . . . > ./malloc/./malloc/malloc.c:unlink_chunk.constprop.0 (145,168x) [/usr/lib/x86_64-linux-gnu/libc.so.6] + +47,894,015 (13.84%) 260,870 (32.22%) 1 ( 0.32%) . < /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/std/src/sys/unix/alloc.rs:__rdl_dealloc (385,984x) [./target/valgrind/s4] + 1,725 ( 0.00%) 5 ( 0.00%) . . < ???:0x0000000004898370 (19x) [???] + 142 ( 0.00%) 2 ( 0.00%) . . < ./malloc/./malloc/malloc.c:__malloc_arena_thread_freeres (1x) + 89 ( 0.00%) . . . < /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/std/src/sys/unix/fs.rs:std::sys::unix::fs::canonicalize (1x) [./target/valgrind/s4] + 8,492,087 ( 2.45%) . . . * ./malloc/./malloc/malloc.c:free [/usr/lib/x86_64-linux-gnu/libc.so.6] +35,175,603 (10.16%) 260,875 (32.22%) . . > ./malloc/./malloc/malloc.c:_int_free (386,002x) [/usr/lib/x86_64-linux-gnu/libc.so.6] + 35 ( 0.00%) 2 ( 0.00%) 1 ( 0.32%) . > ./malloc/./malloc/malloc.c:munmap_chunk (1x) [/usr/lib/x86_64-linux-gnu/libc.so.6] + + 4,720,239 ( 1.36%) . . . < /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/core/src/ptr/mod.rs:regex_automata::nfa::thompson::pikevm::ActiveStates::reset (318x) + 557,484 ( 0.16%) . . . < /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/core/src/ptr/mod.rs:aho_corasick::dfa::Builder::build_from_noncontiguous (66x) + 324,876 ( 0.09%) . . . < /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/core/src/ptr/mod.rs:regex_automata::nfa::thompson::nfa::Inner::into_nfa (350x) + 284,644 ( 0.08%) . . . < /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/core/src/ptr/mod.rs:regex_automata::nfa::thompson::builder::Builder::build (175x) + 273,096 ( 0.08%) . . . < /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/core/src/ptr/mod.rs:regex_automata::dfa::onepass::Builder::build_from_nfa (324x) + 241,969 ( 0.07%) . . . < /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/core/src/ptr/mod.rs:regex_automata::util::sparse_set::SparseSets::new (468x) + 77,658 ( 0.02%) . . . < /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/core/src/ptr/mod.rs:regex_automata::dfa::onepass::InternalBuilder::add_dfa_state_for_nfa_state (1,066x) + 65,552 ( 0.02%) . . . < /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/core/src/ptr/mod.rs:s4lib::readers::blockreader::BlockReader::read_block_File (1x) + 13,901 ( 0.00%) . . . < ???:0x0000000004898670 (227x) [???] + 6,300 ( 0.00%) . . . < /home/.cargo/registry/src/index.crates.io-6f17d22bba15001f/regex-automata-0.4.6/src/util/alphabet.rs:regex_automata::nfa::thompson::builder::Builder::build (175x) + 4,164 ( 0.00%) . . . < /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/core/src/intrinsics.rs:hashbrown::raw::RawTable::reserve_rehash (347x) + 2,096 ( 0.00%) . . . < /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/core/src/ptr/mod.rs:regex_automata::meta::regex::Regex::create_captures (86x) + 1,728 ( 0.00%) . . . < /home/.cargo/registry/src/index.crates.io-6f17d22bba15001f/aho-corasick-1.1.2/src/util/prefilter.rs:aho_corasick::nfa::noncontiguous::Compiler::new (48x) + 1,013 ( 0.00%) . . . < /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/core/src/ptr/mod.rs:::create_cache (43x) + 279 ( 0.00%) . . . < /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/core/src/ptr/mod.rs:::create_cache (11x) + 199 ( 0.00%) . . . < /home/.cargo/registry/src/index.crates.io-6f17d22bba15001f/regex-automata-0.4.6/src/nfa/thompson/backtrack.rs:regex_automata::nfa::thompson::backtrack::BoundedBacktracker::search_imp (9x) [./target/valgrind/s4] + 108 ( 0.00%) . . . < /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/core/src/intrinsics.rs:hashbrown::raw::RawTable::with_capacity (9x) + 78 ( 0.00%) . . . < src/bin/s4.rs:s4::processing_loop (1x) [./target/valgrind/s4] + 72 ( 0.00%) . . . < /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/core/src/intrinsics.rs:s4::processing_loop (6x) + 48 ( 0.00%) . . . < /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/core/src/intrinsics.rs: as core::ops::drop::Drop>::drop (4x) + 48 ( 0.00%) . . . < /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/core/src/intrinsics.rs:hashbrown::raw::RawTableInner::fallible_with_capacity (4x) + 48 ( 0.00%) . . . < /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/core/src/intrinsics.rs:hashbrown::raw::RawTable::with_capacity_in (4x) + 38 ( 0.00%) . . . < /home/.cargo/registry/src/index.crates.io-6f17d22bba15001f/regex-automata-0.4.6/src/dfa/onepass.rs:regex_automata::dfa::onepass::DFA::try_search_slots_imp (2x) [./target/valgrind/s4] + 26 ( 0.00%) . . . < /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/core/src/ptr/mod.rs:regex_automata::nfa::thompson::backtrack::BoundedBacktracker::search_imp (1x) + 6,575,664 ( 1.90%) . . . * ./string/../sysdeps/x86_64/multiarch/memset-vec-unaligned-erms.S:__memset_avx2_unaligned_erms [/usr/lib/x86_64-linux-gnu/libc.so.6] + +60,085,590 (17.36%) 148,728 (18.37%) 25 ( 8.06%) . < /home/.cargo/registry/src/index.crates.io-6f17d22bba15001f/regex-syntax-0.8.2/src/ast/visitor.rs:regex_syntax::ast::visitor::visit (71,256x) [./target/valgrind/s4] + 5,140,722 ( 1.49%) . . . * /home/.cargo/registry/src/index.crates.io-6f17d22bba15001f/regex-syntax-0.8.2/src/hir/translate.rs:::visit_post [./target/valgrind/s4] +24,202,143 ( 6.99%) 51,330 ( 6.34%) 3 ( 0.97%) . > /home/.cargo/registry/src/index.crates.io-6f17d22bba15001f/regex-syntax-0.8.2/src/hir/mod.rs:regex_syntax::hir::Hir::concat (15,786x) [./target/valgrind/s4] + 6,081,394 ( 1.76%) 2,345 ( 0.29%) 4 ( 1.29%) . > /home/.cargo/registry/src/index.crates.io-6f17d22bba15001f/regex-syntax-0.8.2/src/hir/mod.rs:regex_syntax::hir::Hir::alternation (512x) [./target/valgrind/s4] + 2,114,167 ( 0.61%) 9,515 ( 1.18%) . . > /home/.cargo/registry/src/index.crates.io-6f17d22bba15001f/regex-syntax-0.8.2/src/hir/mod.rs:regex_syntax::hir::Hir::class (3,873x) [./target/valgrind/s4] + 1,012,881 ( 0.29%) 2,240 ( 0.28%) . . > /home/.cargo/registry/src/index.crates.io-6f17d22bba15001f/regex-syntax-0.8.2/src/hir/mod.rs:regex_syntax::hir::ClassUnicode::try_case_fold_simple (1,120x) [./target/valgrind/s4] + 317,853 ( 0.09%) . . . > /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/core/src/ptr/mod.rs:core::ptr::drop_in_place (35,317x) [./target/valgrind/s4] + 178,870 ( 0.05%) . . . > /home/.cargo/registry/src/index.crates.io-6f17d22bba15001f/regex-syntax-0.8.2/src/unicode.rs:regex_syntax::unicode::SimpleCaseFolder::overlaps (1,120x) [./target/valgrind/s4] + 85,074 ( 0.02%) . . . > /home/.cargo/registry/src/index.crates.io-6f17d22bba15001f/regex-syntax-0.8.2/src/hir/translate.rs:regex_syntax::hir::translate::HirFrame::unwrap_expr (2,578x) [./target/valgrind/s4] + 65,950 ( 0.02%) 55 ( 0.01%) . . > /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/alloc/src/string.rs:::clone (586x) [./target/valgrind/s4] + 32,480 ( 0.01%) . . . > /home/.cargo/registry/src/index.crates.io-6f17d22bba15001f/regex-syntax-0.8.2/src/hir/mod.rs:regex_syntax::hir::ClassUnicode::new (1,120x) [./target/valgrind/s4] + 3,020 ( 0.00%) . . . > /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/core/src/ptr/mod.rs:core::ptr::drop_in_place (20x) [./target/valgrind/s4] + + 3,272,044 ( 0.95%) . . . < ./malloc/./malloc/malloc.c:malloc_consolidate (145,168x) [/usr/lib/x86_64-linux-gnu/libc.so.6] + 1,591,722 ( 0.46%) . . . < ./malloc/./malloc/malloc.c:_int_malloc (65,537x) [/usr/lib/x86_64-linux-gnu/libc.so.6] + 178,744 ( 0.05%) . . . < ./malloc/./malloc/malloc.c:_int_free (7,147x) [/usr/lib/x86_64-linux-gnu/libc.so.6] + 93,275 ( 0.03%) . . . < ./malloc/./malloc/malloc.c:_int_realloc (3,534x) [/usr/lib/x86_64-linux-gnu/libc.so.6] + 5,135,785 ( 1.48%) . . . * ./malloc/./malloc/malloc.c:unlink_chunk.constprop.0 [/usr/lib/x86_64-linux-gnu/libc.so.6] + +33,363,424 ( 9.64%) 145,789 (18.00%) 71 (22.90%) . < /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/std/src/sys/unix/alloc.rs:__rdl_realloc (60,654x) + 4,229 ( 0.00%) 22 ( 0.00%) 7 ( 2.26%) . < ???:0x00000000048983b0 (7x) [???] + 4,608,282 ( 1.33%) 120,944 (14.94%) . . * ./malloc/./malloc/malloc.c:realloc [/usr/lib/x86_64-linux-gnu/libc.so.6] +27,424,191 ( 7.92%) 24,845 ( 3.07%) 71 (22.90%) . > ./malloc/./malloc/malloc.c:_int_realloc (60,655x) [/usr/lib/x86_64-linux-gnu/libc.so.6] + 3,714 ( 0.00%) 22 ( 0.00%) 7 ( 2.26%) . > ./malloc/./malloc/malloc.c:malloc (6x) [/usr/lib/x86_64-linux-gnu/libc.so.6] + + 4,228,246 ( 1.22%) . . . * ./malloc/./malloc/arena.c:free + +68,722,234 (19.85%) 151,909 (18.76%) 27 ( 8.71%) . < /home/.cargo/registry/src/index.crates.io-6f17d22bba15001f/regex-syntax-0.8.2/src/hir/translate.rs:regex_syntax::hir::translate::Translator::translate (81x) [./target/valgrind/s4] + 5,820,400 ( 1.68%) 301 ( 0.04%) . . < /home/.cargo/registry/src/index.crates.io-6f17d22bba15001f/regex-syntax-0.8.2/src/ast/parse.rs:regex_syntax::ast::parse::NestLimiter

::check (81x) [./target/valgrind/s4] + 4,162,523 ( 1.20%) . . . * /home/.cargo/registry/src/index.crates.io-6f17d22bba15001f/regex-syntax-0.8.2/src/ast/visitor.rs:regex_syntax::ast::visitor::visit [./target/valgrind/s4] +60,085,590 (17.36%) 148,728 (18.37%) 25 ( 8.06%) . > /home/.cargo/registry/src/index.crates.io-6f17d22bba15001f/regex-syntax-0.8.2/src/hir/translate.rs:::visit_post (71,256x) [./target/valgrind/s4] + 2,503,709 ( 0.72%) 1,256 ( 0.16%) 2 ( 0.65%) . > /home/.cargo/registry/src/index.crates.io-6f17d22bba15001f/regex-syntax-0.8.2/src/hir/translate.rs:::visit_pre (71,256x) [./target/valgrind/s4] + 1,928,319 ( 0.56%) . . . > /home/.cargo/registry/src/index.crates.io-6f17d22bba15001f/regex-syntax-0.8.2/src/ast/parse.rs: as regex_syntax::ast::visitor::Visitor>::visit_pre (71,256x) [./target/valgrind/s4] + 1,599,466 ( 0.46%) 1,609 ( 0.20%) . . > /home/.cargo/registry/src/index.crates.io-6f17d22bba15001f/regex-syntax-0.8.2/src/hir/translate.rs:::visit_class_set_item_post (4,916x) [./target/valgrind/s4] + 111,580 ( 0.03%) . . . > /home/.cargo/registry/src/index.crates.io-6f17d22bba15001f/regex-syntax-0.8.2/src/ast/parse.rs: as regex_syntax::ast::visitor::Visitor>::visit_class_set_item_pre (4,916x) [./target/valgrind/s4] + 64,743 ( 0.02%) . . . > /home/.cargo/registry/src/index.crates.io-6f17d22bba15001f/regex-syntax-0.8.2/src/hir/translate.rs:::visit_class_set_item_pre (4,916x) [./target/valgrind/s4] + 6,075 ( 0.00%) . . . > /home/.cargo/registry/src/index.crates.io-6f17d22bba15001f/regex-syntax-0.8.2/src/hir/translate.rs:::finish (81x) [./target/valgrind/s4] + + 4,406,916 ( 1.27%) . . . < /home/.cargo/registry/src/index.crates.io-6f17d22bba15001f/regex-syntax-0.8.2/src/ast/parse.rs:regex_syntax::ast::parse::ParserI

::parse_with_comments (220,401x) [./target/valgrind/s4] + 3,697,472 ( 1.07%) . . . < /home/.cargo/registry/src/index.crates.io-6f17d22bba15001f/regex-syntax-0.8.2/src/ast/parse.rs:regex_syntax::ast::parse::ParserI

::bump (184,846x) [./target/valgrind/s4] + 318,580 ( 0.09%) . . . < /home/.cargo/registry/src/index.crates.io-6f17d22bba15001f/regex-syntax-0.8.2/src/ast/parse.rs:regex_syntax::ast::parse::ParserI

::push_alternate (15,929x) [./target/valgrind/s4] + 254,904 ( 0.07%) . . . < /home/.cargo/registry/src/index.crates.io-6f17d22bba15001f/regex-syntax-0.8.2/src/ast/parse.rs:regex_syntax::ast::parse::ParserI

::parse_set_class (12,720x) [./target/valgrind/s4] + 225,912 ( 0.07%) . . . < /home/.cargo/registry/src/index.crates.io-6f17d22bba15001f/regex-syntax-0.8.2/src/ast/parse.rs:regex_syntax::ast::parse::ParserI

::parse_set_class_open (11,298x) [./target/valgrind/s4] + 189,600 ( 0.05%) . . . < /home/.cargo/registry/src/index.crates.io-6f17d22bba15001f/regex-syntax-0.8.2/src/ast/parse.rs:regex_syntax::ast::parse::ParserI

::parse_set_class_item (9,360x) [./target/valgrind/s4] + 141,420 ( 0.04%) . . . < /home/.cargo/registry/src/index.crates.io-6f17d22bba15001f/regex-syntax-0.8.2/src/ast/parse.rs:regex_syntax::ast::parse::ParserI

::maybe_parse_ascii_class (7,071x) [./target/valgrind/s4] + 136,920 ( 0.04%) . . . < /home/.cargo/registry/src/index.crates.io-6f17d22bba15001f/regex-syntax-0.8.2/src/ast/parse.rs:regex_syntax::ast::parse::ParserI

::parse_capture_name (6,846x) [./target/valgrind/s4] + 71,580 ( 0.02%) . . . < /home/.cargo/registry/src/index.crates.io-6f17d22bba15001f/regex-syntax-0.8.2/src/ast/parse.rs:regex_syntax::ast::parse::ParserI

::parse_set_class_range (3,549x) [./target/valgrind/s4] + 71,160 ( 0.02%) . . . < /home/.cargo/registry/src/index.crates.io-6f17d22bba15001f/regex-syntax-0.8.2/src/ast/parse.rs:regex_syntax::ast::parse::ParserI

::parse_uncounted_repetition (3,558x) [./target/valgrind/s4] + 64,480 ( 0.02%) . . . < /home/.cargo/registry/src/index.crates.io-6f17d22bba15001f/regex-syntax-0.8.2/src/ast/parse.rs:regex_syntax::ast::parse::ParserI

::parse_escape (3,224x) [./target/valgrind/s4] + 56,480 ( 0.02%) . . . < /home/.cargo/registry/src/index.crates.io-6f17d22bba15001f/regex-syntax-0.8.2/src/ast/parse.rs:regex_syntax::ast::parse::ParserI

::pop_class (2,824x) [./target/valgrind/s4] + 56,432 ( 0.02%) . . . < /home/.cargo/registry/src/index.crates.io-6f17d22bba15001f/regex-syntax-0.8.2/src/ast/parse.rs:regex_syntax::ast::parse::ParserI

::push_class_open (2,824x) [./target/valgrind/s4] + 43,132 ( 0.01%) . . . < /home/.cargo/registry/src/index.crates.io-6f17d22bba15001f/regex-syntax-0.8.2/src/ast/parse.rs:regex_syntax::ast::parse::ParserI

::parse_group (2,159x) [./target/valgrind/s4] + 32,180 ( 0.01%) . . . < /home/.cargo/registry/src/index.crates.io-6f17d22bba15001f/regex-syntax-0.8.2/src/ast/parse.rs:regex_syntax::ast::parse::ParserI

::parse_decimal (1,609x) [./target/valgrind/s4] + 15,100 ( 0.00%) . . . < /home/.cargo/registry/src/index.crates.io-6f17d22bba15001f/regex-syntax-0.8.2/src/ast/parse.rs:regex_syntax::ast::parse::ParserI

::parse_counted_repetition (755x) [./target/valgrind/s4] + 14,244 ( 0.00%) . . . < /home/.cargo/registry/src/index.crates.io-6f17d22bba15001f/regex-syntax-0.8.2/src/ast/parse.rs:regex_syntax::ast::parse::ParserI

::push_group (713x) [./target/valgrind/s4] + 13,860 ( 0.00%) . . . < /home/.cargo/registry/src/index.crates.io-6f17d22bba15001f/regex-syntax-0.8.2/src/ast/parse.rs:regex_syntax::ast::parse::ParserI

::pop_group (693x) [./target/valgrind/s4] + 4,200 ( 0.00%) . . . < /home/.cargo/registry/src/index.crates.io-6f17d22bba15001f/regex-syntax-0.8.2/src/ast/parse.rs:regex_syntax::ast::parse::ParserI

::parse_flags (210x) [./target/valgrind/s4] + 400 ( 0.00%) . . . < /home/.cargo/registry/src/index.crates.io-6f17d22bba15001f/regex-syntax-0.8.2/src/ast/parse.rs:regex_syntax::ast::parse::ParserI

::parse_flag (20x) [./target/valgrind/s4] + 300 ( 0.00%) . . . < /home/.cargo/registry/src/index.crates.io-6f17d22bba15001f/regex-syntax-0.8.2/src/ast/parse.rs:regex_syntax::ast::parse::ParserI

::parse_perl_class (15x) [./target/valgrind/s4] + 3,925,952 ( 1.13%) . . . * /home/.cargo/registry/src/index.crates.io-6f17d22bba15001f/regex-syntax-0.8.2/src/ast/parse.rs:regex_syntax::ast::parse::ParserI

::char [./target/valgrind/s4] + + 3,684,933 ( 1.06%) . . . * /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/core/src/ptr/mod.rs:alloc::vec::Vec::extend_with + +27,424,191 ( 7.92%) 24,845 ( 3.07%) 71 (22.90%) . < ./malloc/./malloc/malloc.c:realloc (60,655x) [/usr/lib/x86_64-linux-gnu/libc.so.6] + 3,646,328 ( 1.05%) . . . * ./malloc/./malloc/malloc.c:_int_realloc [/usr/lib/x86_64-linux-gnu/libc.so.6] +15,690,130 ( 4.53%) 22,674 ( 2.80%) 71 (22.90%) . > ./malloc/./malloc/malloc.c:_int_malloc (24,869x) [/usr/lib/x86_64-linux-gnu/libc.so.6] + 5,504,750 ( 1.59%) . . . > ???:0x0000000004898620 (24,838x) [???] + 2,489,708 ( 0.72%) 2,171 ( 0.27%) . . > ./malloc/./malloc/malloc.c:_int_free (28,103x) [/usr/lib/x86_64-linux-gnu/libc.so.6] + 93,275 ( 0.03%) . . . > ./malloc/./malloc/malloc.c:unlink_chunk.constprop.0 (3,534x) [/usr/lib/x86_64-linux-gnu/libc.so.6] + +59,197,629 (17.10%) 142,225 (17.56%) 1 ( 0.32%) . < /home/.cargo/registry/src/index.crates.io-6f17d22bba15001f/regex-syntax-0.8.2/src/ast/parse.rs:regex_syntax::ast::parse::Parser::parse (81x) [./target/valgrind/s4] + 3,625,753 ( 1.05%) . . . * /home/.cargo/registry/src/index.crates.io-6f17d22bba15001f/regex-syntax-0.8.2/src/ast/parse.rs:regex_syntax::ast::parse::ParserI

::parse_with_comments [./target/valgrind/s4] + 8,247,277 ( 2.38%) 1,236 ( 0.15%) . . > /home/.cargo/registry/src/index.crates.io-6f17d22bba15001f/regex-syntax-0.8.2/src/ast/parse.rs:regex_syntax::ast::parse::ParserI

::parse_set_class (2,753x) [./target/valgrind/s4] + 7,601,358 ( 2.20%) 26,127 ( 3.23%) . . > /home/.cargo/registry/src/index.crates.io-6f17d22bba15001f/regex-syntax-0.8.2/src/ast/parse.rs:regex_syntax::ast::parse::ParserI

::push_alternate (15,929x) [./target/valgrind/s4] + 5,820,805 ( 1.68%) 301 ( 0.04%) . . > /home/.cargo/registry/src/index.crates.io-6f17d22bba15001f/regex-syntax-0.8.2/src/ast/parse.rs:regex_syntax::ast::parse::NestLimiter

::check (81x) [./target/valgrind/s4] + 4,414,503 ( 1.28%) . . . > /home/.cargo/registry/src/index.crates.io-6f17d22bba15001f/regex-syntax-0.8.2/src/ast/parse.rs:regex_syntax::ast::parse::ParserI

::bump (49,607x) [./target/valgrind/s4] + 4,406,916 ( 1.27%) . . . > /home/.cargo/registry/src/index.crates.io-6f17d22bba15001f/regex-syntax-0.8.2/src/ast/parse.rs:regex_syntax::ast::parse::ParserI

::char (220,401x) [./target/valgrind/s4] + 1,561,216 ( 0.45%) 691 ( 0.09%) . . > /home/.cargo/registry/src/index.crates.io-6f17d22bba15001f/regex-syntax-0.8.2/src/ast/parse.rs:regex_syntax::ast::parse::ParserI

::push_group (713x) [./target/valgrind/s4] + 1,289,898 ( 0.37%) . . . > /home/.cargo/registry/src/index.crates.io-6f17d22bba15001f/regex-syntax-0.8.2/src/ast/parse.rs:regex_syntax::ast::parse::ParserI

::bump_space (71,661x) [./target/valgrind/s4] + 922,916 ( 0.27%) 2,262 ( 0.28%) 1 ( 0.32%) . > /home/.cargo/registry/src/index.crates.io-6f17d22bba15001f/regex-syntax-0.8.2/src/ast/parse.rs:regex_syntax::ast::parse::ParserI

::pop_group (693x) [./target/valgrind/s4] + 812,915 ( 0.23%) 1,154 ( 0.14%) . . > /home/.cargo/registry/src/index.crates.io-6f17d22bba15001f/regex-syntax-0.8.2/src/ast/parse.rs:regex_syntax::ast::parse::ParserI

::parse_uncounted_repetition (1,713x) [./target/valgrind/s4] + 250,967 ( 0.07%) 134 ( 0.02%) . . > /home/.cargo/registry/src/index.crates.io-6f17d22bba15001f/regex-syntax-0.8.2/src/ast/parse.rs:regex_syntax::ast::parse::ParserI

::parse_counted_repetition (172x) [./target/valgrind/s4] + 28,437 ( 0.01%) 134 ( 0.02%) . . > /home/.cargo/registry/src/index.crates.io-6f17d22bba15001f/regex-syntax-0.8.2/src/ast/parse.rs:regex_syntax::ast::parse::ParserI

::pop_group_end (81x) [./target/valgrind/s4] + + 3,349,866 ( 0.97%) . . . * /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/core/src/intrinsics.rs:alloc::vec::Vec::extend_with + 8,709,129 ( 2.52%) . . . > ./string/../sysdeps/x86_64/multiarch/memmove-vec-unaligned-erms.S:__memcpy_avx_unaligned_erms (669,933x) [/usr/lib/x86_64-linux-gnu/libc.so.6] + +40,279,987 (11.64%) 179,450 (22.16%) 74 (23.87%) . < /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/alloc/src/raw_vec.rs:alloc::raw_vec::RawVec::reserve_for_push (150,607x) [./target/valgrind/s4] +24,577,118 ( 7.10%) 88,532 (10.93%) 11 ( 3.55%) 1 ( 0.07%) < /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/alloc/src/raw_vec.rs:alloc::raw_vec::RawVec::reserve::do_reserve_and_handle (51,547x) [./target/valgrind/s4] + 354 ( 0.00%) 2 ( 0.00%) . . < /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/alloc/src/raw_vec.rs:alloc::ffi::c_str::CString::_from_vec_unchecked (2x) + 3,102,270 ( 0.90%) . . . * /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/alloc/src/raw_vec.rs:alloc::raw_vec::finish_grow [./target/valgrind/s4] +27,753,819 ( 8.02%) 155,526 (19.21%) 14 ( 4.52%) 1 ( 0.07%) > ???:__rust_alloc (158,080x) [./target/valgrind/s4] + +10,618,605 ( 3.07%) 49,414 ( 6.10%) 10 ( 3.23%) . < /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/alloc/src/vec/mod.rs:regex_automata::nfa::thompson::literal_trie::LiteralTrie::add (29,149x) + 9,056,265 ( 2.62%) 44,527 ( 5.50%) 12 ( 3.87%) . < /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/alloc/src/vec/mod.rs:regex_automata::nfa::thompson::literal_trie::LiteralTrie::compile (37,448x) + 5,438,643 ( 1.57%) 28,487 ( 3.52%) . . < /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/alloc/src/vec/mod.rs:regex_syntax::ast::parse::ParserI

::parse_with_comments (18,495x) + 3,424,485 ( 0.99%) 7,119 ( 0.88%) 16 ( 5.16%) . < /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/alloc/src/vec/mod.rs:::visit_post (18,030x) + 3,150,265 ( 0.91%) 4,949 ( 0.61%) 25 ( 8.06%) . < /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/alloc/src/vec/mod.rs:regex_automata::nfa::thompson::builder::Builder::add (1,376x) + 2,405,110 ( 0.69%) 3,759 ( 0.46%) . . < /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/alloc/src/vec/mod.rs:regex_syntax::hir::Hir::concat (16,418x) + 1,668,597 ( 0.48%) 8,779 ( 1.08%) . . < /home/.cargo/registry/src/index.crates.io-6f17d22bba15001f/regex-automata-0.4.6/src/nfa/thompson/builder.rs:regex_automata::nfa::thompson::builder::Builder::patch (5,350x) [./target/valgrind/s4] + 1,526,004 ( 0.44%) 5,037 ( 0.62%) . . < /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/alloc/src/vec/mod.rs:regex_syntax::hir::literal::PreferenceTrie::insert (2,014x) + 1,337,178 ( 0.39%) 3,970 ( 0.49%) 9 ( 2.90%) . < /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/alloc/src/vec/mod.rs:regex_automata::nfa::thompson::nfa::Inner::add (1,275x) + 849,672 ( 0.25%) 4,361 ( 0.54%) . . < /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/alloc/src/vec/mod.rs:regex_syntax::ast::parse::ParserI

::push_alternate (1,445x) + 665,842 ( 0.19%) 320 ( 0.04%) . . < /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/alloc/src/vec/mod.rs:regex_syntax::ast::parse::ParserI

::push_class_open (81x) + 537,156 ( 0.16%) 2,168 ( 0.27%) . . < /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/alloc/src/vec/mod.rs:regex_automata::nfa::thompson::builder::Builder::build (1,033x) + 512,951 ( 0.15%) 2,240 ( 0.28%) . . < /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/alloc/src/vec/mod.rs:::case_fold_simple (1,120x) + 460,064 ( 0.13%) 2,538 ( 0.31%) . . < /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/alloc/src/vec/mod.rs:aho_corasick::dfa::DFA::set_matches (1,835x) + 434,983 ( 0.13%) 888 ( 0.11%) . . < /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/alloc/src/vec/mod.rs:regex_syntax::ast::parse::ParserI

::parse_set_class (2,914x) + 431,257 ( 0.12%) 1,228 ( 0.15%) . . < /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/alloc/src/vec/mod.rs:aho_corasick::nfa::noncontiguous::NFA::init_full_state (384x) + 354,385 ( 0.10%) 943 ( 0.12%) . . < /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/alloc/src/vec/mod.rs:regex_automata::nfa::thompson::compiler::Utf8Compiler::compile_from (1,851x) + 318,987 ( 0.09%) 1,256 ( 0.16%) 2 ( 0.65%) . < /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/alloc/src/vec/mod.rs:::visit_pre (297x) + 257,094 ( 0.07%) 293 ( 0.04%) . . < /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/alloc/src/vec/mod.rs:::visit_class_set_item_post (1,978x) + 225,069 ( 0.07%) 884 ( 0.11%) . . < /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/alloc/src/vec/mod.rs:aho_corasick::packed::pattern::Patterns::add (360x) + 180,819 ( 0.05%) 704 ( 0.09%) . . < /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/alloc/src/vec/mod.rs:aho_corasick::packed::rabinkarp::RabinKarp::new (733x) + 158,573 ( 0.05%) 102 ( 0.01%) . . < /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/alloc/src/vec/mod.rs:regex_syntax::utf8::Utf8Sequences::new (1,316x) + 123,536 ( 0.04%) 329 ( 0.04%) . . < /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/alloc/src/vec/mod.rs:regex_syntax::ast::visitor::visit (486x) + 123,301 ( 0.04%) 624 ( 0.08%) . . < /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/alloc/src/vec/mod.rs:aho_corasick::nfa::noncontiguous::NFA::alloc_state (221x) + 117,771 ( 0.03%) 546 ( 0.07%) . . < /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/alloc/src/vec/mod.rs:regex_automata::util::captures::GroupInfo::new (227x) + 116,548 ( 0.03%) 440 ( 0.05%) . . < /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/alloc/src/vec/mod.rs:regex_automata::nfa::thompson::builder::Builder::add_capture_start (308x) + 114,108 ( 0.03%) 440 ( 0.05%) . . < /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/alloc/src/vec/mod.rs:regex_syntax::ast::parse::ParserI

::pop_group (243x) + 92,148 ( 0.03%) 310 ( 0.04%) . . < /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/alloc/src/vec/mod.rs:aho_corasick::nfa::noncontiguous::Builder::build (324x) + 92,050 ( 0.03%) 260 ( 0.03%) . . < /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/alloc/src/vec/mod.rs:regex_automata::dfa::onepass::InternalBuilder::stack_push (211x) + 83,394 ( 0.02%) 302 ( 0.04%) . . < /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/alloc/src/vec/mod.rs:aho_corasick::nfa::noncontiguous::NFA::add_match (144x) + 82,589 ( 0.02%) 335 ( 0.04%) . . < /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/alloc/src/vec/mod.rs:regex_syntax::hir::interval::IntervalSet::canonicalize (167x) + 77,391 ( 0.02%) 4 ( 0.00%) . . < /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/alloc/src/vec/mod.rs:regex_automata::nfa::thompson::range_trie::RangeTrie::add_empty (674x) + 73,627 ( 0.02%) 307 ( 0.04%) . . < /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/alloc/src/collections/vec_deque/mod.rs:alloc::collections::vec_deque::VecDeque::grow (180x) [./target/valgrind/s4] + 67,308 ( 0.02%) 196 ( 0.02%) . . < /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/alloc/src/vec/mod.rs:aho_corasick::packed::teddy::generic::Teddy<_>::new (406x) + 62,139 ( 0.02%) 328 ( 0.04%) . . < /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/alloc/src/vec/mod.rs:regex_automata::nfa::thompson::nfa::Inner::into_nfa (175x) + 49,921 ( 0.01%) 140 ( 0.02%) . . < /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/alloc/src/vec/mod.rs:regex_automata::meta::regex::Builder::build (162x) + 44,415 ( 0.01%) 152 ( 0.02%) . . < /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/alloc/src/vec/mod.rs:regex_automata::util::captures::GroupInfoInner::add_first_group (243x) + 41,275 ( 0.01%) 169 ( 0.02%) . . < /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/alloc/src/vec/mod.rs:regex_automata::dfa::onepass::InternalBuilder::add_dfa_state_for_nfa_state (154x) + 36,547 ( 0.01%) 78 ( 0.01%) . . < /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/alloc/src/vec/mod.rs:regex_syntax::hir::literal::Extractor::extract'2 (125x) + 36,108 ( 0.01%) 179 ( 0.02%) . . < /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/alloc/src/vec/mod.rs:regex_syntax::hir::interval::IntervalSet::negate (81x) + 25,991 ( 0.01%) 66 ( 0.01%) . . < /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/alloc/src/vec/mod.rs: as core::iter::traits::iterator::Iterator>::next (175x) + 16,560 ( 0.00%) 68 ( 0.01%) . . < /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/alloc/src/vec/mod.rs:regex_automata::hybrid::dfa::Lazy::cache_next_state (34x) + 13,338 ( 0.00%) . . . < /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/alloc/src/vec/mod.rs:regex_automata::hybrid::dfa::Lazy::init_cache (117x) + 11,917 ( 0.00%) 14 ( 0.00%) . . < /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/alloc/src/vec/mod.rs:regex_automata::meta::regex::RegexInfo::new (81x) + 11,880 ( 0.00%) . . . < /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/alloc/src/vec/mod.rs:regex_syntax::hir::ClassBytes::push (110x) + 10,788 ( 0.00%) 2 ( 0.00%) . . < /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/alloc/src/vec/mod.rs:regex_syntax::ast::parse::ParserI

::push_group (91x) + 10,278 ( 0.00%) 57 ( 0.01%) . . < /home/.cargo/registry/src/index.crates.io-6f17d22bba15001f/regex-automata-0.4.6/src/util/determinize/mod.rs:regex_automata::util::determinize::add_nfa_states (23x) [./target/valgrind/s4] + 9,288 ( 0.00%) . . . < /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/alloc/src/vec/mod.rs:clap_builder::parser::matches::matched_arg::MatchedArg::append_val (36x) + 9,204 ( 0.00%) 78 ( 0.01%) . . < /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/alloc/src/vec/mod.rs:regex_automata::util::determinize::add_nfa_states (39x) + 9,153 ( 0.00%) . . . < /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/alloc/src/vec/mod.rs:regex_automata::dfa::onepass::Builder::build_from_nfa (81x) + 8,622 ( 0.00%) 2 ( 0.00%) . . < /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/alloc/src/vec/mod.rs:regex_syntax::ast::parse::ParserI

::parse_decimal (78x) + 8,154 ( 0.00%) 30 ( 0.00%) . . < /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/alloc/src/vec/mod.rs:regex_syntax::hir::Hir::alternation (22x) + 8,023 ( 0.00%) . . . < /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/alloc/src/vec/mod.rs:regex_syntax::ast::parse::ParserI

::pop_class (71x) + 7,638 ( 0.00%) . . . < /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/alloc/src/vec/mod.rs:regex_automata::nfa::thompson::compiler::Utf8Compiler::new (67x) + 7,596 ( 0.00%) . . . < /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/alloc/src/vec/mod.rs:clap_builder::parser::arg_matcher::ArgMatcher::start_custom_arg (30x) + 5,000 ( 0.00%) 20 ( 0.00%) . . < /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/alloc/src/vec/mod.rs:regex_syntax::ast::parse::ParserI

::parse_flags (20x) + 4,633 ( 0.00%) . . . < /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/alloc/src/vec/mod.rs:regex_automata::util::determinize::epsilon_closure (41x) + 3,711 ( 0.00%) . . . < /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/alloc/src/vec/mod.rs:clap_builder::parser::arg_matcher::ArgMatcher::add_index_to (15x) + 2,469 ( 0.00%) . . . < /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/alloc/src/vec/mod.rs:clap_builder::util::flat_map::Entry::or_insert (6x) + 1,681 ( 0.00%) 6 ( 0.00%) . . < /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/alloc/src/vec/mod.rs:regex_automata::nfa::thompson::backtrack::BoundedBacktracker::search_imp (4x) + 1,510 ( 0.00%) . . . < /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/alloc/src/vec/mod.rs:clap_builder::builder::command::Command::arg_internal (4x) + 1,293 ( 0.00%) . . . < /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/alloc/src/vec/mod.rs:::augment_args (6x) + 822 ( 0.00%) . . . < /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/alloc/src/vec/mod.rs:clap_builder::builder::command::Command::_build_self (3x) + 819 ( 0.00%) 2 ( 0.00%) . . < /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/alloc/src/vec/mod.rs:::write_char (2x) + 595 ( 0.00%) . . . < /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/alloc/src/vec/mod.rs:regex_syntax::hir::lift_common_prefix (2x) + 516 ( 0.00%) . . . < /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/alloc/src/vec/mod.rs:clap_builder::parser::arg_matcher::ArgMatcher::start_custom_group (2x) + 487 ( 0.00%) . . . < /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/alloc/src/vec/mod.rs:regex_syntax::hir::Hir::alternation'2 (2x) + 486 ( 0.00%) . . . < /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/alloc/src/vec/mod.rs:clap_builder::parser::parser::Parser::get_matches_with (3x) + 483 ( 0.00%) . . . < /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/alloc/src/vec/mod.rs:clap_builder::builder::command::Command::unroll_arg_requires (3x) + 372 ( 0.00%) . . . < /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/alloc/src/vec/mod.rs:clap_builder::util::flat_map::FlatMap::extend_unchecked (2x) + 325 ( 0.00%) . . . < /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/alloc/src/vec/mod.rs:clap_builder::mkeymap::MKeyMap::_build (1x) + 114 ( 0.00%) . . . < /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/alloc/src/vec/mod.rs:regex_syntax::hir::literal::Extractor::extract (1x) + 114 ( 0.00%) . . . < /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/alloc/src/vec/mod.rs:crossbeam_channel::waker::SyncWaker::register (1x) + 113 ( 0.00%) . . . < /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/alloc/src/vec/mod.rs:regex_syntax::ast::parse::ParserI

::parse_set_class_open (1x) + 3,095,583 ( 0.89%) . . . * /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/alloc/src/raw_vec.rs:alloc::raw_vec::RawVec::reserve_for_push [./target/valgrind/s4] +40,279,987 (11.64%) 179,450 (22.16%) 74 (23.87%) . > /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/alloc/src/raw_vec.rs:alloc::raw_vec::finish_grow (150,607x) [./target/valgrind/s4] + + 2,816,814 ( 0.81%) . . . * /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/std/src/sys/unix/alloc.rs:__rdl_alloc +65,271,278 (18.86%) 392,878 (48.52%) 65 (20.97%) 1 ( 0.07%) > ./malloc/./malloc/malloc.c:malloc (402,281x) [/usr/lib/x86_64-linux-gnu/libc.so.6] + 63,644 ( 0.02%) 328 ( 0.04%) . . > ./malloc/./malloc/malloc.c:posix_memalign (121x) [/usr/lib/x86_64-linux-gnu/libc.so.6] + + 3,761,835 ( 1.09%) 2,935 ( 0.36%) 3 ( 0.97%) . < /home/.cargo/registry/src/index.crates.io-6f17d22bba15001f/regex-automata-0.4.6/src/nfa/thompson/builder.rs:regex_automata::nfa::thompson::compiler::Compiler::c'2 (46,515x) + 1,378,264 ( 0.40%) 526 ( 0.06%) 10 ( 3.23%) . < /home/.cargo/registry/src/index.crates.io-6f17d22bba15001f/regex-automata-0.4.6/src/nfa/thompson/builder.rs:regex_automata::nfa::thompson::literal_trie::LiteralTrie::compile (16,950x) + 1,368,356 ( 0.40%) 906 ( 0.11%) 10 ( 3.23%) . < /home/.cargo/registry/src/index.crates.io-6f17d22bba15001f/regex-automata-0.4.6/src/nfa/thompson/literal_trie.rs:regex_automata::nfa::thompson::literal_trie::LiteralTrie::compile (17,526x) [./target/valgrind/s4] + 265,766 ( 0.08%) 84 ( 0.01%) 1 ( 0.32%) . < /home/.cargo/registry/src/index.crates.io-6f17d22bba15001f/regex-automata-0.4.6/src/nfa/thompson/builder.rs:regex_automata::nfa::thompson::compiler::Compiler::c_cap'2 (693x) + 225,970 ( 0.07%) 100 ( 0.01%) . . < /home/.cargo/registry/src/index.crates.io-6f17d22bba15001f/regex-automata-0.4.6/src/nfa/thompson/compiler.rs:regex_automata::nfa::thompson::compiler::Compiler::c'2 (3,283x) [./target/valgrind/s4] + 86,591 ( 0.03%) 26 ( 0.00%) . . < /home/.cargo/registry/src/index.crates.io-6f17d22bba15001f/regex-automata-0.4.6/src/nfa/thompson/builder.rs:regex_automata::nfa::thompson::compiler::Utf8Compiler::compile (758x) + 76,699 ( 0.02%) 158 ( 0.02%) . . < /home/.cargo/registry/src/index.crates.io-6f17d22bba15001f/regex-automata-0.4.6/src/nfa/thompson/builder.rs:regex_automata::nfa::thompson::compiler::Compiler::c_alt_iter (1,078x) + 52,307 ( 0.02%) 52 ( 0.01%) . . < /home/.cargo/registry/src/index.crates.io-6f17d22bba15001f/regex-automata-0.4.6/src/nfa/thompson/builder.rs:regex_automata::nfa::thompson::builder::Builder::add_capture_start (774x) [./target/valgrind/s4] + 33,293 ( 0.01%) 42 ( 0.01%) . . < /home/.cargo/registry/src/index.crates.io-6f17d22bba15001f/regex-automata-0.4.6/src/nfa/thompson/compiler.rs:regex_automata::nfa::thompson::compiler::Compiler::c_bounded (526x) [./target/valgrind/s4] + 25,328 ( 0.01%) . . . < /home/.cargo/registry/src/index.crates.io-6f17d22bba15001f/regex-automata-0.4.6/src/nfa/thompson/builder.rs:regex_automata::nfa::thompson::compiler::Compiler::c_at_least (252x) + 16,432 ( 0.00%) 36 ( 0.00%) . . < /home/.cargo/registry/src/index.crates.io-6f17d22bba15001f/regex-automata-0.4.6/src/nfa/thompson/builder.rs:regex_automata::nfa::thompson::compiler::Utf8Compiler::new (126x) + 14,889 ( 0.00%) 44 ( 0.01%) . . < /home/.cargo/registry/src/index.crates.io-6f17d22bba15001f/regex-automata-0.4.6/src/nfa/thompson/builder.rs:regex_automata::nfa::thompson::compiler::Compiler::build_many_from_hir (65x) + 13,783 ( 0.00%) 4 ( 0.00%) . . < /home/.cargo/registry/src/index.crates.io-6f17d22bba15001f/regex-automata-0.4.6/src/nfa/thompson/builder.rs:regex_automata::nfa::thompson::compiler::Compiler::c (225x) + 10,807 ( 0.00%) 12 ( 0.00%) 1 ( 0.32%) . < /home/.cargo/registry/src/index.crates.io-6f17d22bba15001f/regex-automata-0.4.6/src/nfa/thompson/builder.rs: as core::iter::traits::iterator::Iterator>::next (175x) + 9,574 ( 0.00%) 12 ( 0.00%) . . < /home/.cargo/registry/src/index.crates.io-6f17d22bba15001f/regex-automata-0.4.6/src/nfa/thompson/builder.rs:regex_automata::nfa::thompson::compiler::Compiler::c_bounded (134x) + 7,353 ( 0.00%) 12 ( 0.00%) . . < /home/.cargo/registry/src/index.crates.io-6f17d22bba15001f/regex-automata-0.4.6/src/nfa/thompson/builder.rs:regex_automata::nfa::thompson::compiler::Compiler::c_cap (81x) + 490 ( 0.00%) . . . < /home/.cargo/registry/src/index.crates.io-6f17d22bba15001f/regex-automata-0.4.6/src/nfa/thompson/builder.rs:regex_automata::nfa::thompson::compiler::Compiler::c_at_least'2 (10x) + 49 ( 0.00%) . . . < /home/.cargo/registry/src/index.crates.io-6f17d22bba15001f/regex-automata-0.4.6/src/nfa/thompson/compiler.rs:regex_automata::nfa::thompson::compiler::Compiler::c (1x) [./target/valgrind/s4] + 2,766,641 ( 0.80%) . . . * /home/.cargo/registry/src/index.crates.io-6f17d22bba15001f/regex-automata-0.4.6/src/nfa/thompson/builder.rs:regex_automata::nfa::thompson::builder::Builder::add [./target/valgrind/s4] + +85,524,273 (24.71%) 200,351 (24.74%) 85 (27.42%) . < /home/.cargo/registry/src/index.crates.io-6f17d22bba15001f/regex-automata-0.4.6/src/nfa/thompson/compiler.rs:regex_automata::nfa::thompson::compiler::Compiler::c_cap'2 (1,386x) [./target/valgrind/s4] +83,118,552 (24.01%) 191,492 (23.65%) 87 (28.06%) . < /home/.cargo/registry/src/index.crates.io-6f17d22bba15001f/regex-automata-0.4.6/src/nfa/thompson/compiler.rs:regex_automata::nfa::thompson::compiler::Compiler::c (2,840x) [./target/valgrind/s4] +24,150,509 ( 6.98%) 28,505 ( 3.52%) 21 ( 6.77%) . < /home/.cargo/registry/src/index.crates.io-6f17d22bba15001f/regex-automata-0.4.6/src/nfa/thompson/compiler.rs:regex_automata::nfa::thompson::compiler::Compiler::c'2 (12,493x) [./target/valgrind/s4] +21,009,369 ( 6.07%) 14,398 ( 1.78%) 25 ( 8.06%) . < /home/.cargo/registry/src/index.crates.io-6f17d22bba15001f/regex-automata-0.4.6/src/nfa/thompson/compiler.rs:regex_automata::nfa::thompson::compiler::Compiler::c_alt_iter (6,614x) [./target/valgrind/s4] + 1,268,486 ( 0.37%) 504 ( 0.06%) 2 ( 0.65%) . < /home/.cargo/registry/src/index.crates.io-6f17d22bba15001f/regex-automata-0.4.6/src/nfa/thompson/compiler.rs:regex_automata::nfa::thompson::compiler::Compiler::c_at_least (142x) [./target/valgrind/s4] + 960,162 ( 0.28%) 54 ( 0.01%) 1 ( 0.32%) . < /home/.cargo/registry/src/index.crates.io-6f17d22bba15001f/regex-automata-0.4.6/src/nfa/thompson/compiler.rs:regex_automata::nfa::thompson::compiler::Compiler::c_at_least'2 (10x) [./target/valgrind/s4] + 326,403 ( 0.09%) 844 ( 0.10%) . . < /home/.cargo/registry/src/index.crates.io-6f17d22bba15001f/regex-automata-0.4.6/src/nfa/thompson/compiler.rs:regex_automata::nfa::thompson::compiler::Compiler::c_concat (580x) [./target/valgrind/s4] + 288,750 ( 0.08%) 870 ( 0.11%) . . < /home/.cargo/registry/src/index.crates.io-6f17d22bba15001f/regex-automata-0.4.6/src/nfa/thompson/compiler.rs:regex_automata::nfa::thompson::compiler::Compiler::c_bounded (526x) [./target/valgrind/s4] + 2,641,943 ( 0.76%) . . . * /home/.cargo/registry/src/index.crates.io-6f17d22bba15001f/regex-automata-0.4.6/src/nfa/thompson/compiler.rs:regex_automata::nfa::thompson::compiler::Compiler::c'2 [./target/valgrind/s4] +86,288,458 (24.93%) 201,659 (24.90%) 86 (27.74%) . > /home/.cargo/registry/src/index.crates.io-6f17d22bba15001f/regex-automata-0.4.6/src/nfa/thompson/compiler.rs:regex_automata::nfa::thompson::compiler::Compiler::c_cap'2 (1,386x) [./target/valgrind/s4] +24,150,509 ( 6.98%) 28,505 ( 3.52%) 21 ( 6.77%) . > /home/.cargo/registry/src/index.crates.io-6f17d22bba15001f/regex-automata-0.4.6/src/nfa/thompson/compiler.rs:regex_automata::nfa::thompson::compiler::Compiler::c'2 (12,493x) [./target/valgrind/s4] +23,605,451 ( 6.82%) 80,566 ( 9.95%) 11 ( 3.55%) . > /home/.cargo/registry/src/index.crates.io-6f17d22bba15001f/regex-automata-0.4.6/src/nfa/thompson/literal_trie.rs:regex_automata::nfa::thompson::literal_trie::LiteralTrie::add (26,711x) [./target/valgrind/s4] +22,564,526 ( 6.52%) 16,357 ( 2.02%) 25 ( 8.06%) . > /home/.cargo/registry/src/index.crates.io-6f17d22bba15001f/regex-automata-0.4.6/src/nfa/thompson/compiler.rs:regex_automata::nfa::thompson::compiler::Compiler::c_alt_iter (538x) [./target/valgrind/s4] +17,662,970 ( 5.10%) 642 ( 0.08%) 40 (12.90%) . > /home/.cargo/registry/src/index.crates.io-6f17d22bba15001f/regex-automata-0.4.6/src/nfa/thompson/compiler.rs:regex_automata::nfa::thompson::compiler::Utf8Compiler::new (126x) [./target/valgrind/s4] +16,969,276 ( 4.90%) 46,294 ( 5.72%) 32 (10.32%) . > /home/.cargo/registry/src/index.crates.io-6f17d22bba15001f/regex-automata-0.4.6/src/nfa/thompson/literal_trie.rs:regex_automata::nfa::thompson::literal_trie::LiteralTrie::compile (495x) [./target/valgrind/s4] + 2,635,063 ( 0.76%) 5,922 ( 0.73%) . . > /home/.cargo/registry/src/index.crates.io-6f17d22bba15001f/regex-automata-0.4.6/src/nfa/thompson/builder.rs:regex_automata::nfa::thompson::builder::Builder::patch (39,677x) [./target/valgrind/s4] + 1,339,535 ( 0.39%) 730 ( 0.09%) 2 ( 0.65%) . > /home/.cargo/registry/src/index.crates.io-6f17d22bba15001f/regex-automata-0.4.6/src/nfa/thompson/compiler.rs:regex_automata::nfa::thompson::compiler::Compiler::c_at_least (142x) [./target/valgrind/s4] + 964,465 ( 0.28%) 54 ( 0.01%) 1 ( 0.32%) . > /home/.cargo/registry/src/index.crates.io-6f17d22bba15001f/regex-automata-0.4.6/src/nfa/thompson/compiler.rs:regex_automata::nfa::thompson::compiler::Compiler::c_at_least'2 (10x) [./target/valgrind/s4] + 934,285 ( 0.27%) 1,530 ( 0.19%) . . > /home/.cargo/registry/src/index.crates.io-6f17d22bba15001f/regex-automata-0.4.6/src/nfa/thompson/compiler.rs:regex_automata::nfa::thompson::compiler::Utf8Compiler::add (1,144x) [./target/valgrind/s4] + 721,842 ( 0.21%) 1,964 ( 0.24%) . . > /home/.cargo/registry/src/index.crates.io-6f17d22bba15001f/regex-automata-0.4.6/src/nfa/thompson/compiler.rs:regex_automata::nfa::thompson::compiler::Compiler::c_bounded (134x) [./target/valgrind/s4] + 395,334 ( 0.11%) 394 ( 0.05%) . . > /home/.cargo/registry/src/index.crates.io-6f17d22bba15001f/regex-automata-0.4.6/src/nfa/thompson/map.rs:regex_automata::nfa::thompson::map::Utf8SuffixMap::clear (127x) [./target/valgrind/s4] + 346,097 ( 0.10%) . . . > /home/.cargo/registry/src/index.crates.io-6f17d22bba15001f/regex-syntax-0.8.2/src/utf8.rs:::next (3,616x) [./target/valgrind/s4] + 251,263 ( 0.07%) 596 ( 0.07%) . . > /home/.cargo/registry/src/index.crates.io-6f17d22bba15001f/regex-automata-0.4.6/src/nfa/thompson/compiler.rs:regex_automata::nfa::thompson::compiler::Compiler::c_exactly (210x) [./target/valgrind/s4] + 225,970 ( 0.07%) 100 ( 0.01%) . . > /home/.cargo/registry/src/index.crates.io-6f17d22bba15001f/regex-automata-0.4.6/src/nfa/thompson/builder.rs:regex_automata::nfa::thompson::builder::Builder::add (3,283x) [./target/valgrind/s4] + 211,097 ( 0.06%) 422 ( 0.05%) . . > /home/.cargo/registry/src/index.crates.io-6f17d22bba15001f/regex-automata-0.4.6/src/nfa/thompson/compiler.rs:regex_automata::nfa::thompson::compiler::Utf8Compiler::finish (126x) [./target/valgrind/s4] + 186,209 ( 0.05%) 102 ( 0.01%) . . > /home/.cargo/registry/src/index.crates.io-6f17d22bba15001f/regex-syntax-0.8.2/src/utf8.rs:regex_syntax::utf8::Utf8Sequences::new (1,316x) [./target/valgrind/s4] + 169,250 ( 0.05%) . . . > /home/.cargo/registry/src/index.crates.io-6f17d22bba15001f/regex-syntax-0.8.2/src/hir/mod.rs:regex_syntax::hir::Hir::kind (84,625x) [./target/valgrind/s4] + 91,043 ( 0.03%) . . . > /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/core/src/slice/iter/macros.rs:::next (16,112x) [./target/valgrind/s4] + 47,191 ( 0.01%) 186 ( 0.02%) . . > ???:__rust_alloc (495x) [./target/valgrind/s4] + 39,403 ( 0.01%) . . . > /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/alloc/src/vec/mod.rs:regex_syntax::hir::ClassUnicode::is_ascii (5,629x) [./target/valgrind/s4] + 22,516 ( 0.01%) . . . > /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/alloc/src/raw_vec.rs:regex_syntax::hir::ClassUnicode::iter (5,629x) [./target/valgrind/s4] + 20,966 ( 0.01%) . . . > /home/.cargo/registry/src/index.crates.io-6f17d22bba15001f/regex-syntax-0.8.2/src/hir/mod.rs:regex_syntax::hir::ClassUnicodeRange::start (10,483x) [./target/valgrind/s4] + 20,966 ( 0.01%) . . . > /home/.cargo/registry/src/index.crates.io-6f17d22bba15001f/regex-syntax-0.8.2/src/hir/mod.rs:regex_syntax::hir::ClassUnicodeRange::end (10,483x) [./target/valgrind/s4] + 20,700 ( 0.01%) . . . > /home/.cargo/registry/src/index.crates.io-6f17d22bba15001f/regex-syntax-0.8.2/src/utf8.rs:regex_syntax::utf8::Utf8Sequence::as_slice (2,300x) [./target/valgrind/s4] + 16,128 ( 0.00%) . . . > /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/alloc/src/raw_vec.rs:regex_syntax::hir::ClassBytes::ranges (5,376x) [./target/valgrind/s4] + + 4,414,503 ( 1.28%) . . . < /home/.cargo/registry/src/index.crates.io-6f17d22bba15001f/regex-syntax-0.8.2/src/ast/parse.rs:regex_syntax::ast::parse::ParserI

::parse_with_comments (49,607x) [./target/valgrind/s4] + 1,417,681 ( 0.41%) . . . < /home/.cargo/registry/src/index.crates.io-6f17d22bba15001f/regex-syntax-0.8.2/src/ast/parse.rs:regex_syntax::ast::parse::ParserI

::push_alternate (15,929x) [./target/valgrind/s4] + 627,895 ( 0.18%) . . . < /home/.cargo/registry/src/index.crates.io-6f17d22bba15001f/regex-syntax-0.8.2/src/ast/parse.rs:regex_syntax::ast::parse::ParserI

::maybe_parse_ascii_class (7,055x) [./target/valgrind/s4] + 304,647 ( 0.09%) . . . < /home/.cargo/registry/src/index.crates.io-6f17d22bba15001f/regex-syntax-0.8.2/src/ast/parse.rs:regex_syntax::ast::parse::ParserI

::parse_capture_name (3,423x) [./target/valgrind/s4] + 286,651 ( 0.08%) . . . < /home/.cargo/registry/src/index.crates.io-6f17d22bba15001f/regex-syntax-0.8.2/src/ast/parse.rs:regex_syntax::ast::parse::ParserI

::parse_escape (3,219x) [./target/valgrind/s4] + 251,418 ( 0.07%) . . . < /home/.cargo/registry/src/index.crates.io-6f17d22bba15001f/regex-syntax-0.8.2/src/ast/parse.rs:regex_syntax::ast::parse::ParserI

::parse_set_class_open (2,826x) [./target/valgrind/s4] + 251,256 ( 0.07%) . . . < /home/.cargo/registry/src/index.crates.io-6f17d22bba15001f/regex-syntax-0.8.2/src/ast/parse.rs:regex_syntax::ast::parse::ParserI

::pop_class (2,824x) [./target/valgrind/s4] + 223,447 ( 0.06%) . . . < /home/.cargo/registry/src/index.crates.io-6f17d22bba15001f/regex-syntax-0.8.2/src/ast/parse.rs:regex_syntax::ast::parse::ParserI

::parse_group (2,511x) [./target/valgrind/s4] + 173,833 ( 0.05%) . . . < /home/.cargo/registry/src/index.crates.io-6f17d22bba15001f/regex-syntax-0.8.2/src/ast/parse.rs:regex_syntax::ast::parse::ParserI

::parse_set_class_item (1,937x) [./target/valgrind/s4] + 152,445 ( 0.04%) . . . < /home/.cargo/registry/src/index.crates.io-6f17d22bba15001f/regex-syntax-0.8.2/src/ast/parse.rs:regex_syntax::ast::parse::ParserI

::parse_uncounted_repetition (1,713x) [./target/valgrind/s4] + 61,445 ( 0.02%) . . . < /home/.cargo/registry/src/index.crates.io-6f17d22bba15001f/regex-syntax-0.8.2/src/ast/parse.rs:regex_syntax::ast::parse::ParserI

::pop_group (693x) [./target/valgrind/s4] + 21,360 ( 0.01%) . . . < /home/.cargo/registry/src/index.crates.io-6f17d22bba15001f/regex-syntax-0.8.2/src/ast/parse.rs:regex_syntax::ast::parse::ParserI

::parse_decimal (240x) [./target/valgrind/s4] + 21,271 ( 0.01%) . . . < /home/.cargo/registry/src/index.crates.io-6f17d22bba15001f/regex-syntax-0.8.2/src/ast/parse.rs:regex_syntax::ast::parse::ParserI

::bump_and_bump_space (239x) [./target/valgrind/s4] + 15,308 ( 0.00%) . . . < /home/.cargo/registry/src/index.crates.io-6f17d22bba15001f/regex-syntax-0.8.2/src/ast/parse.rs:regex_syntax::ast::parse::ParserI

::parse_counted_repetition (172x) [./target/valgrind/s4] + 2,670 ( 0.00%) . . . < /home/.cargo/registry/src/index.crates.io-6f17d22bba15001f/regex-syntax-0.8.2/src/ast/parse.rs:regex_syntax::ast::parse::ParserI

::parse_flags (30x) [./target/valgrind/s4] + 445 ( 0.00%) . . . < /home/.cargo/registry/src/index.crates.io-6f17d22bba15001f/regex-syntax-0.8.2/src/ast/parse.rs:regex_syntax::ast::parse::ParserI

::parse_perl_class (5x) [./target/valgrind/s4] + 2,495,421 ( 0.72%) . . . * /home/.cargo/registry/src/index.crates.io-6f17d22bba15001f/regex-syntax-0.8.2/src/ast/parse.rs:regex_syntax::ast::parse::ParserI

::bump [./target/valgrind/s4] + 3,697,472 ( 1.07%) . . . > /home/.cargo/registry/src/index.crates.io-6f17d22bba15001f/regex-syntax-0.8.2/src/ast/parse.rs:regex_syntax::ast::parse::ParserI

::char (184,846x) [./target/valgrind/s4] + + 2,977,092 ( 0.86%) . . . < /home/.cargo/registry/src/index.crates.io-6f17d22bba15001f/aho-corasick-1.1.2/src/dfa.rs:aho_corasick::dfa::Builder::finish_build_one_start (93,597x) [./target/valgrind/s4] + 2,420,013 ( 0.70%) . . . * /home/.cargo/registry/src/index.crates.io-6f17d22bba15001f/aho-corasick-1.1.2/src/dfa.rs:aho_corasick::dfa::Builder::finish_build_one_start::{{closure}} [./target/valgrind/s4] + + 2,389,738 ( 0.69%) . . . * /home/.cargo/registry/src/index.crates.io-6f17d22bba15001f/regex-automata-0.4.6/src/util/alphabet.rs:regex_automata::nfa::thompson::nfa::Inner::add + + 7,167,439 ( 2.07%) 3,970 ( 0.49%) 9 ( 2.90%) . < /home/.cargo/registry/src/index.crates.io-6f17d22bba15001f/regex-automata-0.4.6/src/nfa/thompson/builder.rs:regex_automata::nfa::thompson::builder::Builder::build (64,329x) [./target/valgrind/s4] + 2,322,130 ( 0.67%) . . . * /home/.cargo/registry/src/index.crates.io-6f17d22bba15001f/regex-automata-0.4.6/src/nfa/thompson/nfa.rs:regex_automata::nfa::thompson::nfa::Inner::add [./target/valgrind/s4] + 4,900 ( 0.00%) . . . > /home/.cargo/registry/src/index.crates.io-6f17d22bba15001f/regex-automata-0.4.6/src/util/look.rs:regex_automata::util::look::LookMatcher::add_to_byteset (245x) [./target/valgrind/s4] + +19,117,859 ( 5.52%) 32,530 ( 4.02%) 11 ( 3.55%) . < /home/.cargo/registry/src/index.crates.io-6f17d22bba15001f/regex-automata-0.4.6/src/nfa/thompson/compiler.rs:regex_automata::nfa::thompson::compiler::Compiler::build_many_from_hir (175x) [./target/valgrind/s4] + 2,176,738 ( 0.63%) . . . * /home/.cargo/registry/src/index.crates.io-6f17d22bba15001f/regex-automata-0.4.6/src/nfa/thompson/builder.rs:regex_automata::nfa::thompson::builder::Builder::build [./target/valgrind/s4] + 7,167,439 ( 2.07%) 3,970 ( 0.49%) 9 ( 2.90%) . > /home/.cargo/registry/src/index.crates.io-6f17d22bba15001f/regex-automata-0.4.6/src/nfa/thompson/nfa.rs:regex_automata::nfa::thompson::nfa::Inner::add (64,329x) [./target/valgrind/s4] + 1,560,608 ( 0.45%) 1,238 ( 0.15%) . . > /home/.cargo/registry/src/index.crates.io-6f17d22bba15001f/regex-automata-0.4.6/src/nfa/thompson/nfa.rs:regex_automata::nfa::thompson::nfa::Inner::into_nfa (175x) [./target/valgrind/s4] + 1,235,032 ( 0.36%) . . . > /home/.cargo/registry/src/index.crates.io-6f17d22bba15001f/regex-automata-0.4.6/src/nfa/thompson/nfa.rs:regex_automata::nfa::thompson::nfa::Inner::remap (175x) [./target/valgrind/s4] + 11,375 ( 0.00%) . . . > ./string/../sysdeps/x86_64/multiarch/memmove-vec-unaligned-erms.S:__memcpy_avx_unaligned_erms (175x) [/usr/lib/x86_64-linux-gnu/libc.so.6] + + 2,101,997 ( 0.61%) . . . * ./malloc/./malloc/arena.c:malloc + 1,128 ( 0.00%) 0 1 ( 0.32%) . > ./malloc/./malloc/arena.c:ptmalloc_init.part.0 (1x) [/usr/lib/x86_64-linux-gnu/libc.so.6] + + 2,042,913 ( 0.59%) . . . * /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/alloc/src/raw_vec.rs:core::ptr::drop_in_place + +11,499,724 ( 3.32%) 37,942 ( 4.69%) 1 ( 0.32%) . < /home/.cargo/registry/src/index.crates.io-6f17d22bba15001f/regex-automata-0.4.6/src/meta/strategy.rs:regex_automata::meta::strategy::new (175x) [./target/valgrind/s4] + 48,819 ( 0.01%) . . . < /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/core/src/ptr/mod.rs:regex_automata::meta::wrappers::Hybrid::new (243x) + 16,273 ( 0.00%) . . . < /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/core/src/ptr/mod.rs:regex_automata::meta::wrappers::PikeVM::new (81x) + 16,273 ( 0.00%) . . . < /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/core/src/ptr/mod.rs:regex_automata::meta::wrappers::BoundedBacktracker::new (81x) + 16,273 ( 0.00%) . . . < /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/core/src/ptr/mod.rs:regex_automata::meta::wrappers::OnePass::new (81x) + 2,605 ( 0.00%) . . . < /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/core/src/ptr/mod.rs:regex_automata::meta::wrappers::ReverseHybrid::new (13x) + 2,038,150 ( 0.59%) . . . * /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/core/src/ptr/mod.rs:core::ptr::drop_in_place [./target/valgrind/s4] + 5,540,132 ( 1.60%) 33,313 ( 4.11%) . . > /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/alloc/src/vec/mod.rs: as core::ops::drop::Drop>::drop (674x) [./target/valgrind/s4] + + 2,021,554 ( 0.58%) . . . * /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/core/src/result.rs:alloc::raw_vec::finish_grow + + 1,928,319 ( 0.56%) . . . < /home/.cargo/registry/src/index.crates.io-6f17d22bba15001f/regex-syntax-0.8.2/src/ast/visitor.rs:regex_syntax::ast::visitor::visit (71,256x) [./target/valgrind/s4] + 1,885,061 ( 0.54%) . . . * /home/.cargo/registry/src/index.crates.io-6f17d22bba15001f/regex-syntax-0.8.2/src/ast/parse.rs: as regex_syntax::ast::visitor::Visitor>::visit_pre [./target/valgrind/s4] + +22,055,897 ( 6.37%) 100,995 (12.47%) . . < /home/.cargo/registry/src/index.crates.io-6f17d22bba15001f/regex-syntax-0.8.2/src/ast/mod.rs:::drop (71,256x) [./target/valgrind/s4] + 363,378 ( 0.10%) . . . < /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/core/src/ptr/mod.rs:core::ptr::drop_in_place'2 (2,578x) [./target/valgrind/s4] + 1,869,858 ( 0.54%) . . . * /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/core/src/ptr/mod.rs:core::ptr::drop_in_place'2 [./target/valgrind/s4] +11,867,842 ( 3.43%) 94,112 (11.62%) . . > ???:__rust_dealloc (90,718x) [./target/valgrind/s4] + 6,424,936 ( 1.86%) 4,280 ( 0.53%) . . > /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/core/src/ptr/mod.rs:core::ptr::drop_in_place (2,753x) [./target/valgrind/s4] + 1,517,772 ( 0.44%) . . . > /home/.cargo/registry/src/index.crates.io-6f17d22bba15001f/regex-syntax-0.8.2/src/ast/mod.rs:::drop'2 (73,834x) [./target/valgrind/s4] + 363,378 ( 0.10%) . . . > /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/core/src/ptr/mod.rs:core::ptr::drop_in_place'2 (2,578x) [./target/valgrind/s4] + + 1,811,559 ( 0.52%) . . . * /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/core/src/slice/mod.rs:regex_automata::nfa::thompson::literal_trie::LiteralTrie::add + + 2,635,063 ( 0.76%) 5,922 ( 0.73%) . . < /home/.cargo/registry/src/index.crates.io-6f17d22bba15001f/regex-automata-0.4.6/src/nfa/thompson/compiler.rs:regex_automata::nfa::thompson::compiler::Compiler::c'2 (39,677x) [./target/valgrind/s4] + 947,110 ( 0.27%) 1,837 ( 0.23%) . . < /home/.cargo/registry/src/index.crates.io-6f17d22bba15001f/regex-automata-0.4.6/src/nfa/thompson/compiler.rs:regex_automata::nfa::thompson::compiler::Compiler::patch (13,228x) [./target/valgrind/s4] + 219,179 ( 0.06%) 792 ( 0.10%) . . < /home/.cargo/registry/src/index.crates.io-6f17d22bba15001f/regex-automata-0.4.6/src/nfa/thompson/compiler.rs:regex_automata::nfa::thompson::compiler::Compiler::c_bounded (1,712x) [./target/valgrind/s4] + 98,080 ( 0.03%) . . . < /home/.cargo/registry/src/index.crates.io-6f17d22bba15001f/regex-automata-0.4.6/src/nfa/thompson/compiler.rs:regex_automata::nfa::thompson::compiler::Compiler::c (2,671x) [./target/valgrind/s4] + 74,247 ( 0.02%) 228 ( 0.03%) . . < /home/.cargo/registry/src/index.crates.io-6f17d22bba15001f/regex-automata-0.4.6/src/nfa/thompson/compiler.rs:regex_automata::nfa::thompson::compiler::Compiler::c_at_least (504x) [./target/valgrind/s4] + 49,896 ( 0.01%) . . . < /home/.cargo/registry/src/index.crates.io-6f17d22bba15001f/regex-automata-0.4.6/src/nfa/thompson/compiler.rs:regex_automata::nfa::thompson::compiler::Compiler::c_cap'2 (1,386x) [./target/valgrind/s4] + 8,496 ( 0.00%) . . . < /home/.cargo/registry/src/index.crates.io-6f17d22bba15001f/regex-automata-0.4.6/src/nfa/thompson/compiler.rs:regex_automata::nfa::thompson::compiler::Compiler::c_concat (236x) [./target/valgrind/s4] + 7,730 ( 0.00%) . . . < /home/.cargo/registry/src/index.crates.io-6f17d22bba15001f/regex-automata-0.4.6/src/nfa/thompson/compiler.rs:regex_automata::nfa::thompson::compiler::Compiler::build_many_from_hir (175x) [./target/valgrind/s4] + 6,300 ( 0.00%) . . . < /home/.cargo/registry/src/index.crates.io-6f17d22bba15001f/regex-automata-0.4.6/src/nfa/thompson/compiler.rs: as core::iter::traits::iterator::Iterator>::next (175x) + 5,871 ( 0.00%) . . . < /home/.cargo/registry/src/index.crates.io-6f17d22bba15001f/regex-automata-0.4.6/src/nfa/thompson/compiler.rs:regex_automata::nfa::thompson::compiler::Compiler::c_cap (162x) [./target/valgrind/s4] + 2,963 ( 0.00%) . . . < /home/.cargo/registry/src/index.crates.io-6f17d22bba15001f/regex-automata-0.4.6/src/nfa/thompson/compiler.rs:regex_automata::nfa::thompson::compiler::Compiler::c_at_least'2 (20x) [./target/valgrind/s4] + 1,786,878 ( 0.52%) . . . * /home/.cargo/registry/src/index.crates.io-6f17d22bba15001f/regex-automata-0.4.6/src/nfa/thompson/builder.rs:regex_automata::nfa::thompson::builder::Builder::patch [./target/valgrind/s4] + 1,668,597 ( 0.48%) 8,779 ( 1.08%) . . > /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/alloc/src/raw_vec.rs:alloc::raw_vec::RawVec::reserve_for_push (5,350x) [./target/valgrind/s4] + + 2,503,709 ( 0.72%) 1,256 ( 0.16%) 2 ( 0.65%) . < /home/.cargo/registry/src/index.crates.io-6f17d22bba15001f/regex-syntax-0.8.2/src/ast/visitor.rs:regex_syntax::ast::visitor::visit (71,256x) [./target/valgrind/s4] + 1,758,099 ( 0.51%) . . . * /home/.cargo/registry/src/index.crates.io-6f17d22bba15001f/regex-syntax-0.8.2/src/hir/translate.rs:::visit_pre [./target/valgrind/s4] + +16,969,276 ( 4.90%) 46,294 ( 5.72%) 32 (10.32%) . < /home/.cargo/registry/src/index.crates.io-6f17d22bba15001f/regex-automata-0.4.6/src/nfa/thompson/compiler.rs:regex_automata::nfa::thompson::compiler::Compiler::c'2 (495x) [./target/valgrind/s4] + 1,696,805 ( 0.49%) . . . * /home/.cargo/registry/src/index.crates.io-6f17d22bba15001f/regex-automata-0.4.6/src/nfa/thompson/literal_trie.rs:regex_automata::nfa::thompson::literal_trie::LiteralTrie::compile [./target/valgrind/s4] + 1,368,356 ( 0.40%) 906 ( 0.11%) 10 ( 3.23%) . > /home/.cargo/registry/src/index.crates.io-6f17d22bba15001f/regex-automata-0.4.6/src/nfa/thompson/builder.rs:regex_automata::nfa::thompson::builder::Builder::add (17,526x) [./target/valgrind/s4] + + 4,903,867 ( 1.42%) 29,401 ( 3.63%) . . < /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/core/src/ptr/mod.rs:::drop (27,518x) + 474,214 ( 0.14%) . . . < /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/core/src/ptr/mod.rs:regex_syntax::hir::Hir::concat (20,618x) + 420,624 ( 0.12%) . . . < /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/core/src/ptr/mod.rs:regex_syntax::hir::Hir::alternation (18,288x) + 1,587 ( 0.00%) . . . < /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/core/src/ptr/mod.rs:regex_syntax::hir::lift_common_prefix (9x) + 781 ( 0.00%) . . . < /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/core/src/ptr/mod.rs:regex_syntax::hir::Hir::alternation'2 (10x) + 299 ( 0.00%) . . . < /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/core/src/ptr/mod.rs:regex_syntax::hir::Hir::into_kind (13x) + 247 ( 0.00%) . . . < /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/core/src/ptr/mod.rs:regex_automata::meta::reverse_inner::extract (13x) + 1,684,346 ( 0.49%) . . . * /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/core/src/ptr/mod.rs:core::ptr::drop_in_place [./target/valgrind/s4] + 3,568,069 ( 1.03%) 28,826 ( 3.56%) . . > ???:__rust_dealloc (27,403x) [./target/valgrind/s4] + 68,050 ( 0.02%) . . . > /home/.cargo/registry/src/index.crates.io-6f17d22bba15001f/regex-syntax-0.8.2/src/hir/mod.rs:::drop'2 (2,722x) [./target/valgrind/s4] + 63,098 ( 0.02%) . . . > /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/core/src/ptr/mod.rs:core::ptr::drop_in_place'2 (2,726x) [./target/valgrind/s4] + 100 ( 0.00%) . . . > /home/.cargo/registry/src/index.crates.io-6f17d22bba15001f/regex-syntax-0.8.2/src/hir/mod.rs:::drop (4x) [./target/valgrind/s4] + + 1,289,898 ( 0.37%) . . . < /home/.cargo/registry/src/index.crates.io-6f17d22bba15001f/regex-syntax-0.8.2/src/ast/parse.rs:regex_syntax::ast::parse::ParserI

::parse_with_comments (71,661x) [./target/valgrind/s4] + 179,406 ( 0.05%) . . . < /home/.cargo/registry/src/index.crates.io-6f17d22bba15001f/regex-syntax-0.8.2/src/ast/parse.rs:regex_syntax::ast::parse::ParserI

::parse_set_class (9,967x) [./target/valgrind/s4] + 63,882 ( 0.02%) . . . < /home/.cargo/registry/src/index.crates.io-6f17d22bba15001f/regex-syntax-0.8.2/src/ast/parse.rs:regex_syntax::ast::parse::ParserI

::parse_set_class_range (3,549x) [./target/valgrind/s4] + 50,868 ( 0.01%) . . . < /home/.cargo/registry/src/index.crates.io-6f17d22bba15001f/regex-syntax-0.8.2/src/ast/parse.rs:regex_syntax::ast::parse::ParserI

::parse_set_class_open (2,826x) [./target/valgrind/s4] + 12,834 ( 0.00%) . . . < /home/.cargo/registry/src/index.crates.io-6f17d22bba15001f/regex-syntax-0.8.2/src/ast/parse.rs:regex_syntax::ast::parse::ParserI

::parse_group (713x) [./target/valgrind/s4] + 4,320 ( 0.00%) . . . < /home/.cargo/registry/src/index.crates.io-6f17d22bba15001f/regex-syntax-0.8.2/src/ast/parse.rs:regex_syntax::ast::parse::ParserI

::parse_decimal (240x) [./target/valgrind/s4] + 4,302 ( 0.00%) . . . < /home/.cargo/registry/src/index.crates.io-6f17d22bba15001f/regex-syntax-0.8.2/src/ast/parse.rs:regex_syntax::ast::parse::ParserI

::bump_and_bump_space (239x) [./target/valgrind/s4] + 3,096 ( 0.00%) . . . < /home/.cargo/registry/src/index.crates.io-6f17d22bba15001f/regex-syntax-0.8.2/src/ast/parse.rs:regex_syntax::ast::parse::ParserI

::parse_counted_repetition (172x) [./target/valgrind/s4] + 1,519,239 ( 0.44%) . . . * /home/.cargo/registry/src/index.crates.io-6f17d22bba15001f/regex-syntax-0.8.2/src/ast/parse.rs:regex_syntax::ast::parse::ParserI

::bump_space [./target/valgrind/s4] + + 1,517,772 ( 0.44%) . . . < /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/core/src/ptr/mod.rs:core::ptr::drop_in_place'2 (73,834x) [./target/valgrind/s4] + 1,517,772 ( 0.44%) . . . * /home/.cargo/registry/src/index.crates.io-6f17d22bba15001f/regex-syntax-0.8.2/src/ast/mod.rs:::drop'2 [./target/valgrind/s4] + +11,678,598 ( 3.37%) 54,458 ( 6.73%) . . < /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/core/src/ptr/mod.rs:core::ptr::drop_in_place (224x) [./target/valgrind/s4] + 848,229 ( 0.25%) 4,060 ( 0.50%) 1 ( 0.32%) . < /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/core/src/ptr/mod.rs:regex_automata::meta::reverse_inner::extract (13x) + 515,450 ( 0.15%) . . . < /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/core/src/ptr/mod.rs:regex_syntax::hir::Hir::concat (20,618x) + 457,200 ( 0.13%) . . . < /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/core/src/ptr/mod.rs:regex_syntax::hir::Hir::alternation (18,288x) + 325 ( 0.00%) . . . < /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/core/src/ptr/mod.rs:regex_syntax::hir::Hir::into_kind (13x) + 261 ( 0.00%) . . . < /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/core/src/ptr/mod.rs:regex_syntax::hir::lift_common_prefix (9x) + 250 ( 0.00%) . . . < /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/core/src/ptr/mod.rs:regex_syntax::hir::Hir::alternation'2 (10x) + 100 ( 0.00%) . . . < /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/core/src/ptr/mod.rs:core::ptr::drop_in_place (4x) [./target/valgrind/s4] + 25 ( 0.00%) . . . < /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/core/src/ptr/mod.rs:core::ptr::drop_in_place'2 (1x) [./target/valgrind/s4] + 1,500,814 ( 0.43%) . . . * /home/.cargo/registry/src/index.crates.io-6f17d22bba15001f/regex-syntax-0.8.2/src/hir/mod.rs:::drop [./target/valgrind/s4] + 144,616 ( 0.04%) 2 ( 0.00%) . . > ???:__rust_alloc (2,722x) [./target/valgrind/s4] + +24,202,143 ( 6.99%) 51,330 ( 6.34%) 3 ( 0.97%) . < /home/.cargo/registry/src/index.crates.io-6f17d22bba15001f/regex-syntax-0.8.2/src/hir/translate.rs:::visit_post (15,786x) [./target/valgrind/s4] + 239,856 ( 0.07%) 247 ( 0.03%) . . < /home/.cargo/registry/src/index.crates.io-6f17d22bba15001f/regex-automata-0.4.6/src/meta/reverse_inner.rs:regex_automata::meta::reverse_inner::extract (39x) [./target/valgrind/s4] + 158,297 ( 0.05%) 310 ( 0.04%) . . < /home/.cargo/registry/src/index.crates.io-6f17d22bba15001f/regex-automata-0.4.6/src/meta/reverse_inner.rs:regex_automata::meta::reverse_inner::flatten'2 (83x) [./target/valgrind/s4] + 43,665 ( 0.01%) 74 ( 0.01%) . . < /home/.cargo/registry/src/index.crates.io-6f17d22bba15001f/regex-automata-0.4.6/src/meta/reverse_inner.rs:regex_automata::meta::reverse_inner::flatten (29x) [./target/valgrind/s4] + 6,532 ( 0.00%) . . . < /home/.cargo/registry/src/index.crates.io-6f17d22bba15001f/regex-syntax-0.8.2/src/hir/mod.rs:regex_syntax::hir::lift_common_prefix (6x) [./target/valgrind/s4] + 1,486,535 ( 0.43%) . . . * /home/.cargo/registry/src/index.crates.io-6f17d22bba15001f/regex-syntax-0.8.2/src/hir/mod.rs:regex_syntax::hir::Hir::concat [./target/valgrind/s4] + 2,397,887 ( 0.69%) 20 ( 0.00%) . . > /home/.cargo/registry/src/index.crates.io-6f17d22bba15001f/regex-syntax-0.8.2/src/hir/mod.rs:regex_syntax::hir::Hir::literal (15,406x) [./target/valgrind/s4] + 90 ( 0.00%) . . . > /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/core/src/str/converts.rs:core::str::converts::from_utf8 (2x) [./target/valgrind/s4] + + 1,475,712 ( 0.43%) . . . * /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/core/src/str/validations.rs:regex_syntax::ast::parse::ParserI

::char + + 1,455,146 ( 0.42%) . . . * /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/core/src/str/validations.rs:core::str::converts::from_utf8 + + 1,127,404 ( 0.33%) . . . < /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/core/src/slice/cmp.rs:regex_syntax::hir::literal::Extractor::union (51,690x) + 115,090 ( 0.03%) . . . < /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/core/src/slice/cmp.rs:regex_syntax::hir::literal::Extractor::cross (5,251x) + 79,418 ( 0.02%) . . . < /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/core/src/slice/cmp.rs:aho_corasick::packed::teddy::generic::Teddy<_>::new (3,659x) + 43,281 ( 0.01%) . . . < /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/core/src/slice/cmp.rs:regex_automata::util::prefilter::prefixes (1,941x) + 30,680 ( 0.01%) . . . < /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/core/src/slice/cmp.rs:alloc::collections::btree::map::BTreeMap::insert (1,394x) + 23,811 ( 0.01%) . . . < /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/core/src/slice/cmp.rs:regex_syntax::ast::parse::ParserI

::parse_capture_name (1,059x) + 6,779 ( 0.00%) . . . < /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/core/src/slice/cmp.rs:hashbrown::map::HashMap::insert (356x) + 3,170 ( 0.00%) . . . < /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/core/src/slice/cmp.rs:regex_syntax::hir::literal::Extractor::extract'2 (317x) + 1,564 ( 0.00%) . . . < /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/core/src/slice/cmp.rs:regex_automata::util::prefilter::suffixes (88x) + 1,315 ( 0.00%) . . . < /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/core/src/slice/cmp.rs:regex_automata::util::captures::Captures::get_group_by_name (65x) + 964 ( 0.00%) . . . < /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/core/src/slice/cmp.rs:regex_automata::hybrid::dfa::Lazy::cache_next_state (48x) + 869 ( 0.00%) . . . < /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/core/src/slice/cmp.rs:clap_builder::parser::validator::Validator::validate (44x) + 351 ( 0.00%) . . . < /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/core/src/slice/cmp.rs:clap_builder::parser::arg_matcher::ArgMatcher::add_index_to (18x) + 351 ( 0.00%) . . . < /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/core/src/slice/cmp.rs:clap_builder::parser::parser::Parser::push_arg_values (18x) + 307 ( 0.00%) . . . < /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/core/src/slice/cmp.rs:clap_builder::util::flat_map::FlatMap::remove_entry (16x) + 281 ( 0.00%) . . . < /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/core/src/slice/cmp.rs:clap_builder::parser::parser::Parser::start_custom_arg (14x) + 212 ( 0.00%) . . . < /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/core/src/slice/cmp.rs:clap_builder::parser::validator::gather_direct_conflicts (11x) + 136 ( 0.00%) . . . < /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/core/src/slice/cmp.rs:clap_builder::parser::validator::Conflicts::gather_conflicts (7x) + 110 ( 0.00%) . . . < /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/core/src/slice/cmp.rs:chrono::format::parse::parse_internal (11x) + 104 ( 0.00%) . . . < /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/core/src/slice/cmp.rs:clap_builder::parser::arg_matcher::ArgMatcher::start_custom_group (5x) + 76 ( 0.00%) . . . < /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/core/src/slice/cmp.rs:clap_builder::parser::parser::Parser::get_matches_with (4x) + 66 ( 0.00%) . . . < /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/core/src/slice/cmp.rs:clap_builder::util::flat_map::FlatMap::remove (3x) + 66 ( 0.00%) . . . < /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/core/src/slice/cmp.rs:clap_builder::parser::parser::Parser::add_defaults (3x) + 66 ( 0.00%) . . . < /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/core/src/slice/cmp.rs:clap_builder::parser::arg_matcher::ArgMatcher::start_custom_arg (3x) + 57 ( 0.00%) . . . < /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/core/src/slice/cmp.rs:clap_builder::builder::command::Command::_build_self (3x) + 57 ( 0.00%) . . . < /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/core/src/slice/cmp.rs:clap_builder::parser::parser::Parser::resolve_pending (3x) + 57 ( 0.00%) . . . < /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/core/src/slice/cmp.rs:clap_builder::builder::command::Command::unroll_arg_requires (3x) + 46 ( 0.00%) . . . < /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/core/src/slice/cmp.rs:clap_builder::builder::possible_value::PossibleValue::matches (2x) + 22 ( 0.00%) . . . < /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/core/src/slice/cmp.rs:regex_automata::util::captures::GroupInfo::new (1x) + 20 ( 0.00%) . . . < /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/core/src/slice/cmp.rs:chrono::offset::local::tz_info::parser::Cursor::read_tag (2x) + 10 ( 0.00%) . . . < /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/core/src/slice/cmp.rs:core::str::iter::SplitInternal

::next_back (1x) + 10 ( 0.00%) . . . < /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/core/src/slice/cmp.rs:::eq (1x) + 10 ( 0.00%) . . . < /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/core/src/slice/cmp.rs:regex_syntax::hir::literal::Extractor::extract (1x) + 1,436,760 ( 0.42%) . . . * ./string/../sysdeps/x86_64/multiarch/memcmp-avx2-movbe.S:__memcmp_avx2_movbe [/usr/lib/x86_64-linux-gnu/libc.so.6] + +23,605,451 ( 6.82%) 80,566 ( 9.95%) 11 ( 3.55%) . < /home/.cargo/registry/src/index.crates.io-6f17d22bba15001f/regex-automata-0.4.6/src/nfa/thompson/compiler.rs:regex_automata::nfa::thompson::compiler::Compiler::c'2 (26,711x) [./target/valgrind/s4] + 1,380,530 ( 0.40%) . . . * /home/.cargo/registry/src/index.crates.io-6f17d22bba15001f/regex-automata-0.4.6/src/nfa/thompson/literal_trie.rs:regex_automata::nfa::thompson::literal_trie::LiteralTrie::add [./target/valgrind/s4] + + 1,353,123 ( 0.39%) . . . * /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/core/src/cmp.rs:alloc::raw_vec::RawVec::reserve_for_push + + 1,331,466 ( 0.38%) . . . * ./malloc/./malloc/arena.c:realloc + + 1,321,995 ( 0.38%) . . . * /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/alloc/src/vec/mod.rs:regex_syntax::ast::visitor::visit + 123,536 ( 0.04%) 329 ( 0.04%) . . > /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/alloc/src/raw_vec.rs:alloc::raw_vec::RawVec::reserve_for_push (486x) [./target/valgrind/s4] + + 8,809,445 ( 2.54%) 896 ( 0.11%) . . < /home/.cargo/registry/src/index.crates.io-6f17d22bba15001f/aho-corasick-1.1.2/src/dfa.rs:aho_corasick::dfa::Builder::build_from_noncontiguous (39x) [./target/valgrind/s4] + 1,303,082 ( 0.38%) . . . * /home/.cargo/registry/src/index.crates.io-6f17d22bba15001f/aho-corasick-1.1.2/src/dfa.rs:aho_corasick::dfa::Builder::finish_build_one_start [./target/valgrind/s4] + 2,977,092 ( 0.86%) . . . > /home/.cargo/registry/src/index.crates.io-6f17d22bba15001f/aho-corasick-1.1.2/src/dfa.rs:aho_corasick::dfa::Builder::finish_build_one_start::{{closure}} (93,597x) [./target/valgrind/s4] + 249,266 ( 0.07%) 896 ( 0.11%) . . > /home/.cargo/registry/src/index.crates.io-6f17d22bba15001f/aho-corasick-1.1.2/src/dfa.rs:aho_corasick::dfa::DFA::set_matches (953x) [./target/valgrind/s4] + + 1,219,139 ( 0.35%) . . . * /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/core/src/ops/range.rs:aho_corasick::dfa::Builder::finish_build_one_start + + 1,152,773 ( 0.33%) . . . * /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/core/src/ptr/mod.rs:regex_syntax::ast::visitor::visit + + 5,778,134 ( 1.67%) 31,152 ( 3.85%) 1 ( 0.32%) . < /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/alloc/src/raw_vec.rs:regex_automata::nfa::thompson::literal_trie::LiteralTrie::add (19,750x) + 5,547,169 ( 1.60%) 2,618 ( 0.32%) . . < /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/alloc/src/raw_vec.rs:::drop (525x) + 3,634,164 ( 1.05%) 30,798 ( 3.80%) . . < /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/alloc/src/raw_vec.rs:::visit_post (15,399x) + 2,845,827 ( 0.82%) 12,835 ( 1.59%) . . < /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/alloc/src/raw_vec.rs:regex_syntax::hir::literal::PreferenceTrie::insert (8,722x) + 2,492,906 ( 0.72%) 920 ( 0.11%) 7 ( 2.26%) 1 ( 0.07%) < /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/alloc/src/raw_vec.rs:regex_automata::nfa::thompson::pikevm::ActiveStates::reset (318x) + 2,000,868 ( 0.58%) 1,368 ( 0.17%) . . < /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/alloc/src/raw_vec.rs:::drop (270x) + 1,274,269 ( 0.37%) 3,115 ( 0.38%) 1 ( 0.32%) . < /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/alloc/src/raw_vec.rs: as alloc::vec::spec_extend::SpecExtend>::spec_extend (752x) + 956,636 ( 0.28%) 842 ( 0.10%) 2 ( 0.65%) . < /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/alloc/src/raw_vec.rs:regex_automata::dfa::onepass::InternalBuilder::add_dfa_state_for_nfa_state (290x) + 414,608 ( 0.12%) 940 ( 0.12%) . . < /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/alloc/src/raw_vec.rs:regex_automata::nfa::thompson::builder::Builder::build (175x) + 310,461 ( 0.09%) 818 ( 0.10%) . . < /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/alloc/src/raw_vec.rs:aho_corasick::nfa::noncontiguous::Compiler::densify (314x) + 274,042 ( 0.08%) 786 ( 0.10%) . . < /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/alloc/src/raw_vec.rs:::write_str (1,865x) + 175,461 ( 0.05%) 456 ( 0.06%) . . < /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/alloc/src/raw_vec.rs:regex_automata::hybrid::dfa::Lazy::init_cache (468x) + 138,278 ( 0.04%) 560 ( 0.07%) . . < /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/alloc/src/raw_vec.rs:regex_automata::nfa::thompson::nfa::Inner::into_nfa (428x) + 134,104 ( 0.04%) 490 ( 0.06%) . . < /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/alloc/src/raw_vec.rs:regex_automata::util::sparse_set::SparseSets::new (468x) + 133,238 ( 0.04%) 355 ( 0.04%) . . < /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/alloc/src/raw_vec.rs:::visit_class_set_item_post (846x) + 120,144 ( 0.03%) 194 ( 0.02%) . . < /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/alloc/src/raw_vec.rs:regex_automata::dfa::onepass::Builder::build_from_nfa (243x) + 59,212 ( 0.02%) 164 ( 0.02%) . . < /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/alloc/src/raw_vec.rs:regex_syntax::ast::parse::ParserI

::parse_capture_name (162x) + 47,054 ( 0.01%) 68 ( 0.01%) . . < /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/alloc/src/raw_vec.rs:regex_automata::hybrid::dfa::Lazy::cache_next_state (34x) + 32,412 ( 0.01%) . . . < /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/alloc/src/raw_vec.rs:regex_automata::util::determinize::state::State::dead (292x) + 9,491 ( 0.00%) 2 ( 0.00%) . . < /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/alloc/src/raw_vec.rs:regex::regex::bytes::Regex::new (80x) + 9,172 ( 0.00%) 27 ( 0.00%) . . < /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/alloc/src/raw_vec.rs:regex_syntax::hir::interval::IntervalSet::union (58x) + 5,388 ( 0.00%) . . . < /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/alloc/src/raw_vec.rs:>::from (20x) + 4,551 ( 0.00%) . . . < /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/alloc/src/raw_vec.rs:regex_automata::hybrid::dfa::Lazy::cache_start_group (41x) + 3,060 ( 0.00%) 14 ( 0.00%) . . < /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/alloc/src/raw_vec.rs:regex_automata::util::determinize::epsilon_closure (7x) + 1,640 ( 0.00%) . . . < /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/alloc/src/raw_vec.rs:::augment_args (6x) + 1,440 ( 0.00%) 10 ( 0.00%) . . < /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/alloc/src/raw_vec.rs:s4lib::readers::syslinereader::SyslineReader::parse_datetime_in_line_cached (5x) + 1,076 ( 0.00%) . . . < /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/alloc/src/raw_vec.rs: as alloc::vec::spec_from_iter::SpecFromIter>::from_iter (2x) + 542 ( 0.00%) . . . < /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/alloc/src/raw_vec.rs:clap_builder::builder::command::Command::_build_self (2x) + 270 ( 0.00%) . . . < /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/alloc/src/raw_vec.rs:clap_builder::mkeymap::MKeyMap::_build (1x) + 218 ( 0.00%) . . . < /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/alloc/src/raw_vec.rs:::parse_ref (1x) + 114 ( 0.00%) . . . < /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/alloc/src/raw_vec.rs:regex::regex::string::Regex::new (1x) + 113 ( 0.00%) . . . < /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/alloc/src/raw_vec.rs:regex_automata::nfa::thompson::backtrack::BoundedBacktracker::search_imp (1x) + 113 ( 0.00%) . . . < /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/alloc/src/raw_vec.rs:::create_cache (1x) + 1,141,564 ( 0.33%) . . . * /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/alloc/src/raw_vec.rs:alloc::raw_vec::RawVec::reserve::do_reserve_and_handle [./target/valgrind/s4] +24,577,118 ( 7.10%) 88,532 (10.93%) 11 ( 3.55%) 1 ( 0.07%) > /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/alloc/src/raw_vec.rs:alloc::raw_vec::finish_grow (51,547x) [./target/valgrind/s4] + + 1,114,207 ( 0.32%) . . . * /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/core/src/ptr/mod.rs:::visit_post + + 1,073,488 ( 0.31%) . . . * /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/core/src/ptr/mod.rs: as core::ops::drop::Drop>::drop + 4,415,995 ( 1.28%) 33,387 ( 4.12%) . . > ???:__rust_dealloc (34,520x) [./target/valgrind/s4] + 6 ( 0.00%) . . . > /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/core/src/ptr/mod.rs:core::ptr::drop_in_place (6x) [./target/valgrind/s4] + + 998,827 ( 0.29%) . . . * /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/alloc/src/vec/mod.rs:::visit_post + 3,424,485 ( 0.99%) 7,119 ( 0.88%) 16 ( 5.16%) . > /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/alloc/src/raw_vec.rs:alloc::raw_vec::RawVec::reserve_for_push (18,030x) [./target/valgrind/s4] + + 981,248 ( 0.28%) . . . * /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/core/src/slice/iter/macros.rs:regex_syntax::ast::parse::ParserI

::char + + 981,248 ( 0.28%) . . . * /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/core/src/str/mod.rs:regex_syntax::ast::parse::ParserI

::char + + 980,244 ( 0.28%) . . . * /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/core/src/slice/index.rs:regex_syntax::ast::parse::ParserI

::char + + 978,917 ( 0.28%) . . . * /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/core/src/result.rs:regex_syntax::ast::parse::ParserI

::parse_with_comments + + 975,778 ( 0.28%) . . . * /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/core/src/slice/mod.rs:regex_syntax::hir::literal::PreferenceTrie::insert + + 951,878 ( 0.27%) . . . * /home/.cargo/registry/src/index.crates.io-6f17d22bba15001f/aho-corasick-1.1.2/src/util/alphabet.rs:aho_corasick::dfa::Builder::finish_build_one_start + + 906,922 ( 0.26%) . . . * /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/alloc/src/vec/mod.rs:regex_automata::nfa::thompson::literal_trie::LiteralTrie::add +10,618,605 ( 3.07%) 49,414 ( 6.10%) 10 ( 3.23%) . > /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/alloc/src/raw_vec.rs:alloc::raw_vec::RawVec::reserve_for_push (29,149x) [./target/valgrind/s4] + + 8,340,649 ( 2.41%) 17,872 ( 2.21%) . . < /home/.cargo/registry/src/index.crates.io-6f17d22bba15001f/regex-syntax-0.8.2/src/hir/literal.rs:alloc::vec::Vec::retain_mut (16,878x) + 879,794 ( 0.25%) . . . * /home/.cargo/registry/src/index.crates.io-6f17d22bba15001f/regex-syntax-0.8.2/src/hir/literal.rs:regex_syntax::hir::literal::PreferenceTrie::insert [./target/valgrind/s4] + + 1,523,369 ( 0.44%) . . . < /home/.cargo/registry/src/index.crates.io-6f17d22bba15001f/regex-syntax-0.8.2/src/hir/mod.rs:regex_syntax::hir::Hir::alternation (578x) [./target/valgrind/s4] + 838,045 ( 0.24%) . . . * /home/.cargo/registry/src/index.crates.io-6f17d22bba15001f/regex-syntax-0.8.2/src/hir/mod.rs:regex_syntax::hir::Properties::alternation [./target/valgrind/s4] + + 828,259 ( 0.24%) . . . * /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/alloc/src/vec/mod.rs:regex_automata::nfa::thompson::literal_trie::LiteralTrie::compile + 9,056,265 ( 2.62%) 44,527 ( 5.50%) 12 ( 3.87%) . > /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/alloc/src/raw_vec.rs:alloc::raw_vec::RawVec::reserve_for_push (37,448x) [./target/valgrind/s4] + + 7,601,358 ( 2.20%) 26,127 ( 3.23%) . . < /home/.cargo/registry/src/index.crates.io-6f17d22bba15001f/regex-syntax-0.8.2/src/ast/parse.rs:regex_syntax::ast::parse::ParserI

::parse_with_comments (15,929x) [./target/valgrind/s4] + 820,389 ( 0.24%) . . . * /home/.cargo/registry/src/index.crates.io-6f17d22bba15001f/regex-syntax-0.8.2/src/ast/parse.rs:regex_syntax::ast::parse::ParserI

::push_alternate [./target/valgrind/s4] + 3,678,590 ( 1.06%) 21,662 ( 2.68%) . . > /home/.cargo/registry/src/index.crates.io-6f17d22bba15001f/regex-syntax-0.8.2/src/ast/mod.rs:regex_syntax::ast::Concat::into_ast (15,929x) [./target/valgrind/s4] + 1,417,681 ( 0.41%) . . . > /home/.cargo/registry/src/index.crates.io-6f17d22bba15001f/regex-syntax-0.8.2/src/ast/parse.rs:regex_syntax::ast::parse::ParserI

::bump (15,929x) [./target/valgrind/s4] + 318,580 ( 0.09%) . . . > /home/.cargo/registry/src/index.crates.io-6f17d22bba15001f/regex-syntax-0.8.2/src/ast/parse.rs:regex_syntax::ast::parse::ParserI

::char (15,929x) [./target/valgrind/s4] + + 810,900 ( 0.23%) . . . * /home/.cargo/registry/src/index.crates.io-6f17d22bba15001f/regex-automata-0.4.6/src/util/alphabet.rs:regex_automata::hybrid::dfa::Lazy::init_cache + +68,957,387 (19.92%) 393,206 (48.56%) 65 (20.97%) 1 ( 0.07%) < ???:__rust_alloc (402,402x) [./target/valgrind/s4] + 805,046 ( 0.23%) . . . * /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/std/src/alloc.rs:__rdl_alloc [./target/valgrind/s4] + + 719,567 ( 0.21%) . . . < /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/core/src/ptr/mod.rs:::drop (27,518x) + 68,050 ( 0.02%) . . . < /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/core/src/ptr/mod.rs:core::ptr::drop_in_place (2,722x) [./target/valgrind/s4] + 787,617 ( 0.23%) . . . * /home/.cargo/registry/src/index.crates.io-6f17d22bba15001f/regex-syntax-0.8.2/src/hir/mod.rs:::drop'2 [./target/valgrind/s4] + + 765,100 ( 0.22%) . . . * /home/.cargo/registry/src/index.crates.io-6f17d22bba15001f/regex-automata-0.4.6/src/util/alphabet.rs:regex_automata::hybrid::dfa::Builder::build_from_nfa + + 762,475 ( 0.22%) . . . * /home/.cargo/registry/src/index.crates.io-6f17d22bba15001f/regex-automata-0.4.6/src/util/alphabet.rs:regex_automata::nfa::thompson::nfa::Inner::into_nfa + + 757,766 ( 0.22%) . . . * /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/core/src/option.rs:aho_corasick::dfa::Builder::finish_build_one_start + + 727,848 ( 0.21%) . . . * /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/std/src/sys/unix/alloc.rs:__rdl_realloc +33,363,424 ( 9.64%) 145,789 (18.00%) 71 (22.90%) . > ./malloc/./malloc/malloc.c:realloc (60,654x) [/usr/lib/x86_64-linux-gnu/libc.so.6] + + 704,434 ( 0.20%) . . . * /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/core/src/option.rs:::visit_post + + 686,672 ( 0.20%) . . . * /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/core/src/slice/index.rs:regex_automata::nfa::thompson::literal_trie::LiteralTrie::add + + 672,345 ( 0.19%) . . . * /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/core/src/iter/range.rs:alloc::vec::Vec::extend_with + + 1,235,032 ( 0.36%) . . . < /home/.cargo/registry/src/index.crates.io-6f17d22bba15001f/regex-automata-0.4.6/src/nfa/thompson/builder.rs:regex_automata::nfa::thompson::builder::Builder::build (175x) [./target/valgrind/s4] + 671,834 ( 0.19%) . . . * /home/.cargo/registry/src/index.crates.io-6f17d22bba15001f/regex-automata-0.4.6/src/nfa/thompson/nfa.rs:regex_automata::nfa::thompson::nfa::Inner::remap [./target/valgrind/s4] + + 663,543 ( 0.19%) . . . * /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/core/src/result.rs:regex_automata::nfa::thompson::compiler::Compiler::c'2 + + 628,332 ( 0.18%) . . . * /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/alloc/src/vec/mod.rs:regex_automata::nfa::thompson::builder::Builder::add + 3,150,265 ( 0.91%) 4,949 ( 0.61%) 25 ( 8.06%) . > /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/alloc/src/raw_vec.rs:alloc::raw_vec::RawVec::reserve_for_push (1,376x) [./target/valgrind/s4] + + 618,091 ( 0.18%) . . . * /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/core/src/result.rs:regex_syntax::ast::visitor::visit + + 7,551,757 ( 2.18%) 3,493 ( 0.43%) . . < /home/.cargo/registry/src/index.crates.io-6f17d22bba15001f/aho-corasick-1.1.2/src/dfa.rs:regex_automata::util::prefilter::teddy::Teddy::new (39x) + 1,873,129 ( 0.54%) 963 ( 0.12%) . . < /home/.cargo/registry/src/index.crates.io-6f17d22bba15001f/aho-corasick-1.1.2/src/ahocorasick.rs:aho_corasick::ahocorasick::AhoCorasickBuilder::build (9x) [./target/valgrind/s4] + 616,044 ( 0.18%) . . . * /home/.cargo/registry/src/index.crates.io-6f17d22bba15001f/aho-corasick-1.1.2/src/nfa/noncontiguous.rs:aho_corasick::nfa::noncontiguous::Builder::build [./target/valgrind/s4] + 1,854,743 ( 0.54%) 2 ( 0.00%) . . > /home/.cargo/registry/src/index.crates.io-6f17d22bba15001f/aho-corasick-1.1.2/src/nfa/noncontiguous.rs:aho_corasick::nfa::noncontiguous::Compiler::shuffle (48x) [./target/valgrind/s4] + 1,298,137 ( 0.38%) 1,228 ( 0.15%) . . > /home/.cargo/registry/src/index.crates.io-6f17d22bba15001f/aho-corasick-1.1.2/src/nfa/noncontiguous.rs:aho_corasick::nfa::noncontiguous::Compiler::init_unanchored_start_state (48x) [./target/valgrind/s4] + 941,551 ( 0.27%) 818 ( 0.10%) . . > /home/.cargo/registry/src/index.crates.io-6f17d22bba15001f/aho-corasick-1.1.2/src/nfa/noncontiguous.rs:aho_corasick::nfa::noncontiguous::Compiler::densify (48x) [./target/valgrind/s4] + 739,090 ( 0.21%) . . . > /home/.cargo/registry/src/index.crates.io-6f17d22bba15001f/aho-corasick-1.1.2/src/nfa/noncontiguous.rs:aho_corasick::nfa::noncontiguous::NFA::add_transition (2,432x) [./target/valgrind/s4] + 564,049 ( 0.16%) 385 ( 0.05%) . . > /home/.cargo/registry/src/index.crates.io-6f17d22bba15001f/aho-corasick-1.1.2/src/nfa/noncontiguous.rs:aho_corasick::nfa::noncontiguous::Compiler::fill_failure_transitions (48x) [./target/valgrind/s4] + 432,480 ( 0.12%) . . . > /home/.cargo/registry/src/index.crates.io-6f17d22bba15001f/aho-corasick-1.1.2/src/nfa/noncontiguous.rs:aho_corasick::nfa::noncontiguous::Compiler::add_dead_state_loop (48x) [./target/valgrind/s4] + 385,392 ( 0.11%) . . . > /home/.cargo/registry/src/index.crates.io-6f17d22bba15001f/aho-corasick-1.1.2/src/nfa/noncontiguous.rs:aho_corasick::nfa::noncontiguous::Compiler::set_anchored_start_state (48x) [./target/valgrind/s4] + 350,208 ( 0.10%) . . . > /home/.cargo/registry/src/index.crates.io-6f17d22bba15001f/aho-corasick-1.1.2/src/util/prefilter.rs:aho_corasick::util::prefilter::Builder::build (48x) [./target/valgrind/s4] + 224,254 ( 0.06%) . . . > /home/.cargo/registry/src/index.crates.io-6f17d22bba15001f/aho-corasick-1.1.2/src/util/alphabet.rs:aho_corasick::util::alphabet::ByteClassSet::byte_classes (48x) [./target/valgrind/s4] + 218,649 ( 0.06%) 624 ( 0.08%) . . > /home/.cargo/registry/src/index.crates.io-6f17d22bba15001f/aho-corasick-1.1.2/src/nfa/noncontiguous.rs:aho_corasick::nfa::noncontiguous::NFA::alloc_state (2,624x) [./target/valgrind/s4] + 166,504 ( 0.05%) 302 ( 0.04%) . . > /home/.cargo/registry/src/index.crates.io-6f17d22bba15001f/aho-corasick-1.1.2/src/nfa/noncontiguous.rs:aho_corasick::nfa::noncontiguous::NFA::add_match (1,394x) [./target/valgrind/s4] + 158,544 ( 0.05%) . . . > /home/.cargo/registry/src/index.crates.io-6f17d22bba15001f/aho-corasick-1.1.2/src/nfa/noncontiguous.rs:aho_corasick::nfa::noncontiguous::Compiler::add_unanchored_start_state_loop (48x) [./target/valgrind/s4] + 125,120 ( 0.04%) . . . > /home/.cargo/registry/src/index.crates.io-6f17d22bba15001f/aho-corasick-1.1.2/src/util/alphabet.rs:aho_corasick::util::alphabet::ByteClassSet::set_range (3,680x) [./target/valgrind/s4] + 69,245 ( 0.02%) 599 ( 0.07%) . . > /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/alloc/src/vec/mod.rs:alloc::vec::Vec::shrink_to_fit (240x) [./target/valgrind/s4] + 40,480 ( 0.01%) . . . > /home/.cargo/registry/src/index.crates.io-6f17d22bba15001f/aho-corasick-1.1.2/src/nfa/noncontiguous.rs:aho_corasick::nfa::noncontiguous::NFA::iter_trans (3,680x) [./target/valgrind/s4] + 36,067 ( 0.01%) 94 ( 0.01%) . . > /home/.cargo/registry/src/index.crates.io-6f17d22bba15001f/aho-corasick-1.1.2/src/nfa/noncontiguous.rs:aho_corasick::nfa::noncontiguous::Compiler::new (48x) [./target/valgrind/s4] + 11,040 ( 0.00%) . . . > /home/.cargo/registry/src/index.crates.io-6f17d22bba15001f/aho-corasick-1.1.2/src/util/primitives.rs:aho_corasick::nfa::noncontiguous::State::is_match (3,680x) [./target/valgrind/s4] + 9,984 ( 0.00%) . . . > ./string/../sysdeps/x86_64/multiarch/memmove-vec-unaligned-erms.S:__memcpy_avx_unaligned_erms (144x) [/usr/lib/x86_64-linux-gnu/libc.so.6] + 9,213 ( 0.00%) 94 ( 0.01%) . . > /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/core/src/ptr/mod.rs:core::ptr::drop_in_place (48x) [./target/valgrind/s4] + 816 ( 0.00%) . . . > /home/.cargo/registry/src/index.crates.io-6f17d22bba15001f/aho-corasick-1.1.2/src/nfa/noncontiguous.rs:aho_corasick::nfa::noncontiguous::Compiler::close_start_state_loop_for_leftmost (48x) [./target/valgrind/s4] + +26,377,234 ( 7.62%) 102,519 (12.66%) . . < /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/core/src/ptr/mod.rs:core::ptr::drop_in_place (774x) [./target/valgrind/s4] + 614,297 ( 0.18%) . . . * /home/.cargo/registry/src/index.crates.io-6f17d22bba15001f/regex-syntax-0.8.2/src/ast/mod.rs:::drop [./target/valgrind/s4] +22,055,897 ( 6.37%) 100,995 (12.47%) . . > /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/core/src/ptr/mod.rs:core::ptr::drop_in_place'2 (71,256x) [./target/valgrind/s4] + 136,634 ( 0.04%) . . . > ???:__rust_alloc (2,578x) [./target/valgrind/s4] + + 596,928 ( 0.17%) . . . * /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/alloc/src/vec/mod.rs:regex_syntax::hir::literal::PreferenceTrie::insert + 1,526,004 ( 0.44%) 5,037 ( 0.62%) . . > /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/alloc/src/raw_vec.rs:alloc::raw_vec::RawVec::reserve_for_push (2,014x) [./target/valgrind/s4] + + 580,733 ( 0.17%) . . . * /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/core/src/cell.rs:::visit_post + + 578,650 ( 0.17%) . . . * /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/alloc/src/boxed.rs:regex_syntax::ast::parse::ParserI

::parse_with_comments + + 561,277 ( 0.16%) . . . * /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/core/src/ptr/mod.rs:regex_syntax::hir::Hir::concat + 515,450 ( 0.15%) . . . > /home/.cargo/registry/src/index.crates.io-6f17d22bba15001f/regex-syntax-0.8.2/src/hir/mod.rs:::drop (20,618x) [./target/valgrind/s4] + 474,214 ( 0.14%) . . . > /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/core/src/ptr/mod.rs:core::ptr::drop_in_place (20,618x) [./target/valgrind/s4] + + 559,959 ( 0.16%) . . . * /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/alloc/src/alloc.rs:regex_syntax::hir::Hir::concat + 8,125,365 ( 2.35%) 2,712 ( 0.33%) . . > ???:__rust_dealloc (81,305x) [./target/valgrind/s4] + 6,308,115 ( 1.82%) 45,470 ( 5.62%) 3 ( 0.97%) . > ???:__rust_alloc (38,101x) [./target/valgrind/s4] + + 551,075 ( 0.16%) . . . * /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/core/src/slice/index.rs:regex_automata::nfa::thompson::builder::Builder::build + + 531,120 ( 0.15%) . . . * /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/core/src/option.rs:regex_syntax::hir::Properties::alternation + + 8,247,277 ( 2.38%) 1,236 ( 0.15%) . . < /home/.cargo/registry/src/index.crates.io-6f17d22bba15001f/regex-syntax-0.8.2/src/ast/parse.rs:regex_syntax::ast::parse::ParserI

::parse_with_comments (2,753x) [./target/valgrind/s4] + 526,534 ( 0.15%) . . . * /home/.cargo/registry/src/index.crates.io-6f17d22bba15001f/regex-syntax-0.8.2/src/ast/parse.rs:regex_syntax::ast::parse::ParserI

::parse_set_class [./target/valgrind/s4] + 2,062,644 ( 0.60%) 28 ( 0.00%) . . > /home/.cargo/registry/src/index.crates.io-6f17d22bba15001f/regex-syntax-0.8.2/src/ast/parse.rs:regex_syntax::ast::parse::ParserI

::pop_class (2,824x) [./target/valgrind/s4] + 1,971,018 ( 0.57%) 320 ( 0.04%) . . > /home/.cargo/registry/src/index.crates.io-6f17d22bba15001f/regex-syntax-0.8.2/src/ast/parse.rs:regex_syntax::ast::parse::ParserI

::push_class_open (2,824x) [./target/valgrind/s4] + 1,370,130 ( 0.40%) . . . > /home/.cargo/registry/src/index.crates.io-6f17d22bba15001f/regex-syntax-0.8.2/src/ast/parse.rs:regex_syntax::ast::parse::ParserI

::parse_set_class_range (3,549x) [./target/valgrind/s4] + 938,404 ( 0.27%) . . . > /home/.cargo/registry/src/index.crates.io-6f17d22bba15001f/regex-syntax-0.8.2/src/ast/parse.rs:regex_syntax::ast::parse::ParserI

::maybe_parse_ascii_class (841x) [./target/valgrind/s4] + 254,904 ( 0.07%) . . . > /home/.cargo/registry/src/index.crates.io-6f17d22bba15001f/regex-syntax-0.8.2/src/ast/parse.rs:regex_syntax::ast::parse::ParserI

::char (12,720x) [./target/valgrind/s4] + 179,406 ( 0.05%) . . . > /home/.cargo/registry/src/index.crates.io-6f17d22bba15001f/regex-syntax-0.8.2/src/ast/parse.rs:regex_syntax::ast::parse::ParserI

::bump_space (9,967x) [./target/valgrind/s4] + + 511,480 ( 0.15%) . . . * /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/core/src/convert/num.rs:aho_corasick::dfa::Builder::finish_build_one_start + + 510,608 ( 0.15%) . . . * /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/core/src/cmp.rs:regex_automata::nfa::thompson::literal_trie::LiteralTrie::add + + 490,624 ( 0.14%) . . . * /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/core/src/cell.rs:regex_syntax::ast::parse::ParserI

::char + + 490,122 ( 0.14%) . . . * /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/core/src/num/mod.rs:regex_syntax::ast::parse::ParserI

::char + + 490,122 ( 0.14%) . . . * /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/core/src/str/traits.rs:regex_syntax::ast::parse::ParserI

::char + + 489,127 ( 0.14%) . . . * /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/core/src/slice/iter/macros.rs:::drop + +34,576,504 ( 9.99%) 145,789 (18.00%) 71 (22.90%) . < ???:__rust_realloc (60,654x) [./target/valgrind/s4] + 485,232 ( 0.14%) . . . * /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/std/src/alloc.rs:__rdl_realloc [./target/valgrind/s4] + + 476,203 ( 0.14%) . . . * /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/core/src/slice/index.rs:regex_syntax::hir::literal::PreferenceTrie::insert + + 738,576 ( 0.21%) . . . < /home/.cargo/registry/src/index.crates.io-6f17d22bba15001f/regex-automata-0.4.6/src/hybrid/dfa.rs:regex_automata::hybrid::dfa::Lazy::init_cache (22,413x) [./target/valgrind/s4] + 7,194 ( 0.00%) . . . < /home/.cargo/registry/src/index.crates.io-6f17d22bba15001f/regex-automata-0.4.6/src/hybrid/dfa.rs:regex_automata::hybrid::dfa::Lazy::cache_next_state (218x) [./target/valgrind/s4] + 475,251 ( 0.14%) . . . * /home/.cargo/registry/src/index.crates.io-6f17d22bba15001f/regex-automata-0.4.6/src/hybrid/dfa.rs:regex_automata::hybrid::dfa::Lazy::set_transition [./target/valgrind/s4] + + 472,696 ( 0.14%) . . . * /home/.cargo/registry/src/index.crates.io-6f17d22bba15001f/aho-corasick-1.1.2/src/nfa/noncontiguous.rs:::remap + + 465,032 ( 0.13%) . . . * /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/core/src/slice/index.rs:aho_corasick::nfa::noncontiguous::Builder::build + + 739,090 ( 0.21%) . . . < /home/.cargo/registry/src/index.crates.io-6f17d22bba15001f/aho-corasick-1.1.2/src/nfa/noncontiguous.rs:aho_corasick::nfa::noncontiguous::Builder::build (2,432x) [./target/valgrind/s4] + 459,576 ( 0.13%) . . . * /home/.cargo/registry/src/index.crates.io-6f17d22bba15001f/aho-corasick-1.1.2/src/nfa/noncontiguous.rs:aho_corasick::nfa::noncontiguous::NFA::add_transition [./target/valgrind/s4] + + 456,868 ( 0.13%) . . . * /home/.cargo/registry/src/index.crates.io-6f17d22bba15001f/regex-automata-0.4.6/src/util/primitives.rs:regex_automata::nfa::thompson::literal_trie::LiteralTrie::add + + 456,135 ( 0.13%) . . . * /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/alloc/src/vec/mod.rs:regex_syntax::hir::literal::Extractor::union + 530,506 ( 0.15%) 1,090 ( 0.13%) . . > /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/alloc/src/vec/spec_extend.rs: as alloc::vec::spec_extend::SpecExtend>::spec_extend (2,443x) [./target/valgrind/s4] + + 885,640 ( 0.26%) . . . < /home/.cargo/registry/src/index.crates.io-6f17d22bba15001f/regex-syntax-0.8.2/src/hir/mod.rs:::visit_post (16,096x) + 855,130 ( 0.25%) . . . < /home/.cargo/registry/src/index.crates.io-6f17d22bba15001f/regex-syntax-0.8.2/src/hir/mod.rs:regex_syntax::hir::Hir::literal (15,406x) [./target/valgrind/s4] + 100,845 ( 0.03%) . . . < /home/.cargo/registry/src/index.crates.io-6f17d22bba15001f/regex-syntax-0.8.2/src/hir/mod.rs:regex_syntax::hir::Properties::literal (1,912x) [./target/valgrind/s4] + 65,430 ( 0.02%) . . . < /home/.cargo/registry/src/index.crates.io-6f17d22bba15001f/regex-syntax-0.8.2/src/hir/mod.rs:regex_syntax::hir::Hir::class (1,454x) [./target/valgrind/s4] + 801 ( 0.00%) . . . < /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/std/src/sys/unix/os_str.rs:std::sys::unix::os_str::Slice::to_str (12x) [./target/valgrind/s4] + 387 ( 0.00%) . . . < /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/alloc/src/string.rs:std::sys::unix::os_str::Buf::into_string (5x) + 176 ( 0.00%) . . . < /home/.cargo/registry/src/index.crates.io-6f17d22bba15001f/chrono-0.4.38/src/offset/local/tz_info/parser.rs:chrono::offset::local::tz_info::rule::RuleDay::parse (4x) + 115 ( 0.00%) . . . < /home/.cargo/registry/src/index.crates.io-6f17d22bba15001f/chrono-0.4.38/src/offset/local/tz_info/parser.rs:chrono::offset::local::tz_info::parser::parse (1x) [./target/valgrind/s4] + 90 ( 0.00%) . . . < /home/.cargo/registry/src/index.crates.io-6f17d22bba15001f/regex-syntax-0.8.2/src/hir/mod.rs:regex_syntax::hir::Hir::concat (2x) [./target/valgrind/s4] + 74 ( 0.00%) . . . < /home/.cargo/registry/src/index.crates.io-6f17d22bba15001f/clap_lex-0.4.1/src/ext.rs:clap_lex::ParsedArg::to_short (2x) + 74 ( 0.00%) . . . < /home/.cargo/registry/src/index.crates.io-6f17d22bba15001f/chrono-0.4.38/src/offset/local/tz_info/parser.rs:chrono::offset::local::tz_info::parser::Cursor::read_int (2x) [./target/valgrind/s4] + 45 ( 0.00%) . . . < /home/.cargo/registry/src/index.crates.io-6f17d22bba15001f/chrono-0.4.38/src/offset/local/tz_info/parser.rs:chrono::offset::local::tz_info::rule::parse_hhmmss (1x) + 453,661 ( 0.13%) . . . * /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/core/src/str/converts.rs:core::str::converts::from_utf8 [./target/valgrind/s4] + + 453,144 ( 0.13%) . . . * /home/.cargo/registry/src/index.crates.io-6f17d22bba15001f/aho-corasick-1.1.2/src/util/primitives.rs:aho_corasick::nfa::noncontiguous::Builder::build + 19,516 ( 0.01%) . . . > /home/.cargo/registry/src/index.crates.io-6f17d22bba15001f/aho-corasick-1.1.2/src/util/primitives.rs:>::try_from (2,788x) [./target/valgrind/s4] + + 431,621 ( 0.12%) . . . * /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/core/src/alloc/layout.rs:alloc::raw_vec::RawVec::reserve_for_push + + 422,207 ( 0.12%) . . . * /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/core/src/ptr/mod.rs:regex_automata::nfa::thompson::literal_trie::LiteralTrie::compile + + 420,933 ( 0.12%) . . . * /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/alloc/src/raw_vec.rs:::visit_post + 3,634,164 ( 1.05%) 30,798 ( 3.80%) . . > /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/alloc/src/raw_vec.rs:alloc::raw_vec::RawVec::reserve::do_reserve_and_handle (15,399x) [./target/valgrind/s4] + + 419,622 ( 0.12%) . . . * /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/core/src/slice/index.rs:regex_automata::nfa::thompson::builder::Builder::patch + + 408,987 ( 0.12%) . . . * /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/alloc/src/vec/mod.rs:regex_syntax::ast::parse::ParserI

::parse_with_comments + 5,438,643 ( 1.57%) 28,487 ( 3.52%) . . > /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/alloc/src/raw_vec.rs:alloc::raw_vec::RawVec::reserve_for_push (18,495x) [./target/valgrind/s4] + + 408,319 ( 0.12%) . . . * /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/alloc/src/vec/mod.rs:::drop + + 406,972 ( 0.12%) . . . * /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/core/src/cmp.rs:aho_corasick::dfa::Builder::finish_build_one_start + +27,753,819 ( 8.02%) 155,526 (19.21%) 14 ( 4.52%) 1 ( 0.07%) < /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/alloc/src/raw_vec.rs:alloc::raw_vec::finish_grow (158,080x) [./target/valgrind/s4] +11,391,532 ( 3.29%) 81,699 (10.09%) . . < /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/alloc/src/alloc.rs:regex_syntax::ast::parse::ParserI

::parse_with_comments (52,360x) + 6,308,115 ( 1.82%) 45,470 ( 5.62%) 3 ( 0.97%) . < /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/alloc/src/alloc.rs:regex_syntax::hir::Hir::concat (38,101x) + 3,237,694 ( 0.94%) 22,584 ( 2.79%) . . < /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/alloc/src/alloc.rs:regex_syntax::ast::Concat::into_ast (15,786x) + 2,996,290 ( 0.87%) 10,925 ( 1.35%) 2 ( 0.65%) . < /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/alloc/src/alloc.rs:::visit_post (36,032x) + 2,882,121 ( 0.83%) 20,341 ( 2.51%) . . < /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/alloc/src/alloc.rs:regex_automata::nfa::thompson::builder::Builder::build (12,199x) + 1,717,048 ( 0.50%) 254 ( 0.03%) . . < /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/alloc/src/alloc.rs: as core::iter::traits::iterator::Iterator>::fold (81x) + 1,481,481 ( 0.43%) 9,634 ( 1.19%) . . < /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/alloc/src/alloc.rs:regex_syntax::hir::literal::Extractor::cross (7,320x) + 1,228,294 ( 0.35%) 1,828 ( 0.23%) 4 ( 1.29%) . < /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/alloc/src/alloc.rs:regex_syntax::hir::Hir::alternation (18,867x) + 1,166,705 ( 0.34%) 7,835 ( 0.97%) . . < /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/alloc/src/alloc.rs:alloc::raw_vec::RawVec::allocate_in (5,391x) + 938,940 ( 0.27%) 960 ( 0.12%) . . < /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/alloc/src/alloc.rs:regex_automata::meta::strategy::new (81x) + 874,050 ( 0.25%) 606 ( 0.07%) 40 (12.90%) . < /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/alloc/src/alloc.rs:regex_automata::nfa::thompson::map::Utf8BoundedMap::clear (67x) + 818,675 ( 0.24%) 20 ( 0.00%) . . < /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/alloc/src/alloc.rs:regex_syntax::hir::Hir::literal (15,406x) + 674,742 ( 0.19%) 4,414 ( 0.55%) . . < /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/alloc/src/alloc.rs:regex_syntax::hir::Properties::class (2,728x) + 536,036 ( 0.15%) 2,868 ( 0.35%) . . < /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/alloc/src/alloc.rs:regex_syntax::hir::literal::Extractor::extract'2 (5,025x) + 508,623 ( 0.15%) 3,616 ( 0.45%) . . < /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/alloc/src/alloc.rs:regex_syntax::hir::Properties::literal (1,912x) + 490,825 ( 0.14%) 3,696 ( 0.46%) . . < /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/alloc/src/alloc.rs:regex_syntax::hir::Properties::repetition (2,034x) + 368,240 ( 0.11%) 2,945 ( 0.36%) . . < /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/alloc/src/alloc.rs: as core::clone::Clone>::clone (1,657x) + 366,759 ( 0.11%) 2,685 ( 0.33%) . . < /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/alloc/src/alloc.rs:regex_automata::meta::reverse_inner::flatten'2 (2,166x) + 331,832 ( 0.10%) 1,154 ( 0.14%) . . < /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/alloc/src/alloc.rs:regex_syntax::ast::parse::ParserI

::parse_uncounted_repetition (3,426x) + 294,116 ( 0.08%) 2,201 ( 0.27%) . . < /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/alloc/src/alloc.rs:aho_corasick::packed::pattern::Patterns::add (1,394x) + 290,043 ( 0.08%) 2,020 ( 0.25%) . . < /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/alloc/src/alloc.rs:regex_syntax::hir::Hir::class (1,454x) + 183,229 ( 0.05%) 142 ( 0.02%) . . < /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/alloc/src/alloc.rs:regex_automata::dfa::onepass::Builder::build_from_nfa (81x) + 170,242 ( 0.05%) 1,131 ( 0.14%) . . < /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/alloc/src/alloc.rs:regex_syntax::hir::Properties::capture (693x) + 160,128 ( 0.05%) 192 ( 0.02%) . . < /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/alloc/src/alloc.rs:regex_automata::meta::reverse_inner::flatten (118x) + 155,315 ( 0.04%) 352 ( 0.04%) . . < /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/alloc/src/alloc.rs:alloc::vec::from_elem (153x) + 150,129 ( 0.04%) 948 ( 0.12%) . . < /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/alloc/src/alloc.rs:regex_automata::nfa::thompson::compiler::Utf8Compiler::compile (758x) + 146,940 ( 0.04%) 990 ( 0.12%) . . < /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/alloc/src/alloc.rs:regex_automata::util::captures::GroupInfo::new (761x) + 144,616 ( 0.04%) 2 ( 0.00%) . . < /home/.cargo/registry/src/index.crates.io-6f17d22bba15001f/regex-syntax-0.8.2/src/hir/mod.rs:::drop (2,722x) [./target/valgrind/s4] + 136,634 ( 0.04%) . . . < /home/.cargo/registry/src/index.crates.io-6f17d22bba15001f/regex-syntax-0.8.2/src/ast/mod.rs:::drop (2,578x) [./target/valgrind/s4] + 113,744 ( 0.03%) 814 ( 0.10%) . . < /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/alloc/src/alloc.rs:regex_automata::nfa::thompson::compiler::Compiler::c_cap'2 (586x) + 90,244 ( 0.03%) 584 ( 0.07%) . . < /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/alloc/src/alloc.rs:regex_syntax::ast::Alternation::into_ast (512x) + 87,385 ( 0.03%) 415 ( 0.05%) . . < /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/alloc/src/alloc.rs: as alloc::vec::spec_from_iter::SpecFromIter>::from_iter (807x) + 76,858 ( 0.02%) 132 ( 0.02%) . . < /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/alloc/src/alloc.rs:::clone (1,188x) + 72,003 ( 0.02%) 319 ( 0.04%) . . < /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/alloc/src/alloc.rs:regex_syntax::ast::parse::ParserI

::parse_group (693x) + 67,038 ( 0.02%) 394 ( 0.05%) . . < /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/alloc/src/alloc.rs:regex_automata::nfa::thompson::map::Utf8SuffixMap::clear (68x) + 64,741 ( 0.02%) 756 ( 0.09%) . . < /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/alloc/src/alloc.rs:regex_automata::meta::regex::Builder::build (324x) + 60,486 ( 0.02%) 96 ( 0.01%) . . < /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/alloc/src/alloc.rs:regex::builders::Builder::build_one_bytes (80x) + 58,103 ( 0.02%) 172 ( 0.02%) 1 ( 0.32%) . < /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/alloc/src/alloc.rs:regex_syntax::ast::parse::ParserI

::pop_group (693x) + 55,943 ( 0.02%) 138 ( 0.02%) . . < /home/.cargo/registry/src/index.crates.io-6f17d22bba15001f/regex-syntax-0.8.2/src/ast/parse.rs:regex_syntax::ast::parse::ParserI

::pop_group (693x) [./target/valgrind/s4] + 47,191 ( 0.01%) 186 ( 0.02%) . . < /home/.cargo/registry/src/index.crates.io-6f17d22bba15001f/regex-automata-0.4.6/src/nfa/thompson/compiler.rs:regex_automata::nfa::thompson::compiler::Compiler::c'2 (495x) [./target/valgrind/s4] + 45,430 ( 0.01%) 42 ( 0.01%) . . < /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/alloc/src/alloc.rs:::drop (595x) + 44,643 ( 0.01%) 229 ( 0.03%) . . < /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/alloc/src/alloc.rs:regex_automata::util::pool::inner::Pool::new (81x) + 43,779 ( 0.01%) 173 ( 0.02%) . . < /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/alloc/src/alloc.rs:regex_automata::meta::regex::RegexInfo::new (162x) + 41,117 ( 0.01%) 36 ( 0.00%) . . < /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/alloc/src/alloc.rs:regex_syntax::ast::Ast::empty (693x) + 40,954 ( 0.01%) 104 ( 0.01%) . . < /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/alloc/src/alloc.rs:regex_syntax::ast::parse::ParserI

::push_alternate (512x) + 39,140 ( 0.01%) 81 ( 0.01%) . . < /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/alloc/src/alloc.rs:regex_syntax::ast::parse::ParserI

::parse_capture_name (586x) + 34,722 ( 0.01%) 302 ( 0.04%) 1 ( 0.32%) . < /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/alloc/src/alloc.rs:aho_corasick::dfa::Builder::build_from_noncontiguous (114x) + 30,634 ( 0.01%) . . . < /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/alloc/src/alloc.rs:regex_syntax::hir::Properties::alternation (578x) + 28,888 ( 0.01%) 98 ( 0.01%) . . < /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/alloc/src/alloc.rs:hashbrown::raw::RawTable::reserve_rehash (347x) + 28,374 ( 0.01%) 178 ( 0.02%) . . < /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/alloc/src/alloc.rs:regex_automata::hybrid::dfa::Lazy::cache_next_state (174x) + 19,621 ( 0.01%) 142 ( 0.02%) . . < /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/alloc/src/alloc.rs:regex_automata::util::captures::GroupInfoInner::add_first_group (81x) + 19,267 ( 0.01%) 128 ( 0.02%) . . < /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/alloc/src/alloc.rs:regex_syntax::hir::Properties::union (81x) + 18,939 ( 0.01%) 80 ( 0.01%) . . < /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/alloc/src/alloc.rs:regex_syntax::ast::Ast::repetition (172x) + 16,970 ( 0.00%) 94 ( 0.01%) . . < /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/alloc/src/alloc.rs:regex_syntax::hir::Repetition::with (149x) + 15,938 ( 0.00%) 52 ( 0.01%) . . < /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/alloc/src/alloc.rs:alloc::alloc::exchange_malloc (172x) [./target/valgrind/s4] + 15,639 ( 0.00%) 52 ( 0.01%) . . < /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/alloc/src/alloc.rs:::drop (208x) + 15,476 ( 0.00%) . . . < /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/alloc/src/alloc.rs:regex_automata::util::determinize::state::State::dead (292x) + 12,364 ( 0.00%) 53 ( 0.01%) . . < /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/alloc/src/alloc.rs:aho_corasick::packed::teddy::builder::x86_64::FatAVX2<3_usize>::new_unchecked (42x) + 11,785 ( 0.00%) 32 ( 0.00%) . . < /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/alloc/src/alloc.rs:regex_automata::util::prefilter::Prefilter::from_choice (50x) + 9,275 ( 0.00%) . . . < /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/alloc/src/alloc.rs:regex_automata::nfa::thompson::nfa::Inner::into_nfa (175x) + 8,957 ( 0.00%) . . . < /home/.cargo/registry/src/index.crates.io-6f17d22bba15001f/regex-syntax-0.8.2/src/hir/literal.rs:regex_syntax::hir::literal::Extractor::extract'2 (169x) [./target/valgrind/s4] + 8,885 ( 0.00%) 58 ( 0.01%) . . < /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/alloc/src/alloc.rs:alloc::collections::btree::node::Handle,alloc::collections::btree::node::marker::Edge>::insert_recursing (72x) + 8,586 ( 0.00%) . . . < /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/alloc/src/alloc.rs:::drop (162x) + 8,451 ( 0.00%) 33 ( 0.00%) . . < /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/alloc/src/alloc.rs:aho_corasick::packed::teddy::builder::x86_64::SlimAVX2<1_usize>::new_unchecked (36x) + 6,777 ( 0.00%) 22 ( 0.00%) . . < /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/alloc/src/alloc.rs:regex_syntax::ast::parse::ParserI

::pop_class (71x) + 6,611 ( 0.00%) 30 ( 0.00%) . . < /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/alloc/src/alloc.rs:alloc::collections::btree::map::BTreeMap::insert (73x) + 6,474 ( 0.00%) 8 ( 0.00%) . . < /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/alloc/src/alloc.rs:aho_corasick::packed::api::Builder::build (96x) + 5,749 ( 0.00%) 14 ( 0.00%) . . < /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/alloc/src/alloc.rs:core::slice::sort::merge_sort (76x) + 5,390 ( 0.00%) . . . < /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/alloc/src/alloc.rs:regex_automata::nfa::thompson::compiler::Compiler::c (110x) + 4,912 ( 0.00%) 2 ( 0.00%) . . < /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/alloc/src/alloc.rs:s4lib::data::line::Line::get_boxptrs (84x) + 4,784 ( 0.00%) 6 ( 0.00%) . . < /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/alloc/src/alloc.rs:::create_cache (42x) + 4,558 ( 0.00%) . . . < /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/alloc/src/alloc.rs:regex_automata::meta::regex::Regex::create_captures (86x) + 3,990 ( 0.00%) . . . < /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/alloc/src/alloc.rs:std::sys::unix::os_str::Slice::to_owned (22x) + 2,956 ( 0.00%) 2 ( 0.00%) . . < /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/alloc/src/alloc.rs:aho_corasick::util::remapper::Remapper::remap (48x) + 2,955 ( 0.00%) . . . < /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/alloc/src/alloc.rs:

::parse_ref (15x) + 2,941 ( 0.00%) 13 ( 0.00%) . . < /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/alloc/src/alloc.rs:aho_corasick::packed::teddy::builder::x86_64::SlimAVX2<3_usize>::new_unchecked (15x) + 2,786 ( 0.00%) . . . < /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/alloc/src/alloc.rs:>::from (20x) + 2,759 ( 0.00%) 4 ( 0.00%) . . < /home/.cargo/registry/src/index.crates.io-6f17d22bba15001f/regex-syntax-0.8.2/src/hir/literal.rs:regex_syntax::hir::literal::Extractor::extract (42x) [./target/valgrind/s4] + 2,544 ( 0.00%) . . . < /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/alloc/src/alloc.rs:aho_corasick::nfa::noncontiguous::Compiler::shuffle (48x) + 2,396 ( 0.00%) . . . < /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/alloc/src/alloc.rs:clap_builder::builder::arg::Arg::_build (12x) + 2,173 ( 0.00%) . . . < /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/alloc/src/alloc.rs:regex_automata::hybrid::dfa::Lazy::cache_start_group (41x) + 1,776 ( 0.00%) 16 ( 0.00%) . . < /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/alloc/src/alloc.rs:lru::LruCache::new (8x) + 1,482 ( 0.00%) 10 ( 0.00%) . . < /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/alloc/src/alloc.rs:s4lib::readers::linereader::LineReader::insert_line (5x) + 1,471 ( 0.00%) 8 ( 0.00%) . . < /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/alloc/src/alloc.rs:lru::LruCache::put (15x) + 1,346 ( 0.00%) 14 ( 0.00%) . . < /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/alloc/src/alloc.rs:hashbrown::raw::RawTable::with_capacity (9x) + 1,301 ( 0.00%) . . . < /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/alloc/src/alloc.rs:std::env::args_os (7x) + 1,060 ( 0.00%) . . . < /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/alloc/src/alloc.rs:regex_syntax::ast::parse::ParserI

::push_group (20x) + 958 ( 0.00%) . . . < /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/alloc/src/alloc.rs:::augment_args (6x) + 859 ( 0.00%) . . . < /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/alloc/src/alloc.rs:regex_automata::meta::reverse_inner::extract (13x) + 780 ( 0.00%) . . . < /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/alloc/src/alloc.rs:clap_builder::parser::parser::Parser::add_defaults (12x) + 707 ( 0.00%) 6 ( 0.00%) . . < /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/alloc/src/alloc.rs:hashbrown::raw::RawTableInner::fallible_with_capacity (4x) + 666 ( 0.00%) 6 ( 0.00%) . . < /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/alloc/src/alloc.rs:s4lib::readers::linereader::LineReader::find_line_in_block (3x) + 619 ( 0.00%) . . . < /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/alloc/src/alloc.rs:core::ops::function::FnOnce::call_once (3x) + 591 ( 0.00%) . . . < /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/alloc/src/alloc.rs:clap_builder::parser::parser::Parser::start_custom_arg (3x) + 583 ( 0.00%) . . . < /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/alloc/src/alloc.rs:::create_cache (11x) + 530 ( 0.00%) 2 ( 0.00%) . . < /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/alloc/src/alloc.rs:aho_corasick::packed::teddy::builder::x86_64::SlimAVX2<4_usize>::new_unchecked (3x) + 490 ( 0.00%) 2 ( 0.00%) . . < /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/alloc/src/alloc.rs:s4lib::readers::syslinereader::SyslineReader::insert_sysline (4x) + 477 ( 0.00%) . . . < /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/alloc/src/alloc.rs:regex_syntax::hir::literal::Extractor::extract (9x) + 477 ( 0.00%) . . . < /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/alloc/src/alloc.rs:aho_corasick::ahocorasick::AhoCorasickBuilder::build (9x) + 460 ( 0.00%) 2 ( 0.00%) . . < /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/alloc/src/alloc.rs:std::thread::Builder::spawn (4x) + 428 ( 0.00%) 2 ( 0.00%) . . < /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/alloc/src/alloc.rs:crossbeam_channel::channel::bounded (1x) + 427 ( 0.00%) 12 ( 0.00%) . . < /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/alloc/src/alloc.rs:s4lib::printer::printers::PrinterLogMessage::new (1x) + 396 ( 0.00%) . . . < /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/alloc/src/alloc.rs:chrono::offset::local::tz_info::parser::parse (2x) + 388 ( 0.00%) . . . < /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/alloc/src/alloc.rs:::parse_ref (2x) + 358 ( 0.00%) 2 ( 0.00%) . . < /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/alloc/src/alloc.rs:std::sys_common::once::futex::Once::call (2x) + 318 ( 0.00%) . . . < /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/alloc/src/alloc.rs:regex_syntax::hir::Hir::alternation'2 (6x) + 314 ( 0.00%) 2 ( 0.00%) . . < /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/alloc/src/alloc.rs:std::env::_var_os (1x) + 303 ( 0.00%) . . . < /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/alloc/src/alloc.rs:std::thread::Thread::new (3x) + 289 ( 0.00%) 2 ( 0.00%) . . < /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/alloc/src/alloc.rs:regex_syntax::hir::Properties::look (2x) + 280 ( 0.00%) 2 ( 0.00%) . . < /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/alloc/src/alloc.rs:s4lib::readers::blockreader::BlockReader::read_block_File (2x) + 265 ( 0.00%) . . . < /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/alloc/src/alloc.rs:crossbeam_channel::select::Select::new (5x) + 265 ( 0.00%) . . . < /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/alloc/src/alloc.rs:regex_syntax::hir::lift_common_prefix (5x) + 265 ( 0.00%) . . . < /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/alloc/src/alloc.rs:regex_syntax::hir::translate::TranslatorI::hir_perl_unicode_class (5x) + 264 ( 0.00%) . . . < /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/alloc/src/alloc.rs:

::possible_values (2x) + 224 ( 0.00%) 2 ( 0.00%) . . < /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/alloc/src/alloc.rs:s4lib::readers::syslinereader::SyslineReader::new (1x) + 220 ( 0.00%) 2 ( 0.00%) . . < /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/alloc/src/alloc.rs:crossbeam_channel::context::Context::new (1x) + 212 ( 0.00%) . . . < /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/alloc/src/alloc.rs:hashbrown::raw::RawTable::with_capacity_in (4x) + 208 ( 0.00%) 2 ( 0.00%) . . < /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/alloc/src/alloc.rs: as core::iter::traits::collect::FromIterator>::from_iter (1x) + 205 ( 0.00%) . . . < /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/alloc/src/alloc.rs:clap_builder::builder::command::Command::get_matches_from (1x) + 199 ( 0.00%) . . . < /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/alloc/src/alloc.rs:std::fs::read::inner (1x) + 191 ( 0.00%) . . . < /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/alloc/src/alloc.rs:<&str as alloc::ffi::c_str::CString::new::SpecNewImpl>::spec_new_impl (1x) + 147 ( 0.00%) . . . < /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/alloc/src/alloc.rs:clap_builder::builder::command::Command::unroll_arg_requires (3x) + 106 ( 0.00%) . . . < /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/alloc/src/alloc.rs:s4lib::readers::linereader::LineReader::find_line (2x) + 106 ( 0.00%) . . . < /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/alloc/src/alloc.rs:alloc::fmt::format::format_inner (2x) + 106 ( 0.00%) . . . < /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/alloc/src/alloc.rs:clap_builder::builder::command::Command::_build_self (2x) + 106 ( 0.00%) . . . < /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/alloc/src/alloc.rs:s4::process_dt_exit (2x) + 106 ( 0.00%) . . . < /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/alloc/src/alloc.rs:s4::main (2x) + 106 ( 0.00%) . . . < /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/alloc/src/alloc.rs:std::sys::unix::thread::Thread::new (2x) + 102 ( 0.00%) . . . < /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/alloc/src/alloc.rs:regex_syntax::hir::interval::IntervalSet::new (2x) + 98 ( 0.00%) . . . < /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/alloc/src/alloc.rs:s4lib::readers::syslinereader::SyslineReader::find_sysline_in_block_year (2x) + 98 ( 0.00%) . . . < /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/alloc/src/alloc.rs:s4lib::readers::syslinereader::SyslineReader::find_sysline_year (2x) + 53 ( 0.00%) . . . < /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/alloc/src/alloc.rs:regex::builders::Builder::build_one_string (1x) + 53 ( 0.00%) . . . < /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/alloc/src/alloc.rs:std::sys::unix::fs::canonicalize (1x) + 53 ( 0.00%) . . . < /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/alloc/src/alloc.rs:regex_automata::dfa::remapper::Remapper::remap (1x) + 53 ( 0.00%) . . . < /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/alloc/src/alloc.rs:regex_automata::dfa::remapper::Remapper::new (1x) + 53 ( 0.00%) . . . < /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/alloc/src/alloc.rs:clap_builder::builder::command::Command::required_graph (1x) + 53 ( 0.00%) . . . < /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/alloc/src/alloc.rs:s4lib::readers::helpers::basename (1x) + 53 ( 0.00%) . . . < /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/alloc/src/alloc.rs:s4lib::readers::filepreprocessor::process_path (1x) + 49 ( 0.00%) . . . < /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/alloc/src/alloc.rs:ctrlc::set_handler (1x) + 49 ( 0.00%) . . . < /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/alloc/src/alloc.rs:s4::processing_loop (1x) + 49 ( 0.00%) . . . < /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/alloc/src/alloc.rs:s4lib::readers::filepreprocessor::pathbuf_to_filetype_impl (1x) + 402,402 ( 0.12%) . . . * ???:__rust_alloc [./target/valgrind/s4] +68,957,387 (19.92%) 393,206 (48.56%) 65 (20.97%) 1 ( 0.07%) > /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/std/src/alloc.rs:__rdl_alloc (402,402x) [./target/valgrind/s4] + + 398,152 ( 0.12%) . . . * /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/core/src/cell.rs:regex_syntax::ast::parse::ParserI

::parse_with_comments + + 393,439 ( 0.11%) . . . * /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/core/src/cmp.rs:alloc::raw_vec::RawVec::reserve::do_reserve_and_handle + +48,279,999 (13.95%) 260,870 (32.22%) 1 ( 0.32%) . < ???:__rust_dealloc (385,984x) [./target/valgrind/s4] + 385,984 ( 0.11%) . . . * /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/std/src/sys/unix/alloc.rs:__rdl_dealloc [./target/valgrind/s4] +47,894,015 (13.84%) 260,870 (32.22%) 1 ( 0.32%) . > ./malloc/./malloc/malloc.c:free (385,984x) [/usr/lib/x86_64-linux-gnu/libc.so.6] + +11,867,842 ( 3.43%) 94,112 (11.62%) . . < /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/core/src/ptr/mod.rs:core::ptr::drop_in_place'2 (90,718x) [./target/valgrind/s4] + 8,125,365 ( 2.35%) 2,712 ( 0.33%) . . < /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/alloc/src/alloc.rs:regex_syntax::hir::Hir::concat (81,305x) + 6,041,312 ( 1.75%) 40,231 ( 4.97%) . . < /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/alloc/src/alloc.rs:regex_automata::nfa::thompson::compiler::Compiler::c'2 (44,977x) + 4,415,995 ( 1.28%) 33,387 ( 4.12%) . . < /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/core/src/ptr/mod.rs: as core::ops::drop::Drop>::drop (34,520x) + 4,073,644 ( 1.18%) 27,194 ( 3.36%) . . < /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/alloc/src/alloc.rs:::drop (27,622x) + 3,568,069 ( 1.03%) 28,826 ( 3.56%) . . < /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/core/src/ptr/mod.rs:core::ptr::drop_in_place (27,403x) [./target/valgrind/s4] + 1,897,666 ( 0.55%) 784 ( 0.10%) . . < /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/alloc/src/alloc.rs:regex_syntax::hir::Hir::alternation (18,936x) + 1,879,618 ( 0.54%) 2,886 ( 0.36%) 1 ( 0.32%) . < /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/alloc/src/alloc.rs:core::ptr::drop_in_place (2,139x) + 1,087,118 ( 0.31%) 335 ( 0.04%) . . < /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/alloc/src/alloc.rs:regex_automata::nfa::thompson::literal_trie::LiteralTrie::compile (10,884x) + 969,941 ( 0.28%) 7,555 ( 0.93%) . . < /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/alloc/src/alloc.rs:regex_syntax::hir::literal::PreferenceTrie::minimize (7,022x) + 692,266 ( 0.20%) 3,302 ( 0.41%) . . < /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/alloc/src/alloc.rs:regex_syntax::hir::literal::Extractor::cross (5,904x) + 344,898 ( 0.10%) 575 ( 0.07%) . . < /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/alloc/src/alloc.rs:core::ptr::drop_in_place (3,312x) + 335,214 ( 0.10%) 2,603 ( 0.32%) . . < /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/alloc/src/alloc.rs:core::ptr::drop_in_place'2 (2,598x) + 333,220 ( 0.10%) 2,541 ( 0.31%) . . < /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/alloc/src/alloc.rs:alloc::vec::Vec::retain_mut (2,598x) + 227,715 ( 0.07%) 6 ( 0.00%) . . < /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/alloc/src/alloc.rs:regex_syntax::ast::parse::ParserI

::pop_class (2,299x) + 213,472 ( 0.06%) 406 ( 0.05%) . . < /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/alloc/src/alloc.rs:regex_syntax::hir::literal::Extractor::extract'2 (2,035x) + 193,147 ( 0.06%) 1,516 ( 0.19%) . . < /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/alloc/src/alloc.rs:regex_automata::util::prefilter::teddy::Teddy::new (1,490x) + 173,714 ( 0.05%) 993 ( 0.12%) . . < /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/alloc/src/alloc.rs:alloc::sync::Arc::drop_slow (1,456x) + 163,031 ( 0.05%) 1,102 ( 0.14%) . . < /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/alloc/src/alloc.rs:regex_automata::meta::reverse_inner::prefilter (1,317x) + 144,610 ( 0.04%) 24 ( 0.00%) . . < /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/core/src/ptr/mod.rs:regex_syntax::hir::Hir::class (1,454x) + 136,883 ( 0.04%) 1,028 ( 0.13%) . . < /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/alloc/src/alloc.rs:regex_automata::meta::regex::Builder::build (1,069x) + 132,889 ( 0.04%) 958 ( 0.12%) . . < /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/alloc/src/alloc.rs:core::ptr::drop_in_place (909x) + 96,395 ( 0.03%) 735 ( 0.09%) . . < /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/alloc/src/alloc.rs:core::ptr::drop_in_place (745x) + 94,605 ( 0.03%) 68 ( 0.01%) . . < /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/alloc/src/alloc.rs:regex_syntax::hir::literal::Extractor::extract (935x) + 92,109 ( 0.03%) 47 ( 0.01%) . . < /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/alloc/src/alloc.rs:regex_syntax::ast::Concat::into_ast (917x) + 90,902 ( 0.03%) 35 ( 0.00%) . . < /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/alloc/src/alloc.rs:regex_automata::nfa::thompson::compiler::Utf8Compiler::compile (928x) + 86,341 ( 0.02%) 806 ( 0.10%) . . < /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/alloc/src/alloc.rs:::drop (595x) + 85,230 ( 0.02%) 54 ( 0.01%) . . < /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/alloc/src/alloc.rs:::visit_class_set_item_post (846x) + 83,890 ( 0.02%) 814 ( 0.10%) . . < /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/core/src/ptr/mod.rs:::drop (596x) + 80,571 ( 0.02%) 274 ( 0.03%) . . < /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/alloc/src/alloc.rs:aho_corasick::packed::teddy::generic::Teddy<_>::new (735x) + 79,801 ( 0.02%) 109 ( 0.01%) . . < /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/core/src/ptr/mod.rs:core::ptr::drop_in_place (774x) [./target/valgrind/s4] + 76,077 ( 0.02%) 550 ( 0.07%) . . < /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/alloc/src/alloc.rs:regex_automata::dfa::onepass::Builder::build_from_nfa (565x) + 74,944 ( 0.02%) 710 ( 0.09%) . . < /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/alloc/src/alloc.rs:regex_automata::nfa::thompson::builder::Builder::build (525x) + 74,653 ( 0.02%) 549 ( 0.07%) . . < /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/alloc/src/alloc.rs:alloc::sync::Arc::drop_slow'2 (555x) + 70,354 ( 0.02%) 64 ( 0.01%) . . < /home/.cargo/registry/src/index.crates.io-6f17d22bba15001f/regex-syntax-0.8.2/src/ast/parse.rs:regex_syntax::ast::parse::ParserI

::pop_group (693x) [./target/valgrind/s4] + 65,316 ( 0.02%) 350 ( 0.04%) . . < /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/alloc/src/alloc.rs:regex_automata::nfa::thompson::nfa::Inner::into_nfa (525x) + 64,284 ( 0.02%) 431 ( 0.05%) . . < /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/alloc/src/alloc.rs: as core::ops::drop::Drop>::drop (519x) + 41,051 ( 0.01%) 288 ( 0.04%) . . < /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/alloc/src/alloc.rs:regex_syntax::ast::visitor::visit (324x) + 36,158 ( 0.01%) 359 ( 0.04%) . . < /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/alloc/src/alloc.rs:core::ptr::drop_in_place (240x) + 32,551 ( 0.01%) 246 ( 0.03%) . . < /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/alloc/src/alloc.rs:regex_syntax::hir::literal::Extractor::union (254x) + 28,860 ( 0.01%) . . . < /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/alloc/src/alloc.rs:regex_automata::util::determinize::state::State::dead (292x) + 24,898 ( 0.01%) 91 ( 0.01%) . . < /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/alloc/src/alloc.rs:core::ptr::drop_in_place (224x) + 20,475 ( 0.01%) 96 ( 0.01%) . . < /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/alloc/src/alloc.rs: as core::ops::drop::Drop>::drop (173x) + 20,212 ( 0.01%) 148 ( 0.02%) . . < /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/alloc/src/alloc.rs:regex::regex::bytes::Regex::new (160x) + 18,913 ( 0.01%) 97 ( 0.01%) . . < /home/.cargo/registry/src/index.crates.io-6f17d22bba15001f/regex-automata-0.4.6/src/meta/regex.rs:regex_automata::meta::regex::Builder::build (162x) [./target/valgrind/s4] + 17,064 ( 0.00%) 93 ( 0.01%) . . < /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/alloc/src/alloc.rs:regex_automata::meta::strategy::new (143x) + 15,738 ( 0.00%) 122 ( 0.02%) . . < /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/alloc/src/alloc.rs:core::ptr::drop_in_place> (122x) + 14,851 ( 0.00%) 4 ( 0.00%) . . < /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/alloc/src/alloc.rs:hashbrown::raw::RawTable::reserve_rehash (149x) + 14,308 ( 0.00%) 90 ( 0.01%) . . < /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/alloc/src/alloc.rs:aho_corasick::packed::api::Builder::build (108x) + 13,803 ( 0.00%) 156 ( 0.02%) . . < /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/alloc/src/alloc.rs:::drop (81x) + 11,245 ( 0.00%) 37 ( 0.00%) . . < /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/alloc/src/alloc.rs:core::ptr::drop_in_place (21x) + 11,183 ( 0.00%) 1 ( 0.00%) . . < /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/core/src/ptr/mod.rs:core::ptr::drop_in_place (113x) [./target/valgrind/s4] + 9,676 ( 0.00%) 12 ( 0.00%) . . < /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/alloc/src/alloc.rs:s4lib::readers::syslinereader::SyslineReader::parse_datetime_in_line_cached (94x) + 9,488 ( 0.00%) . . . < /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/alloc/src/alloc.rs:aho_corasick::util::remapper::Remapper::remap (96x) + 8,122 ( 0.00%) 10 ( 0.00%) . . < /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/alloc/src/alloc.rs:s4lib::data::datetime::bytes_to_regex_to_datetime (79x) + 7,812 ( 0.00%) 12 ( 0.00%) . . < /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/alloc/src/alloc.rs:core::slice::sort::merge_sort (76x) + 7,677 ( 0.00%) 94 ( 0.01%) . . < /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/alloc/src/alloc.rs:core::ptr::drop_in_place (48x) + 7,398 ( 0.00%) 78 ( 0.01%) . . < /home/.cargo/registry/src/index.crates.io-6f17d22bba15001f/aho-corasick-1.1.2/src/nfa/noncontiguous.rs:aho_corasick::nfa::noncontiguous::Compiler::fill_failure_transitions (48x) [./target/valgrind/s4] + 6,522 ( 0.00%) . . . < /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/alloc/src/alloc.rs:clap_builder::parser::matches::matched_arg::MatchedArg::into_vals_flatten (59x) + 4,424 ( 0.00%) 46 ( 0.01%) . . < /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/alloc/src/collections/btree/node.rs:alloc::collections::btree::node::BalancingContext::merge_tracking_child_edge (24x) [./target/valgrind/s4] + 4,121 ( 0.00%) . . . < /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/alloc/src/alloc.rs:clap_builder::parser::matches::arg_matches::ArgMatches::remove_one (37x) + 3,564 ( 0.00%) . . . < /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/alloc/src/alloc.rs:regex_syntax::hir::literal::Seq::optimize_by_preference (36x) + 2,755 ( 0.00%) 3 ( 0.00%) . . < /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/alloc/src/alloc.rs:aho_corasick::dfa::Builder::build_from_noncontiguous (27x) + 2,665 ( 0.00%) 13 ( 0.00%) . . < /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/alloc/src/alloc.rs: as core::ops::drop::Drop>::drop (23x) + 2,360 ( 0.00%) . . . < /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/alloc/src/alloc.rs:aho_corasick::packed::teddy::builder::x86_64::SlimAVX2<1_usize>::new_unchecked (24x) + 2,279 ( 0.00%) 24 ( 0.00%) . . < /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/alloc/src/alloc.rs:regex_automata::util::prefilter::prefixes (15x) + 2,079 ( 0.00%) . . . < /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/alloc/src/alloc.rs:aho_corasick::packed::teddy::builder::x86_64::FatAVX2<3_usize>::new_unchecked (21x) + 1,863 ( 0.00%) . . . < /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/alloc/src/alloc.rs:>::from (20x) + 1,813 ( 0.00%) 5 ( 0.00%) . . < /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/alloc/src/alloc.rs: as core::ops::drop::Drop>::drop (18x) + 1,660 ( 0.00%) 12 ( 0.00%) . . < /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/alloc/src/alloc.rs:regex_automata::meta::reverse_inner::extract (13x) + 1,365 ( 0.00%) . . . < /home/.cargo/registry/src/index.crates.io-6f17d22bba15001f/clap_builder-4.2.1/src/parser/parser.rs:clap_builder::parser::parser::Parser::push_arg_values (15x) [./target/valgrind/s4] + 1,298 ( 0.00%) 2 ( 0.00%) . . < /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/alloc/src/alloc.rs:regex_automata::util::prefilter::suffixes (12x) + 1,279 ( 0.00%) . . . < /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/alloc/src/alloc.rs:regex_syntax::hir::Hir::into_kind (13x) + 1,242 ( 0.00%) 10 ( 0.00%) . . < /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/alloc/src/alloc.rs:core::ptr::drop_in_place> (10x) + 1,199 ( 0.00%) . . . < /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/alloc/src/alloc.rs:regex_syntax::hir::literal::Seq::cross_preamble (13x) + 1,176 ( 0.00%) . . . < /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/alloc/src/alloc.rs:regex_syntax::hir::Hir::alternation'2 (12x) + 1,100 ( 0.00%) . . . < /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/alloc/src/alloc.rs:core::ptr::drop_in_place (10x) + 1,057 ( 0.00%) 2 ( 0.00%) . . < /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/alloc/src/alloc.rs:s4::processing_loop (11x) + 1,013 ( 0.00%) . . . < /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/alloc/src/alloc.rs:regex_syntax::hir::lift_common_prefix (10x) + 990 ( 0.00%) . . . < /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/alloc/src/alloc.rs:aho_corasick::packed::teddy::builder::x86_64::SlimAVX2<3_usize>::new_unchecked (10x) + 829 ( 0.00%) 8 ( 0.00%) . . < /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/alloc/src/alloc.rs:core::ptr::drop_in_place (6x) + 811 ( 0.00%) 4 ( 0.00%) . . < /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/alloc/src/alloc.rs:core::ptr::drop_in_place (7x) + 735 ( 0.00%) 2 ( 0.00%) . . < /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/alloc/src/alloc.rs:s4::main (7x) + 672 ( 0.00%) . . . < /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/alloc/src/alloc.rs:clap_builder::parser::matches::any_value::AnyValue::downcast_into (6x) + 564 ( 0.00%) 6 ( 0.00%) . . < /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/alloc/src/alloc.rs: as core::iter::traits::collect::Extend<&T>>::extend (3x) + 549 ( 0.00%) 2 ( 0.00%) . . < src/data/datetime.rs:s4lib::data::datetime::bytes_to_regex_to_datetime (5x) [./target/valgrind/s4] + 546 ( 0.00%) . . . < /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/alloc/src/alloc.rs:clap_builder::builder::command::Command::unroll_arg_requires (6x) + 546 ( 0.00%) . . . < /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/alloc/src/alloc.rs:clap_builder::builder::command::Command::get_matches_from (6x) + 449 ( 0.00%) 5 ( 0.00%) . . < /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/alloc/src/alloc.rs:std::panicking::try (3x) + 435 ( 0.00%) . . . < /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/alloc/src/alloc.rs:clap_builder::builder::command::Command::_build_self (4x) + 399 ( 0.00%) 4 ( 0.00%) . . < /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/alloc/src/alloc.rs:alloc::collections::btree::remove::,alloc::collections::btree::node::marker::KV>>::remove_leaf_kv (2x) + 364 ( 0.00%) . . . < /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/alloc/src/alloc.rs: as alloc::vec::spec_from_iter::SpecFromIter>::from_iter (4x) + 364 ( 0.00%) . . . < /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/core/src/ptr/mod.rs:core::ptr::drop_in_place'2 (4x) [./target/valgrind/s4] + 364 ( 0.00%) . . . < /home/.cargo/registry/src/index.crates.io-6f17d22bba15001f/regex-syntax-0.8.2/src/hir/mod.rs:regex_syntax::hir::lift_common_prefix (4x) [./target/valgrind/s4] + 364 ( 0.00%) . . . < /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/alloc/src/alloc.rs:s4::process_dt_exit (4x) + 351 ( 0.00%) 2 ( 0.00%) . . < /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/alloc/src/alloc.rs:core::ptr::drop_in_place>>> (3x) + 351 ( 0.00%) 2 ( 0.00%) . . < /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/alloc/src/alloc.rs:core::ptr::drop_in_place (3x) + 306 ( 0.00%) 4 ( 0.00%) . . < /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/alloc/src/collections/btree/node.rs:alloc::collections::btree::node::BalancingContext::merge_tracking_parent (2x) [./target/valgrind/s4] + 263 ( 0.00%) 3 ( 0.00%) . . < /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/alloc/src/alloc.rs:std::sys::common::thread_local::fast_local::fast::destroy_value (2x) + 241 ( 0.00%) 2 ( 0.00%) . . < /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/alloc/src/alloc.rs:std::sys::unix::thread::Thread::new::thread_start (2x) + 231 ( 0.00%) . . . < /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/alloc/src/alloc.rs:regex::regex::string::Regex::new (2x) + 225 ( 0.00%) . . . < /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/alloc/src/alloc.rs:core::ptr::drop_in_place (2x) + 198 ( 0.00%) . . . < /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/alloc/src/alloc.rs:aho_corasick::packed::teddy::builder::x86_64::SlimAVX2<4_usize>::new_unchecked (2x) + 198 ( 0.00%) . . . < /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/alloc/src/alloc.rs:s4lib::readers::syslinereader::SyslineReader::summary (2x) + 198 ( 0.00%) . . . < /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/alloc/src/alloc.rs: as core::iter::traits::iterator::Iterator>::next (2x) + 198 ( 0.00%) . . . < /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/alloc/src/alloc.rs:regex_automata::dfa::remapper::Remapper::remap (2x) + 182 ( 0.00%) . . . < src/bin/s4.rs:s4::cli_process_blocksz (2x) [./target/valgrind/s4] + 182 ( 0.00%) . . . < /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/alloc/src/alloc.rs:std::thread::local::LocalKey::with (2x) + 182 ( 0.00%) . . . < /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/alloc/src/alloc.rs:clap_builder::parser::validator::Validator::validate (2x) + 182 ( 0.00%) . . . < /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/alloc/src/alloc.rs:core::ops::function::FnOnce::call_once (2x) + 139 ( 0.00%) 2 ( 0.00%) . . < /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/alloc/src/alloc.rs:core::ptr::drop_in_place> (1x) + 134 ( 0.00%) . . . < /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/alloc/src/alloc.rs:chrono::offset::local::tz_info::timezone::TimeZone::from_posix_tz (1x) + 119 ( 0.00%) 1 ( 0.00%) . . < /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/alloc/src/alloc.rs:termcolor::ColorChoice::should_attempt_color (1x) + 112 ( 0.00%) . . . < /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/alloc/src/alloc.rs:core::ptr::drop_in_place'2 (1x) + 112 ( 0.00%) . . . < /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/core/src/ptr/mod.rs:core::ptr::drop_in_place'2 (1x) [./target/valgrind/s4] + 99 ( 0.00%) . . . < /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/alloc/src/alloc.rs:s4lib::readers::syslinereader::SyslineReader::dt_patterns_analysis (1x) + 99 ( 0.00%) . . . < src/readers/blockreader.rs:s4lib::readers::blockreader::BlockReader::new (1x) [./target/valgrind/s4] + 99 ( 0.00%) . . . < /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/alloc/src/alloc.rs:core::ptr::drop_in_place (1x) + 91 ( 0.00%) . . . < /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/alloc/src/alloc.rs:::augment_args (1x) + 91 ( 0.00%) . . . < /home/.cargo/registry/src/index.crates.io-6f17d22bba15001f/clap_builder-4.2.1/src/builder/command.rs:clap_builder::builder::command::Command::get_matches_from (1x) [./target/valgrind/s4] + 91 ( 0.00%) . . . < src/readers/filepreprocessor.rs:s4lib::readers::filepreprocessor::pathbuf_to_filetype_impl (1x) [./target/valgrind/s4] + 91 ( 0.00%) . . . < /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/alloc/src/alloc.rs:::parse_ref (1x) + 91 ( 0.00%) . . . < /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/alloc/src/alloc.rs: as core::ops::drop::Drop>::drop (1x) + 91 ( 0.00%) . . . < src/bin/s4.rs:s4::exec_fileprocessor_thread (1x) [./target/valgrind/s4] + 91 ( 0.00%) . . . < /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/alloc/src/alloc.rs:regex_syntax::hir::interval::IntervalSet::new (1x) + 91 ( 0.00%) . . . < src/readers/filepreprocessor.rs:s4lib::readers::filepreprocessor::process_path (1x) [./target/valgrind/s4] + 91 ( 0.00%) . . . < /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/alloc/src/alloc.rs: as core::iter::traits::iterator::Iterator>::next (1x) + 91 ( 0.00%) . . . < /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/alloc/src/alloc.rs:s4lib::readers::filepreprocessor::process_path (1x) + 91 ( 0.00%) . . . < src/bin/s4.rs:::parse_ref (1x) + 91 ( 0.00%) . . . < /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/alloc/src/alloc.rs:core::ptr::drop_in_place> (1x) + 91 ( 0.00%) . . . < /home/.cargo/registry/src/index.crates.io-6f17d22bba15001f/clap_builder-4.2.1/src/parser/parser.rs:clap_builder::parser::parser::Parser::get_matches_with (1x) [./target/valgrind/s4] + 385,984 ( 0.11%) . . . * ???:__rust_dealloc [./target/valgrind/s4] +48,279,999 (13.95%) 260,870 (32.22%) 1 ( 0.32%) . > /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/std/src/sys/unix/alloc.rs:__rdl_dealloc (385,984x) [./target/valgrind/s4] + + 384,277 ( 0.11%) . . . * /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/core/src/cell.rs:regex_automata::nfa::thompson::compiler::Compiler::c'2 + + 379,830 ( 0.11%) . . . * /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/core/src/ptr/mod.rs:regex_automata::nfa::thompson::literal_trie::LiteralTrie::add + + 371,635 ( 0.11%) . . . * /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/core/src/slice/cmp.rs:regex_syntax::hir::literal::Extractor::union + 1,127,404 ( 0.33%) . . . > ./string/../sysdeps/x86_64/multiarch/memcmp-avx2-movbe.S:__memcmp_avx2_movbe (51,690x) [/usr/lib/x86_64-linux-gnu/libc.so.6] + + 370,368 ( 0.11%) . . . * /home/.cargo/registry/src/index.crates.io-6f17d22bba15001f/aho-corasick-1.1.2/src/util/primitives.rs:aho_corasick::nfa::noncontiguous::NFA::init_full_state + + 2,397,887 ( 0.69%) 20 ( 0.00%) . . < /home/.cargo/registry/src/index.crates.io-6f17d22bba15001f/regex-syntax-0.8.2/src/hir/mod.rs:regex_syntax::hir::Hir::concat (15,406x) [./target/valgrind/s4] + 369,744 ( 0.11%) . . . * /home/.cargo/registry/src/index.crates.io-6f17d22bba15001f/regex-syntax-0.8.2/src/hir/mod.rs:regex_syntax::hir::Hir::literal [./target/valgrind/s4] + 855,130 ( 0.25%) . . . > /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/core/src/str/converts.rs:core::str::converts::from_utf8 (15,406x) [./target/valgrind/s4] + + 369,528 ( 0.11%) . . . * /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/core/src/str/validations.rs:regex_syntax::ast::parse::ParserI

::bump + + 365,838 ( 0.11%) . . . * /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/core/src/ptr/mod.rs:regex_syntax::hir::Hir::alternation + 457,200 ( 0.13%) . . . > /home/.cargo/registry/src/index.crates.io-6f17d22bba15001f/regex-syntax-0.8.2/src/hir/mod.rs:::drop (18,288x) [./target/valgrind/s4] + 420,624 ( 0.12%) . . . > /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/core/src/ptr/mod.rs:core::ptr::drop_in_place (18,288x) [./target/valgrind/s4] + + 359,228 ( 0.10%) . . . * /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/core/src/slice/index.rs:::remap + + 356,688 ( 0.10%) . . . * /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/core/src/ptr/mod.rs:regex_automata::nfa::thompson::builder::Builder::add + + 351,777 ( 0.10%) . . . * /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/core/src/result.rs:::visit_post + + 348,732 ( 0.10%) . . . * /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/core/src/ops/range.rs:aho_corasick::dfa::Builder::build_from_noncontiguous + + 335,268 ( 0.10%) . . . * /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/core/src/ptr/mut_ptr.rs:alloc::vec::Vec::extend_with + + 324,311 ( 0.09%) . . . * /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/alloc/src/raw_vec.rs:regex_automata::nfa::thompson::compiler::Compiler::c'2 + 1,320,528 ( 0.38%) 7,829 ( 0.97%) . . > /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/alloc/src/raw_vec.rs:alloc::raw_vec::RawVec::allocate_in (5,376x) [./target/valgrind/s4] + + 321,558 ( 0.09%) . . . * /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/core/src/ptr/mod.rs:regex_automata::nfa::thompson::compiler::Compiler::c'2 + + 317,853 ( 0.09%) . . . < /home/.cargo/registry/src/index.crates.io-6f17d22bba15001f/regex-syntax-0.8.2/src/hir/translate.rs:::visit_post (35,317x) [./target/valgrind/s4] + 317,853 ( 0.09%) . . . * /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/core/src/ptr/mod.rs:core::ptr::drop_in_place [./target/valgrind/s4] + + 313,014 ( 0.09%) . . . * /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/core/src/slice/iter/macros.rs:regex_automata::nfa::thompson::nfa::Inner::remap + + 1,599,466 ( 0.46%) 1,609 ( 0.20%) . . < /home/.cargo/registry/src/index.crates.io-6f17d22bba15001f/regex-syntax-0.8.2/src/ast/visitor.rs:regex_syntax::ast::visitor::visit (4,916x) [./target/valgrind/s4] + 309,347 ( 0.09%) . . . * /home/.cargo/registry/src/index.crates.io-6f17d22bba15001f/regex-syntax-0.8.2/src/hir/translate.rs:::visit_class_set_item_post [./target/valgrind/s4] + 349,167 ( 0.10%) 335 ( 0.04%) . . > /home/.cargo/registry/src/index.crates.io-6f17d22bba15001f/regex-syntax-0.8.2/src/hir/interval.rs:regex_syntax::hir::interval::IntervalSet::canonicalize (3,545x) [./target/valgrind/s4] + 9,820 ( 0.00%) . . . > /home/.cargo/registry/src/index.crates.io-6f17d22bba15001f/regex-syntax-0.8.2/src/hir/translate.rs:regex_syntax::hir::translate::TranslatorI::hir_perl_unicode_class (5x) [./target/valgrind/s4] + + 305,880 ( 0.09%) . . . * /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/core/src/intrinsics.rs:regex_syntax::hir::literal::Extractor::union + + 303,829 ( 0.09%) . . . * /home/.cargo/registry/src/index.crates.io-6f17d22bba15001f/regex-automata-0.4.6/src/nfa/thompson/builder.rs:regex_automata::nfa::thompson::compiler::Compiler::c'2 + 3,761,835 ( 1.09%) 2,935 ( 0.36%) 3 ( 0.97%) . > /home/.cargo/registry/src/index.crates.io-6f17d22bba15001f/regex-automata-0.4.6/src/nfa/thompson/builder.rs:regex_automata::nfa::thompson::builder::Builder::add (46,515x) [./target/valgrind/s4] + + 303,530 ( 0.09%) . . . * /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/core/src/ptr/mod.rs:::drop + 4,903,867 ( 1.42%) 29,401 ( 3.63%) . . > /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/core/src/ptr/mod.rs:core::ptr::drop_in_place (27,518x) [./target/valgrind/s4] + 719,567 ( 0.21%) . . . > /home/.cargo/registry/src/index.crates.io-6f17d22bba15001f/regex-syntax-0.8.2/src/hir/mod.rs:::drop'2 (27,518x) [./target/valgrind/s4] + + 302,964 ( 0.09%) . . . * /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/core/src/cmp.rs:regex_syntax::hir::literal::PreferenceTrie::insert + + 301,214 ( 0.09%) . . . * /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/core/src/result.rs:alloc::raw_vec::RawVec::reserve_for_push + + 299,755 ( 0.09%) . . . * /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/core/src/slice/iter/macros.rs:regex_automata::nfa::thompson::literal_trie::LiteralTrie::compile + + 291,191 ( 0.08%) . . . * /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/core/src/slice/iter/macros.rs:::remap + + 287,654 ( 0.08%) . . . * /home/.cargo/registry/src/index.crates.io-6f17d22bba15001f/regex-automata-0.4.6/src/util/primitives.rs:regex_automata::nfa::thompson::builder::Builder::build + + 287,505 ( 0.08%) . . . * /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/alloc/src/vec/mod.rs:regex_syntax::hir::Hir::concat + 2,405,110 ( 0.69%) 3,759 ( 0.46%) . . > /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/alloc/src/raw_vec.rs:alloc::raw_vec::RawVec::reserve_for_push (16,418x) [./target/valgrind/s4] + + 2,295,976 ( 0.66%) 1,555 ( 0.19%) . . < /home/.cargo/registry/src/index.crates.io-6f17d22bba15001f/regex-automata-0.4.6/src/hybrid/dfa.rs:regex_automata::hybrid::dfa::Cache::new (117x) [./target/valgrind/s4] + 284,454 ( 0.08%) . . . * /home/.cargo/registry/src/index.crates.io-6f17d22bba15001f/regex-automata-0.4.6/src/hybrid/dfa.rs:regex_automata::hybrid::dfa::Lazy::init_cache [./target/valgrind/s4] + 738,576 ( 0.21%) . . . > /home/.cargo/registry/src/index.crates.io-6f17d22bba15001f/regex-automata-0.4.6/src/hybrid/dfa.rs:regex_automata::hybrid::dfa::Lazy::set_transition (22,413x) [./target/valgrind/s4] + 44,904 ( 0.01%) . . . > /home/.cargo/registry/src/index.crates.io-6f17d22bba15001f/regex-automata-0.4.6/src/util/determinize/state.rs:regex_automata::util::determinize::state::State::dead (117x) [./target/valgrind/s4] + + 279,186 ( 0.08%) . . . * /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/core/src/slice/iter/macros.rs:regex_syntax::hir::literal::PreferenceTrie::insert + + 277,269 ( 0.08%) . . . * /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/core/src/cell.rs:regex_syntax::ast::parse::ParserI

::bump + + 277,269 ( 0.08%) . . . * /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/core/src/ptr/mod.rs:regex_syntax::ast::parse::ParserI

::bump + + 274,477 ( 0.08%) . . . * /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/alloc/src/boxed.rs:regex_syntax::hir::Hir::concat + + 271,728 ( 0.08%) . . . * /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/core/src/ptr/mod.rs:regex_automata::nfa::thompson::map::Utf8SuffixMap::clear + + 1,488,569 ( 0.43%) . . . < /home/.cargo/registry/src/index.crates.io-6f17d22bba15001f/aho-corasick-1.1.2/src/util/remapper.rs:aho_corasick::util::remapper::Remapper::remap (48x) [./target/valgrind/s4] + 270,270 ( 0.08%) . . . * /home/.cargo/registry/src/index.crates.io-6f17d22bba15001f/aho-corasick-1.1.2/src/util/remapper.rs:::remap [./target/valgrind/s4] + + 261,800 ( 0.08%) . . . * /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/alloc/src/alloc.rs:regex_syntax::ast::parse::ParserI

::parse_with_comments +11,391,532 ( 3.29%) 81,699 (10.09%) . . > ???:__rust_alloc (52,360x) [./target/valgrind/s4] + + 261,141 ( 0.08%) . . . * /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/alloc/src/vec/mod.rs:regex_automata::nfa::thompson::nfa::Inner::add + 1,337,178 ( 0.39%) 3,970 ( 0.49%) 9 ( 2.90%) . > /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/alloc/src/raw_vec.rs:alloc::raw_vec::RawVec::reserve_for_push (1,275x) [./target/valgrind/s4] + + 257,316 ( 0.07%) . . . * /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/core/src/ptr/mod.rs:regex_automata::nfa::thompson::nfa::Inner::add + + 256,198 ( 0.07%) . . . * /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/core/src/slice/iter/macros.rs:regex_automata::nfa::thompson::builder::Builder::build + + 251,626 ( 0.07%) . . . * /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/core/src/ptr/mod.rs: as alloc::vec::spec_extend::SpecExtend>::spec_extend + + 249,834 ( 0.07%) . . . * /home/.cargo/registry/src/index.crates.io-6f17d22bba15001f/regex-automata-0.4.6/src/util/primitives.rs:regex_automata::nfa::thompson::nfa::Inner::remap + + 349,167 ( 0.10%) 335 ( 0.04%) . . < /home/.cargo/registry/src/index.crates.io-6f17d22bba15001f/regex-syntax-0.8.2/src/hir/translate.rs:::visit_class_set_item_post (3,545x) [./target/valgrind/s4] + 46,801 ( 0.01%) . . . < /home/.cargo/registry/src/index.crates.io-6f17d22bba15001f/regex-syntax-0.8.2/src/hir/interval.rs:::visit_pre (2,753x) + 44,132 ( 0.01%) . . . < /home/.cargo/registry/src/index.crates.io-6f17d22bba15001f/regex-syntax-0.8.2/src/hir/interval.rs:::visit_class_set_item_post (1,686x) + 38,420 ( 0.01%) . . . < /home/.cargo/registry/src/index.crates.io-6f17d22bba15001f/regex-syntax-0.8.2/src/hir/interval.rs:regex_syntax::hir::ClassUnicode::try_case_fold_simple (1,120x) + 22,002 ( 0.01%) . . . < /home/.cargo/registry/src/index.crates.io-6f17d22bba15001f/regex-syntax-0.8.2/src/hir/interval.rs:regex_syntax::hir::Hir::alternation (1,158x) + 19,125 ( 0.01%) . . . < /home/.cargo/registry/src/index.crates.io-6f17d22bba15001f/regex-syntax-0.8.2/src/hir/interval.rs:regex_syntax::hir::ClassUnicode::new (1,125x) + 5,440 ( 0.00%) . . . < /home/.cargo/registry/src/index.crates.io-6f17d22bba15001f/regex-syntax-0.8.2/src/hir/translate.rs:regex_syntax::hir::translate::TranslatorI::hir_perl_unicode_class (5x) [./target/valgrind/s4] + 2,526 ( 0.00%) . . . < /home/.cargo/registry/src/index.crates.io-6f17d22bba15001f/regex-syntax-0.8.2/src/hir/interval.rs:regex_syntax::hir::interval::IntervalSet::union (58x) [./target/valgrind/s4] + 2,310 ( 0.00%) . . . < /home/.cargo/registry/src/index.crates.io-6f17d22bba15001f/regex-syntax-0.8.2/src/hir/interval.rs:regex_syntax::hir::ClassBytes::push (110x) + 2,310 ( 0.00%) . . . < /home/.cargo/registry/src/index.crates.io-6f17d22bba15001f/regex-syntax-0.8.2/src/hir/interval.rs:regex_syntax::hir::ClassBytes::empty (110x) + 1,207 ( 0.00%) . . . < /home/.cargo/registry/src/index.crates.io-6f17d22bba15001f/regex-syntax-0.8.2/src/hir/interval.rs:::visit_class_set_item_pre (71x) + 783 ( 0.00%) . . . < /home/.cargo/registry/src/index.crates.io-6f17d22bba15001f/regex-syntax-0.8.2/src/hir/interval.rs:regex_syntax::hir::interval::IntervalSet::new (2x) [./target/valgrind/s4] + 246,919 ( 0.07%) . . . * /home/.cargo/registry/src/index.crates.io-6f17d22bba15001f/regex-syntax-0.8.2/src/hir/interval.rs:regex_syntax::hir::interval::IntervalSet::canonicalize [./target/valgrind/s4] + + 850,317 ( 0.25%) . . . < /home/.cargo/registry/src/index.crates.io-6f17d22bba15001f/regex-syntax-0.8.2/src/ast/parse.rs:regex_syntax::ast::parse::ParserI

::push_class_open (2,824x) [./target/valgrind/s4] + 245,716 ( 0.07%) . . . * /home/.cargo/registry/src/index.crates.io-6f17d22bba15001f/regex-syntax-0.8.2/src/ast/parse.rs:regex_syntax::ast::parse::ParserI

::parse_set_class_open [./target/valgrind/s4] + 251,418 ( 0.07%) . . . > /home/.cargo/registry/src/index.crates.io-6f17d22bba15001f/regex-syntax-0.8.2/src/ast/parse.rs:regex_syntax::ast::parse::ParserI

::bump (2,826x) [./target/valgrind/s4] + 225,912 ( 0.07%) . . . > /home/.cargo/registry/src/index.crates.io-6f17d22bba15001f/regex-syntax-0.8.2/src/ast/parse.rs:regex_syntax::ast::parse::ParserI

::char (11,298x) [./target/valgrind/s4] + 50,868 ( 0.01%) . . . > /home/.cargo/registry/src/index.crates.io-6f17d22bba15001f/regex-syntax-0.8.2/src/ast/parse.rs:regex_syntax::ast::parse::ParserI

::bump_space (2,826x) [./target/valgrind/s4] + + 941,551 ( 0.27%) 818 ( 0.10%) . . < /home/.cargo/registry/src/index.crates.io-6f17d22bba15001f/aho-corasick-1.1.2/src/nfa/noncontiguous.rs:aho_corasick::nfa::noncontiguous::Builder::build (48x) [./target/valgrind/s4] + 242,678 ( 0.07%) . . . * /home/.cargo/registry/src/index.crates.io-6f17d22bba15001f/aho-corasick-1.1.2/src/nfa/noncontiguous.rs:aho_corasick::nfa::noncontiguous::Compiler::densify [./target/valgrind/s4] + + 241,800 ( 0.07%) . . . * /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/core/src/char/methods.rs:::visit_post + + 240,956 ( 0.07%) . . . * /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/core/src/slice/mod.rs:::visit_post + + 239,331 ( 0.07%) . . . * /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/alloc/src/alloc.rs:::visit_post + 2,996,290 ( 0.87%) 10,925 ( 1.35%) 2 ( 0.65%) . > ???:__rust_alloc (36,032x) [./target/valgrind/s4] + 2,565,036 ( 0.74%) 29,826 ( 3.68%) . . > ???:__rust_realloc (14,913x) [./target/valgrind/s4] + + 239,025 ( 0.07%) . . . * /home/.cargo/registry/src/index.crates.io-6f17d22bba15001f/aho-corasick-1.1.2/src/util/alphabet.rs:aho_corasick::dfa::Builder::build_from_noncontiguous + + 234,008 ( 0.07%) . . . * /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/core/src/slice/index.rs:aho_corasick::nfa::noncontiguous::NFA::add_transition + + 3,678,590 ( 1.06%) 21,662 ( 2.68%) . . < /home/.cargo/registry/src/index.crates.io-6f17d22bba15001f/regex-syntax-0.8.2/src/ast/parse.rs:regex_syntax::ast::parse::ParserI

::push_alternate (15,929x) [./target/valgrind/s4] + 157,035 ( 0.05%) 835 ( 0.10%) . . < /home/.cargo/registry/src/index.crates.io-6f17d22bba15001f/regex-syntax-0.8.2/src/ast/parse.rs:regex_syntax::ast::parse::ParserI

::pop_group (693x) [./target/valgrind/s4] + 23,172 ( 0.01%) 134 ( 0.02%) . . < /home/.cargo/registry/src/index.crates.io-6f17d22bba15001f/regex-syntax-0.8.2/src/ast/parse.rs:regex_syntax::ast::parse::ParserI

::pop_group_end (81x) [./target/valgrind/s4] + 233,842 ( 0.07%) . . . * /home/.cargo/registry/src/index.crates.io-6f17d22bba15001f/regex-syntax-0.8.2/src/ast/mod.rs:regex_syntax::ast::Concat::into_ast [./target/valgrind/s4] + + 230,964 ( 0.07%) . . . * /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/core/src/slice/iter/macros.rs:regex_automata::nfa::thompson::literal_trie::LiteralTrie::add + + 229,410 ( 0.07%) . . . * /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/core/src/ptr/mut_ptr.rs:regex_syntax::hir::literal::Extractor::union + + 229,225 ( 0.07%) . . . * /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/core/src/ptr/mut_ptr.rs:regex_automata::nfa::thompson::literal_trie::LiteralTrie::add + + 228,692 ( 0.07%) . . . * /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/core/src/slice/iter/macros.rs:regex_automata::nfa::thompson::compiler::Compiler::c'2 + + 226,649 ( 0.07%) . . . * /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/alloc/src/raw_vec.rs:regex_automata::nfa::thompson::literal_trie::LiteralTrie::add + 5,778,134 ( 1.67%) 31,152 ( 3.85%) 1 ( 0.32%) . > /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/alloc/src/raw_vec.rs:alloc::raw_vec::RawVec::reserve::do_reserve_and_handle (19,750x) [./target/valgrind/s4] + + 1,296,601 ( 0.37%) 1,228 ( 0.15%) . . < /home/.cargo/registry/src/index.crates.io-6f17d22bba15001f/aho-corasick-1.1.2/src/nfa/noncontiguous.rs:aho_corasick::nfa::noncontiguous::Compiler::init_unanchored_start_state (96x) [./target/valgrind/s4] + 431,712 ( 0.12%) . . . < /home/.cargo/registry/src/index.crates.io-6f17d22bba15001f/aho-corasick-1.1.2/src/nfa/noncontiguous.rs:aho_corasick::nfa::noncontiguous::Compiler::add_dead_state_loop (48x) [./target/valgrind/s4] + 223,920 ( 0.06%) . . . * /home/.cargo/registry/src/index.crates.io-6f17d22bba15001f/aho-corasick-1.1.2/src/nfa/noncontiguous.rs:aho_corasick::nfa::noncontiguous::NFA::init_full_state [./target/valgrind/s4] + + 223,104 ( 0.06%) . . . * /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/alloc/src/vec/mod.rs:aho_corasick::nfa::noncontiguous::NFA::init_full_state + 431,257 ( 0.12%) 1,228 ( 0.15%) . . > /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/alloc/src/raw_vec.rs:alloc::raw_vec::RawVec::reserve_for_push (384x) [./target/valgrind/s4] + + 203,008 ( 0.06%) . . . < /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/core/src/hash/sip.rs:core::hash::BuildHasher::hash_one (4,055x) + 57,495 ( 0.02%) . . . < /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/core/src/hash/mod.rs:core::hash::BuildHasher::hash_one (1,637x) [./target/valgrind/s4] + 221,590 ( 0.06%) . . . * /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/core/src/hash/sip.rs: as core::hash::Hasher>::write [./target/valgrind/s4] + + 220,380 ( 0.06%) . . . * /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/alloc/src/alloc.rs:alloc::raw_vec::finish_grow +31,759,436 ( 9.17%) 112,458 (13.89%) 71 (22.90%) . > ???:__rust_realloc (44,076x) [./target/valgrind/s4] + + 216,459 ( 0.06%) . . . * /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/core/src/iter/traits/iterator.rs: as alloc::vec::spec_extend::SpecExtend>::spec_extend + + 211,352 ( 0.06%) . . . * /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/core/src/ptr/mod.rs:::drop + + 211,261 ( 0.06%) . . . * /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/alloc/src/boxed.rs:::visit_post + + 224,254 ( 0.06%) . . . < /home/.cargo/registry/src/index.crates.io-6f17d22bba15001f/aho-corasick-1.1.2/src/nfa/noncontiguous.rs:aho_corasick::nfa::noncontiguous::Builder::build (48x) [./target/valgrind/s4] + 209,328 ( 0.06%) . . . * /home/.cargo/registry/src/index.crates.io-6f17d22bba15001f/aho-corasick-1.1.2/src/util/alphabet.rs:aho_corasick::util::alphabet::ByteClassSet::byte_classes [./target/valgrind/s4] + + 208,923 ( 0.06%) . . . * /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/core/src/slice/iter/macros.rs:regex_automata::nfa::thompson::nfa::Inner::add + + 201,168 ( 0.06%) . . . * /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/alloc/src/boxed.rs:regex_syntax::hir::Hir::alternation + + 201,037 ( 0.06%) . . . * /home/.cargo/registry/src/index.crates.io-6f17d22bba15001f/aho-corasick-1.1.2/src/nfa/noncontiguous.rs:aho_corasick::dfa::Builder::finish_build_one_start + + 200,998 ( 0.06%) . . . * /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/alloc/src/raw_vec.rs:regex_syntax::hir::Hir::concat + + 198,671 ( 0.06%) . . . * /home/.cargo/registry/src/index.crates.io-6f17d22bba15001f/regex-syntax-0.8.2/src/ast/mod.rs:regex_syntax::ast::parse::ParserI

::parse_with_comments + + 197,970 ( 0.06%) . . . * /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/core/src/ptr/const_ptr.rs:regex_syntax::ast::visitor::visit + + 197,765 ( 0.06%) . . . * /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/alloc/src/raw_vec.rs:regex_automata::nfa::thompson::literal_trie::LiteralTrie::compile + + 346,097 ( 0.10%) . . . < /home/.cargo/registry/src/index.crates.io-6f17d22bba15001f/regex-automata-0.4.6/src/nfa/thompson/compiler.rs:regex_automata::nfa::thompson::compiler::Compiler::c'2 (3,616x) [./target/valgrind/s4] + 197,472 ( 0.06%) . . . * /home/.cargo/registry/src/index.crates.io-6f17d22bba15001f/regex-syntax-0.8.2/src/utf8.rs:::next [./target/valgrind/s4] + + 6,081,394 ( 1.76%) 2,345 ( 0.29%) 4 ( 1.29%) . < /home/.cargo/registry/src/index.crates.io-6f17d22bba15001f/regex-syntax-0.8.2/src/hir/translate.rs:::visit_post (512x) [./target/valgrind/s4] + 551,421 ( 0.16%) 256 ( 0.03%) . . < /home/.cargo/registry/src/index.crates.io-6f17d22bba15001f/regex-automata-0.4.6/src/meta/reverse_inner.rs:regex_automata::meta::reverse_inner::flatten (55x) [./target/valgrind/s4] + 170,673 ( 0.05%) 68 ( 0.01%) . . < /home/.cargo/registry/src/index.crates.io-6f17d22bba15001f/regex-automata-0.4.6/src/meta/reverse_inner.rs:regex_automata::meta::reverse_inner::flatten'2 (12x) [./target/valgrind/s4] + 196,068 ( 0.06%) . . . * /home/.cargo/registry/src/index.crates.io-6f17d22bba15001f/regex-syntax-0.8.2/src/hir/mod.rs:regex_syntax::hir::Hir::alternation [./target/valgrind/s4] + 1,523,369 ( 0.44%) . . . > /home/.cargo/registry/src/index.crates.io-6f17d22bba15001f/regex-syntax-0.8.2/src/hir/mod.rs:regex_syntax::hir::Properties::alternation (578x) [./target/valgrind/s4] + 47,257 ( 0.01%) . . . > /home/.cargo/registry/src/index.crates.io-6f17d22bba15001f/regex-syntax-0.8.2/src/hir/mod.rs:regex_syntax::hir::lift_common_prefix (579x) [./target/valgrind/s4] + 14,959 ( 0.00%) 27 ( 0.00%) . . > /home/.cargo/registry/src/index.crates.io-6f17d22bba15001f/regex-syntax-0.8.2/src/hir/interval.rs:regex_syntax::hir::interval::IntervalSet::union (58x) [./target/valgrind/s4] + 7,718 ( 0.00%) . . . > /home/.cargo/registry/src/index.crates.io-6f17d22bba15001f/regex-syntax-0.8.2/src/debug.rs:regex_syntax::debug::utf8_decode (454x) [./target/valgrind/s4] + 3,474 ( 0.00%) . . . > /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/core/src/ptr/mod.rs:core::ptr::drop_in_place> (579x) [./target/valgrind/s4] + 157 ( 0.00%) . . . > /home/.cargo/registry/src/index.crates.io-6f17d22bba15001f/regex-syntax-0.8.2/src/hir/interval.rs:regex_syntax::hir::interval::IntervalSet::new (1x) [./target/valgrind/s4] + + 1,370,130 ( 0.40%) . . . < /home/.cargo/registry/src/index.crates.io-6f17d22bba15001f/regex-syntax-0.8.2/src/ast/parse.rs:regex_syntax::ast::parse::ParserI

::parse_set_class (3,549x) [./target/valgrind/s4] + 191,661 ( 0.06%) . . . * /home/.cargo/registry/src/index.crates.io-6f17d22bba15001f/regex-syntax-0.8.2/src/ast/parse.rs:regex_syntax::ast::parse::ParserI

::parse_set_class_range [./target/valgrind/s4] + 1,000,419 ( 0.29%) . . . > /home/.cargo/registry/src/index.crates.io-6f17d22bba15001f/regex-syntax-0.8.2/src/ast/parse.rs:regex_syntax::ast::parse::ParserI

::parse_set_class_item (3,549x) [./target/valgrind/s4] + 71,580 ( 0.02%) . . . > /home/.cargo/registry/src/index.crates.io-6f17d22bba15001f/regex-syntax-0.8.2/src/ast/parse.rs:regex_syntax::ast::parse::ParserI

::char (3,549x) [./target/valgrind/s4] + 63,882 ( 0.02%) . . . > /home/.cargo/registry/src/index.crates.io-6f17d22bba15001f/regex-syntax-0.8.2/src/ast/parse.rs:regex_syntax::ast::parse::ParserI

::bump_space (3,549x) [./target/valgrind/s4] + + 190,186 ( 0.05%) . . . * /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/core/src/option.rs:regex_automata::nfa::thompson::compiler::Compiler::c'2 + + 189,432 ( 0.05%) . . . * /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/alloc/src/boxed.rs:regex_syntax::ast::Concat::into_ast + + 187,194 ( 0.05%) . . . * /home/.cargo/registry/src/index.crates.io-6f17d22bba15001f/aho-corasick-1.1.2/src/util/primitives.rs:aho_corasick::dfa::Builder::finish_build_one_start::{{closure}} + + 187,194 ( 0.05%) . . . * /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/core/src/slice/index.rs:aho_corasick::dfa::Builder::finish_build_one_start::{{closure}} + + 185,179 ( 0.05%) . . . * /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/alloc/src/vec/into_iter.rs:regex_syntax::hir::Hir::concat + + 185,086 ( 0.05%) . . . * /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/core/src/char/methods.rs:regex_syntax::ast::parse::ParserI

::bump + + 184,927 ( 0.05%) . . . * /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/core/src/slice/iter/macros.rs:regex_syntax::ast::parse::ParserI

::bump + + 184,846 ( 0.05%) . . . * /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/core/src/slice/index.rs:regex_syntax::ast::parse::ParserI

::bump + + 184,846 ( 0.05%) . . . * /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/core/src/str/mod.rs:regex_syntax::ast::parse::ParserI

::bump + + 184,752 ( 0.05%) . . . * /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/core/src/slice/index.rs:aho_corasick::nfa::noncontiguous::NFA::init_full_state + + 183,373 ( 0.05%) . . . * /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/alloc/src/raw_vec.rs:regex_syntax::ast::visitor::visit + + 179,838 ( 0.05%) . . . * /home/.cargo/registry/src/index.crates.io-6f17d22bba15001f/regex-automata-0.4.6/src/util/primitives.rs:regex_automata::nfa::thompson::builder::Builder::patch + + 178,822 ( 0.05%) . . . * /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/core/src/ptr/const_ptr.rs:regex_automata::nfa::thompson::literal_trie::LiteralTrie::add + + 178,625 ( 0.05%) . . . * /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/core/src/num/uint_macros.rs:alloc::raw_vec::RawVec::reserve_for_push + + 178,344 ( 0.05%) . . . * /home/.cargo/registry/src/index.crates.io-6f17d22bba15001f/regex-automata-0.4.6/src/util/primitives.rs:regex_automata::nfa::thompson::builder::Builder::add + + 177,036 ( 0.05%) . . . * /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/core/src/ptr/mut_ptr.rs:::visit_post + + 2,062,644 ( 0.60%) 28 ( 0.00%) . . < /home/.cargo/registry/src/index.crates.io-6f17d22bba15001f/regex-syntax-0.8.2/src/ast/parse.rs:regex_syntax::ast::parse::ParserI

::parse_set_class (2,824x) [./target/valgrind/s4] + 176,011 ( 0.05%) . . . * /home/.cargo/registry/src/index.crates.io-6f17d22bba15001f/regex-syntax-0.8.2/src/ast/parse.rs:regex_syntax::ast::parse::ParserI

::pop_class [./target/valgrind/s4] + 516,792 ( 0.15%) . . . > /home/.cargo/registry/src/index.crates.io-6f17d22bba15001f/regex-syntax-0.8.2/src/ast/parse.rs:regex_syntax::ast::parse::ParserI

::pop_class_op (2,824x) [./target/valgrind/s4] + 254,160 ( 0.07%) . . . > ./string/../sysdeps/x86_64/multiarch/memmove-vec-unaligned-erms.S:__memcpy_avx_unaligned_erms (8,472x) [/usr/lib/x86_64-linux-gnu/libc.so.6] + 251,256 ( 0.07%) . . . > /home/.cargo/registry/src/index.crates.io-6f17d22bba15001f/regex-syntax-0.8.2/src/ast/parse.rs:regex_syntax::ast::parse::ParserI

::bump (2,824x) [./target/valgrind/s4] + 172,264 ( 0.05%) . . . > /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/core/src/ptr/mod.rs:core::ptr::drop_in_place (2,824x) [./target/valgrind/s4] + 56,480 ( 0.02%) . . . > /home/.cargo/registry/src/index.crates.io-6f17d22bba15001f/regex-syntax-0.8.2/src/ast/parse.rs:regex_syntax::ast::parse::ParserI

::char (2,824x) [./target/valgrind/s4] + + 169,250 ( 0.05%) . . . < /home/.cargo/registry/src/index.crates.io-6f17d22bba15001f/regex-automata-0.4.6/src/nfa/thompson/compiler.rs:regex_automata::nfa::thompson::compiler::Compiler::c'2 (84,625x) [./target/valgrind/s4] + 4,518 ( 0.00%) . . . < /home/.cargo/registry/src/index.crates.io-6f17d22bba15001f/regex-automata-0.4.6/src/meta/reverse_inner.rs:regex_automata::meta::reverse_inner::flatten'2 (2,259x) [./target/valgrind/s4] + 574 ( 0.00%) . . . < /home/.cargo/registry/src/index.crates.io-6f17d22bba15001f/regex-automata-0.4.6/src/nfa/thompson/compiler.rs:regex_automata::nfa::thompson::compiler::Compiler::c (287x) [./target/valgrind/s4] + 568 ( 0.00%) . . . < /home/.cargo/registry/src/index.crates.io-6f17d22bba15001f/regex-automata-0.4.6/src/meta/reverse_inner.rs:regex_automata::meta::reverse_inner::flatten (284x) [./target/valgrind/s4] + 26 ( 0.00%) . . . < /home/.cargo/registry/src/index.crates.io-6f17d22bba15001f/regex-automata-0.4.6/src/meta/reverse_inner.rs:regex_automata::meta::reverse_inner::extract (13x) [./target/valgrind/s4] + 174,936 ( 0.05%) . . . * /home/.cargo/registry/src/index.crates.io-6f17d22bba15001f/regex-syntax-0.8.2/src/hir/mod.rs:regex_syntax::hir::Hir::kind [./target/valgrind/s4] + + 174,878 ( 0.05%) . . . * /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/alloc/src/vec/mod.rs:::drop + 1,493,037 ( 0.43%) 1,869 ( 0.23%) 1 ( 0.32%) . > /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/alloc/src/vec/spec_extend.rs: as alloc::vec::spec_extend::SpecExtend>::spec_extend (2,604x) [./target/valgrind/s4] + + 169,878 ( 0.05%) . . . * /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/core/src/ptr/mut_ptr.rs:regex_syntax::ast::visitor::visit + + 169,466 ( 0.05%) . . . * /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/alloc/src/boxed.rs:regex_syntax::hir::Hir::literal + + 167,611 ( 0.05%) . . . * /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/core/src/num/uint_macros.rs:regex_syntax::hir::literal::Extractor::union + + 9,372,525 ( 2.71%) 1,120 ( 0.14%) 1 ( 0.32%) . < /home/.cargo/registry/src/index.crates.io-6f17d22bba15001f/aho-corasick-1.1.2/src/dfa.rs:regex_automata::util::prefilter::teddy::Teddy::new (39x) + 1,874,001 ( 0.54%) 1,779 ( 0.22%) . . < /home/.cargo/registry/src/index.crates.io-6f17d22bba15001f/aho-corasick-1.1.2/src/ahocorasick.rs:aho_corasick::ahocorasick::AhoCorasickBuilder::build (9x) [./target/valgrind/s4] + 164,577 ( 0.05%) . . . * /home/.cargo/registry/src/index.crates.io-6f17d22bba15001f/aho-corasick-1.1.2/src/dfa.rs:aho_corasick::dfa::Builder::build_from_noncontiguous [./target/valgrind/s4] + 8,809,445 ( 2.54%) 896 ( 0.11%) . . > /home/.cargo/registry/src/index.crates.io-6f17d22bba15001f/aho-corasick-1.1.2/src/dfa.rs:aho_corasick::dfa::Builder::finish_build_one_start (39x) [./target/valgrind/s4] + 311,723 ( 0.09%) 1,642 ( 0.20%) . . > /home/.cargo/registry/src/index.crates.io-6f17d22bba15001f/aho-corasick-1.1.2/src/dfa.rs:aho_corasick::dfa::DFA::set_matches (882x) [./target/valgrind/s4] + 183,375 ( 0.05%) . . . > /home/.cargo/registry/src/index.crates.io-6f17d22bba15001f/aho-corasick-1.1.2/src/dfa.rs:aho_corasick::dfa::Builder::finish_build_both_starts::{{closure}} (6,273x) [./target/valgrind/s4] + 51,361 ( 0.01%) 38 ( 0.00%) . . > /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/alloc/src/vec/mod.rs:alloc::vec::from_elem (48x) [./target/valgrind/s4] + 3,696 ( 0.00%) . . . > ./string/../sysdeps/x86_64/multiarch/memmove-vec-unaligned-erms.S:__memcpy_avx_unaligned_erms (48x) [/usr/lib/x86_64-linux-gnu/libc.so.6] + + 162,341 ( 0.05%) . . . * ./elf/../sysdeps/x86_64/dl-machine.h:_dl_relocate_object + 112,203 ( 0.03%) . . . > ./elf/./elf/dl-lookup.c:_dl_lookup_symbol_x (178x) [/usr/lib/x86_64-linux-gnu/ld-linux-x86-64.so.2] + 66 ( 0.00%) . . . > ./string/../sysdeps/x86_64/multiarch/memcmp.c:bcmp (3x) [/usr/lib/x86_64-linux-gnu/libc.so.6] + 66 ( 0.00%) . . . > ./string/../sysdeps/x86_64/multiarch/memmove.c:memmove (3x) [/usr/lib/x86_64-linux-gnu/libc.so.6] + 48 ( 0.00%) . . . > ./string/../sysdeps/x86_64/multiarch/memset.c:memset (2x) [/usr/lib/x86_64-linux-gnu/libc.so.6] + 46 ( 0.00%) . . . > ./string/../sysdeps/x86_64/multiarch/memchr.c:memchr (2x) [/usr/lib/x86_64-linux-gnu/libc.so.6] + 46 ( 0.00%) . . . > ./wcsmbs/../sysdeps/x86_64/multiarch/wmemchr.c:wmemchr (2x) [/usr/lib/x86_64-linux-gnu/libc.so.6] + 44 ( 0.00%) . . . > ./string/../sysdeps/x86_64/multiarch/memcpy.c:memcpy@@GLIBC_2.14 (2x) [/usr/lib/x86_64-linux-gnu/libc.so.6] + 42 ( 0.00%) . . . > ./string/../sysdeps/x86_64/multiarch/strlen.c:strlen (2x) [/usr/lib/x86_64-linux-gnu/libc.so.6] + 42 ( 0.00%) . . . > ./string/../sysdeps/x86_64/multiarch/memrchr.c:memrchr (2x) [/usr/lib/x86_64-linux-gnu/libc.so.6] + 42 ( 0.00%) . . . > ./wcsmbs/../sysdeps/x86_64/multiarch/wcschr.c:wcschr (2x) [/usr/lib/x86_64-linux-gnu/libc.so.6] + 42 ( 0.00%) . . . > ./string/../sysdeps/x86_64/multiarch/strnlen.c:strnlen (2x) [/usr/lib/x86_64-linux-gnu/libc.so.6] + 38 ( 0.00%) . . . > ./wcsmbs/../sysdeps/x86_64/multiarch/wmemset.c:wmemset (2x) [/usr/lib/x86_64-linux-gnu/libc.so.6] + 28 ( 0.00%) . . . > ./string/../sysdeps/x86/cacheinfo.c:__x86_cacheinfo (1x) [/usr/lib/x86_64-linux-gnu/libc.so.6] + 23 ( 0.00%) . . . > ./string/../sysdeps/x86_64/multiarch/rawmemchr.c:rawmemchr (1x) [/usr/lib/x86_64-linux-gnu/libc.so.6] + 22 ( 0.00%) . . . > ./string/../sysdeps/x86_64/multiarch/mempcpy.c:mempcpy (1x) [/usr/lib/x86_64-linux-gnu/libc.so.6] + 22 ( 0.00%) . . . > ./wcsmbs/../sysdeps/x86_64/multiarch/wmemcmp.c:wmemcmp (1x) [/usr/lib/x86_64-linux-gnu/libc.so.6] + 21 ( 0.00%) . . . > ./wcsmbs/../sysdeps/x86_64/multiarch/wcscmp.c:wcscmp (1x) [/usr/lib/x86_64-linux-gnu/libc.so.6] + 21 ( 0.00%) . . . > ./string/../sysdeps/x86_64/multiarch/strchrnul.c:strchrnul (1x) [/usr/lib/x86_64-linux-gnu/libc.so.6] + 21 ( 0.00%) . . . > ./string/../sysdeps/x86_64/multiarch/strrchr.c:rindex (1x) [/usr/lib/x86_64-linux-gnu/libc.so.6] + 19 ( 0.00%) . . . > ./wcsmbs/../sysdeps/x86_64/multiarch/wcslen.c:wcslen (1x) [/usr/lib/x86_64-linux-gnu/libc.so.6] + 19 ( 0.00%) . . . > ./wcsmbs/../sysdeps/x86_64/multiarch/wcsnlen.c:wcsnlen (1x) [/usr/lib/x86_64-linux-gnu/libc.so.6] + 19 ( 0.00%) . . . > ./string/../sysdeps/x86_64/multiarch/strchr.c:index (1x) [/usr/lib/x86_64-linux-gnu/libc.so.6] + 17 ( 0.00%) . . . > ./string/../sysdeps/x86_64/multiarch/strcpy.c:strcpy (1x) [/usr/lib/x86_64-linux-gnu/libc.so.6] + 17 ( 0.00%) . . . > ./string/../sysdeps/x86_64/multiarch/strncpy.c:strncpy (1x) [/usr/lib/x86_64-linux-gnu/libc.so.6] + 17 ( 0.00%) . . . > ./string/../sysdeps/x86_64/multiarch/stpcpy.c:stpcpy (1x) [/usr/lib/x86_64-linux-gnu/libc.so.6] + 17 ( 0.00%) . . . > ./string/../sysdeps/x86_64/multiarch/strcat.c:strcat (1x) [/usr/lib/x86_64-linux-gnu/libc.so.6] + 17 ( 0.00%) . . . > ./string/../sysdeps/x86_64/multiarch/strcmp.c:strcmp (1x) [/usr/lib/x86_64-linux-gnu/libc.so.6] + 17 ( 0.00%) . . . > ./string/../sysdeps/x86_64/multiarch/strncmp.c:strncmp (1x) [/usr/lib/x86_64-linux-gnu/libc.so.6] + 17 ( 0.00%) . . . > ./string/../sysdeps/x86_64/multiarch/stpncpy.c:stpncpy (1x) [/usr/lib/x86_64-linux-gnu/libc.so.6] + 7 ( 0.00%) . . . > ./string/../sysdeps/x86_64/multiarch/strncase.c:strncasecmp (1x) [/usr/lib/x86_64-linux-gnu/libc.so.6] + 7 ( 0.00%) . . . > ./string/../sysdeps/x86_64/multiarch/strncase_l.c:strncasecmp_l (1x) [/usr/lib/x86_64-linux-gnu/libc.so.6] + 7 ( 0.00%) . . . > ./string/../sysdeps/x86_64/multiarch/strpbrk.c:strpbrk (1x) [/usr/lib/x86_64-linux-gnu/libc.so.6] + 7 ( 0.00%) . . . > ./string/../sysdeps/x86_64/multiarch/strspn.c:strspn (1x) [/usr/lib/x86_64-linux-gnu/libc.so.6] + 7 ( 0.00%) . . . > ./string/../sysdeps/x86_64/multiarch/strcasecmp.c:strcasecmp (1x) [/usr/lib/x86_64-linux-gnu/libc.so.6] + 7 ( 0.00%) . . . > ./wcsmbs/../sysdeps/x86_64/multiarch/wcscpy.c:wcscpy (1x) [/usr/lib/x86_64-linux-gnu/libc.so.6] + 7 ( 0.00%) . . . > ./string/../sysdeps/x86_64/multiarch/strcspn.c:strcspn (1x) [/usr/lib/x86_64-linux-gnu/libc.so.6] + 7 ( 0.00%) . . . > ./string/../sysdeps/x86_64/multiarch/strcasecmp_l.c:strcasecmp_l (1x) [/usr/lib/x86_64-linux-gnu/libc.so.6] + 6 ( 0.00%) . . . > ./elf/../sysdeps/x86/dl-get-cpu-features.c:__x86_cpu_features (1x) [/usr/lib/x86_64-linux-gnu/ld-linux-x86-64.so.2] + + 161,468 ( 0.05%) . . . * /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/alloc/src/vec/mod.rs:regex_automata::nfa::thompson::builder::Builder::build + 537,156 ( 0.16%) 2,168 ( 0.27%) . . > /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/alloc/src/raw_vec.rs:alloc::raw_vec::RawVec::reserve_for_push (1,033x) [./target/valgrind/s4] + + 161,392 ( 0.05%) . . . * /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/core/src/slice/index.rs:regex_automata::nfa::thompson::literal_trie::LiteralTrie::compile + + 161,338 ( 0.05%) . . . * /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/core/src/cell.rs:regex_syntax::ast::parse::ParserI

::push_alternate + + 385,392 ( 0.11%) . . . < /home/.cargo/registry/src/index.crates.io-6f17d22bba15001f/aho-corasick-1.1.2/src/nfa/noncontiguous.rs:aho_corasick::nfa::noncontiguous::Builder::build (48x) [./target/valgrind/s4] + 161,040 ( 0.05%) . . . * /home/.cargo/registry/src/index.crates.io-6f17d22bba15001f/aho-corasick-1.1.2/src/nfa/noncontiguous.rs:aho_corasick::nfa::noncontiguous::Compiler::set_anchored_start_state [./target/valgrind/s4] + 2,112 ( 0.00%) . . . > /home/.cargo/registry/src/index.crates.io-6f17d22bba15001f/aho-corasick-1.1.2/src/nfa/noncontiguous.rs:aho_corasick::nfa::noncontiguous::NFA::copy_matches (48x) [./target/valgrind/s4] + + 5,171,925 ( 1.49%) 9,430 ( 1.16%) . . < /home/.cargo/registry/src/index.crates.io-6f17d22bba15001f/regex-syntax-0.8.2/src/hir/literal.rs:regex_syntax::hir::literal::Extractor::extract (975x) [./target/valgrind/s4] + 2,295,330 ( 0.66%) 7,281 ( 0.90%) . . < /home/.cargo/registry/src/index.crates.io-6f17d22bba15001f/regex-syntax-0.8.2/src/hir/literal.rs:regex_syntax::hir::literal::Extractor::extract'2 (1,944x) [./target/valgrind/s4] + 160,832 ( 0.05%) . . . * /home/.cargo/registry/src/index.crates.io-6f17d22bba15001f/regex-syntax-0.8.2/src/hir/literal.rs:regex_syntax::hir::literal::Extractor::extract'2 [./target/valgrind/s4] + 2,464,002 ( 0.71%) 1,082 ( 0.13%) . . > /home/.cargo/registry/src/index.crates.io-6f17d22bba15001f/regex-syntax-0.8.2/src/hir/literal.rs:regex_syntax::hir::literal::Extractor::union (1,583x) [./target/valgrind/s4] + 2,295,330 ( 0.66%) 7,281 ( 0.90%) . . > /home/.cargo/registry/src/index.crates.io-6f17d22bba15001f/regex-syntax-0.8.2/src/hir/literal.rs:regex_syntax::hir::literal::Extractor::extract'2 (1,944x) [./target/valgrind/s4] + 1,430,857 ( 0.41%) 4,544 ( 0.56%) . . > /home/.cargo/registry/src/index.crates.io-6f17d22bba15001f/regex-syntax-0.8.2/src/hir/literal.rs:regex_syntax::hir::literal::Extractor::cross (371x) [./target/valgrind/s4] + 8,957 ( 0.00%) . . . > ???:__rust_alloc (169x) [./target/valgrind/s4] + + 160,653 ( 0.05%) . . . * /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/core/src/slice/iter/macros.rs: as alloc::vec::spec_extend::SpecExtend>::spec_extend + + 159,504 ( 0.05%) . . . * /home/.cargo/registry/src/index.crates.io-6f17d22bba15001f/aho-corasick-1.1.2/src/util/alphabet.rs:aho_corasick::util::prefilter::Builder::build + + 155,051 ( 0.04%) . . . * /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/core/src/result.rs:regex_syntax::ast::parse::ParserI

::parse_set_class + 84,720 ( 0.02%) . . . > ./string/../sysdeps/x86_64/multiarch/memmove-vec-unaligned-erms.S:__memcpy_avx_unaligned_erms (2,824x) [/usr/lib/x86_64-linux-gnu/libc.so.6] + + 153,962 ( 0.04%) . . . * /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/core/src/ptr/const_ptr.rs:::visit_post + + 151,482 ( 0.04%) . . . * /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/core/src/ptr/const_ptr.rs:regex_syntax::hir::literal::PreferenceTrie::insert + + 151,080 ( 0.04%) . . . * /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/alloc/src/alloc.rs:regex_syntax::hir::Hir::alternation + 1,897,666 ( 0.55%) 784 ( 0.10%) . . > ???:__rust_dealloc (18,936x) [./target/valgrind/s4] + 1,228,294 ( 0.35%) 1,828 ( 0.23%) 4 ( 1.29%) . > ???:__rust_alloc (18,867x) [./target/valgrind/s4] + + 2,114,167 ( 0.61%) 9,515 ( 1.18%) . . < /home/.cargo/registry/src/index.crates.io-6f17d22bba15001f/regex-syntax-0.8.2/src/hir/translate.rs:::visit_post (3,873x) [./target/valgrind/s4] + 2,402 ( 0.00%) 10 ( 0.00%) . . < /home/.cargo/registry/src/index.crates.io-6f17d22bba15001f/regex-syntax-0.8.2/src/hir/mod.rs:::visit_post (5x) + 148 ( 0.00%) . . . < /home/.cargo/registry/src/index.crates.io-6f17d22bba15001f/regex-syntax-0.8.2/src/hir/mod.rs:regex_syntax::hir::Hir::alternation'2 (1x) [./target/valgrind/s4] + 150,307 ( 0.04%) . . . * /home/.cargo/registry/src/index.crates.io-6f17d22bba15001f/regex-syntax-0.8.2/src/hir/mod.rs:regex_syntax::hir::Hir::class [./target/valgrind/s4] + 718,057 ( 0.21%) 4,020 ( 0.50%) . . > /home/.cargo/registry/src/index.crates.io-6f17d22bba15001f/regex-syntax-0.8.2/src/hir/mod.rs:regex_syntax::hir::Properties::class (2,425x) [./target/valgrind/s4] + 444,409 ( 0.13%) 555 ( 0.07%) . . > /home/.cargo/registry/src/index.crates.io-6f17d22bba15001f/regex-syntax-0.8.2/src/hir/mod.rs:regex_syntax::hir::ClassUnicode::literal (3,879x) [./target/valgrind/s4] + 65,430 ( 0.02%) . . . > /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/core/src/str/converts.rs:core::str::converts::from_utf8 (1,454x) [./target/valgrind/s4] + + 1,971,018 ( 0.57%) 320 ( 0.04%) . . < /home/.cargo/registry/src/index.crates.io-6f17d22bba15001f/regex-syntax-0.8.2/src/ast/parse.rs:regex_syntax::ast::parse::ParserI

::parse_set_class (2,824x) [./target/valgrind/s4] + 149,753 ( 0.04%) . . . * /home/.cargo/registry/src/index.crates.io-6f17d22bba15001f/regex-syntax-0.8.2/src/ast/parse.rs:regex_syntax::ast::parse::ParserI

::push_class_open [./target/valgrind/s4] + 850,317 ( 0.25%) . . . > /home/.cargo/registry/src/index.crates.io-6f17d22bba15001f/regex-syntax-0.8.2/src/ast/parse.rs:regex_syntax::ast::parse::ParserI

::parse_set_class_open (2,824x) [./target/valgrind/s4] + 56,432 ( 0.02%) . . . > /home/.cargo/registry/src/index.crates.io-6f17d22bba15001f/regex-syntax-0.8.2/src/ast/parse.rs:regex_syntax::ast::parse::ParserI

::char (2,824x) [./target/valgrind/s4] + + 148,689 ( 0.04%) . . . * /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/core/src/option.rs:regex_syntax::ast::parse::ParserI

::parse_with_comments + + 147,984 ( 0.04%) . . . * /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/core/src/slice/index.rs:aho_corasick::nfa::noncontiguous::Compiler::set_anchored_start_state + + 6,454,312 ( 1.86%) 4,280 ( 0.53%) . . < /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/core/src/ptr/mod.rs:core::ptr::drop_in_place (5,577x) [./target/valgrind/s4] + 145,849 ( 0.04%) . . . * /home/.cargo/registry/src/index.crates.io-6f17d22bba15001f/regex-syntax-0.8.2/src/ast/mod.rs:::drop [./target/valgrind/s4] + 84,870 ( 0.02%) . . . > ./string/../sysdeps/x86_64/multiarch/memmove-vec-unaligned-erms.S:__memcpy_avx_unaligned_erms (2,829x) [/usr/lib/x86_64-linux-gnu/libc.so.6] + + 144,833 ( 0.04%) . . . * /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/core/src/slice/index.rs:aho_corasick::nfa::noncontiguous::Compiler::densify + + 143,700 ( 0.04%) . . . * /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/core/src/option.rs:aho_corasick::dfa::Builder::build_from_noncontiguous + + 142,512 ( 0.04%) . . . * /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/core/src/ptr/const_ptr.rs:::drop + + 142,047 ( 0.04%) . . . * /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/core/src/option.rs:regex_syntax::hir::Hir::concat + + 564,049 ( 0.16%) 385 ( 0.05%) . . < /home/.cargo/registry/src/index.crates.io-6f17d22bba15001f/aho-corasick-1.1.2/src/nfa/noncontiguous.rs:aho_corasick::nfa::noncontiguous::Builder::build (48x) [./target/valgrind/s4] + 140,696 ( 0.04%) . . . * /home/.cargo/registry/src/index.crates.io-6f17d22bba15001f/aho-corasick-1.1.2/src/nfa/noncontiguous.rs:aho_corasick::nfa::noncontiguous::Compiler::fill_failure_transitions [./target/valgrind/s4] + 29,612 ( 0.01%) . . . > /home/.cargo/registry/src/index.crates.io-6f17d22bba15001f/aho-corasick-1.1.2/src/nfa/noncontiguous.rs:aho_corasick::nfa::noncontiguous::NFA::copy_matches (673x) [./target/valgrind/s4] + 7,398 ( 0.00%) 78 ( 0.01%) . . > ???:__rust_dealloc (48x) [./target/valgrind/s4] + + 138,679 ( 0.04%) . . . * /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/core/src/slice/index.rs:aho_corasick::dfa::Builder::finish_build_one_start + + 137,771 ( 0.04%) . . . * /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/alloc/src/raw_vec.rs:::drop + 2,000,868 ( 0.58%) 1,368 ( 0.17%) . . > /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/alloc/src/raw_vec.rs:alloc::raw_vec::RawVec::reserve::do_reserve_and_handle (270x) [./target/valgrind/s4] + + 5,540,132 ( 1.60%) 33,313 ( 4.11%) . . < /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/core/src/ptr/mod.rs:core::ptr::drop_in_place (674x) [./target/valgrind/s4] + 90,936 ( 0.03%) . . . < /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/core/src/ptr/mod.rs:regex_syntax::ast::parse::ParserI

::pop_class (5,052x) + 50,832 ( 0.01%) . . . < /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/core/src/ptr/mod.rs:core::ptr::drop_in_place (2,824x) [./target/valgrind/s4] + 17,091 ( 0.00%) 74 ( 0.01%) . . < /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/core/src/ptr/mod.rs:alloc::sync::Arc::drop_slow'2 (3x) + 14,116 ( 0.00%) 96 ( 0.01%) . . < /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/core/src/ptr/mod.rs:regex_automata::meta::strategy::new (12x) + 7,693 ( 0.00%) . . . < /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/core/src/ptr/mod.rs:core::ptr::drop_in_place (2x) [./target/valgrind/s4] + 3,220 ( 0.00%) . . . < /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/core/src/ptr/mod.rs:regex_syntax::hir::literal::Extractor::extract'2 (322x) + 2,592 ( 0.00%) . . . < /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/core/src/ptr/mod.rs:regex_automata::meta::regex::Builder::build (162x) + 1,913 ( 0.00%) 6 ( 0.00%) . . < /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/core/src/ptr/mod.rs:core::ptr::drop_in_place (1x) [./target/valgrind/s4] + 560 ( 0.00%) . . . < /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/core/src/ptr/mod.rs:regex_syntax::hir::literal::Extractor::extract (56x) + 168 ( 0.00%) . . . < /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/core/src/ptr/mod.rs:std::panicking::try (1x) + 19 ( 0.00%) . . . < /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/core/src/ptr/mod.rs:clap_builder::builder::command::Command::_do_parse (1x) + 19 ( 0.00%) . . . < /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/core/src/ptr/mod.rs:clap_builder::builder::command::Command::_build_self (1x) + 18 ( 0.00%) . . . < src/bin/s4.rs:s4::processing_loop (1x) [./target/valgrind/s4] + 137,133 ( 0.04%) . . . * /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/alloc/src/vec/mod.rs: as core::ops::drop::Drop>::drop [./target/valgrind/s4] + + 135,799 ( 0.04%) . . . * /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/alloc/src/raw_vec.rs:regex_automata::nfa::thompson::builder::Builder::build + 414,608 ( 0.12%) 940 ( 0.12%) . . > /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/alloc/src/raw_vec.rs:alloc::raw_vec::RawVec::reserve::do_reserve_and_handle (175x) [./target/valgrind/s4] + + 516,792 ( 0.15%) . . . < /home/.cargo/registry/src/index.crates.io-6f17d22bba15001f/regex-syntax-0.8.2/src/ast/parse.rs:regex_syntax::ast::parse::ParserI

::pop_class (2,824x) [./target/valgrind/s4] + 135,552 ( 0.04%) . . . * /home/.cargo/registry/src/index.crates.io-6f17d22bba15001f/regex-syntax-0.8.2/src/ast/parse.rs:regex_syntax::ast::parse::ParserI

::pop_class_op [./target/valgrind/s4] + 169,440 ( 0.05%) . . . > ./string/../sysdeps/x86_64/multiarch/memmove-vec-unaligned-erms.S:__memcpy_avx_unaligned_erms (5,648x) [/usr/lib/x86_64-linux-gnu/libc.so.6] + + 2,464,002 ( 0.71%) 1,082 ( 0.13%) . . < /home/.cargo/registry/src/index.crates.io-6f17d22bba15001f/regex-syntax-0.8.2/src/hir/literal.rs:regex_syntax::hir::literal::Extractor::extract'2 (1,583x) [./target/valgrind/s4] + 1,035,803 ( 0.30%) 254 ( 0.03%) . . < /home/.cargo/registry/src/index.crates.io-6f17d22bba15001f/regex-syntax-0.8.2/src/hir/literal.rs:regex_syntax::hir::literal::Extractor::extract (864x) [./target/valgrind/s4] + 132,946 ( 0.04%) . . . * /home/.cargo/registry/src/index.crates.io-6f17d22bba15001f/regex-syntax-0.8.2/src/hir/literal.rs:regex_syntax::hir::literal::Extractor::union [./target/valgrind/s4] + + 8,911,190 ( 2.57%) 20,413 ( 2.52%) . . < /home/.cargo/registry/src/index.crates.io-6f17d22bba15001f/regex-syntax-0.8.2/src/hir/literal.rs:regex_syntax::hir::literal::PreferenceTrie::minimize (177x) [./target/valgrind/s4] + 132,420 ( 0.04%) . . . * /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/alloc/src/vec/mod.rs:alloc::vec::Vec::retain_mut [./target/valgrind/s4] + + 131,202 ( 0.04%) . . . * /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/core/src/option.rs:regex_automata::nfa::thompson::compiler::Compiler::c_alt_iter + + 131,177 ( 0.04%) . . . * /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/core/src/alloc/layout.rs:alloc::raw_vec::RawVec::reserve::do_reserve_and_handle + +166,077,448 (47.98%) 350,340 (43.27%) 104 (33.55%) . < /home/.cargo/registry/src/index.crates.io-6f17d22bba15001f/regex-automata-0.4.6/src/meta/regex.rs:regex_automata::meta::regex::Builder::build (81x) [./target/valgrind/s4] + 129,892 ( 0.04%) 15 ( 0.00%) . . * /home/.cargo/registry/src/index.crates.io-6f17d22bba15001f/regex-automata-0.4.6/src/meta/strategy.rs:regex_automata::meta::strategy::new [./target/valgrind/s4] +101,781,410 (29.40%) 222,193 (27.44%) 99 (31.94%) . > /home/.cargo/registry/src/index.crates.io-6f17d22bba15001f/regex-automata-0.4.6/src/nfa/thompson/compiler.rs:regex_automata::nfa::thompson::compiler::Compiler::build_many_from_hir (162x) [./target/valgrind/s4] +33,494,575 ( 9.68%) 58,000 ( 7.16%) 2 ( 0.65%) . > /home/.cargo/registry/src/index.crates.io-6f17d22bba15001f/regex-automata-0.4.6/src/meta/reverse_inner.rs:regex_automata::meta::reverse_inner::extract (13x) [./target/valgrind/s4] +11,499,724 ( 3.32%) 37,942 ( 4.69%) 1 ( 0.32%) . > /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/core/src/ptr/mod.rs:core::ptr::drop_in_place (175x) [./target/valgrind/s4] + 7,580,638 ( 2.19%) 16,769 ( 2.07%) . . > /home/.cargo/registry/src/index.crates.io-6f17d22bba15001f/regex-automata-0.4.6/src/util/prefilter/mod.rs:regex_automata::util::prefilter::prefixes (16x) [./target/valgrind/s4] + 2,500,469 ( 0.72%) 2,480 ( 0.31%) 2 ( 0.65%) . > /home/.cargo/registry/src/index.crates.io-6f17d22bba15001f/regex-automata-0.4.6/src/meta/wrappers.rs:regex_automata::meta::wrappers::OnePass::new (81x) [./target/valgrind/s4] + 2,457,849 ( 0.71%) 5,107 ( 0.63%) . . > /home/.cargo/registry/src/index.crates.io-6f17d22bba15001f/regex-automata-0.4.6/src/util/prefilter/mod.rs:regex_automata::util::prefilter::suffixes (13x) [./target/valgrind/s4] + 1,130,520 ( 0.33%) 606 ( 0.07%) . . > /home/.cargo/registry/src/index.crates.io-6f17d22bba15001f/regex-automata-0.4.6/src/meta/wrappers.rs:regex_automata::meta::wrappers::Hybrid::new (81x) [./target/valgrind/s4] + 233,455 ( 0.07%) 1,126 ( 0.14%) . . > /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/core/src/ptr/mod.rs:core::ptr::drop_in_place (13x) [./target/valgrind/s4] + 83,760 ( 0.02%) 39 ( 0.00%) . . > /home/.cargo/registry/src/index.crates.io-6f17d22bba15001f/regex-automata-0.4.6/src/meta/wrappers.rs:regex_automata::meta::wrappers::ReverseHybrid::new (13x) [./target/valgrind/s4] + 47,980 ( 0.01%) 4 ( 0.00%) . . > /home/.cargo/registry/src/index.crates.io-6f17d22bba15001f/regex-automata-0.4.6/src/nfa/thompson/compiler.rs:regex_automata::nfa::thompson::compiler::Compiler::new (175x) [./target/valgrind/s4] + 44,317 ( 0.01%) 111 ( 0.01%) . . > /home/.cargo/registry/src/index.crates.io-6f17d22bba15001f/regex-automata-0.4.6/src/meta/wrappers.rs:regex_automata::meta::wrappers::BoundedBacktracker::new (81x) [./target/valgrind/s4] + 43,963 ( 0.01%) 111 ( 0.01%) . . > /home/.cargo/registry/src/index.crates.io-6f17d22bba15001f/regex-automata-0.4.6/src/meta/wrappers.rs:regex_automata::meta::wrappers::PikeVM::new (81x) [./target/valgrind/s4] + 2,470 ( 0.00%) . . . > ./string/../sysdeps/x86_64/multiarch/memmove-vec-unaligned-erms.S:__memcpy_avx_unaligned_erms (26x) [/usr/lib/x86_64-linux-gnu/libc.so.6] + 458 ( 0.00%) . . . > /home/.cargo/registry/src/index.crates.io-6f17d22bba15001f/regex-automata-0.4.6/src/meta/literal.rs:regex_automata::meta::literal::alternation_literals (16x) [./target/valgrind/s4] + 351 ( 0.00%) . . . > /home/.cargo/registry/src/index.crates.io-6f17d22bba15001f/regex-automata-0.4.6/src/nfa/thompson/compiler.rs:regex_automata::nfa::thompson::compiler::Compiler::configure (13x) [./target/valgrind/s4] + + 129,546 ( 0.04%) . . . * /home/.cargo/registry/src/index.crates.io-6f17d22bba15001f/regex-syntax-0.8.2/src/hir/mod.rs:::visit_post + 885,640 ( 0.26%) . . . > /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/core/src/str/converts.rs:core::str::converts::from_utf8 (16,096x) [./target/valgrind/s4] + 597,388 ( 0.17%) 3,424 ( 0.42%) . . > /home/.cargo/registry/src/index.crates.io-6f17d22bba15001f/regex-syntax-0.8.2/src/hir/mod.rs:regex_syntax::hir::Properties::repetition (1,885x) [./target/valgrind/s4] + 209,050 ( 0.06%) 1,131 ( 0.14%) . . > /home/.cargo/registry/src/index.crates.io-6f17d22bba15001f/regex-syntax-0.8.2/src/hir/mod.rs:regex_syntax::hir::Properties::capture (693x) [./target/valgrind/s4] + 3,555 ( 0.00%) 10 ( 0.00%) . . > /home/.cargo/registry/src/index.crates.io-6f17d22bba15001f/regex-syntax-0.8.2/src/hir/interval.rs:regex_syntax::hir::interval::IntervalSet::negate (6x) [./target/valgrind/s4] + 2,402 ( 0.00%) 10 ( 0.00%) . . > /home/.cargo/registry/src/index.crates.io-6f17d22bba15001f/regex-syntax-0.8.2/src/hir/mod.rs:regex_syntax::hir::Hir::class (5x) [./target/valgrind/s4] + 820 ( 0.00%) . . . > /home/.cargo/registry/src/index.crates.io-6f17d22bba15001f/regex-syntax-0.8.2/src/hir/mod.rs:regex_syntax::hir::ClassUnicode::new (5x) [./target/valgrind/s4] + + 129,543 ( 0.04%) . . . * /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/alloc/src/vec/mod.rs:regex_syntax::hir::literal::Extractor::cross + +22,564,526 ( 6.52%) 16,357 ( 2.02%) 25 ( 8.06%) . < /home/.cargo/registry/src/index.crates.io-6f17d22bba15001f/regex-automata-0.4.6/src/nfa/thompson/compiler.rs:regex_automata::nfa::thompson::compiler::Compiler::c'2 (538x) [./target/valgrind/s4] + 44,665 ( 0.01%) 36 ( 0.00%) . . < /home/.cargo/registry/src/index.crates.io-6f17d22bba15001f/regex-automata-0.4.6/src/nfa/thompson/compiler.rs:regex_automata::nfa::thompson::compiler::Compiler::c (1x) [./target/valgrind/s4] + 129,293 ( 0.04%) . . . * /home/.cargo/registry/src/index.crates.io-6f17d22bba15001f/regex-automata-0.4.6/src/nfa/thompson/compiler.rs:regex_automata::nfa::thompson::compiler::Compiler::c_alt_iter [./target/valgrind/s4] +21,009,369 ( 6.07%) 14,398 ( 1.78%) 25 ( 8.06%) . > /home/.cargo/registry/src/index.crates.io-6f17d22bba15001f/regex-automata-0.4.6/src/nfa/thompson/compiler.rs:regex_automata::nfa::thompson::compiler::Compiler::c'2 (6,614x) [./target/valgrind/s4] + 1,158,758 ( 0.33%) 1,837 ( 0.23%) . . > /home/.cargo/registry/src/index.crates.io-6f17d22bba15001f/regex-automata-0.4.6/src/nfa/thompson/compiler.rs:regex_automata::nfa::thompson::compiler::Compiler::patch (13,228x) [./target/valgrind/s4] + + 812,915 ( 0.23%) 1,154 ( 0.14%) . . < /home/.cargo/registry/src/index.crates.io-6f17d22bba15001f/regex-syntax-0.8.2/src/ast/parse.rs:regex_syntax::ast::parse::ParserI

::parse_with_comments (1,713x) [./target/valgrind/s4] + 129,003 ( 0.04%) . . . * /home/.cargo/registry/src/index.crates.io-6f17d22bba15001f/regex-syntax-0.8.2/src/ast/parse.rs:regex_syntax::ast::parse::ParserI

::parse_uncounted_repetition [./target/valgrind/s4] + 152,445 ( 0.04%) . . . > /home/.cargo/registry/src/index.crates.io-6f17d22bba15001f/regex-syntax-0.8.2/src/ast/parse.rs:regex_syntax::ast::parse::ParserI

::bump (1,713x) [./target/valgrind/s4] + 71,160 ( 0.02%) . . . > /home/.cargo/registry/src/index.crates.io-6f17d22bba15001f/regex-syntax-0.8.2/src/ast/parse.rs:regex_syntax::ast::parse::ParserI

::char (3,558x) [./target/valgrind/s4] + + 128,797 ( 0.04%) . . . * /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/core/src/convert/num.rs:regex_automata::nfa::thompson::nfa::Inner::add + + 128,658 ( 0.04%) . . . * /home/.cargo/registry/src/index.crates.io-6f17d22bba15001f/regex-automata-0.4.6/src/util/primitives.rs:regex_automata::nfa::thompson::nfa::Inner::add + + 126,339 ( 0.04%) . . . * /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/core/src/num/uint_macros.rs:regex_syntax::hir::Hir::concat + + 124,519 ( 0.04%) . . . * /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/core/src/option.rs:regex_automata::nfa::thompson::literal_trie::LiteralTrie::add + + 377,056 ( 0.11%) 2,884 ( 0.36%) . . < /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/std/src/sys/unix/alloc.rs:__rdl_alloc_zeroed (1,316x) + 2,130 ( 0.00%) 10 ( 0.00%) . . < ???:0x0000000004898400 (9x) [???] + 453 ( 0.00%) 2 ( 0.00%) . . < ./elf/../include/rtld-malloc.h:_dl_allocate_tls (2x) + 123,928 ( 0.04%) 2,620 ( 0.32%) . . * ./malloc/./malloc/malloc.c:calloc [/usr/lib/x86_64-linux-gnu/libc.so.6] + 216,507 ( 0.06%) 276 ( 0.03%) . . > ./malloc/./malloc/malloc.c:_int_malloc (1,327x) [/usr/lib/x86_64-linux-gnu/libc.so.6] + 14,295 ( 0.00%) . . . > ???:0x0000000004898670 (224x) [???] + + 1,000,419 ( 0.29%) . . . < /home/.cargo/registry/src/index.crates.io-6f17d22bba15001f/regex-syntax-0.8.2/src/ast/parse.rs:regex_syntax::ast::parse::ParserI

::parse_set_class_range (3,549x) [./target/valgrind/s4] + 122,304 ( 0.04%) . . . * /home/.cargo/registry/src/index.crates.io-6f17d22bba15001f/regex-syntax-0.8.2/src/ast/parse.rs:regex_syntax::ast::parse::ParserI

::parse_set_class_item [./target/valgrind/s4] + 481,513 ( 0.14%) . . . > /home/.cargo/registry/src/index.crates.io-6f17d22bba15001f/regex-syntax-0.8.2/src/ast/parse.rs:regex_syntax::ast::parse::ParserI

::parse_escape (1,612x) [./target/valgrind/s4] + 189,600 ( 0.05%) . . . > /home/.cargo/registry/src/index.crates.io-6f17d22bba15001f/regex-syntax-0.8.2/src/ast/parse.rs:regex_syntax::ast::parse::ParserI

::char (9,360x) [./target/valgrind/s4] + 173,833 ( 0.05%) . . . > /home/.cargo/registry/src/index.crates.io-6f17d22bba15001f/regex-syntax-0.8.2/src/ast/parse.rs:regex_syntax::ast::parse::ParserI

::bump (1,937x) [./target/valgrind/s4] + + 1,737,105 ( 0.50%) 2 ( 0.00%) . . < /home/.cargo/registry/src/index.crates.io-6f17d22bba15001f/aho-corasick-1.1.2/src/nfa/noncontiguous.rs:aho_corasick::nfa::noncontiguous::Compiler::shuffle (48x) [./target/valgrind/s4] + 120,808 ( 0.03%) . . . * /home/.cargo/registry/src/index.crates.io-6f17d22bba15001f/aho-corasick-1.1.2/src/util/remapper.rs:aho_corasick::util::remapper::Remapper::remap [./target/valgrind/s4] + 1,488,569 ( 0.43%) . . . > /home/.cargo/registry/src/index.crates.io-6f17d22bba15001f/aho-corasick-1.1.2/src/util/remapper.rs:::remap (48x) [./target/valgrind/s4] + + 120,297 ( 0.03%) . . . * /home/.cargo/registry/src/index.crates.io-6f17d22bba15001f/regex-automata-0.4.6/src/nfa/thompson/builder.rs:regex_automata::nfa::thompson::literal_trie::LiteralTrie::compile + 1,378,264 ( 0.40%) 526 ( 0.06%) 10 ( 3.23%) . > /home/.cargo/registry/src/index.crates.io-6f17d22bba15001f/regex-automata-0.4.6/src/nfa/thompson/builder.rs:regex_automata::nfa::thompson::builder::Builder::add (16,950x) [./target/valgrind/s4] + + 119,071 ( 0.03%) . . . * /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/alloc/src/raw_vec.rs:regex_syntax::hir::literal::Extractor::cross + + 1,158,758 ( 0.33%) 1,837 ( 0.23%) . . < /home/.cargo/registry/src/index.crates.io-6f17d22bba15001f/regex-automata-0.4.6/src/nfa/thompson/compiler.rs:regex_automata::nfa::thompson::compiler::Compiler::c_alt_iter (13,228x) [./target/valgrind/s4] + 119,052 ( 0.03%) . . . * /home/.cargo/registry/src/index.crates.io-6f17d22bba15001f/regex-automata-0.4.6/src/nfa/thompson/compiler.rs:regex_automata::nfa::thompson::compiler::Compiler::patch [./target/valgrind/s4] + 947,110 ( 0.27%) 1,837 ( 0.23%) . . > /home/.cargo/registry/src/index.crates.io-6f17d22bba15001f/regex-automata-0.4.6/src/nfa/thompson/builder.rs:regex_automata::nfa::thompson::builder::Builder::patch (13,228x) [./target/valgrind/s4] + + 1,874,581 ( 0.54%) 8,392 ( 1.04%) . . < /home/.cargo/registry/src/index.crates.io-6f17d22bba15001f/regex-syntax-0.8.2/src/hir/literal.rs:regex_syntax::hir::literal::Extractor::extract (111x) [./target/valgrind/s4] + 1,430,857 ( 0.41%) 4,544 ( 0.56%) . . < /home/.cargo/registry/src/index.crates.io-6f17d22bba15001f/regex-syntax-0.8.2/src/hir/literal.rs:regex_syntax::hir::literal::Extractor::extract'2 (371x) [./target/valgrind/s4] + 118,893 ( 0.03%) . . . * /home/.cargo/registry/src/index.crates.io-6f17d22bba15001f/regex-syntax-0.8.2/src/hir/literal.rs:regex_syntax::hir::literal::Extractor::cross [./target/valgrind/s4] + 53,226 ( 0.02%) . . . > /home/.cargo/registry/src/index.crates.io-6f17d22bba15001f/regex-syntax-0.8.2/src/hir/literal.rs:regex_syntax::hir::literal::Seq::cross_preamble (482x) [./target/valgrind/s4] + + 118,817 ( 0.03%) . . . * /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/core/src/num/uint_macros.rs:core::hash::BuildHasher::hash_one + + 922,916 ( 0.27%) 2,262 ( 0.28%) 1 ( 0.32%) . < /home/.cargo/registry/src/index.crates.io-6f17d22bba15001f/regex-syntax-0.8.2/src/ast/parse.rs:regex_syntax::ast::parse::ParserI

::parse_with_comments (693x) [./target/valgrind/s4] + 118,617 ( 0.03%) . . . * /home/.cargo/registry/src/index.crates.io-6f17d22bba15001f/regex-syntax-0.8.2/src/ast/parse.rs:regex_syntax::ast::parse::ParserI

::pop_group [./target/valgrind/s4] + 157,035 ( 0.05%) 835 ( 0.10%) . . > /home/.cargo/registry/src/index.crates.io-6f17d22bba15001f/regex-syntax-0.8.2/src/ast/mod.rs:regex_syntax::ast::Concat::into_ast (693x) [./target/valgrind/s4] + 106,628 ( 0.03%) 584 ( 0.07%) . . > /home/.cargo/registry/src/index.crates.io-6f17d22bba15001f/regex-syntax-0.8.2/src/ast/mod.rs:regex_syntax::ast::Alternation::into_ast (512x) [./target/valgrind/s4] + 98,475 ( 0.03%) 29 ( 0.00%) . . > /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/core/src/ptr/mod.rs:core::ptr::drop_in_place (693x) [./target/valgrind/s4] + 70,354 ( 0.02%) 64 ( 0.01%) . . > ???:__rust_dealloc (693x) [./target/valgrind/s4] + 61,445 ( 0.02%) . . . > /home/.cargo/registry/src/index.crates.io-6f17d22bba15001f/regex-syntax-0.8.2/src/ast/parse.rs:regex_syntax::ast::parse::ParserI

::bump (693x) [./target/valgrind/s4] + 55,943 ( 0.02%) 138 ( 0.02%) . . > ???:__rust_alloc (693x) [./target/valgrind/s4] + 13,860 ( 0.00%) . . . > /home/.cargo/registry/src/index.crates.io-6f17d22bba15001f/regex-syntax-0.8.2/src/ast/parse.rs:regex_syntax::ast::parse::ParserI

::char (693x) [./target/valgrind/s4] + + 118,145 ( 0.03%) . . . * /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/core/src/slice/index.rs:aho_corasick::nfa::noncontiguous::Compiler::fill_failure_transitions + + 117,889 ( 0.03%) . . . * /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/alloc/src/alloc.rs:regex_automata::nfa::thompson::compiler::Compiler::c'2 + 6,041,312 ( 1.75%) 40,231 ( 4.97%) . . > ???:__rust_dealloc (44,977x) [./target/valgrind/s4] + + 116,685 ( 0.03%) . . . * /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/core/src/convert/num.rs:aho_corasick::dfa::Builder::build_from_noncontiguous + + 116,004 ( 0.03%) . . . * /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/core/src/cmp.rs:aho_corasick::dfa::Builder::build_from_noncontiguous + + 115,784 ( 0.03%) . . . * /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/core/src/ptr/mod.rs:regex_syntax::ast::parse::ParserI

::push_class_open + + 114,654 ( 0.03%) . . . * /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/core/src/ptr/mod.rs:regex_syntax::hir::literal::PreferenceTrie::insert + + 183,375 ( 0.05%) . . . < /home/.cargo/registry/src/index.crates.io-6f17d22bba15001f/aho-corasick-1.1.2/src/dfa.rs:aho_corasick::dfa::Builder::build_from_noncontiguous (6,273x) [./target/valgrind/s4] + 114,030 ( 0.03%) . . . * /home/.cargo/registry/src/index.crates.io-6f17d22bba15001f/aho-corasick-1.1.2/src/dfa.rs:aho_corasick::dfa::Builder::finish_build_both_starts::{{closure}} [./target/valgrind/s4] + + 1,320,528 ( 0.38%) 7,829 ( 0.97%) . . < /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/alloc/src/raw_vec.rs:regex_automata::nfa::thompson::compiler::Compiler::c'2 (5,376x) + 2,378 ( 0.00%) 6 ( 0.00%) . . < /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/alloc/src/raw_vec.rs:regex_automata::meta::reverse_inner::extract (13x) + 164 ( 0.00%) . . . < /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/alloc/src/raw_vec.rs:regex_automata::nfa::thompson::compiler::Compiler::c (2x) + 113,250 ( 0.03%) . . . * /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/alloc/src/raw_vec.rs:alloc::raw_vec::RawVec::allocate_in [./target/valgrind/s4] + + 112,816 ( 0.03%) . . . * /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/core/src/intrinsics.rs:::visit_post + 773,760 ( 0.22%) . . . > ./string/../sysdeps/x86_64/multiarch/memmove-vec-unaligned-erms.S:__memcpy_avx_unaligned_erms (48,360x) [/usr/lib/x86_64-linux-gnu/libc.so.6] + + 112,453 ( 0.03%) . . . * /home/.cargo/registry/src/index.crates.io-6f17d22bba15001f/regex-automata-0.4.6/src/util/alphabet.rs:regex_automata::hybrid::dfa::Lazy::set_transition + + 125,120 ( 0.04%) . . . < /home/.cargo/registry/src/index.crates.io-6f17d22bba15001f/aho-corasick-1.1.2/src/nfa/noncontiguous.rs:aho_corasick::nfa::noncontiguous::Builder::build (3,680x) [./target/valgrind/s4] + 110,400 ( 0.03%) . . . * /home/.cargo/registry/src/index.crates.io-6f17d22bba15001f/aho-corasick-1.1.2/src/util/alphabet.rs:aho_corasick::util::alphabet::ByteClassSet::set_range [./target/valgrind/s4] + + 111,580 ( 0.03%) . . . < /home/.cargo/registry/src/index.crates.io-6f17d22bba15001f/regex-syntax-0.8.2/src/ast/visitor.rs:regex_syntax::ast::visitor::visit (4,916x) [./target/valgrind/s4] + 110,388 ( 0.03%) . . . * /home/.cargo/registry/src/index.crates.io-6f17d22bba15001f/regex-syntax-0.8.2/src/ast/parse.rs: as regex_syntax::ast::visitor::Visitor>::visit_class_set_item_pre [./target/valgrind/s4] + + 110,136 ( 0.03%) . . . * /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/core/src/result.rs:regex_syntax::ast::parse::ParserI

::push_class_open + + 158,544 ( 0.05%) . . . < /home/.cargo/registry/src/index.crates.io-6f17d22bba15001f/aho-corasick-1.1.2/src/nfa/noncontiguous.rs:aho_corasick::nfa::noncontiguous::Builder::build (48x) [./target/valgrind/s4] + 109,152 ( 0.03%) . . . * /home/.cargo/registry/src/index.crates.io-6f17d22bba15001f/aho-corasick-1.1.2/src/nfa/noncontiguous.rs:aho_corasick::nfa::noncontiguous::Compiler::add_unanchored_start_state_loop [./target/valgrind/s4] + + 107,231 ( 0.03%) . . . * /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/core/src/ptr/mod.rs:regex_syntax::ast::parse::ParserI

::parse_with_comments + + 104,950 ( 0.03%) . . . * /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/core/src/ptr/mut_ptr.rs:regex_syntax::hir::Hir::concat + + 104,424 ( 0.03%) . . . * /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/alloc/src/raw_vec.rs:regex_syntax::hir::literal::Extractor::union + + 104,344 ( 0.03%) . . . * /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/core/src/ptr/mod.rs:::visit_pre + + 103,094 ( 0.03%) . . . * /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/core/src/result.rs:alloc::raw_vec::RawVec::reserve::do_reserve_and_handle + + 102,336 ( 0.03%) . . . * /home/.cargo/registry/src/index.crates.io-6f17d22bba15001f/regex-syntax-0.8.2/src/ast/parse.rs:regex_syntax::ast::visitor::visit + + 101,450 ( 0.03%) . . . * /home/.cargo/registry/src/index.crates.io-6f17d22bba15001f/regex-syntax-0.8.2/src/unicode.rs:::case_fold_simple + + 481,513 ( 0.14%) . . . < /home/.cargo/registry/src/index.crates.io-6f17d22bba15001f/regex-syntax-0.8.2/src/ast/parse.rs:regex_syntax::ast::parse::ParserI

::parse_set_class_item (1,612x) [./target/valgrind/s4] + 100,338 ( 0.03%) . . . * /home/.cargo/registry/src/index.crates.io-6f17d22bba15001f/regex-syntax-0.8.2/src/ast/parse.rs:regex_syntax::ast::parse::ParserI

::parse_escape [./target/valgrind/s4] + 286,651 ( 0.08%) . . . > /home/.cargo/registry/src/index.crates.io-6f17d22bba15001f/regex-syntax-0.8.2/src/ast/parse.rs:regex_syntax::ast::parse::ParserI

::bump (3,219x) [./target/valgrind/s4] + 64,480 ( 0.02%) . . . > /home/.cargo/registry/src/index.crates.io-6f17d22bba15001f/regex-syntax-0.8.2/src/ast/parse.rs:regex_syntax::ast::parse::ParserI

::char (3,224x) [./target/valgrind/s4] + 16,069 ( 0.00%) . . . > /home/.cargo/registry/src/index.crates.io-6f17d22bba15001f/regex-syntax-0.8.2/src/lib.rs:regex_syntax::is_meta_character (1,607x) [./target/valgrind/s4] + 1,085 ( 0.00%) . . . > /home/.cargo/registry/src/index.crates.io-6f17d22bba15001f/regex-syntax-0.8.2/src/ast/parse.rs:regex_syntax::ast::parse::ParserI

::parse_perl_class (5x) [./target/valgrind/s4] + + 99,397 ( 0.03%) . . . * /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/alloc/src/vec/mod.rs:regex_syntax::ast::parse::ParserI

::push_alternate + 849,672 ( 0.25%) 4,361 ( 0.54%) . . > /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/alloc/src/raw_vec.rs:alloc::raw_vec::RawVec::reserve_for_push (1,445x) [./target/valgrind/s4] + + 99,219 ( 0.03%) . . . * /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/core/src/num/uint_macros.rs:regex_syntax::ast::parse::ParserI

::parse_with_comments + + 99,214 ( 0.03%) . . . * /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/core/src/char/methods.rs:regex_syntax::ast::parse::ParserI

::parse_with_comments + + 99,102 ( 0.03%) . . . * /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/core/src/hash/sip.rs:core::hash::BuildHasher::hash_one + 203,008 ( 0.06%) . . . > /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/core/src/hash/sip.rs: as core::hash::Hasher>::write (4,055x) [./target/valgrind/s4] + + 98,274 ( 0.03%) . . . * ./elf/./elf/do-rel.h:_dl_relocate_object + + 93,597 ( 0.03%) . . . * /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/core/src/convert/num.rs:aho_corasick::dfa::Builder::finish_build_one_start::{{closure}} + + 92,423 ( 0.03%) . . . * /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/core/src/num/uint_macros.rs:regex_syntax::ast::parse::ParserI

::bump + + 92,423 ( 0.03%) . . . * /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/core/src/option.rs:regex_syntax::ast::parse::ParserI

::bump + + 92,423 ( 0.03%) . . . * /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/core/src/str/traits.rs:regex_syntax::ast::parse::ParserI

::bump + + 92,342 ( 0.03%) . . . * /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/core/src/num/mod.rs:regex_syntax::ast::parse::ParserI

::bump + + 89,458 ( 0.03%) . . . * /home/.cargo/registry/src/index.crates.io-6f17d22bba15001f/regex-automata-0.4.6/src/nfa/thompson/map.rs:regex_automata::nfa::thompson::compiler::Compiler::c'2 + + 89,367 ( 0.03%) . . . * /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/core/src/cell.rs:regex_syntax::ast::parse::ParserI

::bump_space + + 89,260 ( 0.03%) . . . * /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/core/src/ptr/const_ptr.rs:regex_automata::nfa::thompson::literal_trie::LiteralTrie::compile + + 89,172 ( 0.03%) . . . * /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/alloc/src/raw_vec.rs:regex_automata::nfa::thompson::builder::Builder::add + + 89,172 ( 0.03%) . . . * /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/core/src/num/uint_macros.rs:regex_automata::nfa::thompson::builder::Builder::add + + 89,172 ( 0.03%) . . . * /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/core/src/ptr/mut_ptr.rs:regex_automata::nfa::thompson::builder::Builder::add + + 89,094 ( 0.03%) . . . * /home/.cargo/registry/src/index.crates.io-6f17d22bba15001f/aho-corasick-1.1.2/src/util/search.rs:aho_corasick::dfa::Builder::finish_build_one_start::{{closure}} + + 85,074 ( 0.02%) . . . < /home/.cargo/registry/src/index.crates.io-6f17d22bba15001f/regex-syntax-0.8.2/src/hir/translate.rs:::visit_post (2,578x) [./target/valgrind/s4] + 2,673 ( 0.00%) . . . < /home/.cargo/registry/src/index.crates.io-6f17d22bba15001f/regex-syntax-0.8.2/src/hir/translate.rs:::finish (81x) [./target/valgrind/s4] + 87,747 ( 0.03%) . . . * /home/.cargo/registry/src/index.crates.io-6f17d22bba15001f/regex-syntax-0.8.2/src/hir/translate.rs:regex_syntax::hir::translate::HirFrame::unwrap_expr [./target/valgrind/s4] + + 938,404 ( 0.27%) . . . < /home/.cargo/registry/src/index.crates.io-6f17d22bba15001f/regex-syntax-0.8.2/src/ast/parse.rs:regex_syntax::ast::parse::ParserI

::parse_set_class (841x) [./target/valgrind/s4] + 86,769 ( 0.03%) . . . * /home/.cargo/registry/src/index.crates.io-6f17d22bba15001f/regex-syntax-0.8.2/src/ast/parse.rs:regex_syntax::ast::parse::ParserI

::maybe_parse_ascii_class [./target/valgrind/s4] + 627,895 ( 0.18%) . . . > /home/.cargo/registry/src/index.crates.io-6f17d22bba15001f/regex-syntax-0.8.2/src/ast/parse.rs:regex_syntax::ast::parse::ParserI

::bump (7,055x) [./target/valgrind/s4] + 141,420 ( 0.04%) . . . > /home/.cargo/registry/src/index.crates.io-6f17d22bba15001f/regex-syntax-0.8.2/src/ast/parse.rs:regex_syntax::ast::parse::ParserI

::char (7,071x) [./target/valgrind/s4] + 31,216 ( 0.01%) . . . > /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/core/src/slice/cmp.rs:regex_syntax::ast::ClassAsciiKind::from_name (770x) [./target/valgrind/s4] + + 1,493,037 ( 0.43%) 1,869 ( 0.23%) 1 ( 0.32%) . < /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/alloc/src/vec/mod.rs:::drop (2,604x) + 530,506 ( 0.15%) 1,090 ( 0.13%) . . < /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/alloc/src/vec/mod.rs:regex_syntax::hir::literal::Extractor::union (2,443x) + 112,977 ( 0.03%) 144 ( 0.02%) . . < /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/alloc/src/vec/mod.rs:regex_automata::util::prefilter::prefixes (15x) + 5,220 ( 0.00%) 12 ( 0.00%) . . < /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/alloc/src/vec/mod.rs:regex_automata::util::prefilter::suffixes (12x) + 86,258 ( 0.02%) . . . * /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/alloc/src/vec/spec_extend.rs: as alloc::vec::spec_extend::SpecExtend>::spec_extend [./target/valgrind/s4] + + 85,480 ( 0.02%) . . . * /home/.cargo/registry/src/index.crates.io-6f17d22bba15001f/aho-corasick-1.1.2/src/util/primitives.rs:::remap + + 84,720 ( 0.02%) . . . * /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/core/src/ptr/mod.rs:regex_syntax::ast::parse::ParserI

::pop_class_op + 84,720 ( 0.02%) . . . > ./string/../sysdeps/x86_64/multiarch/memmove-vec-unaligned-erms.S:__memcpy_avx_unaligned_erms (2,824x) [/usr/lib/x86_64-linux-gnu/libc.so.6] + + 83,802 ( 0.02%) . . . * /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/alloc/src/alloc.rs:::drop + 4,073,644 ( 1.18%) 27,194 ( 3.36%) . . > ???:__rust_dealloc (27,622x) [./target/valgrind/s4] + 15,639 ( 0.00%) 52 ( 0.01%) . . > ???:__rust_alloc (208x) [./target/valgrind/s4] + + 178,870 ( 0.05%) . . . < /home/.cargo/registry/src/index.crates.io-6f17d22bba15001f/regex-syntax-0.8.2/src/hir/translate.rs:::visit_post (1,120x) [./target/valgrind/s4] + 83,750 ( 0.02%) . . . * /home/.cargo/registry/src/index.crates.io-6f17d22bba15001f/regex-syntax-0.8.2/src/unicode.rs:regex_syntax::unicode::SimpleCaseFolder::overlaps [./target/valgrind/s4] + + 6,424,936 ( 1.86%) 4,280 ( 0.53%) . . < /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/core/src/ptr/mod.rs:core::ptr::drop_in_place'2 (2,753x) [./target/valgrind/s4] + 172,264 ( 0.05%) . . . < /home/.cargo/registry/src/index.crates.io-6f17d22bba15001f/regex-syntax-0.8.2/src/ast/parse.rs:regex_syntax::ast::parse::ParserI

::pop_class (2,824x) [./target/valgrind/s4] + 83,584 ( 0.02%) . . . * /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/core/src/ptr/mod.rs:core::ptr::drop_in_place [./target/valgrind/s4] + 6,454,312 ( 1.86%) 4,280 ( 0.53%) . . > /home/.cargo/registry/src/index.crates.io-6f17d22bba15001f/regex-syntax-0.8.2/src/ast/mod.rs:::drop (5,577x) [./target/valgrind/s4] + 50,832 ( 0.01%) . . . > /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/alloc/src/vec/mod.rs: as core::ops::drop::Drop>::drop (2,824x) [./target/valgrind/s4] + + 83,510 ( 0.02%) . . . * /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/core/src/slice/mod.rs:regex_syntax::unicode::SimpleCaseFolder::overlaps + + 82,990 ( 0.02%) . . . * /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/alloc/src/vec/mod.rs:regex_syntax::hir::Hir::alternation + 8,154 ( 0.00%) 30 ( 0.00%) . . > /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/alloc/src/raw_vec.rs:alloc::raw_vec::RawVec::reserve_for_push (22x) [./target/valgrind/s4] + + 81,681 ( 0.02%) . . . * /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/alloc/src/alloc.rs:regex_syntax::ast::Concat::into_ast + 3,237,694 ( 0.94%) 22,584 ( 2.79%) . . > ???:__rust_alloc (15,786x) [./target/valgrind/s4] + 92,109 ( 0.03%) 47 ( 0.01%) . . > ???:__rust_dealloc (917x) [./target/valgrind/s4] + + 81,164 ( 0.02%) . . . * /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/core/src/intrinsics.rs:regex_syntax::hir::literal::Extractor::cross + 223,949 ( 0.06%) . . . > ./string/../sysdeps/x86_64/multiarch/memmove-vec-unaligned-erms.S:__memcpy_avx_unaligned_erms (13,790x) [/usr/lib/x86_64-linux-gnu/libc.so.6] + + 78,752 ( 0.02%) . . . * /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/core/src/ptr/mut_ptr.rs:regex_syntax::hir::literal::PreferenceTrie::insert + + 843,071 ( 0.24%) 314 ( 0.04%) . . < /home/.cargo/registry/src/index.crates.io-6f17d22bba15001f/regex-syntax-0.8.2/src/ast/parse.rs:regex_syntax::ast::parse::ParserI

::parse_group (586x) [./target/valgrind/s4] + 78,457 ( 0.02%) . . . * /home/.cargo/registry/src/index.crates.io-6f17d22bba15001f/regex-syntax-0.8.2/src/ast/parse.rs:regex_syntax::ast::parse::ParserI

::parse_capture_name [./target/valgrind/s4] + 304,647 ( 0.09%) . . . > /home/.cargo/registry/src/index.crates.io-6f17d22bba15001f/regex-syntax-0.8.2/src/ast/parse.rs:regex_syntax::ast::parse::ParserI

::bump (3,423x) [./target/valgrind/s4] + 136,920 ( 0.04%) . . . > /home/.cargo/registry/src/index.crates.io-6f17d22bba15001f/regex-syntax-0.8.2/src/ast/parse.rs:regex_syntax::ast::parse::ParserI

::char (6,846x) [./target/valgrind/s4] + + 77,397 ( 0.02%) . . . * /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/alloc/src/vec/mod.rs:::visit_pre + 318,987 ( 0.09%) 1,256 ( 0.16%) 2 ( 0.65%) . > /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/alloc/src/raw_vec.rs:alloc::raw_vec::RawVec::reserve_for_push (297x) [./target/valgrind/s4] + 79,837 ( 0.02%) . . . > /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/alloc/src/vec/spec_from_iter.rs: as alloc::vec::spec_from_iter::SpecFromIter>>::from_iter (2,753x) [./target/valgrind/s4] + + 77,030 ( 0.02%) . . . * /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/alloc/src/alloc.rs:regex_syntax::hir::Hir::literal + 818,675 ( 0.24%) 20 ( 0.00%) . . > ???:__rust_alloc (15,406x) [./target/valgrind/s4] + + 75,345 ( 0.02%) . . . * /home/.cargo/registry/src/index.crates.io-6f17d22bba15001f/regex-syntax-0.8.2/src/hir/literal.rs:alloc::vec::Vec::retain_mut + 8,340,649 ( 2.41%) 17,872 ( 2.21%) . . > /home/.cargo/registry/src/index.crates.io-6f17d22bba15001f/regex-syntax-0.8.2/src/hir/literal.rs:regex_syntax::hir::literal::PreferenceTrie::insert (16,878x) [./target/valgrind/s4] + + 74,969 ( 0.02%) . . . * /home/.cargo/registry/src/index.crates.io-6f17d22bba15001f/aho-corasick-1.1.2/src/util/primitives.rs:aho_corasick::dfa::Builder::finish_build_one_start + + 597,388 ( 0.17%) 3,424 ( 0.42%) . . < /home/.cargo/registry/src/index.crates.io-6f17d22bba15001f/regex-syntax-0.8.2/src/hir/mod.rs:::visit_post (1,885x) + 24,658 ( 0.01%) 136 ( 0.02%) . . < /home/.cargo/registry/src/index.crates.io-6f17d22bba15001f/regex-syntax-0.8.2/src/hir/mod.rs:regex_automata::meta::reverse_inner::flatten'2 (74x) + 24,656 ( 0.01%) 136 ( 0.02%) . . < /home/.cargo/registry/src/index.crates.io-6f17d22bba15001f/regex-syntax-0.8.2/src/hir/mod.rs:regex_automata::meta::reverse_inner::flatten (75x) + 74,478 ( 0.02%) . . . * /home/.cargo/registry/src/index.crates.io-6f17d22bba15001f/regex-syntax-0.8.2/src/hir/mod.rs:regex_syntax::hir::Properties::repetition [./target/valgrind/s4] + + 1,648,306 ( 0.48%) 7,175 ( 0.89%) . . < /home/.cargo/registry/src/index.crates.io-6f17d22bba15001f/regex-automata-0.4.6/src/meta/reverse_inner.rs:regex_automata::meta::reverse_inner::flatten (1,589x) [./target/valgrind/s4] + 442,251 ( 0.13%) 2,118 ( 0.26%) . . < /home/.cargo/registry/src/index.crates.io-6f17d22bba15001f/regex-automata-0.4.6/src/meta/reverse_inner.rs:regex_automata::meta::reverse_inner::flatten'2 (653x) [./target/valgrind/s4] + 74,368 ( 0.02%) . . . * /home/.cargo/registry/src/index.crates.io-6f17d22bba15001f/regex-automata-0.4.6/src/meta/reverse_inner.rs:regex_automata::meta::reverse_inner::flatten'2 [./target/valgrind/s4] + 442,251 ( 0.13%) 2,118 ( 0.26%) . . > /home/.cargo/registry/src/index.crates.io-6f17d22bba15001f/regex-automata-0.4.6/src/meta/reverse_inner.rs:regex_automata::meta::reverse_inner::flatten'2 (653x) [./target/valgrind/s4] + 170,673 ( 0.05%) 68 ( 0.01%) . . > /home/.cargo/registry/src/index.crates.io-6f17d22bba15001f/regex-syntax-0.8.2/src/hir/mod.rs:regex_syntax::hir::Hir::alternation (12x) [./target/valgrind/s4] + 158,297 ( 0.05%) 310 ( 0.04%) . . > /home/.cargo/registry/src/index.crates.io-6f17d22bba15001f/regex-syntax-0.8.2/src/hir/mod.rs:regex_syntax::hir::Hir::concat (83x) [./target/valgrind/s4] + 11,910 ( 0.00%) 62 ( 0.01%) . . > /home/.cargo/registry/src/index.crates.io-6f17d22bba15001f/regex-syntax-0.8.2/src/hir/mod.rs:regex_syntax::hir::Repetition::with (74x) [./target/valgrind/s4] + 4,518 ( 0.00%) . . . > /home/.cargo/registry/src/index.crates.io-6f17d22bba15001f/regex-syntax-0.8.2/src/hir/mod.rs:regex_syntax::hir::Hir::kind (2,259x) [./target/valgrind/s4] + + 73,872 ( 0.02%) . . . * /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/core/src/ops/range.rs:aho_corasick::nfa::noncontiguous::NFA::init_full_state + + 73,728 ( 0.02%) . . . * /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/core/src/ptr/mod.rs:aho_corasick::nfa::noncontiguous::NFA::init_full_state + + 73,440 ( 0.02%) . . . * /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/core/src/cmp.rs:aho_corasick::nfa::noncontiguous::NFA::init_full_state + + 350,208 ( 0.10%) . . . < /home/.cargo/registry/src/index.crates.io-6f17d22bba15001f/aho-corasick-1.1.2/src/nfa/noncontiguous.rs:aho_corasick::nfa::noncontiguous::Builder::build (48x) [./target/valgrind/s4] + 71,568 ( 0.02%) . . . * /home/.cargo/registry/src/index.crates.io-6f17d22bba15001f/aho-corasick-1.1.2/src/util/prefilter.rs:aho_corasick::util::prefilter::Builder::build [./target/valgrind/s4] + 1,152 ( 0.00%) . . . > /home/.cargo/registry/src/index.crates.io-6f17d22bba15001f/aho-corasick-1.1.2/src/packed/api.rs:aho_corasick::packed::api::Builder::build (48x) [./target/valgrind/s4] + + 71,340 ( 0.02%) . . . * /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/core/src/slice/mod.rs:::case_fold_simple + + 71,265 ( 0.02%) . . . * /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/core/src/result.rs:regex_automata::nfa::thompson::literal_trie::LiteralTrie::compile + + 71,218 ( 0.02%) . . . * /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/core/src/slice/iter/macros.rs:regex_syntax::hir::literal::Extractor::cross + + 70,940 ( 0.02%) . . . * /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/core/src/slice/mod.rs:regex_syntax::unicode::SimpleCaseFolder::mapping + + 69,137 ( 0.02%) . . . * /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/alloc/src/vec/set_len_on_drop.rs:::drop + + 68,872 ( 0.02%) . . . * /home/.cargo/registry/src/index.crates.io-6f17d22bba15001f/regex-syntax-0.8.2/src/ast/mod.rs:regex_syntax::ast::parse::ParserI

::parse_set_class + + 68,597 ( 0.02%) . . . * /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/core/src/option.rs:::drop + + 67,893 ( 0.02%) . . . * /home/.cargo/registry/src/index.crates.io-6f17d22bba15001f/regex-automata-0.4.6/src/hybrid/id.rs:regex_automata::hybrid::dfa::Lazy::set_transition + + 815,578 ( 0.24%) 1,530 ( 0.19%) . . < /home/.cargo/registry/src/index.crates.io-6f17d22bba15001f/regex-automata-0.4.6/src/nfa/thompson/compiler.rs:regex_automata::nfa::thompson::compiler::Utf8Compiler::add (1,144x) [./target/valgrind/s4] + 154,838 ( 0.04%) 312 ( 0.04%) . . < /home/.cargo/registry/src/index.crates.io-6f17d22bba15001f/regex-automata-0.4.6/src/nfa/thompson/compiler.rs:regex_automata::nfa::thompson::compiler::Utf8Compiler::finish (126x) [./target/valgrind/s4] + 67,106 ( 0.02%) . . . * /home/.cargo/registry/src/index.crates.io-6f17d22bba15001f/regex-automata-0.4.6/src/nfa/thompson/compiler.rs:regex_automata::nfa::thompson::compiler::Utf8Compiler::compile_from [./target/valgrind/s4] + 475,225 ( 0.14%) 899 ( 0.11%) . . > /home/.cargo/registry/src/index.crates.io-6f17d22bba15001f/regex-automata-0.4.6/src/nfa/thompson/compiler.rs:regex_automata::nfa::thompson::compiler::Utf8Compiler::compile (1,553x) [./target/valgrind/s4] + + 66,704 ( 0.02%) . . . * /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/core/src/ptr/mod.rs:::drop + 165,480 ( 0.05%) . . . > ./string/../sysdeps/x86_64/multiarch/memmove-vec-unaligned-erms.S:__memcpy_avx_unaligned_erms (5,516x) [/usr/lib/x86_64-linux-gnu/libc.so.6] + 83,890 ( 0.02%) 814 ( 0.10%) . . > ???:__rust_dealloc (596x) [./target/valgrind/s4] + 54,341 ( 0.02%) . . . > /home/.cargo/registry/src/index.crates.io-6f17d22bba15001f/regex-syntax-0.8.2/src/ast/mod.rs:::drop'2 (2,758x) [./target/valgrind/s4] + 14,700 ( 0.00%) . . . > /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/alloc/src/vec/drain.rs: as core::ops::drop::Drop>::drop (525x) [./target/valgrind/s4] + 2,414 ( 0.00%) . . . > /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/core/src/ptr/mod.rs:core::ptr::drop_in_place'2 (71x) [./target/valgrind/s4] + + 66,646 ( 0.02%) . . . * /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/core/src/iter/traits/accum.rs:regex_automata::nfa::thompson::compiler::Compiler::c'2 + + 444,409 ( 0.13%) 555 ( 0.07%) . . < /home/.cargo/registry/src/index.crates.io-6f17d22bba15001f/regex-syntax-0.8.2/src/hir/mod.rs:regex_syntax::hir::Hir::class (3,879x) [./target/valgrind/s4] + 3,307 ( 0.00%) . . . < /home/.cargo/registry/src/index.crates.io-6f17d22bba15001f/regex-syntax-0.8.2/src/hir/mod.rs:regex_syntax::hir::Class::literal (193x) [./target/valgrind/s4] + 66,562 ( 0.02%) . . . * /home/.cargo/registry/src/index.crates.io-6f17d22bba15001f/regex-syntax-0.8.2/src/hir/mod.rs:regex_syntax::hir::ClassUnicode::literal [./target/valgrind/s4] + + 66,473 ( 0.02%) . . . * /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/alloc/src/raw_vec.rs:regex_syntax::hir::literal::PreferenceTrie::minimize + + 66,205 ( 0.02%) . . . * /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/core/src/option.rs:regex_automata::nfa::thompson::literal_trie::LiteralTrie::compile + + 66,140 ( 0.02%) . . . * /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/core/src/cell.rs:regex_automata::nfa::thompson::compiler::Compiler::patch + + 1,055,517 ( 0.30%) 771 ( 0.10%) 2 ( 0.65%) . < /home/.cargo/registry/src/index.crates.io-6f17d22bba15001f/regex-automata-0.4.6/src/dfa/onepass.rs:regex_automata::dfa::onepass::Builder::build_from_nfa (1,451x) [./target/valgrind/s4] + 66,131 ( 0.02%) . . . * /home/.cargo/registry/src/index.crates.io-6f17d22bba15001f/regex-automata-0.4.6/src/dfa/onepass.rs:regex_automata::dfa::onepass::InternalBuilder::compile_transition [./target/valgrind/s4] + 941,687 ( 0.27%) 771 ( 0.10%) 2 ( 0.65%) . > /home/.cargo/registry/src/index.crates.io-6f17d22bba15001f/regex-automata-0.4.6/src/dfa/onepass.rs:regex_automata::dfa::onepass::InternalBuilder::add_dfa_state_for_nfa_state (1,451x) [./target/valgrind/s4] + + 65,881 ( 0.02%) . . . * /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/core/src/ptr/mod.rs:aho_corasick::nfa::noncontiguous::Compiler::densify + + 1,447,519 ( 0.42%) 689 ( 0.09%) . . < /home/.cargo/registry/src/index.crates.io-6f17d22bba15001f/regex-syntax-0.8.2/src/ast/parse.rs:regex_syntax::ast::parse::ParserI

::push_group (713x) [./target/valgrind/s4] + 65,804 ( 0.02%) . . . * /home/.cargo/registry/src/index.crates.io-6f17d22bba15001f/regex-syntax-0.8.2/src/ast/parse.rs:regex_syntax::ast::parse::ParserI

::parse_group [./target/valgrind/s4] + 843,071 ( 0.24%) 314 ( 0.04%) . . > /home/.cargo/registry/src/index.crates.io-6f17d22bba15001f/regex-syntax-0.8.2/src/ast/parse.rs:regex_syntax::ast::parse::ParserI

::parse_capture_name (586x) [./target/valgrind/s4] + 223,447 ( 0.06%) . . . > /home/.cargo/registry/src/index.crates.io-6f17d22bba15001f/regex-syntax-0.8.2/src/ast/parse.rs:regex_syntax::ast::parse::ParserI

::bump (2,511x) [./target/valgrind/s4] + 52,898 ( 0.02%) 36 ( 0.00%) . . > /home/.cargo/registry/src/index.crates.io-6f17d22bba15001f/regex-syntax-0.8.2/src/ast/mod.rs:regex_syntax::ast::Ast::empty (693x) [./target/valgrind/s4] + 43,132 ( 0.01%) . . . > /home/.cargo/registry/src/index.crates.io-6f17d22bba15001f/regex-syntax-0.8.2/src/ast/parse.rs:regex_syntax::ast::parse::ParserI

::char (2,159x) [./target/valgrind/s4] + 16,800 ( 0.00%) 20 ( 0.00%) . . > /home/.cargo/registry/src/index.crates.io-6f17d22bba15001f/regex-syntax-0.8.2/src/ast/parse.rs:regex_syntax::ast::parse::ParserI

::parse_flags (20x) [./target/valgrind/s4] + 12,834 ( 0.00%) . . . > /home/.cargo/registry/src/index.crates.io-6f17d22bba15001f/regex-syntax-0.8.2/src/ast/parse.rs:regex_syntax::ast::parse::ParserI

::bump_space (713x) [./target/valgrind/s4] + + 65,535 ( 0.02%) . . . * /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/core/src/num/uint_macros.rs:regex_syntax::ast::visitor::visit + + 79,837 ( 0.02%) . . . < /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/alloc/src/vec/mod.rs:::visit_pre (2,753x) + 2,059 ( 0.00%) . . . < /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/alloc/src/vec/mod.rs:::visit_class_set_item_pre (71x) + 145 ( 0.00%) . . . < /home/.cargo/registry/src/index.crates.io-6f17d22bba15001f/regex-syntax-0.8.2/src/hir/translate.rs:regex_syntax::hir::translate::TranslatorI::hir_perl_unicode_class (5x) [./target/valgrind/s4] + 65,067 ( 0.02%) . . . * /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/alloc/src/vec/spec_from_iter.rs: as alloc::vec::spec_from_iter::SpecFromIter>>::from_iter [./target/valgrind/s4] + + 941,687 ( 0.27%) 771 ( 0.10%) 2 ( 0.65%) . < /home/.cargo/registry/src/index.crates.io-6f17d22bba15001f/regex-automata-0.4.6/src/dfa/onepass.rs:regex_automata::dfa::onepass::InternalBuilder::compile_transition (1,451x) [./target/valgrind/s4] + 249,472 ( 0.07%) 240 ( 0.03%) . . < /home/.cargo/registry/src/index.crates.io-6f17d22bba15001f/regex-automata-0.4.6/src/dfa/onepass.rs:regex_automata::dfa::onepass::Builder::build_from_nfa (162x) [./target/valgrind/s4] + 65,035 ( 0.02%) . . . * /home/.cargo/registry/src/index.crates.io-6f17d22bba15001f/regex-automata-0.4.6/src/dfa/onepass.rs:regex_automata::dfa::onepass::InternalBuilder::add_dfa_state_for_nfa_state [./target/valgrind/s4] + + 64,329 ( 0.02%) . . . * /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/alloc/src/raw_vec.rs:regex_automata::nfa::thompson::nfa::Inner::add + + 64,329 ( 0.02%) . . . * /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/core/src/ptr/mut_ptr.rs:regex_automata::nfa::thompson::nfa::Inner::add + + 63,785 ( 0.02%) . . . * /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/alloc/src/raw_vec.rs:regex_syntax::hir::literal::PreferenceTrie::insert + 2,845,827 ( 0.82%) 12,835 ( 1.59%) . . > /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/alloc/src/raw_vec.rs:alloc::raw_vec::RawVec::reserve::do_reserve_and_handle (8,722x) [./target/valgrind/s4] + + 63,772 ( 0.02%) . . . * /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/core/src/mem/manually_drop.rs:regex_syntax::hir::Hir::concat + + 63,716 ( 0.02%) . . . * /home/.cargo/registry/src/index.crates.io-6f17d22bba15001f/regex-syntax-0.8.2/src/ast/mod.rs:regex_syntax::ast::parse::ParserI

::push_alternate + + 63,098 ( 0.02%) . . . < /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/core/src/ptr/mod.rs:core::ptr::drop_in_place (2,726x) [./target/valgrind/s4] + 62,706 ( 0.02%) . . . * /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/core/src/ptr/mod.rs:core::ptr::drop_in_place'2 [./target/valgrind/s4] + 364 ( 0.00%) . . . > ???:__rust_dealloc (4x) [./target/valgrind/s4] + + 62,654 ( 0.02%) . . . * /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/core/src/char/methods.rs:::next + + 2,448,763 ( 0.71%) 2,399 ( 0.30%) 2 ( 0.65%) . < /home/.cargo/registry/src/index.crates.io-6f17d22bba15001f/regex-automata-0.4.6/src/meta/wrappers.rs:regex_automata::meta::wrappers::OnePass::new (81x) [./target/valgrind/s4] + 62,362 ( 0.02%) . . . * /home/.cargo/registry/src/index.crates.io-6f17d22bba15001f/regex-automata-0.4.6/src/dfa/onepass.rs:regex_automata::dfa::onepass::Builder::build_from_nfa [./target/valgrind/s4] + 1,055,517 ( 0.30%) 771 ( 0.10%) 2 ( 0.65%) . > /home/.cargo/registry/src/index.crates.io-6f17d22bba15001f/regex-automata-0.4.6/src/dfa/onepass.rs:regex_automata::dfa::onepass::InternalBuilder::compile_transition (1,451x) [./target/valgrind/s4] + 249,472 ( 0.07%) 240 ( 0.03%) . . > /home/.cargo/registry/src/index.crates.io-6f17d22bba15001f/regex-automata-0.4.6/src/dfa/onepass.rs:regex_automata::dfa::onepass::InternalBuilder::add_dfa_state_for_nfa_state (162x) [./target/valgrind/s4] + 234,891 ( 0.07%) 260 ( 0.03%) . . > /home/.cargo/registry/src/index.crates.io-6f17d22bba15001f/regex-automata-0.4.6/src/dfa/onepass.rs:regex_automata::dfa::onepass::InternalBuilder::stack_push (2,672x) [./target/valgrind/s4] + 103,863 ( 0.03%) . . . > /home/.cargo/registry/src/index.crates.io-6f17d22bba15001f/regex-automata-0.4.6/src/dfa/remapper.rs:regex_automata::dfa::remapper::Remapper::remap (1x) [./target/valgrind/s4] + 1,956 ( 0.00%) . . . > /home/.cargo/registry/src/index.crates.io-6f17d22bba15001f/regex-automata-0.4.6/src/dfa/remapper.rs:regex_automata::dfa::remapper::Remapper::swap (1x) [./target/valgrind/s4] + 648 ( 0.00%) . . . > /home/.cargo/registry/src/index.crates.io-6f17d22bba15001f/regex-automata-0.4.6/src/nfa/thompson/nfa.rs:regex_automata::nfa::thompson::nfa::NFA::patterns (81x) [./target/valgrind/s4] + 184 ( 0.00%) . . . > /home/.cargo/registry/src/index.crates.io-6f17d22bba15001f/regex-automata-0.4.6/src/dfa/remapper.rs:regex_automata::dfa::remapper::Remapper::new (1x) [./target/valgrind/s4] + 65 ( 0.00%) . . . > ./string/../sysdeps/x86_64/multiarch/memmove-vec-unaligned-erms.S:__memcpy_avx_unaligned_erms (1x) [/usr/lib/x86_64-linux-gnu/libc.so.6] + + 62,232 ( 0.02%) . . . * /home/.cargo/registry/src/index.crates.io-6f17d22bba15001f/aho-corasick-1.1.2/src/util/primitives.rs:aho_corasick::nfa::noncontiguous::Compiler::fill_failure_transitions + + 62,212 ( 0.02%) . . . * /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/core/src/slice/iter/macros.rs:aho_corasick::nfa::noncontiguous::Builder::build + + 61,632 ( 0.02%) . . . * /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/core/src/intrinsics.rs:regex_syntax::hir::Hir::concat + 264,180 ( 0.08%) . . . > ./string/../sysdeps/x86_64/multiarch/memmove-vec-unaligned-erms.S:__memcpy_avx_unaligned_erms (15,408x) [/usr/lib/x86_64-linux-gnu/libc.so.6] + + 61,629 ( 0.02%) . . . * /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/alloc/src/vec/mod.rs:regex_automata::nfa::thompson::compiler::Compiler::c'2 + + 61,624 ( 0.02%) . . . * /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/alloc/src/vec/mod.rs:regex_syntax::hir::Hir::literal + + 60,711 ( 0.02%) . . . * /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/core/src/slice/iter/macros.rs:regex_syntax::hir::literal::Seq::optimize_by_preference + +31,759,436 ( 9.17%) 112,458 (13.89%) 71 (22.90%) . < /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/alloc/src/alloc.rs:alloc::raw_vec::finish_grow (44,076x) + 2,565,036 ( 0.74%) 29,826 ( 3.68%) . . < /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/alloc/src/alloc.rs:::visit_post (14,913x) + 250,063 ( 0.07%) 2,906 ( 0.36%) . . < /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/alloc/src/alloc.rs:regex_syntax::hir::Hir::class (1,454x) + 62,623 ( 0.02%) 599 ( 0.07%) . . < /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/alloc/src/alloc.rs:alloc::vec::Vec::shrink_to_fit (211x) + 60,654 ( 0.02%) . . . * ???:__rust_realloc [./target/valgrind/s4] +34,576,504 ( 9.99%) 145,789 (18.00%) 71 (22.90%) . > /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/std/src/alloc.rs:__rdl_realloc (60,654x) [./target/valgrind/s4] + + 59,783 ( 0.02%) . . . * /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/core/src/num/uint_macros.rs:alloc::raw_vec::RawVec::reserve::do_reserve_and_handle + + 64,743 ( 0.02%) . . . < /home/.cargo/registry/src/index.crates.io-6f17d22bba15001f/regex-syntax-0.8.2/src/ast/visitor.rs:regex_syntax::ast::visitor::visit (4,916x) [./target/valgrind/s4] + 59,560 ( 0.02%) . . . * /home/.cargo/registry/src/index.crates.io-6f17d22bba15001f/regex-syntax-0.8.2/src/hir/translate.rs:::visit_class_set_item_pre [./target/valgrind/s4] + + 91,043 ( 0.03%) . . . < /home/.cargo/registry/src/index.crates.io-6f17d22bba15001f/regex-automata-0.4.6/src/nfa/thompson/compiler.rs:regex_automata::nfa::thompson::compiler::Compiler::c'2 (16,112x) [./target/valgrind/s4] + 58 ( 0.00%) . . . < /home/.cargo/registry/src/index.crates.io-6f17d22bba15001f/regex-automata-0.4.6/src/nfa/thompson/compiler.rs:regex_automata::nfa::thompson::compiler::Compiler::c (10x) [./target/valgrind/s4] + 58,857 ( 0.02%) . . . * /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/core/src/slice/iter/macros.rs:::next [./target/valgrind/s4] + + 58,660 ( 0.02%) . . . * /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/core/src/alloc/layout.rs:regex_automata::nfa::thompson::builder::Builder::build + + 58,302 ( 0.02%) . . . * /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/core/src/result.rs:regex_automata::nfa::thompson::compiler::Compiler::c_alt_iter + + 58,035 ( 0.02%) . . . * /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/core/src/num/uint_macros.rs:regex_automata::hybrid::dfa::Builder::build_from_nfa + + 57,858 ( 0.02%) . . . * /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/core/src/ptr/mod.rs:regex_syntax::hir::literal::PreferenceTrie::minimize + + 57,781 ( 0.02%) . . . * /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/core/src/num/uint_macros.rs:regex_automata::nfa::thompson::nfa::Inner::into_nfa + + 57,739 ( 0.02%) . . . * /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/core/src/slice/iter/macros.rs:regex_syntax::hir::Properties::alternation + + 57,394 ( 0.02%) . . . * /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/alloc/src/alloc.rs:core::ptr::drop_in_place + 344,898 ( 0.10%) 575 ( 0.07%) . . > ???:__rust_dealloc (3,312x) [./target/valgrind/s4] + + 57,180 ( 0.02%) . . . * /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/core/src/ptr/mut_ptr.rs:regex_syntax::hir::Hir::alternation + + 56,861 ( 0.02%) . . . * /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/core/src/option.rs:regex_automata::nfa::thompson::compiler::Compiler::c + + 56,761 ( 0.02%) . . . * /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/core/src/ptr/mut_ptr.rs:regex_automata::nfa::thompson::literal_trie::LiteralTrie::compile + +86,288,458 (24.93%) 201,659 (24.90%) 86 (27.74%) . < /home/.cargo/registry/src/index.crates.io-6f17d22bba15001f/regex-automata-0.4.6/src/nfa/thompson/compiler.rs:regex_automata::nfa::thompson::compiler::Compiler::c'2 (1,386x) [./target/valgrind/s4] + 56,133 ( 0.02%) . . . * /home/.cargo/registry/src/index.crates.io-6f17d22bba15001f/regex-automata-0.4.6/src/nfa/thompson/compiler.rs:regex_automata::nfa::thompson::compiler::Compiler::c_cap'2 [./target/valgrind/s4] +85,524,273 (24.71%) 200,351 (24.74%) 85 (27.42%) . > /home/.cargo/registry/src/index.crates.io-6f17d22bba15001f/regex-automata-0.4.6/src/nfa/thompson/compiler.rs:regex_automata::nfa::thompson::compiler::Compiler::c'2 (1,386x) [./target/valgrind/s4] + 181,991 ( 0.05%) 410 ( 0.05%) . . > /home/.cargo/registry/src/index.crates.io-6f17d22bba15001f/regex-automata-0.4.6/src/nfa/thompson/builder.rs:regex_automata::nfa::thompson::builder::Builder::add_capture_start (693x) [./target/valgrind/s4] + 49,896 ( 0.01%) . . . > /home/.cargo/registry/src/index.crates.io-6f17d22bba15001f/regex-automata-0.4.6/src/nfa/thompson/builder.rs:regex_automata::nfa::thompson::builder::Builder::patch (1,386x) [./target/valgrind/s4] + + 56,132 ( 0.02%) . . . * /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/core/src/slice/index.rs:aho_corasick::util::remapper::Remapper::remap + + 56,022 ( 0.02%) . . . * /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/alloc/src/vec/into_iter.rs:regex_syntax::hir::Hir::alternation + +83,401,196 (24.09%) 191,532 (23.65%) 87 (28.06%) . < /home/.cargo/registry/src/index.crates.io-6f17d22bba15001f/regex-automata-0.4.6/src/nfa/thompson/compiler.rs:regex_automata::nfa::thompson::compiler::Compiler::c_cap (175x) [./target/valgrind/s4] + 33,110 ( 0.01%) . . . < /home/.cargo/registry/src/index.crates.io-6f17d22bba15001f/regex-automata-0.4.6/src/nfa/thompson/compiler.rs:regex_automata::nfa::thompson::compiler::Compiler::c_at_least (110x) [./target/valgrind/s4] + 55,566 ( 0.02%) . . . * /home/.cargo/registry/src/index.crates.io-6f17d22bba15001f/regex-automata-0.4.6/src/nfa/thompson/compiler.rs:regex_automata::nfa::thompson::compiler::Compiler::c [./target/valgrind/s4] +83,118,552 (24.01%) 191,492 (23.65%) 87 (28.06%) . > /home/.cargo/registry/src/index.crates.io-6f17d22bba15001f/regex-automata-0.4.6/src/nfa/thompson/compiler.rs:regex_automata::nfa::thompson::compiler::Compiler::c'2 (2,840x) [./target/valgrind/s4] + 98,080 ( 0.03%) . . . > /home/.cargo/registry/src/index.crates.io-6f17d22bba15001f/regex-automata-0.4.6/src/nfa/thompson/builder.rs:regex_automata::nfa::thompson::builder::Builder::patch (2,671x) [./target/valgrind/s4] + 44,665 ( 0.01%) 36 ( 0.00%) . . > /home/.cargo/registry/src/index.crates.io-6f17d22bba15001f/regex-automata-0.4.6/src/nfa/thompson/compiler.rs:regex_automata::nfa::thompson::compiler::Compiler::c_alt_iter (1x) [./target/valgrind/s4] + 1,210 ( 0.00%) . . . > /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/core/src/slice/iter/macros.rs:::next (220x) [./target/valgrind/s4] + 574 ( 0.00%) . . . > /home/.cargo/registry/src/index.crates.io-6f17d22bba15001f/regex-syntax-0.8.2/src/hir/mod.rs:regex_syntax::hir::Hir::kind (287x) [./target/valgrind/s4] + 440 ( 0.00%) . . . > /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/alloc/src/raw_vec.rs:regex_syntax::hir::ClassBytes::iter (110x) [./target/valgrind/s4] + 336 ( 0.00%) . . . > /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/alloc/src/raw_vec.rs:regex_syntax::hir::ClassBytes::ranges (112x) [./target/valgrind/s4] + 220 ( 0.00%) . . . > /home/.cargo/registry/src/index.crates.io-6f17d22bba15001f/regex-syntax-0.8.2/src/hir/mod.rs:regex_syntax::hir::ClassBytesRange::end (110x) [./target/valgrind/s4] + 220 ( 0.00%) . . . > /home/.cargo/registry/src/index.crates.io-6f17d22bba15001f/regex-syntax-0.8.2/src/hir/mod.rs:regex_syntax::hir::ClassBytesRange::start (110x) [./target/valgrind/s4] + 58 ( 0.00%) . . . > /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/core/src/slice/iter/macros.rs:::next (10x) [./target/valgrind/s4] + 49 ( 0.00%) . . . > /home/.cargo/registry/src/index.crates.io-6f17d22bba15001f/regex-automata-0.4.6/src/nfa/thompson/builder.rs:regex_automata::nfa::thompson::builder::Builder::add (1x) [./target/valgrind/s4] + 16 ( 0.00%) . . . > /home/.cargo/registry/src/index.crates.io-6f17d22bba15001f/regex-syntax-0.8.2/src/hir/mod.rs:regex_syntax::hir::ClassUnicodeRange::end (8x) [./target/valgrind/s4] + 16 ( 0.00%) . . . > /home/.cargo/registry/src/index.crates.io-6f17d22bba15001f/regex-syntax-0.8.2/src/hir/mod.rs:regex_syntax::hir::ClassUnicodeRange::start (8x) [./target/valgrind/s4] + 14 ( 0.00%) . . . > /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/alloc/src/vec/mod.rs:regex_syntax::hir::ClassUnicode::is_ascii (2x) [./target/valgrind/s4] + 8 ( 0.00%) . . . > /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/alloc/src/raw_vec.rs:regex_syntax::hir::ClassUnicode::iter (2x) [./target/valgrind/s4] + + 87,215 ( 0.03%) . . . < ./stdio-common/./stdio-common/isoc99_sscanf.c:__isoc99_sscanf (51x) [/usr/lib/x86_64-linux-gnu/libc.so.6] + 55,090 ( 0.02%) . . . * ./stdio-common/./stdio-common/vfscanf-internal.c:__vfscanf_internal [/usr/lib/x86_64-linux-gnu/libc.so.6] + 26,260 ( 0.01%) . . . > ./stdlib/../stdlib/strtol.c:__strtoul_internal (102x) [/usr/lib/x86_64-linux-gnu/libc.so.6] + 3,876 ( 0.00%) . . . > ./libio/./libio/genops.c:_IO_sputbackc (204x) [/usr/lib/x86_64-linux-gnu/libc.so.6] + 510 ( 0.00%) . . . > ./nptl/./nptl/libc-cleanup.c:__libc_cleanup_push_defer (51x) [/usr/lib/x86_64-linux-gnu/libc.so.6] + 408 ( 0.00%) . . . > ./nptl/./nptl/libc-cleanup.c:__libc_cleanup_pop_restore (51x) [/usr/lib/x86_64-linux-gnu/libc.so.6] + + 80,146 ( 0.02%) . . . < ./elf/./elf/dl-lookup.c:_dl_lookup_symbol_x (189x) [/usr/lib/x86_64-linux-gnu/ld-linux-x86-64.so.2] + 55,068 ( 0.02%) . . . * ./elf/./elf/dl-lookup.c:do_lookup_x [/usr/lib/x86_64-linux-gnu/ld-linux-x86-64.so.2] + 22,502 ( 0.01%) . . . > ./elf/./elf/dl-lookup.c:check_match (191x) [/usr/lib/x86_64-linux-gnu/ld-linux-x86-64.so.2] + + 55,036 ( 0.02%) . . . * /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/core/src/ptr/const_ptr.rs:::drop + + 55,017 ( 0.02%) . . . * /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/core/src/slice/index.rs:aho_corasick::dfa::Builder::build_from_noncontiguous + + 54,838 ( 0.02%) . . . * /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/core/src/num/uint_macros.rs:regex_automata::nfa::thompson::compiler::Compiler::c'2 + + 54,466 ( 0.02%) . . . * /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/alloc/src/raw_vec.rs: as core::ops::drop::Drop>::drop + + 718,057 ( 0.21%) 4,020 ( 0.50%) . . < /home/.cargo/registry/src/index.crates.io-6f17d22bba15001f/regex-syntax-0.8.2/src/hir/mod.rs:regex_syntax::hir::Hir::class (2,425x) [./target/valgrind/s4] + 51,588 ( 0.01%) 296 ( 0.04%) . . < /home/.cargo/registry/src/index.crates.io-6f17d22bba15001f/regex-syntax-0.8.2/src/hir/mod.rs:regex_automata::meta::reverse_inner::flatten'2 (159x) + 18,929 ( 0.01%) 50 ( 0.01%) . . < /home/.cargo/registry/src/index.crates.io-6f17d22bba15001f/regex-syntax-0.8.2/src/hir/mod.rs:regex_syntax::hir::Hir::dot (110x) [./target/valgrind/s4] + 9,392 ( 0.00%) 48 ( 0.01%) . . < /home/.cargo/registry/src/index.crates.io-6f17d22bba15001f/regex-syntax-0.8.2/src/hir/mod.rs:regex_automata::meta::reverse_inner::flatten (34x) + 54,450 ( 0.02%) . . . * /home/.cargo/registry/src/index.crates.io-6f17d22bba15001f/regex-syntax-0.8.2/src/hir/mod.rs:regex_syntax::hir::Properties::class [./target/valgrind/s4] + + 54,341 ( 0.02%) . . . < /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/core/src/ptr/mod.rs:::drop (2,758x) + 1,278 ( 0.00%) . . . < /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/core/src/ptr/mod.rs:core::ptr::drop_in_place'2 (71x) [./target/valgrind/s4] + 54,044 ( 0.02%) . . . * /home/.cargo/registry/src/index.crates.io-6f17d22bba15001f/regex-syntax-0.8.2/src/ast/mod.rs:::drop'2 [./target/valgrind/s4] + + 53,115 ( 0.02%) . . . * /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/core/src/num/uint_macros.rs:regex_syntax::hir::Properties::alternation + + 52,907 ( 0.02%) . . . * /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/core/src/ptr/mod.rs:regex_syntax::ast::parse::ParserI

::push_alternate + + 52,603 ( 0.02%) . . . * /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/alloc/src/raw_vec.rs:regex_syntax::ast::parse::ParserI

::parse_with_comments + + 52,360 ( 0.02%) . . . * /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/core/src/ptr/mut_ptr.rs:regex_syntax::ast::parse::ParserI

::parse_with_comments + + 52,037 ( 0.02%) . . . * /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/core/src/ptr/mod.rs:regex_syntax::hir::literal::Extractor::cross + + 51,876 ( 0.01%) . . . * /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/alloc/src/collections/vec_deque/mod.rs:aho_corasick::nfa::noncontiguous::Compiler::fill_failure_transitions + 78,557 ( 0.02%) 307 ( 0.04%) . . > /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/alloc/src/collections/vec_deque/mod.rs:alloc::collections::vec_deque::VecDeque::grow (180x) [./target/valgrind/s4] + + 68,927 ( 0.02%) . . . < /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/alloc/src/slice.rs:regex_syntax::hir::interval::IntervalSet::canonicalize (1,318x) + 22,896 ( 0.01%) . . . < /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/alloc/src/slice.rs:aho_corasick::packed::api::Builder::build (48x) + 13,251 ( 0.00%) 12 ( 0.00%) . . < /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/alloc/src/slice.rs:itertools::Itertools::sorted_by (3x) + 11,215 ( 0.00%) 14 ( 0.00%) . . < /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/alloc/src/slice.rs:s4lib::readers::syslinereader::SyslineReader::parse_datetime_in_line_cached (5x) + 44 ( 0.00%) . . . < /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/alloc/src/slice.rs:s4lib::readers::syslinereader::SyslineReader::summary (2x) + 22 ( 0.00%) . . . < /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/alloc/src/slice.rs:s4lib::readers::syslinereader::SyslineReader::dt_patterns_analysis (1x) + 51,691 ( 0.01%) . . . * /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/core/src/slice/sort.rs:core::slice::sort::merge_sort [./target/valgrind/s4] + 38,128 ( 0.01%) . . . > /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/core/src/slice/sort.rs:core::slice::sort::insertion_sort_shift_left (1,334x) [./target/valgrind/s4] + + 51,349 ( 0.01%) . . . * /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/core/src/option.rs:aho_corasick::nfa::noncontiguous::Compiler::fill_failure_transitions + + 51,343 ( 0.01%) . . . * /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/core/src/cell.rs:::visit_pre + + 51,030 ( 0.01%) . . . * /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/core/src/slice/iter/macros.rs:aho_corasick::dfa::Builder::build_from_noncontiguous + + 50,561 ( 0.01%) . . . * /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/core/src/ptr/mod.rs:regex_automata::nfa::thompson::builder::Builder::build + 284,644 ( 0.08%) . . . > ./string/../sysdeps/x86_64/multiarch/memset-vec-unaligned-erms.S:__memset_avx2_unaligned_erms (175x) [/usr/lib/x86_64-linux-gnu/libc.so.6] + + 416,983 ( 0.12%) 786 ( 0.10%) . . < /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/core/src/fmt/mod.rs:::fmt (1,863x) [./target/valgrind/s4] + 50,301 ( 0.01%) . . . * /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/core/src/fmt/mod.rs:core::fmt::Formatter::pad [./target/valgrind/s4] + 364,819 ( 0.11%) 786 ( 0.10%) . . > /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/alloc/src/string.rs:::write_str (1,863x) [./target/valgrind/s4] + + 218,649 ( 0.06%) 624 ( 0.08%) . . < /home/.cargo/registry/src/index.crates.io-6f17d22bba15001f/aho-corasick-1.1.2/src/nfa/noncontiguous.rs:aho_corasick::nfa::noncontiguous::Builder::build (2,624x) [./target/valgrind/s4] + 50,077 ( 0.01%) . . . * /home/.cargo/registry/src/index.crates.io-6f17d22bba15001f/aho-corasick-1.1.2/src/nfa/noncontiguous.rs:aho_corasick::nfa::noncontiguous::NFA::alloc_state [./target/valgrind/s4] + + 5,504,750 ( 1.59%) . . . < ./malloc/./malloc/malloc.c:_int_realloc (24,838x) [/usr/lib/x86_64-linux-gnu/libc.so.6] + 1,154 ( 0.00%) . . . < ./libio/./libio/iogetdelim.c:getdelim (55x) [/usr/lib/x86_64-linux-gnu/libc.so.6] + 42 ( 0.00%) . . . < ./nptl/./nptl/pthread_attr_setaffinity.c:pthread_attr_setaffinity_np@@GLIBC_2.32 (3x) [/usr/lib/x86_64-linux-gnu/libc.so.6] + 24 ( 0.00%) . . . < ./malloc/./malloc/scratch_buffer_dupfree.c:__libc_scratch_buffer_dupfree (1x) [/usr/lib/x86_64-linux-gnu/libc.so.6] + 49,794 ( 0.01%) . . . * ???:0x0000000004898620 [???] + 5,456,176 ( 1.58%) . . . > ./string/../sysdeps/x86_64/multiarch/memmove-vec-unaligned-erms.S:__memcpy_avx_unaligned_erms (24,897x) [/usr/lib/x86_64-linux-gnu/libc.so.6] + + 49,790 ( 0.01%) . . . * /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/alloc/src/vec/mod.rs:::visit_class_set_item_post + 257,094 ( 0.07%) 293 ( 0.04%) . . > /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/alloc/src/raw_vec.rs:alloc::raw_vec::RawVec::reserve_for_push (1,978x) [./target/valgrind/s4] + 128,502 ( 0.04%) 403 ( 0.05%) . . > /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/alloc/src/vec/spec_from_iter.rs: as alloc::vec::spec_from_iter::SpecFromIter>::from_iter (770x) [./target/valgrind/s4] + + 49,780 ( 0.01%) . . . * /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/alloc/src/alloc.rs:regex_syntax::hir::literal::Extractor::cross + 1,481,481 ( 0.43%) 9,634 ( 1.19%) . . > ???:__rust_alloc (7,320x) [./target/valgrind/s4] + 692,266 ( 0.20%) 3,302 ( 0.41%) . . > ???:__rust_dealloc (5,904x) [./target/valgrind/s4] + + 49,564 ( 0.01%) . . . * /home/.cargo/registry/src/index.crates.io-6f17d22bba15001f/aho-corasick-1.1.2/src/util/primitives.rs:aho_corasick::util::remapper::Remapper::remap + + 49,542 ( 0.01%) . . . * /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/core/src/num/mod.rs:regex_syntax::hir::Hir::concat + + 318,341 ( 0.09%) 40 ( 0.00%) . . < /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/std/src/collections/hash/map.rs:regex_automata::util::captures::GroupInfo::new (586x) + 175,007 ( 0.05%) 397 ( 0.05%) . . < /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/std/src/collections/hash/map.rs:regex_automata::hybrid::dfa::Lazy::init_cache (468x) + 139,374 ( 0.04%) 16 ( 0.00%) . . < /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/std/src/collections/hash/map.rs:regex_automata::hybrid::dfa::Lazy::cache_next_state (174x) + 15,013 ( 0.00%) . . . < /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/std/src/collections/hash/map.rs:regex_automata::hybrid::dfa::Lazy::cache_start_group (41x) + 881 ( 0.00%) . . . < /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/std/src/collections/hash/map.rs:s4::processing_loop (4x) + 49,058 ( 0.01%) . . . * /cargo/registry/src/index.crates.io-6f17d22bba15001f/hashbrown-0.12.3/src/map.rs:hashbrown::map::HashMap::insert [./target/valgrind/s4] + 304,623 ( 0.09%) 102 ( 0.01%) . . > /cargo/registry/src/index.crates.io-6f17d22bba15001f/hashbrown-0.12.3/src/raw/mod.rs:hashbrown::raw::RawTable::insert (921x) [./target/valgrind/s4] + 245,756 ( 0.07%) . . . > /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/core/src/hash/mod.rs:core::hash::BuildHasher::hash_one (1,269x) [./target/valgrind/s4] + 89 ( 0.00%) . . . > ./string/../sysdeps/x86_64/multiarch/memmove-vec-unaligned-erms.S:__memcpy_avx_unaligned_erms (1x) [/usr/lib/x86_64-linux-gnu/libc.so.6] + + 48,708 ( 0.01%) . . . * /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/core/src/ptr/mod.rs:::visit_class_set_item_post + + 47,921 ( 0.01%) . . . * /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/core/src/intrinsics.rs:regex_automata::nfa::thompson::builder::Builder::build + 155,491 ( 0.04%) . . . > ./string/../sysdeps/x86_64/multiarch/memmove-vec-unaligned-erms.S:__memcpy_avx_unaligned_erms (12,024x) [/usr/lib/x86_64-linux-gnu/libc.so.6] + + 47,787 ( 0.01%) . . . * /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/core/src/slice/mod.rs:regex_syntax::ast::parse::ParserI

::push_alternate + + 46,486 ( 0.01%) . . . * /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/core/src/result.rs:aho_corasick::nfa::noncontiguous::Builder::build + 8,544 ( 0.00%) . . . > ./string/../sysdeps/x86_64/multiarch/memmove-vec-unaligned-erms.S:__memcpy_avx_unaligned_erms (96x) [/usr/lib/x86_64-linux-gnu/libc.so.6] + + 46,444 ( 0.01%) . . . * /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/core/src/iter/traits/iterator.rs:aho_corasick::nfa::noncontiguous::Compiler::densify + + 46,333 ( 0.01%) . . . * /home/.cargo/registry/src/index.crates.io-6f17d22bba15001f/aho-corasick-1.1.2/src/util/primitives.rs:aho_corasick::nfa::noncontiguous::Compiler::densify + + 46,295 ( 0.01%) . . . * /home/.cargo/registry/src/index.crates.io-6f17d22bba15001f/regex-automata-0.4.6/src/nfa/thompson/map.rs:regex_automata::nfa::thompson::compiler::Utf8Compiler::compile + + 934,285 ( 0.27%) 1,530 ( 0.19%) . . < /home/.cargo/registry/src/index.crates.io-6f17d22bba15001f/regex-automata-0.4.6/src/nfa/thompson/compiler.rs:regex_automata::nfa::thompson::compiler::Compiler::c'2 (1,144x) [./target/valgrind/s4] + 45,676 ( 0.01%) . . . * /home/.cargo/registry/src/index.crates.io-6f17d22bba15001f/regex-automata-0.4.6/src/nfa/thompson/compiler.rs:regex_automata::nfa::thompson::compiler::Utf8Compiler::add [./target/valgrind/s4] + 815,578 ( 0.24%) 1,530 ( 0.19%) . . > /home/.cargo/registry/src/index.crates.io-6f17d22bba15001f/regex-automata-0.4.6/src/nfa/thompson/compiler.rs:regex_automata::nfa::thompson::compiler::Utf8Compiler::compile_from (1,144x) [./target/valgrind/s4] + + 45,262 ( 0.01%) . . . * /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/core/src/slice/index.rs:regex_automata::hybrid::dfa::Lazy::set_transition + + 44,988 ( 0.01%) . . . * /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/alloc/src/vec/drain.rs: as alloc::vec::spec_extend::SpecExtend>::spec_extend + + 42,842 ( 0.01%) . . . * /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/alloc/src/alloc.rs:regex_automata::nfa::thompson::builder::Builder::build + 2,882,121 ( 0.83%) 20,341 ( 2.51%) . . > ???:__rust_alloc (12,199x) [./target/valgrind/s4] + 76,459 ( 0.02%) 356 ( 0.04%) . . > ???:__rust_alloc_zeroed (175x) [./target/valgrind/s4] + 74,944 ( 0.02%) 710 ( 0.09%) . . > ???:__rust_dealloc (525x) [./target/valgrind/s4] + + 42,600 ( 0.01%) . . . * /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/core/src/cmp.rs:regex_syntax::unicode::SimpleCaseFolder::mapping + + 42,588 ( 0.01%) . . . * /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/core/src/result.rs:regex_syntax::ast::parse::ParserI

::parse_set_class_range + + 42,538 ( 0.01%) . . . * /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/alloc/src/vec/mod.rs:regex_syntax::ast::parse::ParserI

::parse_set_class + 434,983 ( 0.13%) 888 ( 0.11%) . . > /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/alloc/src/raw_vec.rs:alloc::raw_vec::RawVec::reserve_for_push (2,914x) [./target/valgrind/s4] + + 42,264 ( 0.01%) . . . * /home/.cargo/registry/src/index.crates.io-6f17d22bba15001f/regex-automata-0.4.6/src/dfa/onepass.rs:regex_automata::dfa::remapper::onepass::::remap + + 165,920 ( 0.05%) . . . < /home/.cargo/registry/src/index.crates.io-6f17d22bba15001f/regex-syntax-0.8.2/src/hir/mod.rs:::case_fold_simple (1,120x) [./target/valgrind/s4] + 41,730 ( 0.01%) . . . * /home/.cargo/registry/src/index.crates.io-6f17d22bba15001f/regex-syntax-0.8.2/src/unicode.rs:regex_syntax::unicode::SimpleCaseFolder::mapping [./target/valgrind/s4] + + 41,703 ( 0.01%) . . . * /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/core/src/option.rs:::visit_class_set_item_post + + 41,671 ( 0.01%) . . . * /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/core/src/cmp.rs:regex_syntax::hir::interval::IntervalSet::canonicalize + + 5,280,529 ( 1.53%) 17,926 ( 2.21%) . . < /home/.cargo/registry/src/index.crates.io-6f17d22bba15001f/regex-syntax-0.8.2/src/hir/literal.rs:regex_automata::meta::reverse_inner::prefilter (44x) + 4,898,468 ( 1.42%) 10,042 ( 1.24%) . . < /home/.cargo/registry/src/index.crates.io-6f17d22bba15001f/regex-syntax-0.8.2/src/hir/literal.rs:regex_automata::util::prefilter::prefixes (16x) + 3,807 ( 0.00%) . . . < /home/.cargo/registry/src/index.crates.io-6f17d22bba15001f/regex-syntax-0.8.2/src/hir/literal.rs:regex_automata::util::prefilter::suffixes (13x) + 41,351 ( 0.01%) . . . * /home/.cargo/registry/src/index.crates.io-6f17d22bba15001f/regex-syntax-0.8.2/src/hir/literal.rs:regex_syntax::hir::literal::Seq::optimize_by_preference [./target/valgrind/s4] +10,039,745 ( 2.90%) 27,968 ( 3.45%) . . > /home/.cargo/registry/src/index.crates.io-6f17d22bba15001f/regex-syntax-0.8.2/src/hir/literal.rs:regex_syntax::hir::literal::PreferenceTrie::minimize (177x) [./target/valgrind/s4] + + 166,504 ( 0.05%) 302 ( 0.04%) . . < /home/.cargo/registry/src/index.crates.io-6f17d22bba15001f/aho-corasick-1.1.2/src/nfa/noncontiguous.rs:aho_corasick::nfa::noncontiguous::Builder::build (1,394x) [./target/valgrind/s4] + 40,426 ( 0.01%) . . . * /home/.cargo/registry/src/index.crates.io-6f17d22bba15001f/aho-corasick-1.1.2/src/nfa/noncontiguous.rs:aho_corasick::nfa::noncontiguous::NFA::add_match [./target/valgrind/s4] + + 234,891 ( 0.07%) 260 ( 0.03%) . . < /home/.cargo/registry/src/index.crates.io-6f17d22bba15001f/regex-automata-0.4.6/src/dfa/onepass.rs:regex_automata::dfa::onepass::Builder::build_from_nfa (2,672x) [./target/valgrind/s4] + 40,291 ( 0.01%) . . . * /home/.cargo/registry/src/index.crates.io-6f17d22bba15001f/regex-automata-0.4.6/src/dfa/onepass.rs:regex_automata::dfa::onepass::InternalBuilder::stack_push [./target/valgrind/s4] + + 39,840 ( 0.01%) . . . * /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/core/src/cmp.rs:aho_corasick::util::prefilter::Builder::build + + 39,772 ( 0.01%) . . . * /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/core/src/ptr/mut_ptr.rs:regex_automata::nfa::thompson::compiler::Compiler::c'2 + + 255,431 ( 0.07%) 102 ( 0.01%) . . < /cargo/registry/src/index.crates.io-6f17d22bba15001f/hashbrown-0.12.3/src/raw/mod.rs:hashbrown::raw::RawTable::insert (347x) [./target/valgrind/s4] + 39,710 ( 0.01%) . . . * /cargo/registry/src/index.crates.io-6f17d22bba15001f/hashbrown-0.12.3/src/raw/mod.rs:hashbrown::raw::RawTable::reserve_rehash [./target/valgrind/s4] + + 39,399 ( 0.01%) . . . * /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/alloc/src/boxed.rs:regex_syntax::ast::parse::ParserI

::parse_uncounted_repetition + + 39,283 ( 0.01%) . . . * /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/alloc/src/vec/set_len_on_drop.rs: as alloc::vec::spec_extend::SpecExtend>::spec_extend + + 112,203 ( 0.03%) . . . < ./elf/../sysdeps/x86_64/dl-machine.h:_dl_relocate_object (178x) + 4,019 ( 0.00%) . . . < ./elf/./elf/dl-runtime.c:_dl_fixup (6x) [/usr/lib/x86_64-linux-gnu/ld-linux-x86-64.so.2] + 2,280 ( 0.00%) . . . < ./elf/./elf/dl-minimal.c:lookup_malloc_symbol (4x) [/usr/lib/x86_64-linux-gnu/ld-linux-x86-64.so.2] + 703 ( 0.00%) . . . < ./elf/./elf/dl-sym.c:_dl_sym (1x) [/usr/lib/x86_64-linux-gnu/libc.so.6] + 39,059 ( 0.01%) . . . * ./elf/./elf/dl-lookup.c:_dl_lookup_symbol_x [/usr/lib/x86_64-linux-gnu/ld-linux-x86-64.so.2] + 80,146 ( 0.02%) . . . > ./elf/./elf/dl-lookup.c:do_lookup_x (189x) [/usr/lib/x86_64-linux-gnu/ld-linux-x86-64.so.2] + + 38,786 ( 0.01%) . . . * /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/core/src/alloc/layout.rs:alloc::sync::arcinner_layout_for_value_layout + + 38,180 ( 0.01%) . . . * /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/alloc/src/raw_vec.rs:regex_syntax::hir::Hir::alternation + + 38,142 ( 0.01%) . . . * /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/core/src/slice/index.rs:aho_corasick::dfa::Builder::finish_build_both_starts::{{closure}} + + 37,436 ( 0.01%) . . . * /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/core/src/ptr/mod.rs:regex_syntax::ast::parse::ParserI

::pop_class + 90,936 ( 0.03%) . . . > /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/alloc/src/vec/mod.rs: as core::ops::drop::Drop>::drop (5,052x) [./target/valgrind/s4] + 84,720 ( 0.02%) . . . > ./string/../sysdeps/x86_64/multiarch/memmove-vec-unaligned-erms.S:__memcpy_avx_unaligned_erms (2,824x) [/usr/lib/x86_64-linux-gnu/libc.so.6] + + 37,104 ( 0.01%) . . . * /home/.cargo/registry/src/index.crates.io-6f17d22bba15001f/aho-corasick-1.1.2/src/util/primitives.rs:aho_corasick::nfa::noncontiguous::Compiler::set_anchored_start_state + + 37,008 ( 0.01%) . . . * /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/core/src/option.rs:aho_corasick::nfa::noncontiguous::Compiler::set_anchored_start_state + + 36,931 ( 0.01%) . . . * /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/core/src/ptr/mut_ptr.rs:regex_syntax::hir::literal::Extractor::cross + + 36,864 ( 0.01%) . . . * /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/alloc/src/raw_vec.rs:aho_corasick::nfa::noncontiguous::NFA::init_full_state + + 36,864 ( 0.01%) . . . * /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/core/src/ptr/mut_ptr.rs:aho_corasick::nfa::noncontiguous::NFA::init_full_state + + 36,780 ( 0.01%) . . . * /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/core/src/slice/index.rs:regex_syntax::ast::visitor::visit + + 36,720 ( 0.01%) . . . * /home/.cargo/registry/src/index.crates.io-6f17d22bba15001f/regex-syntax-0.8.2/src/ast/mod.rs:regex_syntax::ast::parse::ParserI

::parse_set_class_open + + 36,719 ( 0.01%) . . . * /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/core/src/cell.rs:regex_syntax::ast::parse::ParserI

::parse_set_class_open + + 311,723 ( 0.09%) 1,642 ( 0.20%) . . < /home/.cargo/registry/src/index.crates.io-6f17d22bba15001f/aho-corasick-1.1.2/src/dfa.rs:aho_corasick::dfa::Builder::build_from_noncontiguous (882x) [./target/valgrind/s4] + 249,266 ( 0.07%) 896 ( 0.11%) . . < /home/.cargo/registry/src/index.crates.io-6f17d22bba15001f/aho-corasick-1.1.2/src/dfa.rs:aho_corasick::dfa::Builder::finish_build_one_start (953x) [./target/valgrind/s4] + 36,700 ( 0.01%) . . . * /home/.cargo/registry/src/index.crates.io-6f17d22bba15001f/aho-corasick-1.1.2/src/dfa.rs:aho_corasick::dfa::DFA::set_matches [./target/valgrind/s4] + + 36,668 ( 0.01%) . . . * /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/core/src/convert/num.rs:regex_automata::nfa::thompson::compiler::Compiler::c'2 + + 36,155 ( 0.01%) . . . * /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/core/src/slice/mod.rs:regex_automata::nfa::thompson::literal_trie::LiteralTrie::compile + + 304,623 ( 0.09%) 102 ( 0.01%) . . < /cargo/registry/src/index.crates.io-6f17d22bba15001f/hashbrown-0.12.3/src/map.rs:hashbrown::map::HashMap::insert (921x) [./target/valgrind/s4] + 597 ( 0.00%) . . . < /cargo/registry/src/index.crates.io-6f17d22bba15001f/hashbrown-0.12.3/src/map.rs:s4::processing_loop (12x) + 135 ( 0.00%) . . . < /cargo/registry/src/index.crates.io-6f17d22bba15001f/hashbrown-0.12.3/src/map.rs:hashbrown::set::HashSet::insert (3x) + 36,060 ( 0.01%) . . . * /cargo/registry/src/index.crates.io-6f17d22bba15001f/hashbrown-0.12.3/src/raw/mod.rs:hashbrown::raw::RawTable::insert [./target/valgrind/s4] + 255,431 ( 0.07%) 102 ( 0.01%) . . > /cargo/registry/src/index.crates.io-6f17d22bba15001f/hashbrown-0.12.3/src/raw/mod.rs:hashbrown::raw::RawTable::reserve_rehash (347x) [./target/valgrind/s4] + + 35,336 ( 0.01%) . . . * /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/core/src/slice/cmp.rs:regex_syntax::hir::literal::Extractor::cross + 115,090 ( 0.03%) . . . > ./string/../sysdeps/x86_64/multiarch/memcmp-avx2-movbe.S:__memcmp_avx2_movbe (5,251x) [/usr/lib/x86_64-linux-gnu/libc.so.6] + + 35,298 ( 0.01%) . . . * /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/core/src/slice/iter/macros.rs:regex_syntax::hir::Hir::concat + + 35,292 ( 0.01%) . . . * /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/core/src/iter/range.rs:regex_automata::nfa::thompson::map::Utf8SuffixMap::clear + + 34,760 ( 0.01%) . . . * /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/alloc/src/boxed.rs:regex_automata::meta::strategy::new + 1,311 ( 0.00%) . . . > ./string/../sysdeps/x86_64/multiarch/memmove-vec-unaligned-erms.S:__memcpy_avx_unaligned_erms (13x) [/usr/lib/x86_64-linux-gnu/libc.so.6] + + 34,437 ( 0.01%) . . . * /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/alloc/src/vec/mod.rs:::drop + + 34,099 ( 0.01%) . . . * /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/alloc/src/alloc.rs:regex_syntax::hir::literal::Extractor::extract'2 + 536,036 ( 0.15%) 2,868 ( 0.35%) . . > ???:__rust_alloc (5,025x) [./target/valgrind/s4] + 213,472 ( 0.06%) 406 ( 0.05%) . . > ???:__rust_dealloc (2,035x) [./target/valgrind/s4] + + 928,541 ( 0.27%) 2,240 ( 0.28%) . . < /home/.cargo/registry/src/index.crates.io-6f17d22bba15001f/regex-syntax-0.8.2/src/hir/interval.rs:regex_syntax::hir::ClassUnicode::try_case_fold_simple (1,120x) + 14,700 ( 0.00%) . . . < /home/.cargo/registry/src/index.crates.io-6f17d22bba15001f/regex-syntax-0.8.2/src/hir/interval.rs:::visit_class_set_item_post (70x) + 33,830 ( 0.01%) . . . * /home/.cargo/registry/src/index.crates.io-6f17d22bba15001f/regex-syntax-0.8.2/src/hir/mod.rs:::case_fold_simple [./target/valgrind/s4] + 165,920 ( 0.05%) . . . > /home/.cargo/registry/src/index.crates.io-6f17d22bba15001f/regex-syntax-0.8.2/src/unicode.rs:regex_syntax::unicode::SimpleCaseFolder::mapping (1,120x) [./target/valgrind/s4] + + 1,561,216 ( 0.45%) 691 ( 0.09%) . . < /home/.cargo/registry/src/index.crates.io-6f17d22bba15001f/regex-syntax-0.8.2/src/ast/parse.rs:regex_syntax::ast::parse::ParserI

::parse_with_comments (713x) [./target/valgrind/s4] + 33,624 ( 0.01%) . . . * /home/.cargo/registry/src/index.crates.io-6f17d22bba15001f/regex-syntax-0.8.2/src/ast/parse.rs:regex_syntax::ast::parse::ParserI

::push_group [./target/valgrind/s4] + 1,447,519 ( 0.42%) 689 ( 0.09%) . . > /home/.cargo/registry/src/index.crates.io-6f17d22bba15001f/regex-syntax-0.8.2/src/ast/parse.rs:regex_syntax::ast::parse::ParserI

::parse_group (713x) [./target/valgrind/s4] + 14,244 ( 0.00%) . . . > /home/.cargo/registry/src/index.crates.io-6f17d22bba15001f/regex-syntax-0.8.2/src/ast/parse.rs:regex_syntax::ast::parse::ParserI

::char (713x) [./target/valgrind/s4] + + 33,420 ( 0.01%) . . . * /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/alloc/src/collections/btree/search.rs:aho_corasick::packed::teddy::generic::Teddy<_>::new + + 32,544 ( 0.01%) . . . * /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/alloc/src/boxed.rs:regex_syntax::hir::Properties::repetition + + 32,264 ( 0.01%) . . . * /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/core/src/num/uint_macros.rs:::visit_post + + 32,192 ( 0.01%) . . . * /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/alloc/src/slice.rs:::visit_post + + 31,943 ( 0.01%) . . . * /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/core/src/iter/adapters/map.rs:regex_automata::nfa::thompson::compiler::Compiler::c'2 + + 31,858 ( 0.01%) . . . * /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/alloc/src/raw_vec.rs:regex_syntax::ast::parse::ParserI

::push_alternate + + 31,858 ( 0.01%) . . . * /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/core/src/cell.rs:regex_syntax::ast::visitor::visit + + 31,648 ( 0.01%) . . . * /home/.cargo/registry/src/index.crates.io-6f17d22bba15001f/regex-automata-0.4.6/src/util/sparse_set.rs:regex_automata::dfa::onepass::InternalBuilder::stack_push + + 31,554 ( 0.01%) . . . * /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/core/src/slice/iter/macros.rs:regex_automata::nfa::thompson::compiler::Compiler::c_alt_iter + + 31,335 ( 0.01%) . . . * /home/.cargo/registry/src/index.crates.io-6f17d22bba15001f/aho-corasick-1.1.2/src/util/alphabet.rs:aho_corasick::nfa::noncontiguous::Compiler::densify + + 30,782 ( 0.01%) . . . * /home/.cargo/registry/src/index.crates.io-6f17d22bba15001f/regex-automata-0.4.6/src/util/alphabet.rs:regex_automata::dfa::onepass::InternalBuilder::compile_transition + + 245,756 ( 0.07%) . . . < /cargo/registry/src/index.crates.io-6f17d22bba15001f/hashbrown-0.12.3/src/map.rs:hashbrown::map::HashMap::insert (1,269x) [./target/valgrind/s4] + 137,878 ( 0.04%) . . . < /cargo/registry/src/index.crates.io-6f17d22bba15001f/hashbrown-0.12.3/src/map.rs:hashbrown::raw::RawTable::reserve_rehash (748x) + 80,442 ( 0.02%) . . . < /cargo/registry/src/index.crates.io-6f17d22bba15001f/hashbrown-0.12.3/src/map.rs:regex_automata::util::captures::GroupInfo::new (505x) + 47,138 ( 0.01%) . . . < /cargo/registry/src/index.crates.io-6f17d22bba15001f/hashbrown-0.12.3/src/map.rs:regex_automata::hybrid::dfa::Lazy::cache_next_state (218x) + 10,185 ( 0.00%) . . . < /cargo/registry/src/index.crates.io-6f17d22bba15001f/hashbrown-0.12.3/src/map.rs:regex_automata::util::captures::Captures::get_group_by_name (65x) + 10,134 ( 0.00%) . . . < /cargo/registry/src/index.crates.io-6f17d22bba15001f/hashbrown-0.12.3/src/map.rs:regex_automata::hybrid::dfa::Lazy::cache_start_group (41x) + 1,869 ( 0.00%) . . . < /cargo/registry/src/index.crates.io-6f17d22bba15001f/hashbrown-0.12.3/src/map.rs:s4::processing_loop (21x) + 267 ( 0.00%) . . . < /cargo/registry/src/index.crates.io-6f17d22bba15001f/hashbrown-0.12.3/src/map.rs:hashbrown::set::HashSet::insert (3x) + 267 ( 0.00%) . . . < /cargo/registry/src/index.crates.io-6f17d22bba15001f/hashbrown-0.12.3/src/map.rs:hashbrown::set::HashSet::remove (3x) + 30,750 ( 0.01%) . . . * /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/core/src/hash/mod.rs:core::hash::BuildHasher::hash_one [./target/valgrind/s4] + 57,495 ( 0.02%) . . . > /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/core/src/hash/sip.rs: as core::hash::Hasher>::write (1,637x) [./target/valgrind/s4] + + 30,008 ( 0.01%) . . . * /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/alloc/src/boxed.rs:regex_syntax::hir::Properties::class + + 249,373 ( 0.07%) 596 ( 0.07%) . . < /home/.cargo/registry/src/index.crates.io-6f17d22bba15001f/regex-automata-0.4.6/src/nfa/thompson/compiler.rs:regex_automata::nfa::thompson::compiler::Compiler::c_exactly (210x) [./target/valgrind/s4] + 120,226 ( 0.03%) 248 ( 0.03%) . . < /home/.cargo/registry/src/index.crates.io-6f17d22bba15001f/regex-automata-0.4.6/src/nfa/thompson/compiler.rs:regex_automata::nfa::thompson::compiler::Compiler::c_bounded (134x) [./target/valgrind/s4] + 29,858 ( 0.01%) . . . * /home/.cargo/registry/src/index.crates.io-6f17d22bba15001f/regex-automata-0.4.6/src/nfa/thompson/compiler.rs:regex_automata::nfa::thompson::compiler::Compiler::c_concat [./target/valgrind/s4] + 326,403 ( 0.09%) 844 ( 0.10%) . . > /home/.cargo/registry/src/index.crates.io-6f17d22bba15001f/regex-automata-0.4.6/src/nfa/thompson/compiler.rs:regex_automata::nfa::thompson::compiler::Compiler::c'2 (580x) [./target/valgrind/s4] + 8,496 ( 0.00%) . . . > /home/.cargo/registry/src/index.crates.io-6f17d22bba15001f/regex-automata-0.4.6/src/nfa/thompson/builder.rs:regex_automata::nfa::thompson::builder::Builder::patch (236x) [./target/valgrind/s4] + + 29,646 ( 0.01%) . . . * /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/core/src/slice/iter.rs:regex_syntax::hir::interval::IntervalSet::canonicalize + + 29,568 ( 0.01%) . . . * /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/core/src/ptr/mod.rs:::next + + 475,225 ( 0.14%) 899 ( 0.11%) . . < /home/.cargo/registry/src/index.crates.io-6f17d22bba15001f/regex-automata-0.4.6/src/nfa/thompson/compiler.rs:regex_automata::nfa::thompson::compiler::Utf8Compiler::compile_from (1,553x) [./target/valgrind/s4] + 51,219 ( 0.01%) 110 ( 0.01%) . . < /home/.cargo/registry/src/index.crates.io-6f17d22bba15001f/regex-automata-0.4.6/src/nfa/thompson/compiler.rs:regex_automata::nfa::thompson::compiler::Utf8Compiler::finish (126x) [./target/valgrind/s4] + 29,407 ( 0.01%) . . . * /home/.cargo/registry/src/index.crates.io-6f17d22bba15001f/regex-automata-0.4.6/src/nfa/thompson/compiler.rs:regex_automata::nfa::thompson::compiler::Utf8Compiler::compile [./target/valgrind/s4] + + 29,272 ( 0.01%) . . . * /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/core/src/slice/cmp.rs:aho_corasick::packed::teddy::generic::Teddy<_>::new + 79,418 ( 0.02%) . . . > ./string/../sysdeps/x86_64/multiarch/memcmp-avx2-movbe.S:__memcmp_avx2_movbe (3,659x) [/usr/lib/x86_64-linux-gnu/libc.so.6] + + 29,234 ( 0.01%) . . . * /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/core/src/option.rs:regex_syntax::hir::literal::Extractor::union + + 28,854 ( 0.01%) . . . * /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/core/src/intrinsics.rs:regex_automata::nfa::thompson::literal_trie::LiteralTrie::add + 56,690 ( 0.02%) . . . > ./string/../sysdeps/x86_64/multiarch/memmove-vec-unaligned-erms.S:__memcpy_avx_unaligned_erms (4,122x) [/usr/lib/x86_64-linux-gnu/libc.so.6] + + 620,064 ( 0.18%) 3,085 ( 0.38%) . . < /home/.cargo/registry/src/index.crates.io-6f17d22bba15001f/aho-corasick-1.1.2/src/packed/api.rs:aho_corasick::packed::api::Builder::extend (1,394x) [./target/valgrind/s4] + 28,240 ( 0.01%) . . . * /home/.cargo/registry/src/index.crates.io-6f17d22bba15001f/aho-corasick-1.1.2/src/packed/pattern.rs:aho_corasick::packed::pattern::Patterns::add [./target/valgrind/s4] + + 364,819 ( 0.11%) 786 ( 0.10%) . . < /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/core/src/fmt/mod.rs:core::fmt::Formatter::pad (1,863x) [./target/valgrind/s4] + 782 ( 0.00%) . . . < /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/core/src/fmt/mod.rs:core::fmt::Formatter::pad_integral (6x) [./target/valgrind/s4] + 86 ( 0.00%) . . . < /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/core/src/fmt/mod.rs:core::fmt::write (2x) [./target/valgrind/s4] + 28,065 ( 0.01%) . . . * /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/alloc/src/string.rs:::write_str [./target/valgrind/s4] + + 27,934 ( 0.01%) . . . * /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/alloc/src/raw_vec.rs:::drop + + 27,830 ( 0.01%) . . . * /home/.cargo/registry/src/index.crates.io-6f17d22bba15001f/regex-syntax-0.8.2/src/hir/mod.rs:regex_automata::meta::reverse_inner::flatten'2 + 666,828 ( 0.19%) 3,616 ( 0.45%) . . > /home/.cargo/registry/src/index.crates.io-6f17d22bba15001f/regex-syntax-0.8.2/src/hir/mod.rs:regex_syntax::hir::Properties::literal (1,912x) [./target/valgrind/s4] + 51,588 ( 0.01%) 296 ( 0.04%) . . > /home/.cargo/registry/src/index.crates.io-6f17d22bba15001f/regex-syntax-0.8.2/src/hir/mod.rs:regex_syntax::hir::Properties::class (159x) [./target/valgrind/s4] + 24,658 ( 0.01%) 136 ( 0.02%) . . > /home/.cargo/registry/src/index.crates.io-6f17d22bba15001f/regex-syntax-0.8.2/src/hir/mod.rs:regex_syntax::hir::Properties::repetition (74x) [./target/valgrind/s4] + 5,023 ( 0.00%) . . . > /home/.cargo/registry/src/index.crates.io-6f17d22bba15001f/regex-syntax-0.8.2/src/hir/mod.rs:regex_syntax::hir::Class::literal (159x) [./target/valgrind/s4] + 477 ( 0.00%) . . . > /home/.cargo/registry/src/index.crates.io-6f17d22bba15001f/regex-syntax-0.8.2/src/hir/mod.rs:regex_syntax::hir::Class::is_empty (159x) [./target/valgrind/s4] + 333 ( 0.00%) 2 ( 0.00%) . . > /home/.cargo/registry/src/index.crates.io-6f17d22bba15001f/regex-syntax-0.8.2/src/hir/mod.rs:regex_syntax::hir::Properties::look (2x) [./target/valgrind/s4] + 148 ( 0.00%) . . . > /home/.cargo/registry/src/index.crates.io-6f17d22bba15001f/regex-syntax-0.8.2/src/hir/mod.rs:regex_syntax::hir::Hir::properties (74x) [./target/valgrind/s4] + + 27,711 ( 0.01%) . . . * /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/alloc/src/vec/mod.rs:::next + + 664,526 ( 0.19%) 3,085 ( 0.38%) . . < /home/.cargo/registry/src/index.crates.io-6f17d22bba15001f/regex-automata-0.4.6/src/util/prefilter/teddy.rs:regex_automata::util::prefilter::teddy::Teddy::new (48x) [./target/valgrind/s4] + 27,686 ( 0.01%) . . . * /home/.cargo/registry/src/index.crates.io-6f17d22bba15001f/aho-corasick-1.1.2/src/packed/api.rs:aho_corasick::packed::api::Builder::extend [./target/valgrind/s4] + 620,064 ( 0.18%) 3,085 ( 0.38%) . . > /home/.cargo/registry/src/index.crates.io-6f17d22bba15001f/aho-corasick-1.1.2/src/packed/pattern.rs:aho_corasick::packed::pattern::Patterns::add (1,394x) [./target/valgrind/s4] + 5,576 ( 0.00%) . . . > /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/alloc/src/vec/mod.rs:aho_corasick::packed::pattern::Patterns::len (2,788x) [./target/valgrind/s4] + + 27,496 ( 0.01%) . . . * /home/.cargo/registry/src/index.crates.io-6f17d22bba15001f/aho-corasick-1.1.2/src/util/primitives.rs:aho_corasick::nfa::noncontiguous::NFA::add_transition + + 181,991 ( 0.05%) 410 ( 0.05%) . . < /home/.cargo/registry/src/index.crates.io-6f17d22bba15001f/regex-automata-0.4.6/src/nfa/thompson/compiler.rs:regex_automata::nfa::thompson::compiler::Compiler::c_cap'2 (693x) [./target/valgrind/s4] + 40,492 ( 0.01%) 82 ( 0.01%) . . < /home/.cargo/registry/src/index.crates.io-6f17d22bba15001f/regex-automata-0.4.6/src/nfa/thompson/compiler.rs:regex_automata::nfa::thompson::compiler::Compiler::c_cap (81x) [./target/valgrind/s4] + 27,414 ( 0.01%) . . . * /home/.cargo/registry/src/index.crates.io-6f17d22bba15001f/regex-automata-0.4.6/src/nfa/thompson/builder.rs:regex_automata::nfa::thompson::builder::Builder::add_capture_start [./target/valgrind/s4] + 52,307 ( 0.02%) 52 ( 0.01%) . . > /home/.cargo/registry/src/index.crates.io-6f17d22bba15001f/regex-automata-0.4.6/src/nfa/thompson/builder.rs:regex_automata::nfa::thompson::builder::Builder::add (774x) [./target/valgrind/s4] + + 27,235 ( 0.01%) . . . * /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/core/src/num/uint_macros.rs: as core::hash::Hasher>::write + + 26,584 ( 0.01%) . . . * /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/core/src/num/uint_macros.rs: as core::ops::drop::Drop>::drop + + 26,456 ( 0.01%) . . . * /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/core/src/ptr/mod.rs:regex_automata::nfa::thompson::compiler::Compiler::patch + + 26,344 ( 0.01%) . . . * /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/core/src/ptr/const_ptr.rs:regex_automata::nfa::thompson::compiler::Compiler::c'2 + + 25,888 ( 0.01%) . . . * /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/core/src/slice/index.rs:regex_automata::dfa::onepass::InternalBuilder::stack_push + + 25,852 ( 0.01%) . . . < ./stdlib/../stdlib/strtol.c:__strtoul_internal (102x) [/usr/lib/x86_64-linux-gnu/libc.so.6] + 25,852 ( 0.01%) . . . * ./stdlib/../stdlib/strtol_l.c:____strtoul_l_internal [/usr/lib/x86_64-linux-gnu/libc.so.6] + + 25,491 ( 0.01%) . . . * /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/core/src/slice/iter/macros.rs:regex_syntax::hir::literal::Seq::cross_preamble + + 25,416 ( 0.01%) . . . * /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/alloc/src/vec/mod.rs:regex_syntax::ast::parse::ParserI

::pop_class_op + + 25,370 ( 0.01%) . . . * /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/alloc/src/vec/mod.rs: as alloc::vec::spec_extend::SpecExtend>::spec_extend + + 883,512 ( 0.26%) 2,456 ( 0.30%) 2 ( 0.65%) . < /home/.cargo/registry/src/index.crates.io-6f17d22bba15001f/regex-automata-0.4.6/src/nfa/thompson/nfa.rs:regex_automata::nfa::thompson::builder::Builder::build (175x) + 25,308 ( 0.01%) . . . * /home/.cargo/registry/src/index.crates.io-6f17d22bba15001f/regex-automata-0.4.6/src/util/captures.rs:regex_automata::util::captures::GroupInfo::new [./target/valgrind/s4] + 71,177 ( 0.02%) 294 ( 0.04%) 2 ( 0.65%) . > /home/.cargo/registry/src/index.crates.io-6f17d22bba15001f/regex-automata-0.4.6/src/util/captures.rs:regex_automata::util::captures::GroupInfoInner::add_first_group (81x) [./target/valgrind/s4] + 3,882 ( 0.00%) . . . > /home/.cargo/registry/src/index.crates.io-6f17d22bba15001f/regex-automata-0.4.6/src/util/captures.rs:regex_automata::util::captures::GroupInfoInner::fixup_slot_ranges (175x) [./target/valgrind/s4] + + 25,261 ( 0.01%) . . . * /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/alloc/src/collections/btree/search.rs:alloc::collections::btree::map::BTreeMap::insert + + 24,909 ( 0.01%) . . . * ./malloc/./malloc/arena.c:calloc + + 24,903 ( 0.01%) . . . * /home/.cargo/registry/src/index.crates.io-6f17d22bba15001f/aho-corasick-1.1.2/src/nfa/noncontiguous.rs:aho_corasick::dfa::Builder::build_from_noncontiguous + + 24,720 ( 0.01%) . . . * /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/core/src/slice/index.rs:aho_corasick::nfa::noncontiguous::Compiler::add_unanchored_start_state_loop + + 18,198 ( 0.01%) . . . < /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/core/src/ptr/mod.rs:regex_automata::nfa::thompson::compiler::Compiler::new (674x) + 14,700 ( 0.00%) . . . < /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/core/src/ptr/mod.rs:::drop (525x) + 31 ( 0.00%) . . . < /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/core/src/ptr/mod.rs:s4::processing_loop (1x) + 24,677 ( 0.01%) . . . * /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/alloc/src/vec/drain.rs: as core::ops::drop::Drop>::drop [./target/valgrind/s4] + + 24,672 ( 0.01%) . . . * /home/.cargo/registry/src/index.crates.io-6f17d22bba15001f/aho-corasick-1.1.2/src/util/primitives.rs:aho_corasick::nfa::noncontiguous::Compiler::add_unanchored_start_state_loop + + 24,576 ( 0.01%) . . . * /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/core/src/ops/range.rs:aho_corasick::util::prefilter::Builder::build + + 24,576 ( 0.01%) . . . * /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/core/src/slice/index.rs:aho_corasick::util::prefilter::Builder::build + + 48,978 ( 0.01%) . . . < /home/.cargo/registry/src/index.crates.io-6f17d22bba15001f/regex-automata-0.4.6/src/util/determinize/mod.rs:regex_automata::util::determinize::next (218x) [./target/valgrind/s4] + 24,506 ( 0.01%) . . . * /home/.cargo/registry/src/index.crates.io-6f17d22bba15001f/regex-automata-0.4.6/src/util/determinize/state.rs:regex_automata::util::determinize::state::State::iter_nfa_state_ids [./target/valgrind/s4] + + 24,295 ( 0.01%) . . . * /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/core/src/ptr/mod.rs:regex_syntax::ast::parse::ParserI

::push_group + + 24,250 ( 0.01%) . . . * /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/core/src/num/uint_macros.rs:regex_syntax::hir::literal::Extractor::cross + + 23,980 ( 0.01%) . . . * /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/core/src/slice/index.rs:regex_automata::dfa::remapper::onepass::::remap + + 23,715 ( 0.01%) . . . * /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/core/src/cmp.rs:aho_corasick::packed::teddy::generic::Teddy<_>::new + + 23,540 ( 0.01%) . . . * /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/alloc/src/vec/mod.rs:regex_automata::nfa::thompson::compiler::Utf8Compiler::compile_from + 354,385 ( 0.10%) 943 ( 0.12%) . . > /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/alloc/src/raw_vec.rs:alloc::raw_vec::RawVec::reserve_for_push (1,851x) [./target/valgrind/s4] + + 3,326,197 ( 0.96%) 6,496 ( 0.80%) . . < /home/.cargo/registry/src/index.crates.io-6f17d22bba15001f/regex-automata-0.4.6/src/meta/reverse_inner.rs:regex_automata::meta::reverse_inner::prefilter (44x) [./target/valgrind/s4] + 2,472,218 ( 0.71%) 6,559 ( 0.81%) . . < /home/.cargo/registry/src/index.crates.io-6f17d22bba15001f/regex-automata-0.4.6/src/util/prefilter/mod.rs:regex_automata::util::prefilter::prefixes (16x) [./target/valgrind/s4] + 2,442,396 ( 0.71%) 5,093 ( 0.63%) . . < /home/.cargo/registry/src/index.crates.io-6f17d22bba15001f/regex-automata-0.4.6/src/util/prefilter/mod.rs:regex_automata::util::prefilter::suffixes (13x) [./target/valgrind/s4] + 23,424 ( 0.01%) . . . * /home/.cargo/registry/src/index.crates.io-6f17d22bba15001f/regex-syntax-0.8.2/src/hir/literal.rs:regex_syntax::hir::literal::Extractor::extract [./target/valgrind/s4] + 5,171,925 ( 1.49%) 9,430 ( 1.16%) . . > /home/.cargo/registry/src/index.crates.io-6f17d22bba15001f/regex-syntax-0.8.2/src/hir/literal.rs:regex_syntax::hir::literal::Extractor::extract'2 (975x) [./target/valgrind/s4] + 1,874,581 ( 0.54%) 8,392 ( 1.04%) . . > /home/.cargo/registry/src/index.crates.io-6f17d22bba15001f/regex-syntax-0.8.2/src/hir/literal.rs:regex_syntax::hir::literal::Extractor::cross (111x) [./target/valgrind/s4] + 1,035,803 ( 0.30%) 254 ( 0.03%) . . > /home/.cargo/registry/src/index.crates.io-6f17d22bba15001f/regex-syntax-0.8.2/src/hir/literal.rs:regex_syntax::hir::literal::Extractor::union (864x) [./target/valgrind/s4] + 2,759 ( 0.00%) 4 ( 0.00%) . . > ???:__rust_alloc (42x) [./target/valgrind/s4] + + 23,216 ( 0.01%) . . . * /home/.cargo/registry/src/index.crates.io-6f17d22bba15001f/regex-automata-0.4.6/src/util/primitives.rs:regex_automata::dfa::onepass::InternalBuilder::stack_push + + 23,175 ( 0.01%) . . . * /cargo/registry/src/index.crates.io-6f17d22bba15001f/hashbrown-0.12.3/src/raw/mod.rs:hashbrown::map::HashMap::insert + + 23,136 ( 0.01%) . . . * /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/core/src/intrinsics.rs:aho_corasick::util::remapper::Remapper::swap + + 22,969 ( 0.01%) . . . * /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/alloc/src/raw_vec.rs:regex_syntax::hir::literal::Extractor::extract'2 + + 666,828 ( 0.19%) 3,616 ( 0.45%) . . < /home/.cargo/registry/src/index.crates.io-6f17d22bba15001f/regex-syntax-0.8.2/src/hir/mod.rs:regex_automata::meta::reverse_inner::flatten'2 (1,912x) + 22,944 ( 0.01%) . . . * /home/.cargo/registry/src/index.crates.io-6f17d22bba15001f/regex-syntax-0.8.2/src/hir/mod.rs:regex_syntax::hir::Properties::literal [./target/valgrind/s4] + 100,845 ( 0.03%) . . . > /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/core/src/str/converts.rs:core::str::converts::from_utf8 (1,912x) [./target/valgrind/s4] + + 22,723 ( 0.01%) . . . * /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/core/src/ptr/mod.rs:regex_automata::hybrid::dfa::Lazy::init_cache + + 919,635 ( 0.27%) 339 ( 0.04%) . . < /home/.cargo/registry/src/index.crates.io-6f17d22bba15001f/regex-automata-0.4.6/src/meta/wrappers.rs:regex_automata::meta::wrappers::Hybrid::new (162x) [./target/valgrind/s4] + 72,315 ( 0.02%) 26 ( 0.00%) . . < /home/.cargo/registry/src/index.crates.io-6f17d22bba15001f/regex-automata-0.4.6/src/meta/wrappers.rs:regex_automata::meta::wrappers::ReverseHybrid::new (13x) [./target/valgrind/s4] + 22,711 ( 0.01%) . . . * /home/.cargo/registry/src/index.crates.io-6f17d22bba15001f/regex-automata-0.4.6/src/hybrid/dfa.rs:regex_automata::hybrid::dfa::Builder::build_from_nfa [./target/valgrind/s4] + 67,176 ( 0.02%) . . . > /home/.cargo/registry/src/index.crates.io-6f17d22bba15001f/regex-automata-0.4.6/src/util/determinize/state.rs:regex_automata::util::determinize::state::State::dead (175x) [./target/valgrind/s4] + 23,975 ( 0.01%) . . . > ./string/../sysdeps/x86_64/multiarch/memmove-vec-unaligned-erms.S:__memcpy_avx_unaligned_erms (525x) [/usr/lib/x86_64-linux-gnu/libc.so.6] + + 22,706 ( 0.01%) . . . * /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/alloc/src/vec/mod.rs:regex_syntax::ast::parse::ParserI

::pop_class + 8,023 ( 0.00%) . . . > /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/alloc/src/raw_vec.rs:alloc::raw_vec::RawVec::reserve_for_push (71x) [./target/valgrind/s4] + + 511,566 ( 0.15%) 506 ( 0.06%) . . < /home/.cargo/registry/src/index.crates.io-6f17d22bba15001f/regex-automata-0.4.6/src/hybrid/dfa.rs:regex_automata::hybrid::search::find_fwd (218x) + 22,692 ( 0.01%) . . . * /home/.cargo/registry/src/index.crates.io-6f17d22bba15001f/regex-automata-0.4.6/src/hybrid/dfa.rs:regex_automata::hybrid::dfa::Lazy::cache_next_state [./target/valgrind/s4] + 151,074 ( 0.04%) 2 ( 0.00%) . . > /home/.cargo/registry/src/index.crates.io-6f17d22bba15001f/regex-automata-0.4.6/src/util/determinize/mod.rs:regex_automata::util::determinize::next (218x) [./target/valgrind/s4] + 7,194 ( 0.00%) . . . > /home/.cargo/registry/src/index.crates.io-6f17d22bba15001f/regex-automata-0.4.6/src/hybrid/dfa.rs:regex_automata::hybrid::dfa::Lazy::set_transition (218x) [./target/valgrind/s4] + 1,914 ( 0.00%) . . . > /home/.cargo/registry/src/index.crates.io-6f17d22bba15001f/regex-automata-0.4.6/src/hybrid/dfa.rs:regex_automata::hybrid::dfa::Lazy::next_state_id (174x) [./target/valgrind/s4] + + 22,649 ( 0.01%) . . . * /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/alloc/src/raw_vec.rs:regex_syntax::ast::parse::ParserI

::pop_class + + 22,631 ( 0.01%) . . . * /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/alloc/src/vec/mod.rs:regex_automata::hybrid::dfa::Lazy::set_transition + + 31,216 ( 0.01%) . . . < /home/.cargo/registry/src/index.crates.io-6f17d22bba15001f/regex-syntax-0.8.2/src/ast/parse.rs:regex_syntax::ast::parse::ParserI

::maybe_parse_ascii_class (770x) [./target/valgrind/s4] + 22,348 ( 0.01%) . . . * /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/core/src/slice/cmp.rs:regex_syntax::ast::ClassAsciiKind::from_name [./target/valgrind/s4] + + 22,280 ( 0.01%) . . . * /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/core/src/convert/num.rs:regex_automata::hybrid::dfa::Lazy::set_transition + + 22,269 ( 0.01%) . . . * /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/alloc/src/vec/mod.rs:regex_syntax::ast::parse::ParserI

::parse_uncounted_repetition + + 22,269 ( 0.01%) . . . * /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/core/src/cell.rs:regex_syntax::ast::parse::ParserI

::parse_uncounted_repetition + + 22,141 ( 0.01%) . . . * /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/alloc/src/raw_vec.rs:::visit_pre + + 21,956 ( 0.01%) . . . * /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/core/src/intrinsics.rs:alloc::vec::from_elem + 69,914 ( 0.02%) . . . > ./string/../sysdeps/x86_64/multiarch/memmove-vec-unaligned-erms.S:__memcpy_avx_unaligned_erms (5,378x) [/usr/lib/x86_64-linux-gnu/libc.so.6] + + 21,794 ( 0.01%) . . . * /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/core/src/cell.rs:regex_syntax::ast::parse::ParserI

::parse_set_class + + 21,768 ( 0.01%) . . . * /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/alloc/src/alloc.rs:regex_automata::nfa::thompson::literal_trie::LiteralTrie::compile + 1,087,118 ( 0.31%) 335 ( 0.04%) . . > ???:__rust_dealloc (10,884x) [./target/valgrind/s4] + + 21,753 ( 0.01%) . . . * /home/.cargo/registry/src/index.crates.io-6f17d22bba15001f/regex-syntax-0.8.2/src/hir/mod.rs:::next + + 29,612 ( 0.01%) . . . < /home/.cargo/registry/src/index.crates.io-6f17d22bba15001f/aho-corasick-1.1.2/src/nfa/noncontiguous.rs:aho_corasick::nfa::noncontiguous::Compiler::fill_failure_transitions (673x) [./target/valgrind/s4] + 2,112 ( 0.00%) . . . < /home/.cargo/registry/src/index.crates.io-6f17d22bba15001f/aho-corasick-1.1.2/src/nfa/noncontiguous.rs:aho_corasick::nfa::noncontiguous::Compiler::set_anchored_start_state (48x) [./target/valgrind/s4] + 21,630 ( 0.01%) . . . * /home/.cargo/registry/src/index.crates.io-6f17d22bba15001f/aho-corasick-1.1.2/src/nfa/noncontiguous.rs:aho_corasick::nfa::noncontiguous::NFA::copy_matches [./target/valgrind/s4] + + 21,629 ( 0.01%) . . . * /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/core/src/num/uint_macros.rs: as regex_syntax::ast::visitor::Visitor>::visit_pre + + 21,629 ( 0.01%) . . . * /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/core/src/option.rs: as regex_syntax::ast::visitor::Visitor>::visit_pre + + 21,564 ( 0.01%) . . . * /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/alloc/src/alloc.rs:alloc::raw_vec::RawVec::allocate_in + 1,166,705 ( 0.34%) 7,835 ( 0.97%) . . > ???:__rust_alloc (5,391x) [./target/valgrind/s4] + + 21,551 ( 0.01%) . . . * /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/core/src/alloc/layout.rs:alloc::raw_vec::RawVec::allocate_in + + 21,533 ( 0.01%) . . . * /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/alloc/src/alloc.rs:core::ptr::drop_in_place'2 + 335,214 ( 0.10%) 2,603 ( 0.32%) . . > ???:__rust_dealloc (2,598x) [./target/valgrind/s4] + + 65,950 ( 0.02%) 55 ( 0.01%) . . < /home/.cargo/registry/src/index.crates.io-6f17d22bba15001f/regex-syntax-0.8.2/src/hir/translate.rs:::visit_post (586x) [./target/valgrind/s4] + 65,930 ( 0.02%) 69 ( 0.01%) . . < /home/.cargo/registry/src/index.crates.io-6f17d22bba15001f/regex-syntax-0.8.2/src/ast/mod.rs:regex_syntax::ast::parse::ParserI

::parse_capture_name (586x) + 552 ( 0.00%) 4 ( 0.00%) . . < src/readers/syslogprocessor.rs:s4lib::readers::syslogprocessor::SyslogProcessor::summary_complete (2x) [./target/valgrind/s4] + 547 ( 0.00%) . . . < /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/alloc/src/borrow.rs:core::ops::function::FnOnce::call_once (3x) + 534 ( 0.00%) 4 ( 0.00%) . . < src/readers/blockreader.rs:s4lib::readers::blockreader::BlockReader::new (2x) [./target/valgrind/s4] + 293 ( 0.00%) . . . < src/bin/s4.rs:s4::processing_loop (3x) [./target/valgrind/s4] + 198 ( 0.00%) . . . < src/bin/s4.rs:s4::process_dt_exit (2x) [./target/valgrind/s4] + 98 ( 0.00%) . . . < src/bin/s4.rs:s4::exec_fileprocessor_thread (1x) [./target/valgrind/s4] + 98 ( 0.00%) . . . < src/bin/s4.rs:s4::main (1x) [./target/valgrind/s4] + 98 ( 0.00%) . . . < src/readers/filepreprocessor.rs:s4lib::readers::filepreprocessor::process_path (1x) [./target/valgrind/s4] + 98 ( 0.00%) . . . < /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/alloc/src/borrow.rs:s4::processing_loop (1x) + 98 ( 0.00%) . . . < src/readers/syslogprocessor.rs:s4lib::readers::syslogprocessor::SyslogProcessor::new (1x) [./target/valgrind/s4] + 21,402 ( 0.01%) . . . * /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/alloc/src/string.rs:::clone [./target/valgrind/s4] + + 21,381 ( 0.01%) . . . * /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/alloc/src/vec/mod.rs:regex_automata::nfa::thompson::nfa::Inner::into_nfa + 62,139 ( 0.02%) 328 ( 0.04%) . . > /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/alloc/src/raw_vec.rs:alloc::raw_vec::RawVec::reserve_for_push (175x) [./target/valgrind/s4] + + 21,156 ( 0.01%) . . . * /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/core/src/num/uint_macros.rs:alloc::sync::arcinner_layout_for_value_layout + + 21,095 ( 0.01%) . . . * /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/core/src/option.rs:regex_automata::hybrid::dfa::Builder::build_from_nfa + + 21,044 ( 0.01%) . . . * /home/.cargo/registry/src/index.crates.io-6f17d22bba15001f/aho-corasick-1.1.2/src/packed/teddy/generic.rs:aho_corasick::packed::teddy::builder::x86_64::FatAVX2<3_usize>::new_unchecked + 717,161 ( 0.21%) 2,454 ( 0.30%) . . > /home/.cargo/registry/src/index.crates.io-6f17d22bba15001f/aho-corasick-1.1.2/src/packed/teddy/generic.rs:aho_corasick::packed::teddy::generic::Teddy<_>::new (21x) [./target/valgrind/s4] + 1,365 ( 0.00%) . . . > ./string/../sysdeps/x86_64/multiarch/memmove-vec-unaligned-erms.S:__memcpy_avx_unaligned_erms (21x) [/usr/lib/x86_64-linux-gnu/libc.so.6] + + 21,032 ( 0.01%) . . . * /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/alloc/src/boxed.rs:regex_syntax::hir::Properties::literal + + 20,966 ( 0.01%) . . . < /home/.cargo/registry/src/index.crates.io-6f17d22bba15001f/regex-automata-0.4.6/src/nfa/thompson/compiler.rs:regex_automata::nfa::thompson::compiler::Compiler::c'2 (10,483x) [./target/valgrind/s4] + 16 ( 0.00%) . . . < /home/.cargo/registry/src/index.crates.io-6f17d22bba15001f/regex-automata-0.4.6/src/nfa/thompson/compiler.rs:regex_automata::nfa::thompson::compiler::Compiler::c (8x) [./target/valgrind/s4] + 20,982 ( 0.01%) . . . * /home/.cargo/registry/src/index.crates.io-6f17d22bba15001f/regex-syntax-0.8.2/src/hir/mod.rs:regex_syntax::hir::ClassUnicodeRange::end [./target/valgrind/s4] + + 20,966 ( 0.01%) . . . < /home/.cargo/registry/src/index.crates.io-6f17d22bba15001f/regex-automata-0.4.6/src/nfa/thompson/compiler.rs:regex_automata::nfa::thompson::compiler::Compiler::c'2 (10,483x) [./target/valgrind/s4] + 16 ( 0.00%) . . . < /home/.cargo/registry/src/index.crates.io-6f17d22bba15001f/regex-automata-0.4.6/src/nfa/thompson/compiler.rs:regex_automata::nfa::thompson::compiler::Compiler::c (8x) [./target/valgrind/s4] + 20,982 ( 0.01%) . . . * /home/.cargo/registry/src/index.crates.io-6f17d22bba15001f/regex-syntax-0.8.2/src/hir/mod.rs:regex_syntax::hir::ClassUnicodeRange::start [./target/valgrind/s4] + + 49,172 ( 0.01%) 58 ( 0.01%) . . < /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/alloc/src/collections/btree/map/entry.rs:alloc::collections::btree::map::BTreeMap::insert (540x) + 20,873 ( 0.01%) . . . * /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/alloc/src/collections/btree/node.rs:alloc::collections::btree::node::Handle,alloc::collections::btree::node::marker::Edge>::insert_recursing [./target/valgrind/s4] + 596 ( 0.00%) . . . > /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/alloc/src/collections/btree/node.rs:alloc::collections::btree::node::splitpoint (49x) [./target/valgrind/s4] + + 250,967 ( 0.07%) 134 ( 0.02%) . . < /home/.cargo/registry/src/index.crates.io-6f17d22bba15001f/regex-syntax-0.8.2/src/ast/parse.rs:regex_syntax::ast::parse::ParserI

::parse_with_comments (172x) [./target/valgrind/s4] + 20,852 ( 0.01%) . . . * /home/.cargo/registry/src/index.crates.io-6f17d22bba15001f/regex-syntax-0.8.2/src/ast/parse.rs:regex_syntax::ast::parse::ParserI

::parse_counted_repetition [./target/valgrind/s4] + 106,399 ( 0.03%) 2 ( 0.00%) . . > /home/.cargo/registry/src/index.crates.io-6f17d22bba15001f/regex-syntax-0.8.2/src/ast/parse.rs:regex_syntax::ast::parse::ParserI

::parse_decimal (239x) [./target/valgrind/s4] + 28,680 ( 0.01%) . . . > /home/.cargo/registry/src/index.crates.io-6f17d22bba15001f/regex-syntax-0.8.2/src/ast/parse.rs:regex_syntax::ast::parse::ParserI

::bump_and_bump_space (239x) [./target/valgrind/s4] + 23,583 ( 0.01%) 80 ( 0.01%) . . > /home/.cargo/registry/src/index.crates.io-6f17d22bba15001f/regex-syntax-0.8.2/src/ast/mod.rs:regex_syntax::ast::Ast::repetition (172x) [./target/valgrind/s4] + 15,308 ( 0.00%) . . . > /home/.cargo/registry/src/index.crates.io-6f17d22bba15001f/regex-syntax-0.8.2/src/ast/parse.rs:regex_syntax::ast::parse::ParserI

::bump (172x) [./target/valgrind/s4] + 15,100 ( 0.00%) . . . > /home/.cargo/registry/src/index.crates.io-6f17d22bba15001f/regex-syntax-0.8.2/src/ast/parse.rs:regex_syntax::ast::parse::ParserI

::char (755x) [./target/valgrind/s4] + 7,887 ( 0.00%) . . . > /home/.cargo/registry/src/index.crates.io-6f17d22bba15001f/regex-syntax-0.8.2/src/ast/parse.rs:regex_syntax::ast::parse::specialize_err (239x) [./target/valgrind/s4] + 3,096 ( 0.00%) . . . > /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/alloc/src/vec/mod.rs:alloc::vec::Vec::push (172x) [./target/valgrind/s4] + 3,096 ( 0.00%) . . . > /home/.cargo/registry/src/index.crates.io-6f17d22bba15001f/regex-syntax-0.8.2/src/ast/parse.rs:regex_syntax::ast::parse::ParserI

::bump_space (172x) [./target/valgrind/s4] + 1,204 ( 0.00%) . . . > /home/.cargo/registry/src/index.crates.io-6f17d22bba15001f/regex-syntax-0.8.2/src/ast/mod.rs:regex_syntax::ast::Ast::span (172x) [./target/valgrind/s4] + + 20,814 ( 0.01%) . . . * /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/core/src/option.rs:regex_syntax::hir::Properties::repetition + + 20,780 ( 0.01%) . . . * /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/core/src/slice/index.rs:regex_automata::nfa::thompson::nfa::Inner::into_nfa + + 20,712 ( 0.01%) . . . * /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/alloc/src/alloc.rs:regex_syntax::hir::literal::PreferenceTrie::minimize + 969,941 ( 0.28%) 7,555 ( 0.93%) . . > ???:__rust_dealloc (7,022x) [./target/valgrind/s4] + + 20,700 ( 0.01%) . . . < /home/.cargo/registry/src/index.crates.io-6f17d22bba15001f/regex-automata-0.4.6/src/nfa/thompson/compiler.rs:regex_automata::nfa::thompson::compiler::Compiler::c'2 (2,300x) [./target/valgrind/s4] + 20,700 ( 0.01%) . . . * /home/.cargo/registry/src/index.crates.io-6f17d22bba15001f/regex-syntax-0.8.2/src/utf8.rs:regex_syntax::utf8::Utf8Sequence::as_slice [./target/valgrind/s4] + + 20,666 ( 0.01%) . . . * /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/alloc/src/vec/mod.rs:regex_automata::dfa::onepass::Builder::build_from_nfa + 9,153 ( 0.00%) . . . > /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/alloc/src/raw_vec.rs:alloc::raw_vec::RawVec::reserve_for_push (81x) [./target/valgrind/s4] + + 20,550 ( 0.01%) . . . * /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/core/src/ptr/const_ptr.rs:regex_syntax::hir::Hir::concat + + 20,439 ( 0.01%) . . . * /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/core/src/slice/iter/macros.rs:regex_automata::nfa::thompson::compiler::Utf8Compiler::compile + + 20,430 ( 0.01%) . . . * /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/core/src/ptr/const_ptr.rs: as alloc::vec::spec_extend::SpecExtend>::spec_extend + + 20,417 ( 0.01%) . . . * /home/.cargo/registry/src/index.crates.io-6f17d22bba15001f/regex-automata-0.4.6/src/util/sparse_set.rs:regex_automata::nfa::thompson::nfa::Inner::into_nfa + + 20,284 ( 0.01%) . . . < /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/core/src/str/count.rs:regex_syntax::ast::parse::ParserI

::parse_group (606x) + 20,020 ( 0.01%) . . . < /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/core/src/str/count.rs:regex_syntax::ast::parse::ParserI

::maybe_parse_ascii_class (770x) + 20,396 ( 0.01%) . . . * /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/core/src/slice/iter/macros.rs:core::str::count::char_count_general_case [./target/valgrind/s4] + + 20,185 ( 0.01%) . . . * /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/core/src/slice/index.rs:aho_corasick::dfa::DFA::set_matches + + 19,886 ( 0.01%) . . . * /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/core/src/iter/traits/iterator.rs:::drop + 62,760 ( 0.02%) . . . > ./string/../sysdeps/x86_64/multiarch/memmove-vec-unaligned-erms.S:__memcpy_avx_unaligned_erms (2,092x) [/usr/lib/x86_64-linux-gnu/libc.so.6] + + 21,497 ( 0.01%) . . . < ./elf/../elf/dl-sysdep.c:_dl_sysdep_start (1x) [/usr/lib/x86_64-linux-gnu/ld-linux-x86-64.so.2] + 19,879 ( 0.01%) . . . * ./elf/./elf/dl-tunables.c:__GI___tunables_init [/usr/lib/x86_64-linux-gnu/ld-linux-x86-64.so.2] + + 19,516 ( 0.01%) . . . < /home/.cargo/registry/src/index.crates.io-6f17d22bba15001f/aho-corasick-1.1.2/src/util/primitives.rs:aho_corasick::nfa::noncontiguous::Builder::build (2,788x) + 19,516 ( 0.01%) . . . * /home/.cargo/registry/src/index.crates.io-6f17d22bba15001f/aho-corasick-1.1.2/src/util/primitives.rs:>::try_from [./target/valgrind/s4] + + 717,161 ( 0.21%) 2,454 ( 0.30%) . . < /home/.cargo/registry/src/index.crates.io-6f17d22bba15001f/aho-corasick-1.1.2/src/packed/teddy/generic.rs:aho_corasick::packed::teddy::builder::x86_64::FatAVX2<3_usize>::new_unchecked (21x) + 126,568 ( 0.04%) 482 ( 0.06%) . . < /home/.cargo/registry/src/index.crates.io-6f17d22bba15001f/aho-corasick-1.1.2/src/packed/teddy/generic.rs:aho_corasick::packed::teddy::builder::x86_64::SlimAVX2<3_usize>::new_unchecked (10x) + 84,368 ( 0.02%) 310 ( 0.04%) . . < /home/.cargo/registry/src/index.crates.io-6f17d22bba15001f/aho-corasick-1.1.2/src/packed/teddy/generic.rs:aho_corasick::packed::teddy::builder::x86_64::SlimAVX2<1_usize>::new_unchecked (24x) + 8,492 ( 0.00%) 43 ( 0.01%) . . < /home/.cargo/registry/src/index.crates.io-6f17d22bba15001f/aho-corasick-1.1.2/src/packed/teddy/generic.rs:aho_corasick::packed::teddy::builder::x86_64::SlimAVX2<4_usize>::new_unchecked (2x) + 19,094 ( 0.01%) . . . * /home/.cargo/registry/src/index.crates.io-6f17d22bba15001f/aho-corasick-1.1.2/src/packed/teddy/generic.rs:aho_corasick::packed::teddy::generic::Teddy<_>::new [./target/valgrind/s4] + 122,962 ( 0.04%) 6 ( 0.00%) . . > /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/alloc/src/collections/btree/map.rs:alloc::collections::btree::map::BTreeMap::insert (406x) [./target/valgrind/s4] + 20,142 ( 0.01%) . . . > /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/alloc/src/vec/mod.rs:alloc::vec::from_elem (57x) [./target/valgrind/s4] + + 19,040 ( 0.01%) . . . * /home/.cargo/registry/src/index.crates.io-6f17d22bba15001f/regex-syntax-0.8.2/src/hir/interval.rs:regex_syntax::hir::ClassUnicode::try_case_fold_simple + 928,541 ( 0.27%) 2,240 ( 0.28%) . . > /home/.cargo/registry/src/index.crates.io-6f17d22bba15001f/regex-syntax-0.8.2/src/hir/mod.rs:::case_fold_simple (1,120x) [./target/valgrind/s4] + 38,420 ( 0.01%) . . . > /home/.cargo/registry/src/index.crates.io-6f17d22bba15001f/regex-syntax-0.8.2/src/hir/interval.rs:regex_syntax::hir::interval::IntervalSet::canonicalize (1,120x) [./target/valgrind/s4] + + 19,004 ( 0.01%) . . . * /home/.cargo/registry/src/index.crates.io-6f17d22bba15001f/regex-automata-0.4.6/src/util/look.rs:regex_automata::nfa::thompson::compiler::Compiler::c'2 + + 18,902 ( 0.01%) . . . * /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/alloc/src/string.rs:regex_syntax::hir::ClassUnicode::literal + 13,086 ( 0.00%) . . . > /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/core/src/fmt/mod.rs:core::fmt::Formatter::new (1,454x) [./target/valgrind/s4] + + 721,842 ( 0.21%) 1,964 ( 0.24%) . . < /home/.cargo/registry/src/index.crates.io-6f17d22bba15001f/regex-automata-0.4.6/src/nfa/thompson/compiler.rs:regex_automata::nfa::thompson::compiler::Compiler::c'2 (134x) [./target/valgrind/s4] + 18,882 ( 0.01%) . . . * /home/.cargo/registry/src/index.crates.io-6f17d22bba15001f/regex-automata-0.4.6/src/nfa/thompson/compiler.rs:regex_automata::nfa::thompson::compiler::Compiler::c_bounded [./target/valgrind/s4] + 288,750 ( 0.08%) 870 ( 0.11%) . . > /home/.cargo/registry/src/index.crates.io-6f17d22bba15001f/regex-automata-0.4.6/src/nfa/thompson/compiler.rs:regex_automata::nfa::thompson::compiler::Compiler::c'2 (526x) [./target/valgrind/s4] + 219,179 ( 0.06%) 792 ( 0.10%) . . > /home/.cargo/registry/src/index.crates.io-6f17d22bba15001f/regex-automata-0.4.6/src/nfa/thompson/builder.rs:regex_automata::nfa::thompson::builder::Builder::patch (1,712x) [./target/valgrind/s4] + 120,226 ( 0.03%) 248 ( 0.03%) . . > /home/.cargo/registry/src/index.crates.io-6f17d22bba15001f/regex-automata-0.4.6/src/nfa/thompson/compiler.rs:regex_automata::nfa::thompson::compiler::Compiler::c_concat (134x) [./target/valgrind/s4] + 33,293 ( 0.01%) 42 ( 0.01%) . . > /home/.cargo/registry/src/index.crates.io-6f17d22bba15001f/regex-automata-0.4.6/src/nfa/thompson/builder.rs:regex_automata::nfa::thompson::builder::Builder::add (526x) [./target/valgrind/s4] + + 18,876 ( 0.01%) . . . * /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/core/src/option.rs:regex_syntax::ast::visitor::visit + + 18,805 ( 0.01%) . . . * /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/core/src/ptr/mod.rs:regex_automata::nfa::thompson::compiler::Utf8Compiler::compile_from + + 18,576 ( 0.01%) . . . * /home/.cargo/registry/src/index.crates.io-6f17d22bba15001f/regex-automata-0.4.6/src/util/captures.rs:regex_automata::nfa::thompson::builder::Builder::build + +26,377,136 ( 7.62%) 102,599 (12.67%) . . < /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/core/src/ptr/mod.rs:regex_automata::meta::regex::Builder::build (81x) + 98,475 ( 0.03%) 29 ( 0.00%) . . < /home/.cargo/registry/src/index.crates.io-6f17d22bba15001f/regex-syntax-0.8.2/src/ast/parse.rs:regex_syntax::ast::parse::ParserI

::pop_group (693x) [./target/valgrind/s4] + 18,576 ( 0.01%) . . . * /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/core/src/ptr/mod.rs:core::ptr::drop_in_place [./target/valgrind/s4] +26,377,234 ( 7.62%) 102,519 (12.66%) . . > /home/.cargo/registry/src/index.crates.io-6f17d22bba15001f/regex-syntax-0.8.2/src/ast/mod.rs:::drop (774x) [./target/valgrind/s4] + 79,801 ( 0.02%) 109 ( 0.01%) . . > ???:__rust_dealloc (774x) [./target/valgrind/s4] + + 186,209 ( 0.05%) 102 ( 0.01%) . . < /home/.cargo/registry/src/index.crates.io-6f17d22bba15001f/regex-automata-0.4.6/src/nfa/thompson/compiler.rs:regex_automata::nfa::thompson::compiler::Compiler::c'2 (1,316x) [./target/valgrind/s4] + 18,424 ( 0.01%) . . . * /home/.cargo/registry/src/index.crates.io-6f17d22bba15001f/regex-syntax-0.8.2/src/utf8.rs:regex_syntax::utf8::Utf8Sequences::new [./target/valgrind/s4] + + 40,480 ( 0.01%) . . . < /home/.cargo/registry/src/index.crates.io-6f17d22bba15001f/aho-corasick-1.1.2/src/nfa/noncontiguous.rs:aho_corasick::nfa::noncontiguous::Builder::build (3,680x) [./target/valgrind/s4] + 18,400 ( 0.01%) . . . * /home/.cargo/registry/src/index.crates.io-6f17d22bba15001f/aho-corasick-1.1.2/src/nfa/noncontiguous.rs:aho_corasick::nfa::noncontiguous::NFA::iter_trans [./target/valgrind/s4] + + 18,396 ( 0.01%) . . . * /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/core/src/slice/iter/macros.rs:aho_corasick::packed::rabinkarp::RabinKarp::new + + 1,560,608 ( 0.45%) 1,238 ( 0.15%) . . < /home/.cargo/registry/src/index.crates.io-6f17d22bba15001f/regex-automata-0.4.6/src/nfa/thompson/builder.rs:regex_automata::nfa::thompson::builder::Builder::build (175x) [./target/valgrind/s4] + 18,230 ( 0.01%) . . . * /home/.cargo/registry/src/index.crates.io-6f17d22bba15001f/regex-automata-0.4.6/src/nfa/thompson/nfa.rs:regex_automata::nfa::thompson::nfa::Inner::into_nfa [./target/valgrind/s4] + 5,250 ( 0.00%) . . . > ./string/../sysdeps/x86_64/multiarch/memmove-vec-unaligned-erms.S:__memcpy_avx_unaligned_erms (175x) [/usr/lib/x86_64-linux-gnu/libc.so.6] + + 18,122 ( 0.01%) . . . * /home/.cargo/registry/src/index.crates.io-6f17d22bba15001f/aho-corasick-1.1.2/src/util/primitives.rs:aho_corasick::nfa::noncontiguous::NFA::add_match + + 18,090 ( 0.01%) . . . * /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/core/src/slice/iter/macros.rs:regex_syntax::hir::literal::Extractor::extract + + 17,990 ( 0.01%) . . . * /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/core/src/slice/mod.rs:regex_syntax::ast::parse::ParserI

::parse_capture_name + + 17,812 ( 0.01%) . . . * /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/core/src/slice/iter/macros.rs:aho_corasick::dfa::Builder::finish_build_one_start + + 17,781 ( 0.01%) . . . * /home/.cargo/registry/src/index.crates.io-6f17d22bba15001f/regex-syntax-0.8.2/src/ast/mod.rs:regex_syntax::ast::parse::ParserI

::pop_class + + 17,646 ( 0.01%) . . . * /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/std/src/collections/hash/map.rs:core::hash::BuildHasher::hash_one + + 17,620 ( 0.01%) . . . * /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/alloc/src/vec/mod.rs:regex_syntax::ast::Concat::into_ast + + 17,577 ( 0.01%) . . . * /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/core/src/ptr/mod.rs:regex_syntax::ast::parse::ParserI

::parse_set_class + 106,470 ( 0.03%) . . . > ./string/../sysdeps/x86_64/multiarch/memmove-vec-unaligned-erms.S:__memcpy_avx_unaligned_erms (3,549x) [/usr/lib/x86_64-linux-gnu/libc.so.6] + + 60,952 ( 0.02%) . . . < /home/.cargo/registry/src/index.crates.io-6f17d22bba15001f/aho-corasick-1.1.2/src/nfa/noncontiguous.rs:aho_corasick::nfa::noncontiguous::Compiler::shuffle (1,490x) [./target/valgrind/s4] + 17,528 ( 0.01%) . . . * /home/.cargo/registry/src/index.crates.io-6f17d22bba15001f/aho-corasick-1.1.2/src/util/remapper.rs:aho_corasick::util::remapper::Remapper::swap [./target/valgrind/s4] + + 17,448 ( 0.01%) . . . * /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/alloc/src/alloc.rs:regex_syntax::hir::Hir::class + 290,043 ( 0.08%) 2,020 ( 0.25%) . . > ???:__rust_alloc (1,454x) [./target/valgrind/s4] + 250,063 ( 0.07%) 2,906 ( 0.36%) . . > ???:__rust_realloc (1,454x) [./target/valgrind/s4] + + 17,398 ( 0.01%) . . . * /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/core/src/cmp.rs:alloc::collections::btree::map::BTreeMap::insert + + 17,330 ( 0.01%) . . . * /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/alloc/src/raw_vec.rs: as alloc::vec::spec_extend::SpecExtend>::spec_extend + 1,274,269 ( 0.37%) 3,115 ( 0.38%) 1 ( 0.32%) . > /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/alloc/src/raw_vec.rs:alloc::raw_vec::RawVec::reserve::do_reserve_and_handle (752x) [./target/valgrind/s4] + + 209,050 ( 0.06%) 1,131 ( 0.14%) . . < /home/.cargo/registry/src/index.crates.io-6f17d22bba15001f/regex-syntax-0.8.2/src/hir/mod.rs:::visit_post (693x) + 17,325 ( 0.01%) . . . * /home/.cargo/registry/src/index.crates.io-6f17d22bba15001f/regex-syntax-0.8.2/src/hir/mod.rs:regex_syntax::hir::Properties::capture [./target/valgrind/s4] + + 106,399 ( 0.03%) 2 ( 0.00%) . . < /home/.cargo/registry/src/index.crates.io-6f17d22bba15001f/regex-syntax-0.8.2/src/ast/parse.rs:regex_syntax::ast::parse::ParserI

::parse_counted_repetition (239x) [./target/valgrind/s4] + 17,200 ( 0.00%) . . . * /home/.cargo/registry/src/index.crates.io-6f17d22bba15001f/regex-syntax-0.8.2/src/ast/parse.rs:regex_syntax::ast::parse::ParserI

::parse_decimal [./target/valgrind/s4] + 32,180 ( 0.01%) . . . > /home/.cargo/registry/src/index.crates.io-6f17d22bba15001f/regex-syntax-0.8.2/src/ast/parse.rs:regex_syntax::ast::parse::ParserI

::char (1,609x) [./target/valgrind/s4] + 21,360 ( 0.01%) . . . > /home/.cargo/registry/src/index.crates.io-6f17d22bba15001f/regex-syntax-0.8.2/src/ast/parse.rs:regex_syntax::ast::parse::ParserI

::bump (240x) [./target/valgrind/s4] + 10,764 ( 0.00%) . . . > /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/core/src/num/uint_macros.rs:core::num::::from_str_radix (239x) [./target/valgrind/s4] + 4,320 ( 0.00%) . . . > /home/.cargo/registry/src/index.crates.io-6f17d22bba15001f/regex-syntax-0.8.2/src/ast/parse.rs:regex_syntax::ast::parse::ParserI

::bump_space (240x) [./target/valgrind/s4] + + 17,136 ( 0.00%) . . . * /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/core/src/ptr/mut_ptr.rs:regex_automata::nfa::thompson::map::Utf8SuffixMap::clear + + 17,130 ( 0.00%) . . . * /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/alloc/src/alloc.rs:regex_syntax::ast::parse::ParserI

::parse_uncounted_repetition + 331,832 ( 0.10%) 1,154 ( 0.14%) . . > ???:__rust_alloc (3,426x) [./target/valgrind/s4] + + 16,944 ( 0.00%) . . . * /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/core/src/cell.rs:regex_syntax::ast::parse::ParserI

::pop_class + + 16,893 ( 0.00%) . . . * /home/.cargo/registry/src/index.crates.io-6f17d22bba15001f/regex-syntax-0.8.2/src/hir/mod.rs:regex_syntax::hir::ClassUnicode::is_ascii + + 122,962 ( 0.04%) 6 ( 0.00%) . . < /home/.cargo/registry/src/index.crates.io-6f17d22bba15001f/aho-corasick-1.1.2/src/packed/teddy/generic.rs:aho_corasick::packed::teddy::generic::Teddy<_>::new (406x) [./target/valgrind/s4] + 53,290 ( 0.02%) 58 ( 0.01%) . . < src/readers/syslinereader.rs:s4lib::readers::syslinereader::SyslineReader::new (173x) [./target/valgrind/s4] + 1,604 ( 0.00%) 12 ( 0.00%) . . < src/bin/s4.rs:s4::processing_loop (5x) [./target/valgrind/s4] + 1,356 ( 0.00%) 4 ( 0.00%) . . < src/readers/linereader.rs:s4lib::readers::linereader::LineReader::insert_line (10x) [./target/valgrind/s4] + 1,263 ( 0.00%) 4 ( 0.00%) . . < /home/.cargo/registry/src/index.crates.io-6f17d22bba15001f/rangemap-1.5.1/src/map.rs:rangemap::map::RangeMap::insert (9x) [./target/valgrind/s4] + 390 ( 0.00%) . . . < src/readers/syslinereader.rs:s4lib::readers::syslinereader::SyslineReader::insert_sysline (4x) [./target/valgrind/s4] + 246 ( 0.00%) 2 ( 0.00%) . . < /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/alloc/src/collections/btree/set.rs:s4lib::readers::blockreader::BlockReader::read_block_File (1x) + 246 ( 0.00%) 2 ( 0.00%) . . < src/readers/blockreader.rs:s4lib::readers::blockreader::BlockReader::read_block_File (1x) [./target/valgrind/s4] + 162 ( 0.00%) . . . < /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/alloc/src/collections/btree/map.rs:s4lib::readers::syslinereader::SyslineReader::summary (2x) + 162 ( 0.00%) . . . < /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/alloc/src/collections/btree/map.rs: as core::iter::traits::iterator::Iterator>::fold (2x) + 16,812 ( 0.00%) . . . * /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/alloc/src/collections/btree/map.rs:alloc::collections::btree::map::BTreeMap::insert [./target/valgrind/s4] + + 13,086 ( 0.00%) . . . < /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/alloc/src/string.rs:regex_syntax::hir::ClassUnicode::literal (1,454x) + 3,663 ( 0.00%) . . . < /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/alloc/src/string.rs:regex_syntax::hir::literal::Extractor::extract'2 (407x) + 18 ( 0.00%) . . . < /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/alloc/src/string.rs:regex_syntax::hir::literal::Extractor::extract (2x) + 18 ( 0.00%) . . . < /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/alloc/src/string.rs:core::ops::function::FnOnce::call_once (2x) + 9 ( 0.00%) . . . < /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/alloc/src/string.rs:::parse_ref (1x) + 9 ( 0.00%) . . . < /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/alloc/src/string.rs:s4lib::readers::syslinereader::SyslineReader::new (1x) + 16,803 ( 0.00%) . . . * /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/core/src/fmt/mod.rs:core::fmt::Formatter::new [./target/valgrind/s4] + + 16,800 ( 0.00%) . . . * /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/core/src/option.rs:regex_automata::nfa::thompson::compiler::Utf8Compiler::compile_from + + 151,074 ( 0.04%) 2 ( 0.00%) . . < /home/.cargo/registry/src/index.crates.io-6f17d22bba15001f/regex-automata-0.4.6/src/hybrid/dfa.rs:regex_automata::hybrid::dfa::Lazy::cache_next_state (218x) [./target/valgrind/s4] + 16,667 ( 0.00%) . . . * /home/.cargo/registry/src/index.crates.io-6f17d22bba15001f/regex-automata-0.4.6/src/util/determinize/mod.rs:regex_automata::util::determinize::next [./target/valgrind/s4] + 48,978 ( 0.01%) . . . > /home/.cargo/registry/src/index.crates.io-6f17d22bba15001f/regex-automata-0.4.6/src/util/determinize/state.rs:regex_automata::util::determinize::state::State::iter_nfa_state_ids (218x) [./target/valgrind/s4] + 30,367 ( 0.01%) . . . > /home/.cargo/registry/src/index.crates.io-6f17d22bba15001f/regex-automata-0.4.6/src/util/determinize/mod.rs:regex_automata::util::determinize::epsilon_closure (194x) [./target/valgrind/s4] + 24,097 ( 0.01%) 2 ( 0.00%) . . > /home/.cargo/registry/src/index.crates.io-6f17d22bba15001f/regex-automata-0.4.6/src/util/determinize/mod.rs:regex_automata::util::determinize::add_nfa_states (218x) [./target/valgrind/s4] + 60 ( 0.00%) . . . > /home/.cargo/registry/src/index.crates.io-6f17d22bba15001f/regex-automata-0.4.6/src/util/determinize/state.rs:regex_automata::util::determinize::state::StateBuilderMatches::add_match_pattern_id (3x) [./target/valgrind/s4] + + 16,614 ( 0.00%) . . . * /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/alloc/src/raw_vec.rs:::visit_class_set_item_post + 133,238 ( 0.04%) 355 ( 0.04%) . . > /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/alloc/src/raw_vec.rs:alloc::raw_vec::RawVec::reserve::do_reserve_and_handle (846x) [./target/valgrind/s4] + + 16,612 ( 0.00%) . . . * /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/core/src/char/methods.rs:regex_syntax::hir::Properties::class + + 16,593 ( 0.00%) . . . * /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/core/src/ptr/mod.rs:alloc::vec::from_elem + + 16,523 ( 0.00%) . . . * /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/alloc/src/vec/mod.rs:aho_corasick::packed::rabinkarp::RabinKarp::new + 180,819 ( 0.05%) 704 ( 0.09%) . . > /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/alloc/src/raw_vec.rs:alloc::raw_vec::RawVec::reserve_for_push (733x) [./target/valgrind/s4] + + 16,518 ( 0.00%) . . . * /home/.cargo/registry/src/index.crates.io-6f17d22bba15001f/regex-syntax-0.8.2/src/hir/interval.rs:::visit_pre + 46,801 ( 0.01%) . . . > /home/.cargo/registry/src/index.crates.io-6f17d22bba15001f/regex-syntax-0.8.2/src/hir/interval.rs:regex_syntax::hir::interval::IntervalSet::canonicalize (2,753x) [./target/valgrind/s4] + + 16,518 ( 0.00%) . . . * /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/core/src/iter/traits/collect.rs:::visit_pre + + 16,515 ( 0.00%) . . . * /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/alloc/src/vec/mod.rs:aho_corasick::dfa::DFA::set_matches + 460,064 ( 0.13%) 2,538 ( 0.31%) . . > /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/alloc/src/raw_vec.rs:alloc::raw_vec::RawVec::reserve_for_push (1,835x) [./target/valgrind/s4] + + 16,387 ( 0.00%) . . . * /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/core/src/slice/iter/macros.rs:regex_syntax::hir::literal::Extractor::extract'2 + + 16,379 ( 0.00%) . . . * /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/core/src/num/uint_macros.rs:::drop + + 16,368 ( 0.00%) . . . * /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/alloc/src/alloc.rs:regex_syntax::hir::Properties::class + 674,742 ( 0.19%) 4,414 ( 0.55%) . . > ???:__rust_alloc (2,728x) [./target/valgrind/s4] + + 16,298 ( 0.00%) . . . * /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/alloc/src/vec/mod.rs:core::ptr::drop_in_place'2 + + 16,224 ( 0.00%) . . . * /home/.cargo/registry/src/index.crates.io-6f17d22bba15001f/aho-corasick-1.1.2/src/util/primitives.rs:aho_corasick::dfa::Builder::build_from_noncontiguous + + 16,116 ( 0.00%) . . . * /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/alloc/src/raw_vec.rs:regex_automata::meta::reverse_inner::flatten'2 + + 16,096 ( 0.00%) . . . * /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/core/src/macros/mod.rs:::visit_post + + 16,093 ( 0.00%) . . . * /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/core/src/option.rs:regex_syntax::ast::parse::ParserI

::pop_class + 68,970 ( 0.02%) . . . > ./string/../sysdeps/x86_64/multiarch/memmove-vec-unaligned-erms.S:__memcpy_avx_unaligned_erms (2,299x) [/usr/lib/x86_64-linux-gnu/libc.so.6] + + 16,069 ( 0.00%) . . . < /home/.cargo/registry/src/index.crates.io-6f17d22bba15001f/regex-syntax-0.8.2/src/ast/parse.rs:regex_syntax::ast::parse::ParserI

::parse_escape (1,607x) [./target/valgrind/s4] + 16,069 ( 0.00%) . . . * /home/.cargo/registry/src/index.crates.io-6f17d22bba15001f/regex-syntax-0.8.2/src/lib.rs:regex_syntax::is_meta_character [./target/valgrind/s4] + + 15,994 ( 0.00%) . . . * /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/alloc/src/boxed.rs:regex_syntax::hir::Hir::class + + 15,929 ( 0.00%) . . . * /home/.cargo/registry/src/index.crates.io-6f17d22bba15001f/regex-syntax-0.8.2/src/hir/translate.rs:regex_syntax::ast::visitor::visit + + 15,929 ( 0.00%) . . . * /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/core/src/ptr/mut_ptr.rs:regex_syntax::ast::parse::ParserI

::push_alternate + + 15,848 ( 0.00%) . . . * /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/core/src/cell.rs:::visit_class_set_item_post + + 11,570 ( 0.00%) . . . < ./elf/./elf/dl-lookup.c:check_match (297x) [/usr/lib/x86_64-linux-gnu/ld-linux-x86-64.so.2] + 2,742 ( 0.00%) . . . < ./elf/./elf/dl-misc.c:_dl_name_match_p (86x) [/usr/lib/x86_64-linux-gnu/ld-linux-x86-64.so.2] + 890 ( 0.00%) . . . < ./elf/./elf/dl-version.c:_dl_check_map_versions (23x) [/usr/lib/x86_64-linux-gnu/ld-linux-x86-64.so.2] + 282 ( 0.00%) . . . < ./elf/./elf/dl-lookup-direct.c:_dl_lookup_direct (6x) [/usr/lib/x86_64-linux-gnu/ld-linux-x86-64.so.2] + 218 ( 0.00%) . . . < ./elf/./elf/dl-load.c:_dl_map_object (6x) [/usr/lib/x86_64-linux-gnu/ld-linux-x86-64.so.2] + 50 ( 0.00%) . . . < ./elf/../sysdeps/x86/dl-procinfo.h:_dl_load_cache_lookup (2x) + 50 ( 0.00%) . . . < ./elf/./elf/dl-load.c:_dl_map_object_from_fd (2x) [/usr/lib/x86_64-linux-gnu/ld-linux-x86-64.so.2] + 43 ( 0.00%) . . . < ./elf/./elf/rtld.c:dl_main (1x) [/usr/lib/x86_64-linux-gnu/ld-linux-x86-64.so.2] + 15,845 ( 0.00%) . . . * ./string/../sysdeps/x86_64/strcmp.S:strcmp [/usr/lib/x86_64-linux-gnu/ld-linux-x86-64.so.2] + + 15,744 ( 0.00%) . . . * /home/.cargo/registry/src/index.crates.io-6f17d22bba15001f/aho-corasick-1.1.2/src/util/primitives.rs:aho_corasick::nfa::noncontiguous::NFA::alloc_state + + 53,226 ( 0.02%) . . . < /home/.cargo/registry/src/index.crates.io-6f17d22bba15001f/regex-syntax-0.8.2/src/hir/literal.rs:regex_syntax::hir::literal::Extractor::cross (482x) [./target/valgrind/s4] + 15,639 ( 0.00%) . . . * /home/.cargo/registry/src/index.crates.io-6f17d22bba15001f/regex-syntax-0.8.2/src/hir/literal.rs:regex_syntax::hir::literal::Seq::cross_preamble [./target/valgrind/s4] + + 15,496 ( 0.00%) . . . * /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/core/src/cell.rs:regex_syntax::ast::parse::ParserI

::parse_set_class_item + + 15,406 ( 0.00%) . . . * /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/alloc/src/raw_vec.rs:regex_syntax::hir::Hir::literal + + 15,406 ( 0.00%) . . . * /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/core/src/macros/mod.rs:regex_syntax::hir::Hir::literal + + 15,406 ( 0.00%) . . . * /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/core/src/result.rs:regex_syntax::hir::Hir::literal + + 15,334 ( 0.00%) . . . * /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/core/src/slice/index.rs:aho_corasick::packed::rabinkarp::RabinKarp::new + + 14,944 ( 0.00%) . . . * /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/alloc/src/raw_vec.rs:::write_str + 274,042 ( 0.08%) 786 ( 0.10%) . . > /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/alloc/src/raw_vec.rs:alloc::raw_vec::RawVec::reserve::do_reserve_and_handle (1,865x) [./target/valgrind/s4] + + 14,789 ( 0.00%) . . . * /home/.cargo/registry/src/index.crates.io-6f17d22bba15001f/regex-automata-0.4.6/src/util/sparse_set.rs:regex_automata::util::determinize::epsilon_closure + + 14,720 ( 0.00%) . . . * /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/core/src/convert/num.rs:aho_corasick::util::alphabet::ByteClassSet::set_range + + 14,660 ( 0.00%) . . . * /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/alloc/src/vec/mod.rs:::case_fold_simple + 512,951 ( 0.15%) 2,240 ( 0.28%) . . > /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/alloc/src/raw_vec.rs:alloc::raw_vec::RawVec::reserve_for_push (1,120x) [./target/valgrind/s4] + + 14,611 ( 0.00%) . . . * /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/core/src/result.rs:regex_automata::nfa::thompson::compiler::Compiler::c + + 1,012,881 ( 0.29%) 2,240 ( 0.28%) . . < /home/.cargo/registry/src/index.crates.io-6f17d22bba15001f/regex-syntax-0.8.2/src/hir/translate.rs:::visit_post (1,120x) [./target/valgrind/s4] + 14,560 ( 0.00%) . . . * /home/.cargo/registry/src/index.crates.io-6f17d22bba15001f/regex-syntax-0.8.2/src/hir/mod.rs:regex_syntax::hir::ClassUnicode::try_case_fold_simple [./target/valgrind/s4] + + 14,460 ( 0.00%) . . . * /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/core/src/slice/mod.rs:aho_corasick::util::remapper::Remapper::swap + + 14,459 ( 0.00%) . . . * /home/.cargo/registry/src/index.crates.io-6f17d22bba15001f/aho-corasick-1.1.2/src/util/primitives.rs:aho_corasick::nfa::noncontiguous::Compiler::shuffle + + 14,428 ( 0.00%) . . . * /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/core/src/slice/index.rs:regex_automata::nfa::thompson::compiler::Compiler::c'2 + + 14,337 ( 0.00%) . . . * /home/.cargo/registry/src/index.crates.io-6f17d22bba15001f/regex-automata-0.4.6/src/hybrid/dfa.rs:regex_automata::meta::wrappers::Hybrid::new + 65,853 ( 0.02%) . . . > /home/.cargo/registry/src/index.crates.io-6f17d22bba15001f/regex-automata-0.4.6/src/nfa/thompson/compiler.rs:regex_automata::nfa::thompson::compiler::Compiler::new (243x) [./target/valgrind/s4] + + 14,260 ( 0.00%) . . . * /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/core/src/result.rs:regex_syntax::ast::parse::ParserI

::push_group + + 14,240 ( 0.00%) . . . * /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/core/src/cell.rs:regex_syntax::ast::parse::ParserI

::parse_group + + 14,175 ( 0.00%) . . . * /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/core/src/char/methods.rs:regex_syntax::ast::parse::ParserI

::parse_capture_name + + 14,127 ( 0.00%) . . . * /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/core/src/slice/iter/macros.rs:::drop + + 13,928 ( 0.00%) . . . * /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/core/src/slice/cmp.rs:regex_syntax::ast::parse::ParserI

::parse_group + + 13,872 ( 0.00%) . . . * /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/core/src/option.rs:::next + + 13,860 ( 0.00%) . . . * /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/alloc/src/boxed.rs:regex_syntax::ast::parse::ParserI

::pop_group + + 13,783 ( 0.00%) . . . * /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/alloc/src/vec/mod.rs:aho_corasick::nfa::noncontiguous::NFA::alloc_state + 123,301 ( 0.04%) 624 ( 0.08%) . . > /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/alloc/src/raw_vec.rs:alloc::raw_vec::RawVec::reserve_for_push (221x) [./target/valgrind/s4] + + 128,502 ( 0.04%) 403 ( 0.05%) . . < /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/alloc/src/vec/mod.rs:::visit_class_set_item_post (770x) + 18,018 ( 0.01%) 6 ( 0.00%) . . < /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/alloc/src/vec/mod.rs:s4lib::readers::syslinereader::SyslineReader::parse_datetime_in_line_cached (5x) + 17,636 ( 0.01%) 6 ( 0.00%) . . < /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/alloc/src/vec/mod.rs:itertools::Itertools::sorted_by (3x) + 4,865 ( 0.00%) . . . < /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/alloc/src/vec/mod.rs:::augment_args (17x) + 3,209 ( 0.00%) . . . < /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/alloc/src/vec/mod.rs:clap_builder::builder::command::Command::_build_self (2x) + 726 ( 0.00%) . . . < /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/alloc/src/vec/mod.rs:s4lib::readers::syslinereader::SyslineReader::summary (2x) + 630 ( 0.00%) . . . < /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/alloc/src/vec/mod.rs:regex_syntax::hir::ClassUnicode::new (5x) + 624 ( 0.00%) 2 ( 0.00%) . . < /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/alloc/src/vec/mod.rs:s4::main (1x) + 558 ( 0.00%) . . . < /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/alloc/src/vec/mod.rs:clap_builder::builder::command::Command::get_matches_from (1x) + 156 ( 0.00%) . . . < /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/alloc/src/vec/mod.rs:s4lib::readers::syslinereader::SyslineReader::dt_patterns_analysis (1x) + 13,769 ( 0.00%) . . . * /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/alloc/src/vec/spec_from_iter.rs: as alloc::vec::spec_from_iter::SpecFromIter>::from_iter [./target/valgrind/s4] + + 1,854,743 ( 0.54%) 2 ( 0.00%) . . < /home/.cargo/registry/src/index.crates.io-6f17d22bba15001f/aho-corasick-1.1.2/src/nfa/noncontiguous.rs:aho_corasick::nfa::noncontiguous::Builder::build (48x) [./target/valgrind/s4] + 13,754 ( 0.00%) . . . * /home/.cargo/registry/src/index.crates.io-6f17d22bba15001f/aho-corasick-1.1.2/src/nfa/noncontiguous.rs:aho_corasick::nfa::noncontiguous::Compiler::shuffle [./target/valgrind/s4] + 1,737,105 ( 0.50%) 2 ( 0.00%) . . > /home/.cargo/registry/src/index.crates.io-6f17d22bba15001f/aho-corasick-1.1.2/src/util/remapper.rs:aho_corasick::util::remapper::Remapper::remap (48x) [./target/valgrind/s4] + 60,952 ( 0.02%) . . . > /home/.cargo/registry/src/index.crates.io-6f17d22bba15001f/aho-corasick-1.1.2/src/util/remapper.rs:aho_corasick::util::remapper::Remapper::swap (1,490x) [./target/valgrind/s4] + + 13,583 ( 0.00%) . . . * /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/core/src/num/uint_macros.rs:aho_corasick::util::alphabet::ByteClassSet::byte_classes + + 13,582 ( 0.00%) . . . * /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/core/src/result.rs:regex_automata::nfa::thompson::compiler::Compiler::c_bounded + + 13,480 ( 0.00%) . . . * /home/.cargo/registry/src/index.crates.io-6f17d22bba15001f/regex-automata-0.4.6/src/nfa/thompson/range_trie.rs:regex_automata::nfa::thompson::compiler::Compiler::new + 113,113 ( 0.03%) 4 ( 0.00%) . . > /home/.cargo/registry/src/index.crates.io-6f17d22bba15001f/regex-automata-0.4.6/src/nfa/thompson/range_trie.rs:regex_automata::nfa::thompson::range_trie::RangeTrie::add_empty (1,348x) [./target/valgrind/s4] + + 113,113 ( 0.03%) 4 ( 0.00%) . . < /home/.cargo/registry/src/index.crates.io-6f17d22bba15001f/regex-automata-0.4.6/src/nfa/thompson/range_trie.rs:regex_automata::nfa::thompson::compiler::Compiler::new (1,348x) + 13,480 ( 0.00%) . . . * /home/.cargo/registry/src/index.crates.io-6f17d22bba15001f/regex-automata-0.4.6/src/nfa/thompson/range_trie.rs:regex_automata::nfa::thompson::range_trie::RangeTrie::add_empty [./target/valgrind/s4] + + 13,429 ( 0.00%) . . . * /home/.cargo/registry/src/index.crates.io-6f17d22bba15001f/regex-syntax-0.8.2/src/hir/interval.rs:::visit_class_set_item_post + 44,132 ( 0.01%) . . . > /home/.cargo/registry/src/index.crates.io-6f17d22bba15001f/regex-syntax-0.8.2/src/hir/interval.rs:regex_syntax::hir::interval::IntervalSet::canonicalize (1,686x) [./target/valgrind/s4] + 14,700 ( 0.00%) . . . > /home/.cargo/registry/src/index.crates.io-6f17d22bba15001f/regex-syntax-0.8.2/src/hir/mod.rs:::case_fold_simple (70x) [./target/valgrind/s4] + + 13,410 ( 0.00%) . . . * /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/alloc/src/vec/mod.rs:regex_syntax::ast::parse::ParserI

::pop_group + 114,108 ( 0.03%) 440 ( 0.05%) . . > /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/alloc/src/raw_vec.rs:alloc::raw_vec::RawVec::reserve_for_push (243x) [./target/valgrind/s4] + + 13,400 ( 0.00%) . . . * /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/alloc/src/vec/mod.rs:regex_syntax::hir::interval::IntervalSet::canonicalize + 82,589 ( 0.02%) 335 ( 0.04%) . . > /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/alloc/src/raw_vec.rs:alloc::raw_vec::RawVec::reserve_for_push (167x) [./target/valgrind/s4] + + 38,128 ( 0.01%) . . . < /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/core/src/slice/sort.rs:core::slice::sort::merge_sort (1,334x) [./target/valgrind/s4] + 13,345 ( 0.00%) . . . * /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/core/src/slice/sort.rs:core::slice::sort::insertion_sort_shift_left [./target/valgrind/s4] + + 13,292 ( 0.00%) . . . * /home/.cargo/registry/src/index.crates.io-6f17d22bba15001f/regex-syntax-0.8.2/src/ast/mod.rs:regex_syntax::ast::parse::ParserI

::parse_capture_name + 65,930 ( 0.02%) 69 ( 0.01%) . . > /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/alloc/src/string.rs:::clone (586x) [./target/valgrind/s4] + + 13,266 ( 0.00%) . . . * /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/alloc/src/vec/mod.rs:aho_corasick::packed::pattern::Patterns::add + 225,069 ( 0.07%) 884 ( 0.11%) . . > /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/alloc/src/raw_vec.rs:alloc::raw_vec::RawVec::reserve_for_push (360x) [./target/valgrind/s4] + + 13,182 ( 0.00%) . . . * /home/.cargo/registry/src/index.crates.io-6f17d22bba15001f/aho-corasick-1.1.2/src/packed/pattern.rs:aho_corasick::packed::teddy::generic::Teddy<_>::new + + 13,160 ( 0.00%) . . . * /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/std/src/sys/unix/alloc.rs:__rdl_alloc_zeroed + 377,056 ( 0.11%) 2,884 ( 0.36%) . . > ./malloc/./malloc/malloc.c:calloc (1,316x) [/usr/lib/x86_64-linux-gnu/libc.so.6] + + 13,060 ( 0.00%) . . . * /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/core/src/result.rs:regex_automata::nfa::thompson::compiler::Compiler::c_cap'2 + + 13,014 ( 0.00%) . . . * /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/alloc/src/alloc.rs:regex_automata::nfa::thompson::compiler::Utf8Compiler::compile + 150,129 ( 0.04%) 948 ( 0.12%) . . > ???:__rust_alloc (758x) [./target/valgrind/s4] + 90,902 ( 0.03%) 35 ( 0.00%) . . > ???:__rust_dealloc (928x) [./target/valgrind/s4] + + 39,758 ( 0.01%) 133 ( 0.02%) . . < /home/.cargo/registry/src/index.crates.io-6f17d22bba15001f/regex-automata-0.4.6/src/hybrid/dfa.rs:regex_automata::hybrid::dfa::Lazy::cache_start_group (41x) [./target/valgrind/s4] + 24,097 ( 0.01%) 2 ( 0.00%) . . < /home/.cargo/registry/src/index.crates.io-6f17d22bba15001f/regex-automata-0.4.6/src/util/determinize/mod.rs:regex_automata::util::determinize::next (218x) [./target/valgrind/s4] + 13,004 ( 0.00%) . . . * /home/.cargo/registry/src/index.crates.io-6f17d22bba15001f/regex-automata-0.4.6/src/util/determinize/mod.rs:regex_automata::util::determinize::add_nfa_states [./target/valgrind/s4] + 10,278 ( 0.00%) 57 ( 0.01%) . . > /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/alloc/src/raw_vec.rs:alloc::raw_vec::RawVec::reserve_for_push (23x) [./target/valgrind/s4] + + 12,978 ( 0.00%) . . . * /home/.cargo/registry/src/index.crates.io-6f17d22bba15001f/aho-corasick-1.1.2/src/util/primitives.rs:aho_corasick::dfa::Builder::finish_build_both_starts::{{closure}} + + 36,826 ( 0.01%) 14 ( 0.00%) . . < /home/.cargo/registry/src/index.crates.io-6f17d22bba15001f/regex-automata-0.4.6/src/hybrid/dfa.rs:regex_automata::hybrid::dfa::Lazy::cache_start_group (41x) [./target/valgrind/s4] + 30,367 ( 0.01%) . . . < /home/.cargo/registry/src/index.crates.io-6f17d22bba15001f/regex-automata-0.4.6/src/util/determinize/mod.rs:regex_automata::util::determinize::next (194x) [./target/valgrind/s4] + 12,972 ( 0.00%) . . . * /home/.cargo/registry/src/index.crates.io-6f17d22bba15001f/regex-automata-0.4.6/src/util/determinize/mod.rs:regex_automata::util::determinize::epsilon_closure [./target/valgrind/s4] + + 12,931 ( 0.00%) . . . * /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/core/src/cmp.rs:core::slice::sort::insertion_sort_shift_left + + 47,257 ( 0.01%) . . . < /home/.cargo/registry/src/index.crates.io-6f17d22bba15001f/regex-syntax-0.8.2/src/hir/mod.rs:regex_syntax::hir::Hir::alternation (579x) [./target/valgrind/s4] + 12,902 ( 0.00%) . . . * /home/.cargo/registry/src/index.crates.io-6f17d22bba15001f/regex-syntax-0.8.2/src/hir/mod.rs:regex_syntax::hir::lift_common_prefix [./target/valgrind/s4] + 6,532 ( 0.00%) . . . > /home/.cargo/registry/src/index.crates.io-6f17d22bba15001f/regex-syntax-0.8.2/src/hir/mod.rs:regex_syntax::hir::Hir::concat (6x) [./target/valgrind/s4] + 4,832 ( 0.00%) . . . > /home/.cargo/registry/src/index.crates.io-6f17d22bba15001f/regex-syntax-0.8.2/src/hir/mod.rs:regex_syntax::hir::Hir::alternation'2 (1x) [./target/valgrind/s4] + 364 ( 0.00%) . . . > ???:__rust_dealloc (4x) [./target/valgrind/s4] + + 12,876 ( 0.00%) . . . * /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/core/src/cell.rs:regex_syntax::ast::parse::ParserI

::parse_escape + + 12,812 ( 0.00%) . . . * /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/alloc/src/vec/mod.rs:regex_automata::util::prefilter::prefixes + 112,977 ( 0.03%) 144 ( 0.02%) . . > /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/alloc/src/vec/spec_extend.rs: as alloc::vec::spec_extend::SpecExtend>::spec_extend (15x) [./target/valgrind/s4] + + 65,853 ( 0.02%) . . . < /home/.cargo/registry/src/index.crates.io-6f17d22bba15001f/regex-automata-0.4.6/src/hybrid/dfa.rs:regex_automata::meta::wrappers::Hybrid::new (243x) + 47,980 ( 0.01%) 4 ( 0.00%) . . < /home/.cargo/registry/src/index.crates.io-6f17d22bba15001f/regex-automata-0.4.6/src/meta/strategy.rs:regex_automata::meta::strategy::new (175x) [./target/valgrind/s4] + 21,951 ( 0.01%) . . . < /home/.cargo/registry/src/index.crates.io-6f17d22bba15001f/regex-automata-0.4.6/src/dfa/onepass.rs:regex_automata::meta::wrappers::OnePass::new (81x) + 21,951 ( 0.01%) . . . < /home/.cargo/registry/src/index.crates.io-6f17d22bba15001f/regex-automata-0.4.6/src/nfa/thompson/backtrack.rs:regex_automata::meta::wrappers::BoundedBacktracker::new (81x) + 21,951 ( 0.01%) . . . < /home/.cargo/registry/src/index.crates.io-6f17d22bba15001f/regex-automata-0.4.6/src/nfa/thompson/pikevm.rs:regex_automata::meta::wrappers::PikeVM::new (81x) + 3,523 ( 0.00%) . . . < /home/.cargo/registry/src/index.crates.io-6f17d22bba15001f/regex-automata-0.4.6/src/hybrid/dfa.rs:regex_automata::meta::wrappers::ReverseHybrid::new (13x) + 12,806 ( 0.00%) . . . * /home/.cargo/registry/src/index.crates.io-6f17d22bba15001f/regex-automata-0.4.6/src/nfa/thompson/compiler.rs:regex_automata::nfa::thompson::compiler::Compiler::new [./target/valgrind/s4] + 3,370 ( 0.00%) . . . > /home/.cargo/registry/src/index.crates.io-6f17d22bba15001f/regex-syntax-0.8.2/src/parser.rs:regex_syntax::parser::ParserBuilder::new (674x) [./target/valgrind/s4] + + 12,787 ( 0.00%) . . . * /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/alloc/src/raw_vec.rs:regex_automata::nfa::thompson::compiler::Utf8Compiler::compile + + 12,739 ( 0.00%) . . . * /home/.cargo/registry/src/index.crates.io-6f17d22bba15001f/regex-automata-0.4.6/src/util/primitives.rs:regex_automata::util::captures::GroupInfo::new + + 12,676 ( 0.00%) . . . * /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/core/src/iter/range.rs:aho_corasick::nfa::noncontiguous::Compiler::densify + + 12,546 ( 0.00%) . . . * /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/core/src/slice/index.rs:aho_corasick::nfa::noncontiguous::NFA::add_match + + 12,536 ( 0.00%) . . . * /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/alloc/src/vec/mod.rs: as alloc::vec::spec_from_iter::SpecFromIter>::from_iter + 294 ( 0.00%) . . . > /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/alloc/src/collections/btree/map.rs: as core::iter::traits::iterator::Iterator>::next (2x) [./target/valgrind/s4] + + 12,450 ( 0.00%) . . . * /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/core/src/ptr/const_ptr.rs:::case_fold_simple + + 12,443 ( 0.00%) . . . * /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/core/src/ptr/mod.rs:regex_syntax::ast::parse::ParserI

::pop_group + 15,360 ( 0.00%) . . . > ./string/../sysdeps/x86_64/multiarch/memmove-vec-unaligned-erms.S:__memcpy_avx_unaligned_erms (512x) [/usr/lib/x86_64-linux-gnu/libc.so.6] + + 12,401 ( 0.00%) . . . * /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/core/src/option.rs:regex_syntax::hir::literal::Extractor::cross + + 12,360 ( 0.00%) . . . * /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/core/src/option.rs:regex_automata::nfa::thompson::nfa::Inner::into_nfa + + 12,311 ( 0.00%) . . . * /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/core/src/slice/index.rs:regex_automata::util::captures::GroupInfo::new + + 12,240 ( 0.00%) . . . * /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/core/src/convert/num.rs:aho_corasick::util::prefilter::Builder::build + + 12,168 ( 0.00%) . . . * /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/alloc/src/raw_vec.rs:aho_corasick::nfa::noncontiguous::Compiler::densify + 310,461 ( 0.09%) 818 ( 0.10%) . . > /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/alloc/src/raw_vec.rs:alloc::raw_vec::RawVec::reserve::do_reserve_and_handle (314x) [./target/valgrind/s4] + + 12,103 ( 0.00%) . . . * /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/core/src/slice/cmp.rs:regex_automata::util::prefilter::prefixes + 43,281 ( 0.01%) . . . > ./string/../sysdeps/x86_64/multiarch/memcmp-avx2-movbe.S:__memcmp_avx2_movbe (1,941x) [/usr/lib/x86_64-linux-gnu/libc.so.6] + + 12,066 ( 0.00%) . . . * /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/core/src/cmp.rs:regex_automata::dfa::remapper::onepass::::remap + + 12,030 ( 0.00%) . . . * /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/core/src/num/uint_macros.rs:regex_syntax::hir::Properties::repetition + + 102,562 ( 0.03%) . . . < /home/.cargo/registry/src/index.crates.io-6f17d22bba15001f/regex-automata-0.4.6/src/dfa/remapper.rs:regex_automata::dfa::remapper::Remapper::remap (1x) [./target/valgrind/s4] + 12,009 ( 0.00%) . . . * /home/.cargo/registry/src/index.crates.io-6f17d22bba15001f/regex-automata-0.4.6/src/dfa/remapper.rs:regex_automata::dfa::remapper::onepass::::remap [./target/valgrind/s4] + + 11,963 ( 0.00%) . . . * /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/alloc/src/raw_vec.rs:::drop + 5,547,169 ( 1.60%) 2,618 ( 0.32%) . . > /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/alloc/src/raw_vec.rs:alloc::raw_vec::RawVec::reserve::do_reserve_and_handle (525x) [./target/valgrind/s4] + + 11,934 ( 0.00%) . . . * /home/.cargo/registry/src/index.crates.io-6f17d22bba15001f/aho-corasick-1.1.2/src/nfa/noncontiguous.rs:aho_corasick::dfa::Builder::finish_build_both_starts::{{closure}} + + 1,339,535 ( 0.39%) 730 ( 0.09%) 2 ( 0.65%) . < /home/.cargo/registry/src/index.crates.io-6f17d22bba15001f/regex-automata-0.4.6/src/nfa/thompson/compiler.rs:regex_automata::nfa::thompson::compiler::Compiler::c'2 (142x) [./target/valgrind/s4] + 84,098 ( 0.02%) 2 ( 0.00%) . . < /home/.cargo/registry/src/index.crates.io-6f17d22bba15001f/regex-automata-0.4.6/src/nfa/thompson/compiler.rs:regex_automata::nfa::thompson::compiler::Compiler::build_many_from_hir (110x) [./target/valgrind/s4] + 11,844 ( 0.00%) . . . * /home/.cargo/registry/src/index.crates.io-6f17d22bba15001f/regex-automata-0.4.6/src/nfa/thompson/compiler.rs:regex_automata::nfa::thompson::compiler::Compiler::c_at_least [./target/valgrind/s4] + 1,268,486 ( 0.37%) 504 ( 0.06%) 2 ( 0.65%) . > /home/.cargo/registry/src/index.crates.io-6f17d22bba15001f/regex-automata-0.4.6/src/nfa/thompson/compiler.rs:regex_automata::nfa::thompson::compiler::Compiler::c'2 (142x) [./target/valgrind/s4] + 74,247 ( 0.02%) 228 ( 0.03%) . . > /home/.cargo/registry/src/index.crates.io-6f17d22bba15001f/regex-automata-0.4.6/src/nfa/thompson/builder.rs:regex_automata::nfa::thompson::builder::Builder::patch (504x) [./target/valgrind/s4] + 33,110 ( 0.01%) . . . > /home/.cargo/registry/src/index.crates.io-6f17d22bba15001f/regex-automata-0.4.6/src/nfa/thompson/compiler.rs:regex_automata::nfa::thompson::compiler::Compiler::c (110x) [./target/valgrind/s4] + 288 ( 0.00%) . . . > /home/.cargo/registry/src/index.crates.io-6f17d22bba15001f/regex-syntax-0.8.2/src/hir/mod.rs:regex_syntax::hir::Hir::properties (144x) [./target/valgrind/s4] + + 11,772 ( 0.00%) . . . * /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/core/src/slice/index.rs:regex_syntax::hir::interval::IntervalSet::canonicalize + + 11,749 ( 0.00%) . . . * /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/alloc/src/vec/mod.rs:regex_automata::nfa::thompson::compiler::Utf8Compiler::add + + 16,986 ( 0.00%) 4 ( 0.00%) 138 (44.52%) 1 ( 0.07%) < ./malloc/./malloc/malloc.c:_int_malloc (137x) [/usr/lib/x86_64-linux-gnu/libc.so.6] + 11,701 ( 0.00%) . . . * ./malloc/./malloc/malloc.c:sysmalloc [/usr/lib/x86_64-linux-gnu/libc.so.6] + 128 ( 0.00%) 0 3 ( 0.97%) . > ./malloc/./malloc/morecore.c:__glibc_morecore (3x) [/usr/lib/x86_64-linux-gnu/libc.so.6] + 63 ( 0.00%) 4 ( 0.00%) 1 ( 0.32%) . > ./malloc/./malloc/malloc.c:sysmalloc_mmap.constprop.0 (1x) [/usr/lib/x86_64-linux-gnu/libc.so.6] + + 11,624 ( 0.00%) . . . * /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/core/src/option.rs:regex_automata::nfa::thompson::compiler::Utf8Compiler::add + + 11,610 ( 0.00%) . . . * /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/core/src/ptr/const_ptr.rs:regex_syntax::unicode::SimpleCaseFolder::overlaps + + 11,594 ( 0.00%) . . . * /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/core/src/ptr/mod.rs:regex_automata::hybrid::dfa::Lazy::cache_next_state + +101,781,410 (29.40%) 222,193 (27.44%) 99 (31.94%) . < /home/.cargo/registry/src/index.crates.io-6f17d22bba15001f/regex-automata-0.4.6/src/meta/strategy.rs:regex_automata::meta::strategy::new (162x) [./target/valgrind/s4] + 1,085,830 ( 0.31%) 2,138 ( 0.26%) . . < /home/.cargo/registry/src/index.crates.io-6f17d22bba15001f/regex-automata-0.4.6/src/nfa/thompson/compiler.rs:regex_automata::meta::strategy::new (13x) + 11,548 ( 0.00%) . . . * /home/.cargo/registry/src/index.crates.io-6f17d22bba15001f/regex-automata-0.4.6/src/nfa/thompson/compiler.rs:regex_automata::nfa::thompson::compiler::Compiler::build_many_from_hir [./target/valgrind/s4] +83,534,697 (24.13%) 191,704 (23.67%) 88 (28.39%) . > /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/core/src/iter/adapters/map.rs: as core::iter::traits::iterator::Iterator>::next (350x) [./target/valgrind/s4] +19,117,859 ( 5.52%) 32,530 ( 4.02%) 11 ( 3.55%) . > /home/.cargo/registry/src/index.crates.io-6f17d22bba15001f/regex-automata-0.4.6/src/nfa/thompson/builder.rs:regex_automata::nfa::thompson::builder::Builder::build (175x) [./target/valgrind/s4] + 84,098 ( 0.02%) 2 ( 0.00%) . . > /home/.cargo/registry/src/index.crates.io-6f17d22bba15001f/regex-automata-0.4.6/src/nfa/thompson/compiler.rs:regex_automata::nfa::thompson::compiler::Compiler::c_at_least (110x) [./target/valgrind/s4] + 46,869 ( 0.01%) 50 ( 0.01%) . . > /home/.cargo/registry/src/index.crates.io-6f17d22bba15001f/regex-syntax-0.8.2/src/hir/mod.rs:regex_syntax::hir::Hir::dot (110x) [./target/valgrind/s4] + 28,140 ( 0.01%) 1 ( 0.00%) . . > /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/core/src/ptr/mod.rs:core::ptr::drop_in_place (110x) [./target/valgrind/s4] + 7,730 ( 0.00%) . . . > /home/.cargo/registry/src/index.crates.io-6f17d22bba15001f/regex-automata-0.4.6/src/nfa/thompson/builder.rs:regex_automata::nfa::thompson::builder::Builder::patch (175x) [./target/valgrind/s4] + 5,425 ( 0.00%) . . . > /home/.cargo/registry/src/index.crates.io-6f17d22bba15001f/regex-automata-0.4.6/src/nfa/thompson/builder.rs:regex_automata::nfa::thompson::builder::Builder::clear (175x) [./target/valgrind/s4] + 350 ( 0.00%) . . . > /home/.cargo/registry/src/index.crates.io-6f17d22bba15001f/regex-syntax-0.8.2/src/hir/mod.rs:regex_syntax::hir::Hir::properties (175x) [./target/valgrind/s4] + + 11,458 ( 0.00%) . . . * /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/alloc/src/vec/mod.rs:regex_syntax::ast::parse::ParserI

::push_class_open + 665,842 ( 0.19%) 320 ( 0.04%) . . > /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/alloc/src/raw_vec.rs:alloc::raw_vec::RawVec::reserve_for_push (81x) [./target/valgrind/s4] + + 11,409 ( 0.00%) . . . * /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/core/src/slice/iter/macros.rs:regex_syntax::hir::Hir::alternation + + 11,388 ( 0.00%) . . . * /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/alloc/src/collections/btree/node.rs: as alloc::vec::spec_from_iter::SpecFromIter>::from_iter + + 11,332 ( 0.00%) . . . * /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/core/src/cmp.rs:regex_syntax::hir::literal::Seq::optimize_by_preference + + 11,331 ( 0.00%) . . . * /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/core/src/intrinsics.rs:alloc::vec::Vec::retain_mut + + 2,484,151 ( 0.72%) 7,913 ( 0.98%) . . < /home/.cargo/registry/src/index.crates.io-6f17d22bba15001f/regex-automata-0.4.6/src/meta/reverse_inner.rs:regex_automata::meta::reverse_inner::extract (193x) [./target/valgrind/s4] + 11,325 ( 0.00%) . . . * /home/.cargo/registry/src/index.crates.io-6f17d22bba15001f/regex-automata-0.4.6/src/meta/reverse_inner.rs:regex_automata::meta::reverse_inner::flatten [./target/valgrind/s4] + 1,648,306 ( 0.48%) 7,175 ( 0.89%) . . > /home/.cargo/registry/src/index.crates.io-6f17d22bba15001f/regex-automata-0.4.6/src/meta/reverse_inner.rs:regex_automata::meta::reverse_inner::flatten'2 (1,589x) [./target/valgrind/s4] + 551,421 ( 0.16%) 256 ( 0.03%) . . > /home/.cargo/registry/src/index.crates.io-6f17d22bba15001f/regex-syntax-0.8.2/src/hir/mod.rs:regex_syntax::hir::Hir::alternation (55x) [./target/valgrind/s4] + 43,665 ( 0.01%) 74 ( 0.01%) . . > /home/.cargo/registry/src/index.crates.io-6f17d22bba15001f/regex-syntax-0.8.2/src/hir/mod.rs:regex_syntax::hir::Hir::concat (29x) [./target/valgrind/s4] + 10,126 ( 0.00%) 32 ( 0.00%) . . > /home/.cargo/registry/src/index.crates.io-6f17d22bba15001f/regex-syntax-0.8.2/src/hir/mod.rs:regex_syntax::hir::Repetition::with (75x) [./target/valgrind/s4] + 568 ( 0.00%) . . . > /home/.cargo/registry/src/index.crates.io-6f17d22bba15001f/regex-syntax-0.8.2/src/hir/mod.rs:regex_syntax::hir::Hir::kind (284x) [./target/valgrind/s4] + + 11,320 ( 0.00%) . . . * /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/core/src/ptr/mod.rs:regex_syntax::hir::literal::Extractor::extract'2 + 3,220 ( 0.00%) . . . > /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/alloc/src/vec/mod.rs: as core::ops::drop::Drop>::drop (322x) [./target/valgrind/s4] + + 11,310 ( 0.00%) . . . * /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/core/src/ptr/const_ptr.rs:::visit_class_set_item_post + + 11,302 ( 0.00%) . . . * /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/alloc/src/macros.rs:regex_syntax::hir::literal::Extractor::extract'2 + + 11,235 ( 0.00%) . . . * /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/core/src/slice/index.rs:regex_automata::dfa::onepass::InternalBuilder::add_dfa_state_for_nfa_state + + 11,174 ( 0.00%) . . . * /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/alloc/src/raw_vec.rs: as alloc::vec::spec_from_iter::SpecFromIter>::from_iter + 1,076 ( 0.00%) . . . > /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/alloc/src/raw_vec.rs:alloc::raw_vec::RawVec::reserve::do_reserve_and_handle (2x) [./target/valgrind/s4] + + 11,152 ( 0.00%) . . . * /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/core/src/slice/cmp.rs:alloc::collections::btree::map::BTreeMap::insert + 30,680 ( 0.01%) . . . > ./string/../sysdeps/x86_64/multiarch/memcmp-avx2-movbe.S:__memcmp_avx2_movbe (1,394x) [/usr/lib/x86_64-linux-gnu/libc.so.6] + + 11,110 ( 0.00%) . . . * /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/alloc/src/vec/mod.rs:regex_automata::dfa::onepass::InternalBuilder::stack_push + 92,050 ( 0.03%) 260 ( 0.03%) . . > /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/alloc/src/raw_vec.rs:alloc::raw_vec::RawVec::reserve_for_push (211x) [./target/valgrind/s4] + + 11,052 ( 0.00%) . . . * /home/.cargo/registry/src/index.crates.io-6f17d22bba15001f/regex-automata-0.4.6/src/util/sparse_set.rs:regex_automata::util::determinize::state::State::iter_nfa_state_ids + + 11,040 ( 0.00%) . . . * /home/.cargo/registry/src/index.crates.io-6f17d22bba15001f/aho-corasick-1.1.2/src/util/primitives.rs:aho_corasick::nfa::noncontiguous::NFA::iter_trans + + 11,040 ( 0.00%) . . . * /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/core/src/slice/index.rs:aho_corasick::nfa::noncontiguous::NFA::iter_trans + + 11,010 ( 0.00%) . . . * /home/.cargo/registry/src/index.crates.io-6f17d22bba15001f/aho-corasick-1.1.2/src/nfa/noncontiguous.rs:aho_corasick::dfa::DFA::set_matches + + 22,502 ( 0.01%) . . . < ./elf/./elf/dl-lookup.c:do_lookup_x (191x) [/usr/lib/x86_64-linux-gnu/ld-linux-x86-64.so.2] + 10,932 ( 0.00%) . . . * ./elf/./elf/dl-lookup.c:check_match [/usr/lib/x86_64-linux-gnu/ld-linux-x86-64.so.2] + 11,570 ( 0.00%) . . . > ./string/../sysdeps/x86_64/strcmp.S:strcmp (297x) [/usr/lib/x86_64-linux-gnu/ld-linux-x86-64.so.2] + + 10,884 ( 0.00%) . . . * /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/core/src/num/uint_macros.rs:regex_automata::nfa::thompson::literal_trie::LiteralTrie::compile + + 10,810 ( 0.00%) . . . * /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/alloc/src/vec/mod.rs:aho_corasick::nfa::noncontiguous::NFA::add_transition + + 10,796 ( 0.00%) . . . * /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/alloc/src/raw_vec.rs: as core::clone::Clone>::clone + + 10,716 ( 0.00%) . . . * /home/.cargo/registry/src/index.crates.io-6f17d22bba15001f/regex-automata-0.4.6/src/util/primitives.rs:regex_automata::dfa::onepass::InternalBuilder::add_dfa_state_for_nfa_state + + 19,278 ( 0.01%) . . . < /home/.cargo/registry/src/index.crates.io-6f17d22bba15001f/regex-automata-0.4.6/src/meta/wrappers.rs:regex_automata::meta::wrappers::Hybrid::new (162x) [./target/valgrind/s4] + 1,547 ( 0.00%) . . . < /home/.cargo/registry/src/index.crates.io-6f17d22bba15001f/regex-automata-0.4.6/src/meta/wrappers.rs:regex_automata::meta::wrappers::ReverseHybrid::new (13x) [./target/valgrind/s4] + 10,675 ( 0.00%) . . . * /home/.cargo/registry/src/index.crates.io-6f17d22bba15001f/regex-automata-0.4.6/src/hybrid/dfa.rs:regex_automata::hybrid::dfa::Builder::configure [./target/valgrind/s4] + + 10,650 ( 0.00%) . . . * /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/core/src/ptr/const_ptr.rs:regex_syntax::unicode::SimpleCaseFolder::mapping + + 24,612 ( 0.01%) . . . < /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/alloc/src/sync.rs:regex_automata::nfa::thompson::compiler::Compiler::c_cap'2 (1,172x) + 24,612 ( 0.01%) . . . < /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/alloc/src/sync.rs:regex_automata::util::captures::GroupInfo::new (1,172x) + 12,264 ( 0.00%) . . . < /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/alloc/src/sync.rs:regex_automata::util::determinize::state::State::dead (584x) + 7,308 ( 0.00%) . . . < /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/alloc/src/sync.rs:regex_automata::hybrid::dfa::Lazy::cache_next_state (348x) + 3,360 ( 0.00%) . . . < /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/alloc/src/sync.rs:regex::builders::Builder::build_one_bytes (160x) + 1,722 ( 0.00%) . . . < /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/alloc/src/sync.rs:regex_automata::hybrid::dfa::Lazy::cache_start_group (82x) + 126 ( 0.00%) . . . < /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/alloc/src/sync.rs:std::thread::Thread::new (6x) + 42 ( 0.00%) . . . < /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/alloc/src/sync.rs:regex::builders::Builder::build_one_string (2x) + 10,578 ( 0.00%) . . . * /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/core/src/cmp.rs:alloc::sync::arcinner_layout_for_value_layout [./target/valgrind/s4] + + 10,496 ( 0.00%) . . . * /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/core/src/ptr/mod.rs:aho_corasick::nfa::noncontiguous::NFA::alloc_state + + 10,491 ( 0.00%) . . . * /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/core/src/ptr/mut_ptr.rs:::next + + 10,448 ( 0.00%) . . . * /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/alloc/src/raw_vec.rs:core::ptr::drop_in_place + + 10,444 ( 0.00%) . . . * /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/core/src/intrinsics.rs:regex_syntax::hir::literal::PreferenceTrie::insert + 38,848 ( 0.01%) . . . > ./string/../sysdeps/x86_64/multiarch/memmove-vec-unaligned-erms.S:__memcpy_avx_unaligned_erms (2,611x) [/usr/lib/x86_64-linux-gnu/libc.so.6] + + 10,431 ( 0.00%) . . . * /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/alloc/src/raw_vec.rs:alloc::vec::Vec::retain_mut + + 10,395 ( 0.00%) . . . * /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/alloc/src/boxed.rs:regex_syntax::hir::Properties::capture + + 10,395 ( 0.00%) . . . * /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/core/src/cell.rs:regex_automata::nfa::thompson::compiler::Compiler::c_cap'2 + + 10,331 ( 0.00%) . . . * /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/alloc/src/raw_vec.rs:regex_automata::dfa::onepass::Builder::build_from_nfa + 120,144 ( 0.03%) 194 ( 0.02%) . . > /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/alloc/src/raw_vec.rs:alloc::raw_vec::RawVec::reserve::do_reserve_and_handle (243x) [./target/valgrind/s4] + + 10,311 ( 0.00%) . . . * /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/core/src/num/uint_macros.rs:aho_corasick::nfa::noncontiguous::Compiler::densify + + 10,278 ( 0.00%) . . . * /home/.cargo/registry/src/index.crates.io-6f17d22bba15001f/regex-syntax-0.8.2/src/ast/mod.rs:regex_syntax::ast::parse::ParserI

::parse_uncounted_repetition + + 10,170 ( 0.00%) . . . * /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/alloc/src/alloc.rs:regex_syntax::hir::Properties::repetition + 490,825 ( 0.14%) 3,696 ( 0.46%) . . > ???:__rust_alloc (2,034x) [./target/valgrind/s4] + + 53,781 ( 0.02%) 90 ( 0.01%) . . < ./malloc/./malloc/malloc.c:posix_memalign (121x) [/usr/lib/x86_64-linux-gnu/libc.so.6] + 10,113 ( 0.00%) . . . * ./malloc/./malloc/malloc.c:_int_memalign [/usr/lib/x86_64-linux-gnu/libc.so.6] + 30,433 ( 0.01%) . . . > ./malloc/./malloc/malloc.c:_int_malloc (121x) [/usr/lib/x86_64-linux-gnu/libc.so.6] + 13,235 ( 0.00%) 90 ( 0.01%) . . > ./malloc/./malloc/malloc.c:_int_free (165x) [/usr/lib/x86_64-linux-gnu/libc.so.6] + + 10,110 ( 0.00%) . . . * /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/alloc/src/vec/mod.rs:regex_automata::nfa::thompson::range_trie::RangeTrie::add_empty + 77,391 ( 0.02%) 4 ( 0.00%) . . > /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/alloc/src/raw_vec.rs:alloc::raw_vec::RawVec::reserve_for_push (674x) [./target/valgrind/s4] + + 10,096 ( 0.00%) . . . * /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/core/src/iter/adapters/take.rs:aho_corasick::packed::teddy::generic::Teddy<_>::new + + 9,954 ( 0.00%) . . . * /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/core/src/str/validations.rs:core::str::count::char_count_general_case + + 9,833 ( 0.00%) . . . * ./malloc/./malloc/malloc.c:__malloc_arena_thread_freeres + 40,155 ( 0.01%) 709 ( 0.09%) . . > ./malloc/./malloc/malloc.c:_int_free (375x) [/usr/lib/x86_64-linux-gnu/libc.so.6] + 142 ( 0.00%) 2 ( 0.00%) . . > ./malloc/./malloc/malloc.c:free (1x) [/usr/lib/x86_64-linux-gnu/libc.so.6] + + 9,826 ( 0.00%) . . . * /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/alloc/src/boxed.rs:regex_syntax::hir::Properties::alternation + + 9,800 ( 0.00%) . . . * /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/core/src/option.rs:regex_automata::hybrid::dfa::Builder::configure + + 9,788 ( 0.00%) . . . * /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/core/src/slice/iter/macros.rs:aho_corasick::packed::teddy::generic::Teddy<_>::new + +-------------------------------------------------------------------------------- +-- Auto-annotated source: /home/.cargo/registry/src/index.crates.io-6f17d22bba15001f/regex-automata-0.4.6/src/nfa/thompson/compiler.rs +-------------------------------------------------------------------------------- +Ir Ge sysCount sysTime + +-- line 448 ---------------------------------------- + . . . . /// None, + . . . . /// re.find(&mut cache, b"\nabc\n"), + . . . . /// ); + . . . . /// + . . . . /// # Ok::<(), Box>(()) + . . . . /// ``` + . . . . pub fn look_matcher(mut self, m: LookMatcher) -> Config { + . . . . self.look_matcher = Some(m); + 104 ( 0.00%) . . . self + . . . . } + . . . . + . . . . /// Whether to compile an unanchored prefix into this NFA. + . . . . /// + . . . . /// This is enabled by default. It is made available for tests only to make + . . . . /// it easier to unit test the output of the compiler. + . . . . #[cfg(test)] + . . . . fn unanchored_prefix(mut self, yes: bool) -> Config { +-- line 464 ---------------------------------------- +-- line 468 ---------------------------------------- + . . . . + . . . . /// Returns whether this configuration has enabled UTF-8 mode. + . . . . pub fn get_utf8(&self) -> bool { + . . . . self.utf8.unwrap_or(true) + . . . . } + . . . . + . . . . /// Returns whether this configuration has enabled reverse NFA compilation. + . . . . pub fn get_reverse(&self) -> bool { + 175 ( 0.00%) . . . self.reverse.unwrap_or(false) + . . . . } + . . . . + . . . . /// Return the configured NFA size limit, if it exists, in the number of + . . . . /// bytes of heap used. + . . . . pub fn get_nfa_size_limit(&self) -> Option { + 350 ( 0.00%) . . . self.nfa_size_limit.unwrap_or(None) + . . . . } + . . . . + . . . . /// Return whether NFA shrinking is enabled. + . . . . pub fn get_shrink(&self) -> bool { + . . . . self.shrink.unwrap_or(false) + . . . . } + . . . . + . . . . /// Return whether NFA compilation is configured to produce capture states. +-- line 490 ---------------------------------------- +-- line 521 ---------------------------------------- + . . . . /// Overwrite the default configuration such that the options in `o` are + . . . . /// always used. If an option in `o` is not set, then the corresponding + . . . . /// option in `self` is used. If it's not set in `self` either, then it + . . . . /// remains not set. + . . . . pub(crate) fn overwrite(&self, o: Config) -> Config { + . . . . Config { + . . . . utf8: o.utf8.or(self.utf8), + . . . . reverse: o.reverse.or(self.reverse), + 13 ( 0.00%) . . . nfa_size_limit: o.nfa_size_limit.or(self.nfa_size_limit), + . . . . shrink: o.shrink.or(self.shrink), + 13 ( 0.00%) . . . which_captures: o.which_captures.or(self.which_captures), + 13 ( 0.00%) . . . look_matcher: o.look_matcher.or_else(|| self.look_matcher.clone()), + . . . . #[cfg(test)] + . . . . unanchored_prefix: o.unanchored_prefix.or(self.unanchored_prefix), + . . . . } + . . . . } + . . . . } + . . . . + . . . . /// A configuration indicating which kinds of + . . . . /// [`State::Capture`](crate::nfa::thompson::State::Capture) states to include. +-- line 540 ---------------------------------------- +-- line 571 ---------------------------------------- + . . . . WhichCaptures::All + . . . . } + . . . . } + . . . . + . . . . impl WhichCaptures { + . . . . /// Returns true if this configuration indicates that no capture states + . . . . /// should be produced in an NFA. + . . . . pub fn is_none(&self) -> bool { + 94 ( 0.00%) . . . matches!(*self, WhichCaptures::None) + . . . . } + . . . . + . . . . /// Returns true if this configuration indicates that some capture states + . . . . /// should be added to an NFA. Note that this might only include capture + . . . . /// states for implicit capture groups. + . . . . pub fn is_any(&self) -> bool { + . . . . !self.is_none() + . . . . } +-- line 587 ---------------------------------------- +-- line 710 ---------------------------------------- + . . . . trie_state: RefCell, + . . . . /// State used for caching common suffixes when compiling reverse UTF-8 + . . . . /// automata (for Unicode character classes). + . . . . utf8_suffix: RefCell, + . . . . } + . . . . + . . . . impl Compiler { + . . . . /// Create a new NFA builder with its default configuration. + 2,696 ( 0.00%) . . . pub fn new() -> Compiler { + 6,066 ( 0.00%) . . . Compiler { + 674 ( 0.00%) . . . parser: ParserBuilder::new(), + 3,370 ( 0.00%) . . . => /home/.cargo/registry/src/index.crates.io-6f17d22bba15001f/regex-syntax-0.8.2/src/parser.rs:regex_syntax::parser::ParserBuilder::new (674x) + . . . . config: Config::default(), + . . . . builder: RefCell::new(Builder::new()), + . . . . utf8_state: RefCell::new(Utf8State::new()), + . . . . trie_state: RefCell::new(RangeTrie::new()), + . . . . utf8_suffix: RefCell::new(Utf8SuffixMap::new(1000)), + . . . . } + 3,370 ( 0.00%) . . . } + . . . . + . . . . /// Compile the given regular expression pattern into an NFA. + . . . . /// + . . . . /// If there was a problem parsing the regex, then that error is returned. + . . . . /// + . . . . /// Otherwise, if there was a problem building the NFA, then an error is + . . . . /// returned. The only error that can occur is if the compiled regex would + . . . . /// exceed the size limits configured on this builder, or if any part of +-- line 735 ---------------------------------------- +-- line 829 ---------------------------------------- + . . . . /// let mut caps = re.create_captures(); + . . . . /// let expected = Some(Match::must(0, 3..4)); + . . . . /// re.captures(&mut cache, "!@#A#@!", &mut caps); + . . . . /// assert_eq!(expected, caps.get_match()); + . . . . /// + . . . . /// # Ok::<(), Box>(()) + . . . . /// ``` + . . . . pub fn build_from_hir(&self, expr: &Hir) -> Result { + 78 ( 0.00%) . . . self.build_many_from_hir(&[expr]) +1,085,830 ( 0.31%) 2,138 ( 0.26%) . . => /home/.cargo/registry/src/index.crates.io-6f17d22bba15001f/regex-automata-0.4.6/src/nfa/thompson/compiler.rs:regex_automata::nfa::thompson::compiler::Compiler::build_many_from_hir (13x) + . . . . } + . . . . + . . . . /// Compile the given high level intermediate representations of regular + . . . . /// expressions into a single NFA. + . . . . /// + . . . . /// When matches are returned, the pattern ID corresponds to the index of + . . . . /// the pattern in the slice given. + . . . . /// +-- line 845 ---------------------------------------- +-- line 869 ---------------------------------------- + . . . . /// let mut cache = re.create_cache(); + . . . . /// let mut caps = re.create_captures(); + . . . . /// let expected = Some(Match::must(1, 1..2)); + . . . . /// re.captures(&mut cache, "!A! !A!", &mut caps); + . . . . /// assert_eq!(expected, caps.get_match()); + . . . . /// + . . . . /// # Ok::<(), Box>(()) + . . . . /// ``` + 1,575 ( 0.00%) . . . pub fn build_many_from_hir>( + . . . . &self, + . . . . exprs: &[H], + . . . . ) -> Result { + . . . . self.compile(exprs) + 1,575 ( 0.00%) . . . } + . . . . + . . . . /// Apply the given NFA configuration options to this builder. + . . . . /// + . . . . /// # Example + . . . . /// + . . . . /// ``` + . . . . /// use regex_automata::nfa::thompson::NFA; + . . . . /// + . . . . /// let config = NFA::config().nfa_size_limit(Some(1_000)); + . . . . /// let nfa = NFA::compiler().configure(config).build(r"(?-u)\w")?; + . . . . /// assert_eq!(nfa.pattern_len(), 1); + . . . . /// + . . . . /// # Ok::<(), Box>(()) + . . . . /// ``` + 13 ( 0.00%) . . . pub fn configure(&mut self, config: Config) -> &mut Compiler { + 1,617 ( 0.00%) . . . self.config = self.config.overwrite(config); + . . . . self + 13 ( 0.00%) . . . } + . . . . + . . . . /// Set the syntax configuration for this builder using + . . . . /// [`syntax::Config`](crate::util::syntax::Config). + . . . . /// + . . . . /// This permits setting things like case insensitivity, Unicode and multi + . . . . /// line mode. + . . . . /// + . . . . /// This syntax configuration only applies when an NFA is built directly +-- line 908 ---------------------------------------- +-- line 932 ---------------------------------------- + . . . . + . . . . impl Compiler { + . . . . /// Compile the sequence of HIR expressions given. Pattern IDs are + . . . . /// allocated starting from 0, in correspondence with the slice given. + . . . . /// + . . . . /// It is legal to provide an empty slice. In that case, the NFA returned + . . . . /// has no patterns and will never match anything. + . . . . fn compile>(&self, exprs: &[H]) -> Result { + 350 ( 0.00%) . . . if exprs.len() > PatternID::LIMIT { + . . . . return Err(BuildError::too_many_patterns(exprs.len())); + . . . . } + 269 ( 0.00%) . . . if self.config.get_reverse() + . . . . && self.config.get_which_captures().is_any() + . . . . { + . . . . return Err(BuildError::unsupported_captures()); + . . . . } + . . . . + 350 ( 0.00%) . . . self.builder.borrow_mut().clear(); + 5,425 ( 0.00%) . . . => /home/.cargo/registry/src/index.crates.io-6f17d22bba15001f/regex-automata-0.4.6/src/nfa/thompson/builder.rs:regex_automata::nfa::thompson::builder::Builder::clear (175x) + . . . . self.builder.borrow_mut().set_utf8(self.config.get_utf8()); + . . . . self.builder.borrow_mut().set_reverse(self.config.get_reverse()); + . . . . self.builder + . . . . .borrow_mut() + . . . . .set_look_matcher(self.config.get_look_matcher()); + . . . . self.builder + . . . . .borrow_mut() + . . . . .set_size_limit(self.config.get_nfa_size_limit())?; + . . . . + . . . . // We always add an unanchored prefix unless we were specifically told + . . . . // not to (for tests only), or if we know that the regex is anchored + . . . . // for all matches. When an unanchored prefix is not added, then the + . . . . // NFA's anchored and unanchored start states are equivalent. + . . . . let all_anchored = exprs.iter().all(|e| { + 175 ( 0.00%) . . . let props = e.borrow().properties(); + 350 ( 0.00%) . . . => /home/.cargo/registry/src/index.crates.io-6f17d22bba15001f/regex-syntax-0.8.2/src/hir/mod.rs:regex_syntax::hir::Hir::properties (175x) + 350 ( 0.00%) . . . if self.config.get_reverse() { + . . . . props.look_set_suffix().contains(hir::Look::End) + . . . . } else { + . . . . props.look_set_prefix().contains(hir::Look::Start) + . . . . } + . . . . }); + . . . . let anchored = !self.config.get_unanchored_prefix() || all_anchored; + . . . . let unanchored_prefix = if anchored { + . . . . self.c_empty()? + . . . . } else { + 880 ( 0.00%) . . . self.c_at_least(&Hir::dot(hir::Dot::AnyByte), false, 0)? + 84,098 ( 0.02%) 2 ( 0.00%) . . => /home/.cargo/registry/src/index.crates.io-6f17d22bba15001f/regex-automata-0.4.6/src/nfa/thompson/compiler.rs:regex_automata::nfa::thompson::compiler::Compiler::c_at_least (110x) + 46,869 ( 0.01%) 50 ( 0.01%) . . => /home/.cargo/registry/src/index.crates.io-6f17d22bba15001f/regex-syntax-0.8.2/src/hir/mod.rs:regex_syntax::hir::Hir::dot (110x) + 440 ( 0.00%) . . . }; + 28,140 ( 0.01%) 1 ( 0.00%) . . => /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/core/src/ptr/mod.rs:core::ptr::drop_in_place (110x) + . . . . + . . . . let compiled = self.c_alt_iter(exprs.iter().map(|e| { + . . . . let _ = self.start_pattern()?; + 700 ( 0.00%) . . . let one = self.c_cap(0, None, e.borrow())?; +83,467,449 (24.11%) 191,626 (23.66%) 87 (28.06%) . => /home/.cargo/registry/src/index.crates.io-6f17d22bba15001f/regex-automata-0.4.6/src/nfa/thompson/compiler.rs:regex_automata::nfa::thompson::compiler::Compiler::c_cap (175x) + . . . . let match_state_id = self.add_match()?; + . . . . self.patch(one.end, match_state_id)?; + . . . . let _ = self.finish_pattern(one.start)?; + . . . . Ok(ThompsonRef { start: one.start, end: match_state_id }) + . . . . }))?; + . . . . self.patch(unanchored_prefix.end, compiled.start)?; + 700 ( 0.00%) . . . let nfa = self +19,117,859 ( 5.52%) 32,530 ( 4.02%) 11 ( 3.55%) . => /home/.cargo/registry/src/index.crates.io-6f17d22bba15001f/regex-automata-0.4.6/src/nfa/thompson/builder.rs:regex_automata::nfa::thompson::builder::Builder::build (175x) + . . . . .builder + . . . . .borrow_mut() + . . . . .build(compiled.start, unanchored_prefix.start)?; + . . . . + . . . . debug!("HIR-to-NFA compilation complete, config: {:?}", self.config); + 525 ( 0.00%) . . . Ok(nfa) + . . . . } + . . . . + . . . . /// Compile an arbitrary HIR expression. +223,884 ( 0.06%) . . . fn c(&self, expr: &Hir) -> Result { + . . . . use regex_syntax::hir::{Class, HirKind::*}; + . . . . +309,994 ( 0.09%) . . . match *expr.kind() { + 570 ( 0.00%) . . . => /home/.cargo/registry/src/index.crates.io-6f17d22bba15001f/regex-syntax-0.8.2/src/hir/mod.rs:regex_syntax::hir::Hir::kind (285x) + . . . . Empty => self.c_empty(), + 17,662 ( 0.01%) . . . Literal(hir::Literal(ref bytes)) => self.c_literal(bytes), + 110 ( 0.00%) . . . Class(Class::Bytes(ref c)) => self.c_byte_class(c), + 5,631 ( 0.00%) . . . Class(Class::Unicode(ref c)) => self.c_unicode_class(c), + 245 ( 0.00%) . . . Look(ref look) => self.c_look(look), + . . . . Repetition(ref rep) => self.c_repetition(rep), + 16,632 ( 0.00%) . . . Capture(ref c) => self.c_cap(c.index, c.name.as_deref(), &c.sub), +86,288,458 (24.93%) 201,659 (24.90%) 86 (27.74%) . => /home/.cargo/registry/src/index.crates.io-6f17d22bba15001f/regex-automata-0.4.6/src/nfa/thompson/compiler.rs:regex_automata::nfa::thompson::compiler::Compiler::c_cap'2 (1,386x) + 44,337 ( 0.01%) . . . Concat(ref es) => self.c_concat(es.iter().map(|e| self.c(e))), +83,117,734 (24.01%) 191,492 (23.65%) 87 (28.06%) . => /home/.cargo/registry/src/index.crates.io-6f17d22bba15001f/regex-automata-0.4.6/src/nfa/thompson/compiler.rs:regex_automata::nfa::thompson::compiler::Compiler::c'2 (2,839x) + . . . . Alternation(ref es) => self.c_alt_slice(es), + . . . . } +183,952 ( 0.05%) . . . } + . . . . + . . . . /// Compile a concatenation of the sub-expressions yielded by the given + . . . . /// iterator. If the iterator yields no elements, then this compiles down + . . . . /// to an "empty" state that always matches. + . . . . /// + . . . . /// If the compiler is in reverse mode, then the expressions given are + . . . . /// automatically compiled in reverse. + 3,096 ( 0.00%) . . . fn c_concat(&self, mut it: I) -> Result + . . . . where + . . . . I: DoubleEndedIterator>, + . . . . { +190,030 ( 0.05%) . . . let first = if self.is_reverse() { it.next_back() } else { it.next() }; +211,121 ( 0.06%) 514 ( 0.06%) . . => /home/.cargo/registry/src/index.crates.io-6f17d22bba15001f/regex-automata-0.4.6/src/nfa/thompson/compiler.rs:regex_automata::nfa::thompson::compiler::Compiler::c'2 (344x) + 8,406 ( 0.00%) . . . let ThompsonRef { start, mut end } = match first { + . . . . Some(result) => result?, + . . . . None => return self.c_empty(), + . . . . }; + . . . . loop { + . . . . let next = +447,576 ( 0.13%) . . . if self.is_reverse() { it.next_back() } else { it.next() }; +115,282 ( 0.03%) 330 ( 0.04%) . . => /home/.cargo/registry/src/index.crates.io-6f17d22bba15001f/regex-automata-0.4.6/src/nfa/thompson/compiler.rs:regex_automata::nfa::thompson::compiler::Compiler::c'2 (236x) + 16,852 ( 0.00%) . . . let compiled = match next { + . . . . Some(result) => result?, + . . . . None => break, + . . . . }; + . . . . self.patch(end, compiled.start)?; + . . . . end = compiled.end; + . . . . } + 52,136 ( 0.02%) . . . Ok(ThompsonRef { start, end }) + 2,752 ( 0.00%) . . . } + . . . . + . . . . /// Compile an alternation of the given HIR values. + . . . . /// + . . . . /// This is like 'c_alt_iter', but it accepts a slice of HIR values instead + . . . . /// of an iterator of compiled NFA subgraphs. The point of accepting a + . . . . /// slice here is that it opens up some optimization opportunities. For + . . . . /// example, if all of the HIR values are literals, then this routine might + . . . . /// re-shuffle them to make NFA epsilon closures substantially faster. + . . . . fn c_alt_slice(&self, exprs: &[Hir]) -> Result { + . . . . // self.c_alt_iter(exprs.iter().map(|e| self.c(e))) + . . . . let literal_count = exprs + . . . . .iter() + . . . . .filter(|e| { +133,300 ( 0.04%) . . . matches!(*e.kind(), hir::HirKind::Literal(hir::Literal(_))) + 4 ( 0.00%) . . . => /home/.cargo/registry/src/index.crates.io-6f17d22bba15001f/regex-syntax-0.8.2/src/hir/mod.rs:regex_syntax::hir::Hir::kind (2x) + . . . . }) + . . . . .count(); + 4,268 ( 0.00%) . . . if literal_count <= 1 || literal_count < exprs.len() { + 26,995 ( 0.01%) . . . return self.c_alt_iter(exprs.iter().map(|e| self.c(e))); +21,009,369 ( 6.07%) 14,398 ( 1.78%) 25 ( 8.06%) . => /home/.cargo/registry/src/index.crates.io-6f17d22bba15001f/regex-automata-0.4.6/src/nfa/thompson/compiler.rs:regex_automata::nfa::thompson::compiler::Compiler::c'2 (6,614x) + . . . . } + . . . . + 495 ( 0.00%) . . . let mut trie = if self.is_reverse() { + . . . . LiteralTrie::reverse() + . . . . } else { + . . . . LiteralTrie::forward() + . . . . }; + . . . . for expr in exprs.iter() { +106,844 ( 0.03%) . . . let literal = match *expr.kind() { + 53,422 ( 0.02%) . . . => /home/.cargo/registry/src/index.crates.io-6f17d22bba15001f/regex-syntax-0.8.2/src/hir/mod.rs:regex_syntax::hir::Hir::kind (26,711x) + . . . . hir::HirKind::Literal(hir::Literal(ref bytes)) => bytes, + . . . . _ => unreachable!(), + . . . . }; +133,555 ( 0.04%) . . . trie.add(literal)?; +23,605,451 ( 6.82%) 80,566 ( 9.95%) 11 ( 3.55%) . => /home/.cargo/registry/src/index.crates.io-6f17d22bba15001f/regex-automata-0.4.6/src/nfa/thompson/literal_trie.rs:regex_automata::nfa::thompson::literal_trie::LiteralTrie::add (26,711x) + . . . . } + 495 ( 0.00%) . . . trie.compile(&mut self.builder.borrow_mut()) +16,969,276 ( 4.90%) 46,294 ( 5.72%) 32 (10.32%) . => /home/.cargo/registry/src/index.crates.io-6f17d22bba15001f/regex-automata-0.4.6/src/nfa/thompson/literal_trie.rs:regex_automata::nfa::thompson::literal_trie::LiteralTrie::compile (495x) + . . . . } + . . . . + . . . . /// Compile an alternation, where each element yielded by the given + . . . . /// iterator represents an item in the alternation. If the iterator yields + . . . . /// no elements, then this compiles down to a "fail" state. + . . . . /// + . . . . /// In an alternation, expressions appearing earlier are "preferred" at + . . . . /// match time over expressions appearing later. At least, this is true + . . . . /// when using "leftmost first" match semantics. (If "leftmost longest" are + . . . . /// ever added in the future, then this preference order of priority would + . . . . /// not apply in that mode.) + 4,851 ( 0.00%) . . . fn c_alt_iter(&self, mut it: I) -> Result + . . . . where + . . . . I: Iterator>, + . . . . { + 1,778 ( 0.00%) . . . let first = match it.next() { +83,531,022 (24.13%) 191,704 (23.67%) 88 (28.39%) . => /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/core/src/iter/adapters/map.rs: as core::iter::traits::iterator::Iterator>::next (175x) + . . . . None => return self.c_fail(), + 175 ( 0.00%) . . . Some(result) => result?, + . . . . }; + 1,778 ( 0.00%) . . . let second = match it.next() { + 3,675 ( 0.00%) . . . => /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/core/src/iter/adapters/map.rs: as core::iter::traits::iterator::Iterator>::next (175x) + . . . . None => return Ok(first), + . . . . Some(result) => result?, + . . . . }; + . . . . + . . . . let union = self.add_union()?; + . . . . let end = self.add_empty()?; + 2,156 ( 0.00%) . . . self.patch(union, first.start)?; +179,012 ( 0.05%) 712 ( 0.09%) . . => /home/.cargo/registry/src/index.crates.io-6f17d22bba15001f/regex-automata-0.4.6/src/nfa/thompson/compiler.rs:regex_automata::nfa::thompson::compiler::Compiler::patch (539x) + 2,156 ( 0.00%) . . . self.patch(first.end, end)?; + 28,041 ( 0.01%) . . . => /home/.cargo/registry/src/index.crates.io-6f17d22bba15001f/regex-automata-0.4.6/src/nfa/thompson/compiler.rs:regex_automata::nfa::thompson::compiler::Compiler::patch (539x) + 2,156 ( 0.00%) . . . self.patch(union, second.start)?; + 35,035 ( 0.01%) . . . => /home/.cargo/registry/src/index.crates.io-6f17d22bba15001f/regex-automata-0.4.6/src/nfa/thompson/compiler.rs:regex_automata::nfa::thompson::compiler::Compiler::patch (539x) + 2,156 ( 0.00%) . . . self.patch(second.end, end)?; + 28,067 ( 0.01%) . . . => /home/.cargo/registry/src/index.crates.io-6f17d22bba15001f/regex-automata-0.4.6/src/nfa/thompson/compiler.rs:regex_automata::nfa::thompson::compiler::Compiler::patch (539x) + 11,072 ( 0.00%) . . . for result in it { + . . . . let compiled = result?; + 27,680 ( 0.01%) . . . self.patch(union, compiled.start)?; +600,692 ( 0.17%) 1,125 ( 0.14%) . . => /home/.cargo/registry/src/index.crates.io-6f17d22bba15001f/regex-automata-0.4.6/src/nfa/thompson/compiler.rs:regex_automata::nfa::thompson::compiler::Compiler::patch (5,536x) + 33,216 ( 0.01%) . . . self.patch(compiled.end, end)?; +287,911 ( 0.08%) . . . => /home/.cargo/registry/src/index.crates.io-6f17d22bba15001f/regex-automata-0.4.6/src/nfa/thompson/compiler.rs:regex_automata::nfa::thompson::compiler::Compiler::patch (5,536x) + . . . . } + 2,695 ( 0.00%) . . . Ok(ThompsonRef { start: union, end }) + 4,312 ( 0.00%) . . . } + . . . . + . . . . /// Compile the given capture sub-expression. `expr` should be the + . . . . /// sub-expression contained inside the capture. If "capture" states are + . . . . /// enabled, then they are added as appropriate. + . . . . /// + . . . . /// This accepts the pieces of a capture instead of a `hir::Capture` so + . . . . /// that it's easy to manufacture a "fake" group when necessary, e.g., for + . . . . /// adding the entire pattern as if it were a group in order to create + . . . . /// appropriate "capture" states in the NFA. + 20,293 ( 0.01%) . . . fn c_cap( + . . . . &self, + . . . . index: u32, + . . . . name: Option<&str>, + . . . . expr: &Hir, + . . . . ) -> Result { + 7,805 ( 0.00%) . . . match self.config.get_which_captures() { + . . . . // No capture states means we always skip them. + . . . . WhichCaptures::None => return self.c(expr), + . . . . // Implicit captures states means we only add when index==0 since + . . . . // index==0 implies the group is implicit. + . . . . WhichCaptures::Implicit if index > 0 => return self.c(expr), + . . . . _ => {} + . . . . } + . . . . + . . . . let start = self.add_capture_start(index, name)?; + 2,322 ( 0.00%) . . . let inner = self.c(expr)?; +52,800,239 (15.25%) 107,887 (13.32%) 86 (27.74%) . => /home/.cargo/registry/src/index.crates.io-6f17d22bba15001f/regex-automata-0.4.6/src/nfa/thompson/compiler.rs:regex_automata::nfa::thompson::compiler::Compiler::c (81x) + . . . . let end = self.add_capture_end(index)?; + . . . . self.patch(start, inner.start)?; + . . . . self.patch(inner.end, end)?; + 3,096 ( 0.00%) . . . Ok(ThompsonRef { start, end }) + 14,049 ( 0.00%) . . . } + . . . . + . . . . /// Compile the given repetition expression. This handles all types of + . . . . /// repetitions and greediness. + . . . . fn c_repetition( + . . . . &self, + . . . . rep: &hir::Repetition, + . . . . ) -> Result { + 33,096 ( 0.01%) . . . match (rep.min, rep.max) { + 6,568 ( 0.00%) . . . (0, Some(1)) => self.c_zero_or_one(&rep.sub, rep.greedy), + 1,824 ( 0.00%) . . . (min, None) => self.c_at_least(&rep.sub, rep.greedy, min), +1,339,535 ( 0.39%) 730 ( 0.09%) 2 ( 0.65%) . => /home/.cargo/registry/src/index.crates.io-6f17d22bba15001f/regex-automata-0.4.6/src/nfa/thompson/compiler.rs:regex_automata::nfa::thompson::compiler::Compiler::c_at_least (142x) +964,465 ( 0.28%) 54 ( 0.01%) 1 ( 0.32%) . => /home/.cargo/registry/src/index.crates.io-6f17d22bba15001f/regex-automata-0.4.6/src/nfa/thompson/compiler.rs:regex_automata::nfa::thompson::compiler::Compiler::c_at_least'2 (10x) + 2,998 ( 0.00%) . . . (min, Some(max)) if min == max => self.c_exactly(&rep.sub, min), +251,263 ( 0.07%) 596 ( 0.07%) . . => /home/.cargo/registry/src/index.crates.io-6f17d22bba15001f/regex-automata-0.4.6/src/nfa/thompson/compiler.rs:regex_automata::nfa::thompson::compiler::Compiler::c_exactly (210x) + 1,474 ( 0.00%) . . . (min, Some(max)) => self.c_bounded(&rep.sub, rep.greedy, min, max), +721,842 ( 0.21%) 1,964 ( 0.24%) . . => /home/.cargo/registry/src/index.crates.io-6f17d22bba15001f/regex-automata-0.4.6/src/nfa/thompson/compiler.rs:regex_automata::nfa::thompson::compiler::Compiler::c_bounded (134x) + . . . . } + . . . . } + . . . . + . . . . /// Compile the given expression such that it matches at least `min` times, + . . . . /// but no more than `max` times. + . . . . /// + . . . . /// When `greedy` is true, then the preference is for the expression to + . . . . /// match as much as possible. Otherwise, it will match as little as + . . . . /// possible. + 1,742 ( 0.00%) . . . fn c_bounded( + . . . . &self, + . . . . expr: &Hir, + . . . . greedy: bool, + . . . . min: u32, + . . . . max: u32, + . . . . ) -> Result { + . . . . let prefix = self.c_exactly(expr, min)?; + 268 ( 0.00%) . . . if min == max { + . . . . return Ok(prefix); + . . . . } + . . . . + . . . . // It is tempting here to compile the rest here as a concatenation + . . . . // of zero-or-one matches. i.e., for `a{2,5}`, compile it as if it + . . . . // were `aaa?a?a?`. The problem here is that it leads to this program: + . . . . // + . . . . // >000000: 61 => 01 +-- line 1178 ---------------------------------------- +-- line 1198 ---------------------------------------- + . . . . // 000006: union(07, 08) + . . . . // 000007: 61 => 08 + . . . . // 000008: MATCH + . . . . // + . . . . // So that the epsilon closure of state 2 is now just 3 and 8. + . . . . let empty = self.add_empty()?; + . . . . let mut prev_end = prefix.end; + . . . . for _ in min..max { + 1,052 ( 0.00%) . . . let union = if greedy { + . . . . self.add_union() + . . . . } else { + . . . . self.add_union_reverse() + . . . . }?; + 2,104 ( 0.00%) . . . let compiled = self.c(expr)?; +288,750 ( 0.08%) 870 ( 0.11%) . . => /home/.cargo/registry/src/index.crates.io-6f17d22bba15001f/regex-automata-0.4.6/src/nfa/thompson/compiler.rs:regex_automata::nfa::thompson::compiler::Compiler::c'2 (526x) + . . . . self.patch(prev_end, union)?; + . . . . self.patch(union, compiled.start)?; + . . . . self.patch(union, empty)?; + . . . . prev_end = compiled.end; + . . . . } + . . . . self.patch(prev_end, empty)?; + 536 ( 0.00%) . . . Ok(ThompsonRef { start: prefix.start, end: empty }) + 1,072 ( 0.00%) . . . } + . . . . + . . . . /// Compile the given expression such that it may be matched `n` or more + . . . . /// times, where `n` can be any integer. (Although a particularly large + . . . . /// integer is likely to run afoul of any configured size limits.) + . . . . /// + . . . . /// When `greedy` is true, then the preference is for the expression to + . . . . /// match as much as possible. Otherwise, it will match as little as + . . . . /// possible. + 2,882 ( 0.00%) . . . fn c_at_least( + . . . . &self, + . . . . expr: &Hir, + . . . . greedy: bool, + . . . . n: u32, + . . . . ) -> Result { + 812 ( 0.00%) . . . if n == 0 { + . . . . // When the expression cannot match the empty string, then we + . . . . // can get away with something much simpler: just one 'alt' + . . . . // instruction that optionally repeats itself. But if the expr + . . . . // can match the empty string... see below. + 720 ( 0.00%) . . . if expr.properties().minimum_len().map_or(false, |len| len > 0) { + 288 ( 0.00%) . . . => /home/.cargo/registry/src/index.crates.io-6f17d22bba15001f/regex-syntax-0.8.2/src/hir/mod.rs:regex_syntax::hir::Hir::properties (144x) + 288 ( 0.00%) . . . let union = if greedy { + . . . . self.add_union() + . . . . } else { + . . . . self.add_union_reverse() + . . . . }?; + 432 ( 0.00%) . . . let compiled = self.c(expr)?; + 62,960 ( 0.02%) 84 ( 0.01%) 1 ( 0.32%) . => /home/.cargo/registry/src/index.crates.io-6f17d22bba15001f/regex-automata-0.4.6/src/nfa/thompson/compiler.rs:regex_automata::nfa::thompson::compiler::Compiler::c'2 (34x) + 33,110 ( 0.01%) . . . => /home/.cargo/registry/src/index.crates.io-6f17d22bba15001f/regex-automata-0.4.6/src/nfa/thompson/compiler.rs:regex_automata::nfa::thompson::compiler::Compiler::c (110x) + . . . . self.patch(union, compiled.start)?; + . . . . self.patch(compiled.end, union)?; + 288 ( 0.00%) . . . return Ok(ThompsonRef { start: union, end: union }); + . . . . } + . . . . + . . . . // What's going on here? Shouldn't x* be simpler than this? It + . . . . // turns out that when implementing leftmost-first (Perl-like) + . . . . // match semantics, x* results in an incorrect preference order + . . . . // when computing the transitive closure of states if and only if + . . . . // 'x' can match the empty string. So instead, we compile x* as + . . . . // (x+)?, which preserves the correct preference order. +-- line 1256 ---------------------------------------- +-- line 1271 ---------------------------------------- + . . . . self.add_union_reverse() + . . . . }?; + . . . . let empty = self.add_empty()?; + . . . . self.patch(question, compiled.start)?; + . . . . self.patch(question, empty)?; + . . . . self.patch(plus, empty)?; + . . . . Ok(ThompsonRef { start: question, end: empty }) + . . . . } else if n == 1 { + 354 ( 0.00%) . . . let compiled = self.c(expr)?; +1,205,526 ( 0.35%) 420 ( 0.05%) 1 ( 0.32%) . => /home/.cargo/registry/src/index.crates.io-6f17d22bba15001f/regex-automata-0.4.6/src/nfa/thompson/compiler.rs:regex_automata::nfa::thompson::compiler::Compiler::c'2 (108x) + 236 ( 0.00%) . . . let union = if greedy { + . . . . self.add_union() + . . . . } else { + . . . . self.add_union_reverse() + . . . . }?; + . . . . self.patch(compiled.end, union)?; + . . . . self.patch(union, compiled.start)?; + 236 ( 0.00%) . . . Ok(ThompsonRef { start: compiled.start, end: union }) + . . . . } else { + . . . . let prefix = self.c_exactly(expr, n - 1)?; + . . . . let last = self.c(expr)?; + . . . . let union = if greedy { + . . . . self.add_union() + . . . . } else { + . . . . self.add_union_reverse() + . . . . }?; + . . . . self.patch(prefix.end, last.start)?; + . . . . self.patch(last.end, union)?; + . . . . self.patch(union, last.start)?; + . . . . Ok(ThompsonRef { start: prefix.start, end: union }) + . . . . } + 2,358 ( 0.00%) . . . } + . . . . + . . . . /// Compile the given expression such that it may be matched zero or one + . . . . /// times. + . . . . /// + . . . . /// When `greedy` is true, then the preference is for the expression to + . . . . /// match as much as possible. Otherwise, it will match as little as + . . . . /// possible. + . . . . fn c_zero_or_one( + . . . . &self, + . . . . expr: &Hir, + . . . . greedy: bool, + . . . . ) -> Result { + . . . . let union = + 16,420 ( 0.00%) . . . if greedy { self.add_union() } else { self.add_union_reverse() }?; + 49 ( 0.00%) . . . => /home/.cargo/registry/src/index.crates.io-6f17d22bba15001f/regex-automata-0.4.6/src/nfa/thompson/builder.rs:regex_automata::nfa::thompson::builder::Builder::add (1x) + 9,852 ( 0.00%) . . . let compiled = self.c(expr)?; + 818 ( 0.00%) . . . => /home/.cargo/registry/src/index.crates.io-6f17d22bba15001f/regex-automata-0.4.6/src/nfa/thompson/compiler.rs:regex_automata::nfa::thompson::compiler::Compiler::c'2 (1x) + . . . . let empty = self.add_empty()?; + . . . . self.patch(union, compiled.start)?; + . . . . self.patch(union, empty)?; + . . . . self.patch(compiled.end, empty)?; + 13,136 ( 0.00%) . . . Ok(ThompsonRef { start: union, end: empty }) + . . . . } + . . . . + . . . . /// Compile the given HIR expression exactly `n` times. + 210 ( 0.00%) . . . fn c_exactly( + . . . . &self, + . . . . expr: &Hir, + . . . . n: u32, + . . . . ) -> Result { + . . . . let it = (0..n).map(|_| self.c(expr)); + 344 ( 0.00%) . . . self.c_concat(it) +120,226 ( 0.03%) 248 ( 0.03%) . . => /home/.cargo/registry/src/index.crates.io-6f17d22bba15001f/regex-automata-0.4.6/src/nfa/thompson/compiler.rs:regex_automata::nfa::thompson::compiler::Compiler::c_concat (134x) + 420 ( 0.00%) . . . } + . . . . + . . . . /// Compile the given byte oriented character class. + . . . . /// + . . . . /// This uses "sparse" states to represent an alternation between ranges in + . . . . /// this character class. We can use "sparse" states instead of stitching + . . . . /// together a "union" state because all ranges in a character class have + . . . . /// equal priority *and* are non-overlapping (thus, only one can match, so + . . . . /// there's never a question of priority in the first place). This saves a +-- line 1340 ---------------------------------------- +-- line 1341 ---------------------------------------- + . . . . /// fair bit of overhead when traversing an NFA. + . . . . /// + . . . . /// This routine compiles an empty character class into a "fail" state. + . . . . fn c_byte_class( + . . . . &self, + . . . . cls: &hir::ClassBytes, + . . . . ) -> Result { + . . . . let end = self.add_empty()?; + 330 ( 0.00%) . . . let mut trans = Vec::with_capacity(cls.ranges().len()); + 330 ( 0.00%) . . . => /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/alloc/src/raw_vec.rs:regex_syntax::hir::ClassBytes::ranges (110x) + 1,430 ( 0.00%) . . . for r in cls.iter() { + 1,210 ( 0.00%) . . . => /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/core/src/slice/iter/macros.rs:::next (220x) + 440 ( 0.00%) . . . => /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/alloc/src/raw_vec.rs:regex_syntax::hir::ClassBytes::iter (110x) + 660 ( 0.00%) . . . trans.push(Transition { + 330 ( 0.00%) . . . start: r.start(), + 220 ( 0.00%) . . . => /home/.cargo/registry/src/index.crates.io-6f17d22bba15001f/regex-syntax-0.8.2/src/hir/mod.rs:regex_syntax::hir::ClassBytesRange::start (110x) + 220 ( 0.00%) . . . end: r.end(), + 220 ( 0.00%) . . . => /home/.cargo/registry/src/index.crates.io-6f17d22bba15001f/regex-syntax-0.8.2/src/hir/mod.rs:regex_syntax::hir::ClassBytesRange::end (110x) + . . . . next: end, + . . . . }); + . . . . } + 550 ( 0.00%) . . . Ok(ThompsonRef { start: self.add_sparse(trans)?, end }) + . . . . } + . . . . + . . . . /// Compile the given Unicode character class. + . . . . /// + . . . . /// This routine specifically tries to use various types of compression, + . . . . /// since UTF-8 automata of large classes can get quite large. The specific + . . . . /// type of compression used depends on forward vs reverse compilation, and + . . . . /// whether NFA shrinking is enabled or not. +-- line 1365 ---------------------------------------- +-- line 1372 ---------------------------------------- + . . . . /// This routine compiles an empty character class into a "fail" state. + . . . . fn c_unicode_class( + . . . . &self, + . . . . cls: &hir::ClassUnicode, + . . . . ) -> Result { + . . . . // If all we have are ASCII ranges wrapped in a Unicode package, then + . . . . // there is zero reason to bring out the big guns. We can fit all ASCII + . . . . // ranges within a single sparse state. + 22,524 ( 0.01%) . . . if cls.is_ascii() { + 14 ( 0.00%) . . . => /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/alloc/src/vec/mod.rs:regex_syntax::hir::ClassUnicode::is_ascii (2x) + . . . . let end = self.add_empty()?; + 16,134 ( 0.00%) . . . let mut trans = Vec::with_capacity(cls.ranges().len()); + 6 ( 0.00%) . . . => /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/alloc/src/raw_vec.rs:regex_syntax::hir::ClassBytes::ranges (2x) + 88,899 ( 0.03%) . . . for r in cls.iter() { + 58 ( 0.00%) . . . => /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/core/src/slice/iter/macros.rs:::next (10x) + 8 ( 0.00%) . . . => /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/alloc/src/raw_vec.rs:regex_syntax::hir::ClassUnicode::iter (2x) + . . . . // The unwraps below are OK because we've verified that this + . . . . // class only contains ASCII codepoints. + 45,875 ( 0.01%) . . . trans.push(Transition { + . . . . // FIXME(1.59): use the 'TryFrom for u8' impl. + 18,350 ( 0.01%) . . . start: u8::try_from(u32::from(r.start())).unwrap(), + 16 ( 0.00%) . . . => /home/.cargo/registry/src/index.crates.io-6f17d22bba15001f/regex-syntax-0.8.2/src/hir/mod.rs:regex_syntax::hir::ClassUnicodeRange::start (8x) + 18,350 ( 0.01%) . . . end: u8::try_from(u32::from(r.end())).unwrap(), + 16 ( 0.00%) . . . => /home/.cargo/registry/src/index.crates.io-6f17d22bba15001f/regex-syntax-0.8.2/src/hir/mod.rs:regex_syntax::hir::ClassUnicodeRange::end (8x) + . . . . next: end, + . . . . }); + . . . . } + 21,512 ( 0.01%) . . . Ok(ThompsonRef { start: self.add_sparse(trans)?, end }) + 253 ( 0.00%) . . . } else if self.is_reverse() { + 127 ( 0.00%) . . . if !self.config.get_shrink() { + . . . . // When we don't want to spend the extra time shrinking, we + . . . . // compile the UTF-8 automaton in reverse using something like + . . . . // the "naive" approach, but will attempt to re-use common + . . . . // suffixes. + . . . . self.c_unicode_class_reverse_with_suffix(cls) + . . . . } else { + . . . . // When we want to shrink our NFA for reverse UTF-8 automata, + . . . . // we cannot feed UTF-8 sequences directly to the UTF-8 +-- line 1403 ---------------------------------------- +-- line 1432 ---------------------------------------- + . . . . } else { + . . . . // In the forward direction, we always shrink our UTF-8 automata + . . . . // because we can stream it right into the UTF-8 compiler. There + . . . . // is almost no downside (in either memory or time) to using this + . . . . // approach. + . . . . let mut builder = self.builder.borrow_mut(); + . . . . let mut utf8_state = self.utf8_state.borrow_mut(); + . . . . let mut utf8c = + 378 ( 0.00%) . . . Utf8Compiler::new(&mut *builder, &mut *utf8_state)?; +17,662,970 ( 5.10%) 642 ( 0.08%) 40 (12.90%) . => /home/.cargo/registry/src/index.crates.io-6f17d22bba15001f/regex-automata-0.4.6/src/nfa/thompson/compiler.rs:regex_automata::nfa::thompson::compiler::Utf8Compiler::new (126x) + 4,288 ( 0.00%) . . . for rng in cls.iter() { + 4,566 ( 0.00%) . . . => /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/core/src/slice/iter/macros.rs:::next (782x) + 504 ( 0.00%) . . . => /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/alloc/src/raw_vec.rs:regex_syntax::hir::ClassUnicode::iter (126x) + 28,664 ( 0.01%) . . . for seq in Utf8Sequences::new(rng.start(), rng.end()) { +172,146 ( 0.05%) . . . => /home/.cargo/registry/src/index.crates.io-6f17d22bba15001f/regex-syntax-0.8.2/src/utf8.rs:::next (1,800x) + 97,769 ( 0.03%) 102 ( 0.01%) . . => /home/.cargo/registry/src/index.crates.io-6f17d22bba15001f/regex-syntax-0.8.2/src/utf8.rs:regex_syntax::utf8::Utf8Sequences::new (656x) + 1,312 ( 0.00%) . . . => /home/.cargo/registry/src/index.crates.io-6f17d22bba15001f/regex-syntax-0.8.2/src/hir/mod.rs:regex_syntax::hir::ClassUnicodeRange::end (656x) + 1,312 ( 0.00%) . . . => /home/.cargo/registry/src/index.crates.io-6f17d22bba15001f/regex-syntax-0.8.2/src/hir/mod.rs:regex_syntax::hir::ClassUnicodeRange::start (656x) + 8,008 ( 0.00%) . . . utf8c.add(seq.as_slice())?; +934,285 ( 0.27%) 1,530 ( 0.19%) . . => /home/.cargo/registry/src/index.crates.io-6f17d22bba15001f/regex-automata-0.4.6/src/nfa/thompson/compiler.rs:regex_automata::nfa::thompson::compiler::Utf8Compiler::add (1,144x) + 10,296 ( 0.00%) . . . => /home/.cargo/registry/src/index.crates.io-6f17d22bba15001f/regex-syntax-0.8.2/src/utf8.rs:regex_syntax::utf8::Utf8Sequence::as_slice (1,144x) + . . . . } + . . . . } + 126 ( 0.00%) . . . utf8c.finish() +211,097 ( 0.06%) 422 ( 0.05%) . . => /home/.cargo/registry/src/index.crates.io-6f17d22bba15001f/regex-automata-0.4.6/src/nfa/thompson/compiler.rs:regex_automata::nfa::thompson::compiler::Utf8Compiler::finish (126x) + . . . . } + . . . . + . . . . // For reference, the code below is the "naive" version of compiling a + . . . . // UTF-8 automaton. It is deliciously simple (and works for both the + . . . . // forward and reverse cases), but will unfortunately produce very + . . . . // large NFAs. When compiling a forward automaton, the size difference + . . . . // can sometimes be an order of magnitude. For example, the '\w' regex + . . . . // will generate about ~3000 NFA states using the naive approach below, +-- line 1454 ---------------------------------------- +-- line 1510 ---------------------------------------- + . . . . &self, + . . . . cls: &hir::ClassUnicode, + . . . . ) -> Result { + . . . . // N.B. It would likely be better to cache common *prefixes* in the + . . . . // reverse direction, but it's not quite clear how to do that. The + . . . . // advantage of caching suffixes is that it does give us a win, and + . . . . // has a very small additional overhead. + . . . . let mut cache = self.utf8_suffix.borrow_mut(); + 127 ( 0.00%) . . . cache.clear(); +395,334 ( 0.11%) 394 ( 0.05%) . . => /home/.cargo/registry/src/index.crates.io-6f17d22bba15001f/regex-automata-0.4.6/src/nfa/thompson/map.rs:regex_automata::nfa::thompson::map::Utf8SuffixMap::clear (127x) + . . . . + . . . . let union = self.add_union()?; + . . . . let alt_end = self.add_empty()?; + 6,423 ( 0.00%) . . . for urng in cls.iter() { + 4,595 ( 0.00%) . . . => /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/core/src/slice/iter/macros.rs:::next (787x) + 508 ( 0.00%) . . . => /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/alloc/src/raw_vec.rs:regex_syntax::hir::ClassUnicode::iter (127x) + 22,448 ( 0.01%) . . . for seq in Utf8Sequences::new(urng.start(), urng.end()) { +173,951 ( 0.05%) . . . => /home/.cargo/registry/src/index.crates.io-6f17d22bba15001f/regex-syntax-0.8.2/src/utf8.rs:::next (1,816x) + 88,440 ( 0.03%) . . . => /home/.cargo/registry/src/index.crates.io-6f17d22bba15001f/regex-syntax-0.8.2/src/utf8.rs:regex_syntax::utf8::Utf8Sequences::new (660x) + 1,320 ( 0.00%) . . . => /home/.cargo/registry/src/index.crates.io-6f17d22bba15001f/regex-syntax-0.8.2/src/hir/mod.rs:regex_syntax::hir::ClassUnicodeRange::start (660x) + 1,320 ( 0.00%) . . . => /home/.cargo/registry/src/index.crates.io-6f17d22bba15001f/regex-syntax-0.8.2/src/hir/mod.rs:regex_syntax::hir::ClassUnicodeRange::end (660x) + . . . . let mut end = alt_end; + 2,312 ( 0.00%) . . . for brng in seq.as_slice() { + 10,404 ( 0.00%) . . . => /home/.cargo/registry/src/index.crates.io-6f17d22bba15001f/regex-syntax-0.8.2/src/utf8.rs:regex_syntax::utf8::Utf8Sequence::as_slice (1,156x) + . . . . let key = Utf8SuffixKey { + . . . . from: end, + . . . . start: brng.start, + . . . . end: brng.end, + . . . . }; + . . . . let hash = cache.hash(&key); + . . . . if let Some(id) = cache.get(&key, hash) { + . . . . end = id; + . . . . continue; + . . . . } + . . . . + 5,456 ( 0.00%) . . . let compiled = self.c_range(brng.start, brng.end)?; + . . . . self.patch(compiled.end, end)?; + . . . . end = compiled.start; + 10,912 ( 0.00%) . . . cache.set(key, hash, end); + . . . . } + . . . . self.patch(union, end)?; + . . . . } + . . . . } + 508 ( 0.00%) . . . Ok(ThompsonRef { start: union, end: alt_end }) + 254 ( 0.00%) . . . } + . . . . + . . . . /// Compile the given HIR look-around assertion to an NFA look-around + . . . . /// assertion. + . . . . fn c_look(&self, anchor: &hir::Look) -> Result { + . . . . let look = match *anchor { + . . . . hir::Look::Start => Look::Start, + . . . . hir::Look::End => Look::End, + . . . . hir::Look::StartLF => Look::StartLF, +-- line 1554 ---------------------------------------- +-- line 1606 ---------------------------------------- + . . . . + . . . . // The below helpers are meant to be simple wrappers around the + . . . . // corresponding Builder methods. For the most part, they let us write + . . . . // 'self.add_foo()' instead of 'self.builder.borrow_mut().add_foo()', where + . . . . // the latter is a mouthful. Some of the methods do inject a little bit + . . . . // of extra logic. e.g., Flipping look-around operators when compiling in + . . . . // reverse mode. + . . . . + 39,684 ( 0.01%) . . . fn patch(&self, from: StateID, to: StateID) -> Result<(), BuildError> { +183,706 ( 0.05%) . . . self.builder.borrow_mut().patch(from, to) + 7,730 ( 0.00%) . . . => /home/.cargo/registry/src/index.crates.io-6f17d22bba15001f/regex-automata-0.4.6/src/nfa/thompson/builder.rs:regex_automata::nfa::thompson::builder::Builder::patch (175x) + 66,140 ( 0.02%) . . . } + . . . . + . . . . fn start_pattern(&self) -> Result { + . . . . self.builder.borrow_mut().start_pattern() + . . . . } + . . . . + . . . . fn finish_pattern( + . . . . &self, + . . . . start_id: StateID, +-- line 1624 ---------------------------------------- +-- line 1626 ---------------------------------------- + . . . . self.builder.borrow_mut().finish_pattern(start_id) + . . . . } + . . . . + . . . . fn add_empty(&self) -> Result { + . . . . self.builder.borrow_mut().add_empty() + . . . . } + . . . . + . . . . fn add_range(&self, start: u8, end: u8) -> Result { + 49,675 ( 0.01%) . . . self.builder.borrow_mut().add_range(Transition { + . . . . start, + . . . . end, + . . . . next: StateID::ZERO, + . . . . }) + . . . . } + . . . . + . . . . fn add_sparse( + . . . . &self, + . . . . ranges: Vec, + . . . . ) -> Result { + . . . . self.builder.borrow_mut().add_sparse(ranges) + . . . . } + . . . . + . . . . fn add_look(&self, mut look: Look) -> Result { + 490 ( 0.00%) . . . if self.is_reverse() { + . . . . look = look.reversed(); + . . . . } + . . . . self.builder.borrow_mut().add_look(StateID::ZERO, look) + . . . . } + . . . . + . . . . fn add_union(&self) -> Result { + . . . . self.builder.borrow_mut().add_union(vec![]) + . . . . } +-- line 1657 ---------------------------------------- +-- line 1661 ---------------------------------------- + . . . . } + . . . . + . . . . fn add_capture_start( + . . . . &self, + . . . . capture_index: u32, + . . . . name: Option<&str>, + . . . . ) -> Result { + . . . . let name = name.map(|n| Arc::from(n)); + 4,644 ( 0.00%) . . . self.builder.borrow_mut().add_capture_start( + 40,492 ( 0.01%) 82 ( 0.01%) . . => /home/.cargo/registry/src/index.crates.io-6f17d22bba15001f/regex-automata-0.4.6/src/nfa/thompson/builder.rs:regex_automata::nfa::thompson::builder::Builder::add_capture_start (81x) + . . . . StateID::ZERO, + . . . . capture_index, + . . . . name, + . . . . ) + . . . . } + . . . . + . . . . fn add_capture_end( + . . . . &self, +-- line 1677 ---------------------------------------- +-- line 1748 ---------------------------------------- + . . . . } + . . . . + . . . . impl Utf8State { + . . . . fn new() -> Utf8State { + . . . . Utf8State { compiled: Utf8BoundedMap::new(10_000), uncompiled: vec![] } + . . . . } + . . . . + . . . . fn clear(&mut self) { + 252 ( 0.00%) . . . self.compiled.clear(); +17,632,718 ( 5.09%) 606 ( 0.07%) 40 (12.90%) . => /home/.cargo/registry/src/index.crates.io-6f17d22bba15001f/regex-automata-0.4.6/src/nfa/thompson/map.rs:regex_automata::nfa::thompson::map::Utf8BoundedMap::clear (126x) + . . . . self.uncompiled.clear(); + . . . . } + . . . . } + . . . . + . . . . impl<'a> Utf8Compiler<'a> { + 1,260 ( 0.00%) . . . fn new( + . . . . builder: &'a mut Builder, + . . . . state: &'a mut Utf8State, + . . . . ) -> Result, BuildError> { + . . . . let target = builder.add_empty()?; + . . . . state.clear(); + . . . . let mut utf8c = Utf8Compiler { builder, state, target }; + . . . . utf8c.add_empty(); + 504 ( 0.00%) . . . Ok(utf8c) + 1,008 ( 0.00%) . . . } + . . . . + 756 ( 0.00%) . . . fn finish(&mut self) -> Result { + 252 ( 0.00%) . . . self.compile_from(0)?; +154,838 ( 0.04%) 312 ( 0.04%) . . => /home/.cargo/registry/src/index.crates.io-6f17d22bba15001f/regex-automata-0.4.6/src/nfa/thompson/compiler.rs:regex_automata::nfa::thompson::compiler::Utf8Compiler::compile_from (126x) + 126 ( 0.00%) . . . let node = self.pop_root(); + 504 ( 0.00%) . . . let start = self.compile(node)?; + 51,219 ( 0.01%) 110 ( 0.01%) . . => /home/.cargo/registry/src/index.crates.io-6f17d22bba15001f/regex-automata-0.4.6/src/nfa/thompson/compiler.rs:regex_automata::nfa::thompson::compiler::Utf8Compiler::compile (126x) + 504 ( 0.00%) . . . Ok(ThompsonRef { start, end: self.target }) + 504 ( 0.00%) . . . } + . . . . + 11,440 ( 0.00%) . . . fn add(&mut self, ranges: &[Utf8Range]) -> Result<(), BuildError> { + . . . . let prefix_len = ranges + . . . . .iter() + 1,144 ( 0.00%) . . . .zip(&self.state.uncompiled) + . . . . .take_while(|&(range, node)| { + 2,826 ( 0.00%) . . . node.last.as_ref().map_or(false, |t| { + . . . . (t.start, t.end) == (range.start, range.end) + . . . . }) + . . . . }) + . . . . .count(); + 2,288 ( 0.00%) . . . assert!(prefix_len < ranges.len()); + 2,288 ( 0.00%) . . . self.compile_from(prefix_len)?; +815,578 ( 0.24%) 1,530 ( 0.19%) . . => /home/.cargo/registry/src/index.crates.io-6f17d22bba15001f/regex-automata-0.4.6/src/nfa/thompson/compiler.rs:regex_automata::nfa::thompson::compiler::Utf8Compiler::compile_from (1,144x) + 848 ( 0.00%) . . . self.add_suffix(&ranges[prefix_len..]); + . . . . Ok(()) + 10,296 ( 0.00%) . . . } + . . . . + 11,430 ( 0.00%) . . . fn compile_from(&mut self, from: usize) -> Result<(), BuildError> { + 1,270 ( 0.00%) . . . let mut next = self.target; + 5,646 ( 0.00%) . . . while from + 1 < self.state.uncompiled.len() { + . . . . let node = self.pop_freeze(next); + 7,765 ( 0.00%) . . . next = self.compile(node)?; +475,225 ( 0.14%) 899 ( 0.11%) . . => /home/.cargo/registry/src/index.crates.io-6f17d22bba15001f/regex-automata-0.4.6/src/nfa/thompson/compiler.rs:regex_automata::nfa::thompson::compiler::Utf8Compiler::compile (1,553x) + . . . . } + . . . . self.top_last_freeze(next); + 2,540 ( 0.00%) . . . Ok(()) + 10,160 ( 0.00%) . . . } + . . . . + 18,469 ( 0.01%) . . . fn compile( + . . . . &mut self, + . . . . node: Vec, + . . . . ) -> Result { + . . . . let hash = self.state.compiled.hash(&node); + . . . . if let Some(id) = self.state.compiled.get(&node, hash) { + 1,842 ( 0.00%) . . . return Ok(id); + . . . . } + . . . . let id = self.builder.add_sparse(node.clone())?; + . . . . self.state.compiled.set(node, hash, id); + 2,274 ( 0.00%) . . . Ok(id) + 6,064 ( 0.00%) . . . } + . . . . + . . . . fn add_suffix(&mut self, ranges: &[Utf8Range]) { + . . . . assert!(!ranges.is_empty()); + . . . . let last = self + . . . . .state + . . . . .uncompiled + . . . . .len() + . . . . .checked_sub(1) + . . . . .expect("non-empty nodes"); + 3,432 ( 0.00%) . . . assert!(self.state.uncompiled[last].last.is_none()); + 2,288 ( 0.00%) . . . self.state.uncompiled[last].last = Some(Utf8LastTransition { + 1,144 ( 0.00%) . . . start: ranges[0].start, + . . . . end: ranges[0].end, + . . . . }); + . . . . for r in &ranges[1..] { + . . . . self.state.uncompiled.push(Utf8Node { + . . . . trans: vec![], + 3,106 ( 0.00%) . . . last: Some(Utf8LastTransition { start: r.start, end: r.end }), + . . . . }); + . . . . } + . . . . } + . . . . + . . . . fn add_empty(&mut self) { + 67 ( 0.00%) . . . self.state.uncompiled.push(Utf8Node { trans: vec![], last: None }); + . . . . } + . . . . + . . . . fn pop_freeze(&mut self, next: StateID) -> Vec { + 1,553 ( 0.00%) . . . let mut uncompiled = self.state.uncompiled.pop().unwrap(); + . . . . uncompiled.set_last_transition(next); + 6,212 ( 0.00%) . . . uncompiled.trans + . . . . } + . . . . + . . . . fn pop_root(&mut self) -> Vec { + 252 ( 0.00%) . . . assert_eq!(self.state.uncompiled.len(), 1); + 252 ( 0.00%) . . . assert!(self.state.uncompiled[0].last.is_none()); + . . . . self.state.uncompiled.pop().expect("non-empty nodes").trans + . . . . } + . . . . + . . . . fn top_last_freeze(&mut self, next: StateID) { + . . . . let last = self + . . . . .state + . . . . .uncompiled + . . . . .len() + . . . . .checked_sub(1) + . . . . .expect("non-empty nodes"); + 3,558 ( 0.00%) . . . self.state.uncompiled[last].set_last_transition(next); + . . . . } + . . . . } + . . . . + . . . . impl Utf8Node { + . . . . fn set_last_transition(&mut self, next: StateID) { + 5,646 ( 0.00%) . . . if let Some(last) = self.last.take() { + 5,394 ( 0.00%) . . . self.trans.push(Transition { + . . . . start: last.start, + . . . . end: last.end, + . . . . next, + . . . . }); + . . . . } + . . . . } + . . . . } + . . . . +-- line 1878 ---------------------------------------- + +242,699 ( 0.07%) . . . + +-------------------------------------------------------------------------------- +-- Auto-annotated source: /home/.cargo/registry/src/index.crates.io-6f17d22bba15001f/regex-syntax-0.8.2/src/hir/literal.rs +-------------------------------------------------------------------------------- +Ir Ge sysCount sysTime + +-- line 152 ---------------------------------------- + . . . . limit_total: usize, + . . . . } + . . . . + . . . . impl Extractor { + . . . . /// Create a new extractor with a default configuration. + . . . . /// + . . . . /// The extractor can be optionally configured before calling + . . . . /// [`Extractor::extract`] to get a literal sequence. + 73 ( 0.00%) . . . pub fn new() -> Extractor { + 365 ( 0.00%) . . . Extractor { + . . . . kind: ExtractKind::Prefix, + . . . . limit_class: 10, + . . . . limit_repeat: 10, + . . . . limit_literal_len: 100, + . . . . limit_total: 250, + . . . . } + 73 ( 0.00%) . . . } + . . . . + . . . . /// Execute the extractor and return a sequence of literals. + 32,912 ( 0.01%) . . . pub fn extract(&self, hir: &Hir) -> Seq { + . . . . use crate::hir::HirKind::*; + . . . . + 18,382 ( 0.01%) . . . match *hir.kind() { + . . . . Empty | Look(_) => Seq::singleton(self::Literal::exact(vec![])), + . . . . Literal(hir::Literal(ref bytes)) => { + . . . . let mut seq = + 7,233 ( 0.00%) . . . Seq::singleton(self::Literal::exact(bytes.to_vec())); + 2,411 ( 0.00%) . . . self.enforce_literal_len(&mut seq); + 9,644 ( 0.00%) . . . seq + . . . . } + . . . . Class(hir::Class::Unicode(ref cls)) => { + . . . . self.extract_class_unicode(cls) + . . . . } + . . . . Class(hir::Class::Bytes(ref cls)) => self.extract_class_bytes(cls), + . . . . Repetition(ref rep) => self.extract_repetition(rep), + 39 ( 0.00%) . . . Capture(hir::Capture { ref sub, .. }) => self.extract(sub), + 633 ( 0.00%) . . . Concat(ref hirs) => match self.kind { + . . . . ExtractKind::Prefix => self.extract_concat(hirs.iter()), + . . . . ExtractKind::Suffix => self.extract_concat(hirs.iter().rev()), + . . . . }, + . . . . Alternation(ref hirs) => { + . . . . // Unlike concat, we always union starting from the beginning, + . . . . // since the beginning corresponds to the highest preference, + . . . . // which doesn't change based on forwards vs reverse. + . . . . self.extract_alternation(hirs.iter()) + . . . . } + . . . . } + 23,936 ( 0.01%) . . . } + . . . . + . . . . /// Set the kind of literal sequence to extract from an [`Hir`] expression. + . . . . /// + . . . . /// The default is to extract prefixes, but suffixes can be selected + . . . . /// instead. The contract for prefixes is that every match of the + . . . . /// corresponding `Hir` must start with one of the literals in the sequence + . . . . /// returned. Moreover, the _order_ of the sequence returned corresponds to + . . . . /// the preference order. +-- line 207 ---------------------------------------- +-- line 212 ---------------------------------------- + . . . . /// preference order. + . . . . /// + . . . . /// Remember that a sequence can be infinite. For example, unless the + . . . . /// limits are configured to be impractically large, attempting to extract + . . . . /// prefixes (or suffixes) for the pattern `[A-Z]` will return an infinite + . . . . /// sequence. Generally speaking, if the sequence returned is infinite, + . . . . /// then it is presumed to be unwise to do prefix (or suffix) optimizations + . . . . /// for the pattern. + 73 ( 0.00%) . . . pub fn kind(&mut self, kind: ExtractKind) -> &mut Extractor { + 73 ( 0.00%) . . . self.kind = kind; + . . . . self + 73 ( 0.00%) . . . } + . . . . + . . . . /// Configure a limit on the length of the sequence that is permitted for + . . . . /// a character class. If a character class exceeds this limit, then the + . . . . /// sequence returned for it is infinite. + . . . . /// + . . . . /// This prevents classes like `[A-Z]` or `\pL` from getting turned into + . . . . /// huge and likely unproductive sequences of literals. + . . . . /// +-- line 231 ---------------------------------------- +-- line 399 ---------------------------------------- + . . . . // product will always be a no-op. Thus, there is nothing else we + . . . . // can add to it and can quit early. Note that this also includes + . . . . // infinite sequences. + . . . . if seq.is_inexact() { + . . . . break; + . . . . } + . . . . // Note that 'cross' also dispatches based on whether we're + . . . . // extracting prefixes or suffixes. + 6,795 ( 0.00%) . . . seq = self.cross(seq, &mut self.extract(hir)); +4,724,056 ( 1.36%) 7,673 ( 0.95%) . . => /home/.cargo/registry/src/index.crates.io-6f17d22bba15001f/regex-syntax-0.8.2/src/hir/literal.rs:regex_syntax::hir::literal::Extractor::extract'2 (111x) +1,874,581 ( 0.54%) 8,392 ( 1.04%) . . => /home/.cargo/registry/src/index.crates.io-6f17d22bba15001f/regex-syntax-0.8.2/src/hir/literal.rs:regex_syntax::hir::literal::Extractor::cross (111x) + . . . . } + . . . . seq + . . . . } + . . . . + . . . . /// Extract a sequence from the given alternation. + . . . . /// + . . . . /// This short circuits once the union turns into an infinite sequence. + . . . . fn extract_alternation<'a, I: Iterator>( + . . . . &self, + . . . . it: I, + . . . . ) -> Seq { + . . . . let mut seq = Seq::empty(); + 2,258 ( 0.00%) . . . for hir in it { + . . . . // Once our 'seq' is infinite, every subsequent union + . . . . // operation on it will itself always result in an + . . . . // infinite sequence. Thus, it can never change and we can + . . . . // short-circuit. + . . . . if !seq.is_finite() { + . . . . break; + . . . . } + 31,570 ( 0.01%) . . . seq = self.union(seq, &mut self.extract(hir)); +438,140 ( 0.13%) 1,757 ( 0.22%) . . => /home/.cargo/registry/src/index.crates.io-6f17d22bba15001f/regex-syntax-0.8.2/src/hir/literal.rs:regex_syntax::hir::literal::Extractor::extract'2 (855x) +1,033,841 ( 0.30%) 254 ( 0.03%) . . => /home/.cargo/registry/src/index.crates.io-6f17d22bba15001f/regex-syntax-0.8.2/src/hir/literal.rs:regex_syntax::hir::literal::Extractor::union (855x) + . . . . } + . . . . seq + . . . . } + . . . . + . . . . /// Extract a sequence of literals from the given repetition. We do our + . . . . /// best, Some examples: + . . . . /// + . . . . /// 'a*' => [inexact(a), exact("")] +-- line 436 ---------------------------------------- +-- line 441 ---------------------------------------- + . . . . /// + . . . . /// The key here really is making sure we get the 'inexact' vs 'exact' + . . . . /// attributes correct on each of the literals we add. For example, the + . . . . /// fact that 'a*' gives us an inexact 'a' and an exact empty string means + . . . . /// that a regex like 'ab*c' will result in [inexact(ab), exact(ac)] + . . . . /// literals being extracted, which might actually be a better prefilter + . . . . /// than just 'a'. + . . . . fn extract_repetition(&self, rep: &hir::Repetition) -> Seq { + 844 ( 0.00%) . . . let mut subseq = self.extract(&rep.sub); + 9,729 ( 0.00%) . . . => /home/.cargo/registry/src/index.crates.io-6f17d22bba15001f/regex-syntax-0.8.2/src/hir/literal.rs:regex_syntax::hir::literal::Extractor::extract'2 (9x) + 900 ( 0.00%) . . . match *rep { + 384 ( 0.00%) . . . hir::Repetition { min: 0, max, greedy, .. } => { + . . . . // When 'max=1', we can retain exactness, since 'a?' is + . . . . // equivalent to 'a|'. Similarly below, 'a??' is equivalent to + . . . . // '|a'. + 570 ( 0.00%) . . . if max != Some(1) { + 6 ( 0.00%) . . . subseq.make_inexact(); + . . . . } + . . . . let mut empty = Seq::singleton(Literal::exact(vec![])); + 192 ( 0.00%) . . . if !greedy { + . . . . mem::swap(&mut subseq, &mut empty); + . . . . } + 1,920 ( 0.00%) . . . self.union(subseq, &mut empty) + 1,962 ( 0.00%) . . . => /home/.cargo/registry/src/index.crates.io-6f17d22bba15001f/regex-syntax-0.8.2/src/hir/literal.rs:regex_syntax::hir::literal::Extractor::union (9x) + . . . . } + . . . . hir::Repetition { min, max: Some(max), .. } if min == max => { + . . . . assert!(min > 0); // handled above + . . . . let limit = + . . . . u32::try_from(self.limit_repeat).unwrap_or(u32::MAX); + . . . . let mut seq = Seq::singleton(Literal::exact(vec![])); + . . . . for _ in 0..cmp::min(min, limit) { + . . . . if seq.is_inexact() { + . . . . break; + . . . . } + 198 ( 0.00%) . . . seq = self.cross(seq, &mut subseq.clone()); +373,560 ( 0.11%) 1,140 ( 0.14%) . . => /home/.cargo/registry/src/index.crates.io-6f17d22bba15001f/regex-syntax-0.8.2/src/hir/literal.rs:regex_syntax::hir::literal::Extractor::cross (18x) + . . . . } + 16 ( 0.00%) . . . if usize::try_from(min).is_err() || min > limit { + . . . . seq.make_inexact(); + . . . . } + 24 ( 0.00%) . . . seq + . . . . } + . . . . hir::Repetition { min, .. } => { + . . . . assert!(min > 0); // handled above + . . . . let limit = + . . . . u32::try_from(self.limit_repeat).unwrap_or(u32::MAX); + . . . . let mut seq = Seq::singleton(Literal::exact(vec![])); + . . . . for _ in 0..cmp::min(min, limit) { + . . . . if seq.is_inexact() { + . . . . break; + . . . . } + 121 ( 0.00%) . . . seq = self.cross(seq, &mut subseq.clone()); + 7,145 ( 0.00%) 3 ( 0.00%) . . => /home/.cargo/registry/src/index.crates.io-6f17d22bba15001f/regex-syntax-0.8.2/src/hir/literal.rs:regex_syntax::hir::literal::Extractor::cross (11x) + . . . . } + . . . . seq.make_inexact(); + 44 ( 0.00%) . . . seq + . . . . } + . . . . } + 249 ( 0.00%) . . . } + . . . . + . . . . /// Convert the given Unicode class into a sequence of literals if the + . . . . /// class is small enough. If the class is too big, return an infinite + . . . . /// sequence. + . . . . fn extract_class_unicode(&self, cls: &hir::ClassUnicode) -> Seq { + 187 ( 0.00%) . . . if self.class_over_limit_unicode(cls) { + . . . . return Seq::infinite(); + . . . . } + . . . . let mut seq = Seq::empty(); + . . . . for r in cls.iter() { + . . . . for ch in r.start()..=r.end() { + . . . . seq.push(Literal::from(ch)); + . . . . } + . . . . } + 445 ( 0.00%) . . . self.enforce_literal_len(&mut seq); + 534 ( 0.00%) . . . seq + . . . . } + . . . . + . . . . /// Convert the given byte class into a sequence of literals if the class + . . . . /// is small enough. If the class is too big, return an infinite sequence. + . . . . fn extract_class_bytes(&self, cls: &hir::ClassBytes) -> Seq { + . . . . if self.class_over_limit_bytes(cls) { + . . . . return Seq::infinite(); + . . . . } +-- line 519 ---------------------------------------- +-- line 527 ---------------------------------------- + . . . . seq + . . . . } + . . . . + . . . . /// Returns true if the given Unicode class exceeds the configured limits + . . . . /// on this extractor. + . . . . fn class_over_limit_unicode(&self, cls: &hir::ClassUnicode) -> bool { + . . . . let mut count = 0; + . . . . for r in cls.iter() { + 608 ( 0.00%) . . . if count > self.limit_class { + . . . . return true; + . . . . } + 246 ( 0.00%) . . . count += r.len(); + . . . . } + 89 ( 0.00%) . . . count > self.limit_class + . . . . } + . . . . + . . . . /// Returns true if the given byte class exceeds the configured limits on + . . . . /// this extractor. + . . . . fn class_over_limit_bytes(&self, cls: &hir::ClassBytes) -> bool { + . . . . let mut count = 0; + . . . . for r in cls.iter() { + . . . . if count > self.limit_class { +-- line 548 ---------------------------------------- +-- line 551 ---------------------------------------- + . . . . count += r.len(); + . . . . } + . . . . count > self.limit_class + . . . . } + . . . . + . . . . /// Compute the cross product of the two sequences if the result would be + . . . . /// within configured limits. Otherwise, make `seq2` infinite and cross the + . . . . /// infinite sequence with `seq1`. + 4,338 ( 0.00%) . . . fn cross(&self, mut seq1: Seq, seq2: &mut Seq) -> Seq { + 1,907 ( 0.00%) . . . if seq1.max_cross_len(seq2).map_or(false, |len| len > self.limit_total) + . . . . { + . . . . seq2.make_infinite(); + . . . . } + 2,410 ( 0.00%) . . . if let ExtractKind::Suffix = self.kind { + . . . . seq1.cross_reverse(seq2); + . . . . } else { + . . . . seq1.cross_forward(seq2); + . . . . } + 469 ( 0.00%) . . . assert!(seq1.len().map_or(true, |x| x <= self.limit_total)); + 964 ( 0.00%) . . . self.enforce_literal_len(&mut seq1); + 2,410 ( 0.00%) . . . seq1 + 3,856 ( 0.00%) . . . } + . . . . + . . . . /// Union the two sequences if the result would be within configured + . . . . /// limits. Otherwise, make `seq2` infinite and union the infinite sequence + . . . . /// with `seq1`. + 22,023 ( 0.01%) . . . fn union(&self, mut seq1: Seq, seq2: &mut Seq) -> Seq { + 2,444 ( 0.00%) . . . if seq1.max_union_len(seq2).map_or(false, |len| len > self.limit_total) + . . . . { + . . . . // We try to trim our literal sequences to see if we can make + . . . . // room for more literals. The idea is that we'd rather trim down + . . . . // literals already in our sequence if it means we can add a few + . . . . // more and retain a finite sequence. Otherwise, we'll union with + . . . . // an infinite sequence and that infects everything and effectively + . . . . // stops literal extraction in its tracks. + . . . . // + . . . . // We do we keep 4 bytes here? Well, it's a bit of an abstraction + . . . . // leakage. Downstream, the literals may wind up getting fed to + . . . . // the Teddy algorithm, which supports searching literals up to + . . . . // length 4. So that's why we pick that number here. Arguably this + . . . . // should be a tuneable parameter, but it seems a little tricky to + . . . . // describe. And I'm still unsure if this is the right way to go + . . . . // about culling literal sequences. + 2 ( 0.00%) . . . match self.kind { + . . . . ExtractKind::Prefix => { + . . . . seq1.keep_first_bytes(4); + . . . . seq2.keep_first_bytes(4); + . . . . } + . . . . ExtractKind::Suffix => { + . . . . seq1.keep_last_bytes(4); + 2 ( 0.00%) . . . seq2.keep_last_bytes(4); + . . . . } + . . . . } + . . . . seq1.dedup(); + . . . . seq2.dedup(); + 1 ( 0.00%) . . . if seq1 + . . . . .max_union_len(seq2) + . . . . .map_or(false, |len| len > self.limit_total) + . . . . { + . . . . seq2.make_infinite(); + . . . . } + . . . . } + . . . . seq1.union(seq2); + 2,443 ( 0.00%) . . . assert!(seq1.len().map_or(true, |x| x <= self.limit_total)); + 12,235 ( 0.00%) . . . seq1 + 19,576 ( 0.01%) . . . } + . . . . + . . . . /// Applies the literal length limit to the given sequence. If none of the + . . . . /// literals in the sequence exceed the limit, then this is a no-op. + . . . . fn enforce_literal_len(&self, seq: &mut Seq) { + . . . . let len = self.limit_literal_len; + 5,482 ( 0.00%) . . . match self.kind { + . . . . ExtractKind::Prefix => seq.keep_first_bytes(len), + . . . . ExtractKind::Suffix => seq.keep_last_bytes(len), + . . . . } + . . . . } + . . . . } + . . . . + . . . . impl Default for Extractor { + . . . . fn default() -> Extractor { +-- line 630 ---------------------------------------- +-- line 724 ---------------------------------------- + . . . . /// // not altered by simplifying the set. + . . . . /// let expected = Seq::from_iter([ + . . . . /// Literal::inexact("far"), + . . . . /// Literal::inexact("app"), + . . . . /// Literal::exact("gap"), + . . . . /// ]); + . . . . /// assert_eq!(expected, seq); + . . . . /// ``` + 116 ( 0.00%) . . . #[derive(Clone, Eq, PartialEq)] + . . . . pub struct Seq { + . . . . /// The members of this seq. + . . . . /// + . . . . /// When `None`, the seq represents all possible literals. That is, it + . . . . /// prevents one from making assumptions about specific literals in the + . . . . /// seq, and forces one to treat it as if any literal might be in the seq. + . . . . /// + . . . . /// Note that `Some(vec![])` is valid and corresponds to the empty seq of +-- line 740 ---------------------------------------- +-- line 746 ---------------------------------------- + . . . . + . . . . impl Seq { + . . . . /// Returns an empty sequence. + . . . . /// + . . . . /// An empty sequence matches zero literals, and thus corresponds to a + . . . . /// regex that itself can never match. + . . . . #[inline] + . . . . pub fn empty() -> Seq { + 534 ( 0.00%) . . . Seq { literals: Some(vec![]) } + . . . . } + . . . . + . . . . /// Returns a sequence of literals without a finite size and may contain + . . . . /// any literal. + . . . . /// + . . . . /// A sequence without finite size does not reveal anything about the + . . . . /// characteristics of the literals in its set. There are no fixed prefixes + . . . . /// or suffixes, nor are lower or upper bounds on the length of the literals +-- line 762 ---------------------------------------- +-- line 810 ---------------------------------------- + . . . . /// Similarly, if the most recently added item of this sequence is + . . . . /// equivalent to the literal given, then it is not added. This reflects + . . . . /// a `Seq`'s "set like" behavior, and represents a practical trade off. + . . . . /// Namely, there is never any need to have two adjacent and equivalent + . . . . /// literals in the same sequence, _and_ it is easy to detect in some + . . . . /// cases. + . . . . #[inline] + . . . . pub fn push(&mut self, lit: Literal) { + 1,227 ( 0.00%) . . . let lits = match self.literals { + . . . . None => return, + . . . . Some(ref mut lits) => lits, + . . . . }; + 318 ( 0.00%) . . . if lits.last().map_or(false, |m| m == &lit) { + . . . . return; + . . . . } + . . . . lits.push(lit); + . . . . } + . . . . + . . . . /// Make all of the literals in this sequence inexact. + . . . . /// + . . . . /// This is a no-op if this sequence is not finite. + . . . . #[inline] + . . . . pub fn make_inexact(&mut self) { + 116 ( 0.00%) . . . let lits = match self.literals { + . . . . None => return, + . . . . Some(ref mut lits) => lits, + . . . . }; + . . . . for lit in lits.iter_mut() { + . . . . lit.make_inexact(); + . . . . } + . . . . } + . . . . + . . . . /// Converts this sequence to an infinite sequence. + . . . . /// + . . . . /// This is a no-op if the sequence is already infinite. + . . . . #[inline] + . . . . pub fn make_infinite(&mut self) { + 145 ( 0.00%) . . . self.literals = None; + . . . . } + . . . . + . . . . /// Modify this sequence to contain the cross product between it and the + . . . . /// sequence given. + . . . . /// + . . . . /// The cross product only considers literals in this sequence that are + . . . . /// exact. That is, inexact literals are not extended. + . . . . /// +-- line 855 ---------------------------------------- +-- line 952 ---------------------------------------- + . . . . /// + . . . . /// // seq1 remains unchanged. + . . . . /// assert!(!seq1.is_finite()); + . . . . /// // Even though the literals in seq2 weren't used, it was still drained. + . . . . /// assert_eq!(Some(0), seq2.len()); + . . . . /// ``` + . . . . #[inline] + . . . . pub fn cross_forward(&mut self, other: &mut Seq) { + 2,161 ( 0.00%) . . . let (lits1, lits2) = match self.cross_preamble(other) { + 45,240 ( 0.01%) . . . => /home/.cargo/registry/src/index.crates.io-6f17d22bba15001f/regex-syntax-0.8.2/src/hir/literal.rs:regex_syntax::hir::literal::Seq::cross_preamble (399x) + . . . . None => return, + . . . . Some((lits1, lits2)) => (lits1, lits2), + . . . . }; + . . . . let newcap = lits1.len().saturating_mul(lits2.len()); + 2,898 ( 0.00%) . . . for selflit in mem::replace(lits1, Vec::with_capacity(newcap)) { + . . . . if !selflit.is_exact() { + 96 ( 0.00%) . . . lits1.push(selflit); + . . . . continue; + . . . . } + . . . . for otherlit in lits2.iter() { + . . . . let mut newlit = Literal::exact(Vec::with_capacity( + . . . . selflit.len() + otherlit.len(), + . . . . )); + . . . . newlit.extend(&selflit); + 9,256 ( 0.00%) . . . newlit.extend(&otherlit); + 4,628 ( 0.00%) . . . if !otherlit.is_exact() { + . . . . newlit.make_inexact(); + . . . . } + . . . . lits1.push(newlit); + . . . . } + . . . . } + . . . . lits2.drain(..); + . . . . self.dedup(); + . . . . } +-- line 984 ---------------------------------------- +-- line 1091 ---------------------------------------- + . . . . /// + . . . . /// // seq1 remains unchanged. + . . . . /// assert!(!seq1.is_finite()); + . . . . /// // Even though the literals in seq2 weren't used, it was still drained. + . . . . /// assert_eq!(Some(0), seq2.len()); + . . . . /// ``` + . . . . #[inline] + . . . . pub fn cross_reverse(&mut self, other: &mut Seq) { + 249 ( 0.00%) . . . let (lits1, lits2) = match self.cross_preamble(other) { + 7,986 ( 0.00%) . . . => /home/.cargo/registry/src/index.crates.io-6f17d22bba15001f/regex-syntax-0.8.2/src/hir/literal.rs:regex_syntax::hir::literal::Seq::cross_preamble (83x) + . . . . None => return, + . . . . Some((lits1, lits2)) => (lits1, lits2), + . . . . }; + . . . . // We basically proceed as we do in 'cross_forward' at this point, + . . . . // except that the outer loop is now 'other' and the inner loop is now + . . . . // 'self'. That's because 'self' corresponds to suffixes and 'other' + . . . . // corresponds to the sequence we want to *prepend* to the suffixes. + . . . . let newcap = lits1.len().saturating_mul(lits2.len()); + . . . . let selflits = mem::replace(lits1, Vec::with_capacity(newcap)); + . . . . for (i, otherlit) in lits2.drain(..).enumerate() { + . . . . for selflit in selflits.iter() { + 2,343 ( 0.00%) . . . if !selflit.is_exact() { + . . . . // If the suffix isn't exact, then we can't prepend + . . . . // anything to it. However, we still want to keep it. But + . . . . // we only want to keep one of them, to avoid duplication. + . . . . // (The duplication is okay from a correctness perspective, + . . . . // but wasteful.) + 80 ( 0.00%) . . . if i == 0 { + . . . . lits1.push(selflit.clone()); + . . . . } + . . . . continue; + . . . . } + . . . . let mut newlit = Literal::exact(Vec::with_capacity( + . . . . otherlit.len() + selflit.len(), + . . . . )); + . . . . newlit.extend(&otherlit); + 4,526 ( 0.00%) . . . newlit.extend(&selflit); + 2,263 ( 0.00%) . . . if !otherlit.is_exact() { + . . . . newlit.make_inexact(); + . . . . } + . . . . lits1.push(newlit); + . . . . } + . . . . } + . . . . self.dedup(); + . . . . } + . . . . + . . . . /// A helper function the corresponds to the subtle preamble for both + . . . . /// `cross_forward` and `cross_reverse`. In effect, it handles the cases + . . . . /// of infinite sequences for both `self` and `other`, as well as ensuring + . . . . /// that literals from `other` are drained even if they aren't used. + 4,338 ( 0.00%) . . . fn cross_preamble<'a>( + . . . . &'a mut self, + . . . . other: &'a mut Seq, + . . . . ) -> Option<(&'a mut Vec, &'a mut Vec)> { + 1,446 ( 0.00%) . . . let lits2 = match other.literals { + . . . . None => { + . . . . // If our current seq contains the empty string and the seq + . . . . // we're adding matches any literal, then it follows that the + . . . . // current seq must now also match any literal. + . . . . // + . . . . // Otherwise, we just have to make sure everything in this + . . . . // sequence is inexact. + 73 ( 0.00%) . . . if self.min_literal_len() == Some(0) { + 13 ( 0.00%) . . . *self = Seq::infinite(); + . . . . } else { + . . . . self.make_inexact(); + . . . . } + . . . . return None; + . . . . } + . . . . Some(ref mut lits) => lits, + . . . . }; + 422 ( 0.00%) . . . let lits1 = match self.literals { + . . . . None => { + . . . . // If we aren't going to make it to the end of this routine + . . . . // where lits2 is drained, then we need to do it now. + . . . . lits2.drain(..); + . . . . return None; + . . . . } + . . . . Some(ref mut lits) => lits, + . . . . }; + . . . . Some((lits1, lits2)) + 4,820 ( 0.00%) . . . } + . . . . + . . . . /// Unions the `other` sequence into this one. + . . . . /// + . . . . /// The literals are always drained out of the given `other` sequence, + . . . . /// even if they are being unioned into an infinite sequence. This permits + . . . . /// the caller to reuse the `other` sequence in another context. + . . . . /// + . . . . /// Some literal deduping may be performed. If any deduping happens, +-- line 1179 ---------------------------------------- +-- line 1212 ---------------------------------------- + . . . . /// seq1.union(&mut seq2); + . . . . /// + . . . . /// // seq1 is still infinite and seq2 has been drained. + . . . . /// assert_eq!(None, seq1.len()); + . . . . /// assert_eq!(Some(0), seq2.len()); + . . . . /// ``` + . . . . #[inline] + . . . . pub fn union(&mut self, other: &mut Seq) { + 93 ( 0.00%) . . . let lits2 = match other.literals { + . . . . None => { + . . . . // Unioning with an infinite sequence always results in an + . . . . // infinite sequence. + . . . . self.make_infinite(); + . . . . return; + . . . . } + . . . . Some(ref mut lits) => lits.drain(..), + . . . . }; + 54 ( 0.00%) . . . let lits1 = match self.literals { + . . . . None => return, + . . . . Some(ref mut lits) => lits, + . . . . }; + 14,793 ( 0.00%) . . . lits1.extend(lits2); + . . . . self.dedup(); + . . . . } + . . . . + . . . . /// Unions the `other` sequence into this one by splice the `other` + . . . . /// sequence at the position of the first zero-length literal. + . . . . /// + . . . . /// This is useful for preserving preference order semantics when combining + . . . . /// two literal sequences. For example, in the regex `(a||f)+foo`, the +-- line 1241 ---------------------------------------- +-- line 1334 ---------------------------------------- + . . . . /// Literal::inexact("foo"), + . . . . /// ]); + . . . . /// seq.dedup(); + . . . . /// + . . . . /// assert_eq!(Seq::from_iter([Literal::inexact("foo")]), seq); + . . . . /// ``` + . . . . #[inline] + . . . . pub fn dedup(&mut self) { + 8,682 ( 0.00%) . . . if let Some(ref mut lits) = self.literals { + . . . . lits.dedup_by(|lit1, lit2| { + 58,970 ( 0.02%) . . . if lit1.as_bytes() != lit2.as_bytes() { + . . . . return false; + . . . . } + . . . . if lit1.is_exact() != lit2.is_exact() { + . . . . lit1.make_inexact(); + . . . . lit2.make_inexact(); + . . . . } + . . . . true + . . . . }); +-- line 1352 ---------------------------------------- +-- line 1482 ---------------------------------------- + . . . . /// Literal::exact("a"), + . . . . /// Literal::inexact("fo"), + . . . . /// Literal::inexact("qu"), + . . . . /// ]); + . . . . /// assert_eq!(expected, seq); + . . . . /// ``` + . . . . #[inline] + . . . . pub fn keep_first_bytes(&mut self, len: usize) { + 454 ( 0.00%) . . . if let Some(ref mut lits) = self.literals { + . . . . for m in lits.iter_mut() { + . . . . m.keep_first_bytes(len); + . . . . } + . . . . } + . . . . } + . . . . + . . . . /// Trims all literals in this seq such that only the last `len` bytes + . . . . /// remain. If a literal has less than or equal to `len` bytes, then it +-- line 1498 ---------------------------------------- +-- line 1510 ---------------------------------------- + . . . . /// Literal::exact("a"), + . . . . /// Literal::inexact("oo"), + . . . . /// Literal::inexact("ux"), + . . . . /// ]); + . . . . /// assert_eq!(expected, seq); + . . . . /// ``` + . . . . #[inline] + . . . . pub fn keep_last_bytes(&mut self, len: usize) { + 119 ( 0.00%) . . . if let Some(ref mut lits) = self.literals { + . . . . for m in lits.iter_mut() { + . . . . m.keep_last_bytes(len); + . . . . } + . . . . } + . . . . } + . . . . + . . . . /// Returns true if this sequence is finite. + . . . . /// +-- line 1526 ---------------------------------------- +-- line 1583 ---------------------------------------- + . . . . Some(len1.saturating_mul(len2)) + . . . . } + . . . . + . . . . /// Returns the length of the shortest literal in this sequence. + . . . . /// + . . . . /// If the sequence is infinite or empty, then this returns `None`. + . . . . #[inline] + . . . . pub fn min_literal_len(&self) -> Option { + 202 ( 0.00%) . . . self.literals.as_ref()?.iter().map(|x| x.len()).min() + . . . . } + . . . . + . . . . /// Returns the length of the longest literal in this sequence. + . . . . /// + . . . . /// If the sequence is infinite or empty, then this returns `None`. + . . . . #[inline] + . . . . pub fn max_literal_len(&self) -> Option { + . . . . self.literals.as_ref()?.iter().map(|x| x.len()).max() +-- line 1599 ---------------------------------------- +-- line 1624 ---------------------------------------- + . . . . /// assert_eq!(None, seq.longest_common_prefix()); + . . . . /// let seq = Seq::empty(); + . . . . /// assert_eq!(None, seq.longest_common_prefix()); + . . . . /// ``` + . . . . #[inline] + . . . . pub fn longest_common_prefix(&self) -> Option<&[u8]> { + . . . . // If we match everything or match nothing, then there's no meaningful + . . . . // longest common prefix. + 200 ( 0.00%) . . . let lits = match self.literals { + . . . . None => return None, + . . . . Some(ref lits) => lits, + . . . . }; + . . . . if lits.len() == 0 { + . . . . return None; + . . . . } + . . . . let base = lits[0].as_bytes(); + . . . . let mut len = base.len(); + . . . . for m in lits.iter().skip(1) { + . . . . len = m + . . . . .as_bytes() + . . . . .iter() + . . . . .zip(base[..len].iter()) + . . . . .take_while(|&(a, b)| a == b) + . . . . .count(); + 1,310 ( 0.00%) . . . if len == 0 { + . . . . return Some(&[]); + . . . . } + . . . . } + . . . . Some(&base[..len]) + . . . . } + . . . . + . . . . /// Returns the longest common suffix from this seq. + . . . . /// +-- line 1656 ---------------------------------------- +-- line 1677 ---------------------------------------- + . . . . /// assert_eq!(None, seq.longest_common_suffix()); + . . . . /// let seq = Seq::empty(); + . . . . /// assert_eq!(None, seq.longest_common_suffix()); + . . . . /// ``` + . . . . #[inline] + . . . . pub fn longest_common_suffix(&self) -> Option<&[u8]> { + . . . . // If we match everything or match nothing, then there's no meaningful + . . . . // longest common suffix. + 62 ( 0.00%) . . . let lits = match self.literals { + . . . . None => return None, + . . . . Some(ref lits) => lits, + . . . . }; + . . . . if lits.len() == 0 { + . . . . return None; + . . . . } + . . . . let base = lits[0].as_bytes(); + . . . . let mut len = base.len(); + . . . . for m in lits.iter().skip(1) { + . . . . len = m + . . . . .as_bytes() + . . . . .iter() + . . . . .rev() + 48 ( 0.00%) . . . .zip(base[base.len() - len..].iter().rev()) + . . . . .take_while(|&(a, b)| a == b) + . . . . .count(); + 72 ( 0.00%) . . . if len == 0 { + . . . . return Some(&[]); + . . . . } + . . . . } + . . . . Some(&base[base.len() - len..]) + . . . . } + . . . . + . . . . /// Optimizes this seq while treating its literals as prefixes and + . . . . /// respecting the preference order of its literals. +-- line 1710 ---------------------------------------- +-- line 1812 ---------------------------------------- + . . . . /// "sam", + . . . . /// "frodo", + . . . . /// ]); + . . . . /// seq.optimize_for_prefix_by_preference(); + . . . . /// assert!(seq.is_finite()); + . . . . /// ``` + . . . . #[inline] + . . . . pub fn optimize_for_prefix_by_preference(&mut self) { + 152 ( 0.00%) . . . self.optimize_by_preference(true); +4,898,468 ( 1.42%) 10,042 ( 1.24%) . . => /home/.cargo/registry/src/index.crates.io-6f17d22bba15001f/regex-syntax-0.8.2/src/hir/literal.rs:regex_syntax::hir::literal::Seq::optimize_by_preference (16x) + . . . . } + . . . . + . . . . /// Optimizes this seq while treating its literals as suffixes and + . . . . /// respecting the preference order of its literals. + . . . . /// + . . . . /// Optimization should only be run once extraction is complete. + . . . . /// + . . . . /// The [`Seq::optimize_for_prefix_by_preference`] does the same thing, but + . . . . /// for prefixes. See its documentation for more explanation. + . . . . #[inline] + . . . . pub fn optimize_for_suffix_by_preference(&mut self) { + 52 ( 0.00%) . . . self.optimize_by_preference(false); + 3,807 ( 0.00%) . . . => /home/.cargo/registry/src/index.crates.io-6f17d22bba15001f/regex-syntax-0.8.2/src/hir/literal.rs:regex_syntax::hir::literal::Seq::optimize_by_preference (13x) + . . . . } + . . . . + 584 ( 0.00%) . . . fn optimize_by_preference(&mut self, prefix: bool) { + . . . . let origlen = match self.len() { + . . . . None => return, + . . . . Some(len) => len, + . . . . }; + . . . . // Just give up now if our sequence contains an empty string. + 71 ( 0.00%) . . . if self.min_literal_len().map_or(false, |len| len == 0) { + . . . . // We squash the sequence so that nobody else gets any bright + . . . . // ideas to try and use it. An empty string implies a match at + . . . . // every position. A prefilter cannot help you here. + . . . . self.make_infinite(); + . . . . return; + . . . . } + . . . . // Make sure we start with the smallest sequence possible. We use a + . . . . // special version of preference minimization that retains exactness. + . . . . // This is legal because optimization is only expected to occur once + . . . . // extraction is complete. + 124 ( 0.00%) . . . if prefix { + . . . . if let Some(ref mut lits) = self.literals { + 150 ( 0.00%) . . . PreferenceTrie::minimize(lits, true); +2,765,359 ( 0.80%) 8,232 ( 1.02%) . . => /home/.cargo/registry/src/index.crates.io-6f17d22bba15001f/regex-syntax-0.8.2/src/hir/literal.rs:regex_syntax::hir::literal::PreferenceTrie::minimize (50x) + . . . . } + . . . . } + . . . . + . . . . // Look for a common prefix (or suffix). If we found one of those and + . . . . // it's long enough, then it's a good bet that it will be our fastest + . . . . // possible prefilter since single-substring search is so fast. + . . . . let fix = if prefix { + 100 ( 0.00%) . . . self.longest_common_prefix() + . . . . } else { + . . . . self.longest_common_suffix() + . . . . }; + . . . . if let Some(fix) = fix { + . . . . // As a special case, if we have a common prefix and the leading + . . . . // byte of that prefix is one that we think probably occurs rarely, + . . . . // then strip everything down to just that single byte. This should + . . . . // promote the use of memchr. +-- line 1870 ---------------------------------------- +-- line 1889 ---------------------------------------- + . . . . self.dedup(); + . . . . return; + . . . . } + . . . . // We only strip down to the common prefix/suffix if we think + . . . . // the existing set of literals isn't great, or if the common + . . . . // prefix/suffix is expected to be particularly discriminatory. + . . . . let isfast = + . . . . self.is_exact() && self.len().map_or(false, |len| len <= 16); + 186 ( 0.00%) . . . let usefix = fix.len() > 4 || (fix.len() > 1 && !isfast); + . . . . if usefix { + . . . . // If we keep exactly the number of bytes equal to the length + . . . . // of the prefix (or suffix), then by the definition of a + . . . . // prefix, every literal in the sequence will be equivalent. + . . . . // Thus, 'dedup' will leave us with one literal. + . . . . // + . . . . // We do it this way to avoid an alloc, but also to make sure + . . . . // the exactness of literals is kept (or not). +-- line 1905 ---------------------------------------- +-- line 1945 ---------------------------------------- + . . . . // + . . . . // So for example, the pair (3, 500) would mean, "if we have more than + . . . . // 500 literals in our sequence, then truncate all of our literals + . . . . // such that they are at most 3 bytes in length and the minimize the + . . . . // sequence." + . . . . const ATTEMPTS: [(usize, usize); 5] = + . . . . [(5, 10), (4, 10), (3, 64), (2, 64), (1, 10)]; + . . . . for (keep, limit) in ATTEMPTS { + 184 ( 0.00%) . . . let len = match self.len() { + . . . . None => break, + . . . . Some(len) => len, + . . . . }; + . . . . if len <= limit { + . . . . break; + . . . . } + 262 ( 0.00%) . . . if prefix { + . . . . self.keep_first_bytes(keep); + . . . . } else { + . . . . self.keep_last_bytes(keep); + . . . . } + 516 ( 0.00%) . . . if prefix { + . . . . if let Some(ref mut lits) = self.literals { + 508 ( 0.00%) . . . PreferenceTrie::minimize(lits, true); +7,274,386 ( 2.10%) 19,736 ( 2.44%) . . => /home/.cargo/registry/src/index.crates.io-6f17d22bba15001f/regex-syntax-0.8.2/src/hir/literal.rs:regex_syntax::hir::literal::PreferenceTrie::minimize (127x) + . . . . } + . . . . } + . . . . } + . . . . // Check for a poison literal. A poison literal is one that is short + . . . . // and is believed to have a very high match count. These poisons + . . . . // generally lead to a prefilter with a very high false positive rate, + . . . . // and thus overall worse performance. + . . . . // + . . . . // We do this last because we could have gone from a non-poisonous + . . . . // sequence to a poisonous one. Perhaps we should add some code to + . . . . // prevent such transitions in the first place, but then again, we + . . . . // likely only made the transition in the first place if the sequence + . . . . // was itself huge. And huge sequences are themselves poisonous. So... + 9 ( 0.00%) . . . if let Some(lits) = self.literals() { + . . . . if lits.iter().any(|lit| lit.is_poisonous()) { + . . . . self.make_infinite(); + . . . . } + . . . . } + . . . . // OK, if we had an exact sequence before attempting more optimizations + . . . . // above and our post-optimized sequence sucks for some reason or + . . . . // another, then we go back to the exact sequence. + 124 ( 0.00%) . . . if let Some(exact) = exact { + . . . . // If optimizing resulted in dropping our literals, then certainly + . . . . // backup and use the exact sequence that we had. + . . . . if !self.is_finite() { + . . . . *self = exact; + . . . . return; + . . . . } + . . . . // If our optimized sequence contains a short literal, then it's + . . . . // *probably* not so great. So throw it away and revert to the +-- line 1997 ---------------------------------------- +-- line 2002 ---------------------------------------- + . . . . } + . . . . // Finally, if our optimized sequence is "big" (i.e., can't use + . . . . // Teddy), then also don't use it and rely on the exact sequence. + . . . . if self.len().map_or(true, |len| len > 64) { + . . . . *self = exact; + . . . . return; + . . . . } + . . . . } + 584 ( 0.00%) . . . } + . . . . } + . . . . + . . . . impl core::fmt::Debug for Seq { + . . . . fn fmt(&self, f: &mut core::fmt::Formatter) -> core::fmt::Result { + . . . . write!(f, "Seq")?; + . . . . if let Some(lits) = self.literals() { + . . . . f.debug_list().entries(lits.iter()).finish() + . . . . } else { +-- line 2018 ---------------------------------------- +-- line 2043 ---------------------------------------- + . . . . /// has not been trimmed, and may continue to be extended. If a literal is + . . . . /// "exact" after visiting the entire `Hir` expression, then this implies that + . . . . /// the literal leads to a match state. (Although it doesn't necessarily imply + . . . . /// all occurrences of the literal correspond to a match of the regex, since + . . . . /// literal extraction ignores look-around assertions.) + . . . . #[derive(Clone, Eq, PartialEq, PartialOrd, Ord)] + . . . . pub struct Literal { + . . . . bytes: Vec, + 636 ( 0.00%) . . . exact: bool, + . . . . } + . . . . + . . . . impl Literal { + . . . . /// Returns a new exact literal containing the bytes given. + . . . . #[inline] + . . . . pub fn exact>>(bytes: B) -> Literal { + 27,973 ( 0.01%) . . . Literal { bytes: bytes.into(), exact: true } + . . . . } + . . . . + . . . . /// Returns a new inexact literal containing the bytes given. + . . . . #[inline] + . . . . pub fn inexact>>(bytes: B) -> Literal { + . . . . Literal { bytes: bytes.into(), exact: false } + . . . . } + . . . . +-- line 2066 ---------------------------------------- +-- line 2088 ---------------------------------------- + . . . . #[inline] + . . . . pub fn is_empty(&self) -> bool { + . . . . self.len() == 0 + . . . . } + . . . . + . . . . /// Returns true if and only if this literal is exact. + . . . . #[inline] + . . . . pub fn is_exact(&self) -> bool { + 11,200 ( 0.00%) . . . self.exact + . . . . } + . . . . + . . . . /// Marks this literal as inexact. + . . . . /// + . . . . /// Inexact literals can never be extended. For example, + . . . . /// [`Seq::cross_forward`] will not extend inexact literals. + . . . . #[inline] + . . . . pub fn make_inexact(&mut self) { + 8,732 ( 0.00%) . . . self.exact = false; + . . . . } + . . . . + . . . . /// Reverse the bytes in this literal. + . . . . #[inline] + . . . . pub fn reverse(&mut self) { + . . . . self.bytes.reverse(); + . . . . } + . . . . +-- line 2113 ---------------------------------------- +-- line 2122 ---------------------------------------- + . . . . self.bytes.extend_from_slice(&lit.bytes); + . . . . } + . . . . + . . . . /// Trims this literal such that only the first `len` bytes remain. If + . . . . /// this literal has fewer than `len` bytes, then it remains unchanged. + . . . . /// Otherwise, the literal is marked as inexact. + . . . . #[inline] + . . . . pub fn keep_first_bytes(&mut self, len: usize) { + 45,160 ( 0.01%) . . . if len >= self.len() { + . . . . return; + . . . . } + . . . . self.make_inexact(); + . . . . self.bytes.truncate(len); + . . . . } + . . . . + . . . . /// Trims this literal such that only the last `len` bytes remain. If this + . . . . /// literal has fewer than `len` bytes, then it remains unchanged. + . . . . /// Otherwise, the literal is marked as inexact. + . . . . #[inline] + . . . . pub fn keep_last_bytes(&mut self, len: usize) { + 7,227 ( 0.00%) . . . if len >= self.len() { + . . . . return; + . . . . } + . . . . self.make_inexact(); + . . . . self.bytes.drain(..self.len() - len); + . . . . } + . . . . + . . . . /// Returns true if it is believe that this literal is likely to match very + . . . . /// frequently, and is thus not a good candidate for a prefilter. + . . . . fn is_poisonous(&self) -> bool { + 6,306 ( 0.00%) . . . self.is_empty() || (self.len() == 1 && rank(self.as_bytes()[0]) >= 250) + . . . . } + . . . . } + . . . . + . . . . impl From for Literal { + . . . . fn from(byte: u8) -> Literal { + . . . . Literal::exact(vec![byte]) + . . . . } + . . . . } + . . . . + . . . . impl From for Literal { + . . . . fn from(ch: char) -> Literal { + . . . . use alloc::string::ToString; + 409 ( 0.00%) . . . Literal::exact(ch.encode_utf8(&mut [0; 4]).to_string()) + . . . . } + . . . . } + . . . . + . . . . impl AsRef<[u8]> for Literal { + . . . . fn as_ref(&self) -> &[u8] { + . . . . self.as_bytes() + 6,995 ( 0.00%) . . . } + . . . . } + . . . . + . . . . impl core::fmt::Debug for Literal { + . . . . fn fmt(&self, f: &mut core::fmt::Formatter) -> core::fmt::Result { + . . . . let tag = if self.exact { "E" } else { "I" }; + . . . . f.debug_tuple(tag) + . . . . .field(&crate::debug::Bytes(self.as_bytes())) + . . . . .finish() +-- line 2180 ---------------------------------------- +-- line 2229 ---------------------------------------- + . . . . /// order semantics. + . . . . /// + . . . . /// When `keep_exact` is true, the exactness of every literal retained is + . . . . /// kept. This is useful when dealing with a fully extracted `Seq` that + . . . . /// only contains exact literals. In that case, we can keep all retained + . . . . /// literals as exact because we know we'll never need to match anything + . . . . /// after them and because any removed literals are guaranteed to never + . . . . /// match. + 1,062 ( 0.00%) . . . fn minimize(literals: &mut Vec, keep_exact: bool) { + 1,239 ( 0.00%) . . . let mut trie = PreferenceTrie { + . . . . states: vec![], + . . . . matches: vec![], + . . . . next_literal_index: 1, + . . . . }; + . . . . let mut make_inexact = vec![]; + 68,751 ( 0.02%) . . . literals.retain_mut(|lit| match trie.insert(lit.as_bytes()) { +8,911,190 ( 2.57%) 20,413 ( 2.52%) . . => /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/alloc/src/vec/mod.rs:alloc::vec::Vec::retain_mut (177x) + . . . . Ok(_) => true, + . . . . Err(i) => { + 5,274 ( 0.00%) . . . if !keep_exact { + . . . . make_inexact.push(i.checked_sub(1).unwrap()); + . . . . } + . . . . false + . . . . } + . . . . }); + 531 ( 0.00%) . . . for i in make_inexact { + . . . . literals[i].make_inexact(); + . . . . } + 885 ( 0.00%) . . . } + . . . . + . . . . /// Returns `Ok` if the given byte string is accepted into this trie and + . . . . /// `Err` otherwise. The index for the success case corresponds to the + . . . . /// index of the literal added. The index for the error case corresponds to + . . . . /// the index of the literal already in the trie that prevented the given + . . . . /// byte string from being added. (Which implies it is a prefix of the one + . . . . /// given.) + . . . . /// + . . . . /// In short, the byte string given is accepted into the trie if and only + . . . . /// if it is possible for it to match when executing a preference order + . . . . /// search. +168,780 ( 0.05%) . . . fn insert(&mut self, bytes: &[u8]) -> Result { + . . . . let mut prev = self.root(); +101,091 ( 0.03%) . . . if let Some(idx) = self.matches[prev] { + . . . . return Err(idx.get()); + . . . . } + . . . . for &b in bytes.iter() { + 98,724 ( 0.03%) . . . match self.states[prev].trans.binary_search_by_key(&b, |t| t.0) { + . . . . Ok(i) => { + 30,371 ( 0.01%) . . . prev = self.states[prev].trans[i].1; +154,453 ( 0.04%) . . . if let Some(idx) = self.matches[prev] { + . . . . return Err(idx.get()); + . . . . } + . . . . } + . . . . Err(i) => { + . . . . let next = self.create_state(); + 37,982 ( 0.01%) . . . self.states[prev].trans.insert(i, (b, next)); + . . . . prev = next; + . . . . } + . . . . } + . . . . } + 14,280 ( 0.00%) . . . let idx = self.next_literal_index; + 28,560 ( 0.01%) . . . self.next_literal_index += 1; + 71,400 ( 0.02%) . . . self.matches[prev] = NonZeroUsize::new(idx); + . . . . Ok(idx) +135,024 ( 0.04%) . . . } + . . . . + . . . . /// Returns the root state ID, and if it doesn't exist, creates it. + . . . . fn root(&mut self) -> usize { + 33,756 ( 0.01%) . . . if !self.states.is_empty() { + . . . . 0 + . . . . } else { + . . . . self.create_state() + . . . . } + . . . . } + . . . . + . . . . /// Creates a new empty state and returns its ID. + . . . . fn create_state(&mut self) -> usize { + . . . . let id = self.states.len(); + . . . . self.states.push(State::default()); + 177 ( 0.00%) . . . self.matches.push(None); + . . . . id + . . . . } + . . . . } + . . . . + . . . . /// Returns the "rank" of the given byte. + . . . . /// + . . . . /// The minimum rank value is `0` and the maximum rank value is `255`. + . . . . /// +-- line 2315 ---------------------------------------- + + 43,381 ( 0.01%) . . . + +-------------------------------------------------------------------------------- +-- Auto-annotated source: /home/.cargo/registry/src/index.crates.io-6f17d22bba15001f/regex-syntax-0.8.2/src/hir/mod.rs +-------------------------------------------------------------------------------- +Ir Ge sysCount sysTime + +-- line 196 ---------------------------------------- + . . . . /// expression pattern string, and uses constant stack space and heap space + . . . . /// proportional to the size of the `Hir`. The regex it prints is guaranteed to + . . . . /// be _semantically_ equivalent to the original concrete syntax, but it may + . . . . /// look very different. (And potentially not practically readable by a human.) + . . . . /// + . . . . /// An `Hir`'s `fmt::Debug` implementation currently does not use constant + . . . . /// stack space. The implementation will also suppress some details (such as + . . . . /// the `Properties` inlined into every `Hir` value to make it less noisy). + 897 ( 0.00%) . . . #[derive(Clone, Eq, PartialEq)] + . . . . pub struct Hir { + . . . . /// The underlying HIR kind. + . . . . kind: HirKind, + . . . . /// Analysis info about this HIR, computed during construction. + 190 ( 0.00%) . . . props: Properties, + . . . . } + . . . . + . . . . /// Methods for accessing the underlying `HirKind` and `Properties`. + . . . . impl Hir { + . . . . /// Returns a reference to the underlying HIR kind. + . . . . pub fn kind(&self) -> &HirKind { + 87,468 ( 0.03%) . . . &self.kind + 87,468 ( 0.03%) . . . } + . . . . + . . . . /// Consumes ownership of this HIR expression and returns its underlying + . . . . /// `HirKind`. + 65 ( 0.00%) . . . pub fn into_kind(mut self) -> HirKind { + 13 ( 0.00%) . . . core::mem::replace(&mut self.kind, HirKind::Empty) + 65 ( 0.00%) . . . } + . . . . + . . . . /// Returns the properties computed for this `Hir`. + 549 ( 0.00%) . . . pub fn properties(&self) -> &Properties { + . . . . &self.props + 549 ( 0.00%) . . . } + . . . . + . . . . /// Splits this HIR into its constituent parts. + . . . . /// + . . . . /// This is useful because `let Hir { kind, props } = hir;` does not work + . . . . /// because of `Hir`'s custom `Drop` implementation. + . . . . fn into_parts(mut self) -> (HirKind, Properties) { +123,436 ( 0.04%) . . . ( + . . . . core::mem::replace(&mut self.kind, HirKind::Empty), + . . . . core::mem::replace(&mut self.props, Properties::empty()), + . . . . ) + . . . . } + . . . . } + . . . . + . . . . /// Smart constructors for HIR values. + . . . . /// +-- line 243 ---------------------------------------- +-- line 318 ---------------------------------------- + . . . . /// assert!(concat.properties().is_utf8()); + . . . . /// + . . . . /// // And also notice that the literals have been concatenated into a + . . . . /// // single `Literal`, to the point where there is no explicit `Concat`! + . . . . /// let expected = HirKind::Literal(Literal(Box::from("☃".as_bytes()))); + . . . . /// assert_eq!(&expected, concat.kind()); + . . . . /// ``` + . . . . #[inline] +107,842 ( 0.03%) . . . pub fn literal>>(lit: B) -> Hir { + . . . . let bytes = lit.into(); + 31,997 ( 0.01%) . . . if bytes.is_empty() { + . . . . return Hir::empty(); + . . . . } + . . . . + 5,736 ( 0.00%) . . . let lit = Literal(bytes); + 1,912 ( 0.00%) . . . let props = Properties::literal(&lit); +666,828 ( 0.19%) 3,616 ( 0.45%) . . => /home/.cargo/registry/src/index.crates.io-6f17d22bba15001f/regex-syntax-0.8.2/src/hir/mod.rs:regex_syntax::hir::Properties::literal (1,912x) + 75,546 ( 0.02%) . . . Hir { kind: HirKind::Literal(lit), props } + 92,436 ( 0.03%) . . . } + . . . . + . . . . /// Creates a class HIR expression. The class may either be defined over + . . . . /// ranges of Unicode codepoints or ranges of raw byte values. + . . . . /// + . . . . /// Note that an empty class is permitted. An empty class is equivalent to + . . . . /// `Hir::fail()`. + . . . . #[inline] + 34,910 ( 0.01%) . . . pub fn class(class: Class) -> Hir { + 4,788 ( 0.00%) . . . if class.is_empty() { + 102 ( 0.00%) . . . => /home/.cargo/registry/src/index.crates.io-6f17d22bba15001f/regex-syntax-0.8.2/src/hir/mod.rs:regex_syntax::hir::Class::is_empty (34x) + . . . . return Hir::fail(); + 15,756 ( 0.00%) . . . } else if let Some(bytes) = class.literal() { + 986 ( 0.00%) . . . => /home/.cargo/registry/src/index.crates.io-6f17d22bba15001f/regex-syntax-0.8.2/src/hir/mod.rs:regex_syntax::hir::Class::literal (34x) + . . . . return Hir::literal(bytes); + . . . . } + 5,153 ( 0.00%) . . . let props = Properties::class(&class); + 9,392 ( 0.00%) 48 ( 0.01%) . . => /home/.cargo/registry/src/index.crates.io-6f17d22bba15001f/regex-syntax-0.8.2/src/hir/mod.rs:regex_syntax::hir::Properties::class (34x) + 21,824 ( 0.01%) . . . Hir { kind: HirKind::Class(class), props } + 31,031 ( 0.01%) . . . } + . . . . + . . . . /// Creates a look-around assertion HIR expression. + . . . . #[inline] + . . . . pub fn look(look: Look) -> Hir { + 4 ( 0.00%) . . . let props = Properties::look(look); + 333 ( 0.00%) 2 ( 0.00%) . . => /home/.cargo/registry/src/index.crates.io-6f17d22bba15001f/regex-syntax-0.8.2/src/hir/mod.rs:regex_syntax::hir::Properties::look (2x) + 8 ( 0.00%) . . . Hir { kind: HirKind::Look(look), props } + . . . . } + . . . . + . . . . /// Creates a repetition HIR expression. + . . . . #[inline] + . . . . pub fn repetition(mut rep: Repetition) -> Hir { + . . . . // If the sub-expression of a repetition can only match the empty + . . . . // string, then we force its maximum to be at most 1. + 6,545 ( 0.00%) . . . if rep.sub.properties().maximum_len() == Some(0) { + 150 ( 0.00%) . . . => /home/.cargo/registry/src/index.crates.io-6f17d22bba15001f/regex-syntax-0.8.2/src/hir/mod.rs:regex_syntax::hir::Hir::properties (75x) + . . . . rep.min = cmp::min(rep.min, 1); + . . . . rep.max = rep.max.map(|n| cmp::min(n, 1)).or(Some(1)); + . . . . } + . . . . // The regex 'a{0}' is always equivalent to the empty regex. This is + . . . . // true even when 'a' is an expression that never matches anything + . . . . // (like '\P{any}'). + . . . . // + . . . . // Additionally, the regex 'a{1}' is always equivalent to 'a'. + 4,588 ( 0.00%) . . . if rep.min == 0 && rep.max == Some(0) { + . . . . return Hir::empty(); + . . . . } else if rep.min == 1 && rep.max == Some(1) { + . . . . return *rep.sub; + . . . . } + 3,919 ( 0.00%) . . . let props = Properties::repetition(&rep); + 24,656 ( 0.01%) 136 ( 0.02%) . . => /home/.cargo/registry/src/index.crates.io-6f17d22bba15001f/regex-syntax-0.8.2/src/hir/mod.rs:regex_syntax::hir::Properties::repetition (75x) + 12,353 ( 0.00%) . . . Hir { kind: HirKind::Repetition(rep), props } + . . . . } + . . . . + . . . . /// Creates a capture HIR expression. + . . . . /// + . . . . /// Note that there is no explicit HIR value for a non-capturing group. + . . . . /// Since a non-capturing group only exists to override precedence in the + . . . . /// concrete syntax and since an HIR already does its own grouping based on + . . . . /// what is parsed, there is no need to explicitly represent non-capturing + . . . . /// groups in the HIR. + . . . . #[inline] + . . . . pub fn capture(capture: Capture) -> Hir { + 1,386 ( 0.00%) . . . let props = Properties::capture(&capture); +209,050 ( 0.06%) 1,131 ( 0.14%) . . => /home/.cargo/registry/src/index.crates.io-6f17d22bba15001f/regex-syntax-0.8.2/src/hir/mod.rs:regex_syntax::hir::Properties::capture (693x) + 3,465 ( 0.00%) . . . Hir { kind: HirKind::Capture(capture), props } + . . . . } + . . . . + . . . . /// Returns the concatenation of the given expressions. + . . . . /// + . . . . /// This attempts to flatten and simplify the concatenation as appropriate. + . . . . /// + . . . . /// # Example + . . . . /// +-- line 401 ---------------------------------------- +-- line 415 ---------------------------------------- + . . . . /// Hir::literal([b'x']), + . . . . /// Hir::literal([b'y']), + . . . . /// Hir::literal([b'z']), + . . . . /// ]), + . . . . /// ]); + . . . . /// let expected = Hir::literal("abcxyz".as_bytes()); + . . . . /// assert_eq!(expected, hir); + . . . . /// ``` +127,544 ( 0.04%) . . . pub fn concat(subs: Vec) -> Hir { + . . . . // We rebuild the concatenation by simplifying it. Would be nice to do + . . . . // it in place, but that seems a little tricky? + . . . . let mut new = vec![]; + . . . . // This gobbles up any adjacent literals in a concatenation and smushes + . . . . // them together. Basically, when we see a literal, we add its bytes + . . . . // to 'prior_lit', and whenever we see anything else, we first take + . . . . // any bytes in 'prior_lit' and add it to the 'new' concatenation. + 15,943 ( 0.00%) . . . let mut prior_lit: Option> = None; +143,850 ( 0.04%) . . . for sub in subs { + . . . . let (kind, props) = sub.into_parts(); +215,788 ( 0.06%) . . . match kind { + 30,812 ( 0.01%) . . . HirKind::Literal(Literal(bytes)) => { + 46,218 ( 0.01%) . . . if let Some(ref mut prior_bytes) = prior_lit { + . . . . prior_bytes.extend_from_slice(&bytes); + . . . . } else { + 61,624 ( 0.02%) . . . prior_lit = Some(bytes.to_vec()); + . . . . } + . . . . } + . . . . // We also flatten concats that are direct children of another + . . . . // concat. We only need to do this one level deep since + . . . . // Hir::concat is the only way to build concatenations, and so + . . . . // flattening happens inductively. + 116 ( 0.00%) . . . HirKind::Concat(subs2) => { + 553 ( 0.00%) . . . for sub2 in subs2 { + . . . . let (kind2, props2) = sub2.into_parts(); + 136 ( 0.00%) . . . match kind2 { + . . . . HirKind::Literal(Literal(bytes)) => { + 2 ( 0.00%) . . . if let Some(ref mut prior_bytes) = prior_lit { + . . . . prior_bytes.extend_from_slice(&bytes); + . . . . } else { + 6 ( 0.00%) . . . prior_lit = Some(bytes.to_vec()); + . . . . } + . . . . } + . . . . kind2 => { + 66 ( 0.00%) . . . if let Some(prior_bytes) = prior_lit.take() { + . . . . new.push(Hir::literal(prior_bytes)); + . . . . } + . . . . new.push(Hir { kind: kind2, props: props2 }); + . . . . } + . . . . } + . . . . } + . . . . } + . . . . // We can just skip empty HIRs. + . . . . HirKind::Empty => {} + . . . . kind => { + 16,350 ( 0.00%) . . . if let Some(prior_bytes) = prior_lit.take() { + 4,590 ( 0.00%) . . . new.push(Hir::literal(prior_bytes)); +235,808 ( 0.07%) 2 ( 0.00%) . . => /home/.cargo/registry/src/index.crates.io-6f17d22bba15001f/regex-syntax-0.8.2/src/hir/mod.rs:regex_syntax::hir::Hir::literal (1,530x) + . . . . } + . . . . new.push(Hir { kind, props }); + . . . . } + . . . . } +138,857 ( 0.04%) . . . } +117,209 ( 0.03%) . . . if let Some(prior_bytes) = prior_lit.take() { + 13,876 ( 0.00%) . . . new.push(Hir::literal(prior_bytes)); +2,162,079 ( 0.62%) 18 ( 0.00%) . . => /home/.cargo/registry/src/index.crates.io-6f17d22bba15001f/regex-syntax-0.8.2/src/hir/mod.rs:regex_syntax::hir::Hir::literal (13,876x) + . . . . } + 36,032 ( 0.01%) . . . if new.is_empty() { + . . . . return Hir::empty(); + . . . . } else if new.len() == 1 { + . . . . return new.pop().unwrap(); + . . . . } + . . . . let props = Properties::concat(&new); + 14,511 ( 0.00%) . . . Hir { kind: HirKind::Concat(new), props } +127,544 ( 0.04%) . . . } + . . . . + . . . . /// Returns the alternation of the given expressions. + . . . . /// + . . . . /// This flattens and simplifies the alternation as appropriate. This may + . . . . /// include factoring out common prefixes or even rewriting the alternation + . . . . /// as a character class. + . . . . /// + . . . . /// Note that an empty alternation is equivalent to `Hir::fail()`. (It +-- line 494 ---------------------------------------- +-- line 548 ---------------------------------------- + . . . . /// ClassUnicodeRange::new('a', 'z'), + . . . . /// ]))), + . . . . /// ]), + . . . . /// ]); + . . . . /// assert_eq!(expected, hir); + . . . . /// ``` + . . . . /// + . . . . /// Note that these sorts of simplifications are not guaranteed. + 4,640 ( 0.00%) . . . pub fn alternation(subs: Vec) -> Hir { + . . . . // We rebuild the alternation by simplifying it. We proceed similarly + . . . . // as the concatenation case. But in this case, there's no literal + . . . . // simplification happening. We're just flattening alternations. + . . . . let mut new = Vec::with_capacity(subs.len()); +109,758 ( 0.03%) . . . for sub in subs { + . . . . let (kind, props) = sub.into_parts(); + 36,586 ( 0.01%) . . . match kind { + . . . . HirKind::Alternation(subs2) => { + . . . . new.extend(subs2); + . . . . } + . . . . kind => { + . . . . new.push(Hir { kind, props }); + . . . . } + . . . . } + . . . . } + 2,320 ( 0.00%) . . . if new.is_empty() { + . . . . return Hir::fail(); + . . . . } else if new.len() == 1 { + . . . . return new.pop().unwrap(); + . . . . } + . . . . // Now that it's completely flattened, look for the special case of + . . . . // 'char1|char2|...|charN' and collapse that into a class. Note that + . . . . // we look for 'char' first and then bytes. The issue here is that if + . . . . // we find both non-ASCII codepoints and non-ASCII singleton bytes, + . . . . // then it isn't actually possible to smush them into a single class. + . . . . // (Because classes are either "all codepoints" or "all bytes." You + . . . . // can have a class that both matches non-ASCII but valid UTF-8 and + . . . . // invalid UTF-8.) So we look for all chars and then all bytes, and + . . . . // don't handle anything else. + 3 ( 0.00%) . . . if let Some(singletons) = singleton_chars(&new) { + . . . . let it = singletons + . . . . .into_iter() + . . . . .map(|ch| ClassUnicodeRange { start: ch, end: ch }); + 4 ( 0.00%) . . . return Hir::class(Class::Unicode(ClassUnicode::new(it))); + . . . . } + . . . . if let Some(singletons) = singleton_bytes(&new) { + . . . . let it = singletons + . . . . .into_iter() + . . . . .map(|b| ClassBytesRange { start: b, end: b }); + . . . . return Hir::class(Class::Bytes(ClassBytes::new(it))); + . . . . } + . . . . // Similar to singleton chars, we can also look for alternations of + . . . . // classes. Those can be smushed into a single class. + . . . . if let Some(cls) = class_chars(&new) { + . . . . return Hir::class(cls); + . . . . } + . . . . if let Some(cls) = class_bytes(&new) { + . . . . return Hir::class(cls); + 579 ( 0.00%) . . . } + 3,474 ( 0.00%) . . . => /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/core/src/ptr/mod.rs:core::ptr::drop_in_place> (579x) + . . . . // Factor out a common prefix if we can, which might potentially + . . . . // simplify the expression and unlock other optimizations downstream. + . . . . // It also might generally make NFA matching and DFA construction + . . . . // faster by reducing the scope of branching in the regex. + 5,211 ( 0.00%) . . . new = match lift_common_prefix(new) { + 47,257 ( 0.01%) . . . => /home/.cargo/registry/src/index.crates.io-6f17d22bba15001f/regex-syntax-0.8.2/src/hir/mod.rs:regex_syntax::hir::lift_common_prefix (579x) + 7 ( 0.00%) . . . Ok(hir) => return hir, + 2,312 ( 0.00%) . . . Err(unchanged) => unchanged, + . . . . }; + 578 ( 0.00%) . . . let props = Properties::alternation(&new); +1,523,369 ( 0.44%) . . . => /home/.cargo/registry/src/index.crates.io-6f17d22bba15001f/regex-syntax-0.8.2/src/hir/mod.rs:regex_syntax::hir::Properties::alternation (578x) + 4,046 ( 0.00%) . . . Hir { kind: HirKind::Alternation(new), props } + 5,220 ( 0.00%) . . . } + . . . . + . . . . /// Returns an HIR expression for `.`. + . . . . /// + . . . . /// * [`Dot::AnyChar`] maps to `(?su-R:.)`. + . . . . /// * [`Dot::AnyByte`] maps to `(?s-Ru:.)`. + . . . . /// * [`Dot::AnyCharExceptLF`] maps to `(?u-Rs:.)`. + . . . . /// * [`Dot::AnyCharExceptCRLF`] maps to `(?Ru-s:.)`. + . . . . /// * [`Dot::AnyByteExceptLF`] maps to `(?-Rsu:.)`. +-- line 624 ---------------------------------------- +-- line 635 ---------------------------------------- + . . . . /// + . . . . /// let hir = Hir::dot(Dot::AnyByte); + . . . . /// let expected = Hir::class(Class::Bytes(ClassBytes::new([ + . . . . /// ClassBytesRange::new(0x00, 0xFF), + . . . . /// ]))); + . . . . /// assert_eq!(expected, hir); + . . . . /// ``` + . . . . #[inline] + 550 ( 0.00%) . . . pub fn dot(dot: Dot) -> Hir { + . . . . match dot { + . . . . Dot::AnyChar => { + . . . . let mut cls = ClassUnicode::empty(); + . . . . cls.push(ClassUnicodeRange::new('\0', '\u{10FFFF}')); + . . . . Hir::class(Class::Unicode(cls)) + . . . . } + . . . . Dot::AnyByte => { + 220 ( 0.00%) . . . let mut cls = ClassBytes::empty(); + 3,410 ( 0.00%) . . . => /home/.cargo/registry/src/index.crates.io-6f17d22bba15001f/regex-syntax-0.8.2/src/hir/mod.rs:regex_syntax::hir::ClassBytes::empty (110x) + 770 ( 0.00%) . . . cls.push(ClassBytesRange::new(b'\0', b'\xFF')); + 16,720 ( 0.00%) . . . => /home/.cargo/registry/src/index.crates.io-6f17d22bba15001f/regex-syntax-0.8.2/src/hir/mod.rs:regex_syntax::hir::ClassBytes::push (110x) + 660 ( 0.00%) . . . => /home/.cargo/registry/src/index.crates.io-6f17d22bba15001f/regex-syntax-0.8.2/src/hir/mod.rs:regex_syntax::hir::ClassBytesRange::new (110x) + 660 ( 0.00%) . . . Hir::class(Class::Bytes(cls)) + . . . . } + . . . . Dot::AnyCharExcept(ch) => { + . . . . let mut cls = + 35 ( 0.00%) . . . ClassUnicode::new([ClassUnicodeRange::new(ch, ch)]); + 820 ( 0.00%) . . . => /home/.cargo/registry/src/index.crates.io-6f17d22bba15001f/regex-syntax-0.8.2/src/hir/mod.rs:regex_syntax::hir::ClassUnicode::new (5x) + . . . . cls.negate(); + . . . . Hir::class(Class::Unicode(cls)) + . . . . } + . . . . Dot::AnyCharExceptLF => { + . . . . let mut cls = ClassUnicode::empty(); + . . . . cls.push(ClassUnicodeRange::new('\0', '\x09')); + . . . . cls.push(ClassUnicodeRange::new('\x0B', '\u{10FFFF}')); + . . . . Hir::class(Class::Unicode(cls)) +-- line 665 ---------------------------------------- +-- line 686 ---------------------------------------- + . . . . Dot::AnyByteExceptCRLF => { + . . . . let mut cls = ClassBytes::empty(); + . . . . cls.push(ClassBytesRange::new(b'\0', b'\x09')); + . . . . cls.push(ClassBytesRange::new(b'\x0B', b'\x0C')); + . . . . cls.push(ClassBytesRange::new(b'\x0E', b'\xFF')); + . . . . Hir::class(Class::Bytes(cls)) + . . . . } + . . . . } + 440 ( 0.00%) . . . } + . . . . } + . . . . + . . . . /// The underlying kind of an arbitrary [`Hir`] expression. + . . . . /// + . . . . /// An `HirKind` is principally useful for doing case analysis on the type + . . . . /// of a regular expression. If you're looking to build new `Hir` values, + . . . . /// then you _must_ use the smart constructors defined on `Hir`, like + . . . . /// [`Hir::repetition`], to build new `Hir` values. The API intentionally does + . . . . /// not expose any way of building an `Hir` directly from an `HirKind`. + 966 ( 0.00%) . . . #[derive(Clone, Debug, Eq, PartialEq)] + . . . . pub enum HirKind { + . . . . /// The empty regular expression, which matches everything, including the + . . . . /// empty string. + . . . . Empty, + . . . . /// A literalstring that matches exactly these bytes. + . . . . Literal(Literal), + . . . . /// A single character class that matches any of the characters in the + . . . . /// class. A class can either consist of Unicode scalar values as +-- line 712 ---------------------------------------- +-- line 809 ---------------------------------------- + . . . . /// regex `(?-u:a|\xc2\xa0)` will compile down to HIR for the Unicode class + . . . . /// `[a\u00A0]` due to optimizations. + . . . . /// + . . . . /// Note that `Bytes` variant may be produced even when it exclusively matches + . . . . /// valid UTF-8. This is because a `Bytes` variant represents an intention by + . . . . /// the author of the regular expression to disable Unicode mode, which in turn + . . . . /// impacts the semantics of case insensitive matching. For example, `(?i)k` + . . . . /// and `(?i-u)k` will not match the same set of strings. + 1,414 ( 0.00%) . . . #[derive(Clone, Eq, PartialEq)] + . . . . pub enum Class { + . . . . /// A set of characters represented by Unicode scalar values. + . . . . Unicode(ClassUnicode), + . . . . /// A set of characters represented by arbitrary bytes (one byte per + . . . . /// character). + . . . . Bytes(ClassBytes), + . . . . } + . . . . +-- line 825 ---------------------------------------- +-- line 931 ---------------------------------------- + . . . . /// assert_eq!(Some(1), hir.properties().minimum_len()); + . . . . /// // But sometimes Unicode classes might be bigger! + . . . . /// let hir = parse(r"\p{Cyrillic}")?; + . . . . /// assert_eq!(Some(2), hir.properties().minimum_len()); + . . . . /// + . . . . /// # Ok::<(), Box>(()) + . . . . /// ``` + . . . . pub fn minimum_len(&self) -> Option { + 5,456 ( 0.00%) . . . match *self { + . . . . Class::Unicode(ref x) => x.minimum_len(), + . . . . Class::Bytes(ref x) => x.minimum_len(), + . . . . } + . . . . } + . . . . + . . . . /// Returns the length, in bytes, of the longest string matched by this + . . . . /// character class. + . . . . /// +-- line 947 ---------------------------------------- +-- line 989 ---------------------------------------- + . . . . } + . . . . } + . . . . + . . . . /// Returns true if and only if this character class is empty. That is, + . . . . /// it has no elements. + . . . . /// + . . . . /// An empty character can never match anything, including an empty string. + . . . . pub fn is_empty(&self) -> bool { + 3 ( 0.00%) . . . match *self { + . . . . Class::Unicode(ref x) => x.ranges().is_empty(), + . . . . Class::Bytes(ref x) => x.ranges().is_empty(), + . . . . } + 303 ( 0.00%) . . . } + . . . . + . . . . /// If this class consists of exactly one element (whether a codepoint or a + . . . . /// byte), then return it as a literal byte string. + . . . . /// + . . . . /// If this class is empty or contains more than one element, then `None` + . . . . /// is returned. + 1,212 ( 0.00%) . . . pub fn literal(&self) -> Option> { + 8,362 ( 0.00%) . . . match *self { + 8,337 ( 0.00%) . . . Class::Unicode(ref x) => x.literal(), + 3,307 ( 0.00%) . . . => /home/.cargo/registry/src/index.crates.io-6f17d22bba15001f/regex-syntax-0.8.2/src/hir/mod.rs:regex_syntax::hir::ClassUnicode::literal (193x) + . . . . Class::Bytes(ref x) => x.literal(), + . . . . } + 1,515 ( 0.00%) . . . } + . . . . } + . . . . + . . . . impl core::fmt::Debug for Class { + . . . . fn fmt(&self, f: &mut core::fmt::Formatter) -> core::fmt::Result { + . . . . use crate::debug::Byte; + . . . . + . . . . let mut fmter = f.debug_set(); + . . . . match *self { +-- line 1021 ---------------------------------------- +-- line 1032 ---------------------------------------- + . . . . } + . . . . fmter.finish() + . . . . } + . . . . } + . . . . + . . . . /// A set of characters represented by Unicode scalar values. + . . . . #[derive(Clone, Debug, Eq, PartialEq)] + . . . . pub struct ClassUnicode { + 64 ( 0.00%) . . . set: IntervalSet, + 1,810 ( 0.00%) . . . => /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/alloc/src/vec/partial_eq.rs: as core::cmp::PartialEq>::eq (60x) + . . . . } + . . . . + . . . . impl ClassUnicode { + . . . . /// Create a new class from a sequence of ranges. + . . . . /// + . . . . /// The given ranges do not need to be in any specific order, and ranges + . . . . /// may overlap. Ranges will automatically be sorted into a canonical + . . . . /// non-overlapping order. + 2,255 ( 0.00%) . . . pub fn new(ranges: I) -> ClassUnicode + . . . . where + . . . . I: IntoIterator, + . . . . { + 1 ( 0.00%) . . . ClassUnicode { set: IntervalSet::new(ranges) } + 982 ( 0.00%) . . . => /home/.cargo/registry/src/index.crates.io-6f17d22bba15001f/regex-syntax-0.8.2/src/hir/interval.rs:regex_syntax::hir::interval::IntervalSet::new (1x) + 3,380 ( 0.00%) . . . } + . . . . + . . . . /// Create a new class with no ranges. + . . . . /// + . . . . /// An empty class matches nothing. That is, it is equivalent to + . . . . /// [`Hir::fail`]. + . . . . pub fn empty() -> ClassUnicode { + . . . . ClassUnicode::new(vec![]) + . . . . } +-- line 1062 ---------------------------------------- +-- line 1066 ---------------------------------------- + . . . . self.set.push(range); + . . . . } + . . . . + . . . . /// Return an iterator over all ranges in this class. + . . . . /// + . . . . /// The iterator yields ranges in ascending order. + . . . . pub fn iter(&self) -> ClassUnicodeIter<'_> { + . . . . ClassUnicodeIter(self.set.iter()) + 5,631 ( 0.00%) . . . } + . . . . + . . . . /// Return the underlying ranges as a slice. + . . . . pub fn ranges(&self) -> &[ClassUnicodeRange] { + . . . . self.set.intervals() + . . . . } + . . . . + . . . . /// Expand this character class such that it contains all case folded + . . . . /// characters, according to Unicode's "simple" mapping. For example, if +-- line 1082 ---------------------------------------- +-- line 1102 ---------------------------------------- + . . . . /// this class consists of the range `a-z`, then applying case folding will + . . . . /// result in the class containing both the ranges `a-z` and `A-Z`. + . . . . /// + . . . . /// # Error + . . . . /// + . . . . /// This routine returns an error when the case mapping data necessary + . . . . /// for this routine to complete is unavailable. This occurs when the + . . . . /// `unicode-case` feature is not enabled. + 6,720 ( 0.00%) . . . pub fn try_case_fold_simple( + . . . . &mut self, + . . . . ) -> core::result::Result<(), CaseFoldError> { + . . . . self.set.case_fold_simple() + 7,840 ( 0.00%) . . . } + . . . . + . . . . /// Negate this character class. + . . . . /// + . . . . /// For all `c` where `c` is a Unicode scalar value, if `c` was in this + . . . . /// set, then it will not be in this set after negation. + . . . . pub fn negate(&mut self) { + 66 ( 0.00%) . . . self.set.negate(); + 3,555 ( 0.00%) 10 ( 0.00%) . . => /home/.cargo/registry/src/index.crates.io-6f17d22bba15001f/regex-syntax-0.8.2/src/hir/interval.rs:regex_syntax::hir::interval::IntervalSet::negate (6x) + . . . . } + . . . . + . . . . /// Union this character class with the given character class, in place. + . . . . pub fn union(&mut self, other: &ClassUnicode) { + 114 ( 0.00%) . . . self.set.union(&other.set); + 14,747 ( 0.00%) 27 ( 0.00%) . . => /home/.cargo/registry/src/index.crates.io-6f17d22bba15001f/regex-syntax-0.8.2/src/hir/interval.rs:regex_syntax::hir::interval::IntervalSet::union (57x) + . . . . } + . . . . + . . . . /// Intersect this character class with the given character class, in + . . . . /// place. + . . . . pub fn intersect(&mut self, other: &ClassUnicode) { + . . . . self.set.intersect(&other.set); + . . . . } + . . . . +-- line 1134 ---------------------------------------- +-- line 1148 ---------------------------------------- + . . . . pub fn symmetric_difference(&mut self, other: &ClassUnicode) { + . . . . self.set.symmetric_difference(&other.set); + . . . . } + . . . . + . . . . /// Returns true if and only if this character class will either match + . . . . /// nothing or only ASCII bytes. Stated differently, this returns false + . . . . /// if and only if this class contains a non-ASCII codepoint. + . . . . pub fn is_ascii(&self) -> bool { + 11,319 ( 0.00%) . . . self.set.intervals().last().map_or(true, |r| r.end <= '\x7F') + 5,631 ( 0.00%) . . . } + . . . . + . . . . /// Returns the length, in bytes, of the smallest string matched by this + . . . . /// character class. + . . . . /// + . . . . /// Returns `None` when the class is empty. + . . . . pub fn minimum_len(&self) -> Option { + 2,618 ( 0.00%) . . . let first = self.ranges().get(0)?; + . . . . // Correct because c1 < c2 implies c1.len_utf8() < c2.len_utf8(). + 2,618 ( 0.00%) . . . Some(first.start.len_utf8()) + . . . . } + . . . . + . . . . /// Returns the length, in bytes, of the longest string matched by this + . . . . /// character class. + . . . . /// + . . . . /// Returns `None` when the class is empty. + . . . . pub fn maximum_len(&self) -> Option { + . . . . let last = self.ranges().last()?; + . . . . // Correct because c1 < c2 implies c1.len_utf8() < c2.len_utf8(). + 2,618 ( 0.00%) . . . Some(last.end.len_utf8()) + . . . . } + . . . . + . . . . /// If this class consists of exactly one codepoint, then return it as + . . . . /// a literal byte string. + . . . . /// + . . . . /// If this class is empty or contains more than one codepoint, then `None` + . . . . /// is returned. + 20,360 ( 0.01%) . . . pub fn literal(&self) -> Option> { + . . . . let rs = self.ranges(); + 15,080 ( 0.00%) . . . if rs.len() == 1 && rs[0].start == rs[0].end { + 1,454 ( 0.00%) . . . Some(rs[0].start.encode_utf8(&mut [0; 4]).to_string().into_bytes()) + . . . . } else { + 5,236 ( 0.00%) . . . None + . . . . } + 24,432 ( 0.01%) . . . } + . . . . + . . . . /// If this class consists of only ASCII ranges, then return its + . . . . /// corresponding and equivalent byte class. + . . . . pub fn to_byte_class(&self) -> Option { + 57 ( 0.00%) . . . if !self.is_ascii() { + . . . . return None; + . . . . } + . . . . Some(ClassBytes::new(self.ranges().iter().map(|r| { + . . . . // Since we are guaranteed that our codepoint range is ASCII, the + . . . . // 'u8::try_from' calls below are guaranteed to be correct. + . . . . ClassBytesRange { + . . . . start: u8::try_from(r.start).unwrap(), + . . . . end: u8::try_from(r.end).unwrap(), +-- line 1204 ---------------------------------------- +-- line 1213 ---------------------------------------- + . . . . #[derive(Debug)] + . . . . pub struct ClassUnicodeIter<'a>(IntervalSetIter<'a, ClassUnicodeRange>); + . . . . + . . . . impl<'a> Iterator for ClassUnicodeIter<'a> { + . . . . type Item = &'a ClassUnicodeRange; + . . . . + . . . . fn next(&mut self) -> Option<&'a ClassUnicodeRange> { + . . . . self.0.next() + 16,122 ( 0.00%) . . . } + . . . . } + . . . . + . . . . /// A single range of characters represented by Unicode scalar values. + . . . . /// + . . . . /// The range is closed. That is, the start and end of the range are included + . . . . /// in the range. + . . . . #[derive(Clone, Copy, Default, Eq, PartialEq, PartialOrd, Ord)] + . . . . pub struct ClassUnicodeRange { +-- line 1229 ---------------------------------------- +-- line 1270 ---------------------------------------- + . . . . fn set_upper(&mut self, bound: char) { + . . . . self.end = bound; + . . . . } + . . . . + . . . . /// Apply simple case folding to this Unicode scalar value range. + . . . . /// + . . . . /// Additional ranges are appended to the given vector. Canonical ordering + . . . . /// is *not* maintained in the given vector. + 8,330 ( 0.00%) . . . fn case_fold_simple( + . . . . &self, + . . . . ranges: &mut Vec, + . . . . ) -> Result<(), unicode::CaseFoldError> { + 1,190 ( 0.00%) . . . let mut folder = unicode::SimpleCaseFolder::new()?; + 2,380 ( 0.00%) . . . if !folder.overlaps(self.start, self.end) { + . . . . return Ok(()); + . . . . } + . . . . let (start, end) = (u32::from(self.start), u32::from(self.end)); + 2,240 ( 0.00%) . . . for cp in (start..=end).filter_map(char::from_u32) { + 3,380 ( 0.00%) . . . for &cp_folded in folder.mapping(cp) { +165,920 ( 0.05%) . . . => /home/.cargo/registry/src/index.crates.io-6f17d22bba15001f/regex-syntax-0.8.2/src/unicode.rs:regex_syntax::unicode::SimpleCaseFolder::mapping (1,120x) + . . . . ranges.push(ClassUnicodeRange::new(cp_folded, cp_folded)); + . . . . } + . . . . } + . . . . Ok(()) + 10,710 ( 0.00%) . . . } + . . . . } + . . . . + . . . . impl ClassUnicodeRange { + . . . . /// Create a new Unicode scalar value range for a character class. + . . . . /// + . . . . /// The returned range is always in a canonical form. That is, the range + . . . . /// returned always satisfies the invariant that `start <= end`. + . . . . pub fn new(start: char, end: char) -> ClassUnicodeRange { +-- line 1301 ---------------------------------------- +-- line 1302 ---------------------------------------- + . . . . ClassUnicodeRange::create(start, end) + . . . . } + . . . . + . . . . /// Return the start of this range. + . . . . /// + . . . . /// The start of a range is always less than or equal to the end of the + . . . . /// range. + . . . . pub fn start(&self) -> char { + 10,951 ( 0.00%) . . . self.start + 10,491 ( 0.00%) . . . } + . . . . + . . . . /// Return the end of this range. + . . . . /// + . . . . /// The end of a range is always greater than or equal to the start of the + . . . . /// range. + . . . . pub fn end(&self) -> char { + 10,721 ( 0.00%) . . . self.end + 10,491 ( 0.00%) . . . } + . . . . + . . . . /// Returns the number of codepoints in this range. + . . . . pub fn len(&self) -> usize { + 738 ( 0.00%) . . . let diff = 1 + u32::from(self.end) - u32::from(self.start); + . . . . // This is likely to panic in 16-bit targets since a usize can only fit + . . . . // 2^16. It's not clear what to do here, other than to return an error + . . . . // when building a Unicode class that contains a range whose length + . . . . // overflows usize. (Which, to be honest, is probably quite common on + . . . . // 16-bit targets. For example, this would imply that '.' and '\p{any}' + . . . . // would be impossible to build.) + . . . . usize::try_from(diff).expect("char class len fits in usize") + . . . . } +-- line 1331 ---------------------------------------- +-- line 1344 ---------------------------------------- + . . . . /// + . . . . /// The given ranges do not need to be in any specific order, and ranges + . . . . /// may overlap. Ranges will automatically be sorted into a canonical + . . . . /// non-overlapping order. + . . . . pub fn new(ranges: I) -> ClassBytes + . . . . where + . . . . I: IntoIterator, + . . . . { + 2 ( 0.00%) . . . ClassBytes { set: IntervalSet::new(ranges) } + 157 ( 0.00%) . . . => /home/.cargo/registry/src/index.crates.io-6f17d22bba15001f/regex-syntax-0.8.2/src/hir/interval.rs:regex_syntax::hir::interval::IntervalSet::new (1x) + . . . . } + . . . . + . . . . /// Create a new class with no ranges. + . . . . /// + . . . . /// An empty class matches nothing. That is, it is equivalent to + . . . . /// [`Hir::fail`]. + 220 ( 0.00%) . . . pub fn empty() -> ClassBytes { + . . . . ClassBytes::new(vec![]) + 330 ( 0.00%) . . . } + . . . . + . . . . /// Add a new range to this set. + 660 ( 0.00%) . . . pub fn push(&mut self, range: ClassBytesRange) { + . . . . self.set.push(range); + 440 ( 0.00%) . . . } + . . . . + . . . . /// Return an iterator over all ranges in this class. + . . . . /// + . . . . /// The iterator yields ranges in ascending order. + . . . . pub fn iter(&self) -> ClassBytesIter<'_> { + . . . . ClassBytesIter(self.set.iter()) + 110 ( 0.00%) . . . } + . . . . + . . . . /// Return the underlying ranges as a slice. + . . . . pub fn ranges(&self) -> &[ClassBytesRange] { + . . . . self.set.intervals() + 5,488 ( 0.00%) . . . } + . . . . + . . . . /// Expand this character class such that it contains all case folded + . . . . /// characters. For example, if this class consists of the range `a-z`, + . . . . /// then applying case folding will result in the class containing both the + . . . . /// ranges `a-z` and `A-Z`. + . . . . /// + . . . . /// Note that this only applies ASCII case folding, which is limited to the + . . . . /// characters `a-z` and `A-Z`. +-- line 1386 ---------------------------------------- +-- line 1393 ---------------------------------------- + . . . . /// For all `b` where `b` is a any byte, if `b` was in this set, then it + . . . . /// will not be in this set after negation. + . . . . pub fn negate(&mut self) { + . . . . self.set.negate(); + . . . . } + . . . . + . . . . /// Union this byte class with the given byte class, in place. + . . . . pub fn union(&mut self, other: &ClassBytes) { + 3 ( 0.00%) . . . self.set.union(&other.set); + 212 ( 0.00%) . . . => /home/.cargo/registry/src/index.crates.io-6f17d22bba15001f/regex-syntax-0.8.2/src/hir/interval.rs:regex_syntax::hir::interval::IntervalSet::union (1x) + . . . . } + . . . . + . . . . /// Intersect this byte class with the given byte class, in place. + . . . . pub fn intersect(&mut self, other: &ClassBytes) { + . . . . self.set.intersect(&other.set); + . . . . } + . . . . + . . . . /// Subtract the given byte class from this byte class, in place. +-- line 1409 ---------------------------------------- +-- line 1429 ---------------------------------------- + . . . . self.set.intervals().last().map_or(true, |r| r.end <= 0x7F) + . . . . } + . . . . + . . . . /// Returns the length, in bytes, of the smallest string matched by this + . . . . /// character class. + . . . . /// + . . . . /// Returns `None` when the class is empty. + . . . . pub fn minimum_len(&self) -> Option { + 220 ( 0.00%) . . . if self.ranges().is_empty() { + . . . . None + . . . . } else { + . . . . Some(1) + . . . . } + . . . . } + . . . . + . . . . /// Returns the length, in bytes, of the longest string matched by this + . . . . /// character class. +-- line 1445 ---------------------------------------- +-- line 1455 ---------------------------------------- + . . . . + . . . . /// If this class consists of exactly one byte, then return it as + . . . . /// a literal byte string. + . . . . /// + . . . . /// If this class is empty or contains more than one byte, then `None` + . . . . /// is returned. + . . . . pub fn literal(&self) -> Option> { + . . . . let rs = self.ranges(); + 550 ( 0.00%) . . . if rs.len() == 1 && rs[0].start == rs[0].end { + . . . . Some(vec![rs[0].start]) + . . . . } else { + 220 ( 0.00%) . . . None + . . . . } + . . . . } + . . . . + . . . . /// If this class consists of only ASCII ranges, then return its + . . . . /// corresponding and equivalent Unicode class. + . . . . pub fn to_unicode_class(&self) -> Option { + . . . . if !self.is_ascii() { + . . . . return None; +-- line 1474 ---------------------------------------- +-- line 1491 ---------------------------------------- + . . . . #[derive(Debug)] + . . . . pub struct ClassBytesIter<'a>(IntervalSetIter<'a, ClassBytesRange>); + . . . . + . . . . impl<'a> Iterator for ClassBytesIter<'a> { + . . . . type Item = &'a ClassBytesRange; + . . . . + . . . . fn next(&mut self) -> Option<&'a ClassBytesRange> { + . . . . self.0.next() + 220 ( 0.00%) . . . } + . . . . } + . . . . + . . . . /// A single range of characters represented by arbitrary bytes. + . . . . /// + . . . . /// The range is closed. That is, the start and end of the range are included + . . . . /// in the range. + . . . . #[derive(Clone, Copy, Default, Eq, PartialEq, PartialOrd, Ord)] + . . . . pub struct ClassBytesRange { +-- line 1507 ---------------------------------------- +-- line 1552 ---------------------------------------- + . . . . } + . . . . } + . . . . + . . . . impl ClassBytesRange { + . . . . /// Create a new byte range for a character class. + . . . . /// + . . . . /// The returned range is always in a canonical form. That is, the range + . . . . /// returned always satisfies the invariant that `start <= end`. + 110 ( 0.00%) . . . pub fn new(start: u8, end: u8) -> ClassBytesRange { + . . . . ClassBytesRange::create(start, end) + 110 ( 0.00%) . . . } + . . . . + . . . . /// Return the start of this range. + . . . . /// + . . . . /// The start of a range is always less than or equal to the end of the + . . . . /// range. + . . . . pub fn start(&self) -> u8 { + 110 ( 0.00%) . . . self.start + 110 ( 0.00%) . . . } + . . . . + . . . . /// Return the end of this range. + . . . . /// + . . . . /// The end of a range is always greater than or equal to the start of the + . . . . /// range. + . . . . pub fn end(&self) -> u8 { + 110 ( 0.00%) . . . self.end + 110 ( 0.00%) . . . } + . . . . + . . . . /// Returns the number of bytes in this range. + . . . . pub fn len(&self) -> usize { + . . . . usize::from(self.end.checked_sub(self.start).unwrap()) + . . . . .checked_add(1) + . . . . .unwrap() + . . . . } + . . . . } +-- line 1586 ---------------------------------------- +-- line 1592 ---------------------------------------- + . . . . .field("end", &crate::debug::Byte(self.end)) + . . . . .finish() + . . . . } + . . . . } + . . . . + . . . . /// The high-level intermediate representation for a look-around assertion. + . . . . /// + . . . . /// An assertion match is always zero-length. Also called an "empty match." + 2 ( 0.00%) . . . #[derive(Clone, Copy, Debug, Eq, PartialEq)] + . . . . pub enum Look { + . . . . /// Match the beginning of text. Specifically, this matches at the starting + . . . . /// position of the input. + . . . . Start = 1 << 0, + . . . . /// Match the end of text. Specifically, this matches at the ending + . . . . /// position of the input. + . . . . End = 1 << 1, + . . . . /// Match the beginning of a line or the beginning of text. Specifically, +-- line 1608 ---------------------------------------- +-- line 1801 ---------------------------------------- + . . . . pub struct Repetition { + . . . . /// The minimum range of the repetition. + . . . . /// + . . . . /// Note that special cases like `?`, `+` and `*` all get translated into + . . . . /// the ranges `{0,1}`, `{1,}` and `{0,}`, respectively. + . . . . /// + . . . . /// When `min` is zero, this expression can match the empty string + . . . . /// regardless of what its sub-expression is. + 8 ( 0.00%) . . . pub min: u32, + . . . . /// The maximum range of the repetition. + . . . . /// + . . . . /// Note that when `max` is `None`, `min` acts as a lower bound but where + . . . . /// there is no upper bound. For something like `x{5}` where the min and + . . . . /// max are equivalent, `min` will be set to `5` and `max` will be set to + . . . . /// `Some(5)`. + 4 ( 0.00%) . . . pub max: Option, + . . . . /// Whether this repetition operator is greedy or not. A greedy operator + . . . . /// will match as much as it can. A non-greedy operator will match as + . . . . /// little as it can. + . . . . /// + . . . . /// Typically, operators are greedy by default and are only non-greedy when + . . . . /// a `?` suffix is used, e.g., `(expr)*` is greedy while `(expr)*?` is + . . . . /// not. However, this can be inverted via the `U` "ungreedy" flag. + 24 ( 0.00%) . . . pub greedy: bool, + . . . . /// The expression being repeated. + 4 ( 0.00%) . . . pub sub: Box, + . . . . } + . . . . + . . . . impl Repetition { + . . . . /// Returns a new repetition with the same `min`, `max` and `greedy` + . . . . /// values, but with its sub-expression replaced with the one given. + 1,043 ( 0.00%) . . . pub fn with(&self, sub: Hir) -> Repetition { + 745 ( 0.00%) . . . Repetition { + 149 ( 0.00%) . . . min: self.min, + 298 ( 0.00%) . . . max: self.max, + 149 ( 0.00%) . . . greedy: self.greedy, + . . . . sub: Box::new(sub), + . . . . } + 1,043 ( 0.00%) . . . } + . . . . } + . . . . + . . . . /// A type describing the different flavors of `.`. + . . . . /// + . . . . /// This type is meant to be used with [`Hir::dot`], which is a convenience + . . . . /// routine for building HIR values derived from the `.` regex. + . . . . #[non_exhaustive] + . . . . #[derive(Clone, Copy, Debug, Eq, PartialEq)] +-- line 1847 ---------------------------------------- +-- line 1894 ---------------------------------------- + . . . . /// + . . . . /// This is equivalent to `(?R-su:.)` and also `(?-u:[[\x00-\xFF]--\r\n])`. + . . . . AnyByteExceptCRLF, + . . . . } + . . . . + . . . . /// A custom `Drop` impl is used for `HirKind` such that it uses constant stack + . . . . /// space but heap space proportional to the depth of the total `Hir`. + . . . . impl Drop for Hir { +555,360 ( 0.16%) . . . fn drop(&mut self) { + . . . . use core::mem; + . . . . +624,780 ( 0.18%) . . . match *self.kind() { + . . . . HirKind::Empty + . . . . | HirKind::Literal(_) + . . . . | HirKind::Class(_) + . . . . | HirKind::Look(_) => return, + 693 ( 0.00%) . . . HirKind::Capture(ref x) if x.sub.kind.subs().is_empty() => return, + 4,068 ( 0.00%) . . . HirKind::Repetition(ref x) if x.sub.kind.subs().is_empty() => { + . . . . return + . . . . } + . . . . HirKind::Concat(ref x) if x.is_empty() => return, + . . . . HirKind::Alternation(ref x) if x.is_empty() => return, + . . . . _ => {} + . . . . } + . . . . + 104 ( 0.00%) . . . let mut stack = vec![mem::replace(self, Hir::empty())]; +220,144 ( 0.06%) . . . while let Some(mut expr) = stack.pop() { +192,626 ( 0.06%) . . . match expr.kind { + . . . . HirKind::Empty + . . . . | HirKind::Literal(_) + . . . . | HirKind::Class(_) + . . . . | HirKind::Look(_) => {} + . . . . HirKind::Capture(ref mut x) => { + 693 ( 0.00%) . . . stack.push(mem::replace(&mut x.sub, Hir::empty())); + . . . . } + . . . . HirKind::Repetition(ref mut x) => { + 2,029 ( 0.00%) . . . stack.push(mem::replace(&mut x.sub, Hir::empty())); + . . . . } + . . . . HirKind::Concat(ref mut x) => { + . . . . stack.extend(x.drain(..)); + . . . . } + . . . . HirKind::Alternation(ref mut x) => { + . . . . stack.extend(x.drain(..)); + . . . . } + . . . . } + . . . . } +555,360 ( 0.16%) . . . } + . . . . } + . . . . + . . . . /// A type that collects various properties of an HIR value. + . . . . /// + . . . . /// Properties are always scalar values and represent meta data that is + . . . . /// computed inductively on an HIR value. Properties are defined for all + . . . . /// HIR values. + . . . . /// + . . . . /// All methods on a `Properties` value take constant time and are meant to + . . . . /// be cheap to call. + . . . . #[derive(Clone, Debug, Eq, PartialEq)] + 81 ( 0.00%) . . . pub struct Properties(Box); + . . . . + . . . . /// The property definition. It is split out so that we can box it, and + . . . . /// there by make `Properties` use less stack size. This is kind-of important + . . . . /// because every HIR value has a `Properties` attached to it. + . . . . /// + . . . . /// This does have the unfortunate consequence that creating any HIR value + . . . . /// always leads to at least one alloc for properties, but this is generally + . . . . /// true anyway (for pretty much all HirKinds except for look-arounds). + . . . . #[derive(Clone, Debug, Eq, PartialEq)] + . . . . struct PropertiesI { + . . . . minimum_len: Option, + 174 ( 0.00%) . . . maximum_len: Option, + 166 ( 0.00%) . . . look_set: LookSet, + 58 ( 0.00%) . . . look_set_prefix: LookSet, + 58 ( 0.00%) . . . look_set_suffix: LookSet, + 58 ( 0.00%) . . . look_set_prefix_any: LookSet, + 58 ( 0.00%) . . . look_set_suffix_any: LookSet, + 348 ( 0.00%) . . . utf8: bool, + 174 ( 0.00%) . . . explicit_captures_len: usize, + 58 ( 0.00%) . . . static_explicit_captures_len: Option, + 464 ( 0.00%) . . . literal: bool, + 406 ( 0.00%) . . . alternation_literal: bool, + . . . . } + . . . . + . . . . impl Properties { + . . . . /// Returns the length (in bytes) of the smallest string matched by this + . . . . /// HIR. + . . . . /// + . . . . /// A return value of `0` is possible and occurs when the HIR can match an + . . . . /// empty string. + . . . . /// + . . . . /// `None` is returned when there is no minimum length. This occurs in + . . . . /// precisely the cases where the HIR matches nothing. i.e., The language + . . . . /// the regex matches is empty. An example of such a regex is `\P{any}`. + . . . . #[inline] + . . . . pub fn minimum_len(&self) -> Option { + 22,662 ( 0.01%) . . . self.0.minimum_len + . . . . } + . . . . + . . . . /// Returns the length (in bytes) of the longest string matched by this + . . . . /// HIR. + . . . . /// + . . . . /// A return value of `0` is possible and occurs when nothing longer than + . . . . /// the empty string is in the language described by this HIR. + . . . . /// + . . . . /// `None` is returned when there is no longest matching string. This + . . . . /// occurs when the HIR matches nothing or when there is no upper bound on + . . . . /// the length of matching strings. Example of such regexes are `\P{any}` + . . . . /// (matches nothing) and `a+` (has no upper bound). + . . . . #[inline] + . . . . pub fn maximum_len(&self) -> Option { + 20,358 ( 0.01%) . . . self.0.maximum_len + . . . . } + . . . . + . . . . /// Returns a set of all look-around assertions that appear at least once + . . . . /// in this HIR value. + . . . . #[inline] + . . . . pub fn look_set(&self) -> LookSet { + 24,440 ( 0.01%) . . . self.0.look_set + . . . . } + . . . . + . . . . /// Returns a set of all look-around assertions that appear as a prefix for + . . . . /// this HIR value. That is, the set returned corresponds to the set of + . . . . /// assertions that must be passed before matching any bytes in a haystack. + . . . . /// + . . . . /// For example, `hir.look_set_prefix().contains(Look::Start)` returns true + . . . . /// if and only if the HIR is fully anchored at the start. + . . . . #[inline] + . . . . pub fn look_set_prefix(&self) -> LookSet { + 2,699 ( 0.00%) . . . self.0.look_set_prefix + . . . . } + . . . . + . . . . /// Returns a set of all look-around assertions that appear as a _possible_ + . . . . /// prefix for this HIR value. That is, the set returned corresponds to the + . . . . /// set of assertions that _may_ be passed before matching any bytes in a + . . . . /// haystack. + . . . . /// + . . . . /// For example, `hir.look_set_prefix_any().contains(Look::Start)` returns +-- line 2030 ---------------------------------------- +-- line 2039 ---------------------------------------- + . . . . /// this HIR value. That is, the set returned corresponds to the set of + . . . . /// assertions that must be passed in order to be considered a match after + . . . . /// all other consuming HIR expressions. + . . . . /// + . . . . /// For example, `hir.look_set_suffix().contains(Look::End)` returns true + . . . . /// if and only if the HIR is fully anchored at the end. + . . . . #[inline] + . . . . pub fn look_set_suffix(&self) -> LookSet { + 2,292 ( 0.00%) . . . self.0.look_set_suffix + . . . . } + . . . . + . . . . /// Returns a set of all look-around assertions that appear as a _possible_ + . . . . /// suffix for this HIR value. That is, the set returned corresponds to the + . . . . /// set of assertions that _may_ be passed before matching any bytes in a + . . . . /// haystack. + . . . . /// + . . . . /// For example, `hir.look_set_suffix_any().contains(Look::End)` returns +-- line 2055 ---------------------------------------- +-- line 2121 ---------------------------------------- + . . . . /// // are not valid UTF-8, when combined together, the + . . . . /// // overall expression *does* match valid UTF-8! + . . . . /// assert!(parse(r"(?-u)\xE2\x98\x83")?.properties().is_utf8()); + . . . . /// + . . . . /// # Ok::<(), Box>(()) + . . . . /// ``` + . . . . #[inline] + . . . . pub fn is_utf8(&self) -> bool { + 24,424 ( 0.01%) . . . self.0.utf8 + . . . . } + . . . . + . . . . /// Returns the total number of explicit capturing groups in the + . . . . /// corresponding HIR. + . . . . /// + . . . . /// Note that this does not include the implicit capturing group + . . . . /// corresponding to the entire match that is typically included by regex + . . . . /// engines. +-- line 2137 ---------------------------------------- +-- line 2145 ---------------------------------------- + . . . . /// + . . . . /// assert_eq!(0, parse("a")?.properties().explicit_captures_len()); + . . . . /// assert_eq!(1, parse("(a)")?.properties().explicit_captures_len()); + . . . . /// + . . . . /// # Ok::<(), Box>(()) + . . . . /// ``` + . . . . #[inline] + . . . . pub fn explicit_captures_len(&self) -> usize { + 1,467 ( 0.00%) . . . self.0.explicit_captures_len + . . . . } + . . . . + . . . . /// Returns the total number of explicit capturing groups that appear in + . . . . /// every possible match. + . . . . /// + . . . . /// If the number of capture groups can vary depending on the match, then + . . . . /// this returns `None`. That is, a value is only returned when the number + . . . . /// of matching groups is invariant or "static." +-- line 2161 ---------------------------------------- +-- line 2185 ---------------------------------------- + . . . . /// assert_eq!(None, len("a|(b)")?); + . . . . /// assert_eq!(None, len("(b)*")?); + . . . . /// assert_eq!(Some(1), len("(b)+")?); + . . . . /// + . . . . /// # Ok::<(), Box>(()) + . . . . /// ``` + . . . . #[inline] + . . . . pub fn static_explicit_captures_len(&self) -> Option { + 24,526 ( 0.01%) . . . self.0.static_explicit_captures_len + . . . . } + . . . . + . . . . /// Return true if and only if this HIR is a simple literal. This is + . . . . /// only true when this HIR expression is either itself a `Literal` or a + . . . . /// concatenation of only `Literal`s. + . . . . /// + . . . . /// For example, `f` and `foo` are literals, but `f+`, `(foo)`, `foo()` and + . . . . /// the empty string are not (even though they contain sub-expressions that + . . . . /// are literals). + . . . . #[inline] + . . . . pub fn is_literal(&self) -> bool { + 18,314 ( 0.01%) . . . self.0.literal + . . . . } + . . . . + . . . . /// Return true if and only if this HIR is either a simple literal or an + . . . . /// alternation of simple literals. This is only + . . . . /// true when this HIR expression is either itself a `Literal` or a + . . . . /// concatenation of only `Literal`s or an alternation of only `Literal`s. + . . . . /// + . . . . /// For example, `f`, `foo`, `a|b|c`, and `foo|bar|baz` are alternation + . . . . /// literals, but `f+`, `(foo)`, `foo()`, and the empty pattern are not + . . . . /// (even though that contain sub-expressions that are literals). + . . . . #[inline] + . . . . pub fn is_alternation_literal(&self) -> bool { + 3,560 ( 0.00%) . . . self.0.alternation_literal + . . . . } + . . . . + . . . . /// Returns the total amount of heap memory usage, in bytes, used by this + . . . . /// `Properties` value. + . . . . #[inline] + . . . . pub fn memory_usage(&self) -> usize { + . . . . core::mem::size_of::() + . . . . } +-- line 2226 ---------------------------------------- +-- line 2290 ---------------------------------------- + . . . . /// hir2.properties(), + . . . . /// hir3.properties(), + . . . . /// ]); + . . . . /// assert_eq!(Some(1), unioned.minimum_len()); + . . . . /// assert_eq!(None, unioned.maximum_len()); + . . . . /// + . . . . /// # Ok::<(), Box>(()) + . . . . /// ``` + 567 ( 0.00%) . . . pub fn union(props: I) -> Properties + . . . . where + . . . . I: IntoIterator, + . . . . P: core::borrow::Borrow, + . . . . { + . . . . let mut it = props.into_iter().peekable(); + . . . . // While empty alternations aren't possible, we still behave as if they + . . . . // are. When we have an empty alternate, then clearly the look-around + . . . . // prefix and suffix is empty. Otherwise, it is the intersection of all +-- line 2306 ---------------------------------------- +-- line 2339 ---------------------------------------- + . . . . // Handle properties that need to visit every child hir. + . . . . for prop in it { + . . . . let p = prop.borrow(); + . . . . props.look_set.set_union(p.look_set()); + . . . . props.look_set_prefix.set_intersect(p.look_set_prefix()); + . . . . props.look_set_suffix.set_intersect(p.look_set_suffix()); + . . . . props.look_set_prefix_any.set_union(p.look_set_prefix_any()); + . . . . props.look_set_suffix_any.set_union(p.look_set_suffix_any()); + 37,722 ( 0.01%) . . . props.utf8 = props.utf8 && p.is_utf8(); + . . . . props.explicit_captures_len = props + . . . . .explicit_captures_len + . . . . .saturating_add(p.explicit_captures_len()); + 53,115 ( 0.02%) . . . if props.static_explicit_captures_len + . . . . != p.static_explicit_captures_len() + . . . . { + . . . . props.static_explicit_captures_len = None; + . . . . } + . . . . props.alternation_literal = + 35,410 ( 0.01%) . . . props.alternation_literal && p.is_literal(); + 50,185 ( 0.01%) . . . if !min_poisoned { + 36,728 ( 0.01%) . . . if let Some(xmin) = p.minimum_len() { + 53,115 ( 0.02%) . . . if props.minimum_len.map_or(true, |pmin| xmin < pmin) { + . . . . props.minimum_len = Some(xmin); + . . . . } + . . . . } else { + . . . . props.minimum_len = None; + . . . . min_poisoned = true; + . . . . } + . . . . } + 35,410 ( 0.01%) . . . if !max_poisoned { + 36,720 ( 0.01%) . . . if let Some(xmax) = p.maximum_len() { + 53,100 ( 0.02%) . . . if props.maximum_len.map_or(true, |pmax| xmax > pmax) { + . . . . props.maximum_len = Some(xmax); + . . . . } + . . . . } else { + . . . . props.maximum_len = None; + . . . . max_poisoned = true; + . . . . } + . . . . } + . . . . } + . . . . Properties(Box::new(props)) + 648 ( 0.00%) . . . } + . . . . } + . . . . + . . . . impl Properties { + . . . . /// Create a new set of HIR properties for an empty regex. + . . . . fn empty() -> Properties { + . . . . let inner = PropertiesI { + . . . . minimum_len: Some(0), + . . . . maximum_len: Some(0), +-- line 2388 ---------------------------------------- +-- line 2413 ---------------------------------------- + . . . . static_explicit_captures_len: Some(0), + . . . . literal: false, + . . . . alternation_literal: false, + . . . . }; + . . . . Properties(Box::new(inner)) + . . . . } + . . . . + . . . . /// Create a new set of HIR properties for a literal regex. + 5,736 ( 0.00%) . . . fn literal(lit: &Literal) -> Properties { + . . . . let inner = PropertiesI { + 1,912 ( 0.00%) . . . minimum_len: Some(lit.0.len()), + . . . . maximum_len: Some(lit.0.len()), + . . . . look_set: LookSet::empty(), + . . . . look_set_prefix: LookSet::empty(), + . . . . look_set_suffix: LookSet::empty(), + . . . . look_set_prefix_any: LookSet::empty(), + . . . . look_set_suffix_any: LookSet::empty(), +122,622 ( 0.04%) . . . utf8: core::str::from_utf8(&lit.0).is_ok(), +855,130 ( 0.25%) . . . => /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/core/src/str/converts.rs:core::str::converts::from_utf8 (15,406x) + . . . . explicit_captures_len: 0, + . . . . static_explicit_captures_len: Some(0), + . . . . literal: true, + . . . . alternation_literal: true, + . . . . }; + . . . . Properties(Box::new(inner)) + 7,648 ( 0.00%) . . . } + . . . . + . . . . /// Create a new set of HIR properties for a character class. + 13,640 ( 0.00%) . . . fn class(class: &Class) -> Properties { + 440 ( 0.00%) . . . let inner = PropertiesI { + . . . . minimum_len: class.minimum_len(), + . . . . maximum_len: class.maximum_len(), + . . . . look_set: LookSet::empty(), + . . . . look_set_prefix: LookSet::empty(), + . . . . look_set_suffix: LookSet::empty(), + . . . . look_set_prefix_any: LookSet::empty(), + . . . . look_set_suffix_any: LookSet::empty(), + . . . . utf8: class.is_utf8(), + . . . . explicit_captures_len: 0, + . . . . static_explicit_captures_len: Some(0), + . . . . literal: false, + . . . . alternation_literal: false, + . . . . }; + . . . . Properties(Box::new(inner)) + 16,368 ( 0.00%) . . . } + . . . . + . . . . /// Create a new set of HIR properties for a look-around assertion. + 4 ( 0.00%) . . . fn look(look: Look) -> Properties { + . . . . let inner = PropertiesI { + . . . . minimum_len: Some(0), + . . . . maximum_len: Some(0), + . . . . look_set: LookSet::singleton(look), + . . . . look_set_prefix: LookSet::singleton(look), + . . . . look_set_suffix: LookSet::singleton(look), + . . . . look_set_prefix_any: LookSet::singleton(look), + . . . . look_set_suffix_any: LookSet::singleton(look), +-- line 2467 ---------------------------------------- +-- line 2480 ---------------------------------------- + . . . . // property borderline useless. + . . . . utf8: true, + . . . . explicit_captures_len: 0, + . . . . static_explicit_captures_len: Some(0), + . . . . literal: false, + . . . . alternation_literal: false, + . . . . }; + . . . . Properties(Box::new(inner)) + 4 ( 0.00%) . . . } + . . . . + . . . . /// Create a new set of HIR properties for a repetition. + 14,238 ( 0.00%) . . . fn repetition(rep: &Repetition) -> Properties { + 2,034 ( 0.00%) . . . let p = rep.sub.properties(); + 2,034 ( 0.00%) . . . let minimum_len = p.minimum_len().map(|child_min| { + . . . . let rep_min = usize::try_from(rep.min).unwrap_or(usize::MAX); + . . . . child_min.saturating_mul(rep_min) + . . . . }); + 3,981 ( 0.00%) . . . let maximum_len = rep.max.and_then(|rep_max| { + . . . . let rep_max = usize::try_from(rep_max).ok()?; + 1,947 ( 0.00%) . . . let child_max = p.maximum_len()?; + . . . . child_max.checked_mul(rep_max) + . . . . }); + . . . . + . . . . let mut inner = PropertiesI { + . . . . minimum_len, + . . . . maximum_len, + . . . . look_set: p.look_set(), + . . . . look_set_prefix: LookSet::empty(), +-- line 2507 ---------------------------------------- +-- line 2512 ---------------------------------------- + . . . . explicit_captures_len: p.explicit_captures_len(), + . . . . static_explicit_captures_len: p.static_explicit_captures_len(), + . . . . literal: false, + . . . . alternation_literal: false, + . . . . }; + . . . . // If the repetition operator can match the empty string, then its + . . . . // lookset prefix and suffixes themselves remain empty since they are + . . . . // no longer required to match. + 4,068 ( 0.00%) . . . if rep.min > 0 { + . . . . inner.look_set_prefix = p.look_set_prefix(); + . . . . inner.look_set_suffix = p.look_set_suffix(); + . . . . } + . . . . // If the static captures len of the sub-expression is not known or + . . . . // is greater than zero, then it automatically propagates to the + . . . . // repetition, regardless of the repetition. Otherwise, it might + . . . . // change, but only when the repetition can match 0 times. + 7,096 ( 0.00%) . . . if rep.min == 0 + . . . . && inner.static_explicit_captures_len.map_or(false, |len| len > 0) + . . . . { + . . . . // If we require a match 0 times, then our captures len is + . . . . // guaranteed to be zero. Otherwise, if we *can* match the empty + . . . . // string, then it's impossible to know how many captures will be + . . . . // in the resulting match. + . . . . if rep.max == Some(0) { + . . . . inner.static_explicit_captures_len = Some(0); + . . . . } else { + . . . . inner.static_explicit_captures_len = None; + . . . . } + . . . . } + . . . . Properties(Box::new(inner)) + 16,272 ( 0.00%) . . . } + . . . . + . . . . /// Create a new set of HIR properties for a capture. + 4,851 ( 0.00%) . . . fn capture(capture: &Capture) -> Properties { + 693 ( 0.00%) . . . let p = capture.sub.properties(); + . . . . Properties(Box::new(PropertiesI { + . . . . explicit_captures_len: p.explicit_captures_len().saturating_add(1), + . . . . static_explicit_captures_len: p + . . . . .static_explicit_captures_len() + . . . . .map(|len| len.saturating_add(1)), + . . . . literal: false, + . . . . alternation_literal: false, + . . . . ..*p.0.clone() + . . . . })) + 5,544 ( 0.00%) . . . } + . . . . + . . . . /// Create a new set of HIR properties for a concatenation. + . . . . fn concat(concat: &[Hir]) -> Properties { + . . . . // The base case is an empty concatenation, which matches the empty + . . . . // string. Note though that empty concatenations aren't possible, + . . . . // because the Hir::concat smart constructor rewrites those as + . . . . // Hir::empty. + . . . . let mut props = PropertiesI { +-- line 2564 ---------------------------------------- +-- line 2574 ---------------------------------------- + . . . . static_explicit_captures_len: Some(0), + . . . . literal: true, + . . . . alternation_literal: true, + . . . . }; + . . . . // Handle properties that need to visit every child hir. + . . . . for x in concat.iter() { + . . . . let p = x.properties(); + . . . . props.look_set.set_union(p.look_set()); + 46,661 ( 0.01%) . . . props.utf8 = props.utf8 && p.is_utf8(); + . . . . props.explicit_captures_len = props + . . . . .explicit_captures_len + . . . . .saturating_add(p.explicit_captures_len()); + . . . . props.static_explicit_captures_len = p + . . . . .static_explicit_captures_len() + . . . . .and_then(|len1| { + . . . . Some((len1, props.static_explicit_captures_len?)) + . . . . }) + . . . . .and_then(|(len1, len2)| Some(len1.saturating_add(len2))); + 13,438 ( 0.00%) . . . props.literal = props.literal && p.is_literal(); + . . . . props.alternation_literal = + 13,438 ( 0.00%) . . . props.alternation_literal && p.is_alternation_literal(); + 13,438 ( 0.00%) . . . if let Some(minimum_len) = props.minimum_len { + 13,438 ( 0.00%) . . . match p.minimum_len() { + . . . . None => props.minimum_len = None, + . . . . Some(len) => { + . . . . // We use saturating arithmetic here because the + . . . . // minimum is just a lower bound. We can't go any + . . . . // higher than what our number types permit. + . . . . props.minimum_len = + . . . . Some(minimum_len.saturating_add(len)); + . . . . } + . . . . } + . . . . } + 26,396 ( 0.01%) . . . if let Some(maximum_len) = props.maximum_len { + 12,478 ( 0.00%) . . . match p.maximum_len() { + . . . . None => props.maximum_len = None, + . . . . Some(len) => { + . . . . props.maximum_len = maximum_len.checked_add(len) + . . . . } + . . . . } + . . . . } + . . . . } + . . . . // Handle the prefix properties, which only requires visiting + . . . . // child exprs until one matches more than the empty string. + . . . . let mut it = concat.iter(); + . . . . while let Some(x) = it.next() { + . . . . props.look_set_prefix.set_union(x.properties().look_set_prefix()); + . . . . props + . . . . .look_set_prefix_any + . . . . .set_union(x.properties().look_set_prefix_any()); + 8,519 ( 0.00%) . . . if x.properties().maximum_len().map_or(true, |x| x > 0) { + . . . . break; + . . . . } + . . . . } + . . . . // Same thing for the suffix properties, but in reverse. + . . . . let mut it = concat.iter().rev(); + . . . . while let Some(x) = it.next() { + . . . . props.look_set_suffix.set_union(x.properties().look_set_suffix()); + . . . . props + . . . . .look_set_suffix_any + . . . . .set_union(x.properties().look_set_suffix_any()); + 8,277 ( 0.00%) . . . if x.properties().maximum_len().map_or(true, |x| x > 0) { + . . . . break; + . . . . } + . . . . } + . . . . Properties(Box::new(props)) + . . . . } + . . . . + . . . . /// Create a new set of HIR properties for a concatenation. + 4,046 ( 0.00%) . . . fn alternation(alts: &[Hir]) -> Properties { + . . . . Properties::union(alts.iter().map(|hir| hir.properties())) + 4,624 ( 0.00%) . . . } + . . . . } + . . . . + . . . . /// A set of look-around assertions. + . . . . /// + . . . . /// This is useful for efficiently tracking look-around assertions. For + . . . . /// example, an [`Hir`] provides properties that return `LookSet`s. + 1,548 ( 0.00%) . . . #[derive(Clone, Copy, Default, Eq, PartialEq)] + . . . . pub struct LookSet { + . . . . /// The underlying representation this set is exposed to make it possible + . . . . /// to store it somewhere efficiently. The representation is that + . . . . /// of a bitset, where each assertion occupies bit `i` where `i = + . . . . /// Look::as_repr()`. + . . . . /// + . . . . /// Note that users of this internal representation must permit the full + . . . . /// range of `u16` values to be represented. For example, even if the + . . . . /// current implementation only makes use of the 10 least significant bits, + . . . . /// it may use more bits in a future semver compatible release. + 580 ( 0.00%) . . . pub bits: u32, + . . . . } + . . . . + . . . . impl LookSet { + . . . . /// Create an empty set of look-around assertions. + . . . . #[inline] + . . . . pub fn empty() -> LookSet { + . . . . LookSet { bits: 0 } + . . . . } +-- line 2671 ---------------------------------------- +-- line 2693 ---------------------------------------- + . . . . // OK because max value always fits in a u8, which in turn always + . . . . // fits in a usize, regardless of target. + . . . . usize::try_from(self.bits.count_ones()).unwrap() + . . . . } + . . . . + . . . . /// Returns true if and only if this set is empty. + . . . . #[inline] + . . . . pub fn is_empty(self) -> bool { + 16 ( 0.00%) . . . self.len() == 0 + . . . . } + . . . . + . . . . /// Returns true if and only if the given look-around assertion is in this + . . . . /// set. + . . . . #[inline] + . . . . pub fn contains(self, look: Look) -> bool { + 300 ( 0.00%) . . . self.bits & look.as_repr() != 0 + . . . . } + . . . . + . . . . /// Returns true if and only if this set contains any anchor assertions. + . . . . /// This includes both "start/end of haystack" and "start/end of line." + . . . . #[inline] + . . . . pub fn contains_anchor(&self) -> bool { + . . . . self.contains_anchor_haystack() || self.contains_anchor_line() + . . . . } +-- line 2716 ---------------------------------------- +-- line 2829 ---------------------------------------- + . . . . #[inline] + . . . . pub fn set_subtract(&mut self, other: LookSet) { + . . . . *self = self.subtract(other); + . . . . } + . . . . + . . . . /// Returns a new set that is the union of this and the one given. + . . . . #[inline] + . . . . pub fn union(self, other: LookSet) -> LookSet { + 8,422 ( 0.00%) . . . LookSet { bits: self.bits | other.bits } + . . . . } + . . . . + . . . . /// Updates this set in place with the result of unioning it with the one + . . . . /// given. + . . . . #[inline] + . . . . pub fn set_union(&mut self, other: LookSet) { + . . . . *self = self.union(other); + . . . . } +-- line 2845 ---------------------------------------- +-- line 2923 ---------------------------------------- + . . . . } + . . . . + . . . . /// Given a sequence of HIR values where each value corresponds to a Unicode + . . . . /// class (or an all-ASCII byte class), return a single Unicode class + . . . . /// corresponding to the union of the classes found. + . . . . fn class_chars(hirs: &[Hir]) -> Option { + . . . . let mut cls = ClassUnicode::new(vec![]); + . . . . for hir in hirs.iter() { + 3,816 ( 0.00%) . . . match *hir.kind() { + . . . . HirKind::Class(Class::Unicode(ref cls2)) => { + . . . . cls.union(cls2); + . . . . } + . . . . HirKind::Class(Class::Bytes(ref cls2)) => { + . . . . cls.union(&cls2.to_unicode_class()?); + . . . . } + . . . . _ => return None, + . . . . }; +-- line 2939 ---------------------------------------- +-- line 2942 ---------------------------------------- + . . . . } + . . . . + . . . . /// Given a sequence of HIR values where each value corresponds to a byte class + . . . . /// (or an all-ASCII Unicode class), return a single byte class corresponding + . . . . /// to the union of the classes found. + . . . . fn class_bytes(hirs: &[Hir]) -> Option { + . . . . let mut cls = ClassBytes::new(vec![]); + . . . . for hir in hirs.iter() { + 4,003 ( 0.00%) . . . match *hir.kind() { + . . . . HirKind::Class(Class::Unicode(ref cls2)) => { + 1 ( 0.00%) . . . cls.union(&cls2.to_byte_class()?); + . . . . } + . . . . HirKind::Class(Class::Bytes(ref cls2)) => { + . . . . cls.union(cls2); + . . . . } + . . . . _ => return None, + . . . . }; + . . . . } + . . . . Some(Class::Bytes(cls)) +-- line 2960 ---------------------------------------- +-- line 2961 ---------------------------------------- + . . . . } + . . . . + . . . . /// Given a sequence of HIR values where each value corresponds to a literal + . . . . /// that is a single `char`, return that sequence of `char`s. Otherwise return + . . . . /// None. No deduplication is done. + . . . . fn singleton_chars(hirs: &[Hir]) -> Option> { + . . . . let mut singletons = vec![]; + . . . . for hir in hirs.iter() { + 4,146 ( 0.00%) . . . let literal = match *hir.kind() { + . . . . HirKind::Literal(Literal(ref bytes)) => bytes, + . . . . _ => return None, + . . . . }; + 4,590 ( 0.00%) . . . let ch = match crate::debug::utf8_decode(literal) { + 7,718 ( 0.00%) . . . => /home/.cargo/registry/src/index.crates.io-6f17d22bba15001f/regex-syntax-0.8.2/src/debug.rs:regex_syntax::debug::utf8_decode (454x) + . . . . None => return None, + . . . . Some(Err(_)) => return None, + . . . . Some(Ok(ch)) => ch, + . . . . }; + 918 ( 0.00%) . . . if literal.len() != ch.len_utf8() { + . . . . return None; + . . . . } + . . . . singletons.push(ch); + . . . . } + 1 ( 0.00%) . . . Some(singletons) + . . . . } + . . . . + . . . . /// Given a sequence of HIR values where each value corresponds to a literal + . . . . /// that is a single byte, return that sequence of bytes. Otherwise return + . . . . /// None. No deduplication is done. + . . . . fn singleton_bytes(hirs: &[Hir]) -> Option> { + . . . . let mut singletons = vec![]; + . . . . for hir in hirs.iter() { + 4,710 ( 0.00%) . . . let literal = match *hir.kind() { + . . . . HirKind::Literal(Literal(ref bytes)) => bytes, + . . . . _ => return None, + . . . . }; + 908 ( 0.00%) . . . if literal.len() != 1 { + . . . . return None; + . . . . } + 78 ( 0.00%) . . . singletons.push(literal[0]); + . . . . } + . . . . Some(singletons) + . . . . } + . . . . + . . . . /// Looks for a common prefix in the list of alternation branches given. If one + . . . . /// is found, then an equivalent but (hopefully) simplified Hir is returned. + . . . . /// Otherwise, the original given list of branches is returned unmodified. + . . . . /// + . . . . /// This is not quite as good as it could be. Right now, it requires that + . . . . /// all branches are 'Concat' expressions. It also doesn't do well with + . . . . /// literals. For example, given 'foofoo|foobar', it will not refactor it to + . . . . /// 'foo(?:foo|bar)' because literals are flattened into their own special + . . . . /// concatenation. (One wonders if perhaps 'Literal' should be a single atom + . . . . /// instead of a string of bytes because of this. Otherwise, handling the + . . . . /// current representation in this routine will be pretty gnarly. Sigh.) + 4,632 ( 0.00%) . . . fn lift_common_prefix(hirs: Vec) -> Result> { + 1,158 ( 0.00%) . . . if hirs.len() <= 1 { + . . . . return Err(hirs); + . . . . } + 1,737 ( 0.00%) . . . let mut prefix = match hirs[0].kind() { + . . . . HirKind::Concat(ref xs) => &**xs, + . . . . _ => return Err(hirs), + . . . . }; + 206 ( 0.00%) . . . if prefix.is_empty() { + . . . . return Err(hirs); + . . . . } + . . . . for h in hirs.iter().skip(1) { + 232 ( 0.00%) . . . let concat = match h.kind() { + . . . . HirKind::Concat(ref xs) => xs, + . . . . _ => return Err(hirs), + . . . . }; + . . . . let common_len = prefix + . . . . .iter() + . . . . .zip(concat.iter()) + . . . . .take_while(|(x, y)| x == y) + . . . . .count(); + . . . . prefix = &prefix[..common_len]; + 48 ( 0.00%) . . . if prefix.is_empty() { + . . . . return Err(hirs); + . . . . } + . . . . } + . . . . let len = prefix.len(); + . . . . assert_ne!(0, len); + . . . . let mut prefix_concat = vec![]; + . . . . let mut suffix_alts = vec![]; + 40 ( 0.00%) . . . for h in hirs { + 10 ( 0.00%) . . . let mut concat = match h.into_kind() { + . . . . HirKind::Concat(xs) => xs, + . . . . // We required all sub-expressions to be + . . . . // concats above, so we're only here if we + . . . . // have a concat. + . . . . _ => unreachable!(), + . . . . }; + 15 ( 0.00%) . . . suffix_alts.push(Hir::concat(concat.split_off(len))); + 5,492 ( 0.00%) . . . => /home/.cargo/registry/src/index.crates.io-6f17d22bba15001f/regex-syntax-0.8.2/src/hir/mod.rs:regex_syntax::hir::Hir::concat (5x) + 9 ( 0.00%) . . . if prefix_concat.is_empty() { + . . . . prefix_concat = concat; + . . . . } + . . . . } + 3 ( 0.00%) . . . let mut concat = prefix_concat; + 8 ( 0.00%) . . . concat.push(Hir::alternation(suffix_alts)); + 4,832 ( 0.00%) . . . => /home/.cargo/registry/src/index.crates.io-6f17d22bba15001f/regex-syntax-0.8.2/src/hir/mod.rs:regex_syntax::hir::Hir::alternation'2 (1x) + 7 ( 0.00%) . . . Ok(Hir::concat(concat)) + 1,040 ( 0.00%) . . . => /home/.cargo/registry/src/index.crates.io-6f17d22bba15001f/regex-syntax-0.8.2/src/hir/mod.rs:regex_syntax::hir::Hir::concat (1x) + 4,632 ( 0.00%) . . . } + . . . . + . . . . #[cfg(test)] + . . . . mod tests { + . . . . use super::*; + . . . . + . . . . fn uclass(ranges: &[(char, char)]) -> ClassUnicode { + . . . . let ranges: Vec = ranges + . . . . .iter() +-- line 3069 ---------------------------------------- + +656,469 ( 0.19%) . . . + +-------------------------------------------------------------------------------- +-- Auto-annotated source: /home/.cargo/registry/src/index.crates.io-6f17d22bba15001f/regex-syntax-0.8.2/src/lib.rs +-------------------------------------------------------------------------------- +Ir Ge sysCount sysTime + +-- line 252 ---------------------------------------- + . . . . /// assert!(is_meta_character('#')); + . . . . /// + . . . . /// assert!(!is_meta_character('%')); + . . . . /// assert!(!is_meta_character('/')); + . . . . /// assert!(!is_meta_character('!')); + . . . . /// assert!(!is_meta_character('"')); + . . . . /// assert!(!is_meta_character('e')); + . . . . /// ``` +1,607 ( 0.00%) . . . pub fn is_meta_character(c: char) -> bool { +4,821 ( 0.00%) . . . match c { + . . . . '\\' | '.' | '+' | '*' | '?' | '(' | ')' | '|' | '[' | ']' | '{' + . . . . | '}' | '^' | '$' | '#' | '&' | '-' | '~' => true, + . . . . _ => false, + . . . . } +1,607 ( 0.00%) . . . } + . . . . + . . . . /// Returns true if the given character can be escaped in a regex. + . . . . /// + . . . . /// This returns true in all cases that `is_meta_character` returns true, but + . . . . /// also returns true in some cases where `is_meta_character` returns false. + . . . . /// For example, `%` is not a meta character, but it is escapeable. That is, + . . . . /// `%` and `\%` both match a literal `%` in all contexts. + . . . . /// +-- line 274 ---------------------------------------- +-- line 302 ---------------------------------------- + . . . . /// ``` + . . . . pub fn is_escapeable_character(c: char) -> bool { + . . . . // Certainly escapeable if it's a meta character. + . . . . if is_meta_character(c) { + . . . . return true; + . . . . } + . . . . // Any character that isn't ASCII is definitely not escapeable. There's + . . . . // no real need to allow things like \☃ right? + 1 ( 0.00%) . . . if !c.is_ascii() { + . . . . return false; + . . . . } + . . . . // Otherwise, we basically say that everything is escapeable unless it's a + . . . . // letter or digit. Things like \3 are either octal (when enabled) or an + . . . . // error, and we should keep it that way. Otherwise, letters are reserved + . . . . // for adding new syntax in a backwards compatible way. + . . . . match c { + 9 ( 0.00%) . . . '0'..='9' | 'A'..='Z' | 'a'..='z' => false, + . . . . // While not currently supported, we keep these as not escapeable to + . . . . // give us some flexibility with respect to supporting the \< and + . . . . // \> word boundary assertions in the future. By rejecting them as + . . . . // escapeable, \< and \> will result in a parse error. Thus, we can + . . . . // turn them into something else in the future without it being a + . . . . // backwards incompatible change. + . . . . // + . . . . // OK, now we support \< and \>, and we need to retain them as *not* +-- line 326 ---------------------------------------- + +8,037 ( 0.00%) . . . + +-------------------------------------------------------------------------------- +-- Auto-annotated source: /home/.cargo/registry/src/index.crates.io-6f17d22bba15001f/regex-automata-0.4.6/src/nfa/thompson/builder.rs +-------------------------------------------------------------------------------- +Ir Ge sysCount sysTime + +-- line 126 ---------------------------------------- + . . . . /// to the pattern's index (starting at 0). + . . . . Match { pattern_id: PatternID }, + . . . . } + . . . . + . . . . impl State { + . . . . /// If this state is an unconditional epsilon transition, then this returns + . . . . /// the target of the transition. + . . . . fn goto(&self) -> Option { + 366,650 ( 0.11%) . . . match *self { + 5,208 ( 0.00%) . . . State::Empty { next } => Some(next), + . . . . State::Union { ref alternates } if alternates.len() == 1 => { + . . . . Some(alternates[0]) + . . . . } + . . . . State::UnionReverse { ref alternates } + . . . . if alternates.len() == 1 => + . . . . { + . . . . Some(alternates[0]) + . . . . } +-- line 143 ---------------------------------------- +-- line 151 ---------------------------------------- + . . . . State::Empty { .. } + . . . . | State::ByteRange { .. } + . . . . | State::Look { .. } + . . . . | State::CaptureStart { .. } + . . . . | State::CaptureEnd { .. } + . . . . | State::Fail + . . . . | State::Match { .. } => 0, + . . . . State::Sparse { ref transitions } => { + 13,263 ( 0.00%) . . . transitions.len() * mem::size_of::() + . . . . } + . . . . State::Union { ref alternates } => { + . . . . alternates.len() * mem::size_of::() + . . . . } + . . . . State::UnionReverse { ref alternates } => { + . . . . alternates.len() * mem::size_of::() + . . . . } + . . . . } +-- line 167 ---------------------------------------- +-- line 304 ---------------------------------------- + . . . . /// let mut cache = re.create_cache(); + . . . . /// let mut caps = re.create_captures(); + . . . . /// let expected = Some(Match::must(0, 0..3)); + . . . . /// re.captures(&mut cache, "foo0", &mut caps); + . . . . /// assert_eq!(expected, caps.get_match()); + . . . . /// + . . . . /// # Ok::<(), Box>(()) + . . . . /// ``` + 3,370 ( 0.00%) . . . #[derive(Clone, Debug, Default)] + . . . . pub struct Builder { + . . . . /// The ID of the pattern that we're currently building. + . . . . /// + . . . . /// Callers are required to set (and unset) this by calling + . . . . /// {start,finish}_pattern. Otherwise, most methods will panic. + . . . . pattern_id: Option, + . . . . /// A sequence of intermediate NFA states. Once a state is added to this + . . . . /// sequence, it is assigned a state ID equivalent to its index. Once a +-- line 320 ---------------------------------------- +-- line 363 ---------------------------------------- + . . . . } + . . . . + . . . . /// Clear this builder. + . . . . /// + . . . . /// Clearing removes all state associated with building an NFA, but does + . . . . /// not reset configuration (such as size limits and whether the NFA + . . . . /// should only match UTF-8). After clearing, the builder can be reused to + . . . . /// assemble an entirely new NFA. + 1,400 ( 0.00%) . . . pub fn clear(&mut self) { + 175 ( 0.00%) . . . self.pattern_id = None; + . . . . self.states.clear(); + . . . . self.start_pattern.clear(); + . . . . self.captures.clear(); + 175 ( 0.00%) . . . self.memory_states = 0; + 1,400 ( 0.00%) . . . } + . . . . + . . . . /// Assemble a [`NFA`] from the states added so far. + . . . . /// + . . . . /// After building an NFA, more states may be added and `build` may be + . . . . /// called again. To reuse a builder to produce an entirely new NFA from + . . . . /// scratch, call the [`clear`](Builder::clear) method first. + . . . . /// + . . . . /// `start_anchored` refers to the ID of the starting state that anchored +-- line 385 ---------------------------------------- +-- line 402 ---------------------------------------- + . . . . /// # Panics + . . . . /// + . . . . /// If `start_pattern` was called, then `finish_pattern` must be called + . . . . /// before `build`, otherwise this panics. + . . . . /// + . . . . /// This may panic for other invalid uses of a builder. For example, if + . . . . /// a "start capture" state was added without a corresponding "end capture" + . . . . /// state. + 1,400 ( 0.00%) . . . pub fn build( + . . . . &self, + . . . . start_anchored: StateID, + . . . . start_unanchored: StateID, + . . . . ) -> Result { + 175 ( 0.00%) . . . assert!(self.pattern_id.is_none(), "must call 'finish_pattern' first"); + . . . . debug!( + . . . . "intermediate NFA compilation via builder is complete, \ + . . . . intermediate NFA size: {} states, {} bytes on heap", + . . . . self.states.len(), + . . . . self.memory_usage(), + . . . . ); + . . . . + . . . . let mut nfa = nfa::Inner::default(); + 175 ( 0.00%) . . . nfa.set_utf8(self.utf8); + 175 ( 0.00%) . . . nfa.set_reverse(self.reverse); + . . . . nfa.set_look_matcher(self.look_matcher.clone()); + . . . . // A set of compiler internal state IDs that correspond to states + . . . . // that are exclusively epsilon transitions, i.e., goto instructions, + . . . . // combined with the state that they point to. This is used to + . . . . // record said states while transforming the compiler's internal NFA + . . . . // representation to the external form. + . . . . let mut empties = vec![]; + . . . . // A map used to re-map state IDs when translating this builder's +-- line 433 ---------------------------------------- +-- line 437 ---------------------------------------- + . . . . + . . . . nfa.set_starts(start_anchored, start_unanchored, &self.start_pattern); + . . . . nfa.set_captures(&self.captures).map_err(BuildError::captures)?; + . . . . // The idea here is to convert our intermediate states to their final + . . . . // form. The only real complexity here is the process of converting + . . . . // transitions, which are expressed in terms of state IDs. The new + . . . . // set of states will be smaller because of partial epsilon removal, + . . . . // so the state IDs will not be the same. + 175 ( 0.00%) . . . for (sid, state) in self.states.iter().with_state_ids() { + 445,860 ( 0.13%) . . . match *state { + 10,258 ( 0.00%) . . . State::Empty { next } => { + . . . . // Since we're removing empty states, we need to handle + . . . . // them later since we don't yet know which new state this + . . . . // empty state will be mapped to. + . . . . empties.push((sid, next)); + . . . . } + 42,490 ( 0.01%) . . . State::ByteRange { trans } => { + 212,450 ( 0.06%) . . . remap[sid] = nfa.add(nfa::State::ByteRange { trans }); +4,108,097 ( 1.19%) 2,036 ( 0.25%) 6 ( 1.94%) . => /home/.cargo/registry/src/index.crates.io-6f17d22bba15001f/regex-automata-0.4.6/src/nfa/thompson/nfa.rs:regex_automata::nfa::thompson::nfa::Inner::add (42,490x) + . . . . } + . . . . State::Sparse { ref transitions } => { + 53,052 ( 0.02%) . . . remap[sid] = match transitions.len() { + . . . . 0 => nfa.add(nfa::State::Fail), + 8,622 ( 0.00%) . . . 1 => nfa.add(nfa::State::ByteRange { + 5,748 ( 0.00%) . . . trans: transitions[0], + . . . . }), + . . . . _ => { + . . . . let transitions = + 41,556 ( 0.01%) . . . transitions.to_vec().into_boxed_slice(); + . . . . let sparse = SparseTransitions { transitions }; + 31,167 ( 0.01%) . . . nfa.add(nfa::State::Sparse(sparse)) + . . . . } + . . . . } + . . . . } + 245 ( 0.00%) . . . State::Look { look, next } => { + 1,225 ( 0.00%) . . . remap[sid] = nfa.add(nfa::State::Look { look, next }); + 41,774 ( 0.01%) 32 ( 0.00%) . . => /home/.cargo/registry/src/index.crates.io-6f17d22bba15001f/regex-automata-0.4.6/src/nfa/thompson/nfa.rs:regex_automata::nfa::thompson::nfa::Inner::add (245x) + . . . . } + 774 ( 0.00%) . . . State::CaptureStart { pattern_id, group_index, next } => { + . . . . // We can't remove this empty state because of the side + . . . . // effect of capturing an offset for this capture slot. + 774 ( 0.00%) . . . let slot = nfa + . . . . .group_info() + . . . . .slot(pattern_id, group_index.as_usize()) + . . . . .expect("invalid capture index"); + . . . . let slot = + . . . . SmallIndex::new(slot).expect("a small enough slot"); + 6,192 ( 0.00%) . . . remap[sid] = nfa.add(nfa::State::Capture { + 54,438 ( 0.02%) 40 ( 0.00%) . . => /home/.cargo/registry/src/index.crates.io-6f17d22bba15001f/regex-automata-0.4.6/src/nfa/thompson/nfa.rs:regex_automata::nfa::thompson::nfa::Inner::add (774x) + . . . . next, + . . . . pattern_id, + . . . . group_index, + . . . . slot, + . . . . }); + . . . . } + 774 ( 0.00%) . . . State::CaptureEnd { pattern_id, group_index, next } => { + . . . . // We can't remove this empty state because of the side + . . . . // effect of capturing an offset for this capture slot. + . . . . // Also, this always succeeds because we check that all + . . . . // slot indices are valid for all capture indices when they + . . . . // are initially added. + 774 ( 0.00%) . . . let slot = nfa + . . . . .group_info() + . . . . .slot(pattern_id, group_index.as_usize()) + . . . . .expect("invalid capture index") + . . . . .checked_add(1) + . . . . .unwrap(); + . . . . let slot = + . . . . SmallIndex::new(slot).expect("a small enough slot"); + 6,192 ( 0.00%) . . . remap[sid] = nfa.add(nfa::State::Capture { + 46,368 ( 0.01%) 66 ( 0.01%) . . => /home/.cargo/registry/src/index.crates.io-6f17d22bba15001f/regex-automata-0.4.6/src/nfa/thompson/nfa.rs:regex_automata::nfa::thompson::nfa::Inner::add (774x) + . . . . next, + . . . . pattern_id, + . . . . group_index, + . . . . slot, + . . . . }); + . . . . } + . . . . State::Union { ref alternates } => { + 97,328 ( 0.03%) . . . if alternates.is_empty() { + . . . . remap[sid] = nfa.add(nfa::State::Fail); + . . . . } else if alternates.len() == 1 { + 29,170 ( 0.01%) . . . empties.push((sid, alternates[0])); + . . . . remap[sid] = alternates[0]; + . . . . } else if alternates.len() == 2 { + 25,190 ( 0.01%) . . . remap[sid] = nfa.add(nfa::State::BinaryUnion { + 325,253 ( 0.09%) 506 ( 0.06%) 1 ( 0.32%) . => /home/.cargo/registry/src/index.crates.io-6f17d22bba15001f/regex-automata-0.4.6/src/nfa/thompson/nfa.rs:regex_automata::nfa::thompson::nfa::Inner::add (5,038x) + 10,076 ( 0.00%) . . . alt1: alternates[0], + . . . . alt2: alternates[1], + . . . . }); + . . . . } else { + . . . . let alternates = + 5,840 ( 0.00%) . . . alternates.to_vec().into_boxed_slice(); + 8,760 ( 0.00%) . . . remap[sid] = nfa.add(nfa::State::Union { alternates }); + 109,527 ( 0.03%) 90 ( 0.01%) . . => /home/.cargo/registry/src/index.crates.io-6f17d22bba15001f/regex-automata-0.4.6/src/nfa/thompson/nfa.rs:regex_automata::nfa::thompson::nfa::Inner::add (1,460x) + . . . . } + . . . . } + . . . . State::UnionReverse { ref alternates } => { + 660 ( 0.00%) . . . if alternates.is_empty() { + . . . . remap[sid] = nfa.add(nfa::State::Fail); + . . . . } else if alternates.len() == 1 { + . . . . empties.push((sid, alternates[0])); + . . . . remap[sid] = alternates[0]; + . . . . } else if alternates.len() == 2 { + 660 ( 0.00%) . . . remap[sid] = nfa.add(nfa::State::BinaryUnion { + 18,301 ( 0.01%) 2 ( 0.00%) . . => /home/.cargo/registry/src/index.crates.io-6f17d22bba15001f/regex-automata-0.4.6/src/nfa/thompson/nfa.rs:regex_automata::nfa::thompson::nfa::Inner::add (110x) + 110 ( 0.00%) . . . alt1: alternates[1], + 110 ( 0.00%) . . . alt2: alternates[0], + . . . . }); + . . . . } else { + . . . . let mut alternates = + . . . . alternates.to_vec().into_boxed_slice(); + . . . . alternates.reverse(); + . . . . remap[sid] = nfa.add(nfa::State::Union { alternates }); + . . . . } + . . . . } + . . . . State::Fail => { + . . . . remap[sid] = nfa.add(nfa::State::Fail); + . . . . } + 175 ( 0.00%) . . . State::Match { pattern_id } => { + 875 ( 0.00%) . . . remap[sid] = nfa.add(nfa::State::Match { pattern_id }); + 9,165 ( 0.00%) 2 ( 0.00%) . . => /home/.cargo/registry/src/index.crates.io-6f17d22bba15001f/regex-automata-0.4.6/src/nfa/thompson/nfa.rs:regex_automata::nfa::thompson::nfa::Inner::add (175x) + . . . . } + . . . . } + . . . . } + . . . . // Some of the new states still point to empty state IDs, so we need to + . . . . // follow each of them and remap the empty state IDs to their non-empty + . . . . // state IDs. + . . . . // + . . . . // We also keep track of which states we've already mapped. This helps + . . . . // avoid quadratic behavior in a long chain of empty states. For + . . . . // example, in 'a{0}{50000}'. + . . . . let mut remapped = vec![false; self.states.len()]; + 24,843 ( 0.01%) . . . for &(empty_id, empty_next) in empties.iter() { + 49,686 ( 0.01%) . . . if remapped[empty_id] { + . . . . continue; + . . . . } + . . . . // empty states can point to other empty states, forming a chain. + . . . . // So we must follow the chain until the end, which must end at + . . . . // a non-empty state, and therefore, a state that is correctly + . . . . // remapped. We are guaranteed to terminate because our compiler + . . . . // never builds a loop among only empty states. + . . . . let mut new_next = empty_next; + . . . . while let Some(next) = self.states[new_next].goto() { + . . . . new_next = next; + . . . . } + 47,708 ( 0.01%) . . . remap[empty_id] = remap[new_next]; + 71,562 ( 0.02%) . . . remapped[empty_id] = true; + . . . . + . . . . // Now that we've remapped the main 'empty_id' above, we re-follow + . . . . // the chain from above and remap every empty state we found along + . . . . // the way to our ultimate non-empty target. We are careful to set + . . . . // 'remapped' to true for each such state. We thus will not need + . . . . // to re-compute this chain for any subsequent empty states in + . . . . // 'empties' that are part of this chain. + . . . . let mut next2 = empty_next; + . . . . while let Some(next) = self.states[next2].goto() { + 5,694 ( 0.00%) . . . remap[next2] = remap[new_next]; + 2,847 ( 0.00%) . . . remapped[next2] = true; + . . . . next2 = next; + . . . . } + . . . . } + . . . . // Finally remap all of the state IDs. + 700 ( 0.00%) . . . nfa.remap(&remap); +1,235,032 ( 0.36%) . . . => /home/.cargo/registry/src/index.crates.io-6f17d22bba15001f/regex-automata-0.4.6/src/nfa/thompson/nfa.rs:regex_automata::nfa::thompson::nfa::Inner::remap (175x) + 1,050 ( 0.00%) . . . let final_nfa = nfa.into_nfa(); +1,560,608 ( 0.45%) 1,238 ( 0.15%) . . => /home/.cargo/registry/src/index.crates.io-6f17d22bba15001f/regex-automata-0.4.6/src/nfa/thompson/nfa.rs:regex_automata::nfa::thompson::nfa::Inner::into_nfa (175x) + 11,375 ( 0.00%) . . . => ./string/../sysdeps/x86_64/multiarch/memmove-vec-unaligned-erms.S:__memcpy_avx_unaligned_erms (175x) + . . . . debug!( + . . . . "NFA compilation via builder complete, \ + . . . . final NFA size: {} states, {} bytes on heap, \ + . . . . has empty? {:?}, utf8? {:?}", + . . . . final_nfa.states().len(), + . . . . final_nfa.memory_usage(), + . . . . final_nfa.has_empty(), + . . . . final_nfa.is_utf8(), + . . . . ); + 350 ( 0.00%) . . . Ok(final_nfa) + 1,575 ( 0.00%) . . . } + . . . . + . . . . /// Start the assembly of a pattern in this NFA. + . . . . /// + . . . . /// Upon success, this returns the identifier for the new pattern. + . . . . /// Identifiers start at `0` and are incremented by 1 for each new pattern. + . . . . /// + . . . . /// It is necessary to call this routine before adding capturing states. + . . . . /// Otherwise, any other NFA state may be added before starting a pattern. +-- line 611 ---------------------------------------- +-- line 615 ---------------------------------------- + . . . . /// If the pattern identifier space is exhausted, then this returns an + . . . . /// error. + . . . . /// + . . . . /// # Panics + . . . . /// + . . . . /// If this is called while assembling another pattern (i.e., before + . . . . /// `finish_pattern` is called), then this panics. + . . . . pub fn start_pattern(&mut self) -> Result { + 175 ( 0.00%) . . . assert!(self.pattern_id.is_none(), "must call 'finish_pattern' first"); + . . . . + . . . . let proposed = self.start_pattern.len(); + . . . . let pid = PatternID::new(proposed) + . . . . .map_err(|_| BuildError::too_many_patterns(proposed))?; + 350 ( 0.00%) . . . self.pattern_id = Some(pid); + . . . . // This gets filled in when 'finish_pattern' is called. + . . . . self.start_pattern.push(StateID::ZERO); + . . . . Ok(pid) + . . . . } + . . . . + . . . . /// Finish the assembly of a pattern in this NFA. + . . . . /// + . . . . /// Upon success, this returns the identifier for the new pattern. +-- line 636 ---------------------------------------- +-- line 650 ---------------------------------------- + . . . . /// + . . . . /// If this is called without a corresponding `start_pattern` call, then + . . . . /// this panics. + . . . . pub fn finish_pattern( + . . . . &mut self, + . . . . start_id: StateID, + . . . . ) -> Result { + . . . . let pid = self.current_pattern_id(); + 175 ( 0.00%) . . . self.start_pattern[pid] = start_id; + 175 ( 0.00%) . . . self.pattern_id = None; + . . . . Ok(pid) + . . . . } + . . . . + . . . . /// Returns the pattern identifier of the current pattern. + . . . . /// + . . . . /// # Panics + . . . . /// + . . . . /// If this doesn't occur after a `start_pattern` call and before the + . . . . /// corresponding `finish_pattern` call, then this panics. + . . . . pub fn current_pattern_id(&self) -> PatternID { + 1,124 ( 0.00%) . . . self.pattern_id.expect("must call 'start_pattern' first") + . . . . } + . . . . + . . . . /// Returns the number of patterns added to this builder so far. + . . . . /// + . . . . /// This only includes patterns that have had `finish_pattern` called + . . . . /// for them. + . . . . pub fn pattern_len(&self) -> usize { + . . . . self.start_pattern.len() +-- line 678 ---------------------------------------- +-- line 685 ---------------------------------------- + . . . . /// building the final [`NFA`] (which has no such "empty" states), but they + . . . . /// can be quite useful in the construction process of an NFA. + . . . . /// + . . . . /// # Errors + . . . . /// + . . . . /// This returns an error if the state identifier space is exhausted, or if + . . . . /// the configured heap size limit has been exceeded. + . . . . pub fn add_empty(&mut self) -> Result { + 51,229 ( 0.01%) . . . self.add(State::Empty { next: StateID::ZERO }) + 14,889 ( 0.00%) 44 ( 0.01%) . . => /home/.cargo/registry/src/index.crates.io-6f17d22bba15001f/regex-automata-0.4.6/src/nfa/thompson/builder.rs:regex_automata::nfa::thompson::builder::Builder::add (65x) + . . . . } + . . . . + . . . . /// Add a "union" NFA state. + . . . . /// + . . . . /// A "union" NFA state that contains zero or more unconditional epsilon + . . . . /// transitions to other NFA states. The order of these transitions + . . . . /// reflects a priority order where earlier transitions are preferred over + . . . . /// later transitions. +-- line 701 ---------------------------------------- +-- line 709 ---------------------------------------- + . . . . /// # Errors + . . . . /// + . . . . /// This returns an error if the state identifier space is exhausted, or if + . . . . /// the configured heap size limit has been exceeded. + . . . . pub fn add_union( + . . . . &mut self, + . . . . alternates: Vec, + . . . . ) -> Result { + 107,413 ( 0.03%) . . . self.add(State::Union { alternates }) + 40,399 ( 0.01%) 84 ( 0.01%) . . => /home/.cargo/registry/src/index.crates.io-6f17d22bba15001f/regex-automata-0.4.6/src/nfa/thompson/builder.rs:regex_automata::nfa::thompson::builder::Builder::add (539x) + . . . . } + . . . . + . . . . /// Add a "reverse union" NFA state. + . . . . /// + . . . . /// A "reverse union" NFA state contains zero or more unconditional epsilon + . . . . /// transitions to other NFA states. The order of these transitions + . . . . /// reflects a priority order where later transitions are preferred + . . . . /// over earlier transitions. This is an inverted priority order when +-- line 725 ---------------------------------------- +-- line 735 ---------------------------------------- + . . . . /// # Errors + . . . . /// + . . . . /// This returns an error if the state identifier space is exhausted, or if + . . . . /// the configured heap size limit has been exceeded. + . . . . pub fn add_union_reverse( + . . . . &mut self, + . . . . alternates: Vec, + . . . . ) -> Result { + 440 ( 0.00%) . . . self.add(State::UnionReverse { alternates }) + . . . . } + . . . . + . . . . /// Add a "range" NFA state. + . . . . /// + . . . . /// A "range" NFA state is a state with one outgoing transition to another + . . . . /// state, where that transition may only be followed if the current input + . . . . /// byte falls between a range of bytes given. + . . . . /// +-- line 751 ---------------------------------------- +-- line 752 ---------------------------------------- + . . . . /// # Errors + . . . . /// + . . . . /// This returns an error if the state identifier space is exhausted, or if + . . . . /// the configured heap size limit has been exceeded. + . . . . pub fn add_range( + . . . . &mut self, + . . . . trans: Transition, + . . . . ) -> Result { + 204,073 ( 0.06%) . . . self.add(State::ByteRange { trans }) +2,461,079 ( 0.71%) 1,809 ( 0.22%) 1 ( 0.32%) . => /home/.cargo/registry/src/index.crates.io-6f17d22bba15001f/regex-automata-0.4.6/src/nfa/thompson/builder.rs:regex_automata::nfa::thompson::builder::Builder::add (31,981x) + . . . . } + . . . . + . . . . /// Add a "sparse" NFA state. + . . . . /// + . . . . /// A "sparse" NFA state contains zero or more outgoing transitions, where + . . . . /// the transition to be followed (if any) is chosen based on whether the + . . . . /// current input byte falls in the range of one such transition. The + . . . . /// transitions given *must* be non-overlapping and in ascending order. (A +-- line 768 ---------------------------------------- +-- line 789 ---------------------------------------- + . . . . /// # Panics + . . . . /// + . . . . /// This routine _may_ panic if the transitions given overlap or are not + . . . . /// in ascending order. + . . . . pub fn add_sparse( + . . . . &mut self, + . . . . transitions: Vec, + . . . . ) -> Result { + 69,490 ( 0.02%) . . . self.add(State::Sparse { transitions }) + 86,591 ( 0.03%) 26 ( 0.00%) . . => /home/.cargo/registry/src/index.crates.io-6f17d22bba15001f/regex-automata-0.4.6/src/nfa/thompson/builder.rs:regex_automata::nfa::thompson::builder::Builder::add (758x) + . . . . } + . . . . + . . . . /// Add a "look" NFA state. + . . . . /// + . . . . /// A "look" NFA state corresponds to a state with exactly one + . . . . /// *conditional* epsilon transition to another NFA state. Namely, it + . . . . /// represents one of a small set of simplistic look-around operators. + . . . . /// +-- line 805 ---------------------------------------- +-- line 810 ---------------------------------------- + . . . . /// + . . . . /// This returns an error if the state identifier space is exhausted, or if + . . . . /// the configured heap size limit has been exceeded. + . . . . pub fn add_look( + . . . . &mut self, + . . . . next: StateID, + . . . . look: Look, + . . . . ) -> Result { + 490 ( 0.00%) . . . self.add(State::Look { look, next }) + . . . . } + . . . . + . . . . /// Add a "start capture" NFA state. + . . . . /// + . . . . /// A "start capture" NFA state corresponds to a state with exactly one + . . . . /// outgoing unconditional epsilon transition to another state. Unlike + . . . . /// "empty" states, a "start capture" state also carries with it an + . . . . /// instruction for saving the current position of input to a particular +-- line 826 ---------------------------------------- +-- line 983 ---------------------------------------- + . . . . /// assert_eq!(Some(PatternID::must(1)), caps[3].pattern()); + . . . . /// assert_eq!(Some(Span::from(7..8)), caps[3].get_group_by_name("foo")); + . . . . /// + . . . . /// assert_eq!(Some(PatternID::must(1)), caps[4].pattern()); + . . . . /// assert_eq!(Some(Span::from(8..9)), caps[4].get_group_by_name("foo")); + . . . . /// + . . . . /// # Ok::<(), Box>(()) + . . . . /// ``` + 6,966 ( 0.00%) . . . pub fn add_capture_start( + . . . . &mut self, + . . . . next: StateID, + . . . . group_index: u32, + . . . . name: Option>, + . . . . ) -> Result { + . . . . let pid = self.current_pattern_id(); + . . . . let group_index = match SmallIndex::try_from(group_index) { + . . . . Err(_) => { + . . . . return Err(BuildError::invalid_capture_index(group_index)) + . . . . } + . . . . Ok(group_index) => group_index, + . . . . }; + . . . . // Make sure we have space to insert our (pid,index)|-->name mapping. + 1,548 ( 0.00%) . . . if pid.as_usize() >= self.captures.len() { + 162 ( 0.00%) . . . for _ in 0..=(pid.as_usize() - self.captures.len()) { + . . . . self.captures.push(vec![]); + . . . . } + . . . . } + . . . . // In the case where 'group_index < self.captures[pid].len()', it means + . . . . // that we are adding a duplicate capture group. This is somewhat + . . . . // weird, but permissible because the capture group itself can be + . . . . // repeated in the syntax. For example, '([a-z]){4}' will produce 4 + . . . . // capture groups. In practice, only the last will be set at search + . . . . // time when a match occurs. For duplicates, we don't need to push + . . . . // anything other than a CaptureStart NFA state. + 2,322 ( 0.00%) . . . if group_index.as_usize() >= self.captures[pid].len() { + . . . . // For discontiguous indices, push placeholders for earlier capture + . . . . // groups that weren't explicitly added. + . . . . for _ in 0..(group_index.as_usize() - self.captures[pid].len()) { + . . . . self.captures[pid].push(None); + . . . . } + 1,548 ( 0.00%) . . . self.captures[pid].push(name); + . . . . } + 7,740 ( 0.00%) . . . self.add(State::CaptureStart { pattern_id: pid, group_index, next }) + 52,307 ( 0.02%) 52 ( 0.01%) . . => /home/.cargo/registry/src/index.crates.io-6f17d22bba15001f/regex-automata-0.4.6/src/nfa/thompson/builder.rs:regex_automata::nfa::thompson::builder::Builder::add (774x) + 6,966 ( 0.00%) . . . } + . . . . + . . . . /// Add a "end capture" NFA state. + . . . . /// + . . . . /// A "end capture" NFA state corresponds to a state with exactly one + . . . . /// outgoing unconditional epsilon transition to another state. Unlike + . . . . /// "empty" states, a "end capture" state also carries with it an + . . . . /// instruction for saving the current position of input to a particular + . . . . /// location in memory. NFA simulations, like the Pike VM, may use this +-- line 1034 ---------------------------------------- +-- line 1062 ---------------------------------------- + . . . . ) -> Result { + . . . . let pid = self.current_pattern_id(); + . . . . let group_index = match SmallIndex::try_from(group_index) { + . . . . Err(_) => { + . . . . return Err(BuildError::invalid_capture_index(group_index)) + . . . . } + . . . . Ok(group_index) => group_index, + . . . . }; + 6,192 ( 0.00%) . . . self.add(State::CaptureEnd { pattern_id: pid, group_index, next }) + 7,353 ( 0.00%) 12 ( 0.00%) . . => /home/.cargo/registry/src/index.crates.io-6f17d22bba15001f/regex-automata-0.4.6/src/nfa/thompson/builder.rs:regex_automata::nfa::thompson::builder::Builder::add (81x) + . . . . } + . . . . + . . . . /// Adds a "fail" NFA state. + . . . . /// + . . . . /// A "fail" state is simply a state that has no outgoing transitions. It + . . . . /// acts as a way to cause a search to stop without reporting a match. + . . . . /// For example, one way to represent an NFA with zero patterns is with a + . . . . /// single "fail" state. +-- line 1078 ---------------------------------------- +-- line 1099 ---------------------------------------- + . . . . /// the configured heap size limit has been exceeded. + . . . . /// + . . . . /// # Panics + . . . . /// + . . . . /// This must be called after a `start_pattern` call but before the + . . . . /// corresponding `finish_pattern` call. Otherwise, it panics. + . . . . pub fn add_match(&mut self) -> Result { + . . . . let pattern_id = self.current_pattern_id(); + 1,050 ( 0.00%) . . . let sid = self.add(State::Match { pattern_id })?; + 10,807 ( 0.00%) 12 ( 0.00%) 1 ( 0.32%) . => /home/.cargo/registry/src/index.crates.io-6f17d22bba15001f/regex-automata-0.4.6/src/nfa/thompson/builder.rs:regex_automata::nfa::thompson::builder::Builder::add (175x) + . . . . Ok(sid) + . . . . } + . . . . + . . . . /// The common implementation of "add a state." It handles the common + . . . . /// error cases of state ID exhausting (by owning state ID allocation) and + . . . . /// whether the size limit has been exceeded. + 624,204 ( 0.18%) . . . fn add(&mut self, state: State) -> Result { + . . . . let id = StateID::new(self.states.len()) + . . . . .map_err(|_| BuildError::too_many_states(self.states.len()))?; + 445,860 ( 0.13%) . . . self.memory_states += state.memory_usage(); + . . . . self.states.push(state); + . . . . self.check_size_limit()?; + 178,344 ( 0.05%) . . . Ok(id) + 535,032 ( 0.15%) . . . } + . . . . + . . . . /// Add a transition from one state to another. + . . . . /// + . . . . /// This routine is called "patch" since it is very common to add the + . . . . /// states you want, typically with "dummy" state ID transitions, and then + . . . . /// "patch" in the real state IDs later. This is because you don't always + . . . . /// know all of the necessary state IDs to add because they might not + . . . . /// exist yet. +-- line 1129 ---------------------------------------- +-- line 1135 ---------------------------------------- + . . . . /// new transition (as in the case of a "union" state). + . . . . /// + . . . . /// # Panics + . . . . /// + . . . . /// This panics if `from` corresponds to a "sparse" state. When "sparse" + . . . . /// states are added, there is no way to patch them after-the-fact. (If you + . . . . /// have a use case where this would be helpful, please file an issue. It + . . . . /// will likely require a new API.) + 479,568 ( 0.14%) . . . pub fn patch( + . . . . &mut self, + . . . . from: StateID, + . . . . to: StateID, + . . . . ) -> Result<(), BuildError> { + . . . . let old_memory_states = self.memory_states; + 59,946 ( 0.02%) . . . match self.states[from] { + . . . . State::Empty { ref mut next } => { + . . . . *next = to; + . . . . } + . . . . State::ByteRange { ref mut trans } => { + . . . . trans.next = to; + . . . . } + . . . . State::Sparse { .. } => { + . . . . panic!("cannot patch from a sparse NFA state") +-- line 1157 ---------------------------------------- +-- line 1175 ---------------------------------------- + . . . . } + . . . . State::Fail => {} + . . . . State::Match { .. } => {} + . . . . } + . . . . if old_memory_states != self.memory_states { + . . . . self.check_size_limit()?; + . . . . } + . . . . Ok(()) + 539,514 ( 0.16%) . . . } + . . . . + . . . . /// Set whether the NFA produced by this builder should only match UTF-8. + . . . . /// + . . . . /// This should be set when both of the following are true: + . . . . /// + . . . . /// 1. The caller guarantees that the NFA created by this build will only + . . . . /// report non-empty matches with spans that are valid UTF-8. + . . . . /// 2. The caller desires regex engines using this NFA to avoid reporting +-- line 1191 ---------------------------------------- +-- line 1212 ---------------------------------------- + . . . . /// UTF-8, you almost certainly do not want to enable this option. + . . . . /// Similarly, if you are running the NFA on strings that *are* guaranteed + . . . . /// to be valid UTF-8, then you almost certainly want to enable this option + . . . . /// unless you can guarantee that your NFA will never produce a zero-width + . . . . /// match. + . . . . /// + . . . . /// It is disabled by default. + . . . . pub fn set_utf8(&mut self, yes: bool) { + 175 ( 0.00%) . . . self.utf8 = yes; + . . . . } + . . . . + . . . . /// Returns whether UTF-8 mode is enabled for this builder. + . . . . /// + . . . . /// See [`Builder::set_utf8`] for more details about what "UTF-8 mode" is. + . . . . pub fn get_utf8(&self) -> bool { + . . . . self.utf8 + . . . . } +-- line 1228 ---------------------------------------- +-- line 1232 ---------------------------------------- + . . . . /// should be matched by moving backwards through a haystack, from a higher + . . . . /// memory address to a lower memory address. + . . . . /// + . . . . /// See also [`NFA::is_reverse`] for more details. + . . . . /// + . . . . /// This is disabled by default, which means NFAs are by default matched + . . . . /// in the forward direction. + . . . . pub fn set_reverse(&mut self, yes: bool) { + 175 ( 0.00%) . . . self.reverse = yes; + . . . . } + . . . . + . . . . /// Returns whether reverse mode is enabled for this builder. + . . . . /// + . . . . /// See [`Builder::set_reverse`] for more details about what "reverse mode" + . . . . /// is. + . . . . pub fn get_reverse(&self) -> bool { + . . . . self.reverse +-- line 1248 ---------------------------------------- +-- line 1250 ---------------------------------------- + . . . . + . . . . /// Sets the look-around matcher that should be used for the resulting NFA. + . . . . /// + . . . . /// A look-around matcher can be used to configure how look-around + . . . . /// assertions are matched. For example, a matcher might carry + . . . . /// configuration that changes the line terminator used for `(?m:^)` and + . . . . /// `(?m:$)` assertions. + . . . . pub fn set_look_matcher(&mut self, m: LookMatcher) { + 175 ( 0.00%) . . . self.look_matcher = m; + . . . . } + . . . . + . . . . /// Returns the look-around matcher used for this builder. + . . . . /// + . . . . /// If a matcher was not explicitly set, then `LookMatcher::default()` is + . . . . /// returned. + . . . . pub fn get_look_matcher(&self) -> &LookMatcher { + . . . . &self.look_matcher +-- line 1266 ---------------------------------------- +-- line 1272 ---------------------------------------- + . . . . /// fits within the given size limit. If it doesn't, then an error is + . . . . /// returned. + . . . . /// + . . . . /// By default, there is no configured size limit. + . . . . pub fn set_size_limit( + . . . . &mut self, + . . . . limit: Option, + . . . . ) -> Result<(), BuildError> { + 350 ( 0.00%) . . . self.size_limit = limit; + . . . . self.check_size_limit() + . . . . } + . . . . + . . . . /// Return the currently configured size limit. + . . . . /// + . . . . /// By default, this returns `None`, which corresponds to no configured + . . . . /// size limit. + . . . . pub fn get_size_limit(&self) -> Option { +-- line 1288 ---------------------------------------- +-- line 1292 ---------------------------------------- + . . . . /// Returns the heap memory usage, in bytes, used by the NFA states added + . . . . /// so far. + . . . . /// + . . . . /// Note that this is an approximation of how big the final NFA will be. + . . . . /// In practice, the final NFA will likely be a bit smaller because of + . . . . /// its simpler state representation. (For example, using things like + . . . . /// `Box<[StateID]>` instead of `Vec`.) + . . . . pub fn memory_usage(&self) -> usize { + 210,522 ( 0.06%) . . . self.states.len() * mem::size_of::() + self.memory_states + . . . . } + . . . . + . . . . fn check_size_limit(&self) -> Result<(), BuildError> { + 315,608 ( 0.09%) . . . if let Some(limit) = self.size_limit { + 210,522 ( 0.06%) . . . if self.memory_usage() > limit { + . . . . return Err(BuildError::exceeded_size_limit(limit)); + . . . . } + . . . . } + . . . . Ok(()) + . . . . } + . . . . } + . . . . + . . . . #[cfg(test)] +-- line 1313 ---------------------------------------- + +1,504,620 ( 0.43%) . . . + +-------------------------------------------------------------------------------- +-- Auto-annotated source: /home/.cargo/registry/src/index.crates.io-6f17d22bba15001f/regex-automata-0.4.6/src/util/alphabet.rs +-------------------------------------------------------------------------------- +Ir Ge sysCount sysTime + +-- line 96 ---------------------------------------- + . . . . /// All possible byte values are legal. However, when creating a haystack + . . . . /// unit for a specific DFA, one should be careful to only construct units + . . . . /// that are in that DFA's alphabet. Namely, one way to compact a DFA's + . . . . /// in-memory representation is to collapse its transitions to a set of + . . . . /// equivalence classes into a set of all possible byte values. If a DFA + . . . . /// uses equivalence classes instead of byte values, then the byte given + . . . . /// here should be the equivalence class. + . . . . pub fn u8(byte: u8) -> Unit { + 113,179 ( 0.03%) . . . Unit(UnitKind::U8(byte)) + . . . . } + . . . . + . . . . /// Create a new "end of input" haystack unit. + . . . . /// + . . . . /// The value given is the sentinel value used by this unit to represent + . . . . /// the "end of input." The value should be the total number of equivalence + . . . . /// classes in the corresponding alphabet. Its maximum value is `256`, + . . . . /// which occurs when every byte is its own equivalence class. +-- line 112 ---------------------------------------- +-- line 115 ---------------------------------------- + . . . . /// + . . . . /// This panics when `num_byte_equiv_classes` is greater than `256`. + . . . . pub fn eoi(num_byte_equiv_classes: usize) -> Unit { + . . . . assert!( + . . . . num_byte_equiv_classes <= 256, + . . . . "max number of byte-based equivalent classes is 256, but got {}", + . . . . num_byte_equiv_classes, + . . . . ); + 702 ( 0.00%) . . . Unit(UnitKind::EOI(u16::try_from(num_byte_equiv_classes).unwrap())) + . . . . } + . . . . + . . . . /// If this unit is not an "end of input" sentinel, then returns its + . . . . /// underlying byte value. Otherwise return `None`. + . . . . pub fn as_u8(self) -> Option { + 120 ( 0.00%) . . . match self.0 { + . . . . UnitKind::U8(b) => Some(b), + . . . . UnitKind::EOI(_) => None, + . . . . } + . . . . } + . . . . + . . . . /// If this unit is an "end of input" sentinel, then return the underlying + . . . . /// sentinel value that was given to [`Unit::eoi`]. Otherwise return + . . . . /// `None`. +-- line 137 ---------------------------------------- +-- line 206 ---------------------------------------- + . . . . /// let classes = nfa.byte_classes(); + . . . . /// // 'a' and 'z' are in the same class for this regex. + . . . . /// assert_eq!(classes.get(b'a'), classes.get(b'z')); + . . . . /// // But 'a' and 'A' are not. + . . . . /// assert_ne!(classes.get(b'a'), classes.get(b'A')); + . . . . /// + . . . . /// # Ok::<(), Box>(()) + . . . . /// ``` + 1,377 ( 0.00%) . . . #[derive(Clone, Copy)] + . . . . pub struct ByteClasses([u8; 256]); + . . . . + . . . . impl ByteClasses { + . . . . /// Creates a new set of equivalence classes where all bytes are mapped to + . . . . /// the same class. + . . . . #[inline] + . . . . pub fn empty() -> ByteClasses { + 525 ( 0.00%) . . . ByteClasses([0; 256]) + 6,300 ( 0.00%) . . . => ./string/../sysdeps/x86_64/multiarch/memset-vec-unaligned-erms.S:__memset_avx2_unaligned_erms (175x) + . . . . } + . . . . + . . . . /// Creates a new set of equivalence classes where each byte belongs to + . . . . /// its own equivalence class. + . . . . #[inline] + . . . . pub fn singletons() -> ByteClasses { + . . . . let mut classes = ByteClasses::empty(); + . . . . for b in 0..=255 { +-- line 230 ---------------------------------------- +-- line 281 ---------------------------------------- + . . . . /// Returns the total number of bytes written by `write_to`. + . . . . pub(crate) fn write_to_len(&self) -> usize { + . . . . 256 + . . . . } + . . . . + . . . . /// Set the equivalence class for the given byte. + . . . . #[inline] + . . . . pub fn set(&mut self, byte: u8, class: u8) { + 102,375 ( 0.03%) . . . self.0[usize::from(byte)] = class; + . . . . } + . . . . + . . . . /// Get the equivalence class for the given byte. + . . . . #[inline] + . . . . pub fn get(&self, byte: u8) -> u8 { + 116,748 ( 0.03%) . . . self.0[usize::from(byte)] + . . . . } + . . . . + . . . . /// Get the equivalence class for the given haystack unit and return the + . . . . /// class as a `usize`. + . . . . #[inline] + . . . . pub fn get_by_unit(&self, unit: Unit) -> usize { + 45,262 ( 0.01%) . . . match unit.0 { + . . . . UnitKind::U8(b) => usize::from(self.get(b)), + . . . . UnitKind::EOI(b) => usize::from(b), + . . . . } + . . . . } + . . . . + . . . . /// Create a unit that represents the "end of input" sentinel based on the + . . . . /// number of equivalence classes. + . . . . #[inline] +-- line 310 ---------------------------------------- +-- line 317 ---------------------------------------- + . . . . /// Return the total number of elements in the alphabet represented by + . . . . /// these equivalence classes. Equivalently, this returns the total number + . . . . /// of equivalence classes. + . . . . #[inline] + . . . . pub fn alphabet_len(&self) -> usize { + . . . . // Add one since the number of equivalence classes is one bigger than + . . . . // the last one. But add another to account for the final EOI class + . . . . // that isn't explicitly represented. + 256 ( 0.00%) . . . usize::from(self.0[255]) + 1 + 1 + . . . . } + . . . . + . . . . /// Returns the stride, as a base-2 exponent, required for these + . . . . /// equivalence classes. + . . . . /// + . . . . /// The stride is always the smallest power of 2 that is greater than or + . . . . /// equal to the alphabet length, and the `stride2` returned here is the + . . . . /// exponent applied to `2` to get the smallest power. This is done so that +-- line 333 ---------------------------------------- +-- line 415 ---------------------------------------- + . . . . ) -> ByteClassRepresentatives<'_> { + . . . . use core::ops::Bound; + . . . . + . . . . let cur_byte = match range.start_bound() { + . . . . Bound::Included(&i) => usize::from(i), + . . . . Bound::Excluded(&i) => usize::from(i).checked_add(1).unwrap(), + . . . . Bound::Unbounded => 0, + . . . . }; + 1,451 ( 0.00%) . . . let end_byte = match range.end_bound() { + . . . . Bound::Included(&i) => { + . . . . Some(usize::from(i).checked_add(1).unwrap()) + . . . . } + . . . . Bound::Excluded(&i) => Some(usize::from(i)), + . . . . Bound::Unbounded => None, + . . . . }; + . . . . assert_ne!( + . . . . cur_byte, +-- line 431 ---------------------------------------- +-- line 557 ---------------------------------------- + . . . . end_byte: Option, + . . . . last_class: Option, + . . . . } + . . . . + . . . . impl<'a> Iterator for ByteClassRepresentatives<'a> { + . . . . type Item = Unit; + . . . . + . . . . fn next(&mut self) -> Option { + 300,439 ( 0.09%) . . . while self.cur_byte < self.end_byte.unwrap_or(256) { + . . . . let byte = u8::try_from(self.cur_byte).unwrap(); + . . . . let class = self.classes.get(byte); + 92,114 ( 0.03%) . . . self.cur_byte += 1; + . . . . + . . . . if self.last_class != Some(class) { + . . . . self.last_class = Some(class); + . . . . return Some(Unit::u8(byte)); + . . . . } + . . . . } + 1,404 ( 0.00%) . . . if self.cur_byte != usize::MAX && self.end_byte.is_none() { + . . . . // Using usize::MAX as a sentinel is OK because we ban usize::MAX + . . . . // from appearing as a start bound in iterator construction. But + . . . . // why do it this way? Well, we want to return the EOI class + . . . . // whenever the end of the given range is unbounded because EOI + . . . . // isn't really a "byte" per se, so the only way it should be + . . . . // excluded is if there is a bounded end to the range. Therefore, + . . . . // when the end is unbounded, we just need to know whether we've + . . . . // reported EOI or not. When we do, we set cur_byte to a value it + . . . . // can never otherwise be. + . . . . self.cur_byte = usize::MAX; + 351 ( 0.00%) . . . return Some(self.classes.eoi()); + . . . . } + . . . . None + 23,817 ( 0.01%) . . . } + . . . . } + . . . . + . . . . /// An iterator over all elements in an equivalence class. + . . . . /// + . . . . /// This is created by the [`ByteClasses::elements`] method. + . . . . /// + . . . . /// The lifetime `'a` refers to the lifetime of the byte classes that this + . . . . /// iterator was created from. +-- line 597 ---------------------------------------- +-- line 698 ---------------------------------------- + . . . . pub(crate) fn empty() -> Self { + . . . . ByteClassSet(ByteSet::empty()) + . . . . } + . . . . + . . . . /// Indicate the the range of byte given (inclusive) can discriminate a + . . . . /// match between it and all other bytes outside of the range. + . . . . pub(crate) fn set_range(&mut self, start: u8, end: u8) { + . . . . debug_assert!(start <= end); + 167,676 ( 0.05%) . . . if start > 0 { + 83,605 ( 0.02%) . . . self.0.add(start - 1); + . . . . } + . . . . self.0.add(end); + . . . . } + . . . . + . . . . /// Add the contiguous ranges in the set given to this byte class set. + . . . . pub(crate) fn add_set(&mut self, set: &ByteSet) { + . . . . for (start, end) in set.iter_ranges() { + . . . . self.set_range(start, end); +-- line 715 ---------------------------------------- +-- line 720 ---------------------------------------- + . . . . /// corresponding equivalence class. The last mapping indicates the largest + . . . . /// equivalence class identifier (which is never bigger than 255). + . . . . pub(crate) fn byte_classes(&self) -> ByteClasses { + . . . . let mut classes = ByteClasses::empty(); + . . . . let mut class = 0u8; + . . . . let mut b = 0u8; + . . . . loop { + . . . . classes.set(b, class); + 178,500 ( 0.05%) . . . if b == 255 { + . . . . break; + . . . . } + 89,250 ( 0.03%) . . . if self.0.contains(b) { + . . . . class = class.checked_add(1).unwrap(); + . . . . } + . . . . b = b.checked_add(1).unwrap(); + . . . . } + . . . . classes + . . . . } + . . . . } + . . . . + . . . . /// A simple set of bytes that is reasonably cheap to copy and allocation free. + 700 ( 0.00%) . . . #[derive(Clone, Copy, Debug, Default, Eq, PartialEq)] + . . . . pub(crate) struct ByteSet { + . . . . bits: BitSet, + . . . . } + . . . . + . . . . /// The representation of a byte set. Split out so that we can define a + . . . . /// convenient Debug impl for it while keeping "ByteSet" in the output. + . . . . #[derive(Clone, Copy, Default, Eq, PartialEq)] + . . . . struct BitSet([u128; 2]); + . . . . + . . . . impl ByteSet { + . . . . /// Create an empty set of bytes. + . . . . pub(crate) fn empty() -> ByteSet { + 700 ( 0.00%) . . . ByteSet { bits: BitSet([0; 2]) } + . . . . } + . . . . + . . . . /// Add a byte to this set. + . . . . /// + . . . . /// If the given byte already belongs to this set, then this is a no-op. + . . . . pub(crate) fn add(&mut self, byte: u8) { + 167,210 ( 0.05%) . . . let bucket = byte / 128; + . . . . let bit = byte % 128; +1,835,327 ( 0.53%) . . . self.bits.0[usize::from(bucket)] |= 1 << bit; + . . . . } + . . . . + . . . . /// Remove a byte from this set. + . . . . /// + . . . . /// If the given byte is not in this set, then this is a no-op. + . . . . pub(crate) fn remove(&mut self, byte: u8) { + . . . . let bucket = byte / 128; + . . . . let bit = byte % 128; + . . . . self.bits.0[usize::from(bucket)] &= !(1 << bit); + . . . . } + . . . . + . . . . /// Return true if and only if the given byte is in this set. + . . . . pub(crate) fn contains(&self, byte: u8) -> bool { + . . . . let bucket = byte / 128; + . . . . let bit = byte % 128; +1,160,250 ( 0.34%) . . . self.bits.0[usize::from(bucket)] & (1 << bit) > 0 + . . . . } + . . . . + . . . . /// Return true if and only if the given inclusive range of bytes is in + . . . . /// this set. + . . . . pub(crate) fn contains_range(&self, start: u8, end: u8) -> bool { + . . . . (start..=end).all(|b| self.contains(b)) + . . . . } + . . . . +-- line 787 ---------------------------------------- + + 396,615 ( 0.11%) . . . + +-------------------------------------------------------------------------------- +-- Auto-annotated source: /home/.cargo/registry/src/index.crates.io-6f17d22bba15001f/regex-automata-0.4.6/src/nfa/thompson/map.rs +-------------------------------------------------------------------------------- +Ir Ge sysCount sysTime + +-- line 120 ---------------------------------------- + . . . . assert!(capacity > 0); + . . . . Utf8BoundedMap { version: 0, capacity, map: vec![] } + . . . . } + . . . . + . . . . /// Clear this map of all entries, but permit the reuse of allocation + . . . . /// if possible. + . . . . /// + . . . . /// This must be called before the map can be used. + 1,008 ( 0.00%) . . . pub fn clear(&mut self) { + 252 ( 0.00%) . . . if self.map.is_empty() { + 67 ( 0.00%) . . . self.map = vec![Utf8BoundedEntry::default(); self.capacity]; + . . . . } else { + 59 ( 0.00%) . . . self.version = self.version.wrapping_add(1); + . . . . // If we loop back to version 0, then we forcefully clear the + . . . . // entire map. Otherwise, it might be possible to incorrectly + . . . . // match entries used to generate other NFAs. + 59 ( 0.00%) . . . if self.version == 0 { + . . . . self.map = vec![Utf8BoundedEntry::default(); self.capacity]; + . . . . } + . . . . } + 1,008 ( 0.00%) . . . } + . . . . + . . . . /// Return a hash of the given transitions. + . . . . pub fn hash(&self, key: &[Transition]) -> usize { + . . . . let mut h = INIT; + . . . . for t in key { + 5,394 ( 0.00%) . . . h = (h ^ u64::from(t.start)).wrapping_mul(PRIME); + 5,394 ( 0.00%) . . . h = (h ^ u64::from(t.end)).wrapping_mul(PRIME); + 2,697 ( 0.00%) . . . h = (h ^ t.next.as_u64()).wrapping_mul(PRIME); + . . . . } + 8,395 ( 0.00%) . . . (h % self.map.len().as_u64()).as_usize() + . . . . } + . . . . + . . . . /// Retrieve the cached state ID corresponding to the given key. The hash + . . . . /// given must have been computed with `hash` using the same key value. + . . . . /// + . . . . /// If there is no cached state with the given transitions, then None is + . . . . /// returned. + . . . . pub fn get(&mut self, key: &[Transition], hash: usize) -> Option { + 1,679 ( 0.00%) . . . let entry = &self.map[hash]; + 8,395 ( 0.00%) . . . if entry.version != self.version { + . . . . return None; + . . . . } + . . . . // There may be a hash collision, so we need to confirm real equality. + 2,482 ( 0.00%) . . . if entry.key != key { + . . . . return None; + . . . . } + 921 ( 0.00%) . . . Some(entry.val) + . . . . } + . . . . + . . . . /// Add a cached state to this map with the given key. Callers should + . . . . /// ensure that `state_id` points to a state that contains precisely the + . . . . /// NFA transitions given. + . . . . /// + . . . . /// `hash` must have been computed using the `hash` method with the same + . . . . /// key. + . . . . pub fn set( + . . . . &mut self, + . . . . key: Vec, + . . . . hash: usize, + . . . . state_id: StateID, + . . . . ) { + 6,064 ( 0.00%) . . . self.map[hash] = + 758 ( 0.00%) . . . Utf8BoundedEntry { version: self.version, key, val: state_id }; + . . . . } + . . . . } + . . . . + . . . . /// A cache of suffixes used to modestly compress UTF-8 automata for large + . . . . /// Unicode character classes. + . . . . #[derive(Clone, Debug)] + . . . . pub struct Utf8SuffixMap { + . . . . /// The current version of this map. Only entries with matching versions +-- line 191 ---------------------------------------- +-- line 200 ---------------------------------------- + . . . . } + . . . . + . . . . /// A key that uniquely identifies an NFA state. It is a triple that represents + . . . . /// a transition from one state for a particular byte range. + . . . . #[derive(Clone, Debug, Default, Eq, PartialEq)] + . . . . pub struct Utf8SuffixKey { + . . . . pub from: StateID, + . . . . pub start: u8, + 3,422 ( 0.00%) . . . pub end: u8, + . . . . } + . . . . + . . . . /// An entry in this map. + . . . . #[derive(Clone, Debug, Default)] + . . . . struct Utf8SuffixEntry { + . . . . /// The version of the map used to produce this entry. If this entry's + . . . . /// version does not match the current version of the map, then the map + . . . . /// should behave as if this entry does not exist. +-- line 216 ---------------------------------------- +-- line 227 ---------------------------------------- + . . . . /// + . . . . /// Note that this does not allocate. Instead, callers must call `clear` + . . . . /// before using this map. `clear` will allocate space if necessary. + . . . . /// + . . . . /// This avoids the need to pay for the allocation of this map when + . . . . /// compiling regexes that lack large Unicode character classes. + . . . . pub fn new(capacity: usize) -> Utf8SuffixMap { + . . . . assert!(capacity > 0); + 3,370 ( 0.00%) . . . Utf8SuffixMap { version: 0, capacity, map: vec![] } + . . . . } + . . . . + . . . . /// Clear this map of all entries, but permit the reuse of allocation + . . . . /// if possible. + . . . . /// + . . . . /// This must be called before the map can be used. + 762 ( 0.00%) . . . pub fn clear(&mut self) { + 127 ( 0.00%) . . . if self.map.is_empty() { + 68 ( 0.00%) . . . self.map = vec![Utf8SuffixEntry::default(); self.capacity]; + . . . . } else { + 59 ( 0.00%) . . . self.version = self.version.wrapping_add(1); + 59 ( 0.00%) . . . if self.version == 0 { + . . . . self.map = vec![Utf8SuffixEntry::default(); self.capacity]; + . . . . } + . . . . } + 762 ( 0.00%) . . . } + . . . . + . . . . /// Return a hash of the given transition. + . . . . pub fn hash(&self, key: &Utf8SuffixKey) -> usize { + . . . . // Basic FNV-1a hash as described: + . . . . // https://en.wikipedia.org/wiki/Fowler%E2%80%93Noll%E2%80%93Vo_hash_function + . . . . const PRIME: u64 = 1099511628211; + . . . . const INIT: u64 = 14695981039346656037; + . . . . + . . . . let mut h = INIT; + 9,366 ( 0.00%) . . . h = (h ^ key.from.as_u64()).wrapping_mul(PRIME); + 3,122 ( 0.00%) . . . h = (h ^ u64::from(key.start)).wrapping_mul(PRIME); + 3,122 ( 0.00%) . . . h = (h ^ u64::from(key.end)).wrapping_mul(PRIME); +18,268 ( 0.01%) . . . (h % self.map.len().as_u64()).as_usize() + . . . . } + . . . . + . . . . /// Retrieve the cached state ID corresponding to the given key. The hash + . . . . /// given must have been computed with `hash` using the same key value. + . . . . /// + . . . . /// If there is no cached state with the given key, then None is returned. + . . . . pub fn get( + . . . . &mut self, + . . . . key: &Utf8SuffixKey, + . . . . hash: usize, + . . . . ) -> Option { + 3,122 ( 0.00%) . . . let entry = &self.map[hash]; + 9,366 ( 0.00%) . . . if entry.version != self.version { + . . . . return None; + . . . . } + 394 ( 0.00%) . . . if key != &entry.key { + . . . . return None; + . . . . } + 394 ( 0.00%) . . . Some(entry.val) + . . . . } + . . . . + . . . . /// Add a cached state to this map with the given key. Callers should + . . . . /// ensure that `state_id` points to a state that contains precisely the + . . . . /// NFA transition given. + . . . . /// + . . . . /// `hash` must have been computed using the `hash` method with the same + . . . . /// key. + . . . . pub fn set(&mut self, key: Utf8SuffixKey, hash: usize, state_id: StateID) { +16,368 ( 0.00%) . . . self.map[hash] = + 2,728 ( 0.00%) . . . Utf8SuffixEntry { version: self.version, key, val: state_id }; + . . . . } + . . . . } + +24,918 ( 0.01%) . . . + +-------------------------------------------------------------------------------- +-- Auto-annotated source: /home/.cargo/registry/src/index.crates.io-6f17d22bba15001f/regex-automata-0.4.6/src/dfa/remapper.rs +-------------------------------------------------------------------------------- +Ir Ge sysCount sysTime + +-- line 83 ---------------------------------------- + . . . . /// A mapper from state index to state ID (and back). + . . . . idxmap: IndexMapper, + . . . . } + . . . . + . . . . impl Remapper { + . . . . /// Create a new remapper from the given remappable implementation. The + . . . . /// remapper can then be used to swap states. The remappable value given + . . . . /// here must the same one given to `swap` and `remap`. + 6 ( 0.00%) . . . pub(super) fn new(r: &impl Remappable) -> Remapper { + . . . . let idxmap = IndexMapper { stride2: r.stride2() }; + . . . . let map = (0..r.state_len()).map(|i| idxmap.to_state_id(i)).collect(); + 1 ( 0.00%) . . . Remapper { map, idxmap } + 7 ( 0.00%) . . . } + . . . . + . . . . /// Swap two states. Once this is called, callers must follow through to + . . . . /// call `remap`, or else it's possible for the underlying remappable + . . . . /// value to be in a corrupt state. + 3 ( 0.00%) . . . pub(super) fn swap( + . . . . &mut self, + . . . . r: &mut impl Remappable, + . . . . id1: StateID, + . . . . id2: StateID, + . . . . ) { + 1 ( 0.00%) . . . if id1 == id2 { + . . . . return; + . . . . } + . . . . r.swap_states(id1, id2); + 1 ( 0.00%) . . . self.map.swap(self.idxmap.to_index(id1), self.idxmap.to_index(id2)); + 4 ( 0.00%) . . . } + . . . . + . . . . /// Complete the remapping process by rewriting all state IDs in the + . . . . /// remappable value according to the swaps performed. + 9 ( 0.00%) . . . pub(super) fn remap(mut self, r: &mut impl Remappable) { + . . . . // Update the map to account for states that have been swapped + . . . . // multiple times. For example, if (A, C) and (C, G) are swapped, then + . . . . // transitions previously pointing to A should now point to G. But if + . . . . // we don't update our map, they will erroneously be set to C. All we + . . . . // do is follow the swaps in our map until we see our original state + . . . . // ID. + . . . . // + . . . . // The intuition here is to think about how changes are made to the +-- line 123 ---------------------------------------- +-- line 128 ---------------------------------------- + . . . . // + . . . . // We are also careful to clone the map before starting in order to + . . . . // freeze it. We use the frozen map to find our loops, since we need to + . . . . // update our map as well. Without freezing it, our updates could break + . . . . // the loops referenced above and produce incorrect results. + . . . . let oldmap = self.map.clone(); + . . . . for i in 0..r.state_len() { + . . . . let cur_id = self.idxmap.to_state_id(i); + 74 ( 0.00%) . . . let mut new_id = oldmap[i]; + 76 ( 0.00%) . . . if cur_id == new_id { + . . . . continue; + . . . . } + . . . . loop { + 2 ( 0.00%) . . . let id = oldmap[self.idxmap.to_index(new_id)]; + 2 ( 0.00%) . . . if cur_id == id { + 6 ( 0.00%) . . . self.map[i] = new_id; + . . . . break; + . . . . } + . . . . new_id = id; + . . . . } + . . . . } + 7 ( 0.00%) . . . r.remap(|next| self.map[self.idxmap.to_index(next)]); +102,562 ( 0.03%) . . . => /home/.cargo/registry/src/index.crates.io-6f17d22bba15001f/regex-automata-0.4.6/src/dfa/remapper.rs:regex_automata::dfa::remapper::onepass::::remap (1x) + . . . . } + . . . . } + . . . . + . . . . /// A simple type for mapping between state indices and state IDs. + . . . . /// + . . . . /// The reason why this exists is because state IDs are "premultiplied." That + . . . . /// is, in order to get to the transitions for a particular state, one need + . . . . /// only use the state ID as-is, instead of having to multiple it by transition +-- line 157 ---------------------------------------- +-- line 171 ---------------------------------------- + . . . . /// transition table. 'id >> stride2' de-multiplies an ID while 'index << + . . . . /// stride2' pre-multiplies an index to an ID. + . . . . stride2: usize, + . . . . } + . . . . + . . . . impl IndexMapper { + . . . . /// Convert a state ID to a state index. + . . . . fn to_index(&self, id: StateID) -> usize { +11,995 ( 0.00%) . . . id.as_usize() >> self.stride2 + . . . . } + . . . . + . . . . /// Convert a state index to a state ID. + . . . . fn to_state_id(&self, index: usize) -> StateID { + . . . . // CORRECTNESS: If the given index is not valid, then it is not + . . . . // required for this to panic or return a valid state ID. We'll "just" + . . . . // wind up with panics or silent logic errors at some other point. + 296 ( 0.00%) . . . StateID::new_unchecked(index << self.stride2) + . . . . } + . . . . } + . . . . + . . . . #[cfg(feature = "dfa-build")] + . . . . mod dense { + . . . . use crate::{dfa::dense::OwnedDFA, util::primitives::StateID}; + . . . . + . . . . use super::Remappable; +-- line 195 ---------------------------------------- +-- line 230 ---------------------------------------- + . . . . // equivalent. + . . . . 0 + . . . . } + . . . . + . . . . fn swap_states(&mut self, id1: StateID, id2: StateID) { + . . . . DFA::swap_states(self, id1, id2) + . . . . } + . . . . + 9 ( 0.00%) . . . fn remap(&mut self, map: impl Fn(StateID) -> StateID) { + . . . . DFA::remap(self, map) + 8 ( 0.00%) . . . } + . . . . } + . . . . } + + 78 ( 0.00%) . . . + +-------------------------------------------------------------------------------- +-- Auto-annotated source: /home/.cargo/registry/src/index.crates.io-6f17d22bba15001f/aho-corasick-1.1.2/src/util/primitives.rs +-------------------------------------------------------------------------------- +Ir Ge sysCount sysTime + +-- line 88 ---------------------------------------- + . . . . /// not rely on this property for safety. Callers may choose to rely on this + . . . . /// property for correctness however. For example, creating a `SmallIndex` with + . . . . /// an invalid value can be done in entirely safe code. This may in turn result + . . . . /// in panics or silent logical errors. + . . . . #[derive( + . . . . Clone, Copy, Debug, Default, Eq, Hash, PartialEq, PartialOrd, Ord, + . . . . )] + . . . . #[repr(transparent)] +542,668 ( 0.16%) . . . pub(crate) struct SmallIndex(u32); + . . . . + . . . . impl SmallIndex { + . . . . /// The maximum index value. + . . . . #[cfg(any(target_pointer_width = "32", target_pointer_width = "64"))] + . . . . pub const MAX: SmallIndex = + . . . . // FIXME: Use as_usize() once const functions in traits are stable. + . . . . SmallIndex::new_unchecked(core::i32::MAX as usize - 1); + . . . . +-- line 104 ---------------------------------------- +-- line 117 ---------------------------------------- + . . . . pub const SIZE: usize = core::mem::size_of::(); + . . . . + . . . . /// Create a new small index. + . . . . /// + . . . . /// If the given index exceeds [`SmallIndex::MAX`], then this returns + . . . . /// an error. + . . . . #[inline] + . . . . pub fn new(index: usize) -> Result { + 8,364 ( 0.00%) . . . SmallIndex::try_from(index) + 19,516 ( 0.01%) . . . => /home/.cargo/registry/src/index.crates.io-6f17d22bba15001f/aho-corasick-1.1.2/src/util/primitives.rs:>::try_from (2,788x) + . . . . } + . . . . + . . . . /// Create a new small index without checking whether the given value + . . . . /// exceeds [`SmallIndex::MAX`]. + . . . . /// + . . . . /// Using this routine with an invalid index value will result in + . . . . /// unspecified behavior, but *not* undefined behavior. In particular, an + . . . . /// invalid index value is likely to cause panics or possibly even silent + . . . . /// logical errors. + . . . . /// + . . . . /// Callers must never rely on a `SmallIndex` to be within a certain range + . . . . /// for memory safety. + . . . . #[inline] + . . . . pub const fn new_unchecked(index: usize) -> SmallIndex { + . . . . // FIXME: Use as_u32() once const functions in traits are stable. + 2,768 ( 0.00%) . . . SmallIndex::from_u32_unchecked(index as u32) + . . . . } + . . . . + . . . . /// Create a new small index from a `u32` without checking whether the + . . . . /// given value exceeds [`SmallIndex::MAX`]. + . . . . /// + . . . . /// Using this routine with an invalid index value will result in + . . . . /// unspecified behavior, but *not* undefined behavior. In particular, an + . . . . /// invalid index value is likely to cause panics or possibly even silent +-- line 149 ---------------------------------------- +-- line 162 ---------------------------------------- + . . . . SmallIndex::new(index).expect("invalid small index") + . . . . } + . . . . + . . . . /// Return this small index as a `usize`. This is guaranteed to never + . . . . /// overflow `usize`. + . . . . #[inline] + . . . . pub const fn as_usize(&self) -> usize { + . . . . // FIXME: Use as_usize() once const functions in traits are stable. +429,720 ( 0.12%) . . . self.0 as usize + . . . . } + . . . . + . . . . /// Return this small index as a `u64`. This is guaranteed to never + . . . . /// overflow. + . . . . #[inline] + . . . . pub const fn as_u64(&self) -> u64 { + . . . . // FIXME: Use u64::from() once const functions in traits are stable. + . . . . self.0 as u64 +-- line 178 ---------------------------------------- +-- line 317 ---------------------------------------- + . . . . } + . . . . Ok(SmallIndex::new_unchecked(index.as_usize())) + . . . . } + . . . . } + . . . . + . . . . impl TryFrom for SmallIndex { + . . . . type Error = SmallIndexError; + . . . . + 2,788 ( 0.00%) . . . fn try_from(index: usize) -> Result { +151,300 ( 0.04%) . . . if index > SmallIndex::MAX.as_usize() { + . . . . return Err(SmallIndexError { attempted: index.as_u64() }); + . . . . } + 5,576 ( 0.00%) . . . Ok(SmallIndex::new_unchecked(index)) + 2,788 ( 0.00%) . . . } + . . . . } + . . . . + . . . . /// This error occurs when a small index could not be constructed. + . . . . /// + . . . . /// This occurs when given an integer exceeding the maximum small index value. + . . . . /// + . . . . /// When the `std` feature is enabled, this implements the `Error` trait. + . . . . #[derive(Clone, Debug, Eq, PartialEq)] +-- line 338 ---------------------------------------- +-- line 365 ---------------------------------------- + . . . . pub(crate) struct SmallIndexIter { + . . . . rng: core::ops::Range, + . . . . } + . . . . + . . . . impl Iterator for SmallIndexIter { + . . . . type Item = SmallIndex; + . . . . + . . . . fn next(&mut self) -> Option { + 5,248 ( 0.00%) . . . if self.rng.start >= self.rng.end { + . . . . return None; + . . . . } + . . . . let next_id = self.rng.start + 1; + . . . . let id = core::mem::replace(&mut self.rng.start, next_id); + . . . . // new_unchecked is OK since we asserted that the number of + . . . . // elements in this iterator will fit in an ID at construction. + . . . . Some(SmallIndex::new_unchecked(id)) + . . . . } +-- line 381 ---------------------------------------- +-- line 544 ---------------------------------------- + . . . . } + . . . . } + . . . . + . . . . impl core::ops::Index<$name> for Vec { + . . . . type Output = T; + . . . . + . . . . #[inline] + . . . . fn index(&self, index: $name) -> &T { +185,884 ( 0.05%) . . . &self[index.as_usize()] + . . . . } + . . . . } + . . . . + . . . . impl core::ops::IndexMut<$name> for Vec { + . . . . #[inline] + . . . . fn index_mut(&mut self, index: $name) -> &mut T { +120,882 ( 0.03%) . . . &mut self[index.as_usize()] + . . . . } + . . . . } + . . . . + . . . . impl From for $name { + . . . . fn from(index: SmallIndex) -> $name { + . . . . $name(index) + . . . . } + . . . . } +-- line 567 ---------------------------------------- +-- line 636 ---------------------------------------- + . . . . } + . . . . } + . . . . + . . . . #[derive(Clone, Debug)] + . . . . pub(crate) struct $iter(SmallIndexIter); + . . . . + . . . . impl $iter { + . . . . fn new(len: usize) -> $iter { + 48 ( 0.00%) . . . assert!( + 48 ( 0.00%) . . . len <= $name::LIMIT, + . . . . "cannot create iterator for {} when number of \ + . . . . elements exceed {:?}", + . . . . stringify!($name), + . . . . $name::LIMIT, + . . . . ); + . . . . $iter(SmallIndexIter { rng: 0..len }) + . . . . } + . . . . } +-- line 653 ---------------------------------------- + + 94,898 ( 0.03%) . . . + +-------------------------------------------------------------------------------- +-- Auto-annotated source: /home/.cargo/registry/src/index.crates.io-6f17d22bba15001f/regex-syntax-0.8.2/src/ast/mod.rs +-------------------------------------------------------------------------------- +Ir Ge sysCount sysTime + +-- line 345 ---------------------------------------- + . . . . /// + . . . . /// A position encodes one half of a span, and include the byte offset, line + . . . . /// number and column number. + . . . . #[derive(Clone, Copy, Eq, PartialEq)] + . . . . #[cfg_attr(feature = "arbitrary", derive(arbitrary::Arbitrary))] + . . . . pub struct Position { + . . . . /// The absolute offset of this position, starting at `0` from the + . . . . /// beginning of the regular expression pattern string. + 2,837 ( 0.00%) . . . pub offset: usize, + . . . . /// The line number, starting at `1`. + . . . . pub line: usize, + . . . . /// The approximate column number, starting at `1`. + 5,181 ( 0.00%) . . . pub column: usize, + . . . . } + . . . . + . . . . impl core::fmt::Debug for Position { + . . . . fn fmt(&self, f: &mut core::fmt::Formatter<'_>) -> core::fmt::Result { + . . . . write!( + . . . . f, + . . . . "Position(o: {:?}, l: {:?}, c: {:?})", + . . . . self.offset, self.line, self.column +-- line 365 ---------------------------------------- +-- line 377 ---------------------------------------- + . . . . fn partial_cmp(&self, other: &Position) -> Option { + . . . . Some(self.cmp(other)) + . . . . } + . . . . } + . . . . + . . . . impl Span { + . . . . /// Create a new span with the given positions. + . . . . pub fn new(start: Position, end: Position) -> Span { +154,632 ( 0.04%) . . . Span { start, end } + . . . . } + . . . . + . . . . /// Create a new span using the given position as the start and end. + . . . . pub fn splat(pos: Position) -> Span { + 92,683 ( 0.03%) . . . Span::new(pos, pos) + . . . . } + . . . . + . . . . /// Create a new span by replacing the starting the position with the one + . . . . /// given. + . . . . pub fn with_start(self, pos: Position) -> Span { + . . . . Span { start: pos, ..self } + . . . . } + . . . . + . . . . /// Create a new span by replacing the ending the position with the one + . . . . /// given. + . . . . pub fn with_end(self, pos: Position) -> Span { + 7,540 ( 0.00%) . . . Span { end: pos, ..self } + . . . . } + . . . . + . . . . /// Returns true if and only if this span occurs on a single line. + . . . . pub fn is_one_line(&self) -> bool { + . . . . self.start.line == self.end.line + . . . . } + . . . . + . . . . /// Returns true if and only if this span is empty. That is, it points to +-- line 410 ---------------------------------------- +-- line 492 ---------------------------------------- + . . . . /// An alternation of regular expressions. + . . . . Alternation(Box), + . . . . /// A concatenation of regular expressions. + . . . . Concat(Box), + . . . . } + . . . . + . . . . impl Ast { + . . . . /// Create an "empty" AST item. + 1,386 ( 0.00%) . . . pub fn empty(span: Span) -> Ast { + . . . . Ast::Empty(Box::new(span)) + 2,079 ( 0.00%) . . . } + . . . . + . . . . /// Create a "flags" AST item. + . . . . pub fn flags(e: SetFlags) -> Ast { + . . . . Ast::Flags(Box::new(e)) + . . . . } + . . . . + . . . . /// Create a "literal" AST item. + . . . . pub fn literal(e: Literal) -> Ast { +-- line 510 ---------------------------------------- +-- line 532 ---------------------------------------- + . . . . } + . . . . + . . . . /// Create a "bracketed class" AST item. + . . . . pub fn class_bracketed(e: ClassBracketed) -> Ast { + . . . . Ast::ClassBracketed(Box::new(e)) + . . . . } + . . . . + . . . . /// Create a "repetition" AST item. + 344 ( 0.00%) . . . pub fn repetition(e: Repetition) -> Ast { + . . . . Ast::Repetition(Box::new(e)) + 516 ( 0.00%) . . . } + . . . . + . . . . /// Create a "group" AST item. + . . . . pub fn group(e: Group) -> Ast { + . . . . Ast::Group(Box::new(e)) + . . . . } + . . . . + . . . . /// Create a "alternation" AST item. + . . . . pub fn alternation(e: Alternation) -> Ast { +-- line 550 ---------------------------------------- +-- line 553 ---------------------------------------- + . . . . + . . . . /// Create a "concat" AST item. + . . . . pub fn concat(e: Concat) -> Ast { + . . . . Ast::Concat(Box::new(e)) + . . . . } + . . . . + . . . . /// Return the span of this abstract syntax tree. + . . . . pub fn span(&self) -> &Span { + 4,286 ( 0.00%) . . . match *self { + . . . . Ast::Empty(ref span) => span, + . . . . Ast::Flags(ref x) => &x.span, + . . . . Ast::Literal(ref x) => &x.span, + . . . . Ast::Dot(ref span) => span, + . . . . Ast::Assertion(ref x) => &x.span, + . . . . Ast::ClassUnicode(ref x) => &x.span, + . . . . Ast::ClassPerl(ref x) => &x.span, + . . . . Ast::ClassBracketed(ref x) => &x.span, + . . . . Ast::Repetition(ref x) => &x.span, + . . . . Ast::Group(ref x) => &x.span, + . . . . Ast::Alternation(ref x) => &x.span, + . . . . Ast::Concat(ref x) => &x.span, + . . . . } + 172 ( 0.00%) . . . } + . . . . + . . . . /// Return true if and only if this Ast is empty. + . . . . pub fn is_empty(&self) -> bool { + . . . . match *self { + . . . . Ast::Empty(_) => true, + . . . . _ => false, + . . . . } + . . . . } +-- line 583 ---------------------------------------- +-- line 628 ---------------------------------------- + . . . . } + . . . . + . . . . impl Alternation { + . . . . /// Return this alternation as an AST. + . . . . /// + . . . . /// If this alternation contains zero ASTs, then `Ast::empty` is returned. + . . . . /// If this alternation contains exactly 1 AST, then the corresponding AST + . . . . /// is returned. Otherwise, `Ast::alternation` is returned. + 2,048 ( 0.00%) . . . pub fn into_ast(mut self) -> Ast { + 2,048 ( 0.00%) . . . match self.asts.len() { + . . . . 0 => Ast::empty(self.span), + . . . . 1 => self.asts.pop().unwrap(), + . . . . _ => Ast::alternation(self), + . . . . } + 3,072 ( 0.00%) . . . } + . . . . } + . . . . + . . . . /// A concatenation of regular expressions. + . . . . #[derive(Clone, Debug, Eq, PartialEq)] + . . . . #[cfg_attr(feature = "arbitrary", derive(arbitrary::Arbitrary))] + . . . . pub struct Concat { + . . . . /// The span of this concatenation. + . . . . pub span: Span, +-- line 650 ---------------------------------------- +-- line 653 ---------------------------------------- + . . . . } + . . . . + . . . . impl Concat { + . . . . /// Return this concatenation as an AST. + . . . . /// + . . . . /// If this alternation contains zero ASTs, then `Ast::empty` is returned. + . . . . /// If this alternation contains exactly 1 AST, then the corresponding AST + . . . . /// is returned. Otherwise, `Ast::concat` is returned. + 66,812 ( 0.02%) . . . pub fn into_ast(mut self) -> Ast { + 66,812 ( 0.02%) . . . match self.asts.len() { + . . . . 0 => Ast::empty(self.span), + . . . . 1 => self.asts.pop().unwrap(), + . . . . _ => Ast::concat(self), + . . . . } +100,218 ( 0.03%) . . . } + . . . . } + . . . . + . . . . /// A single literal expression. + . . . . /// + . . . . /// A literal corresponds to a single Unicode scalar value. Literals may be + . . . . /// represented in their literal form, e.g., `a` or in their escaped form, + . . . . /// e.g., `\x61`. + . . . . #[derive(Clone, Debug, Eq, PartialEq)] +-- line 675 ---------------------------------------- +-- line 857 ---------------------------------------- + . . . . /// The name given should correspond to the lowercase version of the + . . . . /// variant name. e.g., `cntrl` is the name for `ClassAsciiKind::Cntrl`. + . . . . /// + . . . . /// If no variant with the corresponding name exists, then `None` is + . . . . /// returned. + . . . . pub fn from_name(name: &str) -> Option { + . . . . use self::ClassAsciiKind::*; + . . . . match name { + 769 ( 0.00%) . . . "alnum" => Some(Alnum), + 759 ( 0.00%) . . . "alpha" => Some(Alpha), + 747 ( 0.00%) . . . "ascii" => Some(Ascii), + 747 ( 0.00%) . . . "blank" => Some(Blank), + 513 ( 0.00%) . . . "cntrl" => Some(Cntrl), + 513 ( 0.00%) . . . "digit" => Some(Digit), + . . . . "graph" => Some(Graph), + . . . . "lower" => Some(Lower), + . . . . "print" => Some(Print), + . . . . "punct" => Some(Punct), + . . . . "space" => Some(Space), + . . . . "upper" => Some(Upper), + 2 ( 0.00%) . . . "word" => Some(Word), + . . . . "xdigit" => Some(Xdigit), + . . . . _ => None, + . . . . } + 770 ( 0.00%) . . . } + . . . . } + . . . . + . . . . /// A Unicode character class. + . . . . #[derive(Clone, Debug, Eq, PartialEq)] + . . . . #[cfg_attr(feature = "arbitrary", derive(arbitrary::Arbitrary))] + . . . . pub struct ClassUnicode { + . . . . /// The span of this class. + . . . . pub span: Span, +-- line 889 ---------------------------------------- +-- line 1134 ---------------------------------------- + . . . . Item(ClassSetItem), + . . . . /// A single binary operation (i.e., &&, -- or ~~). + . . . . BinaryOp(ClassSetBinaryOp), + . . . . } + . . . . + . . . . impl ClassSet { + . . . . /// Build a set from a union. + . . . . pub fn union(ast: ClassSetUnion) -> ClassSet { + 25,416 ( 0.01%) . . . ClassSet::Item(ClassSetItem::Union(ast)) + . . . . } + . . . . + . . . . /// Return the span of this character class set. + . . . . pub fn span(&self) -> &Span { + . . . . match *self { + . . . . ClassSet::Item(ref x) => x.span(), + . . . . ClassSet::BinaryOp(ref x) => &x.span, + . . . . } + . . . . } + . . . . + . . . . /// Return true if and only if this class set is empty. + . . . . fn is_empty(&self) -> bool { + 353 ( 0.00%) . . . match *self { + . . . . ClassSet::Item(ClassSetItem::Empty(_)) => true, + . . . . _ => false, + . . . . } + . . . . } + . . . . } + . . . . + . . . . /// A single component of a character class set. + . . . . #[derive(Clone, Debug, Eq, PartialEq)] +-- line 1163 ---------------------------------------- +-- line 1185 ---------------------------------------- + . . . . Bracketed(Box), + . . . . /// A union of items. + . . . . Union(ClassSetUnion), + . . . . } + . . . . + . . . . impl ClassSetItem { + . . . . /// Return the span of this character class set item. + . . . . pub fn span(&self) -> &Span { + 7,513 ( 0.00%) . . . match *self { + . . . . ClassSetItem::Empty(ref span) => span, + . . . . ClassSetItem::Literal(ref x) => &x.span, + . . . . ClassSetItem::Range(ref x) => &x.span, + . . . . ClassSetItem::Ascii(ref x) => &x.span, + . . . . ClassSetItem::Perl(ref x) => &x.span, + . . . . ClassSetItem::Unicode(ref x) => &x.span, + . . . . ClassSetItem::Bracketed(ref x) => &x.span, + . . . . ClassSetItem::Union(ref x) => &x.span, +-- line 1201 ---------------------------------------- +-- line 1243 ---------------------------------------- + . . . . /// position of the span of the item given. If the union is empty, then + . . . . /// the starting position of this union is set to the starting position + . . . . /// of this item. + . . . . /// + . . . . /// In other words, if you only use this method to add items to a union + . . . . /// and you set the spans on each item correctly, then you should never + . . . . /// need to adjust the span of the union directly. + . . . . pub fn push(&mut self, item: ClassSetItem) { + 4,391 ( 0.00%) . . . if self.items.is_empty() { + 11,296 ( 0.00%) . . . self.span.start = item.span().start; + . . . . } + 32,529 ( 0.01%) . . . self.span.end = item.span().end; + . . . . self.items.push(item); + . . . . } + . . . . + . . . . /// Return this union as a character class set item. + . . . . /// + . . . . /// If this union contains zero items, then an empty union is + . . . . /// returned. If this concatenation contains exactly 1 item, then the + . . . . /// corresponding item is returned. Otherwise, ClassSetItem::Union is + . . . . /// returned. + . . . . pub fn into_item(mut self) -> ClassSetItem { + 11,296 ( 0.00%) . . . match self.items.len() { + . . . . 0 => ClassSetItem::Empty(self.span), + . . . . 1 => self.items.pop().unwrap(), + 5,775 ( 0.00%) . . . _ => ClassSetItem::Union(self), + . . . . } + . . . . } + . . . . } + . . . . + . . . . /// A Unicode character class set operation. + . . . . #[derive(Clone, Debug, Eq, PartialEq)] + . . . . #[cfg_attr(feature = "arbitrary", derive(arbitrary::Arbitrary))] + . . . . pub struct ClassSetBinaryOp { +-- line 1276 ---------------------------------------- +-- line 1394 ---------------------------------------- + . . . . } + . . . . + . . . . impl RepetitionRange { + . . . . /// Returns true if and only if this repetition range is valid. + . . . . /// + . . . . /// The only case where a repetition range is invalid is if it is bounded + . . . . /// and its start is greater than its end. + . . . . pub fn is_valid(&self) -> bool { + 688 ( 0.00%) . . . match *self { + . . . . RepetitionRange::Bounded(s, e) if s > e => false, + . . . . _ => true, + . . . . } + . . . . } + . . . . } + . . . . + . . . . /// A grouped regular expression. + . . . . /// +-- line 1410 ---------------------------------------- +-- line 1422 ---------------------------------------- + . . . . /// The regular expression in this group. + . . . . pub ast: Box, + . . . . } + . . . . + . . . . impl Group { + . . . . /// If this group is non-capturing, then this returns the (possibly empty) + . . . . /// set of flags. Otherwise, `None` is returned. + . . . . pub fn flags(&self) -> Option<&Flags> { + 1,386 ( 0.00%) . . . match self.kind { + . . . . GroupKind::NonCapturing(ref flags) => Some(flags), + . . . . _ => None, + . . . . } + . . . . } + . . . . + . . . . /// Returns true if and only if this group is capturing. + . . . . pub fn is_capturing(&self) -> bool { + . . . . match self.kind { +-- line 1438 ---------------------------------------- +-- line 1469 ---------------------------------------- + . . . . /// `(?:a)` and `(?i:a)` + . . . . NonCapturing(Flags), + . . . . } + . . . . + . . . . /// A capture name. + . . . . /// + . . . . /// This corresponds to the name itself between the angle brackets in, e.g., + . . . . /// `(?Pexpr)`. + 4,688 ( 0.00%) . . . #[derive(Clone, Debug, Eq, PartialEq)] + . . . . pub struct CaptureName { + . . . . /// The span of this capture name. + . . . . pub span: Span, + . . . . /// The capture name. + 586 ( 0.00%) . . . pub name: String, + 65,930 ( 0.02%) 69 ( 0.01%) . . => /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/alloc/src/string.rs:::clone (586x) + . . . . /// The capture index. + . . . . pub index: u32, + . . . . } + . . . . + . . . . #[cfg(feature = "arbitrary")] + . . . . impl arbitrary::Arbitrary<'_> for CaptureName { + . . . . fn arbitrary( + . . . . u: &mut arbitrary::Unstructured, +-- line 1490 ---------------------------------------- +-- line 1539 ---------------------------------------- + . . . . impl Flags { + . . . . /// Add the given item to this sequence of flags. + . . . . /// + . . . . /// If the item was added successfully, then `None` is returned. If the + . . . . /// given item is a duplicate, then `Some(i)` is returned, where + . . . . /// `items[i].kind == item.kind`. + . . . . pub fn add_item(&mut self, item: FlagsItem) -> Option { + . . . . for (i, x) in self.items.iter().enumerate() { + 10 ( 0.00%) . . . if x.kind == item.kind { + . . . . return Some(i); + . . . . } + . . . . } + . . . . self.items.push(item); + . . . . None + . . . . } + . . . . + . . . . /// Returns the state of the given flag in this set. +-- line 1555 ---------------------------------------- +-- line 1559 ---------------------------------------- + . . . . /// + . . . . /// If the given flag is in the set and is not negated, then `Some(true)` + . . . . /// is returned. + . . . . /// + . . . . /// Otherwise, `None` is returned. + . . . . pub fn flag_state(&self, flag: Flag) -> Option { + . . . . let mut negated = false; + . . . . for x in &self.items { + 240 ( 0.00%) . . . match x.kind { + . . . . FlagsItemKind::Negation => { + . . . . negated = true; + . . . . } + . . . . FlagsItemKind::Flag(ref xflag) if xflag == &flag => { + . . . . return Some(!negated); + . . . . } + . . . . _ => {} + . . . . } +-- line 1575 ---------------------------------------- +-- line 1584 ---------------------------------------- + . . . . pub struct FlagsItem { + . . . . /// The span of this item. + . . . . pub span: Span, + . . . . /// The kind of this item. + . . . . pub kind: FlagsItemKind, + . . . . } + . . . . + . . . . /// The kind of an item in a group of flags. + 50 ( 0.00%) . . . #[derive(Clone, Debug, Eq, PartialEq)] + . . . . #[cfg_attr(feature = "arbitrary", derive(arbitrary::Arbitrary))] + . . . . pub enum FlagsItemKind { + . . . . /// A negation operator applied to all subsequent flags in the enclosing + . . . . /// group. + . . . . Negation, + . . . . /// A single flag in a group. + . . . . Flag(Flag), + . . . . } +-- line 1600 ---------------------------------------- +-- line 1627 ---------------------------------------- + . . . . CRLF, + . . . . /// `x` + . . . . IgnoreWhitespace, + . . . . } + . . . . + . . . . /// A custom `Drop` impl is used for `Ast` such that it uses constant stack + . . . . /// space but heap space proportional to the depth of the `Ast`. + . . . . impl Drop for Ast { +522,256 ( 0.15%) . . . fn drop(&mut self) { + . . . . use core::mem; + . . . . +223,824 ( 0.06%) . . . match *self { + . . . . Ast::Empty(_) + . . . . | Ast::Flags(_) + . . . . | Ast::Literal(_) + . . . . | Ast::Dot(_) + . . . . | Ast::Assertion(_) + . . . . | Ast::ClassUnicode(_) + . . . . | Ast::ClassPerl(_) + . . . . // Bracketed classes are recursive, they get their own Drop impl. + . . . . | Ast::ClassBracketed(_) => return, + 3,770 ( 0.00%) . . . Ast::Repetition(ref x) if !x.ast.has_subexprs() => return, + 1,386 ( 0.00%) . . . Ast::Group(ref x) if !x.ast.has_subexprs() => return, + . . . . Ast::Alternation(ref x) if x.asts.is_empty() => return, + . . . . Ast::Concat(ref x) if x.asts.is_empty() => return, + . . . . _ => {} + . . . . } + . . . . + . . . . let empty_span = || Span::splat(Position::new(0, 0, 0)); + . . . . let empty_ast = || Ast::empty(empty_span()); + 243 ( 0.00%) . . . let mut stack = vec![mem::replace(self, empty_ast())]; +142,512 ( 0.04%) . . . while let Some(mut ast) = stack.pop() { +142,512 ( 0.04%) . . . match ast { + . . . . Ast::Empty(_) + . . . . | Ast::Flags(_) + . . . . | Ast::Literal(_) + . . . . | Ast::Dot(_) + . . . . | Ast::Assertion(_) + . . . . | Ast::ClassUnicode(_) + . . . . | Ast::ClassPerl(_) + . . . . // Bracketed classes are recursive, so they get their own Drop + . . . . // impl. + . . . . | Ast::ClassBracketed(_) => {} + . . . . Ast::Repetition(ref mut x) => { + 1,885 ( 0.00%) . . . stack.push(mem::replace(&mut x.ast, empty_ast())); + . . . . } + . . . . Ast::Group(ref mut x) => { + 693 ( 0.00%) . . . stack.push(mem::replace(&mut x.ast, empty_ast())); + . . . . } + . . . . Ast::Alternation(ref mut x) => { + 1,024 ( 0.00%) . . . stack.extend(x.asts.drain(..)); + . . . . } + . . . . Ast::Concat(ref mut x) => { + 31,572 ( 0.01%) . . . stack.extend(x.asts.drain(..)); + . . . . } + . . . . } +142,512 ( 0.04%) . . . } +22,055,897 ( 6.37%) 100,995 (12.47%) . . => /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/core/src/ptr/mod.rs:core::ptr::drop_in_place'2 (71,256x) +596,864 ( 0.17%) . . . } + . . . . } + . . . . + . . . . /// A custom `Drop` impl is used for `ClassSet` such that it uses constant + . . . . /// stack space but heap space proportional to the depth of the `ClassSet`. + . . . . impl Drop for ClassSet { + 58,842 ( 0.02%) . . . fn drop(&mut self) { + . . . . use core::mem; + . . . . + 40,996 ( 0.01%) . . . match *self { + . . . . ClassSet::Item(ref item) => match *item { + . . . . ClassSetItem::Empty(_) + . . . . | ClassSetItem::Literal(_) + . . . . | ClassSetItem::Range(_) + . . . . | ClassSetItem::Ascii(_) + . . . . | ClassSetItem::Unicode(_) + . . . . | ClassSetItem::Perl(_) => return, + . . . . ClassSetItem::Bracketed(ref x) => { + 141 ( 0.00%) . . . if x.kind.is_empty() { + . . . . return; + . . . . } + . . . . } + . . . . ClassSetItem::Union(ref x) => { + . . . . if x.items.is_empty() { + . . . . return; + . . . . } + . . . . } +-- line 1710 ---------------------------------------- +-- line 1713 ---------------------------------------- + . . . . if op.lhs.is_empty() && op.rhs.is_empty() { + . . . . return; + . . . . } + . . . . } + . . . . } + . . . . + . . . . let empty_span = || Span::splat(Position::new(0, 0, 0)); + . . . . let empty_set = || ClassSet::Item(ClassSetItem::Empty(empty_span())); + 595 ( 0.00%) . . . let mut stack = vec![mem::replace(self, empty_set())]; + 19,306 ( 0.01%) . . . while let Some(mut set) = stack.pop() { + 82,740 ( 0.02%) . . . => ./string/../sysdeps/x86_64/multiarch/memmove-vec-unaligned-erms.S:__memcpy_avx_unaligned_erms (2,758x) + 7,162 ( 0.00%) . . . match set { + . . . . ClassSet::Item(ref mut item) => match *item { + . . . . ClassSetItem::Empty(_) + . . . . | ClassSetItem::Literal(_) + . . . . | ClassSetItem::Range(_) + . . . . | ClassSetItem::Ascii(_) + . . . . | ClassSetItem::Unicode(_) + . . . . | ClassSetItem::Perl(_) => {} + . . . . ClassSetItem::Bracketed(ref mut x) => { + 142 ( 0.00%) . . . stack.push(mem::replace(&mut x.kind, empty_set())); + . . . . } + . . . . ClassSetItem::Union(ref mut x) => { + . . . . stack.extend(x.items.drain(..).map(ClassSet::Item)); + . . . . } + . . . . }, + . . . . ClassSet::BinaryOp(ref mut op) => { + . . . . stack.push(mem::replace(&mut op.lhs, empty_set())); + . . . . stack.push(mem::replace(&mut op.rhs, empty_set())); + . . . . } + . . . . } + . . . . } + 67,248 ( 0.02%) . . . } + . . . . } + . . . . + . . . . #[cfg(test)] + . . . . mod tests { + . . . . use super::*; + . . . . + . . . . // We use a thread with an explicit stack size to test that our destructor + . . . . // for Ast can handle arbitrarily sized expressions in constant stack +-- line 1752 ---------------------------------------- + +385,603 ( 0.11%) . . . + +-------------------------------------------------------------------------------- +-- Auto-annotated source: /home/.cargo/registry/src/index.crates.io-6f17d22bba15001f/aho-corasick-1.1.2/src/util/prefilter.rs +-------------------------------------------------------------------------------- +Ir Ge sysCount sysTime + +-- line 131 ---------------------------------------- + . . . . } + . . . . + . . . . impl Builder { + . . . . /// Create a new builder for constructing the best possible prefilter. + . . . . pub(crate) fn new(kind: MatchKind) -> Builder { + . . . . let pbuilder = kind + . . . . .as_packed() + . . . . .map(|kind| packed::Config::new().match_kind(kind).builder()); + 384 ( 0.00%) . . . Builder { + 1,728 ( 0.00%) . . . => ./string/../sysdeps/x86_64/multiarch/memset-vec-unaligned-erms.S:__memset_avx2_unaligned_erms (48x) + . . . . count: 0, + . . . . ascii_case_insensitive: false, + . . . . start_bytes: StartBytesBuilder::new(), + . . . . rare_bytes: RareBytesBuilder::new(), + . . . . memmem: MemmemBuilder::default(), + 96 ( 0.00%) . . . packed: pbuilder, + . . . . enabled: true, + . . . . } + . . . . } + . . . . + . . . . /// Enable ASCII case insensitivity. When set, byte strings added to this + . . . . /// builder will be interpreted without respect to ASCII case. + . . . . pub(crate) fn ascii_case_insensitive(mut self, yes: bool) -> Builder { + . . . . self.ascii_case_insensitive = yes; + . . . . self.start_bytes = self.start_bytes.ascii_case_insensitive(yes); + . . . . self.rare_bytes = self.rare_bytes.ascii_case_insensitive(yes); + 288 ( 0.00%) . . . self + 3,120 ( 0.00%) . . . => ./string/../sysdeps/x86_64/multiarch/memmove-vec-unaligned-erms.S:__memcpy_avx_unaligned_erms (48x) + . . . . } + . . . . + . . . . /// Return a prefilter suitable for quickly finding potential matches. + . . . . /// + . . . . /// All patterns added to an Aho-Corasick automaton should be added to this + . . . . /// builder before attempting to construct the prefilter. + 480 ( 0.00%) . . . pub(crate) fn build(&self) -> Option { + 96 ( 0.00%) . . . if !self.enabled { + . . . . debug!("prefilter not enabled, skipping"); + . . . . return None; + . . . . } + . . . . // If we only have one pattern, then deferring to memmem is always + . . . . // the best choice. This is kind of a weird case, because, well, why + . . . . // use Aho-Corasick if you only have one pattern? But maybe you don't + . . . . // know exactly how many patterns you'll get up front, and you need to + . . . . // support the option of multiple patterns. So instead of relying on + . . . . // the caller to branch and use memmem explicitly, we just do it for + . . . . // them. + 240 ( 0.00%) . . . if !self.ascii_case_insensitive { + . . . . if let Some(pre) = self.memmem.build() { + . . . . debug!("using memmem prefilter"); + . . . . return Some(pre); + . . . . } + . . . . } + 192 ( 0.00%) . . . let (packed, patlen, minlen) = if self.ascii_case_insensitive { + . . . . (None, usize::MAX, 0) + . . . . } else { + 48 ( 0.00%) . . . let patlen = self.packed.as_ref().map_or(usize::MAX, |p| p.len()); + . . . . let minlen = self.packed.as_ref().map_or(0, |p| p.minimum_len()); + . . . . let packed = + 48 ( 0.00%) . . . self.packed.as_ref().and_then(|b| b.build()).map(|s| { + 1,152 ( 0.00%) . . . => /home/.cargo/registry/src/index.crates.io-6f17d22bba15001f/aho-corasick-1.1.2/src/packed/api.rs:aho_corasick::packed::api::Builder::build (48x) + . . . . let memory_usage = s.memory_usage(); + . . . . debug!( + . . . . "built packed prefilter (len: {}, \ + . . . . minimum pattern len: {}, memory usage: {}) \ + . . . . for consideration", + . . . . patlen, minlen, memory_usage, + . . . . ); + . . . . Prefilter { finder: Arc::new(Packed(s)), memory_usage } + . . . . }); + . . . . (packed, patlen, minlen) + . . . . }; + 576 ( 0.00%) . . . match (self.start_bytes.build(), self.rare_bytes.build()) { + . . . . // If we could build both start and rare prefilters, then there are + . . . . // a few cases in which we'd want to use the start-byte prefilter + . . . . // over the rare-byte prefilter, since the former has lower + . . . . // overhead. + . . . . (prestart @ Some(_), prerare @ Some(_)) => { + . . . . debug!( + . . . . "both start (len={}, rank={}) and \ + . . . . rare (len={}, rank={}) byte prefilters \ +-- line 207 ---------------------------------------- +-- line 281 ---------------------------------------- + . . . . return packed; + . . . . } + . . . . debug!( + . . . . "have rare byte prefilter but not start byte prefilter, \ + . . . . so using rare byte prefilter", + . . . . ); + . . . . prerare + . . . . } + 48 ( 0.00%) . . . (None, None) if self.ascii_case_insensitive => { + . . . . debug!( + . . . . "no start or rare byte prefilter and ASCII case \ + . . . . insensitivity was enabled, so skipping prefilter", + . . . . ); + . . . . None + . . . . } + . . . . (None, None) => { + . . . . if packed.is_some() { + . . . . debug!("falling back to packed prefilter"); + . . . . } else { + . . . . debug!("no prefilter available"); + . . . . } + 192 ( 0.00%) . . . packed + . . . . } + . . . . } + 432 ( 0.00%) . . . } + . . . . + . . . . /// Add a literal string to this prefilter builder. + . . . . pub(crate) fn add(&mut self, bytes: &[u8]) { + . . . . if bytes.is_empty() { + . . . . self.enabled = false; + . . . . } + . . . . if !self.enabled { + . . . . return; +-- line 313 ---------------------------------------- +-- line 343 ---------------------------------------- + . . . . /// The singular pattern to search for. This is only set when count==1. + . . . . one: Option>, + . . . . } + . . . . + . . . . impl MemmemBuilder { + . . . . fn build(&self) -> Option { + . . . . #[cfg(all(feature = "std", feature = "perf-literal"))] + . . . . fn imp(builder: &MemmemBuilder) -> Option { + 48 ( 0.00%) . . . let pattern = builder.one.as_ref()?; + . . . . assert_eq!(1, builder.count); + . . . . let finder = Arc::new(Memmem( + . . . . memchr::memmem::Finder::new(pattern).into_owned(), + . . . . )); + . . . . let memory_usage = pattern.len(); + . . . . Some(Prefilter { finder, memory_usage }) + . . . . } + . . . . +-- line 359 ---------------------------------------- +-- line 538 ---------------------------------------- + . . . . /// Build the rare bytes prefilter. + . . . . /// + . . . . /// If there are more than 3 distinct rare bytes found, or if heuristics + . . . . /// otherwise determine that this prefilter should not be used, then `None` + . . . . /// is returned. + . . . . fn build(&self) -> Option { + . . . . #[cfg(feature = "perf-literal")] + . . . . fn imp(builder: &RareBytesBuilder) -> Option { + 240 ( 0.00%) . . . if !builder.available || builder.count > 3 { + . . . . return None; + . . . . } + 96 ( 0.00%) . . . let (mut bytes, mut len) = ([0; 3], 0); + . . . . for b in 0..=255 { +24,624 ( 0.01%) . . . if builder.rare_set.contains(b) { + . . . . bytes[len] = b as u8; + . . . . len += 1; + . . . . } + . . . . } + 96 ( 0.00%) . . . let finder: Arc = match len { + . . . . 0 => return None, + . . . . 1 => Arc::new(RareBytesOne { + . . . . byte1: bytes[0], + . . . . offset: builder.byte_offsets.set[bytes[0] as usize], + . . . . }), + . . . . 2 => Arc::new(RareBytesTwo { + . . . . offsets: builder.byte_offsets, + . . . . byte1: bytes[0], +-- line 564 ---------------------------------------- +-- line 777 ---------------------------------------- + . . . . /// Build the starting bytes prefilter. + . . . . /// + . . . . /// If there are more than 3 distinct starting bytes, or if heuristics + . . . . /// otherwise determine that this prefilter should not be used, then `None` + . . . . /// is returned. + . . . . fn build(&self) -> Option { + . . . . #[cfg(feature = "perf-literal")] + . . . . fn imp(builder: &StartBytesBuilder) -> Option { + 240 ( 0.00%) . . . if builder.count > 3 { + . . . . return None; + . . . . } + . . . . let (mut bytes, mut len) = ([0; 3], 0); + . . . . for b in 0..256 { +30,720 ( 0.01%) . . . if !builder.byteset[b] { + . . . . continue; + . . . . } + . . . . // We don't handle non-ASCII bytes for now. Getting non-ASCII + . . . . // bytes right is trickier, since we generally don't want to put + . . . . // a leading UTF-8 code unit into a prefilter that isn't ASCII, + . . . . // since they can frequently. Instead, it would be better to use a + . . . . // continuation byte, but this requires more sophisticated analysis + . . . . // of the automaton and a richer prefilter API. +-- line 798 ---------------------------------------- + +13,152 ( 0.00%) . . . + +-------------------------------------------------------------------------------- +-- Auto-annotated source: /home/.cargo/registry/src/index.crates.io-6f17d22bba15001f/aho-corasick-1.1.2/src/util/search.rs +-------------------------------------------------------------------------------- +Ir Ge sysCount sysTime + +-- line 800 ---------------------------------------- + . . . . /// ``` + . . . . /// use aho_corasick::Anchored; + . . . . /// + . . . . /// assert!(!Anchored::No.is_anchored()); + . . . . /// assert!(Anchored::Yes.is_anchored()); + . . . . /// ``` + . . . . #[inline] + . . . . pub fn is_anchored(&self) -> bool { +89,172 ( 0.03%) . . . matches!(*self, Anchored::Yes) + . . . . } + . . . . } + . . . . + . . . . /// A representation of a match reported by an Aho-Corasick searcher. + . . . . /// + . . . . /// A match has two essential pieces of information: the [`PatternID`] that + . . . . /// matches, and the [`Span`] of the match in a haystack. + . . . . /// +-- line 816 ---------------------------------------- +-- line 851 ---------------------------------------- + . . . . /// let m = Match::new(PatternID::ZERO, 5..10); + . . . . /// assert_eq!(0, m.pattern().as_usize()); + . . . . /// assert_eq!(5, m.start()); + . . . . /// assert_eq!(10, m.end()); + . . . . /// ``` + . . . . #[inline] + . . . . pub fn new>(pattern: PatternID, span: S) -> Match { + . . . . let span = span.into(); + 2 ( 0.00%) . . . assert!(span.start <= span.end, "invalid match span"); + . . . . Match { pattern, span } + . . . . } + . . . . + . . . . /// Create a new match from a pattern ID and a byte offset span. + . . . . /// + . . . . /// This constructor is generic over how a span is provided. While + . . . . /// a [`Span`] may be given directly, one may also provide a + . . . . /// `std::ops::Range`. +-- line 867 ---------------------------------------- +-- line 1083 ---------------------------------------- + . . . . impl MatchKind { + . . . . #[inline] + . . . . pub(crate) fn is_standard(&self) -> bool { + . . . . matches!(*self, MatchKind::Standard) + . . . . } + . . . . + . . . . #[inline] + . . . . pub(crate) fn is_leftmost(&self) -> bool { + 96 ( 0.00%) . . . matches!(*self, MatchKind::LeftmostFirst | MatchKind::LeftmostLongest) + . . . . } + . . . . + . . . . #[inline] + . . . . pub(crate) fn is_leftmost_first(&self) -> bool { + . . . . matches!(*self, MatchKind::LeftmostFirst) + . . . . } + . . . . + . . . . /// Convert this match kind into a packed match kind. If this match kind + . . . . /// corresponds to standard semantics, then this returns None, since + . . . . /// packed searching does not support standard semantics. + . . . . #[inline] + . . . . pub(crate) fn as_packed(&self) -> Option { + 144 ( 0.00%) . . . match *self { + . . . . MatchKind::Standard => None, + . . . . MatchKind::LeftmostFirst => { + . . . . Some(crate::packed::MatchKind::LeftmostFirst) + . . . . } + . . . . MatchKind::LeftmostLongest => { + . . . . Some(crate::packed::MatchKind::LeftmostLongest) + . . . . } + . . . . } +-- line 1112 ---------------------------------------- + + 48 ( 0.00%) . . . + +-------------------------------------------------------------------------------- +-- Auto-annotated source: /home/.cargo/registry/src/index.crates.io-6f17d22bba15001f/aho-corasick-1.1.2/src/packed/pattern.rs +-------------------------------------------------------------------------------- +Ir Ge sysCount sysTime + +-- line 11 ---------------------------------------- + . . . . /// + . . . . /// This collection of patterns is what is passed around to both execute + . . . . /// searches and to construct the searchers themselves. Namely, this permits + . . . . /// searches to avoid copying all of the patterns, and allows us to keep only + . . . . /// one copy throughout all packed searchers. + . . . . /// + . . . . /// Note that this collection is not a set. The same pattern can appear more + . . . . /// than once. + 240 ( 0.00%) . . . #[derive(Clone, Debug)] + . . . . pub(crate) struct Patterns { + . . . . /// The match semantics supported by this collection of patterns. + . . . . /// + . . . . /// The match semantics determines the order of the iterator over patterns. + . . . . /// For leftmost-first, patterns are provided in the same order as were + . . . . /// provided by the caller. For leftmost-longest, patterns are provided in + . . . . /// descending order of length, with ties broken by the order in which they + . . . . /// were provided by the caller. + . . . . kind: MatchKind, + . . . . /// The collection of patterns, indexed by their identifier. + 144 ( 0.00%) . . . by_id: Vec>, +413,153 ( 0.12%) 2,724 ( 0.34%) . . => /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/alloc/src/vec/mod.rs: as core::clone::Clone>::clone (48x) + . . . . /// The order of patterns defined for iteration, given by pattern + . . . . /// identifiers. The order of `by_id` and `order` is always the same for + . . . . /// leftmost-first semantics, but may be different for leftmost-longest + . . . . /// semantics. + . . . . order: Vec, + . . . . /// The length of the smallest pattern, in bytes. + . . . . minimum_len: usize, + . . . . /// The total number of pattern bytes across the entire collection. This +-- line 38 ---------------------------------------- +-- line 50 ---------------------------------------- + . . . . /// Create a new collection of patterns for the given match semantics. The + . . . . /// ID of each pattern is the index of the pattern at which it occurs in + . . . . /// the `by_id` slice. + . . . . /// + . . . . /// If any of the patterns in the slice given are empty, then this panics. + . . . . /// Similarly, if the number of patterns given is zero, then this also + . . . . /// panics. + . . . . pub(crate) fn new() -> Patterns { + 576 ( 0.00%) . . . Patterns { + . . . . kind: MatchKind::default(), + . . . . by_id: vec![], + . . . . order: vec![], + . . . . minimum_len: usize::MAX, + . . . . total_pattern_bytes: 0, + . . . . } + . . . . } + . . . . + . . . . /// Add a pattern to this collection. + . . . . /// + . . . . /// This panics if the pattern given is empty. +6,970 ( 0.00%) . . . pub(crate) fn add(&mut self, bytes: &[u8]) { +1,394 ( 0.00%) . . . assert!(!bytes.is_empty()); +2,788 ( 0.00%) . . . assert!(self.by_id.len() <= u16::MAX as usize); + . . . . + . . . . let id = PatternID::new(self.by_id.len()).unwrap(); + 180 ( 0.00%) . . . self.order.push(id); + . . . . self.by_id.push(bytes.to_vec()); +2,788 ( 0.00%) . . . self.minimum_len = cmp::min(self.minimum_len, bytes.len()); +1,394 ( 0.00%) . . . self.total_pattern_bytes += bytes.len(); +8,364 ( 0.00%) . . . } + . . . . + . . . . /// Set the match kind semantics for this collection of patterns. + . . . . /// + . . . . /// If the kind is not set, then the default is leftmost-first. + . . . . pub(crate) fn set_match_kind(&mut self, kind: MatchKind) { + 48 ( 0.00%) . . . self.kind = kind; + 48 ( 0.00%) . . . match self.kind { + . . . . MatchKind::LeftmostFirst => { + . . . . self.order.sort(); + . . . . } + . . . . MatchKind::LeftmostLongest => { + . . . . let (order, by_id) = (&mut self.order, &mut self.by_id); + . . . . order.sort_by(|&id1, &id2| { + . . . . by_id[id1].len().cmp(&by_id[id2].len()).reverse() + . . . . }); +-- line 94 ---------------------------------------- +-- line 96 ---------------------------------------- + . . . . } + . . . . } + . . . . + . . . . /// Return the number of patterns in this collection. + . . . . /// + . . . . /// This is guaranteed to be greater than zero. + . . . . pub(crate) fn len(&self) -> usize { + . . . . self.by_id.len() +2,788 ( 0.00%) . . . } + . . . . + . . . . /// Returns true if and only if this collection of patterns is empty. + . . . . pub(crate) fn is_empty(&self) -> bool { + . . . . self.len() == 0 + . . . . } + . . . . + . . . . /// Returns the approximate total amount of heap used by these patterns, in + . . . . /// units of bytes. +-- line 112 ---------------------------------------- +-- line 124 ---------------------------------------- + . . . . self.order.clear(); + . . . . self.minimum_len = usize::MAX; + . . . . } + . . . . + . . . . /// Returns the length, in bytes, of the smallest pattern. + . . . . /// + . . . . /// This is guaranteed to be at least one. + . . . . pub(crate) fn minimum_len(&self) -> usize { +1,285 ( 0.00%) . . . self.minimum_len + . . . . } + . . . . + . . . . /// Returns the match semantics used by these patterns. + . . . . pub(crate) fn match_kind(&self) -> &MatchKind { + . . . . &self.kind + . . . . } + . . . . + . . . . /// Return the pattern with the given identifier. If such a pattern does +-- line 140 ---------------------------------------- +-- line 189 ---------------------------------------- + . . . . patterns: &'p Patterns, + . . . . i: usize, + . . . . } + . . . . + . . . . impl<'p> Iterator for PatternIter<'p> { + . . . . type Item = (PatternID, Pattern<'p>); + . . . . + . . . . fn next(&mut self) -> Option<(PatternID, Pattern<'p>)> { +5,166 ( 0.00%) . . . if self.i >= self.patterns.len() { + . . . . return None; + . . . . } +7,434 ( 0.00%) . . . let id = self.patterns.order[self.i]; + . . . . let p = self.patterns.get(id); + . . . . self.i += 1; + . . . . Some((id, p)) + . . . . } + . . . . } + . . . . + . . . . /// A pattern that is used in packed searching. + . . . . #[derive(Clone)] +-- line 208 ---------------------------------------- +-- line 225 ---------------------------------------- + . . . . /// Returns the bytes of this pattern. + . . . . pub(crate) fn bytes(&self) -> &[u8] { + . . . . &self.0 + . . . . } + . . . . + . . . . /// Returns the first `len` low nybbles from this pattern. If this pattern + . . . . /// is shorter than `len`, then this panics. + . . . . pub(crate) fn low_nybbles(&self, len: usize) -> Box<[u8]> { +1,084 ( 0.00%) . . . let mut nybs = vec![0; len].into_boxed_slice(); + . . . . for (i, byte) in self.bytes().iter().take(len).enumerate() { +3,072 ( 0.00%) . . . nybs[i] = byte & 0xF; + . . . . } + . . . . nybs + . . . . } + . . . . + . . . . /// Returns true if this pattern is a prefix of the given bytes. + . . . . #[inline(always)] + . . . . pub(crate) fn is_prefix(&self, bytes: &[u8]) -> bool { + . . . . is_prefix(bytes, self.bytes()) +-- line 243 ---------------------------------------- +-- line 264 ---------------------------------------- + . . . . #[inline(always)] + . . . . pub(crate) unsafe fn is_prefix_raw( + . . . . &self, + . . . . start: *const u8, + . . . . end: *const u8, + . . . . ) -> bool { + . . . . let patlen = self.bytes().len(); + . . . . let haylen = end.distance(start); + 100 ( 0.00%) . . . if patlen > haylen { + . . . . return false; + . . . . } + . . . . // SAFETY: We've checked that the haystack has length at least equal + . . . . // to this pattern. All other safety concerns are the responsibility + . . . . // of the caller. + . . . . is_equal_raw(start, self.bytes().as_ptr(), patlen) + . . . . } + . . . . } +-- line 280 ---------------------------------------- +-- line 365 ---------------------------------------- + . . . . /// * The distance being in bounds must not rely on "wrapping around" the + . . . . /// address space. + . . . . #[inline(always)] + . . . . unsafe fn is_equal_raw(mut x: *const u8, mut y: *const u8, n: usize) -> bool { + . . . . // If we don't have enough bytes to do 4-byte at a time loads, then + . . . . // handle each possible length specially. Note that I used to have a + . . . . // byte-at-a-time loop here and that turned out to be quite a bit slower + . . . . // for the memmem/pathological/defeat-simple-vector-alphabet benchmark. + 100 ( 0.00%) . . . if n < 4 { + 50 ( 0.00%) . . . return match n { + . . . . 0 => true, + . . . . 1 => x.read() == y.read(), + . . . . 2 => { + . . . . x.cast::().read_unaligned() + . . . . == y.cast::().read_unaligned() + . . . . } + . . . . // I also tried copy_nonoverlapping here and it looks like the + . . . . // codegen is the same. +-- line 382 ---------------------------------------- + +7,395 ( 0.00%) . . . + +-------------------------------------------------------------------------------- +-- Auto-annotated source: /home/.cargo/registry/src/index.crates.io-6f17d22bba15001f/aho-corasick-1.1.2/src/util/alphabet.rs +-------------------------------------------------------------------------------- +Ir Ge sysCount sysTime + + . . . . use crate::util::int::Usize; + . . . . + . . . . /// A representation of byte oriented equivalence classes. + . . . . /// + . . . . /// This is used in finite state machines to reduce the size of the transition + . . . . /// table. This can have a particularly large impact not only on the total size + . . . . /// of an FSM, but also on FSM build times because it reduces the number of + . . . . /// transitions that need to be visited/set. + 1,536 ( 0.00%) . . . #[derive(Clone, Copy)] + . . . . pub(crate) struct ByteClasses([u8; 256]); + . . . . + . . . . impl ByteClasses { + . . . . /// Creates a new set of equivalence classes where all bytes are mapped to + . . . . /// the same class. + . . . . pub(crate) fn empty() -> ByteClasses { + . . . . ByteClasses([0; 256]) + . . . . } +-- line 17 ---------------------------------------- +-- line 24 ---------------------------------------- + . . . . classes.set(b, b); + . . . . } + . . . . classes + . . . . } + . . . . + . . . . /// Set the equivalence class for the given byte. + . . . . #[inline] + . . . . pub(crate) fn set(&mut self, byte: u8, class: u8) { + 13,296 ( 0.00%) . . . self.0[usize::from(byte)] = class; + . . . . } + . . . . + . . . . /// Get the equivalence class for the given byte. + . . . . #[inline] + . . . . pub(crate) fn get(&self, byte: u8) -> u8 { +696,714 ( 0.20%) . . . self.0[usize::from(byte)] + . . . . } + . . . . + . . . . /// Return the total number of elements in the alphabet represented by + . . . . /// these equivalence classes. Equivalently, this returns the total number + . . . . /// of equivalence classes. + . . . . #[inline] + . . . . pub(crate) fn alphabet_len(&self) -> usize { + . . . . // Add one since the number of equivalence classes is one bigger than + . . . . // the last one. + 5,068 ( 0.00%) . . . usize::from(self.0[255]) + 1 + . . . . } + . . . . + . . . . /// Returns the stride, as a base-2 exponent, required for these + . . . . /// equivalence classes. + . . . . /// + . . . . /// The stride is always the smallest power of 2 that is greater than or + . . . . /// equal to the alphabet length. This is done so that converting between + . . . . /// state IDs and indices can be done with shifts alone, which is much +-- line 56 ---------------------------------------- +-- line 60 ---------------------------------------- + . . . . let zeros = self.alphabet_len().next_power_of_two().trailing_zeros(); + . . . . usize::try_from(zeros).unwrap() + . . . . } + . . . . + . . . . /// Returns the stride for these equivalence classes, which corresponds + . . . . /// to the smallest power of 2 greater than or equal to the number of + . . . . /// equivalence classes. + . . . . pub(crate) fn stride(&self) -> usize { + 144 ( 0.00%) . . . 1 << self.stride2() + . . . . } + . . . . + . . . . /// Returns true if and only if every byte in this class maps to its own + . . . . /// equivalence class. Equivalently, there are 257 equivalence classes + . . . . /// and each class contains exactly one byte (plus the special EOI class). + . . . . #[inline] + . . . . pub(crate) fn is_singleton(&self) -> bool { + . . . . self.alphabet_len() == 256 +-- line 76 ---------------------------------------- +-- line 216 ---------------------------------------- + . . . . /// Create a new set of byte classes where all bytes are part of the same + . . . . /// equivalence class. + . . . . pub(crate) fn empty() -> Self { + . . . . ByteClassSet(ByteSet::empty()) + . . . . } + . . . . + . . . . /// Indicate the the range of byte given (inclusive) can discriminate a + . . . . /// match between it and all other bytes outside of the range. + 3,680 ( 0.00%) . . . pub(crate) fn set_range(&mut self, start: u8, end: u8) { + . . . . debug_assert!(start <= end); + 7,360 ( 0.00%) . . . if start > 0 { + 3,680 ( 0.00%) . . . self.0.add(start - 1); + . . . . } + . . . . self.0.add(end); + 3,680 ( 0.00%) . . . } + . . . . + . . . . /// Convert this boolean set to a map that maps all byte values to their + . . . . /// corresponding equivalence class. The last mapping indicates the largest + . . . . /// equivalence class identifier (which is never bigger than 255). + 48 ( 0.00%) . . . pub(crate) fn byte_classes(&self) -> ByteClasses { + . . . . let mut classes = ByteClasses::empty(); + . . . . let mut class = 0u8; + . . . . let mut b = 0u8; + . . . . loop { + . . . . classes.set(b, class); + 24,480 ( 0.01%) . . . if b == 255 { + . . . . break; + . . . . } + 12,240 ( 0.00%) . . . if self.0.contains(b) { + . . . . class = class.checked_add(1).unwrap(); + . . . . } + . . . . b = b.checked_add(1).unwrap(); + . . . . } + . . . . classes + 144 ( 0.00%) . . . } + . . . . } + . . . . + . . . . /// A simple set of bytes that is reasonably cheap to copy and allocation free. + . . . . #[derive(Clone, Copy, Debug, Default, Eq, PartialEq)] + . . . . pub(crate) struct ByteSet { + . . . . bits: BitSet, + . . . . } + . . . . +-- line 258 ---------------------------------------- +-- line 259 ---------------------------------------- + . . . . /// The representation of a byte set. Split out so that we can define a + . . . . /// convenient Debug impl for it while keeping "ByteSet" in the output. + . . . . #[derive(Clone, Copy, Default, Eq, PartialEq)] + . . . . struct BitSet([u128; 2]); + . . . . + . . . . impl ByteSet { + . . . . /// Create an empty set of bytes. + . . . . pub(crate) fn empty() -> ByteSet { + 96 ( 0.00%) . . . ByteSet { bits: BitSet([0; 2]) } + . . . . } + . . . . + . . . . /// Add a byte to this set. + . . . . /// + . . . . /// If the given byte already belongs to this set, then this is a no-op. + . . . . pub(crate) fn add(&mut self, byte: u8) { + 11,040 ( 0.00%) . . . let bucket = byte / 128; + . . . . let bit = byte % 128; + 73,600 ( 0.02%) . . . self.bits.0[usize::from(bucket)] |= 1 << bit; + . . . . } + . . . . + . . . . /// Return true if and only if the given byte is in this set. + . . . . pub(crate) fn contains(&self, byte: u8) -> bool { + 24,480 ( 0.01%) . . . let bucket = byte / 128; + . . . . let bit = byte % 128; +294,144 ( 0.08%) . . . self.bits.0[usize::from(bucket)] & (1 << bit) > 0 + . . . . } + . . . . } + . . . . + . . . . impl core::fmt::Debug for BitSet { + . . . . fn fmt(&self, f: &mut core::fmt::Formatter) -> core::fmt::Result { + . . . . let mut fmtd = f.debug_set(); + . . . . for b in 0u8..=255 { + . . . . if (ByteSet { bits: *self }).contains(b) { +-- line 291 ---------------------------------------- + +526,827 ( 0.15%) . . . + +-------------------------------------------------------------------------------- +-- Auto-annotated source: /home/.cargo/registry/src/index.crates.io-6f17d22bba15001f/regex-syntax-0.8.2/src/hir/interval.rs +-------------------------------------------------------------------------------- +Ir Ge sysCount sysTime + +-- line 56 ---------------------------------------- + . . . . impl Eq for IntervalSet {} + . . . . + . . . . // We implement PartialEq manually so that we don't consider the set's internal + . . . . // 'folded' property to be part of its identity. The 'folded' property is + . . . . // strictly an optimization. + . . . . impl PartialEq for IntervalSet { + . . . . fn eq(&self, other: &IntervalSet) -> bool { + . . . . self.ranges.eq(&other.ranges) + 64 ( 0.00%) . . . } + . . . . } + . . . . + . . . . impl IntervalSet { + . . . . /// Create a new set from a sequence of intervals. Each interval is + . . . . /// specified as a pair of bounds, where both bounds are inclusive. + . . . . /// + . . . . /// The given ranges do not need to be in any specific order, and ranges + . . . . /// may overlap. + 15 ( 0.00%) . . . pub fn new>(intervals: T) -> IntervalSet { + . . . . let ranges: Vec = intervals.into_iter().collect(); + . . . . // An empty set is case folded. + . . . . let folded = ranges.is_empty(); +27,588 ( 0.01%) . . . let mut set = IntervalSet { ranges, folded }; + 5,996 ( 0.00%) . . . set.canonicalize(); +19,125 ( 0.01%) . . . => /home/.cargo/registry/src/index.crates.io-6f17d22bba15001f/regex-syntax-0.8.2/src/hir/interval.rs:regex_syntax::hir::interval::IntervalSet::canonicalize (1,125x) + . . . . set + 17 ( 0.00%) . . . } + . . . . + . . . . /// Add a new interval to this set. + . . . . pub fn push(&mut self, interval: I) { + . . . . // TODO: This could be faster. e.g., Push the interval such that + . . . . // it preserves canonicalization. + . . . . self.ranges.push(interval); + 220 ( 0.00%) . . . self.canonicalize(); + 2,310 ( 0.00%) . . . => /home/.cargo/registry/src/index.crates.io-6f17d22bba15001f/regex-syntax-0.8.2/src/hir/interval.rs:regex_syntax::hir::interval::IntervalSet::canonicalize (110x) + . . . . // We don't know whether the new interval added here is considered + . . . . // case folded, so we conservatively assume that the entire set is + . . . . // no longer case folded if it was previously. + 110 ( 0.00%) . . . self.folded = false; + . . . . } + . . . . + . . . . /// Return an iterator over all intervals in this set. + . . . . /// + . . . . /// The iterator yields intervals in ascending order. + . . . . pub fn iter(&self) -> IntervalSetIter<'_, I> { + . . . . IntervalSetIter(self.ranges.iter()) + . . . . } +-- line 99 ---------------------------------------- +-- line 108 ---------------------------------------- + . . . . /// Expand this interval set such that it contains all case folded + . . . . /// characters. For example, if this class consists of the range `a-z`, + . . . . /// then applying case folding will result in the class containing both the + . . . . /// ranges `a-z` and `A-Z`. + . . . . /// + . . . . /// This returns an error if the necessary case mapping data is not + . . . . /// available. + . . . . pub fn case_fold_simple(&mut self) -> Result<(), unicode::CaseFoldError> { + 2,660 ( 0.00%) . . . if self.folded { + . . . . return Ok(()); + . . . . } + . . . . let len = self.ranges.len(); + . . . . for i in 0..len { + 4,760 ( 0.00%) . . . let range = self.ranges[i]; + 5,950 ( 0.00%) . . . if let Err(err) = range.case_fold_simple(&mut self.ranges) { +928,541 ( 0.27%) 2,240 ( 0.28%) . . => /home/.cargo/registry/src/index.crates.io-6f17d22bba15001f/regex-syntax-0.8.2/src/hir/mod.rs:::case_fold_simple (1,120x) + . . . . self.canonicalize(); + . . . . return Err(err); + . . . . } + . . . . } + 2,310 ( 0.00%) . . . self.canonicalize(); +38,420 ( 0.01%) . . . => /home/.cargo/registry/src/index.crates.io-6f17d22bba15001f/regex-syntax-0.8.2/src/hir/interval.rs:regex_syntax::hir::interval::IntervalSet::canonicalize (1,120x) + 1,190 ( 0.00%) . . . self.folded = true; + . . . . Ok(()) + . . . . } + . . . . + . . . . /// Union this set with the given set, in place. + 290 ( 0.00%) . . . pub fn union(&mut self, other: &IntervalSet) { + 2,596 ( 0.00%) . . . if other.ranges.is_empty() || self.ranges == other.ranges { + . . . . return; + . . . . } + . . . . // This could almost certainly be done more efficiently. + . . . . self.ranges.extend(&other.ranges); + 1,871 ( 0.00%) . . . self.canonicalize(); + 2,526 ( 0.00%) . . . => /home/.cargo/registry/src/index.crates.io-6f17d22bba15001f/regex-syntax-0.8.2/src/hir/interval.rs:regex_syntax::hir::interval::IntervalSet::canonicalize (58x) + 3,487 ( 0.00%) . . . self.folded = self.folded && other.folded; + 348 ( 0.00%) . . . } + . . . . + . . . . /// Intersect this set with the given set, in place. + . . . . pub fn intersect(&mut self, other: &IntervalSet) { + . . . . if self.ranges.is_empty() { + . . . . return; + . . . . } + . . . . if other.ranges.is_empty() { + . . . . self.ranges.clear(); +-- line 149 ---------------------------------------- +-- line 288 ---------------------------------------- + . . . . self.union(other); + . . . . self.difference(&intersection); + . . . . } + . . . . + . . . . /// Negate this interval set. + . . . . /// + . . . . /// For all `x` where `x` is any element, if `x` was in this set, then it + . . . . /// will not be in this set after negation. + 366 ( 0.00%) . . . pub fn negate(&mut self) { + 61 ( 0.00%) . . . if self.ranges.is_empty() { + . . . . let (min, max) = (I::Bound::min_value(), I::Bound::max_value()); + . . . . self.ranges.push(I::create(min, max)); + . . . . // The set containing everything must case folded. + . . . . self.folded = true; + . . . . return; + . . . . } + . . . . + . . . . // There should be a way to do this in-place with constant memory, + . . . . // but I couldn't figure out a simple way to do it. So just append + . . . . // the negation to the end of this range, and then drain it before + . . . . // we're done. + . . . . let drain_end = self.ranges.len(); + . . . . + . . . . // We do checked arithmetic below because of the canonical ordering + . . . . // invariant. + 427 ( 0.00%) . . . if self.ranges[0].lower() > I::Bound::min_value() { + . . . . let upper = self.ranges[0].lower().decrement(); + . . . . self.ranges.push(I::create(I::Bound::min_value(), upper)); + . . . . } + . . . . for i in 1..drain_end { + 102 ( 0.00%) . . . let lower = self.ranges[i - 1].upper().increment(); + 34 ( 0.00%) . . . let upper = self.ranges[i].lower().decrement(); + . . . . self.ranges.push(I::create(lower, upper)); + . . . . } + 244 ( 0.00%) . . . if self.ranges[drain_end - 1].upper() < I::Bound::max_value() { + . . . . let lower = self.ranges[drain_end - 1].upper().increment(); + . . . . self.ranges.push(I::create(lower, I::Bound::max_value())); + . . . . } + . . . . self.ranges.drain(..drain_end); + . . . . // We don't need to update whether this set is folded or not, because + . . . . // it is conservatively preserved through negation. Namely, if a set + . . . . // is not folded, then it is possible that its negation is folded, for + . . . . // example, [^☃]. But we're fine with assuming that the set is not +-- line 330 ---------------------------------------- +-- line 332 ---------------------------------------- + . . . . // positives.) + . . . . // + . . . . // But what about when a set is folded, is its negation also + . . . . // necessarily folded? Yes. Because if a set is folded, then for every + . . . . // character in the set, it necessarily included its equivalence class + . . . . // of case folded characters. Negating it in turn means that all + . . . . // equivalence classes in the set are negated, and any equivalence + . . . . // class that was previously not in the set is now entirely in the set. + 366 ( 0.00%) . . . } + . . . . + . . . . /// Converts this set into a canonical ordering. +60,317 ( 0.02%) . . . fn canonicalize(&mut self) { +23,486 ( 0.01%) . . . if self.is_canonical() { + . . . . return; + . . . . } + . . . . self.ranges.sort(); + 1,318 ( 0.00%) . . . assert!(!self.ranges.is_empty()); + . . . . + . . . . // Is there a way to do this in-place with constant memory? I couldn't + . . . . // figure out a way to do it. So just append the canonicalization to + . . . . // the end of this range, and then drain it before we're done. + . . . . let drain_end = self.ranges.len(); + . . . . for oldi in 0..drain_end { + . . . . // If we've added at least one new range, then check if we can + . . . . // merge this range in the previously added range. + 5,770 ( 0.00%) . . . if self.ranges.len() > drain_end { + . . . . let (last, rest) = self.ranges.split_last_mut().unwrap(); + 3,134 ( 0.00%) . . . if let Some(union) = last.union(&rest[oldi]) { + 2,064 ( 0.00%) . . . *last = union; + . . . . continue; + . . . . } + . . . . } + 3,706 ( 0.00%) . . . let range = self.ranges[oldi]; + . . . . self.ranges.push(range); + . . . . } + . . . . self.ranges.drain(..drain_end); +60,317 ( 0.02%) . . . } + . . . . + . . . . /// Returns true if and only if this class is in a canonical ordering. + . . . . fn is_canonical(&self) -> bool { +35,229 ( 0.01%) . . . for pair in self.ranges.windows(2) { + 9,082 ( 0.00%) . . . if pair[0] >= pair[1] { + . . . . return false; + . . . . } + 8,224 ( 0.00%) . . . if pair[0].is_contiguous(&pair[1]) { + . . . . return false; + . . . . } + . . . . } + . . . . true + . . . . } + . . . . } + . . . . + . . . . /// An iterator over intervals. +-- line 384 ---------------------------------------- +-- line 405 ---------------------------------------- + . . . . fn case_fold_simple( + . . . . &self, + . . . . intervals: &mut Vec, + . . . . ) -> Result<(), unicode::CaseFoldError>; + . . . . + . . . . /// Create a new interval. + . . . . fn create(lower: Self::Bound, upper: Self::Bound) -> Self { + . . . . let mut int = Self::default(); +11,283 ( 0.00%) . . . if lower <= upper { + . . . . int.set_lower(lower); + . . . . int.set_upper(upper); + . . . . } else { + . . . . int.set_lower(upper); + . . . . int.set_upper(lower); + . . . . } + . . . . int + . . . . } + . . . . + . . . . /// Union the given overlapping range into this range. + . . . . /// + . . . . /// If the two ranges aren't contiguous, then this returns `None`. + . . . . fn union(&self, other: &Self) -> Option { + 1,567 ( 0.00%) . . . if !self.is_contiguous(other) { + . . . . return None; + . . . . } + . . . . let lower = cmp::min(self.lower(), other.lower()); + . . . . let upper = cmp::max(self.upper(), other.upper()); + . . . . Some(Self::create(lower, upper)) + . . . . } + . . . . + . . . . /// Intersect this range with the given range and return the result. +-- line 435 ---------------------------------------- +-- line 495 ---------------------------------------- + . . . . }; + . . . . union.difference(&intersection) + . . . . } + . . . . + . . . . /// Returns true if and only if the two ranges are contiguous. Two ranges + . . . . /// are contiguous if and only if the ranges are either overlapping or + . . . . /// adjacent. + . . . . fn is_contiguous(&self, other: &Self) -> bool { + 1,567 ( 0.00%) . . . let lower1 = self.lower().as_u32(); + 5,679 ( 0.00%) . . . let upper1 = self.upper().as_u32(); + 1,567 ( 0.00%) . . . let lower2 = other.lower().as_u32(); + 5,679 ( 0.00%) . . . let upper2 = other.upper().as_u32(); + 5,679 ( 0.00%) . . . cmp::max(lower1, lower2) <= cmp::min(upper1, upper2).saturating_add(1) + . . . . } + . . . . + . . . . /// Returns true if and only if the intersection of this range and the + . . . . /// other range is empty. + . . . . fn is_intersection_empty(&self, other: &Self) -> bool { + . . . . let (lower1, upper1) = (self.lower(), self.upper()); + . . . . let (lower2, upper2) = (other.lower(), other.upper()); + . . . . cmp::max(lower1, lower2) > cmp::min(upper1, upper2) +-- line 515 ---------------------------------------- +-- line 559 ---------------------------------------- + . . . . fn max_value() -> Self { + . . . . '\u{10FFFF}' + . . . . } + . . . . fn as_u32(self) -> u32 { + . . . . u32::from(self) + . . . . } + . . . . + . . . . fn increment(self) -> Self { + 190 ( 0.00%) . . . match self { + . . . . '\u{D7FF}' => '\u{E000}', + . . . . c => char::from_u32(u32::from(c).checked_add(1).unwrap()).unwrap(), + . . . . } + . . . . } + . . . . + . . . . fn decrement(self) -> Self { + 136 ( 0.00%) . . . match self { + . . . . '\u{E000}' => '\u{D7FF}', + . . . . c => char::from_u32(u32::from(c).checked_sub(1).unwrap()).unwrap(), + . . . . } + . . . . } + . . . . } + . . . . + . . . . // Tests for interval sets are written in src/hir.rs against the public API. + +12,439 ( 0.00%) . . . + +-------------------------------------------------------------------------------- +-- Auto-annotated source: /home/.cargo/registry/src/index.crates.io-6f17d22bba15001f/regex-automata-0.4.6/src/nfa/thompson/nfa.rs +-------------------------------------------------------------------------------- +Ir Ge sysCount sysTime + +-- line 193 ---------------------------------------- + . . . . // sense to put it on the heap by default anyway. Second is that, for Arc + . . . . // specifically, this enables cheap clones. This tends to be useful because + . . . . // several structures (the backtracker, the Pike VM, the hybrid NFA/DFA) + . . . . // all want to hang on to an NFA for use during search time. We could + . . . . // provide the NFA at search time via a function argument, but this makes + . . . . // for an unnecessarily annoying API. Instead, we just let each structure + . . . . // share ownership of the NFA. Using a deep clone would not be smart, since + . . . . // the NFA can use quite a bit of heap space. + 162 ( 0.00%) . . . Arc, + . . . . ); + . . . . + . . . . impl NFA { + . . . . /// Parse the given regular expression using a default configuration and + . . . . /// build an NFA from it. + . . . . /// + . . . . /// If you want a non-default configuration, then use the NFA + . . . . /// [`Compiler`] with a [`Config`]. +-- line 209 ---------------------------------------- +-- line 398 ---------------------------------------- + . . . . /// assert_eq!(pids, vec![ + . . . . /// PatternID::must(0), + . . . . /// PatternID::must(1), + . . . . /// PatternID::must(2), + . . . . /// ]); + . . . . /// + . . . . /// # Ok::<(), Box>(()) + . . . . /// ``` + 81 ( 0.00%) . . . pub fn patterns(&self) -> PatternIter<'_> { + . . . . PatternIter { + . . . . it: PatternID::iter(self.pattern_len()), + . . . . _marker: core::marker::PhantomData, + . . . . } + 243 ( 0.00%) . . . } + . . . . + . . . . /// Returns the total number of regex patterns in this NFA. + . . . . /// + . . . . /// This may return zero if the NFA was constructed with no patterns. In + . . . . /// this case, the NFA can never produce a match for any input. + . . . . /// + . . . . /// This is guaranteed to be no bigger than [`PatternID::LIMIT`] because + . . . . /// NFA construction will fail if too many patterns are added. +-- line 419 ---------------------------------------- +-- line 466 ---------------------------------------- + . . . . /// } + . . . . /// _ => unreachable!("unexpected state"), + . . . . /// } + . . . . /// + . . . . /// # Ok::<(), Box>(()) + . . . . /// ``` + . . . . #[inline] + . . . . pub fn start_anchored(&self) -> StateID { + 8 ( 0.00%) . . . self.0.start_anchored + . . . . } + . . . . + . . . . /// Return the state identifier of the initial unanchored state of this + . . . . /// NFA. + . . . . /// + . . . . /// This is equivalent to the identifier returned by + . . . . /// [`NFA::start_anchored`] when the NFA has no unanchored starting state. + . . . . /// +-- line 482 ---------------------------------------- +-- line 625 ---------------------------------------- + . . . . /// } + . . . . /// _ => unreachable!("unexpected state"), + . . . . /// } + . . . . /// + . . . . /// # Ok::<(), Box>(()) + . . . . /// ``` + . . . . #[inline] + . . . . pub fn state(&self, id: StateID) -> &State { + 1,434 ( 0.00%) . . . &self.states()[id] + . . . . } + . . . . + . . . . /// Returns a slice of all states in this NFA. + . . . . /// + . . . . /// The slice returned is indexed by `StateID`. This provides a convenient + . . . . /// way to access states while following transitions among those states. + . . . . /// + . . . . /// # Example +-- line 641 ---------------------------------------- +-- line 811 ---------------------------------------- + . . . . /// // and thus does not match the empty string. + . . . . /// let nfa = NFA::new("[a&&b]+")?; + . . . . /// assert!(!nfa.has_empty(), "+ on never-match still matches nothing"); + . . . . /// + . . . . /// # Ok::<(), Box>(()) + . . . . /// ``` + . . . . #[inline] + . . . . pub fn has_empty(&self) -> bool { + 57 ( 0.00%) . . . self.0.has_empty + . . . . } + . . . . + . . . . /// Whether UTF-8 mode is enabled for this NFA or not. + . . . . /// + . . . . /// When UTF-8 mode is enabled, all matches reported by a regex engine + . . . . /// derived from this NFA are guaranteed to correspond to spans of valid + . . . . /// UTF-8. This includes zero-width matches. For example, the regex engine + . . . . /// must guarantee that the empty regex will not match at the positions +-- line 827 ---------------------------------------- +-- line 901 ---------------------------------------- + . . . . /// how the state machine is constructed, and thus needs to be altered + . . . . /// based on the direction of the search. + . . . . /// + . . . . /// This is automatically set when using a [`Compiler`] with a configuration + . . . . /// where [`Config::reverse`] is enabled. If you're building your own NFA + . . . . /// by hand via a [`Builder`] + . . . . #[inline] + . . . . pub fn is_reverse(&self) -> bool { + 259 ( 0.00%) . . . self.0.reverse + . . . . } + . . . . + . . . . /// Returns true if and only if all starting states for this NFA correspond + . . . . /// to the beginning of an anchored search. + . . . . /// + . . . . /// Typically, an NFA will have both an anchored and an unanchored starting + . . . . /// state. Namely, because it tends to be useful to have both and the cost + . . . . /// of having an unanchored starting state is almost zero (for an NFA). +-- line 917 ---------------------------------------- +-- line 1052 ---------------------------------------- + . . . . /// assert!(nfa.look_set_any().contains_word()); + . . . . /// assert!(!nfa.look_set_any().contains_word_unicode()); + . . . . /// assert!(nfa.look_set_any().contains_word_ascii()); + . . . . /// + . . . . /// # Ok::<(), Box>(()) + . . . . /// ``` + . . . . #[inline] + . . . . pub fn look_set_any(&self) -> LookSet { + 677 ( 0.00%) . . . self.0.look_set_any + . . . . } + . . . . + . . . . /// Returns the union of all prefix look-around assertions for every + . . . . /// pattern in this NFA. When the returned set is empty, it implies none of + . . . . /// the patterns require moving through a conditional epsilon transition + . . . . /// before inspecting the first byte in the haystack. + . . . . /// + . . . . /// This can be useful for determining what kinds of assertions need to be +-- line 1068 ---------------------------------------- +-- line 1186 ---------------------------------------- + . . . . /// The "inner" part of the NFA. We split this part out so that we can easily + . . . . /// wrap it in an `Arc` above in the definition of `NFA`. + . . . . /// + . . . . /// See builder.rs for the code that actually builds this type. This module + . . . . /// does provide (internal) mutable methods for adding things to this + . . . . /// NFA before finalizing it, but the high level construction process is + . . . . /// controlled by the builder abstraction. (Which is complicated enough to + . . . . /// get its own module.) + 875 ( 0.00%) . . . #[derive(Default)] + . . . . pub(super) struct Inner { + . . . . /// The state sequence. This sequence is guaranteed to be indexable by all + . . . . /// starting state IDs, and it is also guaranteed to contain at most one + . . . . /// `Match` state for each pattern compiled into this NFA. (A pattern may + . . . . /// not have a corresponding `Match` state if a `Match` state is impossible + . . . . /// to reach.) + . . . . states: Vec, + . . . . /// The anchored starting state of this NFA. +-- line 1202 ---------------------------------------- +-- line 1264 ---------------------------------------- + . . . . /// various capturing group representations above). Since each state + . . . . /// might use a different amount of heap, we need to keep track of this + . . . . /// incrementally. + . . . . memory_extra: usize, + . . . . } + . . . . + . . . . impl Inner { + . . . . /// Runs any last finalization bits and turns this into a full NFA. + 1,400 ( 0.00%) . . . pub(super) fn into_nfa(mut self) -> NFA { + 700 ( 0.00%) . . . self.byte_classes = self.byte_class_set.byte_classes(); + 5,250 ( 0.00%) . . . => ./string/../sysdeps/x86_64/multiarch/memmove-vec-unaligned-erms.S:__memcpy_avx_unaligned_erms (175x) + . . . . // Do epsilon closure from the start state of every pattern in order + . . . . // to compute various properties such as look-around assertions and + . . . . // whether the empty string can be matched. + . . . . let mut stack = vec![]; + . . . . let mut seen = SparseSet::new(self.states.len()); + 175 ( 0.00%) . . . for &start_id in self.start_pattern.iter() { + . . . . stack.push(start_id); + . . . . seen.clear(); + . . . . // let mut prefix_all = LookSet::full(); + . . . . let mut prefix_any = LookSet::empty(); + . . . . while let Some(sid) = stack.pop() { + 2,113 ( 0.00%) . . . if !seen.insert(sid) { + . . . . continue; + . . . . } + 2,113 ( 0.00%) . . . match self.states[sid] { + . . . . State::ByteRange { .. } + . . . . | State::Dense { .. } + . . . . | State::Fail => continue, + . . . . State::Sparse(_) => { + . . . . // This snippet below will rewrite this sparse state + . . . . // as a dense state. By doing it here, we apply this + . . . . // optimization to all hot "sparse" states since these + . . . . // are the states that are reachable from the start +-- line 1296 ---------------------------------------- +-- line 1309 ---------------------------------------- + . . . . // is a large re-design and will require API breaking + . . . . // changes. + . . . . // self.memory_extra -= self.states[sid].memory_usage(); + . . . . // let trans = DenseTransitions::from_sparse(sparse); + . . . . // self.states[sid] = State::Dense(trans); + . . . . // self.memory_extra += self.states[sid].memory_usage(); + . . . . continue; + . . . . } + 4 ( 0.00%) . . . State::Match { .. } => self.has_empty = true, + . . . . State::Look { look, next } => { + . . . . prefix_any = prefix_any.insert(look); + . . . . stack.push(next); + . . . . } + . . . . State::Union { ref alternates } => { + . . . . // Order doesn't matter here, since we're just dealing + . . . . // with look-around sets. But if we do richer analysis + . . . . // here that needs to care about preference order, then + . . . . // this should be done in reverse. + 192 ( 0.00%) . . . stack.extend(alternates.iter()); + . . . . } + 158 ( 0.00%) . . . State::BinaryUnion { alt1, alt2 } => { + . . . . stack.push(alt2); + . . . . stack.push(alt1); + . . . . } + . . . . State::Capture { next, .. } => { + . . . . stack.push(next); + . . . . } + . . . . } + . . . . } + 175 ( 0.00%) . . . self.look_set_prefix_any = + . . . . self.look_set_prefix_any.union(prefix_any); + . . . . } + . . . . NFA(Arc::new(self)) + 1,575 ( 0.00%) . . . } + . . . . + . . . . /// Returns the capturing group info for this NFA. + . . . . pub(super) fn group_info(&self) -> &GroupInfo { + 86 ( 0.00%) . . . &self.group_info + . . . . } + . . . . + . . . . /// Add the given state to this NFA after allocating a fresh identifier for + . . . . /// it. + . . . . /// + . . . . /// This panics if too many states are added such that a fresh identifier + . . . . /// could not be created. (Currently, the only caller of this routine is + . . . . /// a `Builder`, and it upholds this invariant.) +578,961 ( 0.17%) . . . pub(super) fn add(&mut self, state: State) -> StateID { +321,645 ( 0.09%) . . . match state { + . . . . State::ByteRange { ref trans } => { +136,092 ( 0.04%) . . . self.byte_class_set.set_range(trans.start, trans.end); + . . . . } + . . . . State::Sparse(ref sparse) => { + 10,389 ( 0.00%) . . . for trans in sparse.transitions.iter() { + 76,948 ( 0.02%) . . . self.byte_class_set.set_range(trans.start, trans.end); + . . . . } + . . . . } + . . . . State::Dense { .. } => unreachable!(), + 245 ( 0.00%) . . . State::Look { look, .. } => { + 735 ( 0.00%) . . . self.look_matcher + 4,900 ( 0.00%) . . . => /home/.cargo/registry/src/index.crates.io-6f17d22bba15001f/regex-automata-0.4.6/src/util/look.rs:regex_automata::util::look::LookMatcher::add_to_byteset (245x) + 245 ( 0.00%) . . . .add_to_byteset(look, &mut self.byte_class_set); + 490 ( 0.00%) . . . self.look_set_any = self.look_set_any.insert(look); + . . . . } + . . . . State::Capture { .. } => { + 3,096 ( 0.00%) . . . self.has_capture = true; + . . . . } + . . . . State::Union { .. } + . . . . | State::BinaryUnion { .. } + . . . . | State::Fail + . . . . | State::Match { .. } => {} + . . . . } + . . . . + . . . . let id = StateID::new(self.states.len()).unwrap(); +192,987 ( 0.06%) . . . self.memory_extra += state.memory_usage(); + . . . . self.states.push(state); + . . . . id +578,961 ( 0.17%) . . . } + . . . . + . . . . /// Set the starting state identifiers for this NFA. + . . . . /// + . . . . /// `start_anchored` and `start_unanchored` may be equivalent. When they + . . . . /// are, then the NFA can only execute anchored searches. This might + . . . . /// occur, for example, for patterns that are unconditionally anchored. + . . . . /// e.g., `^foo`. + . . . . pub(super) fn set_starts( + . . . . &mut self, + . . . . start_anchored: StateID, + . . . . start_unanchored: StateID, + . . . . start_pattern: &[StateID], + . . . . ) { + 175 ( 0.00%) . . . self.start_anchored = start_anchored; + 175 ( 0.00%) . . . self.start_unanchored = start_unanchored; + 525 ( 0.00%) . . . self.start_pattern = start_pattern.to_vec(); + . . . . } + . . . . + . . . . /// Sets the UTF-8 mode of this NFA. + . . . . pub(super) fn set_utf8(&mut self, yes: bool) { + 175 ( 0.00%) . . . self.utf8 = yes; + . . . . } + . . . . + . . . . /// Sets the reverse mode of this NFA. + . . . . pub(super) fn set_reverse(&mut self, yes: bool) { + 175 ( 0.00%) . . . self.reverse = yes; + . . . . } + . . . . + . . . . /// Sets the look-around assertion matcher for this NFA. + . . . . pub(super) fn set_look_matcher(&mut self, m: LookMatcher) { + 175 ( 0.00%) . . . self.look_matcher = m; + . . . . } + . . . . + . . . . /// Set the capturing groups for this NFA. + . . . . /// + . . . . /// The given slice should contain the capturing groups for each pattern, + . . . . /// The capturing groups in turn should correspond to the total number of + . . . . /// capturing groups in the pattern, including the anonymous first capture + . . . . /// group for each pattern. If a capturing group does have a name, then it +-- line 1423 ---------------------------------------- +-- line 1424 ---------------------------------------- + . . . . /// should be provided as a Arc. + . . . . /// + . . . . /// This returns an error if a corresponding `GroupInfo` could not be + . . . . /// built. + . . . . pub(super) fn set_captures( + . . . . &mut self, + . . . . captures: &[Vec>>], + . . . . ) -> Result<(), GroupInfoError> { + 350 ( 0.00%) . . . self.group_info = GroupInfo::new( +883,512 ( 0.26%) 2,456 ( 0.30%) 2 ( 0.65%) . => /home/.cargo/registry/src/index.crates.io-6f17d22bba15001f/regex-automata-0.4.6/src/util/captures.rs:regex_automata::util::captures::GroupInfo::new (175x) + . . . . captures.iter().map(|x| x.iter().map(|y| y.as_ref())), + . . . . )?; + . . . . Ok(()) + . . . . } + . . . . + . . . . /// Remap the transitions in every state of this NFA using the given map. + . . . . /// The given map should be indexed according to state ID namespace used by + . . . . /// the transitions of the states currently in this NFA. + . . . . /// + . . . . /// This is particularly useful to the NFA builder, since it is convenient + . . . . /// to add NFA states in order to produce their final IDs. Then, after all + . . . . /// of the intermediate "empty" states (unconditional epsilon transitions) + . . . . /// have been removed from the builder's representation, we can re-map all + . . . . /// of the transitions in the states already added to their final IDs. + 175 ( 0.00%) . . . pub(super) fn remap(&mut self, old_to_new: &[StateID]) { + . . . . for state in &mut self.states { + . . . . state.remap(old_to_new); + . . . . } + 525 ( 0.00%) . . . self.start_anchored = old_to_new[self.start_anchored]; + 525 ( 0.00%) . . . self.start_unanchored = old_to_new[self.start_unanchored]; + . . . . for id in self.start_pattern.iter_mut() { + 525 ( 0.00%) . . . *id = old_to_new[*id]; + . . . . } + 350 ( 0.00%) . . . } + . . . . } + . . . . + . . . . impl fmt::Debug for Inner { + . . . . fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result { + . . . . writeln!(f, "thompson::NFA(")?; + . . . . for (sid, state) in self.states.iter().with_state_ids() { + . . . . let status = if sid == self.start_anchored { + . . . . '^' +-- line 1464 ---------------------------------------- +-- line 1648 ---------------------------------------- + . . . . /// trans: Transition { start: b'a', end: b'z', next: StateID::ZERO }, + . . . . /// }; + . . . . /// assert!(!state.is_epsilon()); + . . . . /// + . . . . /// # Ok::<(), Box>(()) + . . . . /// ``` + . . . . #[inline] + . . . . pub fn is_epsilon(&self) -> bool { + 705 ( 0.00%) . . . match *self { + . . . . State::ByteRange { .. } + . . . . | State::Sparse { .. } + . . . . | State::Dense { .. } + . . . . | State::Fail + . . . . | State::Match { .. } => false, + . . . . State::Look { .. } + . . . . | State::Union { .. } + . . . . | State::BinaryUnion { .. } + . . . . | State::Capture { .. } => true, + . . . . } + . . . . } + . . . . + . . . . /// Returns the heap memory usage of this NFA state in bytes. + . . . . fn memory_usage(&self) -> usize { +321,645 ( 0.09%) . . . match *self { + . . . . State::ByteRange { .. } + . . . . | State::Look { .. } + . . . . | State::BinaryUnion { .. } + . . . . | State::Capture { .. } + . . . . | State::Match { .. } + . . . . | State::Fail => 0, + . . . . State::Sparse(SparseTransitions { ref transitions }) => { + 20,778 ( 0.01%) . . . transitions.len() * mem::size_of::() + . . . . } + . . . . State::Dense { .. } => 256 * mem::size_of::(), + . . . . State::Union { ref alternates } => { + 1,460 ( 0.00%) . . . alternates.len() * mem::size_of::() + . . . . } + . . . . } + . . . . } + . . . . + . . . . /// Remap the transitions in this state using the given map. Namely, the + . . . . /// given map should be indexed according to the transitions currently + . . . . /// in this state. + . . . . /// + . . . . /// This is used during the final phase of the NFA compiler, which turns + . . . . /// its intermediate NFA into the final NFA. + . . . . fn remap(&mut self, remap: &[StateID]) { +257,316 ( 0.07%) . . . match *self { + . . . . State::ByteRange { ref mut trans } => { + 45,364 ( 0.01%) . . . trans.next = remap[trans.next] + . . . . } + . . . . State::Sparse(SparseTransitions { ref mut transitions }) => { + 10,389 ( 0.00%) . . . for t in transitions.iter_mut() { +115,422 ( 0.03%) . . . t.next = remap[t.next]; + . . . . } + . . . . } + . . . . State::Dense(DenseTransitions { ref mut transitions }) => { + . . . . for sid in transitions.iter_mut() { + . . . . *sid = remap[*sid]; + . . . . } + . . . . } + 245 ( 0.00%) . . . State::Look { ref mut next, .. } => *next = remap[*next], + . . . . State::Union { ref mut alternates } => { + 1,460 ( 0.00%) . . . for alt in alternates.iter_mut() { + 31,287 ( 0.01%) . . . *alt = remap[*alt]; + . . . . } + . . . . } + . . . . State::BinaryUnion { ref mut alt1, ref mut alt2 } => { + 15,444 ( 0.00%) . . . *alt1 = remap[*alt1]; + 20,592 ( 0.01%) . . . *alt2 = remap[*alt2]; + . . . . } + 1,548 ( 0.00%) . . . State::Capture { ref mut next, .. } => *next = remap[*next], + . . . . State::Fail => {} + . . . . State::Match { .. } => {} + . . . . } + . . . . } + . . . . } + . . . . + . . . . impl fmt::Debug for State { + . . . . fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result { +-- line 1727 ---------------------------------------- +-- line 1814 ---------------------------------------- + . . . . /// range (there is at most one) corresponding to the position `at` in + . . . . /// `haystack`. If the given alphabet unit is [`EOI`](alphabet::Unit::eoi), + . . . . /// then this always returns `None`. + . . . . #[inline] + . . . . pub(crate) fn matches_unit( + . . . . &self, + . . . . unit: alphabet::Unit, + . . . . ) -> Option { + 292 ( 0.00%) . . . unit.as_u8().map_or(None, |byte| self.matches_byte(byte)) + . . . . } + . . . . + . . . . /// This follows the matching transition for a particular byte. + . . . . /// + . . . . /// The matching transition is found by looking for a matching byte range + . . . . /// (there is at most one) corresponding to the byte given. + . . . . #[inline] + . . . . pub fn matches_byte(&self, byte: u8) -> Option { + 488 ( 0.00%) . . . for t in self.transitions.iter() { + 1,064 ( 0.00%) . . . if t.start > byte { + . . . . break; + 1,391 ( 0.00%) . . . } else if t.matches_byte(byte) { + 40 ( 0.00%) . . . return Some(t.next); + . . . . } + . . . . } + . . . . None + . . . . + . . . . /* + . . . . // This is an alternative implementation that uses binary search. In + . . . . // some ad hoc experiments, like + . . . . // +-- line 1843 ---------------------------------------- +-- line 1960 ---------------------------------------- + . . . . + . . . . /// A single transition to another state. + . . . . /// + . . . . /// This transition may only be followed if the current byte in the haystack + . . . . /// falls in the inclusive range of bytes specified. + . . . . #[derive(Clone, Copy, Eq, Hash, PartialEq)] + . . . . pub struct Transition { + . . . . /// The inclusive start of the byte range. + 1,854 ( 0.00%) . . . pub start: u8, + . . . . /// The inclusive end of the byte range. + 4,635 ( 0.00%) . . . pub end: u8, + . . . . /// The identifier of the state to transition to. + 1,854 ( 0.00%) . . . pub next: StateID, + . . . . } + . . . . + . . . . impl Transition { + . . . . /// Returns true if the position `at` in `haystack` falls in this + . . . . /// transition's range of bytes. + . . . . /// + . . . . /// If `at >= haystack.len()`, then this returns `false`. + . . . . pub fn matches(&self, haystack: &[u8], at: usize) -> bool { +-- line 1980 ---------------------------------------- +-- line 1986 ---------------------------------------- + . . . . /// this returns `false`. + . . . . pub fn matches_unit(&self, unit: alphabet::Unit) -> bool { + . . . . unit.as_u8().map_or(false, |byte| self.matches_byte(byte)) + . . . . } + . . . . + . . . . /// Returns true if the given byte falls in this transition's range of + . . . . /// bytes. + . . . . pub fn matches_byte(&self, byte: u8) -> bool { + 1,750 ( 0.00%) . . . self.start <= byte && byte <= self.end + . . . . } + . . . . } + . . . . + . . . . impl fmt::Debug for Transition { + . . . . fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result { + . . . . use crate::util::escape::DebugByte; + . . . . + . . . . let Transition { start, end, next } = *self; +-- line 2002 ---------------------------------------- + +258,637 ( 0.07%) . . . + +-------------------------------------------------------------------------------- +-- Auto-annotated source: /home/.cargo/registry/src/index.crates.io-6f17d22bba15001f/regex-syntax-0.8.2/src/ast/parse.rs +-------------------------------------------------------------------------------- +Ir Ge sysCount sysTime + +-- line 47 ---------------------------------------- + . . . . Primitive::Dot(ref span) => span, + . . . . Primitive::Perl(ref x) => &x.span, + . . . . Primitive::Unicode(ref x) => &x.span, + . . . . } + . . . . } + . . . . + . . . . /// Convert this primitive into a proper AST. + . . . . fn into_ast(self) -> Ast { + 496,070 ( 0.14%) . . . match self { + . . . . Primitive::Literal(lit) => Ast::literal(lit), + . . . . Primitive::Assertion(assert) => Ast::assertion(assert), + . . . . Primitive::Dot(span) => Ast::dot(span), + . . . . Primitive::Perl(cls) => Ast::class_perl(cls), + . . . . Primitive::Unicode(cls) => Ast::class_unicode(cls), + . . . . } + . . . . } + . . . . +-- line 63 ---------------------------------------- +-- line 67 ---------------------------------------- + . . . . /// then return an error. + . . . . fn into_class_set_item>( + . . . . self, + . . . . p: &ParserI<'_, P>, + . . . . ) -> Result { + . . . . use self::Primitive::*; + . . . . use crate::ast::ClassSetItem; + . . . . + 24,858 ( 0.01%) . . . match self { + 35,440 ( 0.01%) . . . Literal(lit) => Ok(ClassSetItem::Literal(lit)), + 50 ( 0.00%) . . . Perl(cls) => Ok(ClassSetItem::Perl(cls)), + . . . . Unicode(cls) => Ok(ClassSetItem::Unicode(cls)), + . . . . x => Err(p.error(*x.span(), ast::ErrorKind::ClassEscapeInvalid)), + . . . . } + . . . . } + . . . . + . . . . /// Convert this primitive into a literal in a character class. In + . . . . /// particular, literals are the only valid items that can appear in + . . . . /// ranges. +-- line 85 ---------------------------------------- +-- line 105 ---------------------------------------- + . . . . } + . . . . + . . . . /// Returns true if the given character is a valid in a capture group name. + . . . . /// + . . . . /// If `first` is true, then `c` is treated as the first character in the + . . . . /// group name (which must be alphabetic or underscore). + . . . . fn is_capture_char(c: char, first: bool) -> bool { + . . . . if first { + 1,172 ( 0.00%) . . . c == '_' || c.is_alphabetic() + . . . . } else { + 6,753 ( 0.00%) . . . c == '_' || c == '.' || c == '[' || c == ']' || c.is_alphanumeric() + . . . . } + . . . . } + . . . . + . . . . /// A builder for a regular expression parser. + . . . . /// + . . . . /// This builder permits modifying configuration options for the parser. + . . . . #[derive(Clone, Debug)] + . . . . pub struct ParserBuilder { +-- line 123 ---------------------------------------- +-- line 135 ---------------------------------------- + . . . . impl ParserBuilder { + . . . . /// Create a new parser builder with a default configuration. + . . . . pub fn new() -> ParserBuilder { + . . . . ParserBuilder { + . . . . ignore_whitespace: false, + . . . . nest_limit: 250, + . . . . octal: false, + . . . . } + 162 ( 0.00%) . . . } + . . . . + . . . . /// Build a parser from this configuration with the given pattern. + 81 ( 0.00%) . . . pub fn build(&self) -> Parser { + 1,944 ( 0.00%) . . . Parser { + . . . . pos: Cell::new(Position { offset: 0, line: 1, column: 1 }), + . . . . capture_index: Cell::new(0), + 81 ( 0.00%) . . . nest_limit: self.nest_limit, + 81 ( 0.00%) . . . octal: self.octal, + 81 ( 0.00%) . . . initial_ignore_whitespace: self.ignore_whitespace, + . . . . ignore_whitespace: Cell::new(self.ignore_whitespace), + . . . . comments: RefCell::new(vec![]), + . . . . stack_group: RefCell::new(vec![]), + . . . . stack_class: RefCell::new(vec![]), + . . . . capture_names: RefCell::new(vec![]), + . . . . scratch: RefCell::new(String::new()), + . . . . } + 81 ( 0.00%) . . . } + . . . . + . . . . /// Set the nesting limit for this parser. + . . . . /// + . . . . /// The nesting limit controls how deep the abstract syntax tree is allowed + . . . . /// to be. If the AST exceeds the given limit (e.g., with too many nested + . . . . /// groups), then an error is returned by the parser. + . . . . /// + . . . . /// The purpose of this limit is to act as a heuristic to prevent stack +-- line 168 ---------------------------------------- +-- line 179 ---------------------------------------- + . . . . /// length of the pattern string. + . . . . /// + . . . . /// Note that a nest limit of `0` will return a nest limit error for most + . . . . /// patterns but not all. For example, a nest limit of `0` permits `a` but + . . . . /// not `ab`, since `ab` requires a concatenation, which results in a nest + . . . . /// depth of `1`. In general, a nest limit is not something that manifests + . . . . /// in an obvious way in the concrete syntax, therefore, it should not be + . . . . /// used in a granular way. + 81 ( 0.00%) . . . pub fn nest_limit(&mut self, limit: u32) -> &mut ParserBuilder { + 81 ( 0.00%) . . . self.nest_limit = limit; + . . . . self + 81 ( 0.00%) . . . } + . . . . + . . . . /// Whether to support octal syntax or not. + . . . . /// + . . . . /// Octal syntax is a little-known way of uttering Unicode codepoints in + . . . . /// a regular expression. For example, `a`, `\x61`, `\u0061` and + . . . . /// `\141` are all equivalent regular expressions, where the last example + . . . . /// shows octal syntax. + . . . . /// +-- line 198 ---------------------------------------- +-- line 199 ---------------------------------------- + . . . . /// While supporting octal syntax isn't in and of itself a problem, it does + . . . . /// make good error messages harder. That is, in PCRE based regex engines, + . . . . /// syntax like `\0` invokes a backreference, which is explicitly + . . . . /// unsupported in Rust's regex engine. However, many users expect it to + . . . . /// be supported. Therefore, when octal support is disabled, the error + . . . . /// message will explicitly mention that backreferences aren't supported. + . . . . /// + . . . . /// Octal syntax is disabled by default. + 81 ( 0.00%) . . . pub fn octal(&mut self, yes: bool) -> &mut ParserBuilder { + 81 ( 0.00%) . . . self.octal = yes; + . . . . self + 81 ( 0.00%) . . . } + . . . . + . . . . /// Enable verbose mode in the regular expression. + . . . . /// + . . . . /// When enabled, verbose mode permits insignificant whitespace in many + . . . . /// places in the regular expression, as well as comments. Comments are + . . . . /// started using `#` and continue until the end of the line. + . . . . /// + . . . . /// By default, this is disabled. It may be selectively enabled in the + . . . . /// regular expression by using the `x` flag regardless of this setting. + 81 ( 0.00%) . . . pub fn ignore_whitespace(&mut self, yes: bool) -> &mut ParserBuilder { + 81 ( 0.00%) . . . self.ignore_whitespace = yes; + . . . . self + 81 ( 0.00%) . . . } + . . . . } + . . . . + . . . . /// A regular expression parser. + . . . . /// + . . . . /// This parses a string representation of a regular expression into an + . . . . /// abstract syntax tree. The size of the tree is proportional to the length + . . . . /// of the regular expression pattern. + . . . . /// +-- line 231 ---------------------------------------- +-- line 336 ---------------------------------------- + . . . . /// methods. The parse methods return an abstract syntax tree. + . . . . /// + . . . . /// To set configuration options on the parser, use [`ParserBuilder`]. + . . . . pub fn new() -> Parser { + . . . . ParserBuilder::new().build() + . . . . } + . . . . + . . . . /// Parse the regular expression into an abstract syntax tree. + 648 ( 0.00%) . . . pub fn parse(&mut self, pattern: &str) -> Result { + . . . . ParserI::new(self, pattern).parse() + 729 ( 0.00%) . . . } + . . . . + . . . . /// Parse the regular expression and return an abstract syntax tree with + . . . . /// all of the comments found in the pattern. + . . . . pub fn parse_with_comments( + . . . . &mut self, + . . . . pattern: &str, + . . . . ) -> Result { + . . . . ParserI::new(self, pattern).parse_with_comments() +-- line 354 ---------------------------------------- +-- line 358 ---------------------------------------- + . . . . /// + . . . . /// This is called at the beginning of every parse. This prevents the + . . . . /// parser from running with inconsistent state (say, if a previous + . . . . /// invocation returned an error and the parser is reused). + . . . . fn reset(&self) { + . . . . // These settings should be in line with the construction + . . . . // in `ParserBuilder::build`. + . . . . self.pos.set(Position { offset: 0, line: 1, column: 1 }); + 81 ( 0.00%) . . . self.ignore_whitespace.set(self.initial_ignore_whitespace); + . . . . self.comments.borrow_mut().clear(); + . . . . self.stack_group.borrow_mut().clear(); + . . . . self.stack_class.borrow_mut().clear(); + . . . . } + . . . . } + . . . . + . . . . impl<'s, P: Borrow> ParserI<'s, P> { + . . . . /// Build an internal parser from a parser configuration and a pattern. + . . . . fn new(parser: P, pattern: &'s str) -> ParserI<'s, P> { + 243 ( 0.00%) . . . ParserI { parser, pattern } + . . . . } + . . . . + . . . . /// Return a reference to the parser state. + . . . . fn parser(&self) -> &Parser { + . . . . self.parser.borrow() + . . . . } + . . . . + . . . . /// Return a reference to the pattern being parsed. +-- line 384 ---------------------------------------- +-- line 391 ---------------------------------------- + . . . . ast::Error { kind, pattern: self.pattern().to_string(), span } + . . . . } + . . . . + . . . . /// Return the current offset of the parser. + . . . . /// + . . . . /// The offset starts at `0` from the beginning of the regular expression + . . . . /// pattern string. + . . . . fn offset(&self) -> usize { + 586 ( 0.00%) . . . self.parser().pos.get().offset + . . . . } + . . . . + . . . . /// Return the current line number of the parser. + . . . . /// + . . . . /// The line number starts at `1`. + . . . . fn line(&self) -> usize { + . . . . self.parser().pos.get().line + . . . . } +-- line 407 ---------------------------------------- +-- line 450 ---------------------------------------- + . . . . /// Return whether the parser should ignore whitespace or not. + . . . . fn ignore_whitespace(&self) -> bool { + . . . . self.parser().ignore_whitespace.get() + . . . . } + . . . . + . . . . /// Return the character at the current position of the parser. + . . . . /// + . . . . /// This panics if the current position does not point to a valid char. + 981,248 ( 0.28%) . . . fn char(&self) -> char { +1,471,872 ( 0.43%) . . . self.char_at(self.offset()) + 981,248 ( 0.28%) . . . } + . . . . + . . . . /// Return the character at the given position. + . . . . /// + . . . . /// This panics if the given position does not point to a valid char. + . . . . fn char_at(&self, i: usize) -> char { + . . . . self.pattern()[i..] + . . . . .chars() + . . . . .next() + . . . . .unwrap_or_else(|| panic!("expected char at offset {}", i)) + . . . . } + . . . . + . . . . /// Bump the parser to the next Unicode scalar value. + . . . . /// + . . . . /// If the end of the input has been reached, then `false` is returned. + 646,961 ( 0.19%) . . . fn bump(&self) -> bool { + 92,423 ( 0.03%) . . . if self.is_eof() { + . . . . return false; + . . . . } + . . . . let Position { mut offset, mut line, mut column } = self.pos(); + 277,269 ( 0.08%) . . . if self.char() == '\n' { +1,848,736 ( 0.53%) . . . => /home/.cargo/registry/src/index.crates.io-6f17d22bba15001f/regex-syntax-0.8.2/src/ast/parse.rs:regex_syntax::ast::parse::ParserI

::char (92,423x) + . . . . line = line.checked_add(1).unwrap(); + . . . . column = 1; + . . . . } else { + . . . . column = column.checked_add(1).unwrap(); + . . . . } + 184,846 ( 0.05%) . . . offset += self.char().len_utf8(); +1,848,736 ( 0.53%) . . . => /home/.cargo/registry/src/index.crates.io-6f17d22bba15001f/regex-syntax-0.8.2/src/ast/parse.rs:regex_syntax::ast::parse::ParserI

::char (92,423x) + . . . . self.parser().pos.set(Position { offset, line, column }); + 92,423 ( 0.03%) . . . self.pattern()[self.offset()..].chars().next().is_some() + 739,384 ( 0.21%) . . . } + . . . . + . . . . /// If the substring starting at the current position of the parser has + . . . . /// the given prefix, then bump the parser to the character immediately + . . . . /// following the prefix and return true. Otherwise, don't bump the parser + . . . . /// and return false. + . . . . fn bump_if(&self, prefix: &str) -> bool { + 6,015 ( 0.00%) . . . if self.pattern()[self.offset()..].starts_with(prefix) { + . . . . for _ in 0..prefix.chars().count() { + 6,636 ( 0.00%) . . . self.bump(); + 158,242 ( 0.05%) . . . => /home/.cargo/registry/src/index.crates.io-6f17d22bba15001f/regex-syntax-0.8.2/src/ast/parse.rs:regex_syntax::ast::parse::ParserI

::bump (1,778x) + . . . . } + . . . . true + . . . . } else { + . . . . false + . . . . } + . . . . } + . . . . + . . . . /// Returns true if and only if the parser is positioned at a look-around +-- line 506 ---------------------------------------- +-- line 515 ---------------------------------------- + . . . . || self.bump_if("?!") + . . . . || self.bump_if("?<=") + . . . . || self.bump_if("? bool { + 13,910 ( 0.00%) . . . if !self.bump() { + 21,271 ( 0.01%) . . . => /home/.cargo/registry/src/index.crates.io-6f17d22bba15001f/regex-syntax-0.8.2/src/ast/parse.rs:regex_syntax::ast::parse::ParserI

::bump (239x) + . . . . return false; + . . . . } + 6,954 ( 0.00%) . . . self.bump_space(); + 4,302 ( 0.00%) . . . => /home/.cargo/registry/src/index.crates.io-6f17d22bba15001f/regex-syntax-0.8.2/src/ast/parse.rs:regex_syntax::ast::parse::ParserI

::bump_space (239x) + . . . . !self.is_eof() + 478 ( 0.00%) . . . } + . . . . + . . . . /// If the `x` flag is enabled (i.e., whitespace insensitivity with + . . . . /// comments), then this will advance the parser through all whitespace + . . . . /// and comments to the next non-whitespace non-comment byte. + . . . . /// + . . . . /// If the `x` flag is disabled, then this is a no-op. + . . . . /// + . . . . /// This should be used selectively throughout the parser where + . . . . /// arbitrary whitespace is permitted when the `x` flag is enabled. For + . . . . /// example, `{ 5 , 6}` is equivalent to `{5,6}`. + 625,569 ( 0.18%) . . . fn bump_space(&self) { + 178,734 ( 0.05%) . . . if !self.ignore_whitespace() { + . . . . return; + . . . . } + . . . . while !self.is_eof() { + . . . . if self.char().is_whitespace() { + . . . . self.bump(); + . . . . } else if self.char() == '#' { + . . . . let start = self.pos(); + . . . . let mut comment_text = String::new(); +-- line 549 ---------------------------------------- +-- line 560 ---------------------------------------- + . . . . span: Span::new(start, self.pos()), + . . . . comment: comment_text, + . . . . }; + . . . . self.parser().comments.borrow_mut().push(comment); + . . . . } else { + . . . . break; + . . . . } + . . . . } + 714,936 ( 0.21%) . . . } + . . . . + . . . . /// Peek at the next character in the input without advancing the parser. + . . . . /// + . . . . /// If the input has been exhausted, then this returns `None`. + . . . . fn peek(&self) -> Option { + . . . . if self.is_eof() { + . . . . return None; + . . . . } +-- line 576 ---------------------------------------- +-- line 600 ---------------------------------------- + . . . . break; + . . . . } + . . . . } + . . . . self.pattern()[start..].chars().next() + . . . . } + . . . . + . . . . /// Returns true if the next call to `bump` would return false. + . . . . fn is_eof(&self) -> bool { + 382,230 ( 0.11%) . . . self.offset() == self.pattern().len() + . . . . } + . . . . + . . . . /// Return the current position of the parser, which includes the offset, + . . . . /// line and column. + . . . . fn pos(&self) -> Position { + 7,182 ( 0.00%) . . . self.parser().pos.get() + . . . . } + . . . . + . . . . /// Create a span at the current position of the parser. Both the start + . . . . /// and end of the span are set. + . . . . fn span(&self) -> Span { + . . . . Span::splat(self.pos()) + . . . . } + . . . . + . . . . /// Create a span that covers the current character. + . . . . fn span_char(&self) -> Span { + . . . . let mut next = Position { + 107,261 ( 0.03%) . . . offset: self.offset().checked_add(self.char().len_utf8()).unwrap(), + 14,244 ( 0.00%) . . . => /home/.cargo/registry/src/index.crates.io-6f17d22bba15001f/regex-syntax-0.8.2/src/ast/parse.rs:regex_syntax::ast::parse::ParserI

::char (713x) + . . . . line: self.line(), + . . . . column: self.column().checked_add(1).unwrap(), + . . . . }; + 417,701 ( 0.12%) . . . if self.char() == '\n' { + 14,244 ( 0.00%) . . . => /home/.cargo/registry/src/index.crates.io-6f17d22bba15001f/regex-syntax-0.8.2/src/ast/parse.rs:regex_syntax::ast::parse::ParserI

::char (713x) + . . . . next.line += 1; + . . . . next.column = 1; + . . . . } + . . . . Span::new(self.pos(), next) + . . . . } + . . . . + . . . . /// Parse and push a single alternation on to the parser's internal stack. + . . . . /// If the top of the stack already has an alternation, then add to that +-- line 638 ---------------------------------------- +-- line 639 ---------------------------------------- + . . . . /// instead of pushing a new one. + . . . . /// + . . . . /// The concatenation given corresponds to a single alternation branch. + . . . . /// The concatenation returned starts the next branch and is empty. + . . . . /// + . . . . /// This assumes the parser is currently positioned at `|` and will advance + . . . . /// the parser to the character following `|`. + . . . . #[inline(never)] + 159,290 ( 0.05%) . . . fn push_alternate(&self, mut concat: ast::Concat) -> Result { + 79,645 ( 0.02%) . . . assert_eq!(self.char(), '|'); + 318,580 ( 0.09%) . . . => /home/.cargo/registry/src/index.crates.io-6f17d22bba15001f/regex-syntax-0.8.2/src/ast/parse.rs:regex_syntax::ast::parse::ParserI

::char (15,929x) + 15,929 ( 0.00%) . . . concat.span.end = self.pos(); + 191,148 ( 0.06%) . . . self.push_or_add_alternation(concat); + 31,858 ( 0.01%) . . . self.bump(); +1,417,681 ( 0.41%) . . . => /home/.cargo/registry/src/index.crates.io-6f17d22bba15001f/regex-syntax-0.8.2/src/ast/parse.rs:regex_syntax::ast::parse::ParserI

::bump (15,929x) + 63,716 ( 0.02%) . . . Ok(ast::Concat { span: self.span(), asts: vec![] }) + 127,432 ( 0.04%) . . . } + . . . . + . . . . /// Pushes or adds the given branch of an alternation to the parser's + . . . . /// internal stack of state. + . . . . fn push_or_add_alternation(&self, concat: ast::Concat) { + . . . . use self::GroupState::*; + . . . . + . . . . let mut stack = self.parser().stack_group.borrow_mut(); + 31,858 ( 0.01%) . . . if let Some(&mut Alternation(ref mut alts)) = stack.last_mut() { + 32,279 ( 0.01%) . . . alts.asts.push(concat.into_ast()); +3,577,023 ( 1.03%) 21,174 ( 2.61%) . . => /home/.cargo/registry/src/index.crates.io-6f17d22bba15001f/regex-syntax-0.8.2/src/ast/mod.rs:regex_syntax::ast::Concat::into_ast (15,417x) + . . . . return; + . . . . } + 3,072 ( 0.00%) . . . stack.push(Alternation(ast::Alternation { + 2,048 ( 0.00%) . . . span: Span::new(concat.span.start, self.pos()), + 2,048 ( 0.00%) . . . asts: vec![concat.into_ast()], + 101,567 ( 0.03%) 488 ( 0.06%) . . => /home/.cargo/registry/src/index.crates.io-6f17d22bba15001f/regex-syntax-0.8.2/src/ast/mod.rs:regex_syntax::ast::Concat::into_ast (512x) + . . . . })); + 15,929 ( 0.00%) . . . } + . . . . + . . . . /// Parse and push a group AST (and its parent concatenation) on to the + . . . . /// parser's internal stack. Return a fresh concatenation corresponding + . . . . /// to the group's sub-AST. + . . . . /// + . . . . /// If a set of flags was found (with no group), then the concatenation + . . . . /// is returned with that set of flags added. + . . . . /// + . . . . /// This assumes that the parser is currently positioned on the opening + . . . . /// parenthesis. It advances the parser to the character at the start + . . . . /// of the sub-expression (or adjoining expression). + . . . . /// + . . . . /// If there was a problem parsing the start of the group, then an error + . . . . /// is returned. + . . . . #[inline(never)] + 7,130 ( 0.00%) . . . fn push_group(&self, mut concat: ast::Concat) -> Result { + 3,565 ( 0.00%) . . . assert_eq!(self.char(), '('); + 14,244 ( 0.00%) . . . => /home/.cargo/registry/src/index.crates.io-6f17d22bba15001f/regex-syntax-0.8.2/src/ast/parse.rs:regex_syntax::ast::parse::ParserI

::char (713x) + 3,565 ( 0.00%) . . . match self.parse_group()? { +1,447,519 ( 0.42%) 689 ( 0.09%) . . => /home/.cargo/registry/src/index.crates.io-6f17d22bba15001f/regex-syntax-0.8.2/src/ast/parse.rs:regex_syntax::ast::parse::ParserI

::parse_group (713x) + . . . . Either::Left(set) => { + . . . . let ignore = set.flags.flag_state(ast::Flag::IgnoreWhitespace); + . . . . if let Some(v) = ignore { + . . . . self.parser().ignore_whitespace.set(v); + . . . . } + . . . . + 10 ( 0.00%) . . . concat.asts.push(Ast::flags(set)); + 200 ( 0.00%) . . . Ok(concat) + . . . . } + . . . . Either::Right(group) => { + 693 ( 0.00%) . . . let old_ignore_whitespace = self.ignore_whitespace(); + . . . . let new_ignore_whitespace = group + . . . . .flags() + . . . . .and_then(|f| f.flag_state(ast::Flag::IgnoreWhitespace)) + . . . . .unwrap_or(old_ignore_whitespace); + 81 ( 0.00%) . . . self.parser().stack_group.borrow_mut().push( + 6,930 ( 0.00%) . . . GroupState::Group { + . . . . concat, + . . . . group, + . . . . ignore_whitespace: old_ignore_whitespace, + . . . . }, + . . . . ); + . . . . self.parser().ignore_whitespace.set(new_ignore_whitespace); + 2,079 ( 0.00%) . . . Ok(ast::Concat { span: self.span(), asts: vec![] }) + . . . . } + . . . . } + 5,704 ( 0.00%) . . . } + . . . . + . . . . /// Pop a group AST from the parser's internal stack and set the group's + . . . . /// AST to the given concatenation. Return the concatenation containing + . . . . /// the group. + . . . . /// + . . . . /// This assumes that the parser is currently positioned on the closing + . . . . /// parenthesis and advances the parser to the character following the `)`. + . . . . /// + . . . . /// If no such group could be popped, then an unopened group error is + . . . . /// returned. + . . . . #[inline(never)] + 6,930 ( 0.00%) . . . fn pop_group(&self, mut group_concat: ast::Concat) -> Result { + . . . . use self::GroupState::*; + . . . . + 3,465 ( 0.00%) . . . assert_eq!(self.char(), ')'); + 13,860 ( 0.00%) . . . => /home/.cargo/registry/src/index.crates.io-6f17d22bba15001f/regex-syntax-0.8.2/src/ast/parse.rs:regex_syntax::ast::parse::ParserI

::char (693x) + 693 ( 0.00%) . . . let mut stack = self.parser().stack_group.borrow_mut(); + 24,948 ( 0.01%) . . . let (mut prior_concat, mut group, ignore_whitespace, alt) = match stack + . . . . .pop() + . . . . { + 5,249 ( 0.00%) . . . Some(Group { concat, group, ignore_whitespace }) => { + . . . . (concat, group, ignore_whitespace, None) + . . . . } + 3,072 ( 0.00%) . . . Some(Alternation(alt)) => match stack.pop() { + 14,848 ( 0.00%) . . . Some(Group { concat, group, ignore_whitespace }) => { + 3,584 ( 0.00%) . . . (concat, group, ignore_whitespace, Some(alt)) + . . . . } + . . . . None | Some(Alternation(_)) => { + . . . . return Err(self.error( + . . . . self.span_char(), + . . . . ast::ErrorKind::GroupUnopened, + . . . . )); + . . . . } + . . . . }, + . . . . None => { + . . . . return Err(self + . . . . .error(self.span_char(), ast::ErrorKind::GroupUnopened)); + . . . . } + . . . . }; + . . . . self.parser().ignore_whitespace.set(ignore_whitespace); + 2,772 ( 0.00%) . . . group_concat.span.end = self.pos(); + 693 ( 0.00%) . . . self.bump(); + 61,445 ( 0.02%) . . . => /home/.cargo/registry/src/index.crates.io-6f17d22bba15001f/regex-syntax-0.8.2/src/ast/parse.rs:regex_syntax::ast::parse::ParserI

::bump (693x) + . . . . group.span.end = self.pos(); + 1,386 ( 0.00%) . . . match alt { + 4,096 ( 0.00%) . . . Some(mut alt) => { + 2,048 ( 0.00%) . . . alt.span.end = group_concat.span.end; + 7,680 ( 0.00%) . . . alt.asts.push(group_concat.into_ast()); + 111,302 ( 0.03%) 575 ( 0.07%) . . => /home/.cargo/registry/src/index.crates.io-6f17d22bba15001f/regex-syntax-0.8.2/src/ast/mod.rs:regex_syntax::ast::Concat::into_ast (512x) + 6,144 ( 0.00%) . . . group.ast = Box::new(alt.into_ast()); + 106,628 ( 0.03%) 584 ( 0.07%) . . => /home/.cargo/registry/src/index.crates.io-6f17d22bba15001f/regex-syntax-0.8.2/src/ast/mod.rs:regex_syntax::ast::Alternation::into_ast (512x) + . . . . } + . . . . None => { + 2,172 ( 0.00%) . . . group.ast = Box::new(group_concat.into_ast()); + 45,733 ( 0.01%) 260 ( 0.03%) . . => /home/.cargo/registry/src/index.crates.io-6f17d22bba15001f/regex-syntax-0.8.2/src/ast/mod.rs:regex_syntax::ast::Concat::into_ast (181x) + . . . . } + . . . . } + . . . . prior_concat.asts.push(Ast::group(group)); + 6,930 ( 0.00%) . . . Ok(prior_concat) + 5,544 ( 0.00%) . . . } + . . . . + . . . . /// Pop the last state from the parser's internal stack, if it exists, and + . . . . /// add the given concatenation to it. There either must be no state or a + . . . . /// single alternation item on the stack. Any other scenario produces an + . . . . /// error. + . . . . /// + . . . . /// This assumes that the parser has advanced to the end. + . . . . #[inline(never)] + 567 ( 0.00%) . . . fn pop_group_end(&self, mut concat: ast::Concat) -> Result { + 405 ( 0.00%) . . . concat.span.end = self.pos(); + . . . . let mut stack = self.parser().stack_group.borrow_mut(); + . . . . let ast = match stack.pop() { + 1,134 ( 0.00%) . . . None => Ok(concat.into_ast()), + 23,172 ( 0.01%) 134 ( 0.02%) . . => /home/.cargo/registry/src/index.crates.io-6f17d22bba15001f/regex-syntax-0.8.2/src/ast/mod.rs:regex_syntax::ast::Concat::into_ast (81x) + . . . . Some(GroupState::Alternation(mut alt)) => { + . . . . alt.span.end = self.pos(); + . . . . alt.asts.push(concat.into_ast()); + . . . . Ok(Ast::alternation(alt)) + . . . . } + . . . . Some(GroupState::Group { group, .. }) => { + . . . . return Err( + . . . . self.error(group.span, ast::ErrorKind::GroupUnclosed) + . . . . ); + . . . . } + . . . . }; + . . . . // If we try to pop again, there should be nothing. + . . . . match stack.pop() { + 1,296 ( 0.00%) . . . None => ast, + . . . . Some(GroupState::Alternation(_)) => { + . . . . // This unreachable is unfortunate. This case can't happen + . . . . // because the only way we can be here is if there were two + . . . . // `GroupState::Alternation`s adjacent in the parser's stack, + . . . . // which we guarantee to never happen because we never push a + . . . . // `GroupState::Alternation` if one is already at the top of + . . . . // the stack. + . . . . unreachable!() + . . . . } + . . . . Some(GroupState::Group { group, .. }) => { + . . . . Err(self.error(group.span, ast::ErrorKind::GroupUnclosed)) + . . . . } + . . . . } + 648 ( 0.00%) . . . } + . . . . + . . . . /// Parse the opening of a character class and push the current class + . . . . /// parsing context onto the parser's stack. This assumes that the parser + . . . . /// is positioned at an opening `[`. The given union should correspond to + . . . . /// the union of set items built up before seeing the `[`. + . . . . /// + . . . . /// If there was a problem parsing the opening of the class, then an error + . . . . /// is returned. Otherwise, a new union of set items for the class is + . . . . /// returned (which may be populated with either a `]` or a `-`). + . . . . #[inline(never)] + 25,416 ( 0.01%) . . . fn push_class_open( + . . . . &self, + . . . . parent_union: ast::ClassSetUnion, + . . . . ) -> Result { + 14,120 ( 0.00%) . . . assert_eq!(self.char(), '['); + 56,432 ( 0.02%) . . . => /home/.cargo/registry/src/index.crates.io-6f17d22bba15001f/regex-syntax-0.8.2/src/ast/parse.rs:regex_syntax::ast::parse::ParserI

::char (2,824x) + . . . . + 50,832 ( 0.01%) . . . let (nested_set, nested_union) = self.parse_set_class_open()?; + 850,317 ( 0.25%) . . . => /home/.cargo/registry/src/index.crates.io-6f17d22bba15001f/regex-syntax-0.8.2/src/ast/parse.rs:regex_syntax::ast::parse::ParserI

::parse_set_class_open (2,824x) + 2,824 ( 0.00%) . . . self.parser() + . . . . .stack_class + . . . . .borrow_mut() + . . . . .push(ClassState::Open { union: parent_union, set: nested_set }); + 31,064 ( 0.01%) . . . Ok(nested_union) + 19,768 ( 0.01%) . . . } + . . . . + . . . . /// Parse the end of a character class set and pop the character class + . . . . /// parser stack. The union given corresponds to the last union built + . . . . /// before seeing the closing `]`. The union returned corresponds to the + . . . . /// parent character class set with the nested class added to it. + . . . . /// + . . . . /// This assumes that the parser is positioned at a `]` and will advance + . . . . /// the parser to the byte immediately following the `]`. +-- line 841 ---------------------------------------- +-- line 842 ---------------------------------------- + . . . . /// + . . . . /// If the stack is empty after popping, then this returns the final + . . . . /// "top-level" character class AST (where a "top-level" character class + . . . . /// is one that is not nested inside any other character class). + . . . . /// + . . . . /// If there is no corresponding opening bracket on the parser's stack, + . . . . /// then an error is returned. + . . . . #[inline(never)] + 28,240 ( 0.01%) . . . fn pop_class( + . . . . &self, + . . . . nested_union: ast::ClassSetUnion, + . . . . ) -> Result> { + 14,120 ( 0.00%) . . . assert_eq!(self.char(), ']'); + 56,480 ( 0.02%) . . . => /home/.cargo/registry/src/index.crates.io-6f17d22bba15001f/regex-syntax-0.8.2/src/ast/parse.rs:regex_syntax::ast::parse::ParserI

::char (2,824x) + . . . . + . . . . let item = ast::ClassSet::Item(nested_union.into_item()); + 8,472 ( 0.00%) . . . let prevset = self.pop_class_op(item); + 516,792 ( 0.15%) . . . => /home/.cargo/registry/src/index.crates.io-6f17d22bba15001f/regex-syntax-0.8.2/src/ast/parse.rs:regex_syntax::ast::parse::ParserI

::pop_class_op (2,824x) + . . . . let mut stack = self.parser().stack_class.borrow_mut(); + 11,296 ( 0.00%) . . . match stack.pop() { + . . . . None => { + . . . . // We can never observe an empty stack: + . . . . // + . . . . // 1) We are guaranteed to start with a non-empty stack since + . . . . // the character class parser is only initiated when it sees + . . . . // a `[`. + . . . . // 2) If we ever observe an empty stack while popping after + . . . . // seeing a `]`, then we signal the character class parser +-- line 867 ---------------------------------------- +-- line 872 ---------------------------------------- + . . . . // This panic is unfortunate, but this case is impossible + . . . . // since we already popped the Op state if one exists above. + . . . . // Namely, every push to the class parser stack is guarded by + . . . . // whether an existing Op is already on the top of the stack. + . . . . // If it is, the existing Op is modified. That is, the stack + . . . . // can never have consecutive Op states. + . . . . panic!("unexpected ClassState::Op") + . . . . } + 42,360 ( 0.01%) . . . Some(ClassState::Open { mut union, mut set }) => { + 84,720 ( 0.02%) . . . => ./string/../sysdeps/x86_64/multiarch/memmove-vec-unaligned-erms.S:__memcpy_avx_unaligned_erms (2,824x) + 5,648 ( 0.00%) . . . self.bump(); + 251,256 ( 0.07%) . . . => /home/.cargo/registry/src/index.crates.io-6f17d22bba15001f/regex-syntax-0.8.2/src/ast/parse.rs:regex_syntax::ast::parse::ParserI

::bump (2,824x) + . . . . set.span.end = self.pos(); + 19,768 ( 0.01%) . . . set.kind = prevset; + 84,720 ( 0.02%) . . . => ./string/../sysdeps/x86_64/multiarch/memmove-vec-unaligned-erms.S:__memcpy_avx_unaligned_erms (2,824x) + 172,264 ( 0.05%) . . . => /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/core/src/ptr/mod.rs:core::ptr::drop_in_place (2,824x) + 2,824 ( 0.00%) . . . if stack.is_empty() { + 8,259 ( 0.00%) . . . Ok(Either::Right(set)) + 82,590 ( 0.02%) . . . => ./string/../sysdeps/x86_64/multiarch/memmove-vec-unaligned-erms.S:__memcpy_avx_unaligned_erms (2,753x) + . . . . } else { + 142 ( 0.00%) . . . union.push(ast::ClassSetItem::Bracketed(Box::new(set))); + 2,130 ( 0.00%) . . . => ./string/../sysdeps/x86_64/multiarch/memmove-vec-unaligned-erms.S:__memcpy_avx_unaligned_erms (71x) + 923 ( 0.00%) . . . Ok(Either::Left(union)) + . . . . } + . . . . } + . . . . } + 22,592 ( 0.01%) . . . } + . . . . + . . . . /// Return an "unclosed class" error whose span points to the most + . . . . /// recently opened class. + . . . . /// + . . . . /// This should only be called while parsing a character class. + . . . . #[inline(never)] + . . . . fn unclosed_class_error(&self) -> ast::Error { + . . . . for state in self.parser().stack_class.borrow().iter().rev() { +-- line 900 ---------------------------------------- +-- line 928 ---------------------------------------- + . . . . } + . . . . + . . . . /// Pop a character class set from the character class parser stack. If the + . . . . /// top of the stack is just an item (not an operation), then return the + . . . . /// given set unchanged. If the top of the stack is an operation, then the + . . . . /// given set will be used as the rhs of the operation on the top of the + . . . . /// stack. In that case, the binary operation is returned as a set. + . . . . #[inline(never)] + 22,592 ( 0.01%) . . . fn pop_class_op(&self, rhs: ast::ClassSet) -> ast::ClassSet { + . . . . let mut stack = self.parser().stack_class.borrow_mut(); + 11,296 ( 0.00%) . . . let (kind, lhs) = match stack.pop() { + . . . . Some(ClassState::Op { kind, lhs }) => (kind, lhs), + 50,832 ( 0.01%) . . . Some(state @ ClassState::Open { .. }) => { + 84,720 ( 0.02%) . . . => ./string/../sysdeps/x86_64/multiarch/memmove-vec-unaligned-erms.S:__memcpy_avx_unaligned_erms (2,824x) + . . . . stack.push(state); + 14,120 ( 0.00%) . . . return rhs; + 84,720 ( 0.02%) . . . => ./string/../sysdeps/x86_64/multiarch/memmove-vec-unaligned-erms.S:__memcpy_avx_unaligned_erms (2,824x) + . . . . } + . . . . None => unreachable!(), + . . . . }; + . . . . let span = Span::new(lhs.span().start, rhs.span().end); + . . . . ast::ClassSet::BinaryOp(ast::ClassSetBinaryOp { + . . . . span, + . . . . kind, + . . . . lhs: Box::new(lhs), + . . . . rhs: Box::new(rhs), + . . . . }) + 25,416 ( 0.01%) . . . } + . . . . } + . . . . + . . . . impl<'s, P: Borrow> ParserI<'s, P> { + . . . . /// Parse the regular expression into an abstract syntax tree. + . . . . fn parse(&self) -> Result { + 81 ( 0.00%) . . . self.parse_with_comments().map(|astc| astc.ast) +59,197,629 (17.10%) 142,225 (17.56%) 1 ( 0.32%) . => /home/.cargo/registry/src/index.crates.io-6f17d22bba15001f/regex-syntax-0.8.2/src/ast/parse.rs:regex_syntax::ast::parse::ParserI

::parse_with_comments (81x) + . . . . } + . . . . + . . . . /// Parse the regular expression and return an abstract syntax tree with + . . . . /// all of the comments found in the pattern. + 567 ( 0.00%) . . . fn parse_with_comments(&self) -> Result { + 324 ( 0.00%) . . . assert_eq!(self.offset(), 0, "parser can only be used once"); + . . . . self.parser().reset(); + 1,053 ( 0.00%) . . . let mut concat = ast::Concat { span: self.span(), asts: vec![] }; + . . . . loop { + 143,322 ( 0.04%) . . . self.bump_space(); +1,289,898 ( 0.37%) . . . => /home/.cargo/registry/src/index.crates.io-6f17d22bba15001f/regex-syntax-0.8.2/src/ast/parse.rs:regex_syntax::ast::parse::ParserI

::bump_space (71,661x) + 71,661 ( 0.02%) . . . if self.is_eof() { + . . . . break; + . . . . } + 502,156 ( 0.15%) . . . match self.char() { +1,431,276 ( 0.41%) . . . => /home/.cargo/registry/src/index.crates.io-6f17d22bba15001f/regex-syntax-0.8.2/src/ast/parse.rs:regex_syntax::ast::parse::ParserI

::char (71,580x) + 10,695 ( 0.00%) . . . '(' => concat = self.push_group(concat)?, +1,561,216 ( 0.45%) 691 ( 0.09%) . . => /home/.cargo/registry/src/index.crates.io-6f17d22bba15001f/regex-syntax-0.8.2/src/ast/parse.rs:regex_syntax::ast::parse::ParserI

::push_group (713x) + 10,395 ( 0.00%) . . . ')' => concat = self.pop_group(concat)?, + 922,916 ( 0.27%) 2,262 ( 0.28%) 1 ( 0.32%) . => /home/.cargo/registry/src/index.crates.io-6f17d22bba15001f/regex-syntax-0.8.2/src/ast/parse.rs:regex_syntax::ast::parse::ParserI

::pop_group (693x) + 238,935 ( 0.07%) . . . '|' => concat = self.push_alternate(concat)?, +7,601,358 ( 2.20%) 26,127 ( 3.23%) . . => /home/.cargo/registry/src/index.crates.io-6f17d22bba15001f/regex-syntax-0.8.2/src/ast/parse.rs:regex_syntax::ast::parse::ParserI

::push_alternate (15,929x) + . . . . '[' => { + 52,307 ( 0.02%) . . . let class = self.parse_set_class()?; +8,247,277 ( 2.38%) 1,236 ( 0.15%) . . => /home/.cargo/registry/src/index.crates.io-6f17d22bba15001f/regex-syntax-0.8.2/src/ast/parse.rs:regex_syntax::ast::parse::ParserI

::parse_set_class (2,753x) + . . . . concat.asts.push(Ast::class_bracketed(class)); + . . . . } + . . . . '?' => { + . . . . concat = self.parse_uncounted_repetition( + 16,370 ( 0.00%) . . . concat, + 1,637 ( 0.00%) . . . ast::RepetitionKind::ZeroOrOne, + . . . . )?; + . . . . } + . . . . '*' => { + . . . . concat = self.parse_uncounted_repetition( + 170 ( 0.00%) . . . concat, + 34 ( 0.00%) . . . ast::RepetitionKind::ZeroOrMore, + . . . . )?; + . . . . } + . . . . '+' => { + . . . . concat = self.parse_uncounted_repetition( + 590 ( 0.00%) . . . concat, + 118 ( 0.00%) . . . ast::RepetitionKind::OneOrMore, + . . . . )?; + . . . . } + . . . . '{' => { + 2,580 ( 0.00%) . . . concat = self.parse_counted_repetition(concat)?; + 250,967 ( 0.07%) 134 ( 0.02%) . . => /home/.cargo/registry/src/index.crates.io-6f17d22bba15001f/regex-syntax-0.8.2/src/ast/parse.rs:regex_syntax::ast::parse::ParserI

::parse_counted_repetition (172x) + . . . . } + . . . . _ => concat.asts.push(self.parse_primitive()?.into_ast()), + . . . . } + . . . . } + 1,458 ( 0.00%) . . . let ast = self.pop_group_end(concat)?; + 28,437 ( 0.01%) 134 ( 0.02%) . . => /home/.cargo/registry/src/index.crates.io-6f17d22bba15001f/regex-syntax-0.8.2/src/ast/parse.rs:regex_syntax::ast::parse::ParserI

::pop_group_end (81x) + 162 ( 0.00%) . . . NestLimiter::new(self).check(&ast)?; +5,820,805 ( 1.68%) 301 ( 0.04%) . . => /home/.cargo/registry/src/index.crates.io-6f17d22bba15001f/regex-syntax-0.8.2/src/ast/parse.rs:regex_syntax::ast::parse::NestLimiter

::check (81x) + 162 ( 0.00%) . . . Ok(ast::WithComments { + 81 ( 0.00%) . . . ast, + . . . . comments: mem::replace( + . . . . &mut *self.parser().comments.borrow_mut(), + . . . . vec![], + . . . . ), + . . . . }) + 648 ( 0.00%) . . . } + . . . . + . . . . /// Parses an uncounted repetition operation. An uncounted repetition + . . . . /// operator includes ?, * and +, but does not include the {m,n} syntax. + . . . . /// The given `kind` should correspond to the operator observed by the + . . . . /// caller. + . . . . /// + . . . . /// This assumes that the parser is currently positioned at the repetition + . . . . /// operator and advances the parser to the first character after the + . . . . /// operator. (Note that the operator may include a single additional `?`, + . . . . /// which makes the operator ungreedy.) + . . . . /// + . . . . /// The caller should include the concatenation that is being built. The + . . . . /// concatenation returned includes the repetition operator applied to the + . . . . /// last expression in the given concatenation. + . . . . #[inline(never)] + 18,843 ( 0.01%) . . . fn parse_uncounted_repetition( + . . . . &self, + . . . . mut concat: ast::Concat, + . . . . kind: ast::RepetitionKind, + . . . . ) -> Result { + 59 ( 0.00%) . . . assert!( + 7,333 ( 0.00%) . . . self.char() == '?' || self.char() == '*' || self.char() == '+' + 36,960 ( 0.01%) . . . => /home/.cargo/registry/src/index.crates.io-6f17d22bba15001f/regex-syntax-0.8.2/src/ast/parse.rs:regex_syntax::ast::parse::ParserI

::char (1,848x) + . . . . ); + 1,713 ( 0.00%) . . . let op_start = self.pos(); + 1,713 ( 0.00%) . . . let ast = match concat.asts.pop() { + 3,426 ( 0.00%) . . . Some(ast) => ast, + . . . . None => { + . . . . return Err( + . . . . self.error(self.span(), ast::ErrorKind::RepetitionMissing) + . . . . ) + . . . . } + . . . . }; + 3,426 ( 0.00%) . . . match ast { + . . . . Ast::Empty(_) | Ast::Flags(_) => { + . . . . return Err( + . . . . self.error(self.span(), ast::ErrorKind::RepetitionMissing) + . . . . ) + . . . . } + . . . . _ => {} + . . . . } + . . . . let mut greedy = true; + 17,118 ( 0.00%) . . . if self.bump() && self.char() == '?' { + 152,445 ( 0.04%) . . . => /home/.cargo/registry/src/index.crates.io-6f17d22bba15001f/regex-syntax-0.8.2/src/ast/parse.rs:regex_syntax::ast::parse::ParserI

::bump (1,713x) + 34,200 ( 0.01%) . . . => /home/.cargo/registry/src/index.crates.io-6f17d22bba15001f/regex-syntax-0.8.2/src/ast/parse.rs:regex_syntax::ast::parse::ParserI

::char (1,710x) + . . . . greedy = false; + . . . . self.bump(); + . . . . } + 23,982 ( 0.01%) . . . concat.asts.push(Ast::repetition(ast::Repetition { + . . . . span: ast.span().with_end(self.pos()), + 6,852 ( 0.00%) . . . op: ast::RepetitionOp { + 6,852 ( 0.00%) . . . span: Span::new(op_start, self.pos()), + . . . . kind, + . . . . }, + . . . . greedy, + . . . . ast: Box::new(ast), + . . . . })); + 18,843 ( 0.01%) . . . Ok(concat) + 13,704 ( 0.00%) . . . } + . . . . + . . . . /// Parses a counted repetition operation. A counted repetition operator + . . . . /// corresponds to the {m,n} syntax, and does not include the ?, * or + + . . . . /// operators. + . . . . /// + . . . . /// This assumes that the parser is currently positioned at the opening `{` + . . . . /// and advances the parser to the first character after the operator. + . . . . /// (Note that the operator may include a single additional `?`, which + . . . . /// makes the operator ungreedy.) + . . . . /// + . . . . /// The caller should include the concatenation that is being built. The + . . . . /// concatenation returned includes the repetition operator applied to the + . . . . /// last expression in the given concatenation. + . . . . #[inline(never)] + 1,720 ( 0.00%) . . . fn parse_counted_repetition( + . . . . &self, + . . . . mut concat: ast::Concat, + . . . . ) -> Result { + 688 ( 0.00%) . . . assert!(self.char() == '{'); + 3,440 ( 0.00%) . . . => /home/.cargo/registry/src/index.crates.io-6f17d22bba15001f/regex-syntax-0.8.2/src/ast/parse.rs:regex_syntax::ast::parse::ParserI

::char (172x) + 172 ( 0.00%) . . . let start = self.pos(); + 172 ( 0.00%) . . . let ast = match concat.asts.pop() { + 344 ( 0.00%) . . . Some(ast) => ast, + . . . . None => { + . . . . return Err( + . . . . self.error(self.span(), ast::ErrorKind::RepetitionMissing) + . . . . ) + . . . . } + . . . . }; + 344 ( 0.00%) . . . match ast { + . . . . Ast::Empty(_) | Ast::Flags(_) => { + . . . . return Err( + . . . . self.error(self.span(), ast::ErrorKind::RepetitionMissing) + . . . . ) + . . . . } + . . . . _ => {} + . . . . } + 172 ( 0.00%) . . . if !self.bump_and_bump_space() { + . . . . return Err(self.error( + . . . . Span::new(start, self.pos()), + . . . . ast::ErrorKind::RepetitionCountUnclosed, + . . . . )); + . . . . } + 344 ( 0.00%) . . . let count_start = specialize_err( + 5,676 ( 0.00%) . . . => /home/.cargo/registry/src/index.crates.io-6f17d22bba15001f/regex-syntax-0.8.2/src/ast/parse.rs:regex_syntax::ast::parse::specialize_err (172x) + 516 ( 0.00%) . . . self.parse_decimal(), + 78,456 ( 0.02%) 2 ( 0.00%) . . => /home/.cargo/registry/src/index.crates.io-6f17d22bba15001f/regex-syntax-0.8.2/src/ast/parse.rs:regex_syntax::ast::parse::ParserI

::parse_decimal (172x) + 172 ( 0.00%) . . . ast::ErrorKind::DecimalEmpty, + 688 ( 0.00%) . . . ast::ErrorKind::RepetitionCountDecimalEmpty, + . . . . )?; + . . . . let mut range = ast::RepetitionRange::Exactly(count_start); + 172 ( 0.00%) . . . if self.is_eof() { + . . . . return Err(self.error( + . . . . Span::new(start, self.pos()), + . . . . ast::ErrorKind::RepetitionCountUnclosed, + . . . . )); + . . . . } + 1,032 ( 0.00%) . . . if self.char() == ',' { + 3,440 ( 0.00%) . . . => /home/.cargo/registry/src/index.crates.io-6f17d22bba15001f/regex-syntax-0.8.2/src/ast/parse.rs:regex_syntax::ast::parse::ParserI

::char (172x) + 268 ( 0.00%) . . . if !self.bump_and_bump_space() { + 8,040 ( 0.00%) . . . => /home/.cargo/registry/src/index.crates.io-6f17d22bba15001f/regex-syntax-0.8.2/src/ast/parse.rs:regex_syntax::ast::parse::ParserI

::bump_and_bump_space (67x) + . . . . return Err(self.error( + . . . . Span::new(start, self.pos()), + . . . . ast::ErrorKind::RepetitionCountUnclosed, + . . . . )); + . . . . } + 268 ( 0.00%) . . . if self.char() != '}' { + 1,340 ( 0.00%) . . . => /home/.cargo/registry/src/index.crates.io-6f17d22bba15001f/regex-syntax-0.8.2/src/ast/parse.rs:regex_syntax::ast::parse::ParserI

::char (67x) + 134 ( 0.00%) . . . let count_end = specialize_err( + 2,211 ( 0.00%) . . . => /home/.cargo/registry/src/index.crates.io-6f17d22bba15001f/regex-syntax-0.8.2/src/ast/parse.rs:regex_syntax::ast::parse::specialize_err (67x) + 134 ( 0.00%) . . . self.parse_decimal(), + 27,943 ( 0.01%) . . . => /home/.cargo/registry/src/index.crates.io-6f17d22bba15001f/regex-syntax-0.8.2/src/ast/parse.rs:regex_syntax::ast::parse::ParserI

::parse_decimal (67x) + 67 ( 0.00%) . . . ast::ErrorKind::DecimalEmpty, + 268 ( 0.00%) . . . ast::ErrorKind::RepetitionCountDecimalEmpty, + . . . . )?; + . . . . range = ast::RepetitionRange::Bounded(count_start, count_end); + . . . . } else { + . . . . range = ast::RepetitionRange::AtLeast(count_start); + . . . . } + . . . . } + 1,032 ( 0.00%) . . . if self.is_eof() || self.char() != '}' { + 3,440 ( 0.00%) . . . => /home/.cargo/registry/src/index.crates.io-6f17d22bba15001f/regex-syntax-0.8.2/src/ast/parse.rs:regex_syntax::ast::parse::ParserI

::char (172x) + . . . . return Err(self.error( + . . . . Span::new(start, self.pos()), + . . . . ast::ErrorKind::RepetitionCountUnclosed, + . . . . )); + . . . . } + . . . . + . . . . let mut greedy = true; + 1,720 ( 0.00%) . . . if self.bump_and_bump_space() && self.char() == '?' { + 20,640 ( 0.01%) . . . => /home/.cargo/registry/src/index.crates.io-6f17d22bba15001f/regex-syntax-0.8.2/src/ast/parse.rs:regex_syntax::ast::parse::ParserI

::bump_and_bump_space (172x) + 3,440 ( 0.00%) . . . => /home/.cargo/registry/src/index.crates.io-6f17d22bba15001f/regex-syntax-0.8.2/src/ast/parse.rs:regex_syntax::ast::parse::ParserI

::char (172x) + . . . . greedy = false; + . . . . self.bump(); + . . . . } + . . . . + 688 ( 0.00%) . . . let op_span = Span::new(start, self.pos()); + 172 ( 0.00%) . . . if !range.is_valid() { + . . . . return Err( + . . . . self.error(op_span, ast::ErrorKind::RepetitionCountInvalid) + . . . . ); + . . . . } + 1,892 ( 0.00%) . . . concat.asts.push(Ast::repetition(ast::Repetition { + 23,583 ( 0.01%) 80 ( 0.01%) . . => /home/.cargo/registry/src/index.crates.io-6f17d22bba15001f/regex-syntax-0.8.2/src/ast/mod.rs:regex_syntax::ast::Ast::repetition (172x) + 3,096 ( 0.00%) . . . => /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/alloc/src/vec/mod.rs:alloc::vec::Vec::push (172x) + 172 ( 0.00%) . . . span: ast.span().with_end(self.pos()), + 1,204 ( 0.00%) . . . => /home/.cargo/registry/src/index.crates.io-6f17d22bba15001f/regex-syntax-0.8.2/src/ast/mod.rs:regex_syntax::ast::Ast::span (172x) + . . . . op: ast::RepetitionOp { + 1,032 ( 0.00%) . . . span: op_span, + . . . . kind: ast::RepetitionKind::Range(range), + . . . . }, + . . . . greedy, + . . . . ast: Box::new(ast), + . . . . })); + 2,064 ( 0.00%) . . . Ok(concat) + 1,376 ( 0.00%) . . . } + . . . . + . . . . /// Parse a group (which contains a sub-expression) or a set of flags. + . . . . /// + . . . . /// If a group was found, then it is returned with an empty AST. If a set + . . . . /// of flags is found, then that set is returned. + . . . . /// + . . . . /// The parser should be positioned at the opening parenthesis. + . . . . /// +-- line 1180 ---------------------------------------- +-- line 1185 ---------------------------------------- + . . . . /// # Errors + . . . . /// + . . . . /// If flags are given and incorrectly specified, then a corresponding + . . . . /// error is returned. + . . . . /// + . . . . /// If a capture name is given and it is incorrectly specified, then a + . . . . /// corresponding error is returned. + . . . . #[inline(never)] + 6,417 ( 0.00%) . . . fn parse_group(&self) -> Result> { + 3,565 ( 0.00%) . . . assert_eq!(self.char(), '('); + 14,244 ( 0.00%) . . . => /home/.cargo/registry/src/index.crates.io-6f17d22bba15001f/regex-syntax-0.8.2/src/ast/parse.rs:regex_syntax::ast::parse::ParserI

::char (713x) + . . . . let open_span = self.span_char(); + 1,426 ( 0.00%) . . . self.bump(); + 63,425 ( 0.02%) . . . => /home/.cargo/registry/src/index.crates.io-6f17d22bba15001f/regex-syntax-0.8.2/src/ast/parse.rs:regex_syntax::ast::parse::ParserI

::bump (713x) + 1,426 ( 0.00%) . . . self.bump_space(); + 12,834 ( 0.00%) . . . => /home/.cargo/registry/src/index.crates.io-6f17d22bba15001f/regex-syntax-0.8.2/src/ast/parse.rs:regex_syntax::ast::parse::ParserI

::bump_space (713x) + . . . . if self.is_lookaround_prefix() { + . . . . return Err(self.error( + . . . . Span::new(open_span.start, self.span().end), + . . . . ast::ErrorKind::UnsupportedLookAround, + . . . . )); + . . . . } + . . . . let inner_span = self.span(); + . . . . let mut starts_with_p = true; + . . . . if self.bump_if("?P<") || { + . . . . starts_with_p = false; + . . . . self.bump_if("?<") + . . . . } { + . . . . let capture_index = self.next_capture_index(open_span)?; + 4,102 ( 0.00%) . . . let name = self.parse_capture_name(capture_index)?; + 843,071 ( 0.24%) 314 ( 0.04%) . . => /home/.cargo/registry/src/index.crates.io-6f17d22bba15001f/regex-syntax-0.8.2/src/ast/parse.rs:regex_syntax::ast::parse::ParserI

::parse_capture_name (586x) + 15,822 ( 0.00%) . . . Ok(Either::Right(ast::Group { + . . . . span: open_span, + 2,930 ( 0.00%) . . . kind: ast::GroupKind::CaptureName { starts_with_p, name }, + 1,758 ( 0.00%) . . . ast: Box::new(Ast::empty(self.span())), + 42,661 ( 0.01%) 12 ( 0.00%) . . => /home/.cargo/registry/src/index.crates.io-6f17d22bba15001f/regex-syntax-0.8.2/src/ast/mod.rs:regex_syntax::ast::Ast::empty (586x) + . . . . })) + . . . . } else if self.bump_if("?") { + 20 ( 0.00%) . . . if self.is_eof() { + . . . . return Err( + . . . . self.error(open_span, ast::ErrorKind::GroupUnclosed) + . . . . ); + . . . . } + 160 ( 0.00%) . . . let flags = self.parse_flags()?; + 16,800 ( 0.00%) 20 ( 0.00%) . . => /home/.cargo/registry/src/index.crates.io-6f17d22bba15001f/regex-syntax-0.8.2/src/ast/parse.rs:regex_syntax::ast::parse::ParserI

::parse_flags (20x) + 80 ( 0.00%) . . . let char_end = self.char(); + 400 ( 0.00%) . . . => /home/.cargo/registry/src/index.crates.io-6f17d22bba15001f/regex-syntax-0.8.2/src/ast/parse.rs:regex_syntax::ast::parse::ParserI

::char (20x) + 40 ( 0.00%) . . . self.bump(); + 1,780 ( 0.00%) . . . => /home/.cargo/registry/src/index.crates.io-6f17d22bba15001f/regex-syntax-0.8.2/src/ast/parse.rs:regex_syntax::ast::parse::ParserI

::bump (20x) + 40 ( 0.00%) . . . if char_end == ')' { + . . . . // We don't allow empty flags, e.g., `(?)`. We instead + . . . . // interpret it as a repetition operator missing its argument. + 20 ( 0.00%) . . . if flags.items.is_empty() { + . . . . return Err(self.error( + . . . . inner_span, + . . . . ast::ErrorKind::RepetitionMissing, + . . . . )); + . . . . } + 240 ( 0.00%) . . . Ok(Either::Left(ast::SetFlags { + 80 ( 0.00%) . . . span: Span { end: self.pos(), ..open_span }, + 140 ( 0.00%) . . . flags, + . . . . })) + . . . . } else { + . . . . assert_eq!(char_end, ':'); + . . . . Ok(Either::Right(ast::Group { + . . . . span: open_span, + . . . . kind: ast::GroupKind::NonCapturing(flags), + . . . . ast: Box::new(Ast::empty(self.span())), + . . . . })) + . . . . } + . . . . } else { + . . . . let capture_index = self.next_capture_index(open_span)?; + 1,605 ( 0.00%) . . . Ok(Either::Right(ast::Group { + . . . . span: open_span, + . . . . kind: ast::GroupKind::CaptureIndex(capture_index), + 321 ( 0.00%) . . . ast: Box::new(Ast::empty(self.span())), + 10,237 ( 0.00%) 24 ( 0.00%) . . => /home/.cargo/registry/src/index.crates.io-6f17d22bba15001f/regex-syntax-0.8.2/src/ast/mod.rs:regex_syntax::ast::Ast::empty (107x) + . . . . })) + . . . . } + 5,704 ( 0.00%) . . . } + . . . . + . . . . /// Parses a capture group name. Assumes that the parser is positioned at + . . . . /// the first character in the name following the opening `<` (and may + . . . . /// possibly be EOF). This advances the parser to the first character + . . . . /// following the closing `>`. + . . . . /// + . . . . /// The caller must provide the capture index of the group for this name. + . . . . #[inline(never)] + 5,274 ( 0.00%) . . . fn parse_capture_name( + . . . . &self, + . . . . capture_index: u32, + . . . . ) -> Result { + 586 ( 0.00%) . . . if self.is_eof() { + . . . . return Err(self + . . . . .error(self.span(), ast::ErrorKind::GroupNameUnexpectedEof)); + . . . . } + . . . . let start = self.pos(); + . . . . loop { + 13,692 ( 0.00%) . . . if self.char() == '>' { + 68,460 ( 0.02%) . . . => /home/.cargo/registry/src/index.crates.io-6f17d22bba15001f/regex-syntax-0.8.2/src/ast/parse.rs:regex_syntax::ast::parse::ParserI

::char (3,423x) + . . . . break; + . . . . } + 8,511 ( 0.00%) . . . if !is_capture_char(self.char(), self.pos() == start) { + 56,740 ( 0.02%) . . . => /home/.cargo/registry/src/index.crates.io-6f17d22bba15001f/regex-syntax-0.8.2/src/ast/parse.rs:regex_syntax::ast::parse::ParserI

::char (2,837x) + . . . . return Err(self.error( + . . . . self.span_char(), + . . . . ast::ErrorKind::GroupNameInvalid, + . . . . )); + . . . . } + 11,348 ( 0.00%) . . . if !self.bump() { + 252,493 ( 0.07%) . . . => /home/.cargo/registry/src/index.crates.io-6f17d22bba15001f/regex-syntax-0.8.2/src/ast/parse.rs:regex_syntax::ast::parse::ParserI

::bump (2,837x) + . . . . break; + . . . . } + . . . . } + . . . . let end = self.pos(); + 586 ( 0.00%) . . . if self.is_eof() { + . . . . return Err(self + . . . . .error(self.span(), ast::ErrorKind::GroupNameUnexpectedEof)); + . . . . } + 2,930 ( 0.00%) . . . assert_eq!(self.char(), '>'); + 11,720 ( 0.00%) . . . => /home/.cargo/registry/src/index.crates.io-6f17d22bba15001f/regex-syntax-0.8.2/src/ast/parse.rs:regex_syntax::ast::parse::ParserI

::char (586x) + 1,172 ( 0.00%) . . . self.bump(); + 52,154 ( 0.02%) . . . => /home/.cargo/registry/src/index.crates.io-6f17d22bba15001f/regex-syntax-0.8.2/src/ast/parse.rs:regex_syntax::ast::parse::ParserI

::bump (586x) + 586 ( 0.00%) . . . let name = &self.pattern()[start.offset..end.offset]; + 1,172 ( 0.00%) . . . if name.is_empty() { + . . . . return Err(self.error( + . . . . Span::new(start, start), + . . . . ast::ErrorKind::GroupNameEmpty, + . . . . )); + . . . . } + 5,274 ( 0.00%) . . . let capname = ast::CaptureName { + . . . . span: Span::new(start, end), + . . . . name: name.to_string(), + . . . . index: capture_index, + . . . . }; + . . . . self.add_capture_name(&capname)?; + 7,032 ( 0.00%) . . . Ok(capname) + 4,688 ( 0.00%) . . . } + . . . . + . . . . /// Parse a sequence of flags starting at the current character. + . . . . /// + . . . . /// This advances the parser to the character immediately following the + . . . . /// flags, which is guaranteed to be either `:` or `)`. + . . . . /// + . . . . /// # Errors + . . . . /// +-- line 1316 ---------------------------------------- +-- line 1317 ---------------------------------------- + . . . . /// If any flags are duplicated, then an error is returned. + . . . . /// + . . . . /// If the negation operator is used more than once, then an error is + . . . . /// returned. + . . . . /// + . . . . /// If no flags could be found or if the negation operation is not followed + . . . . /// by any flags, then an error is returned. + . . . . #[inline(never)] + 180 ( 0.00%) . . . fn parse_flags(&self) -> Result { + 80 ( 0.00%) . . . let mut flags = ast::Flags { span: self.span(), items: vec![] }; + . . . . let mut last_was_negation = None; + 450 ( 0.00%) . . . while self.char() != ':' && self.char() != ')' { + 2,000 ( 0.00%) . . . => /home/.cargo/registry/src/index.crates.io-6f17d22bba15001f/regex-syntax-0.8.2/src/ast/parse.rs:regex_syntax::ast::parse::ParserI

::char (100x) + 120 ( 0.00%) . . . if self.char() == '-' { + 600 ( 0.00%) . . . => /home/.cargo/registry/src/index.crates.io-6f17d22bba15001f/regex-syntax-0.8.2/src/ast/parse.rs:regex_syntax::ast::parse::ParserI

::char (30x) + . . . . last_was_negation = Some(self.span_char()); + . . . . let item = ast::FlagsItem { + . . . . span: self.span_char(), + . . . . kind: ast::FlagsItemKind::Negation, + . . . . }; + . . . . if let Some(i) = flags.add_item(item) { + . . . . return Err(self.error( + . . . . self.span_char(), + . . . . ast::ErrorKind::FlagRepeatedNegation { + . . . . original: flags.items[i].span, + . . . . }, + . . . . )); + . . . . } + . . . . } else { + . . . . last_was_negation = None; + 80 ( 0.00%) . . . let item = ast::FlagsItem { + . . . . span: self.span_char(), + 60 ( 0.00%) . . . kind: ast::FlagsItemKind::Flag(self.parse_flag()?), + 980 ( 0.00%) . . . => /home/.cargo/registry/src/index.crates.io-6f17d22bba15001f/regex-syntax-0.8.2/src/ast/parse.rs:regex_syntax::ast::parse::ParserI

::parse_flag (20x) + . . . . }; + . . . . if let Some(i) = flags.add_item(item) { + . . . . return Err(self.error( + . . . . self.span_char(), + . . . . ast::ErrorKind::FlagDuplicate { + . . . . original: flags.items[i].span, + . . . . }, + . . . . )); + . . . . } + . . . . } + 120 ( 0.00%) . . . if !self.bump() { + 2,670 ( 0.00%) . . . => /home/.cargo/registry/src/index.crates.io-6f17d22bba15001f/regex-syntax-0.8.2/src/ast/parse.rs:regex_syntax::ast::parse::ParserI

::bump (30x) + . . . . return Err( + . . . . self.error(self.span(), ast::ErrorKind::FlagUnexpectedEof) + . . . . ); + . . . . } + . . . . } + 60 ( 0.00%) . . . if let Some(span) = last_was_negation { + . . . . return Err(self.error(span, ast::ErrorKind::FlagDanglingNegation)); + . . . . } + . . . . flags.span.end = self.pos(); + 240 ( 0.00%) . . . Ok(flags) + 160 ( 0.00%) . . . } + . . . . + . . . . /// Parse the current character as a flag. Do not advance the parser. + . . . . /// + . . . . /// # Errors + . . . . /// + . . . . /// If the flag is not recognized, then an error is returned. + . . . . #[inline(never)] + 180 ( 0.00%) . . . fn parse_flag(&self) -> Result { + 100 ( 0.00%) . . . match self.char() { + 400 ( 0.00%) . . . => /home/.cargo/registry/src/index.crates.io-6f17d22bba15001f/regex-syntax-0.8.2/src/ast/parse.rs:regex_syntax::ast::parse::ParserI

::char (20x) + 40 ( 0.00%) . . . 'i' => Ok(ast::Flag::CaseInsensitive), + . . . . 'm' => Ok(ast::Flag::MultiLine), + . . . . 's' => Ok(ast::Flag::DotMatchesNewLine), + . . . . 'U' => Ok(ast::Flag::SwapGreed), + . . . . 'u' => Ok(ast::Flag::Unicode), + . . . . 'R' => Ok(ast::Flag::CRLF), + . . . . 'x' => Ok(ast::Flag::IgnoreWhitespace), + . . . . _ => { + . . . . Err(self + . . . . .error(self.span_char(), ast::ErrorKind::FlagUnrecognized)) + . . . . } + . . . . } + 160 ( 0.00%) . . . } + . . . . + . . . . /// Parse a primitive AST. e.g., A literal, non-set character class or + . . . . /// assertion. + . . . . /// + . . . . /// This assumes that the parser expects a primitive at the current + . . . . /// location. i.e., All other non-primitive cases have been handled. + . . . . /// For example, if the parser's position is at `|`, then `|` will be + . . . . /// treated as a literal (e.g., inside a character class). + . . . . /// + . . . . /// This advances the parser to the first character immediately following + . . . . /// the primitive. + . . . . fn parse_primitive(&self) -> Result { + 446,351 ( 0.13%) . . . match self.char() { + 991,880 ( 0.29%) . . . => /home/.cargo/registry/src/index.crates.io-6f17d22bba15001f/regex-syntax-0.8.2/src/ast/parse.rs:regex_syntax::ast::parse::ParserI

::char (49,607x) + . . . . '\\' => self.parse_escape(), + . . . . '.' => { + . . . . let ast = Primitive::Dot(self.span_char()); + 10 ( 0.00%) . . . self.bump(); + 445 ( 0.00%) . . . => /home/.cargo/registry/src/index.crates.io-6f17d22bba15001f/regex-syntax-0.8.2/src/ast/parse.rs:regex_syntax::ast::parse::ParserI

::bump (5x) + . . . . Ok(ast) + . . . . } + . . . . '^' => { + . . . . let ast = Primitive::Assertion(ast::Assertion { + . . . . span: self.span_char(), + . . . . kind: ast::AssertionKind::StartLine, + . . . . }); + 132 ( 0.00%) . . . self.bump(); + 5,354 ( 0.00%) . . . => /home/.cargo/registry/src/index.crates.io-6f17d22bba15001f/regex-syntax-0.8.2/src/ast/parse.rs:regex_syntax::ast::parse::ParserI

::bump (66x) + 132 ( 0.00%) . . . Ok(ast) + . . . . } + . . . . '$' => { + . . . . let ast = Primitive::Assertion(ast::Assertion { + . . . . span: self.span_char(), + . . . . kind: ast::AssertionKind::EndLine, + . . . . }); + 112 ( 0.00%) . . . self.bump(); + 4,984 ( 0.00%) . . . => /home/.cargo/registry/src/index.crates.io-6f17d22bba15001f/regex-syntax-0.8.2/src/ast/parse.rs:regex_syntax::ast::parse::ParserI

::bump (56x) + 112 ( 0.00%) . . . Ok(ast) + . . . . } + . . . . c => { + . . . . let ast = Primitive::Literal(ast::Literal { + . . . . span: self.span_char(), + . . . . kind: ast::LiteralKind::Verbatim, + . . . . c, + . . . . }); + 98,960 ( 0.03%) . . . self.bump(); +4,403,720 ( 1.27%) . . . => /home/.cargo/registry/src/index.crates.io-6f17d22bba15001f/regex-syntax-0.8.2/src/ast/parse.rs:regex_syntax::ast::parse::ParserI

::bump (49,480x) + 148,440 ( 0.04%) . . . Ok(ast) + . . . . } + . . . . } + . . . . } + . . . . + . . . . /// Parse an escape sequence as a primitive AST. + . . . . /// + . . . . /// This assumes the parser is positioned at the start of the escape + . . . . /// sequence, i.e., `\`. It advances the parser to the first position + . . . . /// immediately following the escape sequence. + . . . . #[inline(never)] + 14,508 ( 0.00%) . . . fn parse_escape(&self) -> Result { + 8,060 ( 0.00%) . . . assert_eq!(self.char(), '\\'); + 32,240 ( 0.01%) . . . => /home/.cargo/registry/src/index.crates.io-6f17d22bba15001f/regex-syntax-0.8.2/src/ast/parse.rs:regex_syntax::ast::parse::ParserI

::char (1,612x) + 1,612 ( 0.00%) . . . let start = self.pos(); + 6,448 ( 0.00%) . . . if !self.bump() { + 143,468 ( 0.04%) . . . => /home/.cargo/registry/src/index.crates.io-6f17d22bba15001f/regex-syntax-0.8.2/src/ast/parse.rs:regex_syntax::ast::parse::ParserI

::bump (1,612x) + . . . . return Err(self.error( + . . . . Span::new(start, self.pos()), + . . . . ast::ErrorKind::EscapeUnexpectedEof, + . . . . )); + . . . . } + 4,836 ( 0.00%) . . . let c = self.char(); + 32,240 ( 0.01%) . . . => /home/.cargo/registry/src/index.crates.io-6f17d22bba15001f/regex-syntax-0.8.2/src/ast/parse.rs:regex_syntax::ast::parse::ParserI

::char (1,612x) + . . . . // Put some of the more complicated routines into helpers. + 4,836 ( 0.00%) . . . match c { + 4,836 ( 0.00%) . . . '0'..='7' => { + . . . . if !self.parser().octal { + . . . . return Err(self.error( + . . . . Span::new(start, self.span_char().end), + . . . . ast::ErrorKind::UnsupportedBackreference, + . . . . )); + . . . . } + . . . . let mut lit = self.parse_octal(); + . . . . lit.span.start = start; + . . . . return Ok(Primitive::Literal(lit)); + . . . . } + 6,448 ( 0.00%) . . . '8'..='9' if !self.parser().octal => { + . . . . return Err(self.error( + . . . . Span::new(start, self.span_char().end), + . . . . ast::ErrorKind::UnsupportedBackreference, + . . . . )); + . . . . } + . . . . 'x' | 'u' | 'U' => { + . . . . let mut lit = self.parse_hex()?; + . . . . lit.span.start = start; +-- line 1476 ---------------------------------------- +-- line 1477 ---------------------------------------- + . . . . return Ok(Primitive::Literal(lit)); + . . . . } + . . . . 'p' | 'P' => { + . . . . let mut cls = self.parse_unicode_class()?; + . . . . cls.span.start = start; + . . . . return Ok(Primitive::Unicode(cls)); + . . . . } + . . . . 'd' | 's' | 'w' | 'D' | 'S' | 'W' => { + 10 ( 0.00%) . . . let mut cls = self.parse_perl_class(); + 1,085 ( 0.00%) . . . => /home/.cargo/registry/src/index.crates.io-6f17d22bba15001f/regex-syntax-0.8.2/src/ast/parse.rs:regex_syntax::ast::parse::ParserI

::parse_perl_class (5x) + 20 ( 0.00%) . . . cls.span.start = start; + 50 ( 0.00%) . . . return Ok(Primitive::Perl(cls)); + . . . . } + . . . . _ => {} + . . . . } + . . . . + . . . . // Handle all of the one letter sequences inline. + 3,214 ( 0.00%) . . . self.bump(); + 143,183 ( 0.04%) . . . => /home/.cargo/registry/src/index.crates.io-6f17d22bba15001f/regex-syntax-0.8.2/src/ast/parse.rs:regex_syntax::ast::parse::ParserI

::bump (1,607x) + 6,428 ( 0.00%) . . . let span = Span::new(start, self.pos()); + 6,428 ( 0.00%) . . . if is_meta_character(c) { + 16,069 ( 0.00%) . . . => /home/.cargo/registry/src/index.crates.io-6f17d22bba15001f/regex-syntax-0.8.2/src/lib.rs:regex_syntax::is_meta_character (1,607x) + 3,212 ( 0.00%) . . . return Ok(Primitive::Literal(ast::Literal { + 9,636 ( 0.00%) . . . span, + . . . . kind: ast::LiteralKind::Meta, + . . . . c, + . . . . })); + . . . . } + . . . . if is_escapeable_character(c) { + . . . . return Ok(Primitive::Literal(ast::Literal { + . . . . span, + . . . . kind: ast::LiteralKind::Superfluous, + . . . . c, + . . . . })); + . . . . } + . . . . let special = |kind, c| { + 2 ( 0.00%) . . . Ok(Primitive::Literal(ast::Literal { + 6 ( 0.00%) . . . span, + . . . . kind: ast::LiteralKind::Special(kind), + . . . . c, + . . . . })) + . . . . }; + 3 ( 0.00%) . . . match c { + . . . . 'a' => special(ast::SpecialLiteralKind::Bell, '\x07'), + . . . . 'f' => special(ast::SpecialLiteralKind::FormFeed, '\x0C'), + . . . . 't' => special(ast::SpecialLiteralKind::Tab, '\t'), + . . . . 'n' => special(ast::SpecialLiteralKind::LineFeed, '\n'), + . . . . 'r' => special(ast::SpecialLiteralKind::CarriageReturn, '\r'), + . . . . 'v' => special(ast::SpecialLiteralKind::VerticalTab, '\x0B'), + . . . . 'A' => Ok(Primitive::Assertion(ast::Assertion { + . . . . span, +-- line 1524 ---------------------------------------- +-- line 1554 ---------------------------------------- + . . . . kind: ast::AssertionKind::WordBoundaryStartAngle, + . . . . })), + . . . . '>' => Ok(Primitive::Assertion(ast::Assertion { + . . . . span, + . . . . kind: ast::AssertionKind::WordBoundaryEndAngle, + . . . . })), + . . . . _ => Err(self.error(span, ast::ErrorKind::EscapeUnrecognized)), + . . . . } + 12,896 ( 0.00%) . . . } + . . . . + . . . . /// Attempt to parse a specialty word boundary. That is, `\b{start}`, + . . . . /// `\b{end}`, `\b{start-half}` or `\b{end-half}`. + . . . . /// + . . . . /// This is similar to `maybe_parse_ascii_class` in that, in most cases, + . . . . /// if it fails it will just return `None` with no error. This is done + . . . . /// because `\b{5}` is a valid expression and we want to let that be parsed + . . . . /// by the existing counted repetition parsing code. (I thought about just +-- line 1570 ---------------------------------------- +-- line 1801 ---------------------------------------- + . . . . /// whitespace. + . . . . /// + . . . . /// This expects the parser to be positioned at the first position where + . . . . /// a decimal digit could occur. This will advance the parser to the byte + . . . . /// immediately following the last contiguous decimal digit. + . . . . /// + . . . . /// If no decimal digit could be found or if there was a problem parsing + . . . . /// the complete set of digits into a u32, then an error is returned. + 1,673 ( 0.00%) . . . fn parse_decimal(&self) -> Result { + 239 ( 0.00%) . . . let mut scratch = self.parser().scratch.borrow_mut(); + . . . . scratch.clear(); + . . . . + 717 ( 0.00%) . . . while !self.is_eof() && self.char().is_whitespace() { + 4,780 ( 0.00%) . . . => /home/.cargo/registry/src/index.crates.io-6f17d22bba15001f/regex-syntax-0.8.2/src/ast/parse.rs:regex_syntax::ast::parse::ParserI

::char (239x) + . . . . self.bump(); + . . . . } + . . . . let start = self.pos(); + 4,043 ( 0.00%) . . . while !self.is_eof() && '0' <= self.char() && self.char() <= '9' { + 17,820 ( 0.01%) . . . => /home/.cargo/registry/src/index.crates.io-6f17d22bba15001f/regex-syntax-0.8.2/src/ast/parse.rs:regex_syntax::ast::parse::ParserI

::char (891x) + 720 ( 0.00%) . . . scratch.push(self.char()); + 4,800 ( 0.00%) . . . => /home/.cargo/registry/src/index.crates.io-6f17d22bba15001f/regex-syntax-0.8.2/src/ast/parse.rs:regex_syntax::ast::parse::ParserI

::char (240x) + . . . . self.bump_and_bump_space(); + . . . . } + 956 ( 0.00%) . . . let span = Span::new(start, self.pos()); + 717 ( 0.00%) . . . while !self.is_eof() && self.char().is_whitespace() { + 4,780 ( 0.00%) . . . => /home/.cargo/registry/src/index.crates.io-6f17d22bba15001f/regex-syntax-0.8.2/src/ast/parse.rs:regex_syntax::ast::parse::ParserI

::char (239x) + . . . . self.bump_and_bump_space(); + . . . . } + . . . . let digits = scratch.as_str(); + 478 ( 0.00%) . . . if digits.is_empty() { + . . . . return Err(self.error(span, ast::ErrorKind::DecimalEmpty)); + . . . . } + 956 ( 0.00%) . . . match u32::from_str_radix(digits, 10).ok() { + 10,764 ( 0.00%) . . . => /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/core/src/num/uint_macros.rs:core::num::::from_str_radix (239x) + 717 ( 0.00%) . . . Some(n) => Ok(n), + . . . . None => Err(self.error(span, ast::ErrorKind::DecimalInvalid)), + . . . . } + 2,151 ( 0.00%) . . . } + . . . . + . . . . /// Parse a standard character class consisting primarily of characters or + . . . . /// character ranges, but can also contain nested character classes of + . . . . /// any type (sans `.`). + . . . . /// + . . . . /// This assumes the parser is positioned at the opening `[`. If parsing + . . . . /// is successful, then the parser is advanced to the position immediately + . . . . /// following the closing `]`. + . . . . #[inline(never)] + 24,777 ( 0.01%) . . . fn parse_set_class(&self) -> Result { + 13,765 ( 0.00%) . . . assert_eq!(self.char(), '['); + 55,012 ( 0.02%) . . . => /home/.cargo/registry/src/index.crates.io-6f17d22bba15001f/regex-syntax-0.8.2/src/ast/parse.rs:regex_syntax::ast::parse::ParserI

::char (2,753x) + . . . . + . . . . let mut union = + 44,048 ( 0.01%) . . . ast::ClassSetUnion { span: self.span(), items: vec![] }; + . . . . loop { + 19,934 ( 0.01%) . . . self.bump_space(); + 179,406 ( 0.05%) . . . => /home/.cargo/registry/src/index.crates.io-6f17d22bba15001f/regex-syntax-0.8.2/src/ast/parse.rs:regex_syntax::ast::parse::ParserI

::bump_space (9,967x) + 9,967 ( 0.00%) . . . if self.is_eof() { + . . . . return Err(self.unclosed_class_error()); + . . . . } + 75,934 ( 0.02%) . . . match self.char() { + 199,892 ( 0.06%) . . . => /home/.cargo/registry/src/index.crates.io-6f17d22bba15001f/regex-syntax-0.8.2/src/ast/parse.rs:regex_syntax::ast::parse::ParserI

::char (9,967x) + . . . . '[' => { + . . . . // If we've already parsed the opening bracket, then + . . . . // attempt to treat this as the beginning of an ASCII + . . . . // class. If ASCII class parsing fails, then the parser + . . . . // backs up to `[`. + 3,594 ( 0.00%) . . . if !self.parser().stack_class.borrow().is_empty() { + 10,365 ( 0.00%) . . . if let Some(cls) = self.maybe_parse_ascii_class() { + 938,404 ( 0.27%) . . . => /home/.cargo/registry/src/index.crates.io-6f17d22bba15001f/regex-syntax-0.8.2/src/ast/parse.rs:regex_syntax::ast::parse::ParserI

::maybe_parse_ascii_class (841x) + . . . . union.push(ast::ClassSetItem::Ascii(cls)); + . . . . continue; + . . . . } + . . . . } + 70,600 ( 0.02%) . . . union = self.push_class_open(union)?; +1,971,018 ( 0.57%) 320 ( 0.04%) . . => /home/.cargo/registry/src/index.crates.io-6f17d22bba15001f/regex-syntax-0.8.2/src/ast/parse.rs:regex_syntax::ast::parse::ParserI

::push_class_open (2,824x) + . . . . } + 45,184 ( 0.01%) . . . ']' => match self.pop_class(union)? { +2,062,644 ( 0.60%) 28 ( 0.00%) . . => /home/.cargo/registry/src/index.crates.io-6f17d22bba15001f/regex-syntax-0.8.2/src/ast/parse.rs:regex_syntax::ast::parse::ParserI

::pop_class (2,824x) + 781 ( 0.00%) . . . Either::Left(nested_union) => { + . . . . union = nested_union; + . . . . } + 88,096 ( 0.03%) . . . Either::Right(class) => return Ok(class), + . . . . }, + . . . . '&' if self.peek() == Some('&') => { + . . . . assert!(self.bump_if("&&")); + . . . . union = self.push_class_op( + . . . . ast::ClassSetBinaryOpKind::Intersection, + . . . . union, + . . . . ); + . . . . } +-- line 1879 ---------------------------------------- +-- line 1887 ---------------------------------------- + . . . . '~' if self.peek() == Some('~') => { + . . . . assert!(self.bump_if("~~")); + . . . . union = self.push_class_op( + . . . . ast::ClassSetBinaryOpKind::SymmetricDifference, + . . . . union, + . . . . ); + . . . . } + . . . . _ => { + 70,980 ( 0.02%) . . . union.push(self.parse_set_class_range()?); +1,370,130 ( 0.40%) . . . => /home/.cargo/registry/src/index.crates.io-6f17d22bba15001f/regex-syntax-0.8.2/src/ast/parse.rs:regex_syntax::ast::parse::ParserI

::parse_set_class_range (3,549x) + . . . . } + . . . . } + . . . . } + 22,024 ( 0.01%) . . . } + . . . . + . . . . /// Parse a single primitive item in a character class set. The item to + . . . . /// be parsed can either be one of a simple literal character, a range + . . . . /// between two simple literal characters or a "primitive" character + . . . . /// class like \w or \p{Greek}. + . . . . /// + . . . . /// If an invalid escape is found, or if a character class is found where + . . . . /// a simple literal is expected (e.g., in a range), then an error is + . . . . /// returned. + . . . . #[inline(never)] + 35,490 ( 0.01%) . . . fn parse_set_class_range(&self) -> Result { + 28,392 ( 0.01%) . . . let prim1 = self.parse_set_class_item()?; +1,000,419 ( 0.29%) . . . => /home/.cargo/registry/src/index.crates.io-6f17d22bba15001f/regex-syntax-0.8.2/src/ast/parse.rs:regex_syntax::ast::parse::ParserI

::parse_set_class_item (3,549x) + 7,098 ( 0.00%) . . . self.bump_space(); + 63,882 ( 0.02%) . . . => /home/.cargo/registry/src/index.crates.io-6f17d22bba15001f/regex-syntax-0.8.2/src/ast/parse.rs:regex_syntax::ast::parse::ParserI

::bump_space (3,549x) + 3,549 ( 0.00%) . . . if self.is_eof() { + . . . . return Err(self.unclosed_class_error()); + . . . . } + . . . . // If the next char isn't a `-`, then we don't have a range. + . . . . // There are two exceptions. If the char after a `-` is a `]`, then + . . . . // `-` is interpreted as a literal `-`. Alternatively, if the char + . . . . // after a `-` is a `-`, then `--` corresponds to a "difference" + . . . . // operation. + 14,196 ( 0.00%) . . . if self.char() != '-' + 71,580 ( 0.02%) . . . => /home/.cargo/registry/src/index.crates.io-6f17d22bba15001f/regex-syntax-0.8.2/src/ast/parse.rs:regex_syntax::ast::parse::ParserI

::char (3,549x) + . . . . || self.peek_space() == Some(']') + . . . . || self.peek_space() == Some('-') + . . . . { + 3,549 ( 0.00%) . . . return prim1.into_class_set_item(self); + . . . . } + . . . . // OK, now we're parsing a range, so bump past the `-` and parse the + . . . . // second half of the range. + . . . . if !self.bump_and_bump_space() { + . . . . return Err(self.unclosed_class_error()); + . . . . } + . . . . let prim2 = self.parse_set_class_item()?; + . . . . let range = ast::ClassSetRange { +-- line 1933 ---------------------------------------- +-- line 1936 ---------------------------------------- + . . . . end: prim2.into_class_literal(self)?, + . . . . }; + . . . . if !range.is_valid() { + . . . . return Err( + . . . . self.error(range.span, ast::ErrorKind::ClassRangeInvalid) + . . . . ); + . . . . } + . . . . Ok(ast::ClassSetItem::Range(range)) + 28,392 ( 0.01%) . . . } + . . . . + . . . . /// Parse a single item in a character class as a primitive, where the + . . . . /// primitive either consists of a verbatim literal or a single escape + . . . . /// sequence. + . . . . /// + . . . . /// This assumes the parser is positioned at the beginning of a primitive, + . . . . /// and advances the parser to the first position after the primitive if + . . . . /// successful. + . . . . /// + . . . . /// Note that it is the caller's responsibility to report an error if an + . . . . /// illegal primitive was parsed. + . . . . #[inline(never)] + 31,941 ( 0.01%) . . . fn parse_set_class_item(&self) -> Result { + 14,196 ( 0.00%) . . . if self.char() == '\\' { + 71,580 ( 0.02%) . . . => /home/.cargo/registry/src/index.crates.io-6f17d22bba15001f/regex-syntax-0.8.2/src/ast/parse.rs:regex_syntax::ast::parse::ParserI

::char (3,549x) + 16,120 ( 0.00%) . . . self.parse_escape() + 481,513 ( 0.14%) . . . => /home/.cargo/registry/src/index.crates.io-6f17d22bba15001f/regex-syntax-0.8.2/src/ast/parse.rs:regex_syntax::ast::parse::ParserI

::parse_escape (1,612x) + . . . . } else { + . . . . let x = Primitive::Literal(ast::Literal { + . . . . span: self.span_char(), + . . . . kind: ast::LiteralKind::Verbatim, + 5,811 ( 0.00%) . . . c: self.char(), + 39,340 ( 0.01%) . . . => /home/.cargo/registry/src/index.crates.io-6f17d22bba15001f/regex-syntax-0.8.2/src/ast/parse.rs:regex_syntax::ast::parse::ParserI

::char (1,937x) + . . . . }); + 3,874 ( 0.00%) . . . self.bump(); + 173,833 ( 0.05%) . . . => /home/.cargo/registry/src/index.crates.io-6f17d22bba15001f/regex-syntax-0.8.2/src/ast/parse.rs:regex_syntax::ast::parse::ParserI

::bump (1,937x) + 7,748 ( 0.00%) . . . Ok(x) + . . . . } + 15,496 ( 0.00%) . . . } + . . . . + . . . . /// Parses the opening of a character class set. This includes the opening + . . . . /// bracket along with `^` if present to indicate negation. This also + . . . . /// starts parsing the opening set of unioned items if applicable, since + . . . . /// there are special rules applied to certain characters in the opening + . . . . /// of a character class. For example, `[^]]` is the class of all + . . . . /// characters not equal to `]`. (`]` would need to be escaped in any other + . . . . /// position.) Similarly for `-`. +-- line 1977 ---------------------------------------- +-- line 1980 ---------------------------------------- + . . . . /// empty union. This empty union should be replaced with the actual item + . . . . /// when it is popped from the parser's stack. + . . . . /// + . . . . /// This assumes the parser is positioned at the opening `[` and advances + . . . . /// the parser to the first non-special byte of the character class. + . . . . /// + . . . . /// An error is returned if EOF is found. + . . . . #[inline(never)] + 25,416 ( 0.01%) . . . fn parse_set_class_open( + . . . . &self, + . . . . ) -> Result<(ast::ClassBracketed, ast::ClassSetUnion)> { + 14,120 ( 0.00%) . . . assert_eq!(self.char(), '['); + 56,432 ( 0.02%) . . . => /home/.cargo/registry/src/index.crates.io-6f17d22bba15001f/regex-syntax-0.8.2/src/ast/parse.rs:regex_syntax::ast::parse::ParserI

::char (2,824x) + 2,824 ( 0.00%) . . . let start = self.pos(); + 2,824 ( 0.00%) . . . if !self.bump_and_bump_space() { + . . . . return Err(self.error( + . . . . Span::new(start, self.pos()), + . . . . ast::ErrorKind::ClassUnclosed, + . . . . )); + . . . . } + . . . . + 16,944 ( 0.00%) . . . let negated = if self.char() != '^' { + 56,480 ( 0.02%) . . . => /home/.cargo/registry/src/index.crates.io-6f17d22bba15001f/regex-syntax-0.8.2/src/ast/parse.rs:regex_syntax::ast::parse::ParserI

::char (2,824x) + . . . . false + . . . . } else { + 1 ( 0.00%) . . . if !self.bump_and_bump_space() { + . . . . return Err(self.error( + . . . . Span::new(start, self.pos()), + . . . . ast::ErrorKind::ClassUnclosed, + . . . . )); + . . . . } + . . . . true + . . . . }; + . . . . // Accept any number of `-` as literal `-`. + . . . . let mut union = + 16,944 ( 0.00%) . . . ast::ClassSetUnion { span: self.span(), items: vec![] }; + 11,300 ( 0.00%) . . . while self.char() == '-' { + 56,500 ( 0.02%) . . . => /home/.cargo/registry/src/index.crates.io-6f17d22bba15001f/regex-syntax-0.8.2/src/ast/parse.rs:regex_syntax::ast::parse::ParserI

::char (2,825x) + . . . . union.push(ast::ClassSetItem::Literal(ast::Literal { + . . . . span: self.span_char(), + . . . . kind: ast::LiteralKind::Verbatim, + . . . . c: '-', + . . . . })); + 1 ( 0.00%) . . . if !self.bump_and_bump_space() { + . . . . return Err(self.error( + . . . . Span::new(start, start), + . . . . ast::ErrorKind::ClassUnclosed, + . . . . )); + . . . . } + . . . . } + . . . . // If `]` is the *first* char in a set, then interpret it as a literal + . . . . // `]`. That is, an empty class is impossible to write. + 14,116 ( 0.00%) . . . if union.items.is_empty() && self.char() == ']' { + 56,460 ( 0.02%) . . . => /home/.cargo/registry/src/index.crates.io-6f17d22bba15001f/regex-syntax-0.8.2/src/ast/parse.rs:regex_syntax::ast::parse::ParserI

::char (2,823x) + . . . . union.push(ast::ClassSetItem::Literal(ast::Literal { + . . . . span: self.span_char(), + . . . . kind: ast::LiteralKind::Verbatim, + . . . . c: ']', + . . . . })); + . . . . if !self.bump_and_bump_space() { + . . . . return Err(self.error( + . . . . Span::new(start, self.pos()), + . . . . ast::ErrorKind::ClassUnclosed, + . . . . )); + . . . . } + . . . . } + . . . . let set = ast::ClassBracketed { + 11,296 ( 0.00%) . . . span: Span::new(start, self.pos()), + . . . . negated, + . . . . kind: ast::ClassSet::union(ast::ClassSetUnion { + 16,944 ( 0.00%) . . . span: Span::new(union.span.start, union.span.start), + . . . . items: vec![], + . . . . }), + . . . . }; + 62,128 ( 0.02%) . . . Ok((set, union)) + 22,592 ( 0.01%) . . . } + . . . . + . . . . /// Attempt to parse an ASCII character class, e.g., `[:alnum:]`. + . . . . /// + . . . . /// This assumes the parser is positioned at the opening `[`. + . . . . /// + . . . . /// If no valid ASCII character class could be found, then this does not + . . . . /// advance the parser and `None` is returned. Otherwise, the parser is + . . . . /// advanced to the first byte following the closing `]` and the + . . . . /// corresponding ASCII class is returned. + . . . . #[inline(never)] + 7,569 ( 0.00%) . . . fn maybe_parse_ascii_class(&self) -> Option { + . . . . // ASCII character classes are interesting from a parsing perspective + . . . . // because parsing cannot fail with any interesting error. For example, + . . . . // in order to use an ASCII character class, it must be enclosed in + . . . . // double brackets, e.g., `[[:alnum:]]`. Alternatively, you might think + . . . . // of it as "ASCII character classes have the syntax `[:NAME:]` which + . . . . // can only appear within character brackets." This means that things + . . . . // like `[[:lower:]A]` are legal constructs. + . . . . // +-- line 2070 ---------------------------------------- +-- line 2074 ---------------------------------------- + . . . . // should return an error instead since the repeated colons give away + . . . . // the intent to write an ASCII class. But what if the user typed + . . . . // `[[:lower]]` instead? How can we tell that was intended to be an + . . . . // ASCII class and not just a normal nested class? + . . . . // + . . . . // Reasonable people can probably disagree over this, but for better + . . . . // or worse, we implement semantics that never fails at the expense + . . . . // of better failure modes. + 4,205 ( 0.00%) . . . assert_eq!(self.char(), '['); + 16,820 ( 0.00%) . . . => /home/.cargo/registry/src/index.crates.io-6f17d22bba15001f/regex-syntax-0.8.2/src/ast/parse.rs:regex_syntax::ast::parse::ParserI

::char (841x) + . . . . // If parsing fails, then we back up the parser to this starting point. + 841 ( 0.00%) . . . let start = self.pos(); + . . . . let mut negated = false; + 6,728 ( 0.00%) . . . if !self.bump() || self.char() != ':' { + 74,849 ( 0.02%) . . . => /home/.cargo/registry/src/index.crates.io-6f17d22bba15001f/regex-syntax-0.8.2/src/ast/parse.rs:regex_syntax::ast::parse::ParserI

::bump (841x) + 16,820 ( 0.00%) . . . => /home/.cargo/registry/src/index.crates.io-6f17d22bba15001f/regex-syntax-0.8.2/src/ast/parse.rs:regex_syntax::ast::parse::ParserI

::char (841x) + . . . . self.parser().pos.set(start); + . . . . return None; + . . . . } + 3,080 ( 0.00%) . . . if !self.bump() { + 68,530 ( 0.02%) . . . => /home/.cargo/registry/src/index.crates.io-6f17d22bba15001f/regex-syntax-0.8.2/src/ast/parse.rs:regex_syntax::ast::parse::ParserI

::bump (770x) + . . . . self.parser().pos.set(start); + . . . . return None; + . . . . } + 4,620 ( 0.00%) . . . if self.char() == '^' { + 15,400 ( 0.00%) . . . => /home/.cargo/registry/src/index.crates.io-6f17d22bba15001f/regex-syntax-0.8.2/src/ast/parse.rs:regex_syntax::ast::parse::ParserI

::char (770x) + . . . . negated = true; + 220 ( 0.00%) . . . if !self.bump() { + 4,895 ( 0.00%) . . . => /home/.cargo/registry/src/index.crates.io-6f17d22bba15001f/regex-syntax-0.8.2/src/ast/parse.rs:regex_syntax::ast::parse::ParserI

::bump (55x) + . . . . self.parser().pos.set(start); + . . . . return None; + . . . . } + . . . . } + . . . . let name_start = self.offset(); + 33,872 ( 0.01%) . . . while self.char() != ':' && self.bump() {} + 342,561 ( 0.10%) . . . => /home/.cargo/registry/src/index.crates.io-6f17d22bba15001f/regex-syntax-0.8.2/src/ast/parse.rs:regex_syntax::ast::parse::ParserI

::bump (3,849x) + 92,380 ( 0.03%) . . . => /home/.cargo/registry/src/index.crates.io-6f17d22bba15001f/regex-syntax-0.8.2/src/ast/parse.rs:regex_syntax::ast::parse::ParserI

::char (4,619x) + 770 ( 0.00%) . . . if self.is_eof() { + . . . . self.parser().pos.set(start); + . . . . return None; + . . . . } + 770 ( 0.00%) . . . let name = &self.pattern()[name_start..self.offset()]; + . . . . if !self.bump_if(":]") { + . . . . self.parser().pos.set(start); + . . . . return None; + . . . . } + 3,080 ( 0.00%) . . . let kind = match ast::ClassAsciiKind::from_name(name) { + 31,216 ( 0.01%) . . . => /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/core/src/slice/cmp.rs:regex_syntax::ast::ClassAsciiKind::from_name (770x) + . . . . Some(kind) => kind, + . . . . None => { + . . . . self.parser().pos.set(start); + . . . . return None; + . . . . } + . . . . }; + 2,310 ( 0.00%) . . . Some(ast::ClassAscii { + 3,080 ( 0.00%) . . . span: Span::new(start, self.pos()), + . . . . kind, + . . . . negated, + . . . . }) + 6,728 ( 0.00%) . . . } + . . . . + . . . . /// Parse a Unicode class in either the single character notation, `\pN` + . . . . /// or the multi-character bracketed notation, `\p{Greek}`. This assumes + . . . . /// the parser is positioned at the `p` (or `P` for negation) and will + . . . . /// advance the parser to the character immediately following the class. + . . . . /// + . . . . /// Note that this does not check whether the class name is valid or not. + . . . . #[inline(never)] +-- line 2132 ---------------------------------------- +-- line 2204 ---------------------------------------- + . . . . kind, + . . . . }) + . . . . } + . . . . + . . . . /// Parse a Perl character class, e.g., `\d` or `\W`. This assumes the + . . . . /// parser is currently at a valid character class name and will be + . . . . /// advanced to the character immediately following the class. + . . . . #[inline(never)] + 45 ( 0.00%) . . . fn parse_perl_class(&self) -> ast::ClassPerl { + 10 ( 0.00%) . . . let c = self.char(); + 100 ( 0.00%) . . . => /home/.cargo/registry/src/index.crates.io-6f17d22bba15001f/regex-syntax-0.8.2/src/ast/parse.rs:regex_syntax::ast::parse::ParserI

::char (5x) + . . . . let span = self.span_char(); + 15 ( 0.00%) . . . self.bump(); + 445 ( 0.00%) . . . => /home/.cargo/registry/src/index.crates.io-6f17d22bba15001f/regex-syntax-0.8.2/src/ast/parse.rs:regex_syntax::ast::parse::ParserI

::bump (5x) + 15 ( 0.00%) . . . let (negated, kind) = match c { + . . . . 'd' => (false, ast::ClassPerlKind::Digit), + . . . . 'D' => (true, ast::ClassPerlKind::Digit), + . . . . 's' => (false, ast::ClassPerlKind::Space), + . . . . 'S' => (true, ast::ClassPerlKind::Space), + . . . . 'w' => (false, ast::ClassPerlKind::Word), + . . . . 'W' => (true, ast::ClassPerlKind::Word), + . . . . c => panic!("expected valid Perl class but got '{}'", c), + . . . . }; + 45 ( 0.00%) . . . ast::ClassPerl { span, kind, negated } + 40 ( 0.00%) . . . } + . . . . } + . . . . + . . . . /// A type that traverses a fully parsed Ast and checks whether its depth + . . . . /// exceeds the specified nesting limit. If it does, then an error is returned. + . . . . #[derive(Debug)] + . . . . struct NestLimiter<'p, 's, P> { + . . . . /// The parser that is checking the nest limit. + . . . . p: &'p ParserI<'s, P>, +-- line 2234 ---------------------------------------- +-- line 2237 ---------------------------------------- + . . . . } + . . . . + . . . . impl<'p, 's, P: Borrow> NestLimiter<'p, 's, P> { + . . . . fn new(p: &'p ParserI<'s, P>) -> NestLimiter<'p, 's, P> { + . . . . NestLimiter { p, depth: 0 } + . . . . } + . . . . + . . . . #[inline(never)] + 81 ( 0.00%) . . . fn check(self, ast: &Ast) -> Result<()> { + 324 ( 0.00%) . . . ast::visit(ast, self) +5,820,400 ( 1.68%) 301 ( 0.04%) . . => /home/.cargo/registry/src/index.crates.io-6f17d22bba15001f/regex-syntax-0.8.2/src/ast/visitor.rs:regex_syntax::ast::visitor::visit (81x) + . . . . } + . . . . + . . . . fn increment_depth(&mut self, span: &Span) -> Result<()> { + 44,450 ( 0.01%) . . . let new = self.depth.checked_add(1).ok_or_else(|| { + . . . . self.p.error( + . . . . span.clone(), + . . . . ast::ErrorKind::NestLimitExceeded(u32::MAX), + . . . . ) + . . . . })?; + 44,450 ( 0.01%) . . . let limit = self.p.parser().nest_limit; + 44,450 ( 0.01%) . . . if new > limit { + . . . . return Err(self.p.error( + . . . . span.clone(), + . . . . ast::ErrorKind::NestLimitExceeded(limit), + . . . . )); + . . . . } + 22,821 ( 0.01%) . . . self.depth = new; + 43,258 ( 0.01%) . . . Ok(()) + . . . . } + . . . . + . . . . fn decrement_depth(&mut self) { + . . . . // Assuming the correctness of the visitor, this should never drop + . . . . // below 0. + 57,805 ( 0.02%) . . . self.depth = self.depth.checked_sub(1).unwrap(); + . . . . } + . . . . } + . . . . + . . . . impl<'p, 's, P: Borrow> ast::Visitor for NestLimiter<'p, 's, P> { + . . . . type Output = (); + . . . . type Err = ast::Error; + . . . . + . . . . fn finish(self) -> Result<()> { + 81 ( 0.00%) . . . Ok(()) + . . . . } + . . . . + 570,048 ( 0.16%) . . . fn visit_pre(&mut self, ast: &Ast) -> Result<()> { + 356,280 ( 0.10%) . . . let span = match *ast { + . . . . Ast::Empty(_) + . . . . | Ast::Flags(_) + . . . . | Ast::Literal(_) + . . . . | Ast::Dot(_) + . . . . | Ast::Assertion(_) + . . . . | Ast::ClassUnicode(_) + . . . . | Ast::ClassPerl(_) => { + . . . . // These are all base cases, so we don't increment depth. + 99,254 ( 0.03%) . . . return Ok(()); + . . . . } + . . . . Ast::ClassBracketed(ref x) => &x.span, + 3,770 ( 0.00%) . . . Ast::Repetition(ref x) => &x.span, + . . . . Ast::Group(ref x) => &x.span, + . . . . Ast::Alternation(ref x) => &x.span, + . . . . Ast::Concat(ref x) => &x.span, + . . . . }; + . . . . self.increment_depth(span) + 641,304 ( 0.19%) . . . } + . . . . + . . . . fn visit_post(&mut self, ast: &Ast) -> Result<()> { + 43,258 ( 0.01%) . . . match *ast { + . . . . Ast::Empty(_) + . . . . | Ast::Flags(_) + . . . . | Ast::Literal(_) + . . . . | Ast::Dot(_) + . . . . | Ast::Assertion(_) + . . . . | Ast::ClassUnicode(_) + . . . . | Ast::ClassPerl(_) => { + . . . . // These are all base cases, so we don't decrement depth. +-- line 2312 ---------------------------------------- +-- line 2318 ---------------------------------------- + . . . . | Ast::Alternation(_) + . . . . | Ast::Concat(_) => { + . . . . self.decrement_depth(); + . . . . Ok(()) + . . . . } + . . . . } + . . . . } + . . . . + 39,328 ( 0.01%) . . . fn visit_class_set_item_pre( + . . . . &mut self, + . . . . ast: &ast::ClassSetItem, + . . . . ) -> Result<()> { + 15,940 ( 0.00%) . . . let span = match *ast { + . . . . ast::ClassSetItem::Empty(_) + . . . . | ast::ClassSetItem::Literal(_) + . . . . | ast::ClassSetItem::Range(_) + . . . . | ast::ClassSetItem::Ascii(_) + . . . . | ast::ClassSetItem::Unicode(_) + . . . . | ast::ClassSetItem::Perl(_) => { + . . . . // These are all base cases, so we don't increment depth. + . . . . return Ok(()); + . . . . } + 71 ( 0.00%) . . . ast::ClassSetItem::Bracketed(ref x) => &x.span, + 525 ( 0.00%) . . . ast::ClassSetItem::Union(ref x) => &x.span, + . . . . }; + . . . . self.increment_depth(span) + 44,244 ( 0.01%) . . . } + . . . . + . . . . fn visit_class_set_item_post( + . . . . &mut self, + . . . . ast: &ast::ClassSetItem, + . . . . ) -> Result<()> { + 1,192 ( 0.00%) . . . match *ast { + . . . . ast::ClassSetItem::Empty(_) + . . . . | ast::ClassSetItem::Literal(_) + . . . . | ast::ClassSetItem::Range(_) + . . . . | ast::ClassSetItem::Ascii(_) + . . . . | ast::ClassSetItem::Unicode(_) + . . . . | ast::ClassSetItem::Perl(_) => { + . . . . // These are all base cases, so we don't decrement depth. + . . . . Ok(()) +-- line 2358 ---------------------------------------- +-- line 2378 ---------------------------------------- + . . . . self.decrement_depth(); + . . . . Ok(()) + . . . . } + . . . . } + . . . . + . . . . /// When the result is an error, transforms the ast::ErrorKind from the source + . . . . /// Result into another one. This function is used to return clearer error + . . . . /// messages when possible. + 1,434 ( 0.00%) . . . fn specialize_err( + . . . . result: Result, + . . . . from: ast::ErrorKind, + . . . . to: ast::ErrorKind, + . . . . ) -> Result { + 717 ( 0.00%) . . . if let Err(e) = result { + . . . . if e.kind == from { + . . . . Err(ast::Error { kind: to, pattern: e.pattern, span: e.span }) + . . . . } else { + . . . . Err(e) + . . . . } + . . . . } else { + 2,868 ( 0.00%) . . . result + . . . . } + 1,673 ( 0.00%) . . . } + . . . . + . . . . #[cfg(test)] + . . . . mod tests { + . . . . use core::ops::Range; + . . . . + . . . . use alloc::format; + . . . . + . . . . use crate::ast::{self, Ast, Position, Span}; +-- line 2408 ---------------------------------------- + +1,675,153 ( 0.48%) . . . + +-------------------------------------------------------------------------------- +-- Auto-annotated source: /home/.cargo/registry/src/index.crates.io-6f17d22bba15001f/regex-automata-0.4.6/src/hybrid/id.rs +-------------------------------------------------------------------------------- +Ir Ge sysCount sysTime + +-- line 161 ---------------------------------------- + . . . . /// assert_eq!(mat.pattern().as_usize(), 1); + . . . . /// assert_eq!(mat.offset(), 5); + . . . . /// + . . . . /// # Ok::<(), Box>(()) + . . . . /// ``` + . . . . #[derive( + . . . . Clone, Copy, Debug, Default, Eq, Hash, PartialEq, PartialOrd, Ord, + . . . . )] + 234 ( 0.00%) . . . pub struct LazyStateID(u32); + . . . . + . . . . impl LazyStateID { + . . . . #[cfg(any(target_pointer_width = "32", target_pointer_width = "64"))] + . . . . const MAX_BIT: usize = 31; + . . . . + . . . . #[cfg(target_pointer_width = "16")] + . . . . const MAX_BIT: usize = 15; + . . . . +-- line 177 ---------------------------------------- +-- line 183 ---------------------------------------- + . . . . const MAX: usize = LazyStateID::MASK_MATCH - 1; + . . . . + . . . . /// Create a new lazy state ID. + . . . . /// + . . . . /// If the given identifier exceeds [`LazyStateID::MAX`], then this returns + . . . . /// an error. + . . . . #[inline] + . . . . pub(crate) fn new(id: usize) -> Result { + 1,950 ( 0.00%) . . . if id > LazyStateID::MAX { + . . . . let attempted = u64::try_from(id).unwrap(); + . . . . return Err(LazyStateIDError { attempted }); + . . . . } + . . . . Ok(LazyStateID::new_unchecked(id)) + . . . . } + . . . . + . . . . /// Create a new lazy state ID without checking whether the given value + . . . . /// exceeds [`LazyStateID::MAX`]. +-- line 199 ---------------------------------------- +-- line 208 ---------------------------------------- + . . . . + . . . . /// Return this lazy state ID as an untagged `usize`. + . . . . /// + . . . . /// If this lazy state ID is tagged, then the usize returned is the state + . . . . /// ID without the tag. If the ID was not tagged, then the usize returned + . . . . /// is equivalent to the state ID. + . . . . #[inline] + . . . . pub(crate) fn as_usize_untagged(&self) -> usize { +68,638 ( 0.02%) . . . self.as_usize_unchecked() & LazyStateID::MAX + . . . . } + . . . . + . . . . /// Return this lazy state ID as its raw internal `usize` value, which may + . . . . /// be tagged (and thus greater than LazyStateID::MAX). + . . . . #[inline] + . . . . pub(crate) const fn as_usize_unchecked(&self) -> usize { + . . . . // FIXME: Use as_usize() once const functions in traits are stable. + 232 ( 0.00%) . . . self.0 as usize + . . . . } + . . . . + . . . . #[inline] + . . . . pub(crate) const fn to_unknown(&self) -> LazyStateID { + . . . . LazyStateID::new_unchecked( + . . . . self.as_usize_unchecked() | LazyStateID::MASK_UNKNOWN, + . . . . ) + . . . . } + . . . . + . . . . #[inline] + . . . . pub(crate) const fn to_dead(&self) -> LazyStateID { + . . . . LazyStateID::new_unchecked( + 117 ( 0.00%) . . . self.as_usize_unchecked() | LazyStateID::MASK_DEAD, + . . . . ) + . . . . } + . . . . + . . . . #[inline] + . . . . pub(crate) const fn to_quit(&self) -> LazyStateID { + . . . . LazyStateID::new_unchecked( + 117 ( 0.00%) . . . self.as_usize_unchecked() | LazyStateID::MASK_QUIT, + . . . . ) + . . . . } + . . . . + . . . . /// Return this lazy state ID as a state ID that is tagged as a start + . . . . /// state. + . . . . #[inline] + . . . . pub(crate) const fn to_start(&self) -> LazyStateID { + . . . . LazyStateID::new_unchecked( +-- line 252 ---------------------------------------- +-- line 264 ---------------------------------------- + . . . . } + . . . . + . . . . /// Return true if and only if this lazy state ID is tagged. + . . . . /// + . . . . /// When a lazy state ID is tagged, then one can conclude that it is one + . . . . /// of a match, start, dead, quit or unknown state. + . . . . #[inline] + . . . . pub const fn is_tagged(&self) -> bool { + 727 ( 0.00%) . . . self.as_usize_unchecked() > LazyStateID::MAX + . . . . } + . . . . + . . . . /// Return true if and only if this represents a lazy state ID that is + . . . . /// "unknown." That is, the state has not yet been created. When a caller + . . . . /// sees this state ID, it generally means that a state has to be computed + . . . . /// in order to proceed. + . . . . #[inline] + . . . . pub const fn is_unknown(&self) -> bool { + 500 ( 0.00%) . . . self.as_usize_unchecked() & LazyStateID::MASK_UNKNOWN > 0 + . . . . } + . . . . + . . . . /// Return true if and only if this represents a dead state. A dead state + . . . . /// is a state that can never transition to any other state except the + . . . . /// dead state. When a dead state is seen, it generally indicates that a + . . . . /// search should stop. + . . . . #[inline] + . . . . pub const fn is_dead(&self) -> bool { + 43 ( 0.00%) . . . self.as_usize_unchecked() & LazyStateID::MASK_DEAD > 0 + . . . . } + . . . . + . . . . /// Return true if and only if this represents a quit state. A quit state + . . . . /// is a state that is representationally equivalent to a dead state, + . . . . /// except it indicates the automaton has reached a point at which it can + . . . . /// no longer determine whether a match exists or not. In general, this + . . . . /// indicates an error during search and the caller must either pass this + . . . . /// error up or use a different search technique. +-- line 298 ---------------------------------------- +-- line 305 ---------------------------------------- + . . . . /// start state. + . . . . /// + . . . . /// Note that if + . . . . /// [`Config::specialize_start_states`](crate::hybrid::dfa::Config) is + . . . . /// disabled (which is the default), then this will always return false + . . . . /// since start states won't be tagged. + . . . . #[inline] + . . . . pub const fn is_start(&self) -> bool { + 1 ( 0.00%) . . . self.as_usize_unchecked() & LazyStateID::MASK_START > 0 + . . . . } + . . . . + . . . . /// Return true if and only if this lazy state ID has been tagged as a + . . . . /// match state. + . . . . #[inline] + . . . . pub const fn is_match(&self) -> bool { + 48 ( 0.00%) . . . self.as_usize_unchecked() & LazyStateID::MASK_MATCH > 0 + . . . . } + . . . . } + . . . . + . . . . /// This error occurs when a lazy state ID could not be constructed. + . . . . /// + . . . . /// This occurs when given an integer exceeding the maximum lazy state ID + . . . . /// value. + . . . . /// +-- line 328 ---------------------------------------- + + 400 ( 0.00%) . . . + +-------------------------------------------------------------------------------- +-- Auto-annotated source: /home/.cargo/registry/src/index.crates.io-6f17d22bba15001f/aho-corasick-1.1.2/src/packed/teddy/generic.rs +-------------------------------------------------------------------------------- +Ir Ge sysCount sysTime + +-- line 27 ---------------------------------------- + . . . . pid: PatternID, + . . . . start: *const u8, + . . . . end: *const u8, + . . . . } + . . . . + . . . . impl Match { + . . . . /// Returns the ID of the pattern that matched. + . . . . pub(crate) fn pattern(&self) -> PatternID { + 1 ( 0.00%) . . . self.pid + 1 ( 0.00%) . . . } + . . . . + . . . . /// Returns a pointer into the haystack at which the match starts. + . . . . pub(crate) fn start(&self) -> *const u8 { + 1 ( 0.00%) . . . self.start + 1 ( 0.00%) . . . } + . . . . + . . . . /// Returns a pointer into the haystack at which the match ends. + . . . . pub(crate) fn end(&self) -> *const u8 { + 1 ( 0.00%) . . . self.end + 1 ( 0.00%) . . . } + . . . . } + . . . . + . . . . /// A "slim" Teddy implementation that is generic over both the vector type + . . . . /// and the minimum length of the patterns being searched for. + . . . . /// + . . . . /// Only 1, 2, 3 and 4 bytes are supported as minimum lengths. + . . . . #[derive(Clone, Debug)] + . . . . pub(crate) struct Slim { +-- line 54 ---------------------------------------- +-- line 71 ---------------------------------------- + . . . . /// Callers must ensure that this is okay to call in the current target for + . . . . /// the current CPU. + . . . . #[inline(always)] + . . . . pub(crate) unsafe fn new(patterns: Arc) -> Slim { + . . . . assert!( + . . . . 1 <= BYTES && BYTES <= 4, + . . . . "only 1, 2, 3 or 4 bytes are supported" + . . . . ); + 90 ( 0.00%) . . . let teddy = Teddy::new(patterns); +84,368 ( 0.02%) 310 ( 0.04%) . . => /home/.cargo/registry/src/index.crates.io-6f17d22bba15001f/aho-corasick-1.1.2/src/packed/teddy/generic.rs:aho_corasick::packed::teddy::generic::Teddy<_>::new (24x) + . . . . let masks = SlimMaskBuilder::from_teddy(&teddy); + 441 ( 0.00%) . . . Slim { teddy, masks } + . . . . } + . . . . + . . . . /// Returns the approximate total amount of heap used by this type, in + . . . . /// units of bytes. + . . . . #[inline(always)] + . . . . pub(crate) fn memory_usage(&self) -> usize { + . . . . self.teddy.memory_usage() + . . . . } +-- line 89 ---------------------------------------- +-- line 243 ---------------------------------------- + . . . . start: *const u8, + . . . . end: *const u8, + . . . . ) -> Option { + . . . . let len = end.distance(start); + . . . . debug_assert!(len >= self.minimum_len()); + . . . . let mut cur = start.add(2); + . . . . let mut prev0 = V::splat(0xFF); + . . . . let mut prev1 = V::splat(0xFF); + 18 ( 0.00%) . . . while cur <= end.sub(V::BYTES) { + . . . . if let Some(m) = self.find_one(cur, end, &mut prev0, &mut prev1) { + . . . . return Some(m); + . . . . } + . . . . cur = cur.add(V::BYTES); + . . . . } + 4 ( 0.00%) . . . if cur < end { + . . . . cur = end.sub(V::BYTES); + . . . . prev0 = V::splat(0xFF); + . . . . prev1 = V::splat(0xFF); + . . . . if let Some(m) = self.find_one(cur, end, &mut prev0, &mut prev1) { + . . . . return Some(m); + . . . . } + . . . . } + . . . . None +-- line 265 ---------------------------------------- +-- line 270 ---------------------------------------- + . . . . unsafe fn find_one( + . . . . &self, + . . . . cur: *const u8, + . . . . end: *const u8, + . . . . prev0: &mut V, + . . . . prev1: &mut V, + . . . . ) -> Option { + . . . . let c = self.candidate(cur, prev0, prev1); + 5 ( 0.00%) . . . if !c.is_zero() { + . . . . if let Some(m) = self.teddy.verify(cur.sub(2), end, c) { + . . . . return Some(m); + . . . . } + . . . . } + . . . . None + . . . . } + . . . . + . . . . /// See Slim::candidate. +-- line 286 ---------------------------------------- +-- line 287 ---------------------------------------- + . . . . #[inline(always)] + . . . . unsafe fn candidate( + . . . . &self, + . . . . cur: *const u8, + . . . . prev0: &mut V, + . . . . prev1: &mut V, + . . . . ) -> V { + . . . . let chunk = V::load_unaligned(cur); + 12 ( 0.00%) . . . let (res0, res1, res2) = Mask::members3(chunk, self.masks); + . . . . let res0prev0 = res0.shift_in_two_bytes(*prev0); + . . . . let res1prev1 = res1.shift_in_one_byte(*prev1); + . . . . let res = res0prev0.and(res1prev1).and(res2); + . . . . *prev0 = res0; + . . . . *prev1 = res1; + . . . . res + . . . . } + . . . . } +-- line 303 ---------------------------------------- +-- line 404 ---------------------------------------- + . . . . /// Callers must ensure that this is okay to call in the current target for + . . . . /// the current CPU. + . . . . #[inline(always)] + . . . . pub(crate) unsafe fn new(patterns: Arc) -> Fat { + . . . . assert!( + . . . . 1 <= BYTES && BYTES <= 4, + . . . . "only 1, 2, 3 or 4 bytes are supported" + . . . . ); + 21 ( 0.00%) . . . let teddy = Teddy::new(patterns); +717,161 ( 0.21%) 2,454 ( 0.30%) . . => /home/.cargo/registry/src/index.crates.io-6f17d22bba15001f/aho-corasick-1.1.2/src/packed/teddy/generic.rs:aho_corasick::packed::teddy::generic::Teddy<_>::new (21x) + . . . . let masks = FatMaskBuilder::from_teddy(&teddy); + 63 ( 0.00%) . . . Fat { teddy, masks } + 1,365 ( 0.00%) . . . => ./string/../sysdeps/x86_64/multiarch/memmove-vec-unaligned-erms.S:__memcpy_avx_unaligned_erms (21x) + . . . . } + . . . . + . . . . /// Returns the approximate total amount of heap used by this type, in + . . . . /// units of bytes. + . . . . #[inline(always)] + . . . . pub(crate) fn memory_usage(&self) -> usize { + . . . . self.teddy.memory_usage() + . . . . } +-- line 422 ---------------------------------------- +-- line 576 ---------------------------------------- + . . . . start: *const u8, + . . . . end: *const u8, + . . . . ) -> Option { + . . . . let len = end.distance(start); + . . . . debug_assert!(len >= self.minimum_len()); + . . . . let mut cur = start.add(2); + . . . . let mut prev0 = V::splat(0xFF); + . . . . let mut prev1 = V::splat(0xFF); + 45 ( 0.00%) . . . while cur <= end.sub(V::Half::BYTES) { + . . . . if let Some(m) = self.find_one(cur, end, &mut prev0, &mut prev1) { + . . . . return Some(m); + . . . . } + . . . . cur = cur.add(V::Half::BYTES); + . . . . } + 18 ( 0.00%) . . . if cur < end { + . . . . cur = end.sub(V::Half::BYTES); + . . . . prev0 = V::splat(0xFF); + . . . . prev1 = V::splat(0xFF); + . . . . if let Some(m) = self.find_one(cur, end, &mut prev0, &mut prev1) { + . . . . return Some(m); + . . . . } + . . . . } + . . . . None +-- line 598 ---------------------------------------- +-- line 603 ---------------------------------------- + . . . . unsafe fn find_one( + . . . . &self, + . . . . cur: *const u8, + . . . . end: *const u8, + . . . . prev0: &mut V, + . . . . prev1: &mut V, + . . . . ) -> Option { + . . . . let c = self.candidate(cur, prev0, prev1); + 18 ( 0.00%) . . . if !c.is_zero() { + 1 ( 0.00%) . . . if let Some(m) = self.teddy.verify(cur.sub(2), end, c) { + . . . . return Some(m); + . . . . } + . . . . } + . . . . None + . . . . } + . . . . + . . . . /// See `Fat::candidate`. + . . . . #[inline(always)] + . . . . unsafe fn candidate( + . . . . &self, + . . . . cur: *const u8, + . . . . prev0: &mut V, + . . . . prev1: &mut V, + . . . . ) -> V { + . . . . let chunk = V::load_half_unaligned(cur); + 54 ( 0.00%) . . . let (res0, res1, res2) = Mask::members3(chunk, self.masks); + . . . . let res0prev0 = res0.half_shift_in_two_bytes(*prev0); + . . . . let res1prev1 = res1.half_shift_in_one_byte(*prev1); + . . . . let res = res0prev0.and(res1prev1).and(res2); + . . . . *prev0 = res0; + . . . . *prev1 = res1; + . . . . res + . . . . } + . . . . } +-- line 636 ---------------------------------------- +-- line 743 ---------------------------------------- + . . . . // + . . . . // One other avenue I haven't explored is some kind of hashing trick + . . . . // that let's us do another high-confidence check before launching into + . . . . // `memcmp`. + . . . . } + . . . . + . . . . impl Teddy { + . . . . /// Create a new generic data structure for Teddy verification. + 456 ( 0.00%) . . . fn new(patterns: Arc) -> Teddy { + 171 ( 0.00%) . . . assert_ne!(0, patterns.len(), "Teddy requires at least one pattern"); + 114 ( 0.00%) . . . assert_ne!( + . . . . 0, + 57 ( 0.00%) . . . patterns.minimum_len(), + . . . . "Teddy does not support zero-length patterns" + . . . . ); + . . . . assert!( + . . . . BUCKETS == 8 || BUCKETS == 16, + . . . . "Teddy only supports 8 or 16 buckets" + . . . . ); + . . . . // MSRV(1.63): Use core::array::from_fn below instead of allocating a + . . . . // superfluous outer Vec. Not a big deal (especially given the BTreeMap + . . . . // allocation below), but nice to not do it. + . . . . let buckets = + 114 ( 0.00%) . . . <[Vec; BUCKETS]>::try_from(vec![vec![]; BUCKETS]) +20,142 ( 0.01%) . . . => /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/alloc/src/vec/mod.rs:alloc::vec::from_elem (57x) + . . . . .unwrap(); + 57 ( 0.00%) . . . let mut t = Teddy { patterns, buckets }; + . . . . + . . . . let mut map: BTreeMap, usize> = BTreeMap::new(); + . . . . for (id, pattern) in t.patterns.iter() { + . . . . // We try to be slightly clever in how we assign patterns into + . . . . // buckets. Generally speaking, we want patterns with the same + . . . . // prefix to be in the same bucket, since it minimizes the amount + . . . . // of time we spend churning through buckets in the verification + . . . . // step. +-- line 776 ---------------------------------------- +-- line 788 ---------------------------------------- + . . . . // same bucket, we ensure that we preserve correct leftmost-first + . . . . // and leftmost-longest match semantics. In addition to the fact + . . . . // that `patterns.iter()` iterates in the correct order, this + . . . . // guarantees that all possible ambiguous matches will occur in + . . . . // the same bucket. The verification routine could be adjusted to + . . . . // support correct leftmost match semantics regardless of bucket + . . . . // allocation, but that results in a performance hit. It's much + . . . . // nicer to be able to just stop as soon as a match is found. + 1,084 ( 0.00%) . . . let lonybs = pattern.low_nybbles(t.mask_len()); + 678 ( 0.00%) . . . if let Some(&bucket) = map.get(&lonybs) { + 3,390 ( 0.00%) . . . t.buckets[bucket].push(id); + . . . . } else { + . . . . // N.B. We assign buckets in reverse because it shouldn't have + . . . . // any influence on performance, but it does make it harder to + . . . . // get leftmost match semantics accidentally correct. + 812 ( 0.00%) . . . let bucket = (BUCKETS - 1) - (id.as_usize() % BUCKETS); + 1,624 ( 0.00%) . . . t.buckets[bucket].push(id); + 2,436 ( 0.00%) . . . map.insert(lonybs, bucket); +122,962 ( 0.04%) 6 ( 0.00%) . . => /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/alloc/src/collections/btree/map.rs:alloc::collections::btree::map::BTreeMap::insert (406x) + . . . . } + . . . . } + . . . . t + 456 ( 0.00%) . . . } + . . . . + . . . . /// Verify whether there are any matches starting at or after `cur` in the + . . . . /// haystack. The candidate chunk given should correspond to 8-bit bitsets + . . . . /// for N buckets. + . . . . /// + . . . . /// # Safety + . . . . /// + . . . . /// The given pointers representing the haystack must be valid to read +-- line 817 ---------------------------------------- +-- line 818 ---------------------------------------- + . . . . /// from. + . . . . #[inline(always)] + . . . . unsafe fn verify64( + . . . . &self, + . . . . cur: *const u8, + . . . . end: *const u8, + . . . . mut candidate_chunk: u64, + . . . . ) -> Option { + 54 ( 0.00%) . . . while candidate_chunk != 0 { + . . . . let bit = candidate_chunk.trailing_zeros().as_usize(); + . . . . candidate_chunk &= !(1 << bit); + . . . . + . . . . let cur = cur.add(bit / BUCKETS); + 34 ( 0.00%) . . . let bucket = bit % BUCKETS; + . . . . if let Some(m) = self.verify_bucket(cur, end, bucket) { + . . . . return Some(m); + . . . . } + . . . . } + . . . . None + . . . . } + . . . . + . . . . /// Verify whether there are any matches starting at `at` in the given +-- line 839 ---------------------------------------- +-- line 885 ---------------------------------------- + . . . . } + . . . . + . . . . /// Returns the approximate total amount of heap used by this type, in + . . . . /// units of bytes. + . . . . fn memory_usage(&self) -> usize { + . . . . // This is an upper bound rather than a precise accounting. No + . . . . // particular reason, other than it's probably very close to actual + . . . . // memory usage in practice. + 21 ( 0.00%) . . . self.patterns.len() * core::mem::size_of::() + . . . . } + . . . . } + . . . . + . . . . impl Teddy<8> { + . . . . /// Runs the verification routine for "slim" Teddy. + . . . . /// + . . . . /// The candidate given should be a collection of 8-bit bitsets (one bitset + . . . . /// per lane), where the ith bit is set in the jth lane if and only if the +-- line 901 ---------------------------------------- +-- line 1169 ---------------------------------------- + . . . . /// Each byte in the mask corresponds to a 8-bit bitset, where bit `i` is set + . . . . /// if and only if the corresponding nybble is in the ith bucket. The index of + . . . . /// the byte (0-15, inclusive) corresponds to the nybble. + . . . . /// + . . . . /// Each mask is used as the target of a shuffle, where the indices for the + . . . . /// shuffle are taken from the haystack. AND'ing the shuffles for both the + . . . . /// low and high masks together also results in 8-bit bitsets, but where bit + . . . . /// `i` is set if and only if the correspond *byte* is in the ith bucket. + 26 ( 0.00%) . . . #[derive(Clone, Default)] + . . . . struct SlimMaskBuilder { + . . . . lo: [u8; 32], + . . . . hi: [u8; 32], + . . . . } + . . . . + . . . . impl SlimMaskBuilder { + . . . . /// Update this mask by adding the given byte to the given bucket. The + . . . . /// given bucket must be in the range 0-7. +-- line 1185 ---------------------------------------- +-- line 1186 ---------------------------------------- + . . . . /// + . . . . /// # Panics + . . . . /// + . . . . /// When `bucket >= 8`. + . . . . fn add(&mut self, bucket: usize, byte: u8) { + . . . . assert!(bucket < 8); + . . . . + . . . . let bucket = u8::try_from(bucket).unwrap(); + 606 ( 0.00%) . . . let byte_lo = usize::from(byte & 0xF); + 1,212 ( 0.00%) . . . let byte_hi = usize::from((byte >> 4) & 0xF); + . . . . // When using 256-bit vectors, we need to set this bucket assignment in + . . . . // the low and high 128-bit portions of the mask. This allows us to + . . . . // process 32 bytes at a time. Namely, AVX2 shuffles operate on each + . . . . // of the 128-bit lanes, rather than the full 256-bit vector at once. + 606 ( 0.00%) . . . self.lo[byte_lo] |= 1 << bucket; + 606 ( 0.00%) . . . self.lo[byte_lo + 16] |= 1 << bucket; + 606 ( 0.00%) . . . self.hi[byte_hi] |= 1 << bucket; + 606 ( 0.00%) . . . self.hi[byte_hi + 16] |= 1 << bucket; + . . . . } + . . . . + . . . . /// Turn this builder into a vector mask. + . . . . /// + . . . . /// # Panics + . . . . /// + . . . . /// When `V` represents a vector bigger than what `MaskBytes` can contain. + . . . . /// +-- line 1211 ---------------------------------------- +-- line 1212 ---------------------------------------- + . . . . /// # Safety + . . . . /// + . . . . /// Callers must ensure that this is okay to call in the current target for + . . . . /// the current CPU. + . . . . #[inline(always)] + . . . . unsafe fn build(&self) -> Mask { + . . . . assert!(V::BYTES <= self.lo.len()); + . . . . assert!(V::BYTES <= self.hi.len()); + 4 ( 0.00%) . . . Mask { + . . . . lo: V::load_unaligned(self.lo[..].as_ptr()), + 1 ( 0.00%) . . . hi: V::load_unaligned(self.hi[..].as_ptr()), + . . . . } + . . . . } + . . . . + . . . . /// A convenience function for building `N` vector masks from a slim + . . . . /// `Teddy` value. + . . . . /// + . . . . /// # Panics + . . . . /// +-- line 1230 ---------------------------------------- +-- line 1240 ---------------------------------------- + . . . . ) -> [Mask; BYTES] { + . . . . // MSRV(1.63): Use core::array::from_fn to just build the array here + . . . . // instead of creating a vector and turning it into an array. + . . . . let mut mask_builders = vec![SlimMaskBuilder::default(); BYTES]; + . . . . for (bucket_index, bucket) in teddy.buckets.iter().enumerate() { + . . . . for pid in bucket.iter().copied() { + . . . . let pat = teddy.patterns.get(pid); + . . . . for (i, builder) in mask_builders.iter_mut().enumerate() { + 1,818 ( 0.00%) . . . builder.add(bucket_index, pat.bytes()[i]); + . . . . } + . . . . } + . . . . } + . . . . let array = + . . . . <[SlimMaskBuilder; BYTES]>::try_from(mask_builders).unwrap(); + . . . . array.map(|builder| builder.build()) + . . . . } + . . . . } +-- line 1256 ---------------------------------------- +-- line 1296 ---------------------------------------- + . . . . /// + . . . . /// # Panics + . . . . /// + . . . . /// When `bucket >= 16`. + . . . . fn add(&mut self, bucket: usize, byte: u8) { + . . . . assert!(bucket < 16); + . . . . + . . . . let bucket = u8::try_from(bucket).unwrap(); + 4,932 ( 0.00%) . . . let byte_lo = usize::from(byte & 0xF); + 2,466 ( 0.00%) . . . let byte_hi = usize::from((byte >> 4) & 0xF); + . . . . // Unlike slim teddy, fat teddy only works with AVX2. For fat teddy, + . . . . // the high 128 bits of our mask correspond to buckets 8-15, while the + . . . . // low 128 bits correspond to buckets 0-7. + 368 ( 0.00%) . . . if bucket < 8 { + 1,206 ( 0.00%) . . . self.lo[byte_lo] |= 1 << bucket; + . . . . self.hi[byte_hi] |= 1 << bucket; + . . . . } else { + 1,260 ( 0.00%) . . . self.lo[byte_lo + 16] |= 1 << (bucket % 8); + . . . . self.hi[byte_hi + 16] |= 1 << (bucket % 8); + . . . . } + . . . . } + . . . . + . . . . /// Turn this builder into a vector mask. + . . . . /// + . . . . /// # Panics + . . . . /// +-- line 1321 ---------------------------------------- +-- line 1352 ---------------------------------------- + . . . . ) -> [Mask; BYTES] { + . . . . // MSRV(1.63): Use core::array::from_fn to just build the array here + . . . . // instead of creating a vector and turning it into an array. + . . . . let mut mask_builders = vec![FatMaskBuilder::default(); BYTES]; + . . . . for (bucket_index, bucket) in teddy.buckets.iter().enumerate() { + . . . . for pid in bucket.iter().copied() { + . . . . let pat = teddy.patterns.get(pid); + . . . . for (i, builder) in mask_builders.iter_mut().enumerate() { + 7,398 ( 0.00%) . . . builder.add(bucket_index, pat.bytes()[i]); + . . . . } + . . . . } + . . . . } + . . . . let array = + . . . . <[FatMaskBuilder; BYTES]>::try_from(mask_builders).unwrap(); + . . . . array.map(|builder| builder.build()) + . . . . } + . . . . } +-- line 1368 ---------------------------------------- + +11,529 ( 0.00%) . . . + +-------------------------------------------------------------------------------- +-- Auto-annotated source: /home/.cargo/registry/src/index.crates.io-6f17d22bba15001f/regex-automata-0.4.6/src/util/primitives.rs +-------------------------------------------------------------------------------- +Ir Ge sysCount sysTime + +-- line 136 ---------------------------------------- + . . . . /// not rely on this property for safety. Callers may choose to rely on this + . . . . /// property for correctness however. For example, creating a `SmallIndex` with + . . . . /// an invalid value can be done in entirely safe code. This may in turn result + . . . . /// in panics or silent logical errors. + . . . . #[derive( + . . . . Clone, Copy, Debug, Default, Eq, Hash, PartialEq, PartialOrd, Ord, + . . . . )] + . . . . #[repr(transparent)] + 14,803 ( 0.00%) . . . pub struct SmallIndex(u32); + . . . . + . . . . impl SmallIndex { + . . . . /// The maximum index value. + . . . . #[cfg(any(target_pointer_width = "32", target_pointer_width = "64"))] + . . . . pub const MAX: SmallIndex = + . . . . // FIXME: Use as_usize() once const functions in traits are stable. + . . . . SmallIndex::new_unchecked(core::i32::MAX as usize - 1); + . . . . +-- line 152 ---------------------------------------- +-- line 181 ---------------------------------------- + . . . . /// invalid index value is likely to cause panics or possibly even silent + . . . . /// logical errors. + . . . . /// + . . . . /// Callers must never rely on a `SmallIndex` to be within a certain range + . . . . /// for memory safety. + . . . . #[inline] + . . . . pub const fn new_unchecked(index: usize) -> SmallIndex { + . . . . // FIXME: Use as_u32() once const functions in traits are stable. + 27 ( 0.00%) . . . SmallIndex(index as u32) + . . . . } + . . . . + . . . . /// Like [`SmallIndex::new`], but panics if the given index is not valid. + . . . . #[inline] + . . . . pub fn must(index: usize) -> SmallIndex { + . . . . SmallIndex::new(index).expect("invalid small index") + . . . . } + . . . . + . . . . /// Return this small index as a `usize`. This is guaranteed to never + . . . . /// overflow `usize`. + . . . . #[inline] + . . . . pub const fn as_usize(&self) -> usize { + . . . . // FIXME: Use as_usize() once const functions in traits are stable. +200,644 ( 0.06%) . . . self.0 as usize + . . . . } + . . . . + . . . . /// Return this small index as a `u64`. This is guaranteed to never + . . . . /// overflow. + . . . . #[inline] + . . . . pub const fn as_u64(&self) -> u64 { + . . . . // FIXME: Use u64::from() once const functions in traits are stable. + 11,813 ( 0.00%) . . . self.0 as u64 + . . . . } + . . . . + . . . . /// Return the internal `u32` of this small index. This is guaranteed to + . . . . /// never overflow `u32`. + . . . . #[inline] + . . . . pub const fn as_u32(&self) -> u32 { + . . . . self.0 + . . . . } +-- line 219 ---------------------------------------- +-- line 227 ---------------------------------------- + . . . . } + . . . . + . . . . /// Returns one more than this small index as a usize. + . . . . /// + . . . . /// Since a small index has constraints on its maximum value, adding `1` to + . . . . /// it will always fit in a `usize`, `u32` and a `i32`. + . . . . #[inline] + . . . . pub fn one_more(&self) -> usize { + 2,160 ( 0.00%) . . . self.as_usize() + 1 + . . . . } + . . . . + . . . . /// Decode this small index from the bytes given using the native endian + . . . . /// byte order for the current target. + . . . . /// + . . . . /// If the decoded integer is not representable as a small index for the + . . . . /// current target, then this returns an error. + . . . . #[inline] +-- line 243 ---------------------------------------- +-- line 319 ---------------------------------------- + . . . . Ok(SmallIndex::new_unchecked(index.as_usize())) + . . . . } + . . . . } + . . . . + . . . . impl TryFrom for SmallIndex { + . . . . type Error = SmallIndexError; + . . . . + . . . . fn try_from(index: u32) -> Result { + 3,096 ( 0.00%) . . . if index > SmallIndex::MAX.as_u32() { + . . . . return Err(SmallIndexError { attempted: u64::from(index) }); + . . . . } + . . . . Ok(SmallIndex::new_unchecked(index.as_usize())) + . . . . } + . . . . } + . . . . + . . . . impl TryFrom for SmallIndex { + . . . . type Error = SmallIndexError; +-- line 335 ---------------------------------------- +-- line 341 ---------------------------------------- + . . . . Ok(SmallIndex::new_unchecked(index.as_usize())) + . . . . } + . . . . } + . . . . + . . . . impl TryFrom for SmallIndex { + . . . . type Error = SmallIndexError; + . . . . + . . . . fn try_from(index: usize) -> Result { +400,048 ( 0.12%) . . . if index > SmallIndex::MAX.as_usize() { + . . . . return Err(SmallIndexError { attempted: index.as_u64() }); + . . . . } + . . . . Ok(SmallIndex::new_unchecked(index)) + . . . . } + . . . . } + . . . . + . . . . #[cfg(test)] + . . . . impl quickcheck::Arbitrary for SmallIndex { +-- line 357 ---------------------------------------- +-- line 402 ---------------------------------------- + . . . . pub(crate) struct SmallIndexIter { + . . . . rng: core::ops::Range, + . . . . } + . . . . + . . . . impl Iterator for SmallIndexIter { + . . . . type Item = SmallIndex; + . . . . + . . . . fn next(&mut self) -> Option { +179,078 ( 0.05%) . . . if self.rng.start >= self.rng.end { + . . . . return None; + . . . . } + 81 ( 0.00%) . . . let next_id = self.rng.start + 1; + . . . . let id = core::mem::replace(&mut self.rng.start, next_id); + . . . . // new_unchecked is OK since we asserted that the number of + . . . . // elements in this iterator will fit in an ID at construction. + . . . . Some(SmallIndex::new_unchecked(id)) + . . . . } + . . . . } + . . . . + . . . . macro_rules! index_type_impls { +-- line 421 ---------------------------------------- +-- line 550 ---------------------------------------- + . . . . } + . . . . } + . . . . + . . . . impl core::ops::Index<$name> for [T] { + . . . . type Output = T; + . . . . + . . . . #[inline] + . . . . fn index(&self, index: $name) -> &T { +244,572 ( 0.07%) . . . &self[index.as_usize()] + . . . . } + . . . . } + . . . . + . . . . impl core::ops::IndexMut<$name> for [T] { + . . . . #[inline] + . . . . fn index_mut(&mut self, index: $name) -> &mut T { + . . . . &mut self[index.as_usize()] + . . . . } +-- line 566 ---------------------------------------- +-- line 567 ---------------------------------------- + . . . . } + . . . . + . . . . #[cfg(feature = "alloc")] + . . . . impl core::ops::Index<$name> for Vec { + . . . . type Output = T; + . . . . + . . . . #[inline] + . . . . fn index(&self, index: $name) -> &T { +199,507 ( 0.06%) . . . &self[index.as_usize()] + . . . . } + . . . . } + . . . . + . . . . #[cfg(feature = "alloc")] + . . . . impl core::ops::IndexMut<$name> for Vec { + . . . . #[inline] + . . . . fn index_mut(&mut self, index: $name) -> &mut T { +266,365 ( 0.08%) . . . &mut self[index.as_usize()] + . . . . } + . . . . } + . . . . + . . . . impl From for $name { + . . . . fn from(value: u8) -> $name { + . . . . $name(SmallIndex::from(value)) + . . . . } + . . . . } +-- line 591 ---------------------------------------- +-- line 661 ---------------------------------------- + . . . . } + . . . . } + . . . . + . . . . #[derive(Clone, Debug)] + . . . . pub(crate) struct $iter(SmallIndexIter); + . . . . + . . . . impl $iter { + . . . . fn new(len: usize) -> $iter { + 432 ( 0.00%) . . . assert!( + 432 ( 0.00%) . . . len <= $name::LIMIT, + . . . . "cannot create iterator for {} when number of \ + . . . . elements exceed {:?}", + . . . . stringify!($name), + . . . . $name::LIMIT, + . . . . ); + . . . . $iter(SmallIndexIter { rng: 0..len }) + . . . . } + . . . . } +-- line 678 ---------------------------------------- + + 69,496 ( 0.02%) . . . + +-------------------------------------------------------------------------------- +-- Auto-annotated source: /home/.cargo/registry/src/index.crates.io-6f17d22bba15001f/regex-automata-0.4.6/src/nfa/thompson/literal_trie.rs +-------------------------------------------------------------------------------- +Ir Ge sysCount sysTime + +-- line 102 ---------------------------------------- + . . . . LiteralTrie { states: vec![root], rev: true } + . . . . } + . . . . + . . . . /// Add the given literal to this trie. + . . . . /// + . . . . /// If the literal could not be added because the `StateID` space was + . . . . /// exhausted, then an error is returned. If an error returns, the trie + . . . . /// is in an unspecified state. +267,110 ( 0.08%) . . . pub(crate) fn add(&mut self, bytes: &[u8]) -> Result<(), BuildError> { + . . . . let mut prev = StateID::ZERO; + . . . . let mut it = bytes.iter().copied(); +221,725 ( 0.06%) . . . while let Some(b) = if self.rev { it.next_back() } else { it.next() } { + . . . . prev = self.get_or_add_state(prev, b)?; + . . . . } + . . . . self.states[prev].add_match(); + 26,711 ( 0.01%) . . . Ok(()) +213,688 ( 0.06%) . . . } + . . . . + . . . . /// If the given transition is defined, then return the next state ID. + . . . . /// Otherwise, add the transition to `from` and point it to a new state. + . . . . /// + . . . . /// If a new state ID could not be allocated, then an error is returned. + . . . . fn get_or_add_state( + . . . . &mut self, + . . . . from: StateID, + . . . . byte: u8, + . . . . ) -> Result { + . . . . let active = self.states[from].active_chunk(); + . . . . match active.binary_search_by_key(&byte, |t| t.byte) { + 30,376 ( 0.01%) . . . Ok(i) => Ok(active[i].next), + . . . . Err(i) => { + . . . . // Add a new state and get its ID. + . . . . let next = StateID::new(self.states.len()).map_err(|_| { + . . . . BuildError::too_many_states(self.states.len()) + . . . . })?; + . . . . self.states.push(State::default()); + . . . . // Offset our position to account for all transitions and not + . . . . // just the ones in the active chunk. + 85,194 ( 0.02%) . . . let i = self.states[from].active_chunk_start() + i; + . . . . let t = Transition { byte, next }; + . . . . self.states[from].transitions.insert(i, t); + . . . . Ok(next) + . . . . } + . . . . } + . . . . } + . . . . + . . . . /// Compile this literal trie to the NFA builder given. + . . . . /// + . . . . /// This forwards any errors that may occur while using the given builder. + 4,950 ( 0.00%) . . . pub(crate) fn compile( + . . . . &self, + . . . . builder: &mut Builder, + . . . . ) -> Result { + . . . . // Compilation proceeds via depth-first traversal of the trie. + . . . . // + . . . . // This is overall pretty brutal. The recursive version of this is + . . . . // deliciously simple. (See 'compile_to_hir' below for what it might + . . . . // look like.) But recursion on a trie means your call stack grows +-- line 159 ---------------------------------------- +-- line 164 ---------------------------------------- + . . . . // frame. If someone can simplify this without using recursion, that'd + . . . . // be great. + . . . . + . . . . // 'end' is our match state for this trie, but represented in the the + . . . . // NFA. Any time we see a match in the trie, we insert a transition + . . . . // from the current state we're in to 'end'. + . . . . let end = builder.add_empty()?; + . . . . let mut stack = vec![]; + 495 ( 0.00%) . . . let mut f = Frame::new(&self.states[StateID::ZERO]); + . . . . loop { + . . . . if let Some(t) = f.transitions.next() { + 81,602 ( 0.02%) . . . if self.states[t.next].is_leaf() { + 49,682 ( 0.01%) . . . f.sparse.push(thompson::Transition { + . . . . start: t.byte, + . . . . end: t.byte, + . . . . next: end, + . . . . }); + . . . . } else { + 15,960 ( 0.00%) . . . f.sparse.push(thompson::Transition { + . . . . start: t.byte, + . . . . end: t.byte, + . . . . // This is a little funny, but when the frame we create + . . . . // below completes, it will pop this parent frame off + . . . . // and modify this transition to point to the correct + . . . . // state. + . . . . next: StateID::ZERO, + . . . . }); +223,440 ( 0.06%) . . . stack.push(f); +223,440 ( 0.06%) . . . f = Frame::new(&self.states[t.next]); + . . . . } + . . . . continue; + . . . . } + . . . . // At this point, we have visited all transitions in f.chunk, so + . . . . // add it as a sparse NFA state. Unless the chunk was empty, in + . . . . // which case, we don't do anything. + 52,282 ( 0.02%) . . . if !f.sparse.is_empty() { + . . . . let chunk_id = if f.sparse.len() == 1 { + . . . . builder.add_range(f.sparse.pop().unwrap())? + . . . . } else { + . . . . let sparse = mem::replace(&mut f.sparse, vec![]); + . . . . builder.add_sparse(sparse)? + . . . . }; + . . . . f.union.push(chunk_id); + . . . . } + . . . . // Now we need to look to see if there are other chunks to visit. + 18,325 ( 0.01%) . . . if let Some(chunk) = f.chunks.next() { + . . . . // If we're here, it means we're on the second (or greater) + . . . . // chunk, which implies there is a match at this point. So + . . . . // connect this state to the final end state. + . . . . f.union.push(end); + . . . . // Advance to the next chunk. + 3,740 ( 0.00%) . . . f.transitions = chunk.iter(); + . . . . continue; + . . . . } + . . . . // Now that we are out of chunks, we have completely visited + . . . . // this state. So turn our union of chunks into an NFA union + . . . . // state, and add that union state to the parent state's current + . . . . // sparse state. (If there is no parent, we're done.) + 82,275 ( 0.02%) . . . let start = builder.add_union(f.union)?; + 31,920 ( 0.01%) . . . match stack.pop() { + . . . . None => { + 1,980 ( 0.00%) . . . return Ok(ThompsonRef { start, end }); + . . . . } +191,520 ( 0.06%) . . . Some(mut parent) => { + . . . . // OK because the only way a frame gets pushed on to the + . . . . // stack (aside from the root) is when a transition has + . . . . // been added to 'sparse'. + 15,960 ( 0.00%) . . . parent.sparse.last_mut().unwrap().next = start; +255,360 ( 0.07%) . . . f = parent; + . . . . } + . . . . } + . . . . } + 4,455 ( 0.00%) . . . } + . . . . + . . . . /// Converts this trie to an equivalent HIR expression. + . . . . /// + . . . . /// We don't actually use this, but it's useful for tests. In particular, + . . . . /// it provides a (somewhat) human readable representation of the trie + . . . . /// itself. + . . . . #[cfg(test)] + . . . . fn compile_to_hir(&self) -> regex_syntax::hir::Hir { +-- line 244 ---------------------------------------- +-- line 323 ---------------------------------------- + . . . . /// Create a new stack frame for trie traversal. This initializes the + . . . . /// 'transitions' iterator to the transitions for the first chunk, with the + . . . . /// 'chunks' iterator being every chunk after the first one. + . . . . fn new(state: &'a State) -> Frame<'a> { + . . . . let mut chunks = state.chunks(); + . . . . // every state has at least 1 chunk + . . . . let chunk = chunks.next().unwrap(); + . . . . let transitions = chunk.iter(); + 54,810 ( 0.02%) . . . Frame { chunks, transitions, union: vec![], sparse: vec![] } + . . . . } + . . . . } + . . . . + . . . . /// A state in a trie. + . . . . /// + . . . . /// This uses a sparse representation. Since we don't use literal tries + . . . . /// for searching, and ultimately (and compilation requires visiting every + . . . . /// transition anyway), we use a sparse representation for transitions. This +-- line 339 ---------------------------------------- +-- line 371 ---------------------------------------- + . . . . fn add_match(&mut self) { + . . . . // This is not strictly necessary, but there's no point in recording + . . . . // another match by adding another chunk if the state has no + . . . . // transitions. Note though that we only skip this if we already know + . . . . // this is a match state, which is only true if 'chunks' is not empty. + . . . . // Basically, if we didn't do this, nothing semantically would change, + . . . . // but we'd end up pushing another chunk and potentially triggering an + . . . . // alloc. + 51,747 ( 0.01%) . . . if self.transitions.is_empty() && !self.chunks.is_empty() { + . . . . return; + . . . . } + 80,133 ( 0.02%) . . . let chunk_start = self.active_chunk_start(); + . . . . let chunk_end = self.transitions.len(); + 53,422 ( 0.02%) . . . self.chunks.push((chunk_start, chunk_end)); + . . . . } + . . . . + . . . . /// Returns true if and only if this state is a leaf state. That is, a + . . . . /// state that has no outgoing transitions. + . . . . fn is_leaf(&self) -> bool { + . . . . self.transitions.is_empty() + . . . . } + . . . . +-- line 392 ---------------------------------------- +-- line 399 ---------------------------------------- + . . . . transitions: &*self.transitions, + . . . . chunks: self.chunks.iter(), + . . . . active: Some(self.active_chunk()), + . . . . } + . . . . } + . . . . + . . . . /// Returns the active chunk as a slice of transitions. + . . . . fn active_chunk(&self) -> &[Transition] { + 73,003 ( 0.02%) . . . let start = self.active_chunk_start(); + 71,177 ( 0.02%) . . . &self.transitions[start..] + . . . . } + . . . . + . . . . /// Returns the index into 'transitions' where the active chunk starts. + . . . . fn active_chunk_start(&self) -> usize { + . . . . self.chunks.last().map_or(0, |&(_, end)| end) + . . . . } + . . . . } + . . . . +-- line 416 ---------------------------------------- +-- line 446 ---------------------------------------- + . . . . chunks: core::slice::Iter<'a, (usize, usize)>, + . . . . active: Option<&'a [Transition]>, + . . . . } + . . . . + . . . . impl<'a> Iterator for StateChunksIter<'a> { + . . . . type Item = &'a [Transition]; + . . . . + . . . . fn next(&mut self) -> Option<&'a [Transition]> { + 3,740 ( 0.00%) . . . if let Some(&(start, end)) = self.chunks.next() { + . . . . return Some(&self.transitions[start..end]); + . . . . } + 18,325 ( 0.01%) . . . if let Some(chunk) = self.active.take() { + . . . . return Some(chunk); + . . . . } + . . . . None + . . . . } + . . . . } + . . . . + . . . . /// A single transition in a trie to another state. + . . . . #[derive(Clone, Copy)] +-- line 465 ---------------------------------------- + +568,788 ( 0.16%) . . . + +-------------------------------------------------------------------------------- +-- Auto-annotated source: /home/.cargo/registry/src/index.crates.io-6f17d22bba15001f/regex-syntax-0.8.2/src/utf8.rs +-------------------------------------------------------------------------------- +Ir Ge sysCount sysTime + +-- line 107 ---------------------------------------- + . . . . + . . . . impl Utf8Sequence { + . . . . /// Creates a new UTF-8 sequence from the encoded bytes of a scalar value + . . . . /// range. + . . . . /// + . . . . /// This assumes that `start` and `end` have the same length. + . . . . fn from_encoded_range(start: &[u8], end: &[u8]) -> Self { + . . . . assert_eq!(start.len(), end.len()); + 8,670 ( 0.00%) . . . match start.len() { + . . . . 2 => Utf8Sequence::Two([ + . . . . Utf8Range::new(start[0], end[0]), + . . . . Utf8Range::new(start[1], end[1]), + . . . . ]), + . . . . 3 => Utf8Sequence::Three([ + . . . . Utf8Range::new(start[0], end[0]), + . . . . Utf8Range::new(start[1], end[1]), + . . . . Utf8Range::new(start[2], end[2]), +-- line 123 ---------------------------------------- +-- line 128 ---------------------------------------- + . . . . Utf8Range::new(start[2], end[2]), + . . . . Utf8Range::new(start[3], end[3]), + . . . . ]), + . . . . n => unreachable!("invalid encoded length: {}", n), + . . . . } + . . . . } + . . . . + . . . . /// Returns the underlying sequence of byte ranges as a slice. + 2,300 ( 0.00%) . . . pub fn as_slice(&self) -> &[Utf8Range] { + . . . . use self::Utf8Sequence::*; +11,500 ( 0.00%) . . . match *self { + 1,132 ( 0.00%) . . . One(ref r) => slice::from_ref(r), + 386 ( 0.00%) . . . Two(ref r) => &r[..], + 1,804 ( 0.00%) . . . Three(ref r) => &r[..], + 1,278 ( 0.00%) . . . Four(ref r) => &r[..], + . . . . } + 2,300 ( 0.00%) . . . } + . . . . + . . . . /// Returns the number of byte ranges in this sequence. + . . . . /// + . . . . /// The length is guaranteed to be in the closed interval `[1, 4]`. + . . . . pub fn len(&self) -> usize { + . . . . self.as_slice().len() + . . . . } + . . . . +-- line 152 ---------------------------------------- +-- line 296 ---------------------------------------- + . . . . #[derive(Debug)] + . . . . pub struct Utf8Sequences { + . . . . range_stack: Vec, + . . . . } + . . . . + . . . . impl Utf8Sequences { + . . . . /// Create a new iterator over UTF-8 byte ranges for the scalar value range + . . . . /// given. + 7,896 ( 0.00%) . . . pub fn new(start: char, end: char) -> Self { + 3,948 ( 0.00%) . . . let mut it = Utf8Sequences { range_stack: vec![] }; + . . . . it.push(u32::from(start), u32::from(end)); + . . . . it + 6,580 ( 0.00%) . . . } + . . . . + . . . . /// reset resets the scalar value range. + . . . . /// Any existing state is cleared, but resources may be reused. + . . . . /// + . . . . /// N.B. Benchmarks say that this method is dubious. + . . . . #[doc(hidden)] + . . . . pub fn reset(&mut self, start: char, end: char) { + . . . . self.range_stack.clear(); +-- line 316 ---------------------------------------- +-- line 331 ---------------------------------------- + . . . . fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result { + . . . . write!(f, "ScalarRange({:X}, {:X})", self.start, self.end) + . . . . } + . . . . } + . . . . + . . . . impl Iterator for Utf8Sequences { + . . . . type Item = Utf8Sequence; + . . . . +32,544 ( 0.01%) . . . fn next(&mut self) -> Option { + . . . . 'TOP: while let Some(mut r) = self.range_stack.pop() { + . . . . 'INNER: loop { + . . . . if let Some((r1, r2)) = r.split() { + . . . . self.push(r2.start, r2.end); + . . . . r.start = r1.start; + . . . . r.end = r1.end; + . . . . continue 'INNER; + . . . . } + 3,161 ( 0.00%) . . . if !r.is_valid() { + . . . . continue 'TOP; + . . . . } + . . . . for i in 1..MAX_UTF8_BYTES { + . . . . let max = max_scalar_value(i); +16,316 ( 0.00%) . . . if r.start <= max && max < r.end { + 369 ( 0.00%) . . . self.push(max + 1, r.end); + . . . . r.end = max; + . . . . continue 'INNER; + . . . . } + . . . . } + . . . . if let Some(ascii_range) = r.as_ascii() { + 2,264 ( 0.00%) . . . return Some(Utf8Sequence::One(ascii_range)); + . . . . } + . . . . for i in 1..MAX_UTF8_BYTES { + . . . . let m = (1 << (6 * i)) - 1; +25,728 ( 0.01%) . . . if (r.start & !m) != (r.end & !m) { + 2,952 ( 0.00%) . . . if (r.start & m) != 0 { + 492 ( 0.00%) . . . self.push((r.start | m) + 1, r.end); + . . . . r.end = r.start | m; + . . . . continue 'INNER; + . . . . } +10,947 ( 0.00%) . . . if (r.end & m) != m { + . . . . self.push(r.end & !m, r.end); + 246 ( 0.00%) . . . r.end = (r.end & !m) - 1; + . . . . continue 'INNER; + . . . . } + . . . . } + . . . . } + . . . . let mut start = [0; MAX_UTF8_BYTES]; + . . . . let mut end = [0; MAX_UTF8_BYTES]; + . . . . let n = r.encode(&mut start, &mut end); +15,606 ( 0.00%) . . . return Some(Utf8Sequence::from_encoded_range( + . . . . &start[0..n], + . . . . &end[0..n], + . . . . )); + . . . . } + . . . . } + 2,632 ( 0.00%) . . . None +28,928 ( 0.01%) . . . } + . . . . } + . . . . + . . . . impl FusedIterator for Utf8Sequences {} + . . . . + . . . . impl ScalarRange { + . . . . /// split splits this range if it overlaps with a surrogate codepoint. + . . . . /// + . . . . /// Either or both ranges may be invalid. + . . . . fn split(&self) -> Option<(ScalarRange, ScalarRange)> { + 7,570 ( 0.00%) . . . if self.start < 0xE000 && self.end > 0xD7FF { + . . . . Some(( + . . . . ScalarRange { start: self.start, end: 0xD7FF }, + . . . . ScalarRange { start: 0xE000, end: self.end }, + . . . . )) + . . . . } else { + . . . . None + . . . . } + . . . . } + . . . . + . . . . /// is_valid returns true if and only if start <= end. + . . . . fn is_valid(&self) -> bool { + 3,161 ( 0.00%) . . . self.start <= self.end + . . . . } + . . . . + . . . . /// as_ascii returns this range as a Utf8Range if and only if all scalar + . . . . /// values in this range can be encoded as a single byte. + . . . . fn as_ascii(&self) -> Option { + 2,792 ( 0.00%) . . . if self.is_ascii() { + . . . . let start = u8::try_from(self.start).unwrap(); + . . . . let end = u8::try_from(self.end).unwrap(); + . . . . Some(Utf8Range::new(start, end)) + . . . . } else { + . . . . None + . . . . } + . . . . } + . . . . +-- line 423 ---------------------------------------- +-- line 428 ---------------------------------------- + . . . . } + . . . . + . . . . /// encode writes the UTF-8 encoding of the start and end of this range + . . . . /// to the corresponding destination slices, and returns the number of + . . . . /// bytes written. + . . . . /// + . . . . /// The slices should have room for at least `MAX_UTF8_BYTES`. + . . . . fn encode(&self, start: &mut [u8], end: &mut [u8]) -> usize { + 5,202 ( 0.00%) . . . let cs = char::from_u32(self.start).unwrap(); + . . . . let ce = char::from_u32(self.end).unwrap(); + . . . . let ss = cs.encode_utf8(start); + . . . . let se = ce.encode_utf8(end); + 3,468 ( 0.00%) . . . assert_eq!(ss.len(), se.len()); + . . . . ss.len() + . . . . } + . . . . } + . . . . + . . . . fn max_scalar_value(nbytes: usize) -> u32 { + . . . . match nbytes { + . . . . 1 => 0x007F, + . . . . 2 => 0x07FF, +-- line 448 ---------------------------------------- + +24,424 ( 0.01%) . . . + +-------------------------------------------------------------------------------- +-- Auto-annotated source: /home/.cargo/registry/src/index.crates.io-6f17d22bba15001f/aho-corasick-1.1.2/src/nfa/noncontiguous.rs +-------------------------------------------------------------------------------- +Ir Ge sysCount sysTime + +-- line 248 ---------------------------------------- + . . . . &self.special + . . . . } + . . . . + . . . . /// Swaps the states at `id1` and `id2`. + . . . . /// + . . . . /// This does not update the transitions of any state to account for the + . . . . /// state swap. + . . . . pub(crate) fn swap_states(&mut self, id1: StateID, id2: StateID) { + 1,446 ( 0.00%) . . . self.states.swap(id1.as_usize(), id2.as_usize()); + . . . . } + . . . . + . . . . /// Re-maps all state IDs in this NFA according to the `map` function + . . . . /// given. + . . . . pub(crate) fn remap(&mut self, map: impl Fn(StateID) -> StateID) { + . . . . let alphabet_len = self.byte_classes.alphabet_len(); + . . . . for state in self.states.iter_mut() { + 5,248 ( 0.00%) . . . state.fail = map(state.fail); + . . . . let mut link = state.sparse; + 42,682 ( 0.01%) . . . while link != StateID::ZERO { + . . . . let t = &mut self.sparse[link]; +116,412 ( 0.03%) . . . t.next = map(t.next); + . . . . link = t.link; + . . . . } + 2,624 ( 0.00%) . . . if state.dense != StateID::ZERO { + . . . . let start = state.dense.as_usize(); + . . . . for next in self.dense[start..][..alphabet_len].iter_mut() { +186,694 ( 0.05%) . . . *next = map(*next); + . . . . } + . . . . } + . . . . } + . . . . } + . . . . + . . . . /// Iterate over all of the transitions for the given state ID. + 7,360 ( 0.00%) . . . pub(crate) fn iter_trans( + . . . . &self, + . . . . sid: StateID, + . . . . ) -> impl Iterator + '_ { + 6,286 ( 0.00%) . . . let mut link = self.states[sid].sparse; + . . . . core::iter::from_fn(move || { + 42,786 ( 0.01%) . . . if link == StateID::ZERO { + . . . . return None; + . . . . } +139,664 ( 0.04%) . . . let t = self.sparse[link]; + . . . . link = t.link; +178,218 ( 0.05%) . . . Some(t) + . . . . }) + 7,360 ( 0.00%) . . . } + . . . . + . . . . /// Iterate over all of the matches for the given state ID. + . . . . pub(crate) fn iter_matches( + . . . . &self, + . . . . sid: StateID, + . . . . ) -> impl Iterator + '_ { + 5,064 ( 0.00%) . . . let mut link = self.states[sid].matches; + . . . . core::iter::from_fn(move || { + 5,505 ( 0.00%) . . . if link == StateID::ZERO { + . . . . return None; + . . . . } + 3,670 ( 0.00%) . . . let m = self.matches[link]; + . . . . link = m.link; + . . . . Some(m.pid) + . . . . }) + . . . . } + . . . . + . . . . /// Return the link following the one given. If the one given is the last + . . . . /// link for the given state, then return `None`. + . . . . /// +-- line 314 ---------------------------------------- +-- line 320 ---------------------------------------- + . . . . /// the NFA during iteration. Namely, one can access the transition pointed + . . . . /// to by the link via `self.sparse[link]`. + . . . . fn next_link( + . . . . &self, + . . . . sid: StateID, + . . . . prev: Option, + . . . . ) -> Option { + . . . . let link = +107,950 ( 0.03%) . . . prev.map_or(self.states[sid].sparse, |p| self.sparse[p].link); + . . . . if link == StateID::ZERO { + . . . . None + . . . . } else { + . . . . Some(link) + . . . . } + . . . . } + . . . . + . . . . /// Follow the transition for the given byte in the given state. If no such +-- line 336 ---------------------------------------- +-- line 346 ---------------------------------------- + . . . . // since we only do this for a small number of states (by default), the + . . . . // memory usage is usually minimal. + . . . . // + . . . . // This has *massive* benefit when executing searches because the + . . . . // unanchored starting state is by far the hottest state and is + . . . . // frequently visited. Moreover, the 'for' loop below that works + . . . . // decently on an actually sparse state is disastrous on a state that + . . . . // is nearly or completely dense. + 8,886 ( 0.00%) . . . if s.dense == StateID::ZERO { + . . . . self.follow_transition_sparse(sid, byte) + . . . . } else { + . . . . let class = usize::from(self.byte_classes.get(byte)); + 1,454 ( 0.00%) . . . self.dense[s.dense.as_usize() + class] + . . . . } + . . . . } + . . . . + . . . . /// Like `follow_transition`, but always uses the sparse representation. + . . . . #[inline(always)] + . . . . fn follow_transition_sparse(&self, sid: StateID, byte: u8) -> StateID { + 11,040 ( 0.00%) . . . for t in self.iter_trans(sid) { + 40,480 ( 0.01%) . . . => /home/.cargo/registry/src/index.crates.io-6f17d22bba15001f/aho-corasick-1.1.2/src/nfa/noncontiguous.rs:aho_corasick::nfa::noncontiguous::NFA::iter_trans (3,680x) +210,436 ( 0.06%) . . . if byte <= t.byte { + 4,108 ( 0.00%) . . . if byte == t.byte { + . . . . return t.next; + . . . . } + . . . . break; + . . . . } + . . . . } + . . . . NFA::FAIL + . . . . } + . . . . + . . . . /// Set the transition for the given byte to the state ID given. + . . . . /// + . . . . /// Note that one should not set transitions to the FAIL state. It is not + . . . . /// technically incorrect, but it wastes space. If a transition is not + . . . . /// defined, then it is automatically assumed to lead to the FAIL state. + 24,320 ( 0.01%) . . . fn add_transition( + . . . . &mut self, + . . . . prev: StateID, + . . . . byte: u8, + . . . . next: StateID, + . . . . ) -> Result<(), BuildError> { + 7,296 ( 0.00%) . . . if self.states[prev].dense != StateID::ZERO { + . . . . let dense = self.states[prev].dense; + . . . . let class = usize::from(self.byte_classes.get(byte)); + . . . . self.dense[dense.as_usize() + class] = next; + . . . . } + . . . . + 4,864 ( 0.00%) . . . let head = self.states[prev].sparse; + 5,076 ( 0.00%) . . . if head == StateID::ZERO || byte < self.sparse[head].byte { + . . . . let new_link = self.alloc_transition()?; + 4,140 ( 0.00%) . . . self.sparse[new_link] = Transition { byte, next, link: head }; + 1,380 ( 0.00%) . . . self.states[prev].sparse = new_link; + . . . . return Ok(()); + 1,052 ( 0.00%) . . . } else if byte == self.sparse[head].byte { + . . . . self.sparse[head].next = next; + . . . . return Ok(()); + . . . . } + . . . . + . . . . // We handled the only cases where the beginning of the transition + . . . . // chain needs to change. At this point, we now know that there is + . . . . // at least one entry in the transition chain and the byte for that + . . . . // transition is less than the byte for the transition we're adding. + . . . . let (mut link_prev, mut link_next) = (head, self.sparse[head].link); +166,004 ( 0.05%) . . . while link_next != StateID::ZERO && byte > self.sparse[link_next].byte + . . . . { + . . . . link_prev = link_next; + . . . . link_next = self.sparse[link_next].link; + . . . . } + 536 ( 0.00%) . . . if link_next == StateID::ZERO || byte < self.sparse[link_next].byte { + . . . . let link = self.alloc_transition()?; + 1,680 ( 0.00%) . . . self.sparse[link] = Transition { byte, next, link: link_next }; + 1,680 ( 0.00%) . . . self.sparse[link_prev].link = link; + . . . . } else { + 492 ( 0.00%) . . . assert_eq!(byte, self.sparse[link_next].byte); + . . . . self.sparse[link_next].next = next; + . . . . } + . . . . Ok(()) + 21,888 ( 0.01%) . . . } + . . . . + . . . . /// This sets every possible transition (all 255 of them) for the given + . . . . /// state to the name `next` value. + . . . . /// + . . . . /// This is useful for efficiently initializing start/dead states. + . . . . /// + . . . . /// # Panics + . . . . /// + . . . . /// This requires that the state has no transitions added to it already. + . . . . /// If it has any transitions, then this panics. It will also panic if + . . . . /// the state has been densified prior to calling this. + 1,152 ( 0.00%) . . . fn init_full_state( + . . . . &mut self, + . . . . prev: StateID, + . . . . next: StateID, + . . . . ) -> Result<(), BuildError> { + 144 ( 0.00%) . . . assert_eq!( + . . . . StateID::ZERO, + . . . . self.states[prev].dense, + . . . . "state must not be dense yet" + . . . . ); + 144 ( 0.00%) . . . assert_eq!( + . . . . StateID::ZERO, + . . . . self.states[prev].sparse, + . . . . "state must have zero transitions" + . . . . ); + . . . . let mut prev_link = StateID::ZERO; + . . . . for byte in 0..=255 { + . . . . let new_link = self.alloc_transition()?; +110,592 ( 0.03%) . . . self.sparse[new_link] = + . . . . Transition { byte, next, link: StateID::ZERO }; + 36,864 ( 0.01%) . . . if prev_link == StateID::ZERO { + 144 ( 0.00%) . . . self.states[prev].sparse = new_link; + . . . . } else { + 73,440 ( 0.02%) . . . self.sparse[prev_link].link = new_link; + . . . . } + . . . . prev_link = new_link; + . . . . } + 144 ( 0.00%) . . . Ok(()) + 1,152 ( 0.00%) . . . } + . . . . + . . . . /// Add a match for the given pattern ID to the state for the given ID. + 11,152 ( 0.00%) . . . fn add_match( + . . . . &mut self, + . . . . sid: StateID, + . . . . pid: PatternID, + . . . . ) -> Result<(), BuildError> { + 1,394 ( 0.00%) . . . let head = self.states[sid].matches; + . . . . let mut link = head; + 1,394 ( 0.00%) . . . while self.matches[link].link != StateID::ZERO { + . . . . link = self.matches[link].link; + . . . . } + . . . . let new_match_link = self.alloc_match()?; + 1,394 ( 0.00%) . . . self.matches[new_match_link].pid = pid; + 1,394 ( 0.00%) . . . if link == StateID::ZERO { + 2,788 ( 0.00%) . . . self.states[sid].matches = new_match_link; + . . . . } else { + . . . . self.matches[link].link = new_match_link; + . . . . } + . . . . Ok(()) + 12,546 ( 0.00%) . . . } + . . . . + . . . . /// Copy matches from the `src` state to the `dst` state. This is useful + . . . . /// when a match state can be reached via a failure transition. In which + . . . . /// case, you'll want to copy the matches (if any) from the state reached + . . . . /// by the failure transition to the original state you were at. + 5,768 ( 0.00%) . . . fn copy_matches( + . . . . &mut self, + . . . . src: StateID, + . . . . dst: StateID, + . . . . ) -> Result<(), BuildError> { + 2,163 ( 0.00%) . . . let head_dst = self.states[dst].matches; + . . . . let mut link_dst = head_dst; + 721 ( 0.00%) . . . while self.matches[link_dst].link != StateID::ZERO { + . . . . link_dst = self.matches[link_dst].link; + . . . . } + 721 ( 0.00%) . . . let mut link_src = self.states[src].matches; + 721 ( 0.00%) . . . while link_src != StateID::ZERO { + . . . . let new_match_link = + . . . . StateID::new(self.matches.len()).map_err(|e| { + . . . . BuildError::state_id_overflow( + . . . . StateID::MAX.as_u64(), + . . . . e.attempted(), + . . . . ) + . . . . })?; + . . . . self.matches.push(Match { +-- line 509 ---------------------------------------- +-- line 515 ---------------------------------------- + . . . . } else { + . . . . self.matches[link_dst].link = new_match_link; + . . . . } + . . . . + . . . . link_dst = new_match_link; + . . . . link_src = self.matches[link_src].link; + . . . . } + . . . . Ok(()) + 5,768 ( 0.00%) . . . } + . . . . + . . . . /// Create a new entry in `NFA::trans`, if there's room, and return that + . . . . /// entry's ID. If there's no room, then an error is returned. + . . . . fn alloc_transition(&mut self) -> Result { + 1,940 ( 0.00%) . . . let id = StateID::new(self.sparse.len()).map_err(|e| { + . . . . BuildError::state_id_overflow(StateID::MAX.as_u64(), e.attempted()) + . . . . })?; + . . . . self.sparse.push(Transition::default()); + . . . . Ok(id) + . . . . } + . . . . + . . . . /// Create a new entry in `NFA::matches`, if there's room, and return that + . . . . /// entry's ID. If there's no room, then an error is returned. +-- line 536 ---------------------------------------- +-- line 560 ---------------------------------------- + . . . . .take(self.byte_classes.alphabet_len()), + . . . . ); + . . . . Ok(id) + . . . . } + . . . . + . . . . /// Allocate and add a fresh state to the underlying NFA and return its + . . . . /// ID (guaranteed to be one more than the ID of the previously allocated + . . . . /// state). If the ID would overflow `StateID`, then this returns an error. + 18,368 ( 0.01%) . . . fn alloc_state(&mut self, depth: usize) -> Result { + . . . . // This is OK because we error when building the trie if we see a + . . . . // pattern whose length cannot fit into a 'SmallIndex', and the longest + . . . . // possible depth corresponds to the length of the longest pattern. + . . . . let depth = SmallIndex::new(depth) + . . . . .expect("patterns longer than SmallIndex::MAX are not allowed"); + . . . . let id = StateID::new(self.states.len()).map_err(|e| { + . . . . BuildError::state_id_overflow(StateID::MAX.as_u64(), e.attempted()) + . . . . })?; + . . . . self.states.push(State { + . . . . sparse: StateID::ZERO, + . . . . dense: StateID::ZERO, + . . . . matches: StateID::ZERO, + 2,624 ( 0.00%) . . . fail: self.special.start_unanchored_id, + . . . . depth, + . . . . }); + 5,248 ( 0.00%) . . . Ok(id) + 20,992 ( 0.01%) . . . } + . . . . } + . . . . + . . . . // SAFETY: 'start_state' always returns a valid state ID, 'next_state' always + . . . . // returns a valid state ID given a valid state ID. We otherwise claim that + . . . . // all other methods are correct as well. + . . . . unsafe impl Automaton for NFA { + . . . . #[inline(always)] + . . . . fn start_state(&self, anchored: Anchored) -> Result { +-- line 593 ---------------------------------------- +-- line 606 ---------------------------------------- + . . . . ) -> StateID { + . . . . // This terminates since: + . . . . // + . . . . // 1. state.fail never points to the FAIL state. + . . . . // 2. All state.fail values point to a state closer to the start state. + . . . . // 3. The start state has no transitions to the FAIL state. + . . . . loop { + . . . . let next = self.follow_transition(sid, byte); + 90 ( 0.00%) . . . if next != NFA::FAIL { + . . . . return next; + . . . . } + . . . . // For an anchored search, we never follow failure transitions + . . . . // because failure transitions lead us down a path to matching + . . . . // a *proper* suffix of the path we were on. Thus, it can only + . . . . // produce matches that appear after the beginning of the search. + . . . . if anchored.is_anchored() { + . . . . return NFA::DEAD; +-- line 622 ---------------------------------------- +-- line 647 ---------------------------------------- + . . . . #[inline(always)] + . . . . fn is_start(&self, sid: StateID) -> bool { + . . . . sid == self.special.start_unanchored_id + . . . . || sid == self.special.start_anchored_id + . . . . } + . . . . + . . . . #[inline(always)] + . . . . fn match_kind(&self) -> MatchKind { + 48 ( 0.00%) . . . self.match_kind + . . . . } + . . . . + . . . . #[inline(always)] + . . . . fn patterns_len(&self) -> usize { + . . . . self.pattern_lens.len() + . . . . } + . . . . + . . . . #[inline(always)] + . . . . fn pattern_len(&self, pid: PatternID) -> usize { + . . . . self.pattern_lens[pid].as_usize() + . . . . } + . . . . + . . . . #[inline(always)] + . . . . fn min_pattern_len(&self) -> usize { + 48 ( 0.00%) . . . self.min_pattern_len + . . . . } + . . . . + . . . . #[inline(always)] + . . . . fn max_pattern_len(&self) -> usize { + . . . . self.max_pattern_len + . . . . } + . . . . + . . . . #[inline(always)] +-- line 678 ---------------------------------------- +-- line 692 ---------------------------------------- + . . . . + self.matches.len() * core::mem::size_of::() + . . . . + self.dense.len() * StateID::SIZE + . . . . + self.pattern_lens.len() * SmallIndex::SIZE + . . . . + self.prefilter.as_ref().map_or(0, |p| p.memory_usage()) + . . . . } + . . . . + . . . . #[inline(always)] + . . . . fn prefilter(&self) -> Option<&Prefilter> { + 48 ( 0.00%) . . . self.prefilter.as_ref() + . . . . } + . . . . } + . . . . + . . . . /// A representation of a sparse NFA state for an Aho-Corasick automaton. + . . . . /// + . . . . /// It contains the transitions to the next state, a failure transition for + . . . . /// cases where there exists no other transition for the current input byte + . . . . /// and the matches implied by visiting this state (if any). +-- line 708 ---------------------------------------- +-- line 745 ---------------------------------------- + . . . . /// this is really the only convenient place to compute and store this + . . . . /// information, which we need when building the contiguous NFA. + . . . . depth: SmallIndex, + . . . . } + . . . . + . . . . impl State { + . . . . /// Return true if and only if this state is a match state. + . . . . pub(crate) fn is_match(&self) -> bool { + 4,420 ( 0.00%) . . . self.matches != StateID::ZERO + 3,680 ( 0.00%) . . . } + . . . . + . . . . /// Returns the failure transition for this state. + . . . . pub(crate) fn fail(&self) -> StateID { + 12,132 ( 0.00%) . . . self.fail + . . . . } + . . . . + . . . . /// Returns the depth of this state. That is, the number of transitions + . . . . /// this state is from the start state of the NFA. + . . . . pub(crate) fn depth(&self) -> SmallIndex { + . . . . self.depth + . . . . } + . . . . } +-- line 766 ---------------------------------------- +-- line 777 ---------------------------------------- + . . . . impl Transition { + . . . . /// Return the byte for which this transition is defined. + . . . . pub(crate) fn byte(&self) -> u8 { + . . . . self.byte + . . . . } + . . . . + . . . . /// Return the ID of the state that this transition points to. + . . . . pub(crate) fn next(&self) -> StateID { + 12,288 ( 0.00%) . . . self.next + . . . . } + . . . . + . . . . /// Return the ID of the next transition. + . . . . fn link(&self) -> StateID { + . . . . self.link + . . . . } + . . . . } + . . . . +-- line 793 ---------------------------------------- +-- line 843 ---------------------------------------- + . . . . match_kind: MatchKind, + . . . . prefilter: bool, + . . . . ascii_case_insensitive: bool, + . . . . dense_depth: usize, + . . . . } + . . . . + . . . . impl Default for Builder { + . . . . fn default() -> Builder { + 198 ( 0.00%) . . . Builder { + . . . . match_kind: MatchKind::default(), + . . . . prefilter: true, + . . . . ascii_case_insensitive: false, + . . . . dense_depth: 3, + . . . . } + . . . . } + . . . . } + . . . . +-- line 859 ---------------------------------------- +-- line 862 ---------------------------------------- + . . . . pub fn new() -> Builder { + . . . . Builder::default() + . . . . } + . . . . + . . . . /// Build an Aho-Corasick noncontiguous NFA from the given iterator of + . . . . /// patterns. + . . . . /// + . . . . /// A builder may be reused to create more NFAs. + 528 ( 0.00%) . . . pub fn build(&self, patterns: I) -> Result + . . . . where + . . . . I: IntoIterator, + . . . . P: AsRef<[u8]>, + . . . . { + . . . . debug!("building non-contiguous NFA"); + 336 ( 0.00%) . . . let nfa = Compiler::new(self)?.compile(patterns)?; + 36,067 ( 0.01%) 94 ( 0.01%) . . => /home/.cargo/registry/src/index.crates.io-6f17d22bba15001f/aho-corasick-1.1.2/src/nfa/noncontiguous.rs:aho_corasick::nfa::noncontiguous::Compiler::new (48x) + 5,424 ( 0.00%) . . . => ./string/../sysdeps/x86_64/multiarch/memmove-vec-unaligned-erms.S:__memcpy_avx_unaligned_erms (48x) + . . . . debug!( + . . . . "non-contiguous NFA built, ", + . . . . nfa.states.len(), + . . . . nfa.memory_usage() + . . . . ); + 288 ( 0.00%) . . . Ok(nfa) + 432 ( 0.00%) . . . } + . . . . + . . . . /// Set the desired match semantics. + . . . . /// + . . . . /// See + . . . . /// [`AhoCorasickBuilder::match_kind`](crate::AhoCorasickBuilder::match_kind) + . . . . /// for more documentation and examples. + . . . . pub fn match_kind(&mut self, kind: MatchKind) -> &mut Builder { + 66 ( 0.00%) . . . self.match_kind = kind; + . . . . self + . . . . } + . . . . + . . . . /// Enable ASCII-aware case insensitive matching. + . . . . /// + . . . . /// See + . . . . /// [`AhoCorasickBuilder::ascii_case_insensitive`](crate::AhoCorasickBuilder::ascii_case_insensitive) + . . . . /// for more documentation and examples. +-- line 899 ---------------------------------------- +-- line 914 ---------------------------------------- + . . . . } + . . . . + . . . . /// Enable heuristic prefilter optimizations. + . . . . /// + . . . . /// See + . . . . /// [`AhoCorasickBuilder::prefilter`](crate::AhoCorasickBuilder::prefilter) + . . . . /// for more documentation and examples. + . . . . pub fn prefilter(&mut self, yes: bool) -> &mut Builder { + 66 ( 0.00%) . . . self.prefilter = yes; + . . . . self + . . . . } + . . . . } + . . . . + . . . . /// A compiler uses a builder configuration and builds up the NFA formulation + . . . . /// of an Aho-Corasick automaton. This roughly corresponds to the standard + . . . . /// formulation described in textbooks, with some tweaks to support leftmost + . . . . /// searching. +-- line 930 ---------------------------------------- +-- line 932 ---------------------------------------- + . . . . struct Compiler<'a> { + . . . . builder: &'a Builder, + . . . . prefilter: prefilter::Builder, + . . . . nfa: NFA, + . . . . byteset: ByteClassSet, + . . . . } + . . . . + . . . . impl<'a> Compiler<'a> { + 432 ( 0.00%) . . . fn new(builder: &'a Builder) -> Result, BuildError> { + 96 ( 0.00%) . . . let prefilter = prefilter::Builder::new(builder.match_kind) + 48 ( 0.00%) . . . .ascii_case_insensitive(builder.ascii_case_insensitive); + 3,984 ( 0.00%) . . . Ok(Compiler { + 3,120 ( 0.00%) . . . => ./string/../sysdeps/x86_64/multiarch/memmove-vec-unaligned-erms.S:__memcpy_avx_unaligned_erms (48x) + . . . . builder, + . . . . prefilter, + . . . . nfa: NFA { + . . . . match_kind: builder.match_kind, + . . . . states: vec![], + . . . . sparse: vec![], + . . . . dense: vec![], + . . . . matches: vec![], +-- line 951 ---------------------------------------- +-- line 953 ---------------------------------------- + . . . . prefilter: None, + . . . . byte_classes: ByteClasses::singletons(), + . . . . min_pattern_len: usize::MAX, + . . . . max_pattern_len: 0, + . . . . special: Special::zero(), + . . . . }, + . . . . byteset: ByteClassSet::empty(), + . . . . }) + 432 ( 0.00%) . . . } + . . . . + . . . . fn compile(mut self, patterns: I) -> Result + . . . . where + . . . . I: IntoIterator, + . . . . P: AsRef<[u8]>, + . . . . { + . . . . // Add dummy transition/match links, so that no valid link will point + . . . . // to another link at index 0. + 48 ( 0.00%) . . . self.nfa.sparse.push(Transition::default()); + 48 ( 0.00%) . . . self.nfa.matches.push(Match::default()); + . . . . // Add a dummy dense transition so that no states can have dense==0 + . . . . // represent a valid pointer to dense transitions. This permits + . . . . // dense==0 to be a sentinel indicating "no dense transitions." + 48 ( 0.00%) . . . self.nfa.dense.push(NFA::DEAD); + . . . . // the dead state, only used for leftmost and fixed to id==0 + 144 ( 0.00%) . . . self.nfa.alloc_state(0)?; + 8,405 ( 0.00%) 8 ( 0.00%) . . => /home/.cargo/registry/src/index.crates.io-6f17d22bba15001f/aho-corasick-1.1.2/src/nfa/noncontiguous.rs:aho_corasick::nfa::noncontiguous::NFA::alloc_state (48x) + . . . . // the fail state, which is never entered and fixed to id==1 + 144 ( 0.00%) . . . self.nfa.alloc_state(0)?; + 1,728 ( 0.00%) . . . => /home/.cargo/registry/src/index.crates.io-6f17d22bba15001f/aho-corasick-1.1.2/src/nfa/noncontiguous.rs:aho_corasick::nfa::noncontiguous::NFA::alloc_state (48x) + . . . . // unanchored start state, initially fixed to id==2 but later shuffled + . . . . // to appear after all non-start match states. + 240 ( 0.00%) . . . self.nfa.special.start_unanchored_id = self.nfa.alloc_state(0)?; + 1,728 ( 0.00%) . . . => /home/.cargo/registry/src/index.crates.io-6f17d22bba15001f/aho-corasick-1.1.2/src/nfa/noncontiguous.rs:aho_corasick::nfa::noncontiguous::NFA::alloc_state (48x) + . . . . // anchored start state, initially fixed to id==3 but later shuffled + . . . . // to appear after unanchored start state. + 288 ( 0.00%) . . . self.nfa.special.start_anchored_id = self.nfa.alloc_state(0)?; + 1,728 ( 0.00%) . . . => /home/.cargo/registry/src/index.crates.io-6f17d22bba15001f/aho-corasick-1.1.2/src/nfa/noncontiguous.rs:aho_corasick::nfa::noncontiguous::NFA::alloc_state (48x) + . . . . // Initialize the unanchored starting state in order to make it dense, + . . . . // and thus make transition lookups on this state faster. + 48 ( 0.00%) . . . self.init_unanchored_start_state()?; +1,298,137 ( 0.38%) 1,228 ( 0.15%) . . => /home/.cargo/registry/src/index.crates.io-6f17d22bba15001f/aho-corasick-1.1.2/src/nfa/noncontiguous.rs:aho_corasick::nfa::noncontiguous::Compiler::init_unanchored_start_state (48x) + . . . . // Set all transitions on the DEAD state to point to itself. This way, + . . . . // the DEAD state can never be escaped. It MUST be used as a sentinel + . . . . // in any correct search. + 48 ( 0.00%) . . . self.add_dead_state_loop()?; +432,480 ( 0.12%) . . . => /home/.cargo/registry/src/index.crates.io-6f17d22bba15001f/aho-corasick-1.1.2/src/nfa/noncontiguous.rs:aho_corasick::nfa::noncontiguous::Compiler::add_dead_state_loop (48x) + . . . . // Build the base trie from the given patterns. + . . . . self.build_trie(patterns)?; + 240 ( 0.00%) . . . self.nfa.states.shrink_to_fit(); + 11,184 ( 0.00%) 66 ( 0.01%) . . => /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/alloc/src/vec/mod.rs:alloc::vec::Vec::shrink_to_fit (48x) + . . . . // Turn our set of bytes into equivalent classes. This NFA + . . . . // implementation uses byte classes only for states that use a dense + . . . . // representation of transitions. (And that's why this comes before + . . . . // `self.densify()`, as the byte classes need to be set first.) + 384 ( 0.00%) . . . self.nfa.byte_classes = self.byteset.byte_classes(); +224,254 ( 0.06%) . . . => /home/.cargo/registry/src/index.crates.io-6f17d22bba15001f/aho-corasick-1.1.2/src/util/alphabet.rs:aho_corasick::util::alphabet::ByteClassSet::byte_classes (48x) + 1,440 ( 0.00%) . . . => ./string/../sysdeps/x86_64/multiarch/memmove-vec-unaligned-erms.S:__memcpy_avx_unaligned_erms (48x) + . . . . // Add transitions (and maybe matches) to the anchored starting state. + . . . . // The anchored starting state is used for anchored searches. The only + . . . . // mechanical difference between it and the unanchored start state is + . . . . // that missing transitions map to the DEAD state instead of the FAIL + . . . . // state. + 96 ( 0.00%) . . . self.set_anchored_start_state()?; +385,392 ( 0.11%) . . . => /home/.cargo/registry/src/index.crates.io-6f17d22bba15001f/aho-corasick-1.1.2/src/nfa/noncontiguous.rs:aho_corasick::nfa::noncontiguous::Compiler::set_anchored_start_state (48x) + . . . . // Rewrite transitions to the FAIL state on the unanchored start state + . . . . // as self-transitions. This keeps the start state active at all times. + 144 ( 0.00%) . . . self.add_unanchored_start_state_loop(); +158,544 ( 0.05%) . . . => /home/.cargo/registry/src/index.crates.io-6f17d22bba15001f/aho-corasick-1.1.2/src/nfa/noncontiguous.rs:aho_corasick::nfa::noncontiguous::Compiler::add_unanchored_start_state_loop (48x) + . . . . // Make some (possibly zero) states use a dense representation for + . . . . // transitions. It's important to do this right after the states + . . . . // and non-failure transitions are solidified. That way, subsequent + . . . . // accesses (particularly `fill_failure_transitions`) will benefit from + . . . . // the faster transition lookup in densified states. + 96 ( 0.00%) . . . self.densify()?; +941,551 ( 0.27%) 818 ( 0.10%) . . => /home/.cargo/registry/src/index.crates.io-6f17d22bba15001f/aho-corasick-1.1.2/src/nfa/noncontiguous.rs:aho_corasick::nfa::noncontiguous::Compiler::densify (48x) + . . . . // The meat of the Aho-Corasick algorithm: compute and write failure + . . . . // transitions. i.e., the state to move to when a transition isn't + . . . . // defined in the current state. These are epsilon transitions and thus + . . . . // make this formulation an NFA. + 48 ( 0.00%) . . . self.fill_failure_transitions()?; +564,049 ( 0.16%) 385 ( 0.05%) . . => /home/.cargo/registry/src/index.crates.io-6f17d22bba15001f/aho-corasick-1.1.2/src/nfa/noncontiguous.rs:aho_corasick::nfa::noncontiguous::Compiler::fill_failure_transitions (48x) + . . . . // Handle a special case under leftmost semantics when at least one + . . . . // of the patterns is the empty string. + 96 ( 0.00%) . . . self.close_start_state_loop_for_leftmost(); + 816 ( 0.00%) . . . => /home/.cargo/registry/src/index.crates.io-6f17d22bba15001f/aho-corasick-1.1.2/src/nfa/noncontiguous.rs:aho_corasick::nfa::noncontiguous::Compiler::close_start_state_loop_for_leftmost (48x) + . . . . // Shuffle states so that we have DEAD, FAIL, MATCH, ..., START, START, + . . . . // NON-MATCH, ... This permits us to very quickly query the type of + . . . . // the state we're currently in during a search. + 96 ( 0.00%) . . . self.shuffle(); +1,854,743 ( 0.54%) 2 ( 0.00%) . . => /home/.cargo/registry/src/index.crates.io-6f17d22bba15001f/aho-corasick-1.1.2/src/nfa/noncontiguous.rs:aho_corasick::nfa::noncontiguous::Compiler::shuffle (48x) + 432 ( 0.00%) . . . self.nfa.prefilter = self.prefilter.build(); +350,208 ( 0.10%) . . . => /home/.cargo/registry/src/index.crates.io-6f17d22bba15001f/aho-corasick-1.1.2/src/util/prefilter.rs:aho_corasick::util::prefilter::Builder::build (48x) + . . . . // Store the maximum ID of all *relevant* special states. Start states + . . . . // are only relevant when we have a prefilter, otherwise, there is zero + . . . . // reason to care about whether a state is a start state or not during + . . . . // a search. Indeed, without a prefilter, we are careful to explicitly + . . . . // NOT care about start states, otherwise the search can ping pong + . . . . // between the unrolled loop and the handling of special-status states + . . . . // and destroy perf. + 48 ( 0.00%) . . . self.nfa.special.max_special_id = if self.nfa.prefilter.is_some() { + . . . . // Why the anchored starting state? Because we always put it + . . . . // after the unanchored starting state and it is therefore the + . . . . // maximum. Why put unanchored followed by anchored? No particular + . . . . // reason, but that's how the states are logically organized in the + . . . . // Thompson NFA implementation found in regex-automata. ¯\_(ツ)_/¯ + . . . . self.nfa.special.start_anchored_id + . . . . } else { + . . . . self.nfa.special.max_match_id + . . . . }; + 96 ( 0.00%) . . . self.nfa.sparse.shrink_to_fit(); + 16,713 ( 0.00%) 144 ( 0.02%) . . => /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/alloc/src/vec/mod.rs:alloc::vec::Vec::shrink_to_fit (48x) + 96 ( 0.00%) . . . self.nfa.dense.shrink_to_fit(); + 17,644 ( 0.01%) 208 ( 0.03%) . . => /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/alloc/src/vec/mod.rs:alloc::vec::Vec::shrink_to_fit (48x) + 96 ( 0.00%) . . . self.nfa.matches.shrink_to_fit(); + 13,590 ( 0.00%) 96 ( 0.01%) . . => /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/alloc/src/vec/mod.rs:alloc::vec::Vec::shrink_to_fit (48x) + 96 ( 0.00%) . . . self.nfa.pattern_lens.shrink_to_fit(); + 10,114 ( 0.00%) 85 ( 0.01%) . . => /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/alloc/src/vec/mod.rs:alloc::vec::Vec::shrink_to_fit (48x) + 624 ( 0.00%) . . . Ok(self.nfa) + 3,120 ( 0.00%) . . . => ./string/../sysdeps/x86_64/multiarch/memmove-vec-unaligned-erms.S:__memcpy_avx_unaligned_erms (48x) + 96 ( 0.00%) . . . } + 9,213 ( 0.00%) 94 ( 0.01%) . . => /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/core/src/ptr/mod.rs:core::ptr::drop_in_place (48x) + . . . . + . . . . /// This sets up the initial prefix trie that makes up the Aho-Corasick + . . . . /// automaton. Effectively, it creates the basic structure of the + . . . . /// automaton, where every pattern given has a path from the start state to + . . . . /// the end of the pattern. + . . . . fn build_trie(&mut self, patterns: I) -> Result<(), BuildError> + . . . . where + . . . . I: IntoIterator, + . . . . P: AsRef<[u8]>, + . . . . { + 1,394 ( 0.00%) . . . 'PATTERNS: for (i, pat) in patterns.into_iter().enumerate() { + . . . . let pid = PatternID::new(i).map_err(|e| { + . . . . BuildError::pattern_id_overflow( + . . . . PatternID::MAX.as_u64(), + . . . . e.attempted(), + . . . . ) + . . . . })?; + . . . . let pat = pat.as_ref(); + . . . . let patlen = SmallIndex::new(pat.len()) + . . . . .map_err(|_| BuildError::pattern_too_long(pid, pat.len()))?; + 1,394 ( 0.00%) . . . self.nfa.min_pattern_len = + 1,394 ( 0.00%) . . . core::cmp::min(self.nfa.min_pattern_len, pat.len()); + 1,394 ( 0.00%) . . . self.nfa.max_pattern_len = + 1,394 ( 0.00%) . . . core::cmp::max(self.nfa.max_pattern_len, pat.len()); + 4,182 ( 0.00%) . . . assert_eq!( + . . . . i, + . . . . self.nfa.pattern_lens.len(), + . . . . "expected number of patterns to match pattern ID" + . . . . ); + . . . . self.nfa.pattern_lens.push(patlen); + . . . . // We add the pattern to the prefilter here because the pattern + . . . . // ID in the prefilter is determined with respect to the patterns + . . . . // added to the prefilter. That is, it isn't the ID we have here, +-- line 1084 ---------------------------------------- +-- line 1086 ---------------------------------------- + . . . . // To ensure they line up, we add every pattern we see to the + . . . . // prefilter, even if some patterns ultimately are impossible to + . . . . // match (in leftmost-first semantics specifically). + . . . . // + . . . . // Another way of doing this would be to expose an API in the + . . . . // prefilter to permit setting your own pattern IDs. Or to just use + . . . . // our own map and go between them. But this case is sufficiently + . . . . // rare that we don't bother and just make sure they're in sync. + 4,182 ( 0.00%) . . . if self.builder.prefilter { + . . . . self.prefilter.add(pat); + . . . . } + . . . . + 1,394 ( 0.00%) . . . let mut prev = self.nfa.special.start_unanchored_id; + . . . . let mut saw_match = false; + 3,680 ( 0.00%) . . . for (depth, &b) in pat.iter().enumerate() { + . . . . // When leftmost-first match semantics are requested, we + . . . . // specifically stop adding patterns when a previously added + . . . . // pattern is a prefix of it. We avoid adding it because + . . . . // leftmost-first semantics imply that the pattern can never + . . . . // match. This is not just an optimization to save space! It + . . . . // is necessary for correctness. In fact, this is the only + . . . . // difference in the automaton between the implementations for + . . . . // leftmost-first and leftmost-longest. + 14,720 ( 0.00%) . . . saw_match = saw_match || self.nfa.states[prev].is_match(); + 11,040 ( 0.00%) . . . => /home/.cargo/registry/src/index.crates.io-6f17d22bba15001f/aho-corasick-1.1.2/src/util/primitives.rs:aho_corasick::nfa::noncontiguous::State::is_match (3,680x) + 7,360 ( 0.00%) . . . if self.builder.match_kind.is_leftmost_first() && saw_match { + . . . . // Skip to the next pattern immediately. This avoids + . . . . // incorrectly adding a match after this loop terminates. + . . . . continue 'PATTERNS; + . . . . } + . . . . + . . . . // Add this byte to our equivalence classes. These don't + . . . . // get used while building the trie, but other Aho-Corasick + . . . . // implementations may use them. + 14,720 ( 0.00%) . . . self.byteset.set_range(b, b); +125,120 ( 0.04%) . . . => /home/.cargo/registry/src/index.crates.io-6f17d22bba15001f/aho-corasick-1.1.2/src/util/alphabet.rs:aho_corasick::util::alphabet::ByteClassSet::set_range (3,680x) + 11,040 ( 0.00%) . . . if self.builder.ascii_case_insensitive { + . . . . let b = opposite_ascii_case(b); + . . . . self.byteset.set_range(b, b); + . . . . } + . . . . + . . . . // If the transition from prev using the current byte already + . . . . // exists, then just move through it. Otherwise, add a new + . . . . // state. We track the depth here so that we can determine + . . . . // how to represent transitions. States near the start state + . . . . // use a dense representation that uses more memory but is + . . . . // faster. Other states use a sparse representation that uses + . . . . // less memory but is slower. + . . . . let next = self.nfa.follow_transition(prev, b); + 1,740 ( 0.00%) . . . if next != NFA::FAIL { + . . . . prev = next; + . . . . } else { + 14,592 ( 0.00%) . . . let next = self.nfa.alloc_state(depth)?; +205,060 ( 0.06%) 616 ( 0.08%) . . => /home/.cargo/registry/src/index.crates.io-6f17d22bba15001f/aho-corasick-1.1.2/src/nfa/noncontiguous.rs:aho_corasick::nfa::noncontiguous::NFA::alloc_state (2,432x) + 14,592 ( 0.00%) . . . self.nfa.add_transition(prev, b, next)?; +739,090 ( 0.21%) . . . => /home/.cargo/registry/src/index.crates.io-6f17d22bba15001f/aho-corasick-1.1.2/src/nfa/noncontiguous.rs:aho_corasick::nfa::noncontiguous::NFA::add_transition (2,432x) + 7,296 ( 0.00%) . . . if self.builder.ascii_case_insensitive { + . . . . let b = opposite_ascii_case(b); + . . . . self.nfa.add_transition(prev, b, next)?; + . . . . } + . . . . prev = next; + . . . . } + . . . . } + . . . . // Once the pattern has been added, log the match in the final + . . . . // state that it reached. + 5,576 ( 0.00%) . . . self.nfa.add_match(prev, pid)?; +166,504 ( 0.05%) 302 ( 0.04%) . . => /home/.cargo/registry/src/index.crates.io-6f17d22bba15001f/aho-corasick-1.1.2/src/nfa/noncontiguous.rs:aho_corasick::nfa::noncontiguous::NFA::add_match (1,394x) + . . . . } + . . . . Ok(()) + . . . . } + . . . . + . . . . /// This routine creates failure transitions according to the standard + . . . . /// textbook formulation of the Aho-Corasick algorithm, with a couple small + . . . . /// tweaks to support "leftmost" semantics. + . . . . /// +-- line 1155 ---------------------------------------- +-- line 1267 ---------------------------------------- + . . . . /// N.B. I came up with this algorithm on my own, and after scouring all of + . . . . /// the other AC implementations I know of (Perl, Snort, many on GitHub). + . . . . /// I couldn't find any that implement leftmost semantics like this. + . . . . /// Perl of course needs leftmost-first semantics, but they implement it + . . . . /// with a seeming hack at *search* time instead of encoding it into the + . . . . /// automaton. There are also a couple Java libraries that support leftmost + . . . . /// longest semantics, but they do it by building a queue of matches at + . . . . /// search time, which is even worse than what Perl is doing. ---AG + 432 ( 0.00%) . . . fn fill_failure_transitions(&mut self) -> Result<(), BuildError> { + 48 ( 0.00%) . . . let is_leftmost = self.builder.match_kind.is_leftmost(); + 48 ( 0.00%) . . . let start_uid = self.nfa.special.start_unanchored_id; + . . . . // Initialize the queue for breadth first search with all transitions + . . . . // out of the start state. We handle the start state specially because + . . . . // we only want to follow non-self transitions. If we followed self + . . . . // transitions, then this would never terminate. + . . . . let mut queue = VecDeque::new(); + . . . . let mut seen = self.queued_set(); + . . . . let mut prev_link = None; + 12,336 ( 0.00%) . . . while let Some(link) = self.nfa.next_link(start_uid, prev_link) { + . . . . prev_link = Some(link); + 24,576 ( 0.01%) . . . let t = self.nfa.sparse[link]; + . . . . + . . . . // Skip anything we've seen before and any self-transitions on the + . . . . // start state. + 12,288 ( 0.00%) . . . if start_uid == t.next() || seen.contains(t.next) { + . . . . continue; + . . . . } + . . . . queue.push_back(t.next); + . . . . seen.insert(t.next); + . . . . // Under leftmost semantics, if a state immediately following + . . . . // the start state is a match state, then we never want to + . . . . // follow its failure transition since the failure transition + . . . . // necessarily leads back to the start state, which we never + . . . . // want to do for leftmost matching after a match has been + . . . . // found. + . . . . // + . . . . // We apply the same logic to non-start states below as well. + 540 ( 0.00%) . . . if is_leftmost && self.nfa.states[t.next].is_match() { + 254 ( 0.00%) . . . self.nfa.states[t.next].fail = NFA::DEAD; + . . . . } + . . . . } + . . . . while let Some(id) = queue.pop_front() { + . . . . let mut prev_link = None; + 1,940 ( 0.00%) . . . while let Some(link) = self.nfa.next_link(id, prev_link) { + . . . . prev_link = Some(link); + 3,880 ( 0.00%) . . . let t = self.nfa.sparse[link]; + . . . . + . . . . if seen.contains(t.next) { + . . . . // The only way to visit a duplicate state in a transition + . . . . // list is when ASCII case insensitivity is enabled. In + . . . . // this case, we want to skip it since it's redundant work. + . . . . // But it would also end up duplicating matches, which + . . . . // results in reporting duplicate matches in some cases. + . . . . // See the 'acasei010' regression test. +-- line 1320 ---------------------------------------- +-- line 1339 ---------------------------------------- + . . . . // otherwise require passing through a match state. + . . . . // + . . . . // Note that for correctness, the failure transition has to be + . . . . // set to the dead state for ALL states following a match, not + . . . . // just the match state itself. However, by setting the failure + . . . . // transition to the dead state on all match states, the dead + . . . . // state will automatically propagate to all subsequent states + . . . . // via the failure state computation below. + 3,880 ( 0.00%) . . . if is_leftmost && self.nfa.states[t.next].is_match() { + 2,534 ( 0.00%) . . . self.nfa.states[t.next].fail = NFA::DEAD; + . . . . continue; + . . . . } + . . . . let mut fail = self.nfa.states[id].fail; + . . . . while self.nfa.follow_transition(fail, t.byte) == NFA::FAIL { + . . . . fail = self.nfa.states[fail].fail; + . . . . } + . . . . fail = self.nfa.follow_transition(fail, t.byte); + 1,346 ( 0.00%) . . . self.nfa.states[t.next].fail = fail; + 2,692 ( 0.00%) . . . self.nfa.copy_matches(fail, t.next)?; + 29,612 ( 0.01%) . . . => /home/.cargo/registry/src/index.crates.io-6f17d22bba15001f/aho-corasick-1.1.2/src/nfa/noncontiguous.rs:aho_corasick::nfa::noncontiguous::NFA::copy_matches (673x) + . . . . } + . . . . // If the start state is a match state, then this automaton can + . . . . // match the empty string. This implies all states are match states + . . . . // since every position matches the empty string, so copy the + . . . . // matches from the start state to every state. Strictly speaking, + . . . . // this is only necessary for overlapping matches since each + . . . . // non-empty non-start match state needs to report empty matches + . . . . // in addition to its own. For the non-overlapping case, such + . . . . // states only report the first match, which is never empty since + . . . . // it isn't a start state. + 2,432 ( 0.00%) . . . if !is_leftmost { + . . . . self.nfa + . . . . .copy_matches(self.nfa.special.start_unanchored_id, id)?; + . . . . } + . . . . } + 48 ( 0.00%) . . . Ok(()) + 864 ( 0.00%) . . . } + 7,398 ( 0.00%) 78 ( 0.01%) . . => ???:__rust_dealloc (48x) + . . . . + . . . . /// Shuffle the states so that they appear in this sequence: + . . . . /// + . . . . /// DEAD, FAIL, MATCH..., START, START, NON-MATCH... + . . . . /// + . . . . /// The idea here is that if we know how special states are laid out in our + . . . . /// transition table, then we can determine what "kind" of state we're in + . . . . /// just by comparing our current state ID with a particular value. In this +-- line 1382 ---------------------------------------- +-- line 1391 ---------------------------------------- + . . . . /// + . . . . /// DEAD, FAIL, START, START, MATCH... NON-MATCH... + . . . . /// + . . . . /// Then it's just a simple matter of swapping the two START states with + . . . . /// the last two MATCH states. + . . . . /// + . . . . /// (This is the same technique used for fully compiled DFAs in + . . . . /// regex-automata.) + 336 ( 0.00%) . . . fn shuffle(&mut self) { + 48 ( 0.00%) . . . let old_start_uid = self.nfa.special.start_unanchored_id; + 48 ( 0.00%) . . . let old_start_aid = self.nfa.special.start_anchored_id; + 48 ( 0.00%) . . . assert!(old_start_uid < old_start_aid); + 96 ( 0.00%) . . . assert_eq!( + . . . . 3, + . . . . old_start_aid.as_usize(), + . . . . "anchored start state should be at index 3" + . . . . ); + . . . . // We implement shuffling by a sequence of pairwise swaps of states. + . . . . // Since we have a number of things referencing states via their + . . . . // IDs and swapping them changes their IDs, we need to record every + . . . . // swap we make so that we can remap IDs. The remapper handles this +-- line 1411 ---------------------------------------- +-- line 1416 ---------------------------------------- + . . . . // START-UNANCHORED, START-ANCHORED, MATCH, ..., NON-MATCH, ... + . . . . // + . . . . // To do that, we proceed forward through all states after + . . . . // START-ANCHORED and swap match states so that they appear before all + . . . . // non-match states. + . . . . let mut next_avail = StateID::from(4u8); + . . . . for i in next_avail.as_usize()..self.nfa.states.len() { + . . . . let sid = StateID::new(i).unwrap(); + 4,864 ( 0.00%) . . . if !self.nfa.states[sid].is_match() { + . . . . continue; + . . . . } + 6,970 ( 0.00%) . . . remapper.swap(&mut self.nfa, sid, next_avail); + 56,920 ( 0.02%) . . . => /home/.cargo/registry/src/index.crates.io-6f17d22bba15001f/aho-corasick-1.1.2/src/util/remapper.rs:aho_corasick::util::remapper::Remapper::swap (1,394x) + . . . . // The key invariant here is that only non-match states exist + . . . . // between 'next_avail' and 'sid' (with them being potentially + . . . . // equivalent). Thus, incrementing 'next_avail' by 1 is guaranteed + . . . . // to land on the leftmost non-match state. (Unless 'next_avail' + . . . . // and 'sid' are equivalent, in which case, a swap will occur but + . . . . // it is a no-op.) + . . . . next_avail = StateID::new(next_avail.one_more()).unwrap(); + . . . . } +-- line 1435 ---------------------------------------- +-- line 1455 ---------------------------------------- + . . . . // or not. And indeed, if we did check for it, this very hot loop would + . . . . // ping pong between the special state handling and the main state + . . . . // transition logic. This in turn stalls the CPU by killing branch + . . . . // prediction. + . . . . // + . . . . // So essentially, we really want to be able to "forget" that start + . . . . // states even exist and this is why we put them at the end. + . . . . let new_start_aid = + 48 ( 0.00%) . . . StateID::new(next_avail.as_usize().checked_sub(1).unwrap()) + . . . . .unwrap(); + 144 ( 0.00%) . . . remapper.swap(&mut self.nfa, old_start_aid, new_start_aid); + 2,016 ( 0.00%) . . . => /home/.cargo/registry/src/index.crates.io-6f17d22bba15001f/aho-corasick-1.1.2/src/util/remapper.rs:aho_corasick::util::remapper::Remapper::swap (48x) + . . . . let new_start_uid = + . . . . StateID::new(next_avail.as_usize().checked_sub(2).unwrap()) + . . . . .unwrap(); + 144 ( 0.00%) . . . remapper.swap(&mut self.nfa, old_start_uid, new_start_uid); + 2,016 ( 0.00%) . . . => /home/.cargo/registry/src/index.crates.io-6f17d22bba15001f/aho-corasick-1.1.2/src/util/remapper.rs:aho_corasick::util::remapper::Remapper::swap (48x) + . . . . let new_max_match_id = + . . . . StateID::new(next_avail.as_usize().checked_sub(3).unwrap()) + . . . . .unwrap(); + 48 ( 0.00%) . . . self.nfa.special.max_match_id = new_max_match_id; + 48 ( 0.00%) . . . self.nfa.special.start_unanchored_id = new_start_uid; + 48 ( 0.00%) . . . self.nfa.special.start_anchored_id = new_start_aid; + . . . . // If one start state is a match state, then they both are. + 48 ( 0.00%) . . . if self.nfa.states[self.nfa.special.start_anchored_id].is_match() { + . . . . self.nfa.special.max_match_id = self.nfa.special.start_anchored_id; + . . . . } + 336 ( 0.00%) . . . remapper.remap(&mut self.nfa); +1,737,105 ( 0.50%) 2 ( 0.00%) . . => /home/.cargo/registry/src/index.crates.io-6f17d22bba15001f/aho-corasick-1.1.2/src/util/remapper.rs:aho_corasick::util::remapper::Remapper::remap (48x) + 384 ( 0.00%) . . . } + . . . . + . . . . /// Attempts to convert the transition representation of a subset of states + . . . . /// in this NFA from sparse to dense. This can greatly improve search + . . . . /// performance since states with a higher number of transitions tend to + . . . . /// correlate with very active states. + . . . . /// + . . . . /// We generally only densify states that are close to the start state. + . . . . /// These tend to be the most active states and thus benefit from a dense +-- line 1489 ---------------------------------------- +-- line 1492 ---------------------------------------- + . . . . /// This tends to best balance between memory usage and performance. In + . . . . /// particular, the *vast majority* of all states in a typical Aho-Corasick + . . . . /// automaton have only 1 transition and are usually farther from the start + . . . . /// state and thus don't get densified. + . . . . /// + . . . . /// Note that this doesn't remove the sparse representation of transitions + . . . . /// for states that are densified. It could be done, but actually removing + . . . . /// entries from `NFA::sparse` is likely more expensive than it's worth. + 336 ( 0.00%) . . . fn densify(&mut self) -> Result<(), BuildError> { + . . . . for i in 0..self.nfa.states.len() { + . . . . let sid = StateID::new(i).unwrap(); + . . . . // Don't bother densifying states that are only used as sentinels. + 5,248 ( 0.00%) . . . if sid == NFA::DEAD || sid == NFA::FAIL { + . . . . continue; + . . . . } + . . . . // Only densify states that are "close enough" to the start state. + 5,056 ( 0.00%) . . . if self.nfa.states[sid].depth.as_usize() + . . . . >= self.builder.dense_depth + . . . . { + . . . . continue; + . . . . } + . . . . let dense = self.nfa.alloc_dense_state()?; + . . . . let mut prev_link = None; + 86,763 ( 0.03%) . . . while let Some(link) = self.nfa.next_link(sid, prev_link) { + . . . . prev_link = Some(link); + 53,014 ( 0.02%) . . . let t = self.nfa.sparse[link]; + . . . . + . . . . let class = usize::from(self.nfa.byte_classes.get(t.byte)); + 26,507 ( 0.01%) . . . let index = dense.as_usize() + class; + 26,507 ( 0.01%) . . . self.nfa.dense[index] = t.next; + . . . . } + 2,414 ( 0.00%) . . . self.nfa.states[sid].dense = dense; + . . . . } + . . . . Ok(()) + 432 ( 0.00%) . . . } + . . . . + . . . . /// Returns a set that tracked queued states. + . . . . /// + . . . . /// This is only necessary when ASCII case insensitivity is enabled, since + . . . . /// it is the only way to visit the same state twice. Otherwise, this + . . . . /// returns an inert set that nevers adds anything and always reports + . . . . /// `false` for every member test. + . . . . fn queued_set(&self) -> QueuedSet { + 96 ( 0.00%) . . . if self.builder.ascii_case_insensitive { + . . . . QueuedSet::active() + . . . . } else { + . . . . QueuedSet::inert() + . . . . } + . . . . } + . . . . + . . . . /// Initializes the unanchored start state by making it dense. This is + . . . . /// achieved by explicitly setting every transition to the FAIL state. + . . . . /// This isn't necessary for correctness, since any missing transition is + . . . . /// automatically assumed to be mapped to the FAIL state. We do this to + . . . . /// make the unanchored starting state dense, and thus in turn make + . . . . /// transition lookups on it faster. (Which is worth doing because it's + . . . . /// the most active state.) + 240 ( 0.00%) . . . fn init_unanchored_start_state(&mut self) -> Result<(), BuildError> { + 96 ( 0.00%) . . . let start_uid = self.nfa.special.start_unanchored_id; + 48 ( 0.00%) . . . let start_aid = self.nfa.special.start_anchored_id; + 144 ( 0.00%) . . . self.nfa.init_full_state(start_uid, NFA::FAIL)?; +826,614 ( 0.24%) 1,134 ( 0.14%) . . => /home/.cargo/registry/src/index.crates.io-6f17d22bba15001f/aho-corasick-1.1.2/src/nfa/noncontiguous.rs:aho_corasick::nfa::noncontiguous::NFA::init_full_state (48x) + 192 ( 0.00%) . . . self.nfa.init_full_state(start_aid, NFA::FAIL)?; +469,987 ( 0.14%) 94 ( 0.01%) . . => /home/.cargo/registry/src/index.crates.io-6f17d22bba15001f/aho-corasick-1.1.2/src/nfa/noncontiguous.rs:aho_corasick::nfa::noncontiguous::NFA::init_full_state (48x) + . . . . Ok(()) + 288 ( 0.00%) . . . } + . . . . + . . . . /// Setup the anchored start state by copying all of the transitions and + . . . . /// matches from the unanchored starting state with one change: the failure + . . . . /// transition is changed to the DEAD state, so that for any undefined + . . . . /// transitions, the search will stop. + 240 ( 0.00%) . . . fn set_anchored_start_state(&mut self) -> Result<(), BuildError> { + 48 ( 0.00%) . . . let start_uid = self.nfa.special.start_unanchored_id; + . . . . let start_aid = self.nfa.special.start_anchored_id; + . . . . let (mut uprev_link, mut aprev_link) = (None, None); + . . . . loop { + 12,384 ( 0.00%) . . . let unext = self.nfa.next_link(start_uid, uprev_link); + . . . . let anext = self.nfa.next_link(start_aid, aprev_link); + 24,720 ( 0.01%) . . . let (ulink, alink) = match (unext, anext) { + . . . . (Some(ulink), Some(alink)) => (ulink, alink), + . . . . (None, None) => break, + . . . . _ => unreachable!(), + . . . . }; + . . . . uprev_link = Some(ulink); + . . . . aprev_link = Some(alink); + 49,152 ( 0.01%) . . . self.nfa.sparse[alink].next = self.nfa.sparse[ulink].next; + . . . . } + 96 ( 0.00%) . . . self.nfa.copy_matches(start_uid, start_aid)?; + 2,112 ( 0.00%) . . . => /home/.cargo/registry/src/index.crates.io-6f17d22bba15001f/aho-corasick-1.1.2/src/nfa/noncontiguous.rs:aho_corasick::nfa::noncontiguous::NFA::copy_matches (48x) + . . . . // This is the main difference between the unanchored and anchored + . . . . // starting states. If a lookup on an anchored starting state fails, + . . . . // then the search should stop. + . . . . // + . . . . // N.B. This assumes that the loop on the unanchored starting state + . . . . // hasn't been created yet. + 96 ( 0.00%) . . . self.nfa.states[start_aid].fail = NFA::DEAD; + . . . . Ok(()) + 336 ( 0.00%) . . . } + . . . . + . . . . /// Set the failure transitions on the start state to loop back to the + . . . . /// start state. This effectively permits the Aho-Corasick automaton to + . . . . /// match at any position. This is also required for finding the next + . . . . /// state to terminate, namely, finding the next state should never return + . . . . /// a fail_id. + . . . . /// + . . . . /// This must be done after building the initial trie, since trie + . . . . /// construction depends on transitions to `fail_id` to determine whether a + . . . . /// state already exists or not. + 96 ( 0.00%) . . . fn add_unanchored_start_state_loop(&mut self) { + 48 ( 0.00%) . . . let start_uid = self.nfa.special.start_unanchored_id; + . . . . let mut prev_link = None; + 37,008 ( 0.01%) . . . while let Some(link) = self.nfa.next_link(start_uid, prev_link) { + . . . . prev_link = Some(link); + 12,288 ( 0.00%) . . . if self.nfa.sparse[link].next() == NFA::FAIL { + 23,592 ( 0.01%) . . . self.nfa.sparse[link].next = start_uid; + . . . . } + . . . . } + 96 ( 0.00%) . . . } + . . . . + . . . . /// Remove the start state loop by rewriting any transitions on the start + . . . . /// state back to the start state with transitions to the dead state. + . . . . /// + . . . . /// The loop is only closed when two conditions are met: the start state + . . . . /// is a match state and the match kind is leftmost-first or + . . . . /// leftmost-longest. + . . . . /// + . . . . /// The reason for this is that under leftmost semantics, a start state + . . . . /// that is also a match implies that we should never restart the search + . . . . /// process. We allow normal transitions out of the start state, but if + . . . . /// none exist, we transition to the dead state, which signals that + . . . . /// searching should stop. + 96 ( 0.00%) . . . fn close_start_state_loop_for_leftmost(&mut self) { + 48 ( 0.00%) . . . let start_uid = self.nfa.special.start_unanchored_id; + . . . . let start = &mut self.nfa.states[start_uid]; + . . . . let dense = start.dense; + 144 ( 0.00%) . . . if self.builder.match_kind.is_leftmost() && start.is_match() { + . . . . let mut prev_link = None; + . . . . while let Some(link) = self.nfa.next_link(start_uid, prev_link) { + . . . . prev_link = Some(link); + . . . . if self.nfa.sparse[link].next() == start_uid { + . . . . self.nfa.sparse[link].next = NFA::DEAD; + . . . . if dense != StateID::ZERO { + . . . . let b = self.nfa.sparse[link].byte; + . . . . let class = usize::from(self.nfa.byte_classes.get(b)); + . . . . self.nfa.dense[dense.as_usize() + class] = NFA::DEAD; + . . . . } + . . . . } + . . . . } + . . . . } + 96 ( 0.00%) . . . } + . . . . + . . . . /// Sets all transitions on the dead state to point back to the dead state. + . . . . /// Normally, missing transitions map back to the failure state, but the + . . . . /// point of the dead state is to act as a sink that can never be escaped. + 144 ( 0.00%) . . . fn add_dead_state_loop(&mut self) -> Result<(), BuildError> { + 192 ( 0.00%) . . . self.nfa.init_full_state(NFA::DEAD, NFA::DEAD)?; +431,712 ( 0.12%) . . . => /home/.cargo/registry/src/index.crates.io-6f17d22bba15001f/aho-corasick-1.1.2/src/nfa/noncontiguous.rs:aho_corasick::nfa::noncontiguous::NFA::init_full_state (48x) + . . . . Ok(()) + 192 ( 0.00%) . . . } + . . . . } + . . . . + . . . . /// A set of state identifiers used to avoid revisiting the same state multiple + . . . . /// times when filling in failure transitions. + . . . . /// + . . . . /// This set has an "inert" and an "active" mode. When inert, the set never + . . . . /// stores anything and always returns `false` for every member test. This is + . . . . /// useful to avoid the performance and memory overhead of maintaining this +-- line 1654 ---------------------------------------- +-- line 1668 ---------------------------------------- + . . . . /// Return an active set that tracks state ID membership. + . . . . fn active() -> QueuedSet { + . . . . QueuedSet { set: Some(BTreeSet::new()) } + . . . . } + . . . . + . . . . /// Inserts the given state ID into this set. (If the set is inert, then + . . . . /// this is a no-op.) + . . . . fn insert(&mut self, state_id: StateID) { + 4,864 ( 0.00%) . . . if let Some(ref mut set) = self.set { + . . . . set.insert(state_id); + . . . . } + . . . . } + . . . . + . . . . /// Returns true if and only if the given state ID is in this set. If the + . . . . /// set is inert, this always returns false. + . . . . fn contains(&self, state_id: StateID) -> bool { + 4,864 ( 0.00%) . . . match self.set { + . . . . None => false, + . . . . Some(ref set) => set.contains(&state_id), + . . . . } + . . . . } + . . . . } + . . . . + . . . . impl core::fmt::Debug for NFA { + . . . . fn fmt(&self, f: &mut core::fmt::Formatter<'_>) -> core::fmt::Result { +-- line 1692 ---------------------------------------- + +557,991 ( 0.16%) . . . + +-------------------------------------------------------------------------------- +-- Auto-annotated source: /home/.cargo/registry/src/index.crates.io-6f17d22bba15001f/regex-automata-0.4.6/src/nfa/thompson/range_trie.rs +-------------------------------------------------------------------------------- +Ir Ge sysCount sysTime + +-- line 215 ---------------------------------------- + . . . . range: Utf8Range, + . . . . /// The next state to transition to. + . . . . next_id: StateID, + . . . . } + . . . . + . . . . impl RangeTrie { + . . . . /// Create a new empty range trie. + . . . . pub fn new() -> RangeTrie { +10,784 ( 0.00%) . . . let mut trie = RangeTrie { + . . . . states: vec![], + . . . . free: vec![], + . . . . iter_stack: RefCell::new(vec![]), + . . . . iter_ranges: RefCell::new(vec![]), + . . . . dupe_stack: vec![], + . . . . insert_stack: vec![], + . . . . }; + . . . . trie.clear(); + . . . . trie + . . . . } + . . . . + . . . . /// Clear this range trie such that it is empty. Clearing a range trie + . . . . /// and reusing it can beneficial because this may reuse allocations. + . . . . pub fn clear(&mut self) { + . . . . self.free.extend(self.states.drain(..)); + 1,348 ( 0.00%) . . . self.add_empty(); // final +96,263 ( 0.03%) 4 ( 0.00%) . . => /home/.cargo/registry/src/index.crates.io-6f17d22bba15001f/regex-automata-0.4.6/src/nfa/thompson/range_trie.rs:regex_automata::nfa::thompson::range_trie::RangeTrie::add_empty (674x) + 1,348 ( 0.00%) . . . self.add_empty(); // root +16,850 ( 0.00%) . . . => /home/.cargo/registry/src/index.crates.io-6f17d22bba15001f/regex-automata-0.4.6/src/nfa/thompson/range_trie.rs:regex_automata::nfa::thompson::range_trie::RangeTrie::add_empty (674x) + . . . . } + . . . . + . . . . /// Iterate over all of the sequences of byte ranges in this trie, and + . . . . /// call the provided function for each sequence. Iteration occurs in + . . . . /// lexicographic order. + . . . . pub fn iter Result<(), E>>( + . . . . &self, + . . . . mut f: F, +-- line 248 ---------------------------------------- +-- line 420 ---------------------------------------- + . . . . // no subsequent transitions with any overlap. Therefore, we + . . . . // can stop processing this range and move on to the next one. + . . . . break; + . . . . } + . . . . } + . . . . self.insert_stack = stack; + . . . . } + . . . . + 4,044 ( 0.00%) . . . pub fn add_empty(&mut self) -> StateID { + . . . . let id = match StateID::try_from(self.states.len()) { + . . . . Ok(id) => id, + . . . . Err(_) => { + . . . . // This generally should not happen since a range trie is + . . . . // only ever used to compile a single sequence of Unicode + . . . . // scalar values. If we ever got to this point, we would, at + . . . . // *minimum*, be using 96GB in just the range trie alone. + . . . . panic!("too many sequences added to range trie"); +-- line 436 ---------------------------------------- +-- line 440 ---------------------------------------- + . . . . // more allocations. + . . . . if let Some(mut state) = self.free.pop() { + . . . . state.clear(); + . . . . self.states.push(state); + . . . . } else { + . . . . self.states.push(State { transitions: vec![] }); + . . . . } + . . . . id + 6,740 ( 0.00%) . . . } + . . . . + . . . . /// Performs a deep clone of the given state and returns the duplicate's + . . . . /// state ID. + . . . . /// + . . . . /// A "deep clone" in this context means that the state given along with + . . . . /// recursively all states that it points to are copied. Once complete, + . . . . /// the given state ID and the returned state ID share nothing. + . . . . /// +-- line 456 ---------------------------------------- + + 2,696 ( 0.00%) . . . + +-------------------------------------------------------------------------------- +-- Auto-annotated source: /home/.cargo/registry/src/index.crates.io-6f17d22bba15001f/aho-corasick-1.1.2/src/packed/api.rs +-------------------------------------------------------------------------------- +Ir Ge sysCount sysTime + +-- line 18 ---------------------------------------- + . . . . /// and instead only supports leftmost-first or leftmost-longest. Namely, + . . . . /// "standard" semantics cannot be easily supported by packed searchers. + . . . . /// + . . . . /// For more information on the distinction between leftmost-first and + . . . . /// leftmost-longest, see the docs on the top-level `MatchKind` type. + . . . . /// + . . . . /// Unlike the top-level `MatchKind` type, the default match semantics for this + . . . . /// type are leftmost-first. + 192 ( 0.00%) . . . #[derive(Clone, Copy, Debug, Eq, PartialEq)] + . . . . #[non_exhaustive] + . . . . pub enum MatchKind { + . . . . /// Use leftmost-first match semantics, which reports leftmost matches. + . . . . /// When there are multiple possible leftmost matches, the match + . . . . /// corresponding to the pattern that appeared earlier when constructing + . . . . /// the automaton is reported. + . . . . /// + . . . . /// This is the default. +-- line 34 ---------------------------------------- +-- line 78 ---------------------------------------- + . . . . /// # if cfg!(all(feature = "std", any( + . . . . /// # target_arch = "x86_64", target_arch = "aarch64", + . . . . /// # ))) { + . . . . /// # example().unwrap() + . . . . /// # } else { + . . . . /// # assert!(example().is_none()); + . . . . /// # } + . . . . /// ``` + 96 ( 0.00%) . . . #[derive(Clone, Debug)] + . . . . pub struct Config { + . . . . kind: MatchKind, + . . . . force: Option, + . . . . only_teddy_fat: Option, + . . . . only_teddy_256bit: Option, + . . . . heuristic_pattern_limits: bool, + . . . . } + . . . . +-- line 94 ---------------------------------------- +-- line 107 ---------------------------------------- + . . . . fn default() -> Config { + . . . . Config::new() + . . . . } + . . . . } + . . . . + . . . . impl Config { + . . . . /// Create a new default configuration. A default configuration uses + . . . . /// leftmost-first match semantics. + 48 ( 0.00%) . . . pub fn new() -> Config { + . . . . Config { + . . . . kind: MatchKind::LeftmostFirst, + . . . . force: None, + . . . . only_teddy_fat: None, + . . . . only_teddy_256bit: None, + . . . . heuristic_pattern_limits: true, + . . . . } + 48 ( 0.00%) . . . } + . . . . + . . . . /// Create a packed builder from this configuration. The builder can be + . . . . /// used to accumulate patterns and create a [`Searcher`] from them. + 48 ( 0.00%) . . . pub fn builder(&self) -> Builder { + . . . . Builder::from_config(self.clone()) + 48 ( 0.00%) . . . } + . . . . + . . . . /// Set the match semantics for this configuration. + 48 ( 0.00%) . . . pub fn match_kind(&mut self, kind: MatchKind) -> &mut Config { + 48 ( 0.00%) . . . self.kind = kind; + . . . . self + 48 ( 0.00%) . . . } + . . . . + . . . . /// An undocumented method for forcing the use of the Teddy algorithm. + . . . . /// + . . . . /// This is only exposed for more precise testing and benchmarks. Callers + . . . . /// should not use it as it is not part of the API stability guarantees of + . . . . /// this crate. + . . . . #[doc(hidden)] + . . . . pub fn only_teddy(&mut self, yes: bool) -> &mut Config { +-- line 143 ---------------------------------------- +-- line 241 ---------------------------------------- + . . . . impl Builder { + . . . . /// Create a new builder for constructing a multi-pattern searcher. This + . . . . /// constructor uses the default configuration. + . . . . pub fn new() -> Builder { + . . . . Builder::from_config(Config::new()) + . . . . } + . . . . + . . . . fn from_config(config: Config) -> Builder { + 192 ( 0.00%) . . . Builder { config, inert: false, patterns: Patterns::new() } + . . . . } + . . . . + . . . . /// Build a searcher from the patterns added to this builder so far. + 768 ( 0.00%) . . . pub fn build(&self) -> Option { + 384 ( 0.00%) . . . if self.inert || self.patterns.is_empty() { + 96 ( 0.00%) . . . return None; + . . . . } + . . . . let mut patterns = self.patterns.clone(); + 96 ( 0.00%) . . . patterns.set_match_kind(self.config.kind); + 528 ( 0.00%) . . . let patterns = Arc::new(patterns); + 48 ( 0.00%) . . . let rabinkarp = RabinKarp::new(&patterns); +472,398 ( 0.14%) 1,066 ( 0.13%) . . => /home/.cargo/registry/src/index.crates.io-6f17d22bba15001f/aho-corasick-1.1.2/src/packed/rabinkarp.rs:aho_corasick::packed::rabinkarp::RabinKarp::new (48x) + . . . . // Effectively, we only want to return a searcher if we can use Teddy, + . . . . // since Teddy is our only fast packed searcher at the moment. + . . . . // Rabin-Karp is only used when searching haystacks smaller than what + . . . . // Teddy can support. Thus, the only way to get a Rabin-Karp searcher + . . . . // is to force it using undocumented APIs (for tests/benchmarks). + 174 ( 0.00%) . . . let (search_kind, minimum_len) = match self.config.force { + . . . . None | Some(ForceAlgorithm::Teddy) => { + . . . . debug!("trying to build Teddy packed matcher"); + 192 ( 0.00%) . . . let teddy = match self.build_teddy(Arc::clone(&patterns)) { + 9 ( 0.00%) . . . None => return None, + 156 ( 0.00%) . . . Some(teddy) => teddy, + . . . . }; + . . . . let minimum_len = teddy.minimum_len(); + . . . . (SearchKind::Teddy(teddy), minimum_len) + . . . . } + . . . . Some(ForceAlgorithm::RabinKarp) => { + . . . . debug!("using Rabin-Karp packed matcher"); + . . . . (SearchKind::RabinKarp, 0) + . . . . } + . . . . }; + 429 ( 0.00%) . . . Some(Searcher { patterns, rabinkarp, search_kind, minimum_len }) + 864 ( 0.00%) . . . } + . . . . + . . . . fn build_teddy(&self, patterns: Arc) -> Option { + 48 ( 0.00%) . . . teddy::Builder::new() +1,028,919 ( 0.30%) 3,495 ( 0.43%) . . => /home/.cargo/registry/src/index.crates.io-6f17d22bba15001f/aho-corasick-1.1.2/src/packed/teddy/builder.rs:aho_corasick::packed::teddy::builder::Builder::build (48x) + 48 ( 0.00%) . . . .only_256bit(self.config.only_teddy_256bit) + 48 ( 0.00%) . . . .only_fat(self.config.only_teddy_fat) + 48 ( 0.00%) . . . .heuristic_pattern_limits(self.config.heuristic_pattern_limits) + . . . . .build(patterns) + . . . . } + . . . . + . . . . /// Add the given pattern to this set to match. + . . . . /// + . . . . /// The order in which patterns are added is significant. Namely, when + . . . . /// using leftmost-first match semantics, then when multiple patterns can + . . . . /// match at a particular location, the pattern that was added first is + . . . . /// used as the match. + . . . . /// + . . . . /// If the number of patterns added exceeds the amount supported by packed + . . . . /// searchers, then the builder will stop accumulating patterns and render + . . . . /// itself inert. At this point, constructing a searcher will always return + . . . . /// `None`. + . . . . pub fn add>(&mut self, pattern: P) -> &mut Builder { +5,912 ( 0.00%) . . . if self.inert { + . . . . return self; +5,576 ( 0.00%) . . . } else if self.patterns.len() >= PATTERN_LIMIT { +2,788 ( 0.00%) . . . => /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/alloc/src/vec/mod.rs:aho_corasick::packed::pattern::Patterns::len (1,394x) + . . . . self.inert = true; + . . . . self.patterns.reset(); + . . . . return self; + . . . . } + . . . . // Just in case PATTERN_LIMIT increases beyond u16::MAX. +5,576 ( 0.00%) . . . assert!(self.patterns.len() <= core::u16::MAX as usize); +2,788 ( 0.00%) . . . => /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/alloc/src/vec/mod.rs:aho_corasick::packed::pattern::Patterns::len (1,394x) + . . . . + . . . . let pattern = pattern.as_ref(); +2,788 ( 0.00%) . . . if pattern.is_empty() { + . . . . self.inert = true; + . . . . self.patterns.reset(); + . . . . return self; + . . . . } +5,576 ( 0.00%) . . . self.patterns.add(pattern); +620,064 ( 0.18%) 3,085 ( 0.38%) . . => /home/.cargo/registry/src/index.crates.io-6f17d22bba15001f/aho-corasick-1.1.2/src/packed/pattern.rs:aho_corasick::packed::pattern::Patterns::add (1,394x) + . . . . self + . . . . } + . . . . + . . . . /// Add the given iterator of patterns to this set to match. + . . . . /// + . . . . /// The iterator must yield elements that can be converted into a `&[u8]`. + . . . . /// + . . . . /// The order in which patterns are added is significant. Namely, when +-- line 328 ---------------------------------------- +-- line 329 ---------------------------------------- + . . . . /// using leftmost-first match semantics, then when multiple patterns can + . . . . /// match at a particular location, the pattern that was added first is + . . . . /// used as the match. + . . . . /// + . . . . /// If the number of patterns added exceeds the amount supported by packed + . . . . /// searchers, then the builder will stop accumulating patterns and render + . . . . /// itself inert. At this point, constructing a searcher will always return + . . . . /// `None`. + 384 ( 0.00%) . . . pub fn extend(&mut self, patterns: I) -> &mut Builder + . . . . where + . . . . I: IntoIterator, + . . . . P: AsRef<[u8]>, + . . . . { + . . . . for p in patterns { + . . . . self.add(p); + . . . . } + . . . . self + 432 ( 0.00%) . . . } + . . . . + . . . . /// Returns the number of patterns added to this builder. + . . . . pub fn len(&self) -> usize { + . . . . self.patterns.len() + . . . . } + . . . . + . . . . /// Returns the length, in bytes, of the shortest pattern added. + . . . . pub fn minimum_len(&self) -> usize { +-- line 354 ---------------------------------------- +-- line 527 ---------------------------------------- + . . . . /// ``` + . . . . #[inline] + . . . . pub fn find_in>( + . . . . &self, + . . . . haystack: B, + . . . . span: Span, + . . . . ) -> Option { + . . . . let haystack = haystack.as_ref(); + 39 ( 0.00%) . . . match self.search_kind { + . . . . SearchKind::Teddy(ref teddy) => { + 26 ( 0.00%) . . . if haystack[span].len() < teddy.minimum_len() { + 2 ( 0.00%) . . . return self.find_in_slow(haystack, span); + 198 ( 0.00%) . . . => /home/.cargo/registry/src/index.crates.io-6f17d22bba15001f/aho-corasick-1.1.2/src/packed/api.rs:aho_corasick::packed::api::Searcher::find_in_slow (1x) + . . . . } + . . . . teddy.find(&haystack[..span.end], span.start) + . . . . } + . . . . SearchKind::RabinKarp => { + . . . . self.rabinkarp.find_at(&haystack[..span.end], span.start) + . . . . } + . . . . } + . . . . } +-- line 546 ---------------------------------------- +-- line 638 ---------------------------------------- + . . . . } + . . . . + . . . . /// Use a slow (non-packed) searcher. + . . . . /// + . . . . /// This is useful when a packed searcher could be constructed, but could + . . . . /// not be used to search a specific haystack. For example, if Teddy was + . . . . /// built but the haystack is smaller than ~34 bytes, then Teddy might not + . . . . /// be able to run. + 1 ( 0.00%) . . . fn find_in_slow(&self, haystack: &[u8], span: Span) -> Option { + 3 ( 0.00%) . . . self.rabinkarp.find_at(&haystack[..span.end], span.start) + 188 ( 0.00%) . . . => /home/.cargo/registry/src/index.crates.io-6f17d22bba15001f/aho-corasick-1.1.2/src/packed/rabinkarp.rs:aho_corasick::packed::rabinkarp::RabinKarp::find_at (1x) + 3 ( 0.00%) . . . } + . . . . } + . . . . + . . . . impl SearchKind { + . . . . fn memory_usage(&self) -> usize { + . . . . match *self { + . . . . SearchKind::Teddy(ref ted) => ted.memory_usage(), + . . . . SearchKind::RabinKarp => 0, + . . . . } +-- line 656 ---------------------------------------- + +1,635 ( 0.00%) . . . + +-------------------------------------------------------------------------------- +-- Auto-annotated source: /home/.cargo/registry/src/index.crates.io-6f17d22bba15001f/aho-corasick-1.1.2/src/dfa.rs +-------------------------------------------------------------------------------- +Ir Ge sysCount sysTime + +-- line 141 ---------------------------------------- + . . . . P: AsRef<[u8]>, + . . . . { + . . . . DFA::builder().build(patterns) + . . . . } + . . . . + . . . . /// A convenience method for returning a new Aho-Corasick DFA builder. + . . . . /// + . . . . /// This usually permits one to just import the `DFA` type. + 39 ( 0.00%) . . . pub fn builder() -> Builder { + . . . . Builder::new() + 39 ( 0.00%) . . . } + . . . . } + . . . . + . . . . impl DFA { + . . . . /// A sentinel state ID indicating that a search should stop once it has + . . . . /// entered this state. When a search stops, it returns a match if one has + . . . . /// been found, otherwise no match. A DFA always has an actual dead state + . . . . /// at this ID. + . . . . /// +-- line 159 ---------------------------------------- +-- line 163 ---------------------------------------- + . . . . /// failure transitions everywhere, such that failure transitions are no + . . . . /// longer used at search time. This, combined with its uniformly dense + . . . . /// representation, are the two most important factors in why it's faster + . . . . /// than the NFAs in this crate. + . . . . const DEAD: StateID = StateID::new_unchecked(0); + . . . . + . . . . /// Adds the given pattern IDs as matches to the given state and also + . . . . /// records the added memory usage. + 16,515 ( 0.00%) . . . fn set_matches( + . . . . &mut self, + . . . . sid: StateID, + . . . . pids: impl Iterator, + . . . . ) { + 3,670 ( 0.00%) . . . let index = (sid.as_usize() >> self.stride2).checked_sub(2).unwrap(); + . . . . let mut at_least_one = false; + . . . . for pid in pids { + . . . . self.matches[index].push(pid); + 1,835 ( 0.00%) . . . self.matches_memory_usage += PatternID::SIZE; + . . . . at_least_one = true; + . . . . } + . . . . assert!(at_least_one, "match state must have non-empty pids"); + 14,680 ( 0.00%) . . . } + . . . . } + . . . . + . . . . // SAFETY: 'start_state' always returns a valid state ID, 'next_state' always + . . . . // returns a valid state ID given a valid state ID. We otherwise claim that + . . . . // all other methods are correct as well. + . . . . unsafe impl Automaton for DFA { + . . . . #[inline(always)] + . . . . fn start_state(&self, anchored: Anchored) -> Result { +-- line 192 ---------------------------------------- +-- line 389 ---------------------------------------- + . . . . pub struct Builder { + . . . . noncontiguous: noncontiguous::Builder, + . . . . start_kind: StartKind, + . . . . byte_classes: bool, + . . . . } + . . . . + . . . . impl Default for Builder { + . . . . fn default() -> Builder { + 48 ( 0.00%) . . . Builder { + . . . . noncontiguous: noncontiguous::Builder::new(), + . . . . start_kind: StartKind::Unanchored, + . . . . byte_classes: true, + . . . . } + . . . . } + . . . . } + . . . . + . . . . impl Builder { +-- line 405 ---------------------------------------- +-- line 411 ---------------------------------------- + . . . . /// Build an Aho-Corasick DFA from the given iterator of patterns. + . . . . /// + . . . . /// A builder may be reused to create more DFAs. + . . . . pub fn build(&self, patterns: I) -> Result + . . . . where + . . . . I: IntoIterator, + . . . . P: AsRef<[u8]>, + . . . . { + 234 ( 0.00%) . . . let nnfa = self.noncontiguous.build(patterns)?; +7,551,757 ( 2.18%) 3,493 ( 0.43%) . . => /home/.cargo/registry/src/index.crates.io-6f17d22bba15001f/aho-corasick-1.1.2/src/nfa/noncontiguous.rs:aho_corasick::nfa::noncontiguous::Builder::build (39x) + 117 ( 0.00%) . . . self.build_from_noncontiguous(&nnfa) +9,372,525 ( 2.71%) 1,120 ( 0.14%) 1 ( 0.32%) . => /home/.cargo/registry/src/index.crates.io-6f17d22bba15001f/aho-corasick-1.1.2/src/dfa.rs:aho_corasick::dfa::Builder::build_from_noncontiguous (39x) + 78 ( 0.00%) . . . } + 31,216 ( 0.01%) 287 ( 0.04%) . . => /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/core/src/ptr/mod.rs:core::ptr::drop_in_place (39x) + . . . . + . . . . /// Build an Aho-Corasick DFA from the given noncontiguous NFA. + . . . . /// + . . . . /// Note that when this method is used, only the `start_kind` and + . . . . /// `byte_classes` settings on this builder are respected. The other + . . . . /// settings only apply to the initial construction of the Aho-Corasick + . . . . /// automaton. Since using this method requires that initial construction + . . . . /// has already completed, all settings impacting only initial construction + . . . . /// are no longer relevant. + 432 ( 0.00%) . . . pub fn build_from_noncontiguous( + . . . . &self, + . . . . nnfa: &noncontiguous::NFA, + . . . . ) -> Result { + . . . . debug!("building DFA"); + 96 ( 0.00%) . . . let byte_classes = if self.byte_classes { + . . . . nnfa.byte_classes().clone() + . . . . } else { + . . . . ByteClasses::singletons() + . . . . }; + 288 ( 0.00%) . . . let state_len = match self.start_kind { + . . . . StartKind::Unanchored | StartKind::Anchored => nnfa.states().len(), + . . . . StartKind::Both => { + . . . . // These unwraps are OK because we know that the number of + . . . . // NFA states is < StateID::LIMIT which is in turn less than + . . . . // i32::MAX. Thus, there is always room to multiply by 2. + . . . . // Finally, the number of states is always at least 4 in the + . . . . // NFA (DEAD, FAIL, START-UNANCHORED, START-ANCHORED), so the + . . . . // subtraction of 4 is okay. +-- line 449 ---------------------------------------- +-- line 471 ---------------------------------------- + . . . . }; + . . . . StateID::new(trans_len.checked_sub(byte_classes.stride()).unwrap()) + . . . . .map_err(|e| { + . . . . BuildError::state_id_overflow( + . . . . StateID::MAX.as_u64(), + . . . . e.attempted(), + . . . . ) + . . . . })?; + 48 ( 0.00%) . . . let num_match_states = match self.start_kind { + . . . . StartKind::Unanchored | StartKind::Anchored => { + . . . . nnfa.special().max_match_id.as_usize().checked_sub(1).unwrap() + . . . . } + . . . . StartKind::Both => nnfa + . . . . .special() + . . . . .max_match_id + . . . . .as_usize() + . . . . .checked_sub(1) + . . . . .unwrap() + . . . . .checked_mul(2) + . . . . .unwrap(), + . . . . }; + 1,056 ( 0.00%) . . . let mut dfa = DFA { + . . . . trans: vec![DFA::DEAD; trans_len], + 96 ( 0.00%) . . . matches: vec![vec![]; num_match_states], + 51,361 ( 0.01%) 38 ( 0.00%) . . => /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/alloc/src/vec/mod.rs:alloc::vec::from_elem (48x) + . . . . matches_memory_usage: 0, + . . . . pattern_lens: nnfa.pattern_lens_raw().to_vec(), + . . . . prefilter: nnfa.prefilter().map(|p| p.clone()), + . . . . match_kind: nnfa.match_kind(), + . . . . state_len, + . . . . alphabet_len: byte_classes.alphabet_len(), + . . . . stride2: byte_classes.stride2(), + 1,440 ( 0.00%) . . . byte_classes, + . . . . min_pattern_len: nnfa.min_pattern_len(), + . . . . max_pattern_len: nnfa.max_pattern_len(), + . . . . // The special state IDs are set later. + . . . . special: Special::zero(), + . . . . }; + 174 ( 0.00%) . . . match self.start_kind { + . . . . StartKind::Both => { + . . . . self.finish_build_both_starts(nnfa, &mut dfa); + . . . . } + . . . . StartKind::Unanchored => { + . . . . self.finish_build_one_start(Anchored::No, nnfa, &mut dfa); + . . . . } + . . . . StartKind::Anchored => { + 39 ( 0.00%) . . . self.finish_build_one_start(Anchored::Yes, nnfa, &mut dfa) + . . . . } + . . . . } + . . . . debug!( + . . . . "DFA built, ", + . . . . dfa.state_len, + . . . . dfa.memory_usage(), + . . . . dfa.byte_classes.alphabet_len(), +-- line 524 ---------------------------------------- +-- line 531 ---------------------------------------- + . . . . dfa.pattern_lens.shrink_to_fit(); + . . . . dfa.matches.shrink_to_fit(); + . . . . // TODO: We might also want to shrink each Vec inside of `dfa.matches`, + . . . . // or even better, convert it to one contiguous allocation. But I think + . . . . // I went with nested allocs for good reason (can't remember), so this + . . . . // may be tricky to do. I decided not to shrink them here because it + . . . . // might require a fair bit of work to do. It's unclear whether it's + . . . . // worth it. + 144 ( 0.00%) . . . Ok(dfa) + 3,696 ( 0.00%) . . . => ./string/../sysdeps/x86_64/multiarch/memmove-vec-unaligned-erms.S:__memcpy_avx_unaligned_erms (48x) + 432 ( 0.00%) . . . } + . . . . + . . . . /// Finishes building a DFA for either unanchored or anchored searches, + . . . . /// but NOT both. + 390 ( 0.00%) . . . fn finish_build_one_start( + . . . . &self, + . . . . anchored: Anchored, + . . . . nnfa: &noncontiguous::NFA, + . . . . dfa: &mut DFA, + . . . . ) { + . . . . // This function always succeeds because we check above that all of the + . . . . // states in the NFA can be mapped to DFA state IDs. + 117 ( 0.00%) . . . let stride2 = dfa.stride2; + 39 ( 0.00%) . . . let old2new = |oldsid: StateID| { +193,854 ( 0.06%) . . . StateID::new_unchecked(oldsid.as_usize() << stride2) + . . . . }; + . . . . for (oldsid, state) in nnfa.states().iter().with_state_ids() { + 4,258 ( 0.00%) . . . let newsid = old2new(oldsid); + 2,129 ( 0.00%) . . . if state.is_match() { + 3,812 ( 0.00%) . . . dfa.set_matches(newsid, nnfa.iter_matches(oldsid)); +249,266 ( 0.07%) 896 ( 0.11%) . . => /home/.cargo/registry/src/index.crates.io-6f17d22bba15001f/aho-corasick-1.1.2/src/dfa.rs:aho_corasick::dfa::DFA::set_matches (953x) + . . . . } + . . . . sparse_iter( + . . . . nnfa, + . . . . oldsid, + . . . . &dfa.byte_classes, +585,001 ( 0.17%) . . . |byte, class, mut oldnextsid| { + 93,597 ( 0.03%) . . . if oldnextsid == noncontiguous::NFA::FAIL { +178,188 ( 0.05%) . . . if anchored.is_anchored() { + . . . . oldnextsid = noncontiguous::NFA::DEAD; + . . . . } else if state.fail() == noncontiguous::NFA::DEAD { + . . . . // This is a special case that avoids following + . . . . // DEAD transitions in a non-contiguous NFA. + . . . . // Following these transitions is pretty slow + . . . . // because the non-contiguous NFA will always use + . . . . // a sparse representation for it (because the + . . . . // DEAD state is usually treated as a sentinel). +-- line 575 ---------------------------------------- +-- line 581 ---------------------------------------- + . . . . } else { + . . . . oldnextsid = nnfa.next_state( + . . . . Anchored::No, + . . . . state.fail(), + . . . . byte, + . . . . ); + . . . . } + . . . . } +561,582 ( 0.16%) . . . dfa.trans[newsid.as_usize() + usize::from(class)] = +187,194 ( 0.05%) . . . old2new(oldnextsid); +561,582 ( 0.16%) . . . }, + . . . . ); + . . . . } + . . . . // Now that we've remapped all the IDs in our states, all that's left + . . . . // is remapping the special state IDs. + . . . . let old = nnfa.special(); + . . . . let new = &mut dfa.special; + 78 ( 0.00%) . . . new.max_special_id = old2new(old.max_special_id); + 39 ( 0.00%) . . . new.max_match_id = old2new(old.max_match_id); + 39 ( 0.00%) . . . if anchored.is_anchored() { + 39 ( 0.00%) . . . new.start_unanchored_id = DFA::DEAD; + . . . . new.start_anchored_id = old2new(old.start_anchored_id); + . . . . } else { + . . . . new.start_unanchored_id = old2new(old.start_unanchored_id); + . . . . new.start_anchored_id = DFA::DEAD; + . . . . } + 312 ( 0.00%) . . . } + . . . . + . . . . /// Finishes building a DFA that supports BOTH unanchored and anchored + . . . . /// searches. It works by inter-leaving unanchored states with anchored + . . . . /// states in the same transition table. This way, we avoid needing to + . . . . /// re-shuffle states afterward to ensure that our states still look like + . . . . /// DEAD, MATCH, ..., START-UNANCHORED, START-ANCHORED, NON-MATCH, ... + . . . . /// + . . . . /// Honestly this is pretty inscrutable... Simplifications are most + . . . . /// welcome. + . . . . fn finish_build_both_starts( + . . . . &self, + . . . . nnfa: &noncontiguous::NFA, + . . . . dfa: &mut DFA, + . . . . ) { + . . . . let stride2 = dfa.stride2; + 27 ( 0.00%) . . . let stride = 1 << stride2; + . . . . let mut remap_unanchored = vec![DFA::DEAD; nnfa.states().len()]; + . . . . let mut remap_anchored = vec![DFA::DEAD; nnfa.states().len()]; + . . . . let mut is_anchored = vec![false; dfa.state_len]; + . . . . let mut newsid = DFA::DEAD; + . . . . let next_dfa_id = + . . . . |sid: StateID| StateID::new_unchecked(sid.as_usize() + stride); + . . . . for (oldsid, state) in nnfa.states().iter().with_state_ids() { + 990 ( 0.00%) . . . if oldsid == noncontiguous::NFA::DEAD + . . . . || oldsid == noncontiguous::NFA::FAIL + . . . . { + 18 ( 0.00%) . . . remap_unanchored[oldsid] = newsid; + 18 ( 0.00%) . . . remap_anchored[oldsid] = newsid; + . . . . newsid = next_dfa_id(newsid); + 1,413 ( 0.00%) . . . } else if oldsid == nnfa.special().start_unanchored_id + . . . . || oldsid == nnfa.special().start_anchored_id + . . . . { + 18 ( 0.00%) . . . if oldsid == nnfa.special().start_unanchored_id { + 9 ( 0.00%) . . . remap_unanchored[oldsid] = newsid; + 9 ( 0.00%) . . . remap_anchored[oldsid] = DFA::DEAD; + . . . . } else { + 9 ( 0.00%) . . . remap_unanchored[oldsid] = DFA::DEAD; + 9 ( 0.00%) . . . remap_anchored[oldsid] = newsid; + 36 ( 0.00%) . . . is_anchored[newsid.as_usize() >> stride2] = true; + . . . . } + 27 ( 0.00%) . . . if state.is_match() { + . . . . dfa.set_matches(newsid, nnfa.iter_matches(oldsid)); + . . . . } + . . . . sparse_iter( + . . . . nnfa, + . . . . oldsid, + . . . . &dfa.byte_classes, + . . . . |_, class, oldnextsid| { + . . . . let class = usize::from(class); + 252 ( 0.00%) . . . if oldnextsid == noncontiguous::NFA::FAIL { + . . . . dfa.trans[newsid.as_usize() + class] = DFA::DEAD; + . . . . } else { + . . . . dfa.trans[newsid.as_usize() + class] = oldnextsid; + . . . . } + . . . . }, + . . . . ); + . . . . newsid = next_dfa_id(newsid); + . . . . } else { + 459 ( 0.00%) . . . let unewsid = newsid; + . . . . newsid = next_dfa_id(newsid); + 459 ( 0.00%) . . . let anewsid = newsid; + . . . . newsid = next_dfa_id(newsid); + . . . . + 459 ( 0.00%) . . . remap_unanchored[oldsid] = unewsid; + 918 ( 0.00%) . . . remap_anchored[oldsid] = anewsid; + 918 ( 0.00%) . . . is_anchored[anewsid.as_usize() >> stride2] = true; + 459 ( 0.00%) . . . if state.is_match() { + 882 ( 0.00%) . . . dfa.set_matches(unewsid, nnfa.iter_matches(oldsid)); +154,935 ( 0.04%) 812 ( 0.10%) . . => /home/.cargo/registry/src/index.crates.io-6f17d22bba15001f/aho-corasick-1.1.2/src/dfa.rs:aho_corasick::dfa::DFA::set_matches (441x) + 2,205 ( 0.00%) . . . dfa.set_matches(anewsid, nnfa.iter_matches(oldsid)); +156,788 ( 0.05%) 830 ( 0.10%) . . => /home/.cargo/registry/src/index.crates.io-6f17d22bba15001f/aho-corasick-1.1.2/src/dfa.rs:aho_corasick::dfa::DFA::set_matches (441x) + . . . . } + . . . . sparse_iter( + . . . . nnfa, + . . . . oldsid, + . . . . &dfa.byte_classes, + 35,496 ( 0.01%) . . . |byte, class, oldnextsid| { + . . . . let class = usize::from(class); + 6,273 ( 0.00%) . . . if oldnextsid == noncontiguous::NFA::FAIL { + . . . . let oldnextsid = + 11,979 ( 0.00%) . . . if state.fail() == noncontiguous::NFA::DEAD { + . . . . noncontiguous::NFA::DEAD + . . . . } else { + 18 ( 0.00%) . . . nnfa.next_state( + . . . . Anchored::No, + . . . . state.fail(), + . . . . byte, + . . . . ) + . . . . }; + 23,958 ( 0.01%) . . . dfa.trans[unewsid.as_usize() + class] = oldnextsid; + . . . . } else { + 2,160 ( 0.00%) . . . dfa.trans[unewsid.as_usize() + class] = oldnextsid; + 1,080 ( 0.00%) . . . dfa.trans[anewsid.as_usize() + class] = oldnextsid; + . . . . } + 37,638 ( 0.01%) . . . }, + . . . . ); + . . . . } + . . . . } + 36 ( 0.00%) . . . for i in 0..dfa.state_len { + 1,908 ( 0.00%) . . . let sid = i << stride2; + 1,908 ( 0.00%) . . . if is_anchored[i] { + . . . . for next in dfa.trans[sid..][..stride].iter_mut() { + 22,464 ( 0.01%) . . . *next = remap_anchored[*next]; + . . . . } + . . . . } else { + . . . . for next in dfa.trans[sid..][..stride].iter_mut() { + 23,328 ( 0.01%) . . . *next = remap_unanchored[*next]; + . . . . } + . . . . } + . . . . } + . . . . // Now that we've remapped all the IDs in our states, all that's left + . . . . // is remapping the special state IDs. + . . . . let old = nnfa.special(); + . . . . let new = &mut dfa.special; + 27 ( 0.00%) . . . new.max_special_id = remap_anchored[old.max_special_id]; + 18 ( 0.00%) . . . new.max_match_id = remap_anchored[old.max_match_id]; + 27 ( 0.00%) . . . new.start_unanchored_id = remap_unanchored[old.start_unanchored_id]; + 27 ( 0.00%) . . . new.start_anchored_id = remap_anchored[old.start_anchored_id]; + . . . . } + . . . . + . . . . /// Set the desired match semantics. + . . . . /// + . . . . /// This only applies when using [`Builder::build`] and not + . . . . /// [`Builder::build_from_noncontiguous`]. + . . . . /// + . . . . /// See + . . . . /// [`AhoCorasickBuilder::match_kind`](crate::AhoCorasickBuilder::match_kind) + . . . . /// for more documentation and examples. + 39 ( 0.00%) . . . pub fn match_kind(&mut self, kind: MatchKind) -> &mut Builder { + . . . . self.noncontiguous.match_kind(kind); + . . . . self + 39 ( 0.00%) . . . } + . . . . + . . . . /// Enable ASCII-aware case insensitive matching. + . . . . /// + . . . . /// This only applies when using [`Builder::build`] and not + . . . . /// [`Builder::build_from_noncontiguous`]. + . . . . /// + . . . . /// See + . . . . /// [`AhoCorasickBuilder::ascii_case_insensitive`](crate::AhoCorasickBuilder::ascii_case_insensitive) +-- line 745 ---------------------------------------- +-- line 752 ---------------------------------------- + . . . . /// Enable heuristic prefilter optimizations. + . . . . /// + . . . . /// This only applies when using [`Builder::build`] and not + . . . . /// [`Builder::build_from_noncontiguous`]. + . . . . /// + . . . . /// See + . . . . /// [`AhoCorasickBuilder::prefilter`](crate::AhoCorasickBuilder::prefilter) + . . . . /// for more documentation and examples. + 39 ( 0.00%) . . . pub fn prefilter(&mut self, yes: bool) -> &mut Builder { + . . . . self.noncontiguous.prefilter(yes); + . . . . self + 39 ( 0.00%) . . . } + . . . . + . . . . /// Sets the starting state configuration for the automaton. + . . . . /// + . . . . /// See + . . . . /// [`AhoCorasickBuilder::start_kind`](crate::AhoCorasickBuilder::start_kind) + . . . . /// for more documentation and examples. + 39 ( 0.00%) . . . pub fn start_kind(&mut self, kind: StartKind) -> &mut Builder { + 48 ( 0.00%) . . . self.start_kind = kind; + . . . . self + 39 ( 0.00%) . . . } + . . . . + . . . . /// A debug setting for whether to attempt to shrink the size of the + . . . . /// automaton's alphabet or not. + . . . . /// + . . . . /// This should never be enabled unless you're debugging an automaton. + . . . . /// Namely, disabling byte classes makes transitions easier to reason + . . . . /// about, since they use the actual bytes instead of equivalence classes. + . . . . /// Disabling this confers no performance benefit at search time. +-- line 781 ---------------------------------------- +-- line 802 ---------------------------------------- + . . . . nnfa: &noncontiguous::NFA, + . . . . oldsid: StateID, + . . . . classes: &ByteClasses, + . . . . mut f: F, + . . . . ) { + . . . . let mut prev_class = None; + . . . . let mut byte = 0usize; + . . . . for t in nnfa.iter_trans(oldsid) { +290,756 ( 0.08%) . . . while byte < usize::from(t.byte()) { + . . . . let rep = byte.as_u8(); + . . . . let class = classes.get(rep); +106,520 ( 0.03%) . . . byte += 1; + . . . . if prev_class != Some(class) { +149,751 ( 0.04%) . . . f(rep, class, noncontiguous::NFA::FAIL); +968,160 ( 0.28%) . . . => /home/.cargo/registry/src/index.crates.io-6f17d22bba15001f/aho-corasick-1.1.2/src/dfa.rs:aho_corasick::dfa::Builder::finish_build_one_start::{{closure}} (30,255x) + . . . . prev_class = Some(class); + . . . . } + . . . . } + . . . . let rep = t.byte(); + . . . . let class = classes.get(rep); + . . . . byte += 1; + . . . . if prev_class != Some(class) { + 28,315 ( 0.01%) . . . f(rep, class, t.next()); +153,988 ( 0.04%) . . . => /home/.cargo/registry/src/index.crates.io-6f17d22bba15001f/aho-corasick-1.1.2/src/dfa.rs:aho_corasick::dfa::Builder::finish_build_one_start::{{closure}} (5,375x) + . . . . prev_class = Some(class); + . . . . } + . . . . } + . . . . for b in byte..=255 { + . . . . let rep = b.as_u8(); + . . . . let class = classes.get(rep); + . . . . if prev_class != Some(class) { +327,837 ( 0.09%) . . . f(rep, class, noncontiguous::NFA::FAIL); +1,854,944 ( 0.54%) . . . => /home/.cargo/registry/src/index.crates.io-6f17d22bba15001f/aho-corasick-1.1.2/src/dfa.rs:aho_corasick::dfa::Builder::finish_build_one_start::{{closure}} (57,967x) + . . . . prev_class = Some(class); + . . . . } + . . . . } + . . . . } + +544,089 ( 0.16%) . . . + +-------------------------------------------------------------------------------- +-- Auto-annotated source: /home/.cargo/registry/src/index.crates.io-6f17d22bba15001f/aho-corasick-1.1.2/src/util/remapper.rs +-------------------------------------------------------------------------------- +Ir Ge sysCount sysTime + +-- line 90 ---------------------------------------- + . . . . /// + . . . . /// The given stride should be the stride of the transition table expressed + . . . . /// as a power of 2. This stride is used to map between state IDs and state + . . . . /// indices. If state IDs and state indices are equivalent, then provide + . . . . /// a `stride2` of `0`, which acts as an identity. + . . . . pub(crate) fn new(r: &impl Remappable, stride2: usize) -> Remapper { + . . . . let idx = IndexMapper { stride2 }; + . . . . let map = (0..r.state_len()).map(|i| idx.to_state_id(i)).collect(); + 192 ( 0.00%) . . . Remapper { map, idx } + . . . . } + . . . . + . . . . /// Swap two states. Once this is called, callers must follow through to + . . . . /// call `remap`, or else it's possible for the underlying remappable + . . . . /// value to be in a corrupt state. + 1,490 ( 0.00%) . . . pub(crate) fn swap( + . . . . &mut self, + . . . . r: &mut impl Remappable, + . . . . id1: StateID, + . . . . id2: StateID, + . . . . ) { + 1,490 ( 0.00%) . . . if id1 == id2 { + . . . . return; + . . . . } + . . . . r.swap_states(id1, id2); + 1,446 ( 0.00%) . . . self.map.swap(self.idx.to_index(id1), self.idx.to_index(id2)); + 2,980 ( 0.00%) . . . } + . . . . + . . . . /// Complete the remapping process by rewriting all state IDs in the + . . . . /// remappable value according to the swaps performed. + 384 ( 0.00%) . . . pub(crate) fn remap(mut self, r: &mut impl Remappable) { + . . . . // Update the map to account for states that have been swapped + . . . . // multiple times. For example, if (A, C) and (C, G) are swapped, then + . . . . // transitions previously pointing to A should now point to G. But if + . . . . // we don't update our map, they will erroneously be set to C. All we + . . . . // do is follow the swaps in our map until we see our original state + . . . . // ID. + . . . . // + . . . . // The intuition here is to think about how changes are made to the +-- line 127 ---------------------------------------- +-- line 132 ---------------------------------------- + . . . . // + . . . . // We are also careful to clone the map before starting in order to + . . . . // freeze it. We use the frozen map to find our loops, since we need to + . . . . // update our map as well. Without freezing it, our updates could break + . . . . // the loops referenced above and produce incorrect results. + . . . . let oldmap = self.map.clone(); + . . . . for i in 0..r.state_len() { + . . . . let cur_id = self.idx.to_state_id(i); + 2,624 ( 0.00%) . . . let mut new_id = oldmap[i]; + 4,596 ( 0.00%) . . . if cur_id == new_id { + . . . . continue; + . . . . } + . . . . loop { + 23,470 ( 0.01%) . . . let id = oldmap[self.idx.to_index(new_id)]; + 23,470 ( 0.01%) . . . if cur_id == id { + 5,916 ( 0.00%) . . . self.map[i] = new_id; + . . . . break; + . . . . } + . . . . new_id = id; + . . . . } + . . . . } +135,015 ( 0.04%) . . . r.remap(|sid| self.map[self.idx.to_index(sid)]); +1,488,569 ( 0.43%) . . . => /home/.cargo/registry/src/index.crates.io-6f17d22bba15001f/aho-corasick-1.1.2/src/util/remapper.rs:::remap (48x) + . . . . } + . . . . } + . . . . + . . . . /// A simple type for mapping between state indices and state IDs. + . . . . /// + . . . . /// The reason why this exists is because state IDs are "premultiplied" in a + . . . . /// DFA. That is, in order to get to the transitions for a particular state, + . . . . /// one need only use the state ID as-is, instead of having to multiply it by +-- line 161 ---------------------------------------- +-- line 179 ---------------------------------------- + . . . . /// transition table. 'id >> stride2' de-multiplies an ID while 'index << + . . . . /// stride2' pre-multiplies an index to an ID. + . . . . stride2: usize, + . . . . } + . . . . + . . . . impl IndexMapper { + . . . . /// Convert a state ID to a state index. + . . . . fn to_index(&self, id: StateID) -> usize { +162,583 ( 0.05%) . . . id.as_usize() >> self.stride2 + . . . . } + . . . . + . . . . /// Convert a state index to a state ID. + . . . . fn to_state_id(&self, index: usize) -> StateID { + . . . . // CORRECTNESS: If the given index is not valid, then it is not + . . . . // required for this to panic or return a valid state ID. We'll "just" + . . . . // wind up with panics or silent logic errors at some other point. But + . . . . // this is OK because if Remappable::state_len is correct and so is + . . . . // 'to_index', then all inputs to 'to_state_id' should be valid indices + . . . . // and thus transform into valid state IDs. + 10,496 ( 0.00%) . . . StateID::new_unchecked(index << self.stride2) + . . . . } + . . . . } + . . . . + . . . . impl Remappable for noncontiguous::NFA { + . . . . fn state_len(&self) -> usize { + . . . . noncontiguous::NFA::states(self).len() + . . . . } + . . . . + . . . . fn swap_states(&mut self, id1: StateID, id2: StateID) { + 2,892 ( 0.00%) . . . noncontiguous::NFA::swap_states(self, id1, id2) + . . . . } + . . . . + 336 ( 0.00%) . . . fn remap(&mut self, map: impl Fn(StateID) -> StateID) { + . . . . noncontiguous::NFA::remap(self, map) + 384 ( 0.00%) . . . } + . . . . } + + 31,966 ( 0.01%) . . . + +-------------------------------------------------------------------------------- +-- Auto-annotated source: /home/.cargo/registry/src/index.crates.io-6f17d22bba15001f/regex-automata-0.4.6/src/util/determinize/mod.rs +-------------------------------------------------------------------------------- +Ir Ge sysCount sysTime + +-- line 84 ---------------------------------------- + . . . . /// `state` corresponds to the current DFA state on which one wants to compute + . . . . /// the transition for the input `unit`. + . . . . /// + . . . . /// `empty_builder` corresponds to the builder allocation to use to produce a + . . . . /// complete `StateBuilderNFA` state. If the state is not needed (or is already + . . . . /// cached), then it can be cleared and reused without needing to create a new + . . . . /// `State`. The `StateBuilderNFA` state returned is final and ready to be + . . . . /// turned into a `State` if necessary. + 2,616 ( 0.00%) . . . pub(crate) fn next( + . . . . nfa: &thompson::NFA, + . . . . match_kind: MatchKind, + . . . . sparses: &mut SparseSets, + . . . . stack: &mut Vec, + . . . . state: &State, + . . . . unit: alphabet::Unit, + . . . . empty_builder: StateBuilderEmpty, + . . . . ) -> StateBuilderNFA { +-- line 100 ---------------------------------------- +-- line 113 ---------------------------------------- + . . . . // re-compute their epsilon closure. + . . . . // + . . . . // Doing this state shuffling is technically not necessary unless some + . . . . // kind of look-around is used in the DFA. Some ad hoc experiments + . . . . // suggested that avoiding this didn't lead to much of an improvement, + . . . . // but perhaps more rigorous experimentation should be done. And in + . . . . // particular, avoiding this check requires some light refactoring of + . . . . // the code below. + 654 ( 0.00%) . . . state.iter_nfa_state_ids(|nfa_id| { +48,978 ( 0.01%) . . . => /home/.cargo/registry/src/index.crates.io-6f17d22bba15001f/regex-automata-0.4.6/src/util/determinize/state.rs:regex_automata::util::determinize::state::State::iter_nfa_state_ids (218x) + 988 ( 0.00%) . . . sparses.set1.insert(nfa_id); + . . . . }); + . . . . + . . . . // Compute look-ahead assertions originating from the current state. Based + . . . . // on the input unit we're transitioning over, some additional set of + . . . . // assertions may be true. Thus, we re-compute this state's epsilon closure + . . . . // (but only if necessary). Notably, when we build a DFA state initially, + . . . . // we don't enable any look-ahead assertions because we don't know whether + . . . . // they're true or not at that point. + 218 ( 0.00%) . . . if !state.look_need().is_empty() { + . . . . // Add look-ahead assertions that are now true based on the current + . . . . // input unit. + . . . . let mut look_have = state.look_have().clone(); + 280 ( 0.00%) . . . match unit.as_u8() { + . . . . Some(b'\r') => { + . . . . if !rev || !state.is_half_crlf() { + . . . . look_have = look_have.insert(Look::EndCRLF); + . . . . } + . . . . } + . . . . Some(b'\n') => { + . . . . if rev || !state.is_half_crlf() { + . . . . look_have = look_have.insert(Look::EndCRLF); +-- line 143 ---------------------------------------- +-- line 146 ---------------------------------------- + . . . . Some(_) => {} + . . . . None => { + . . . . look_have = look_have + . . . . .insert(Look::End) + . . . . .insert(Look::EndLF) + . . . . .insert(Look::EndCRLF); + . . . . } + . . . . } + 80 ( 0.00%) . . . if unit.is_byte(lookm.get_line_terminator()) { + . . . . look_have = look_have.insert(Look::EndLF); + . . . . } + 40 ( 0.00%) . . . if state.is_half_crlf() + . . . . && ((rev && !unit.is_byte(b'\r')) + . . . . || (!rev && !unit.is_byte(b'\n'))) + . . . . { + . . . . look_have = look_have.insert(Look::StartCRLF); + . . . . } + 200 ( 0.00%) . . . if state.is_from_word() == unit.is_word_byte() { + . . . . look_have = look_have + . . . . .insert(Look::WordAsciiNegate) + . . . . .insert(Look::WordUnicodeNegate); + . . . . } else { + . . . . look_have = + . . . . look_have.insert(Look::WordAscii).insert(Look::WordUnicode); + . . . . } + 41 ( 0.00%) . . . if !unit.is_word_byte() { + . . . . look_have = look_have + . . . . .insert(Look::WordEndHalfAscii) + . . . . .insert(Look::WordEndHalfUnicode); + . . . . } + 3 ( 0.00%) . . . if state.is_from_word() && !unit.is_word_byte() { + . . . . look_have = look_have + . . . . .insert(Look::WordEndAscii) + . . . . .insert(Look::WordEndUnicode); + 117 ( 0.00%) . . . } else if !state.is_from_word() && unit.is_word_byte() { + . . . . look_have = look_have + . . . . .insert(Look::WordStartAscii) + . . . . .insert(Look::WordStartUnicode); + . . . . } + . . . . // If we have new assertions satisfied that are among the set of + . . . . // assertions that exist in this state (that is, just because we added + . . . . // an EndLF assertion above doesn't mean there is an EndLF conditional + . . . . // epsilon transition in this state), then we re-compute this state's + . . . . // epsilon closure using the updated set of assertions. + . . . . // + . . . . // Note that since our DFA states omit unconditional epsilon + . . . . // transitions, this check is necessary for correctness. If we re-did + . . . . // the epsilon closure below needlessly, it could change based on the + . . . . // fact that we omitted epsilon states originally. + 40 ( 0.00%) . . . if !look_have + . . . . .subtract(state.look_have()) + . . . . .intersect(state.look_need()) + . . . . .is_empty() + . . . . { + . . . . for nfa_id in sparses.set1.iter() { + . . . . epsilon_closure( + . . . . nfa, + . . . . nfa_id, +-- line 203 ---------------------------------------- +-- line 212 ---------------------------------------- + . . . . } + . . . . + . . . . // Convert our empty builder into one that can record assertions and match + . . . . // pattern IDs. + . . . . let mut builder = empty_builder.into_matches(); + . . . . // Set whether the StartLF look-behind assertion is true for this + . . . . // transition or not. The look-behind assertion for ASCII word boundaries + . . . . // is handled below. + 218 ( 0.00%) . . . if nfa.look_set_any().contains_anchor_line() + . . . . && unit.is_byte(lookm.get_line_terminator()) + . . . . { + . . . . // Why only handle StartLF here and not Start? That's because Start + . . . . // can only impact the starting state, which is special cased in + . . . . // start state handling. + . . . . builder.set_look_have(|have| have.insert(Look::StartLF)); + . . . . } + . . . . // We also need to add StartCRLF to our assertions too, if we can. This +-- line 228 ---------------------------------------- +-- line 240 ---------------------------------------- + . . . . // look-behind byte is not a word char, then the assertions are satisfied. + . . . . if nfa.look_set_any().contains_word() && !unit.is_word_byte() { + . . . . builder.set_look_have(|have| { + . . . . have.insert(Look::WordStartHalfAscii) + . . . . .insert(Look::WordStartHalfUnicode) + . . . . }); + . . . . } + . . . . for nfa_id in sparses.set1.iter() { + 988 ( 0.00%) . . . match *nfa.state(nfa_id) { + . . . . thompson::State::Union { .. } + . . . . | thompson::State::BinaryUnion { .. } + . . . . | thompson::State::Fail + . . . . | thompson::State::Look { .. } + . . . . | thompson::State::Capture { .. } => {} + 3 ( 0.00%) . . . thompson::State::Match { pattern_id } => { + . . . . // Notice here that we are calling the NEW state a match + . . . . // state if the OLD state we are transitioning from + . . . . // contains an NFA match state. This is precisely how we + . . . . // delay all matches by one byte and also what therefore + . . . . // guarantees that starting states cannot be match states. + . . . . // + . . . . // If we didn't delay matches by one byte, then whether + . . . . // a DFA is a matching state or not would be determined +-- line 262 ---------------------------------------- +-- line 275 ---------------------------------------- + . . . . // + . . . . // N.B. We delay matches by 1 byte as a way to hack 1-byte + . . . . // look-around into DFA searches. This lets us support ^, $ + . . . . // and ASCII-only \b. The delay is also why we need a special + . . . . // "end-of-input" (EOI) sentinel and why we need to follow the + . . . . // EOI sentinel at the end of every search. This final EOI + . . . . // transition is necessary to report matches found at the end + . . . . // of a haystack. + 6 ( 0.00%) . . . builder.add_match_pattern_id(pattern_id); + 60 ( 0.00%) . . . => /home/.cargo/registry/src/index.crates.io-6f17d22bba15001f/regex-automata-0.4.6/src/util/determinize/state.rs:regex_automata::util::determinize::state::StateBuilderMatches::add_match_pattern_id (3x) + 6 ( 0.00%) . . . if !match_kind.continue_past_first_match() { + . . . . break; + . . . . } + . . . . } + . . . . thompson::State::ByteRange { ref trans } => { + 954 ( 0.00%) . . . if trans.matches_unit(unit) { + . . . . epsilon_closure( + . . . . nfa, + . . . . trans.next, + . . . . builder.look_have(), + . . . . stack, + . . . . &mut sparses.set2, + . . . . ); + . . . . } +-- line 297 ---------------------------------------- +-- line 332 ---------------------------------------- + . . . . // a quit byte is seen. Consuming until EOI isn't a correctness problem, + . . . . // but a (serious) perf problem. Hitting a quit byte, however, could be a + . . . . // correctness problem since it could cause search routines to report an + . . . . // error instead of a detected match once the quit state is entered. (The + . . . . // search routine could be made to be a bit smarter by reporting a match + . . . . // if one was detected once it enters a quit state (and indeed, the search + . . . . // routines in this crate do just that), but it seems better to prevent + . . . . // these things by construction if possible.) + 218 ( 0.00%) . . . if !sparses.set2.is_empty() { + . . . . if nfa.look_set_any().contains_word() && unit.is_word_byte() { + . . . . builder.set_is_from_word(); + . . . . } + 175 ( 0.00%) . . . if nfa.look_set_any().contains_anchor_crlf() + . . . . && ((rev && unit.is_byte(b'\n')) || (!rev && unit.is_byte(b'\r'))) + . . . . { + . . . . builder.set_is_half_crlf(); + . . . . } + . . . . } + 654 ( 0.00%) . . . let mut builder_nfa = builder.into_nfa(); + 436 ( 0.00%) . . . add_nfa_states(nfa, &sparses.set2, &mut builder_nfa); +24,097 ( 0.01%) 2 ( 0.00%) . . => /home/.cargo/registry/src/index.crates.io-6f17d22bba15001f/regex-automata-0.4.6/src/util/determinize/mod.rs:regex_automata::util::determinize::add_nfa_states (218x) + . . . . builder_nfa + 1,962 ( 0.00%) . . . } + . . . . + . . . . /// Compute the epsilon closure for the given NFA state. The epsilon closure + . . . . /// consists of all NFA state IDs, including `start_nfa_id`, that can be + . . . . /// reached from `start_nfa_id` without consuming any input. These state IDs + . . . . /// are written to `set` in the order they are visited, but only if they are + . . . . /// not already in `set`. `start_nfa_id` must be a valid state ID for the NFA + . . . . /// given. + . . . . /// + . . . . /// `look_have` consists of the satisfied assertions at the current + . . . . /// position. For conditional look-around epsilon transitions, these are + . . . . /// only followed if they are satisfied by `look_have`. + . . . . /// + . . . . /// `stack` must have length 0. It is used as scratch space for depth first + . . . . /// traversal. After returning, it is guaranteed that `stack` will have length + . . . . /// 0. + 1,880 ( 0.00%) . . . pub(crate) fn epsilon_closure( + . . . . nfa: &thompson::NFA, + . . . . start_nfa_id: StateID, + . . . . look_have: LookSet, + . . . . stack: &mut Vec, + . . . . set: &mut SparseSet, + . . . . ) { + 235 ( 0.00%) . . . assert!(stack.is_empty()); + . . . . // If this isn't an epsilon state, then the epsilon closure is always just + . . . . // itself, so there's no need to spin up the machinery below to handle it. + 235 ( 0.00%) . . . if !nfa.state(start_nfa_id).is_epsilon() { + 93 ( 0.00%) . . . set.insert(start_nfa_id); + . . . . return; + . . . . } + . . . . + . . . . stack.push(start_nfa_id); + . . . . while let Some(mut id) = stack.pop() { + . . . . // In many cases, we can avoid stack operations when an NFA state only + . . . . // adds one new state to visit. In that case, we just set our ID to + . . . . // that state and mush on. We only use the stack when an NFA state + . . . . // introduces multiple new states to visit. + . . . . loop { + . . . . // Insert this NFA state, and if it's already in the set and thus + . . . . // already visited, then we can move on to the next one. + 1,150 ( 0.00%) . . . if !set.insert(id) { + . . . . break; + . . . . } + 1,150 ( 0.00%) . . . match *nfa.state(id) { + . . . . thompson::State::ByteRange { .. } + . . . . | thompson::State::Sparse { .. } + . . . . | thompson::State::Dense { .. } + . . . . | thompson::State::Fail + . . . . | thompson::State::Match { .. } => break, + . . . . thompson::State::Look { look, next } => { + 41 ( 0.00%) . . . if !look_have.contains(look) { + . . . . break; + . . . . } + . . . . id = next; + . . . . } + . . . . thompson::State::Union { ref alternates } => { + 68 ( 0.00%) . . . id = match alternates.get(0) { + . . . . None => break, + 34 ( 0.00%) . . . Some(&id) => id, + . . . . }; + . . . . // We need to process our alternates in order to preserve + . . . . // match preferences, so put the earliest alternates closer + . . . . // to the top of the stack. + . . . . stack.extend(alternates[1..].iter().rev()); + . . . . } + 186 ( 0.00%) . . . thompson::State::BinaryUnion { alt1, alt2 } => { + . . . . id = alt1; + . . . . stack.push(alt2); + . . . . } + . . . . thompson::State::Capture { next, .. } => { + . . . . id = next; + . . . . } + . . . . } + . . . . } + . . . . } + 1,880 ( 0.00%) . . . } + . . . . + . . . . /// Add the NFA state IDs in the given `set` to the given DFA builder state. + . . . . /// The order in which states are added corresponds to the order in which they + . . . . /// were added to `set`. + . . . . /// + . . . . /// The DFA builder state given should already have its complete set of match + . . . . /// pattern IDs added (if any) and any look-behind assertions (StartLF, Start + . . . . /// and whether this state is being generated for a transition over a word byte +-- line 436 ---------------------------------------- +-- line 440 ---------------------------------------- + . . . . /// delayed by one byte. The things that should _not_ be set are look-ahead + . . . . /// assertions (EndLF, End and whether the next byte is a word byte or not). + . . . . /// The builder state should also not have anything in `look_need` set, as this + . . . . /// routine will compute that for you. + . . . . /// + . . . . /// The given NFA should be able to resolve all identifiers in `set` to a + . . . . /// particular NFA state. Additionally, `set` must have capacity equivalent + . . . . /// to `nfa.len()`. + 2,072 ( 0.00%) . . . pub(crate) fn add_nfa_states( + . . . . nfa: &thompson::NFA, + . . . . set: &SparseSet, + . . . . builder: &mut StateBuilderNFA, + . . . . ) { + . . . . for nfa_id in set.iter() { + 2,486 ( 0.00%) . . . match *nfa.state(nfa_id) { + . . . . thompson::State::ByteRange { .. } => { + . . . . builder.add_nfa_state_id(nfa_id); + . . . . } + . . . . thompson::State::Sparse { .. } => { + . . . . builder.add_nfa_state_id(nfa_id); + . . . . } + . . . . thompson::State::Dense { .. } => { + . . . . builder.add_nfa_state_id(nfa_id); + . . . . } + 41 ( 0.00%) . . . thompson::State::Look { look, .. } => { + . . . . builder.add_nfa_state_id(nfa_id); + . . . . builder.set_look_need(|need| need.insert(look)); + . . . . } + . . . . thompson::State::Union { .. } + . . . . | thompson::State::BinaryUnion { .. } => { + . . . . // Pure epsilon transitions don't need to be tracked as part + . . . . // of the DFA state. Tracking them is actually superfluous; + . . . . // they won't cause any harm other than making determinization +-- line 472 ---------------------------------------- +-- line 568 ---------------------------------------- + . . . . // match state. See 'next' for how this is handled. + . . . . builder.add_nfa_state_id(nfa_id); + . . . . } + . . . . } + . . . . } + . . . . // If we know this state contains no look-around assertions, then + . . . . // there's no reason to track which look-around assertions were + . . . . // satisfied when this state was created. + 518 ( 0.00%) . . . if builder.look_need().is_empty() { + . . . . builder.set_look_have(|_| LookSet::empty()); + . . . . } + 2,072 ( 0.00%) . . . } + . . . . + . . . . /// Sets the appropriate look-behind assertions on the given state based on + . . . . /// this starting configuration. + 41 ( 0.00%) . . . pub(crate) fn set_lookbehind_from_start( + . . . . nfa: &thompson::NFA, + . . . . start: &Start, + . . . . builder: &mut StateBuilderMatches, + . . . . ) { + . . . . let rev = nfa.is_reverse(); + . . . . let lineterm = nfa.look_matcher().get_line_terminator(); + . . . . let lookset = nfa.look_set_any(); + 41 ( 0.00%) . . . match *start { + . . . . Start::NonWordByte => { + . . . . if lookset.contains_word() { + . . . . builder.set_look_have(|have| { + . . . . have.insert(Look::WordStartHalfAscii) + . . . . .insert(Look::WordStartHalfUnicode) + . . . . }); + . . . . } + . . . . } + . . . . Start::WordByte => { + . . . . if lookset.contains_word() { + . . . . builder.set_is_from_word(); + . . . . } + . . . . } + . . . . Start::Text => { + 41 ( 0.00%) . . . if lookset.contains_anchor_haystack() { + . . . . builder.set_look_have(|have| have.insert(Look::Start)); + . . . . } + 41 ( 0.00%) . . . if lookset.contains_anchor_line() { + . . . . builder.set_look_have(|have| { + . . . . have.insert(Look::StartLF).insert(Look::StartCRLF) + . . . . }); + . . . . } + . . . . if lookset.contains_word() { + . . . . builder.set_look_have(|have| { + . . . . have.insert(Look::WordStartHalfAscii) + . . . . .insert(Look::WordStartHalfUnicode) +-- line 617 ---------------------------------------- +-- line 674 ---------------------------------------- + . . . . builder.set_look_have(|have| { + . . . . have.insert(Look::WordStartHalfAscii) + . . . . .insert(Look::WordStartHalfUnicode) + . . . . }); + . . . . } + . . . . } + . . . . } + . . . . } + 82 ( 0.00%) . . . } + +18,839 ( 0.01%) . . . + +-------------------------------------------------------------------------------- +-- Auto-annotated source: /home/.cargo/registry/src/index.crates.io-6f17d22bba15001f/regex-automata-0.4.6/src/util/look.rs +-------------------------------------------------------------------------------- +Ir Ge sysCount sysTime + +-- line 137 ---------------------------------------- + . . . . impl Look { + . . . . /// Flip the look-around assertion to its equivalent for reverse searches. + . . . . /// For example, `StartLF` gets translated to `EndLF`. + . . . . /// + . . . . /// Some assertions, such as `WordUnicode`, remain the same since they + . . . . /// match the same positions regardless of the direction of the search. + . . . . #[inline] + . . . . pub const fn reversed(self) -> Look { + 246 ( 0.00%) . . . match self { + . . . . Look::Start => Look::End, + . . . . Look::End => Look::Start, + . . . . Look::StartLF => Look::EndLF, + . . . . Look::EndLF => Look::StartLF, + . . . . Look::StartCRLF => Look::EndCRLF, + . . . . Look::EndCRLF => Look::StartCRLF, + . . . . Look::WordAscii => Look::WordAscii, + . . . . Look::WordAsciiNegate => Look::WordAsciiNegate, +-- line 153 ---------------------------------------- +-- line 175 ---------------------------------------- + . . . . self as u32 + . . . . } + . . . . + . . . . /// Given the underlying representation of a `Look` value, return the + . . . . /// corresponding `Look` value if the representation is valid. Otherwise + . . . . /// `None` is returned. + . . . . #[inline] + . . . . pub const fn from_repr(repr: u32) -> Option { + 244 ( 0.00%) . . . match repr { + . . . . 0b00_0000_0000_0000_0001 => Some(Look::Start), + . . . . 0b00_0000_0000_0000_0010 => Some(Look::End), + . . . . 0b00_0000_0000_0000_0100 => Some(Look::StartLF), + . . . . 0b00_0000_0000_0000_1000 => Some(Look::EndLF), + . . . . 0b00_0000_0000_0001_0000 => Some(Look::StartCRLF), + . . . . 0b00_0000_0000_0010_0000 => Some(Look::EndCRLF), + . . . . 0b00_0000_0000_0100_0000 => Some(Look::WordAscii), + . . . . 0b00_0000_0000_1000_0000 => Some(Look::WordAsciiNegate), +-- line 191 ---------------------------------------- +-- line 284 ---------------------------------------- + . . . . // OK because max value always fits in a u8, which in turn always + . . . . // fits in a usize, regardless of target. + . . . . usize::try_from(self.bits.count_ones()).unwrap() + . . . . } + . . . . + . . . . /// Returns true if and only if this set is empty. + . . . . #[inline] + . . . . pub fn is_empty(self) -> bool { + 477 ( 0.00%) . . . self.len() == 0 + . . . . } + . . . . + . . . . /// Returns true if and only if the given look-around assertion is in this + . . . . /// set. + . . . . #[inline] + . . . . pub fn contains(self, look: Look) -> bool { + 41 ( 0.00%) . . . self.bits & look.as_repr() != 0 + . . . . } + . . . . + . . . . /// Returns true if and only if this set contains any anchor assertions. + . . . . /// This includes both "start/end of haystack" and "start/end of line." + . . . . #[inline] + . . . . pub fn contains_anchor(&self) -> bool { + . . . . self.contains_anchor_haystack() || self.contains_anchor_line() + . . . . } + . . . . + . . . . /// Returns true if and only if this set contains any "start/end of + . . . . /// haystack" anchors. This doesn't include "start/end of line" anchors. + . . . . #[inline] + . . . . pub fn contains_anchor_haystack(&self) -> bool { + 41 ( 0.00%) . . . self.contains(Look::Start) || self.contains(Look::End) + . . . . } + . . . . + . . . . /// Returns true if and only if this set contains any "start/end of line" + . . . . /// anchors. This doesn't include "start/end of haystack" anchors. This + . . . . /// includes both `\n` line anchors and CRLF (`\r\n`) aware line anchors. + . . . . #[inline] + . . . . pub fn contains_anchor_line(&self) -> bool { + 259 ( 0.00%) . . . self.contains(Look::StartLF) + . . . . || self.contains(Look::EndLF) + . . . . || self.contains(Look::StartCRLF) + . . . . || self.contains(Look::EndCRLF) + . . . . } + . . . . + . . . . /// Returns true if and only if this set contains any "start/end of line" + . . . . /// anchors that only treat `\n` as line terminators. This does not include + . . . . /// haystack anchors or CRLF aware line anchors. +-- line 329 ---------------------------------------- +-- line 332 ---------------------------------------- + . . . . self.contains(Look::StartLF) || self.contains(Look::EndLF) + . . . . } + . . . . + . . . . /// Returns true if and only if this set contains any "start/end of line" + . . . . /// anchors that are CRLF-aware. This doesn't include "start/end of + . . . . /// haystack" or "start/end of line-feed" anchors. + . . . . #[inline] + . . . . pub fn contains_anchor_crlf(&self) -> bool { + 611 ( 0.00%) . . . self.contains(Look::StartCRLF) || self.contains(Look::EndCRLF) + . . . . } + . . . . + . . . . /// Returns true if and only if this set contains any word boundary or + . . . . /// negated word boundary assertions. This include both Unicode and ASCII + . . . . /// word boundaries. + . . . . #[inline] + . . . . pub fn contains_word(self) -> bool { + 1,004 ( 0.00%) . . . self.contains_word_unicode() || self.contains_word_ascii() + . . . . } + . . . . + . . . . /// Returns true if and only if this set contains any Unicode word boundary + . . . . /// or negated Unicode word boundary assertions. + . . . . #[inline] + . . . . pub fn contains_word_unicode(self) -> bool { + 175 ( 0.00%) . . . self.contains(Look::WordUnicode) + . . . . || self.contains(Look::WordUnicodeNegate) + . . . . || self.contains(Look::WordStartUnicode) + . . . . || self.contains(Look::WordEndUnicode) + . . . . || self.contains(Look::WordStartHalfUnicode) + . . . . || self.contains(Look::WordEndHalfUnicode) + . . . . } + . . . . + . . . . /// Returns true if and only if this set contains any ASCII word boundary +-- line 363 ---------------------------------------- +-- line 378 ---------------------------------------- + . . . . LookSetIter { set: self } + . . . . } + . . . . + . . . . /// Return a new set that is equivalent to the original, but with the given + . . . . /// assertion added to it. If the assertion is already in the set, then the + . . . . /// returned set is equivalent to the original. + . . . . #[inline] + . . . . pub fn insert(self, look: Look) -> LookSet { + 310 ( 0.00%) . . . LookSet { bits: self.bits | look.as_repr() } + . . . . } + . . . . + . . . . /// Updates this set in place with the result of inserting the given + . . . . /// assertion into this set. + . . . . #[inline] + . . . . pub fn set_insert(&mut self, look: Look) { + . . . . *self = self.insert(look); + . . . . } + . . . . + . . . . /// Return a new set that is equivalent to the original, but with the given + . . . . /// assertion removed from it. If the assertion is not in the set, then the + . . . . /// returned set is equivalent to the original. + . . . . #[inline] + . . . . pub fn remove(self, look: Look) -> LookSet { + 366 ( 0.00%) . . . LookSet { bits: self.bits & !look.as_repr() } + . . . . } + . . . . + . . . . /// Updates this set in place with the result of removing the given + . . . . /// assertion from this set. + . . . . #[inline] + . . . . pub fn set_remove(&mut self, look: Look) { + . . . . *self = self.remove(look); + . . . . } + . . . . + . . . . /// Returns a new set that is the result of subtracting the given set from + . . . . /// this set. + . . . . #[inline] + . . . . pub fn subtract(self, other: LookSet) -> LookSet { + 40 ( 0.00%) . . . LookSet { bits: self.bits & !other.bits } + . . . . } + . . . . + . . . . /// Updates this set in place with the result of subtracting the given set + . . . . /// from this set. + . . . . #[inline] + . . . . pub fn set_subtract(&mut self, other: LookSet) { + . . . . *self = self.subtract(other); + . . . . } +-- line 423 ---------------------------------------- +-- line 433 ---------------------------------------- + . . . . #[inline] + . . . . pub fn set_union(&mut self, other: LookSet) { + . . . . *self = self.union(other); + . . . . } + . . . . + . . . . /// Returns a new set that is the intersection of this and the one given. + . . . . #[inline] + . . . . pub fn intersect(self, other: LookSet) -> LookSet { + 40 ( 0.00%) . . . LookSet { bits: self.bits & other.bits } + . . . . } + . . . . + . . . . /// Updates this set in place with the result of intersecting it with the + . . . . /// one given. + . . . . #[inline] + . . . . pub fn set_intersect(&mut self, other: LookSet) { + . . . . *self = self.intersect(other); + . . . . } +-- line 449 ---------------------------------------- +-- line 464 ---------------------------------------- + . . . . /// of the slice given. + . . . . /// + . . . . /// # Panics + . . . . /// + . . . . /// This panics if `slice.len() < 4`. + . . . . #[inline] + . . . . pub fn write_repr(self, slice: &mut [u8]) { + . . . . let raw = self.bits.to_ne_bytes(); + 81 ( 0.00%) . . . slice[0] = raw[0]; + 299 ( 0.00%) . . . slice[1] = raw[1]; + 81 ( 0.00%) . . . slice[2] = raw[2]; + 122 ( 0.00%) . . . slice[3] = raw[3]; + . . . . } + . . . . + . . . . /// Checks that all assertions in this set can be matched. + . . . . /// + . . . . /// Some assertions, such as Unicode word boundaries, require optional (but + . . . . /// enabled by default) tables that may not be available. If there are + . . . . /// assertions in this set that require tables that are not available, then + . . . . /// this will return an error. +-- line 483 ---------------------------------------- +-- line 518 ---------------------------------------- + . . . . set: LookSet, + . . . . } + . . . . + . . . . impl Iterator for LookSetIter { + . . . . type Item = Look; + . . . . + . . . . #[inline] + . . . . fn next(&mut self) -> Option { + 406 ( 0.00%) . . . if self.set.is_empty() { + . . . . return None; + . . . . } + . . . . // We'll never have more than u8::MAX distinct look-around assertions, + . . . . // so 'bit' will always fit into a u16. + . . . . let bit = u16::try_from(self.set.bits.trailing_zeros()).unwrap(); + 244 ( 0.00%) . . . let look = Look::from_repr(1 << bit)?; + . . . . self.set = self.set.remove(look); + . . . . Some(look) + . . . . } + . . . . } + . . . . + . . . . /// A matcher for look-around assertions. + . . . . /// + . . . . /// This matcher permits configuring aspects of how look-around assertions are +-- line 540 ---------------------------------------- +-- line 604 ---------------------------------------- + . . . . /// Returns the line terminator that was configured for this matcher. + . . . . /// + . . . . /// If no line terminator was configured, then this returns `\n`. + . . . . /// + . . . . /// Note that the line terminator should only be used for matching `(?m:^)` + . . . . /// and `(?m:$)` assertions. It specifically should _not_ be used for + . . . . /// matching the CRLF aware assertions `(?Rm:^)` and `(?Rm:$)`. + . . . . pub fn get_line_terminator(&self) -> u8 { + 391 ( 0.00%) . . . self.lineterm.0 + . . . . } + . . . . + . . . . /// Returns true when the position `at` in `haystack` satisfies the given + . . . . /// look-around assertion. + . . . . /// + . . . . /// # Panics + . . . . /// + . . . . /// This panics when testing any Unicode word boundary assertion in this +-- line 620 ---------------------------------------- +-- line 656 ---------------------------------------- + . . . . /// haystack.len()` is legal and guaranteed not to panic. + . . . . #[cfg_attr(feature = "perf-inline", inline(always))] + . . . . pub(crate) fn matches_inline( + . . . . &self, + . . . . look: Look, + . . . . haystack: &[u8], + . . . . at: usize, + . . . . ) -> bool { + 10 ( 0.00%) . . . match look { + . . . . Look::Start => self.is_start(haystack, at), + . . . . Look::End => self.is_end(haystack, at), + . . . . Look::StartLF => self.is_start_lf(haystack, at), + . . . . Look::EndLF => self.is_end_lf(haystack, at), + . . . . Look::StartCRLF => self.is_start_crlf(haystack, at), + . . . . Look::EndCRLF => self.is_end_crlf(haystack, at), + . . . . Look::WordAscii => self.is_word_ascii(haystack, at), + . . . . Look::WordAsciiNegate => self.is_word_ascii_negate(haystack, at), +-- line 672 ---------------------------------------- +-- line 829 ---------------------------------------- + . . . . } + . . . . } + . . . . true + . . . . } + . . . . + . . . . /// Split up the given byte classes into equivalence classes in a way that + . . . . /// is consistent with this look-around assertion. + . . . . #[cfg(feature = "alloc")] + 980 ( 0.00%) . . . pub(crate) fn add_to_byteset( + . . . . &self, + . . . . look: Look, + . . . . set: &mut crate::util::alphabet::ByteClassSet, + . . . . ) { + 490 ( 0.00%) . . . match look { + . . . . Look::Start | Look::End => {} + . . . . Look::StartLF | Look::EndLF => { + . . . . set.set_range(self.lineterm.0, self.lineterm.0); + . . . . } + . . . . Look::StartCRLF | Look::EndCRLF => { + . . . . set.set_range(b'\r', b'\r'); + . . . . set.set_range(b'\n', b'\n'); + . . . . } +-- line 850 ---------------------------------------- +-- line 889 ---------------------------------------- + . . . . // Subtracting 1 from b2 is always OK because it is always + . . . . // at least 1 greater than b1, and the assert above + . . . . // guarantees that the asu8 conversion will succeed. + . . . . set.set_range(asu8(b1), asu8(b2.checked_sub(1).unwrap())); + . . . . b1 = b2; + . . . . } + . . . . } + . . . . } + 1,225 ( 0.00%) . . . } + . . . . + . . . . /// Returns true when [`Look::Start`] is satisfied `at` the given position + . . . . /// in `haystack`. + . . . . /// + . . . . /// # Panics + . . . . /// + . . . . /// This may panic when `at > haystack.len()`. Note that `at == + . . . . /// haystack.len()` is legal and guaranteed not to panic. + . . . . #[inline] + . . . . pub fn is_start(&self, _haystack: &[u8], at: usize) -> bool { + 10 ( 0.00%) . . . at == 0 + . . . . } + . . . . + . . . . /// Returns true when [`Look::End`] is satisfied `at` the given position in + . . . . /// `haystack`. + . . . . /// + . . . . /// # Panics + . . . . /// + . . . . /// This may panic when `at > haystack.len()`. Note that `at == +-- line 916 ---------------------------------------- + +22,160 ( 0.01%) . . . + +-------------------------------------------------------------------------------- +-- Auto-annotated source: /home/.cargo/registry/src/index.crates.io-6f17d22bba15001f/regex-automata-0.4.6/src/util/captures.rs +-------------------------------------------------------------------------------- +Ir Ge sysCount sysTime + +-- line 209 ---------------------------------------- + . . . . /// assert_eq!(None, caps.get_group_by_name("lower")); + . . . . /// assert_eq!(Some(Span::from(0..3)), caps.get_group_by_name("upper")); + . . . . /// assert_eq!(Some(Span::from(3..6)), caps.get_group_by_name("digits")); + . . . . /// + . . . . /// # Ok::<(), Box>(()) + . . . . /// ``` + . . . . pub fn all(group_info: GroupInfo) -> Captures { + . . . . let slots = group_info.slot_len(); + 417 ( 0.00%) . . . Captures { group_info, pid: None, slots: vec![None; slots] } + . . . . } + . . . . + . . . . /// Create new storage for only the full match spans of a pattern. This + . . . . /// does not include any capturing group offsets. + . . . . /// + . . . . /// It is unspecified behavior to use the returned `Captures` value in a + . . . . /// search with a `GroupInfo` other than the one that is provided to this + . . . . /// constructor. +-- line 225 ---------------------------------------- +-- line 362 ---------------------------------------- + . . . . /// // Recall that offsets are only available when using a non-empty + . . . . /// // Captures value. So even though a match occurred, this returns None! + . . . . /// assert_eq!(None, caps.get_match()); + . . . . /// + . . . . /// # Ok::<(), Box>(()) + . . . . /// ``` + . . . . #[inline] + . . . . pub fn pattern(&self) -> Option { + 65 ( 0.00%) . . . self.pid + . . . . } + . . . . + . . . . /// Returns the pattern ID and the span of the match, if one occurred. + . . . . /// + . . . . /// This always returns `None` when `Captures` was created with + . . . . /// [`Captures::empty`], even if a match was found. + . . . . /// + . . . . /// If this routine returns a non-`None` value, then `is_match` is +-- line 378 ---------------------------------------- +-- line 451 ---------------------------------------- + . . . . /// # Ok::<(), Box>(()) + . . . . /// ``` + . . . . #[inline] + . . . . pub fn get_group(&self, index: usize) -> Option { + . . . . let pid = self.pattern()?; + . . . . // There's a little bit of work needed to map captures to slots in the + . . . . // fully general case. But in the overwhelming common case of a single + . . . . // pattern, we can just do some simple arithmetic. + 130 ( 0.00%) . . . let (slot_start, slot_end) = if self.group_info().pattern_len() == 1 { + . . . . (index.checked_mul(2)?, index.checked_mul(2)?.checked_add(1)?) + . . . . } else { + . . . . self.group_info().slots(pid, index)? + . . . . }; + 260 ( 0.00%) . . . let start = self.slots.get(slot_start).copied()??; + 65 ( 0.00%) . . . let end = self.slots.get(slot_end).copied()??; + 260 ( 0.00%) . . . Some(Span { start: start.get(), end: end.get() }) + . . . . } + . . . . + . . . . /// Returns the span of a capturing group match corresponding to the group + . . . . /// name given, only if both the overall pattern matched and the capturing + . . . . /// group participated in that match. + . . . . /// + . . . . /// This returns `None` if `name` does not correspond to a valid capturing + . . . . /// group for the pattern that matched. +-- line 474 ---------------------------------------- +-- line 499 ---------------------------------------- + . . . . /// assert_eq!(Some(Match::must(0, 0..17)), caps.get_match()); + . . . . /// assert_eq!(Some(Span::from(0..5)), caps.get_group_by_name("first")); + . . . . /// assert_eq!(Some(Span::from(6..17)), caps.get_group_by_name("last")); + . . . . /// // Looking for a non-existent capturing group will return None: + . . . . /// assert_eq!(None, caps.get_group_by_name("middle")); + . . . . /// + . . . . /// # Ok::<(), Box>(()) + . . . . /// ``` + 520 ( 0.00%) . . . pub fn get_group_by_name(&self, name: &str) -> Option { + 130 ( 0.00%) . . . let index = self.group_info().to_index(self.pattern()?, name)?; + . . . . self.get_group(index) + 585 ( 0.00%) . . . } + . . . . + . . . . /// Returns an iterator of possible spans for every capturing group in the + . . . . /// matching pattern. + . . . . /// + . . . . /// If this `Captures` value does not correspond to a match, then the + . . . . /// iterator returned yields no elements. + . . . . /// + . . . . /// Note that the iterator returned yields elements of type `Option`. +-- line 518 ---------------------------------------- +-- line 1127 ---------------------------------------- + . . . . /// Some(6), + . . . . /// Some(17), + . . . . /// ]); + . . . . /// + . . . . /// # Ok::<(), Box>(()) + . . . . /// ``` + . . . . #[inline] + . . . . pub fn set_pattern(&mut self, pid: Option) { + 258 ( 0.00%) . . . self.pid = pid; + . . . . } + . . . . + . . . . /// Returns the underlying slots, where each slot stores a single offset. + . . . . /// + . . . . /// Every matching capturing group generally corresponds to two slots: one + . . . . /// slot for the starting position and another for the ending position. + . . . . /// Typically, either both are present or neither are. (The weasel word + . . . . /// "typically" is used here because it really depends on the regex engine +-- line 1143 ---------------------------------------- +-- line 1443 ---------------------------------------- + . . . . /// // you're guaranteed to not get the slots for a different pattern than the + . . . . /// // one requested. + . . . . /// assert_eq!(None, info.slots(PatternID::must(5), 0)); + . . . . /// assert_eq!(None, info.slots(PatternID::must(1), 1)); + . . . . /// + . . . . /// # Ok::<(), Box>(()) + . . . . /// ``` + . . . . #[derive(Clone, Debug, Default)] + 139 ( 0.00%) . . . pub struct GroupInfo(Arc); + . . . . + . . . . impl GroupInfo { + . . . . /// Creates a new group info from a sequence of patterns, where each + . . . . /// sequence of patterns yields a sequence of possible group names. The + . . . . /// index of each pattern in the sequence corresponds to its `PatternID`, + . . . . /// and the index of each group in each pattern's sequence corresponds to + . . . . /// its corresponding group index. + . . . . /// +-- line 1459 ---------------------------------------- +-- line 1561 ---------------------------------------- + . . . . /// ]).is_ok()); + . . . . /// + . . . . /// # Ok::<(), Box>(()) + . . . . /// ``` + . . . . /// + . . . . /// There are other ways for building a `GroupInfo` to fail but are + . . . . /// difficult to show. For example, if the number of patterns given would + . . . . /// overflow `PatternID`. +1,400 ( 0.00%) . . . pub fn new(pattern_groups: P) -> Result + . . . . where + . . . . P: IntoIterator, + . . . . G: IntoIterator>, + . . . . N: AsRef, + . . . . { +1,400 ( 0.00%) . . . let mut group_info = GroupInfoInner { + . . . . slot_ranges: vec![], + . . . . name_to_index: vec![], + . . . . index_to_name: vec![], + . . . . memory_extra: 0, + . . . . }; + . . . . for (pattern_index, groups) in pattern_groups.into_iter().enumerate() { + . . . . // If we can't convert the pattern index to an ID, then the caller + . . . . // tried to build capture info for too many patterns. + . . . . let pid = PatternID::new(pattern_index) + . . . . .map_err(GroupInfoError::too_many_patterns)?; + . . . . + . . . . let mut groups_iter = groups.into_iter().enumerate(); + 81 ( 0.00%) . . . match groups_iter.next() { + . . . . None => return Err(GroupInfoError::missing_groups(pid)), + . . . . Some((_, Some(_))) => { + . . . . return Err(GroupInfoError::first_must_be_unnamed(pid)) + . . . . } + . . . . Some((_, None)) => {} + . . . . } + 162 ( 0.00%) . . . group_info.add_first_group(pid); +71,177 ( 0.02%) 294 ( 0.04%) 2 ( 0.65%) . => /home/.cargo/registry/src/index.crates.io-6f17d22bba15001f/regex-automata-0.4.6/src/util/captures.rs:regex_automata::util::captures::GroupInfoInner::add_first_group (81x) + . . . . // Now iterate over the rest, which correspond to all of the + . . . . // (conventionally) explicit capture groups in a regex pattern. + . . . . for (group_index, maybe_name) in groups_iter { + . . . . // Just like for patterns, if the group index can't be + . . . . // converted to a "small" index, then the caller has given too + . . . . // many groups for a particular pattern. + . . . . let group = SmallIndex::new(group_index).map_err(|_| { + . . . . GroupInfoError::too_many_groups(pid, group_index) + . . . . })?; + . . . . group_info.add_explicit_group(pid, group, maybe_name)?; + . . . . } + . . . . } + 175 ( 0.00%) . . . group_info.fixup_slot_ranges()?; +3,882 ( 0.00%) . . . => /home/.cargo/registry/src/index.crates.io-6f17d22bba15001f/regex-automata-0.4.6/src/util/captures.rs:regex_automata::util::captures::GroupInfoInner::fixup_slot_ranges (175x) +2,275 ( 0.00%) . . . Ok(GroupInfo(Arc::new(group_info))) +1,400 ( 0.00%) . . . } + . . . . + . . . . /// This creates an empty `GroupInfo`. + . . . . /// + . . . . /// This is a convenience routine for calling `GroupInfo::new` with an + . . . . /// iterator that yields no elements. + . . . . /// + . . . . /// # Example + . . . . /// +-- line 1618 ---------------------------------------- +-- line 1897 ---------------------------------------- + . . . . /// nfa.group_info().slot(PatternID::must(0), 0), + . . . . /// nfa.group_info().slot(PatternID::must(1), 0), + . . . . /// ); + . . . . /// + . . . . /// # Ok::<(), Box>(()) + . . . . /// ``` + . . . . #[inline] + . . . . pub fn slot(&self, pid: PatternID, group_index: usize) -> Option { +3,096 ( 0.00%) . . . if group_index >= self.group_len(pid) { + . . . . return None; + . . . . } + . . . . // At this point, we know that 'pid' refers to a real pattern and that + . . . . // 'group_index' refers to a real group. We therefore also know that + . . . . // the pattern and group can be combined to return a correct slot. + . . . . // That's why we don't need to use checked arithmetic below. +6,192 ( 0.00%) . . . if group_index == 0 { + . . . . Some(pid.as_usize() * 2) + . . . . } else { + . . . . // As above, we don't need to check that our slot is less than the + . . . . // end of our range since we already know the group index is a + . . . . // valid index for the given pattern. + . . . . let (start, _) = self.0.slot_ranges[pid]; + . . . . Some(start.as_usize() + ((group_index - 1) * 2)) + . . . . } +-- line 1920 ---------------------------------------- +-- line 2092 ---------------------------------------- + . . . . /// assert_eq!(2, info.implicit_slot_len()); + . . . . /// // 2 explicit capturing groups gives us 2*2=4 explicit slots. + . . . . /// assert_eq!(4, info.explicit_slot_len()); + . . . . /// + . . . . /// # Ok::<(), Box>(()) + . . . . /// ``` + . . . . #[inline] + . . . . pub fn implicit_slot_len(&self) -> usize { + 152 ( 0.00%) . . . self.pattern_len() * 2 + . . . . } + . . . . + . . . . /// Returns the total number of slots for explicit capturing groups. + . . . . /// + . . . . /// This is like [`GroupInfo::slot_len`], except it doesn't include the + . . . . /// implicit slots for each pattern. (There are always 2 implicit slots for + . . . . /// each pattern.) + . . . . /// +-- line 2108 ---------------------------------------- +-- line 2184 ---------------------------------------- + . . . . /// This adds the first unnamed group for the given pattern ID. The given + . . . . /// pattern ID must be zero if this is the first time this method is + . . . . /// called, or must be exactly one more than the pattern ID supplied to the + . . . . /// previous call to this method. (This method panics if this rule is + . . . . /// violated.) + . . . . /// + . . . . /// This can be thought of as initializing the GroupInfo state for the + . . . . /// given pattern and closing off the state for any previous pattern. + 405 ( 0.00%) . . . fn add_first_group(&mut self, pid: PatternID) { + 324 ( 0.00%) . . . assert_eq!(pid.as_usize(), self.slot_ranges.len()); + 162 ( 0.00%) . . . assert_eq!(pid.as_usize(), self.name_to_index.len()); + 162 ( 0.00%) . . . assert_eq!(pid.as_usize(), self.index_to_name.len()); + . . . . // This is the start of our slots for the explicit capturing groups. + . . . . // Note that since the slots for the 0th group for every pattern appear + . . . . // before any slots for the nth group (where n > 0) in any pattern, we + . . . . // will have to fix up the slot ranges once we know how many patterns + . . . . // we've added capture groups for. + . . . . let slot_start = self.small_slot_len(); + . . . . self.slot_ranges.push((slot_start, slot_start)); + . . . . self.name_to_index.push(CaptureNameMap::new()); + 162 ( 0.00%) . . . self.index_to_name.push(vec![None]); + 81 ( 0.00%) . . . self.memory_extra += core::mem::size_of::>>(); + 405 ( 0.00%) . . . } + . . . . + . . . . /// Add an explicit capturing group for the given pattern with the given + . . . . /// index. If the group has a name, then that must be given as well. + . . . . /// + . . . . /// Note that every capturing group except for the first or zeroth group is + . . . . /// explicit. + . . . . /// + . . . . /// This returns an error if adding this group would result in overflowing +-- line 2214 ---------------------------------------- +-- line 2222 ---------------------------------------- + . . . . ) -> Result<(), GroupInfoError> { + . . . . // We also need to check that the slot index generated for + . . . . // this group is also valid. Although, this is a little weird + . . . . // because we offset these indices below, at which point, we'll + . . . . // have to recheck them. Gosh this is annoying. Note that + . . . . // the '+2' below is OK because 'end' is guaranteed to be less + . . . . // than isize::MAX. + . . . . let end = &mut self.slot_ranges[pid].1; +1,386 ( 0.00%) . . . *end = SmallIndex::new(end.as_usize() + 2).map_err(|_| { + . . . . GroupInfoError::too_many_groups(pid, group.as_usize()) + . . . . })?; + 693 ( 0.00%) . . . if let Some(name) = maybe_name { +2,344 ( 0.00%) . . . let name = Arc::::from(name.as_ref()); + . . . . if self.name_to_index[pid].contains_key(&*name) { + . . . . return Err(GroupInfoError::duplicate(pid, &name)); + . . . . } + . . . . let len = name.len(); + . . . . self.name_to_index[pid].insert(Arc::clone(&name), group); +1,172 ( 0.00%) . . . self.index_to_name[pid].push(Some(name)); + . . . . // Adds the memory used by the Arc in both maps. + 586 ( 0.00%) . . . self.memory_extra += + . . . . 2 * (len + core::mem::size_of::>>()); + . . . . // And also the value entry for the 'name_to_index' map. + . . . . // This is probably an underestimate for 'name_to_index' since + . . . . // hashmaps/btrees likely have some non-zero overhead, but we + . . . . // assume here that they have zero overhead. +1,758 ( 0.00%) . . . self.memory_extra += core::mem::size_of::(); + . . . . } else { + . . . . self.index_to_name[pid].push(None); + 214 ( 0.00%) . . . self.memory_extra += core::mem::size_of::>>(); + . . . . } + . . . . // This is a sanity assert that checks that our group index + . . . . // is in line with the number of groups added so far for this + . . . . // pattern. +2,079 ( 0.00%) . . . assert_eq!(group.one_more(), self.group_len(pid)); + . . . . // And is also in line with the 'index_to_name' map. +1,386 ( 0.00%) . . . assert_eq!(group.one_more(), self.index_to_name[pid].len()); + . . . . Ok(()) + . . . . } + . . . . + . . . . /// This corrects the slot ranges to account for the slots corresponding + . . . . /// to the zeroth group of each pattern. That is, every slot range is + . . . . /// offset by 'pattern_len() * 2', since each pattern uses two slots to + . . . . /// represent the zeroth group. + 175 ( 0.00%) . . . fn fixup_slot_ranges(&mut self) -> Result<(), GroupInfoError> { + . . . . use crate::util::primitives::IteratorIndexExt; + . . . . // Since we know number of patterns fits in PatternID and + . . . . // PatternID::MAX < isize::MAX, it follows that multiplying by 2 will + . . . . // never overflow usize. + . . . . let offset = self.pattern_len().checked_mul(2).unwrap(); + . . . . for (pid, &mut (ref mut start, ref mut end)) in + . . . . self.slot_ranges.iter_mut().with_pattern_ids() + . . . . { + . . . . let group_len = 1 + ((end.as_usize() - start.as_usize()) / 2); + 81 ( 0.00%) . . . let new_end = match end.as_usize().checked_add(offset) { + . . . . Some(new_end) => new_end, + . . . . None => { + . . . . return Err(GroupInfoError::too_many_groups( + . . . . pid, group_len, + . . . . )) + . . . . } + . . . . }; + 81 ( 0.00%) . . . *end = SmallIndex::new(new_end).map_err(|_| { + . . . . GroupInfoError::too_many_groups(pid, group_len) + . . . . })?; + . . . . // Since start <= end, if end is valid then start must be too. + 162 ( 0.00%) . . . *start = SmallIndex::new(start.as_usize() + offset).unwrap(); + . . . . } + 175 ( 0.00%) . . . Ok(()) + 525 ( 0.00%) . . . } + . . . . + . . . . /// Return the total number of patterns represented by this capture slot + . . . . /// info. + . . . . fn pattern_len(&self) -> usize { + . . . . self.slot_ranges.len() + . . . . } + . . . . + . . . . /// Return the total number of capturing groups for the given pattern. If + . . . . /// the given pattern isn't valid for this capture slot info, then 0 is + . . . . /// returned. + . . . . fn group_len(&self, pid: PatternID) -> usize { +8,271 ( 0.00%) . . . let (start, end) = match self.slot_ranges.get(pid.as_usize()) { + . . . . None => return 0, + . . . . Some(range) => range, + . . . . }; + . . . . // The difference between any two SmallIndex values always fits in a + . . . . // usize since we know that SmallIndex::MAX <= isize::MAX-1. We also + . . . . // know that start<=end by construction and that the number of groups + . . . . // never exceeds SmallIndex and thus never overflows usize. +5,175 ( 0.00%) . . . 1 + ((end.as_usize() - start.as_usize()) / 2) + . . . . } + . . . . + . . . . /// Return the total number of slots in this capture slot info as a + . . . . /// "small index." + . . . . fn small_slot_len(&self) -> SmallIndex { + . . . . // Since slots are allocated in order of pattern (starting at 0) and + . . . . // then in order of capture group, it follows that the number of slots + . . . . // is the end of the range of slots for the last pattern. This is + . . . . // true even when the last pattern has no capturing groups, since + . . . . // 'slot_ranges' will still represent it explicitly with an empty + . . . . // range. + 327 ( 0.00%) . . . self.slot_ranges.last().map_or(SmallIndex::ZERO, |&(_, end)| end) + . . . . } + . . . . } + . . . . + . . . . /// An error that may occur when building a `GroupInfo`. + . . . . /// + . . . . /// Building a `GroupInfo` does a variety of checks to make sure the + . . . . /// capturing groups satisfy a number of invariants. This includes, but is not + . . . . /// limited to, ensuring that the first capturing group is unnamed and that +-- line 2331 ---------------------------------------- + +3,275 ( 0.00%) . . . + +-------------------------------------------------------------------------------- +-- Auto-annotated source: /home/.cargo/registry/src/index.crates.io-6f17d22bba15001f/regex-automata-0.4.6/src/dfa/onepass.rs +-------------------------------------------------------------------------------- +Ir Ge sysCount sysTime + +-- line 339 ---------------------------------------- + . . . . } + . . . . + . . . . impl Builder { + . . . . /// Create a new one-pass DFA builder with the default configuration. + . . . . pub fn new() -> Builder { + . . . . Builder { + . . . . config: Config::default(), + . . . . #[cfg(feature = "syntax")] + 81 ( 0.00%) . . . thompson: thompson::Compiler::new(), +21,951 ( 0.01%) . . . => /home/.cargo/registry/src/index.crates.io-6f17d22bba15001f/regex-automata-0.4.6/src/nfa/thompson/compiler.rs:regex_automata::nfa::thompson::compiler::Compiler::new (81x) + . . . . } + . . . . } + . . . . + . . . . /// Build a one-pass DFA from the given pattern. + . . . . /// + . . . . /// If there was a problem parsing or compiling the pattern, then an error + . . . . /// is returned. + . . . . #[cfg(feature = "syntax")] +-- line 355 ---------------------------------------- +-- line 387 ---------------------------------------- + . . . . /// .build(r"[a-z0-9]+")?; + . . . . /// let re = DFA::builder().build_from_nfa(nfa)?; + . . . . /// let (mut cache, mut caps) = (re.create_cache(), re.create_captures()); + . . . . /// re.captures(&mut cache, "foo123bar", &mut caps); + . . . . /// assert_eq!(Some(Match::must(0, 0..9)), caps.get_match()); + . . . . /// + . . . . /// # Ok::<(), Box>(()) + . . . . /// ``` + 729 ( 0.00%) . . . pub fn build_from_nfa(&self, nfa: NFA) -> Result { + . . . . // Why take ownership if we're just going to pass a reference to the + . . . . // NFA to our internal builder? Well, the first thing to note is that + . . . . // an NFA uses reference counting internally, so either choice is going + . . . . // to be cheap. So there isn't much cost either way. + . . . . // + . . . . // The real reason is that a one-pass DFA, semantically, shares + . . . . // ownership of an NFA. This is unlike other DFAs that don't share + . . . . // ownership of an NFA at all, primarily because they want to be +-- line 403 ---------------------------------------- +-- line 405 ---------------------------------------- + . . . . // + . . . . // But then why pass a '&nfa' below if we want to share ownership? + . . . . // Well, it turns out that using a '&NFA' in our internal builder + . . . . // separates its lifetime from the DFA we're building, and this turns + . . . . // out to make code a bit more composable. e.g., We can iterate over + . . . . // things inside the NFA while borrowing the builder as mutable because + . . . . // we know the NFA cannot be mutated. So TL;DR --- this weirdness is + . . . . // "because borrow checker." + 243 ( 0.00%) . . . InternalBuilder::new(self.config.clone(), &nfa).build() + 729 ( 0.00%) . . . } + . . . . + . . . . /// Apply the given one-pass DFA configuration options to this builder. + . . . . pub fn configure(&mut self, config: Config) -> &mut Builder { + 405 ( 0.00%) . . . self.config = self.config.overwrite(config); + . . . . self + . . . . } + . . . . + . . . . /// Set the syntax configuration for this builder using + . . . . /// [`syntax::Config`](crate::util::syntax::Config). + . . . . /// + . . . . /// This permits setting things like case insensitivity, Unicode and multi + . . . . /// line mode. +-- line 426 ---------------------------------------- +-- line 517 ---------------------------------------- + . . . . /// + . . . . /// This is duplicated in dfa.classes. + . . . . classes: ByteClasses, + . . . . } + . . . . + . . . . impl<'a> InternalBuilder<'a> { + . . . . /// Create a new builder with an initial empty DFA. + . . . . fn new(config: Config, nfa: &'a NFA) -> InternalBuilder { + 81 ( 0.00%) . . . let classes = if !config.get_byte_classes() { + . . . . // A one-pass DFA will always use the equivalence class map, but + . . . . // enabling this option is useful for debugging. Namely, this will + . . . . // cause all transitions to be defined over their actual bytes + . . . . // instead of an opaque equivalence class identifier. The former is + . . . . // much easier to grok as a human. + . . . . ByteClasses::singletons() + . . . . } else { + . . . . nfa.byte_classes().clone() +-- line 533 ---------------------------------------- +-- line 555 ---------------------------------------- + . . . . min_match_id: StateID::MAX, + . . . . classes: classes.clone(), + . . . . alphabet_len, + . . . . stride2, + . . . . pateps_offset: alphabet_len, + . . . . // OK because PatternID::MAX*2 is guaranteed not to overflow. + . . . . explicit_slot_start: nfa.pattern_len().checked_mul(2).unwrap(), + . . . . }; + 5,022 ( 0.00%) . . . InternalBuilder { + . . . . dfa, + . . . . uncompiled_nfa_ids: vec![], + . . . . nfa_to_dfa_id: vec![DEAD; nfa.states().len()], + . . . . stack: vec![], + . . . . seen: SparseSet::new(nfa.states().len()), + . . . . matched: false, + . . . . config, + . . . . nfa, + 1,296 ( 0.00%) . . . classes, + . . . . } + . . . . } + . . . . + . . . . /// Build the DFA from the NFA given to this builder. If the NFA is not + . . . . /// one-pass, then return an error. An error may also be returned if a + . . . . /// particular limit is exceeded. (Some limits, like the total heap memory + . . . . /// used, are configurable. Others, like the total patterns or slots, are + . . . . /// hard-coded based on representational limitations.) +-- line 580 ---------------------------------------- +-- line 581 ---------------------------------------- + . . . . fn build(mut self) -> Result { + . . . . self.nfa.look_set_any().available().map_err(BuildError::word)?; + . . . . for look in self.nfa.look_set_any().iter() { + . . . . // This is a future incompatibility check where if we add any + . . . . // more look-around assertions, then the one-pass DFA either + . . . . // needs to reject them (what we do here) or it needs to have its + . . . . // Transition representation modified to be capable of storing the + . . . . // new assertions. + 244 ( 0.00%) . . . if look.as_repr() > Look::WordUnicodeNegate.as_repr() { + . . . . return Err(BuildError::unsupported_look(look)); + . . . . } + . . . . } + 162 ( 0.00%) . . . if self.nfa.pattern_len().as_u64() > PatternEpsilons::PATTERN_ID_LIMIT + . . . . { + . . . . return Err(BuildError::too_many_patterns( + . . . . PatternEpsilons::PATTERN_ID_LIMIT, + . . . . )); + . . . . } + 243 ( 0.00%) . . . if self.nfa.group_info().explicit_slot_len() > Slots::LIMIT { + . . . . return Err(BuildError::not_one_pass( + . . . . "too many explicit capturing groups (max is 16)", + . . . . )); + . . . . } + . . . . assert_eq!(DEAD, self.add_empty_state()?); + . . . . + . . . . // This is where the explicit slots start. We care about this because + . . . . // we only need to track explicit slots. The implicit slots---two for + . . . . // each pattern---are tracked as part of the search routine itself. + . . . . let explicit_slot_start = self.nfa.pattern_len() * 2; + 81 ( 0.00%) . . . self.add_start_state(None, self.nfa.start_anchored())?; + 81 ( 0.00%) . . . if self.config.get_starts_for_each_pattern() { + 162 ( 0.00%) . . . for pid in self.nfa.patterns() { + 648 ( 0.00%) . . . => /home/.cargo/registry/src/index.crates.io-6f17d22bba15001f/regex-automata-0.4.6/src/nfa/thompson/nfa.rs:regex_automata::nfa::thompson::nfa::NFA::patterns (81x) + . . . . self.add_start_state( + . . . . Some(pid), + 324 ( 0.00%) . . . self.nfa.start_pattern(pid).unwrap(), + . . . . )?; + . . . . } + . . . . } + . . . . // NOTE: One wonders what the effects of treating 'uncompiled_nfa_ids' + . . . . // as a stack are. It is really an unordered *set* of NFA state IDs. + . . . . // If it, for example, in practice led to discovering whether a regex + . . . . // was or wasn't one-pass later than if we processed NFA state IDs in + . . . . // ascending order, then that would make this routine more costly in + . . . . // the somewhat common case of a regex that isn't one-pass. + . . . . while let Some(nfa_id) = self.uncompiled_nfa_ids.pop() { + 392 ( 0.00%) . . . let dfa_id = self.nfa_to_dfa_id[nfa_id]; + . . . . // Once we see a match, we keep going, but don't add any new + . . . . // transitions. Normally we'd just stop, but we have to keep + . . . . // going in order to verify that our regex is actually one-pass. + 392 ( 0.00%) . . . self.matched = false; + . . . . // The NFA states we've already explored for this DFA state. + . . . . self.seen.clear(); + . . . . // The NFA states to explore via epsilon transitions. If we ever + . . . . // try to push an NFA state that we've already seen, then the NFA + . . . . // is not one-pass because it implies there are multiple epsilon + . . . . // transition paths that lead to the same NFA state. In other + . . . . // words, there is ambiguity. + 784 ( 0.00%) . . . self.stack_push(nfa_id, Epsilons::empty())?; + . . . . while let Some((id, epsilons)) = self.stack.pop() { + 5,995 ( 0.00%) . . . match *self.nfa.state(id) { + . . . . thompson::State::ByteRange { ref trans } => { + 2,340 ( 0.00%) . . . self.compile_transition(dfa_id, trans, epsilons)?; +283,175 ( 0.08%) 254 ( 0.03%) . . => /home/.cargo/registry/src/index.crates.io-6f17d22bba15001f/regex-automata-0.4.6/src/dfa/onepass.rs:regex_automata::dfa::onepass::InternalBuilder::compile_transition (390x) + . . . . } + . . . . thompson::State::Sparse(ref sparse) => { + 416 ( 0.00%) . . . for trans in sparse.transitions.iter() { + 7,427 ( 0.00%) . . . self.compile_transition(dfa_id, trans, epsilons)?; +772,342 ( 0.22%) 517 ( 0.06%) 2 ( 0.65%) . => /home/.cargo/registry/src/index.crates.io-6f17d22bba15001f/regex-automata-0.4.6/src/dfa/onepass.rs:regex_automata::dfa::onepass::InternalBuilder::compile_transition (1,061x) + . . . . } + . . . . } + . . . . thompson::State::Dense(ref dense) => { + . . . . for trans in dense.iter() { + . . . . self.compile_transition(dfa_id, &trans, epsilons)?; + . . . . } + . . . . } + 66 ( 0.00%) . . . thompson::State::Look { look, next } => { + . . . . let looks = epsilons.looks().insert(look); + 198 ( 0.00%) . . . self.stack_push(next, epsilons.set_looks(looks))?; + . . . . } + . . . . thompson::State::Union { ref alternates } => { + 1,720 ( 0.00%) . . . for &sid in alternates.iter().rev() { + 6,576 ( 0.00%) . . . self.stack_push(sid, epsilons)?; +165,717 ( 0.05%) 258 ( 0.03%) . . => /home/.cargo/registry/src/index.crates.io-6f17d22bba15001f/regex-automata-0.4.6/src/dfa/onepass.rs:regex_automata::dfa::onepass::InternalBuilder::stack_push (1,644x) + . . . . } + . . . . } + 224 ( 0.00%) . . . thompson::State::BinaryUnion { alt1, alt2 } => { + 560 ( 0.00%) . . . self.stack_push(alt2, epsilons)?; + 6,023 ( 0.00%) . . . => /home/.cargo/registry/src/index.crates.io-6f17d22bba15001f/regex-automata-0.4.6/src/dfa/onepass.rs:regex_automata::dfa::onepass::InternalBuilder::stack_push (112x) + 560 ( 0.00%) . . . self.stack_push(alt1, epsilons)?; + . . . . } + 346 ( 0.00%) . . . thompson::State::Capture { next, slot, .. } => { + . . . . let slot = slot.as_usize(); + 692 ( 0.00%) . . . let epsilons = if slot < explicit_slot_start { + . . . . // If this is an implicit slot, we don't care + . . . . // about it, since we handle implicit slots in + . . . . // the search routine. We can get away with that + . . . . // because there are 2 implicit slots for every + . . . . // pattern. + . . . . epsilons + . . . . } else { + . . . . // Offset our explicit slots so that they start +-- line 677 ---------------------------------------- +-- line 679 ---------------------------------------- + . . . . let offset = slot - explicit_slot_start; + . . . . epsilons.set_slots(epsilons.slots().insert(offset)) + . . . . }; + . . . . self.stack_push(next, epsilons)?; + . . . . } + . . . . thompson::State::Fail => { + . . . . continue; + . . . . } + 1 ( 0.00%) . . . thompson::State::Match { pattern_id } => { + . . . . // If we found two different paths to a match state + . . . . // for the same DFA state, then we have ambiguity. + . . . . // Thus, it's not one-pass. + 2 ( 0.00%) . . . if self.matched { + . . . . return Err(BuildError::not_one_pass( + . . . . "multiple epsilon transitions to match state", + . . . . )); + . . . . } + 1 ( 0.00%) . . . self.matched = true; + . . . . // Shove the matching pattern ID and the 'epsilons' + . . . . // into the current DFA state's pattern epsilons. The + . . . . // 'epsilons' includes the slots we need to capture + . . . . // before reporting the match and also the conditional + . . . . // epsilon transitions we need to check before we can + . . . . // report a match. + . . . . self.dfa.set_pattern_epsilons( + . . . . dfa_id, +-- line 704 ---------------------------------------- +-- line 717 ---------------------------------------- + . . . . // continue on. When we go to compile a new DFA state, + . . . . // we just skip that part. But otherwise check that the + . . . . // one-pass property is upheld. + . . . . } + . . . . } + . . . . } + . . . . } + . . . . self.shuffle_states(); + 5 ( 0.00%) . . . Ok(self.dfa) + 65 ( 0.00%) . . . => ./string/../sysdeps/x86_64/multiarch/memmove-vec-unaligned-erms.S:__memcpy_avx_unaligned_erms (1x) + . . . . } + . . . . + . . . . /// Shuffle all match states to the end of the transition table and set + . . . . /// 'min_match_id' to the ID of the first such match state. + . . . . /// + . . . . /// The point of this is to make it extremely cheap to determine whether + . . . . /// a state is a match state or not. We need to check on this on every + . . . . /// transition during a search, so it being cheap is important. This + . . . . /// permits us to check it by simply comparing two state identifiers, as + . . . . /// opposed to looking for the pattern ID in the state's `PatternEpsilons`. + . . . . /// (Which requires a memory load and some light arithmetic.) + . . . . fn shuffle_states(&mut self) { + 2 ( 0.00%) . . . let mut remapper = Remapper::new(&self.dfa); + 184 ( 0.00%) . . . => /home/.cargo/registry/src/index.crates.io-6f17d22bba15001f/regex-automata-0.4.6/src/dfa/remapper.rs:regex_automata::dfa::remapper::Remapper::new (1x) + 2 ( 0.00%) . . . let mut next_dest = self.dfa.last_state_id(); + . . . . for i in (0..self.dfa.state_len()).rev() { + . . . . let id = StateID::must(i); + . . . . let is_match = + . . . . self.dfa.pattern_epsilons(id).pattern_id().is_some(); + . . . . if !is_match { + . . . . continue; + . . . . } + 6 ( 0.00%) . . . remapper.swap(&mut self.dfa, next_dest, id); + 1,956 ( 0.00%) . . . => /home/.cargo/registry/src/index.crates.io-6f17d22bba15001f/regex-automata-0.4.6/src/dfa/remapper.rs:regex_automata::dfa::remapper::Remapper::swap (1x) + 1 ( 0.00%) . . . self.dfa.min_match_id = next_dest; + . . . . next_dest = self.dfa.prev_state_id(next_dest).expect( + . . . . "match states should be a proper subset of all states", + . . . . ); + . . . . } + 7 ( 0.00%) . . . remapper.remap(&mut self.dfa); +103,863 ( 0.03%) . . . => /home/.cargo/registry/src/index.crates.io-6f17d22bba15001f/regex-automata-0.4.6/src/dfa/remapper.rs:regex_automata::dfa::remapper::Remapper::remap (1x) + . . . . } + . . . . + . . . . /// Compile the given NFA transition into the DFA state given. + . . . . /// + . . . . /// 'Epsilons' corresponds to any conditional epsilon transitions that need + . . . . /// to be satisfied to follow this transition, and any slots that need to + . . . . /// be saved if the transition is followed. + . . . . /// + . . . . /// If this transition indicates that the NFA is not one-pass, then + . . . . /// this returns an error. (This occurs, for example, if the DFA state + . . . . /// already has a transition defined for the same input symbols as the + . . . . /// given transition, *and* the result of the old and new transitions is + . . . . /// different.) +17,412 ( 0.01%) . . . fn compile_transition( + . . . . &mut self, + . . . . dfa_id: StateID, + . . . . trans: &thompson::Transition, + . . . . epsilons: Epsilons, + . . . . ) -> Result<(), BuildError> { + 2,902 ( 0.00%) . . . let next_dfa_id = self.add_dfa_state_for_nfa_state(trans.next)?; +941,687 ( 0.27%) 771 ( 0.10%) 2 ( 0.65%) . => /home/.cargo/registry/src/index.crates.io-6f17d22bba15001f/regex-automata-0.4.6/src/dfa/onepass.rs:regex_automata::dfa::onepass::InternalBuilder::add_dfa_state_for_nfa_state (1,451x) + . . . . for byte in self + . . . . .classes + 1,451 ( 0.00%) . . . .representatives(trans.start..=trans.end) + . . . . .filter_map(|r| r.as_u8()) + . . . . { + . . . . let oldtrans = self.dfa.transition(dfa_id, byte); + . . . . let newtrans = + 1,851 ( 0.00%) . . . Transition::new(self.matched, next_dfa_id, epsilons); + . . . . // If the old transition points to the DEAD state, then we know + . . . . // 'byte' has not been mapped to any transition for this DFA state + . . . . // yet. So set it unconditionally. Otherwise, we require that the + . . . . // old and new transitions are equivalent. Otherwise, there is + . . . . // ambiguity and thus the regex is not one-pass. + 1,851 ( 0.00%) . . . if oldtrans.state_id() == DEAD { + . . . . self.dfa.set_transition(dfa_id, byte, newtrans); + 80 ( 0.00%) . . . } else if oldtrans != newtrans { + 400 ( 0.00%) . . . return Err(BuildError::not_one_pass( + . . . . "conflicting transition", + . . . . )); + . . . . } + . . . . } + 1,371 ( 0.00%) . . . Ok(()) +10,157 ( 0.00%) . . . } + . . . . + . . . . /// Add a start state to the DFA corresponding to the given NFA starting + . . . . /// state ID. + . . . . /// + . . . . /// If adding a state would blow any limits (configured or hard-coded), + . . . . /// then an error is returned. + . . . . /// + . . . . /// If the starting state is an anchored state for a particular pattern, +-- line 804 ---------------------------------------- +-- line 809 ---------------------------------------- + . . . . fn add_start_state( + . . . . &mut self, + . . . . pid: Option, + . . . . nfa_id: StateID, + . . . . ) -> Result { + . . . . match pid { + . . . . // With no pid, this should be the start state for all patterns + . . . . // and thus be the first one. + 81 ( 0.00%) . . . None => assert!(self.dfa.starts.is_empty()), + . . . . // With a pid, we want it to be at self.dfa.starts[pid+1]. + 162 ( 0.00%) . . . Some(pid) => assert!(self.dfa.starts.len() == pid.one_more()), + . . . . } + 324 ( 0.00%) . . . let dfa_id = self.add_dfa_state_for_nfa_state(nfa_id)?; +249,472 ( 0.07%) 240 ( 0.03%) . . => /home/.cargo/registry/src/index.crates.io-6f17d22bba15001f/regex-automata-0.4.6/src/dfa/onepass.rs:regex_automata::dfa::onepass::InternalBuilder::add_dfa_state_for_nfa_state (162x) + . . . . self.dfa.starts.push(dfa_id); + . . . . Ok(dfa_id) + . . . . } + . . . . + . . . . /// Add a new DFA state corresponding to the given NFA state. If adding a + . . . . /// state would blow any limits (configured or hard-coded), then an error + . . . . /// is returned. If a DFA state already exists for the given NFA state, + . . . . /// then that DFA state's ID is returned and no new states are added. + . . . . /// + . . . . /// It is not expected that this routine is called for every NFA state. + . . . . /// Instead, an NFA state ID will usually correspond to the "start" state + . . . . /// for a sub-graph of the NFA, where all states in the sub-graph are + . . . . /// reachable via epsilon transitions (conditional or unconditional). That + . . . . /// sub-graph of NFA states is ultimately what produces a single DFA state. +12,904 ( 0.00%) . . . fn add_dfa_state_for_nfa_state( + . . . . &mut self, + . . . . nfa_id: StateID, + . . . . ) -> Result { + . . . . // If we've already built a DFA state for the given NFA state, then + . . . . // just return that. We definitely do not want to have more than one + . . . . // DFA state in existence for the same NFA state, since all but one of + . . . . // them will likely become unreachable. And at least some of them are + . . . . // likely to wind up being incomplete. + 1,613 ( 0.00%) . . . let existing_dfa_id = self.nfa_to_dfa_id[nfa_id]; + 1,613 ( 0.00%) . . . if existing_dfa_id != DEAD { + 547 ( 0.00%) . . . return Ok(existing_dfa_id); + . . . . } + . . . . // If we don't have any DFA state yet, add it and then add the given + . . . . // NFA state to the list of states to explore. + . . . . let dfa_id = self.add_empty_state()?; + 1,066 ( 0.00%) . . . self.nfa_to_dfa_id[nfa_id] = dfa_id; + 154 ( 0.00%) . . . self.uncompiled_nfa_ids.push(nfa_id); + 2,132 ( 0.00%) . . . Ok(dfa_id) +12,904 ( 0.00%) . . . } + . . . . + . . . . /// Unconditionally add a new empty DFA state. If adding it would exceed + . . . . /// any limits (configured or hard-coded), then an error is returned. The + . . . . /// ID of the new state is returned on success. + . . . . /// + . . . . /// The added state is *not* a match state. + . . . . fn add_empty_state(&mut self) -> Result { + . . . . let state_limit = Transition::STATE_ID_LIMIT; +-- line 863 ---------------------------------------- +-- line 864 ---------------------------------------- + . . . . // Note that unlike dense and lazy DFAs, we specifically do NOT + . . . . // premultiply our state IDs here. The reason is that we want to pack + . . . . // our state IDs into 64-bit transitions with other info, so the fewer + . . . . // the bits we use for state IDs the better. If we premultiply, then + . . . . // our state ID space shrinks. We justify this by the assumption that + . . . . // a one-pass DFA is just already doing a fair bit more work than a + . . . . // normal DFA anyway, so an extra multiplication to compute a state + . . . . // transition doesn't seem like a huge deal. + 4,264 ( 0.00%) . . . let next_id = self.dfa.table.len() >> self.dfa.stride2(); + . . . . let id = StateID::new(next_id) + . . . . .map_err(|_| BuildError::too_many_states(state_limit))?; + 2,132 ( 0.00%) . . . if id.as_u64() > Transition::STATE_ID_LIMIT { + . . . . return Err(BuildError::too_many_states(state_limit)); + . . . . } + . . . . self.dfa + . . . . .table + . . . . .extend(core::iter::repeat(Transition(0)).take(self.dfa.stride())); + . . . . // The default empty value for 'PatternEpsilons' is sadly not all + . . . . // zeroes. Instead, a special sentinel is used to indicate that there + . . . . // is no pattern. So we need to explicitly set the pattern epsilons to + . . . . // the correct "empty" PatternEpsilons. + . . . . self.dfa.set_pattern_epsilons(id, PatternEpsilons::empty()); + 2,294 ( 0.00%) . . . if let Some(size_limit) = self.config.get_size_limit() { + 2,294 ( 0.00%) . . . if self.dfa.memory_usage() > size_limit { + . . . . return Err(BuildError::exceeded_size_limit(size_limit)); + . . . . } + . . . . } + . . . . Ok(id) + . . . . } + . . . . + . . . . /// Push the given NFA state ID and its corresponding epsilons (slots and + . . . . /// conditional epsilon transitions) on to a stack for use in a depth first + . . . . /// traversal of a sub-graph of the NFA. + . . . . /// + . . . . /// If the given NFA state ID has already been pushed on to the stack, then + . . . . /// it indicates the regex is not one-pass and this correspondingly returns + . . . . /// an error. +18,704 ( 0.01%) . . . fn stack_push( + . . . . &mut self, + . . . . nfa_id: StateID, + . . . . epsilons: Epsilons, + . . . . ) -> Result<(), BuildError> { + . . . . // If we already have seen a match and we are compiling a leftmost + . . . . // first DFA, then we shouldn't add any more states to look at. This is + . . . . // effectively how preference order and non-greediness is implemented. + . . . . // if !self.config.get_match_kind().continue_past_first_match() + . . . . // && self.matched + . . . . // { + . . . . // return Ok(()); + . . . . // } + 2,672 ( 0.00%) . . . if !self.seen.insert(nfa_id) { + . . . . return Err(BuildError::not_one_pass( + . . . . "multiple epsilon transitions to same state", + . . . . )); + . . . . } + 211 ( 0.00%) . . . self.stack.push((nfa_id, epsilons)); + 2,672 ( 0.00%) . . . Ok(()) +16,032 ( 0.00%) . . . } + . . . . } + . . . . + . . . . /// A one-pass DFA for executing a subset of anchored regex searches while + . . . . /// resolving capturing groups. + . . . . /// + . . . . /// A one-pass DFA can be built from an NFA that is one-pass. An NFA is + . . . . /// one-pass when there is never any ambiguity about how to continue a search. + . . . . /// For example, `a*a` is not one-pass becuase during a search, it's not +-- line 929 ---------------------------------------- +-- line 1438 ---------------------------------------- + . . . . + . . . . /// Returns the total number of states in this one-pass DFA. + . . . . /// + . . . . /// Note that unlike dense or sparse DFAs, a one-pass DFA does not expose + . . . . /// a low level DFA API. Therefore, this routine has little use other than + . . . . /// being informational. + . . . . #[inline] + . . . . pub fn state_len(&self) -> usize { + 6 ( 0.00%) . . . self.table.len() >> self.stride2() + . . . . } + . . . . + . . . . /// Returns the total number of elements in the alphabet for this DFA. + . . . . /// + . . . . /// That is, this returns the total number of transitions that each + . . . . /// state in this DFA must have. The maximum alphabet size is 256, which + . . . . /// corresponds to each possible byte value. + . . . . /// +-- line 1454 ---------------------------------------- +-- line 1499 ---------------------------------------- + . . . . /// than `8`. (Do note that a maximal stride is incredibly rare, as it + . . . . /// would imply that there is almost no redundant in the regex pattern.) + . . . . /// + . . . . /// Note that unlike dense or sparse DFAs, a one-pass DFA does not expose + . . . . /// a low level DFA API. Therefore, this routine has little use other than + . . . . /// being informational. + . . . . #[inline] + . . . . pub fn stride2(&self) -> usize { + 3,214 ( 0.00%) . . . self.stride2 + . . . . } + . . . . + . . . . /// Returns the total stride for every state in this DFA. This corresponds + . . . . /// to the total number of transitions used by each state in this DFA's + . . . . /// transition table. + . . . . /// + . . . . /// Please see [`DFA::stride2`] for more information. In particular, this + . . . . /// returns the stride as the number of transitions, where as `stride2` + . . . . /// returns it as the exponent of a power of 2. + . . . . /// + . . . . /// Note that unlike dense or sparse DFAs, a one-pass DFA does not expose + . . . . /// a low level DFA API. Therefore, this routine has little use other than + . . . . /// being informational. + . . . . #[inline] + . . . . pub fn stride(&self) -> usize { + 2,294 ( 0.00%) . . . 1 << self.stride2() + . . . . } + . . . . + . . . . /// Returns the memory usage, in bytes, of this DFA. + . . . . /// + . . . . /// The memory usage is computed based on the number of bytes used to + . . . . /// represent this DFA. + . . . . /// + . . . . /// This does **not** include the stack size used up by this DFA. To + . . . . /// compute that, use `std::mem::size_of::()`. + . . . . #[inline] + . . . . pub fn memory_usage(&self) -> usize { + . . . . use core::mem::size_of; + . . . . + 2,294 ( 0.00%) . . . self.table.len() * size_of::() + . . . . + self.starts.len() * size_of::() + . . . . } + . . . . } + . . . . + . . . . impl DFA { + . . . . /// Executes an anchored leftmost forward search, and returns true if and + . . . . /// only if this one-pass DFA matches the given haystack. + . . . . /// +-- line 1545 ---------------------------------------- +-- line 1963 ---------------------------------------- + . . . . /// let slot_start = pid.unwrap().as_usize() * 2; + . . . . /// let slot_end = slot_start + 1; + . . . . /// assert_eq!(Some(0), slots[slot_start].map(|s| s.get())); + . . . . /// assert_eq!(Some(3), slots[slot_end].map(|s| s.get())); + . . . . /// + . . . . /// # Ok::<(), Box>(()) + . . . . /// ``` + . . . . #[inline] + 13 ( 0.00%) . . . pub fn try_search_slots( + . . . . &self, + . . . . cache: &mut Cache, + . . . . input: &Input<'_>, + . . . . slots: &mut [Option], + . . . . ) -> Result, MatchError> { + 1 ( 0.00%) . . . let utf8empty = self.get_nfa().has_empty() && self.get_nfa().is_utf8(); + . . . . if !utf8empty { + . . . . return self.try_search_slots_imp(cache, input, slots); + . . . . } + . . . . // See PikeVM::try_search_slots for why we do this. + . . . . let min = self.get_nfa().group_info().implicit_slot_len(); + . . . . if slots.len() >= min { + . . . . return self.try_search_slots_imp(cache, input, slots); + . . . . } +-- line 1985 ---------------------------------------- +-- line 1995 ---------------------------------------- + . . . . let got = self.try_search_slots_imp(cache, input, &mut enough)?; + . . . . // This is OK because we know `enough_slots` is strictly bigger than + . . . . // `slots`, otherwise this special case isn't reached. + . . . . slots.copy_from_slice(&enough[..slots.len()]); + . . . . Ok(got) + . . . . } + . . . . + . . . . #[inline(never)] + 11 ( 0.00%) . . . fn try_search_slots_imp( + . . . . &self, + . . . . cache: &mut Cache, + . . . . input: &Input<'_>, + . . . . slots: &mut [Option], + . . . . ) -> Result, MatchError> { + 1 ( 0.00%) . . . let utf8empty = self.get_nfa().has_empty() && self.get_nfa().is_utf8(); + 1 ( 0.00%) . . . match self.search_imp(cache, input, slots)? { + . . . . None => return Ok(None), + . . . . Some(pid) if !utf8empty => return Ok(Some(pid)), + . . . . Some(pid) => { + . . . . // These slot indices are always correct because we know our + . . . . // 'pid' is valid and thus we know that the slot indices for it + . . . . // are valid. + . . . . let slot_start = pid.as_usize().wrapping_mul(2); + . . . . let slot_end = slot_start.wrapping_add(1); +-- line 2018 ---------------------------------------- +-- line 2028 ---------------------------------------- + . . . . // searches, we don't try to skip ahead to find the next match. + . . . . // We can just quit with nothing. + . . . . if start == end && !input.is_char_boundary(start) { + . . . . return Ok(None); + . . . . } + . . . . Ok(Some(pid)) + . . . . } + . . . . } + 9 ( 0.00%) . . . } + . . . . } + . . . . + . . . . impl DFA { + . . . . fn search_imp( + . . . . &self, + . . . . cache: &mut Cache, + . . . . input: &Input<'_>, + . . . . slots: &mut [Option], +-- line 2044 ---------------------------------------- +-- line 2075 ---------------------------------------- + . . . . // case, maybe an extra function call is OK, but even then, it might be + . . . . // too much of a latency hit. Another idea is to just try and figure + . . . . // out how to reduce the code size of 'find_match'. RE2 has a trick + . . . . // here where the match handling isn't done if we know the next byte of + . . . . // input yields a match too. Maybe we adopt that? + . . . . // + . . . . // This just might be a tricky DFA to optimize. + . . . . + 1 ( 0.00%) . . . if input.is_done() { + . . . . return Ok(None); + . . . . } + . . . . // We unfortunately have a bit of book-keeping to do to set things + . . . . // up. We do have to setup our cache and clear all of our slots. In + . . . . // particular, clearing the slots is necessary for the case where we + . . . . // report a match, but one of the capturing groups didn't participate + . . . . // in the match but had a span set from a previous search. That would + . . . . // be bad. In theory, we could avoid all this slot clearing if we knew + . . . . // that every slot was always activated for every match. Then we would + . . . . // know they would always be overwritten when a match is found. + . . . . let explicit_slots_len = core::cmp::min( + . . . . Slots::LIMIT, + 1 ( 0.00%) . . . slots.len().saturating_sub(self.explicit_slot_start), + . . . . ); + . . . . cache.setup_search(explicit_slots_len); + . . . . for slot in cache.explicit_slots() { + 5 ( 0.00%) . . . *slot = None; + 19 ( 0.00%) . . . => ./string/../sysdeps/x86_64/multiarch/memset-vec-unaligned-erms.S:__memset_avx2_unaligned_erms (1x) + . . . . } + . . . . for slot in slots.iter_mut() { + 5 ( 0.00%) . . . *slot = None; + 19 ( 0.00%) . . . => ./string/../sysdeps/x86_64/multiarch/memset-vec-unaligned-erms.S:__memset_avx2_unaligned_erms (1x) + . . . . } + . . . . // We set the starting slots for every pattern up front. This does + . . . . // increase our latency somewhat, but it avoids having to do it every + . . . . // time we see a match state (which could be many times in a single + . . . . // search if the match state consumes input). + . . . . for pid in self.nfa.patterns() { + 2 ( 0.00%) . . . let i = pid.as_usize() * 2; + 2 ( 0.00%) . . . if i >= slots.len() { + . . . . break; + . . . . } + 1 ( 0.00%) . . . slots[i] = NonMaxUsize::new(input.start()); + . . . . } + . . . . let mut pid = None; + 1 ( 0.00%) . . . let mut next_sid = match input.get_anchored() { + . . . . Anchored::Yes => self.start(), + . . . . Anchored::Pattern(pid) => self.start_pattern(pid)?, + . . . . Anchored::No => { + . . . . // If the regex is itself always anchored, then we're fine, + . . . . // even if the search is configured to be unanchored. + 1 ( 0.00%) . . . if !self.nfa.is_always_start_anchored() { + . . . . return Err(MatchError::unsupported_anchored( + . . . . Anchored::No, + . . . . )); + . . . . } + . . . . self.start() + . . . . } + . . . . }; + . . . . let leftmost_first = + . . . . matches!(self.config.get_match_kind(), MatchKind::LeftmostFirst); + . . . . for at in input.start()..input.end() { + . . . . let sid = next_sid; + 6 ( 0.00%) . . . let trans = self.transition(sid, input.haystack()[at]); + . . . . next_sid = trans.state_id(); + . . . . let epsilons = trans.epsilons(); + . . . . if sid >= self.min_match_id { + . . . . if self.find_match(cache, input, at, sid, slots, &mut pid) { + . . . . if input.get_earliest() + . . . . || (leftmost_first && trans.match_wins()) + . . . . { + . . . . return Ok(pid); + . . . . } + . . . . } + . . . . } + 2 ( 0.00%) . . . if sid == DEAD + 1 ( 0.00%) . . . || (!epsilons.looks().is_empty() + . . . . && !self.nfa.look_matcher().matches_set_inline( + . . . . epsilons.looks(), + . . . . input.haystack(), + . . . . at, + . . . . )) + . . . . { + . . . . return Ok(pid); + . . . . } +-- line 2156 ---------------------------------------- +-- line 2250 ---------------------------------------- + . . . . Ok(self.starts.get(pid.one_more()).copied().unwrap_or(DEAD)) + . . . . } + . . . . + . . . . /// Returns the transition from the given state ID and byte of input. The + . . . . /// transition includes the next state ID, the slots that should be saved + . . . . /// and any conditional epsilon transitions that must be satisfied in order + . . . . /// to take this transition. + . . . . fn transition(&self, sid: StateID, byte: u8) -> Transition { + 3,704 ( 0.00%) . . . let offset = sid.as_usize() << self.stride2(); + . . . . let class = self.classes.get(byte).as_usize(); + 7,408 ( 0.00%) . . . self.table[offset + class] + . . . . } + . . . . + . . . . /// Set the transition from the given state ID and byte of input to the + . . . . /// transition given. + . . . . fn set_transition(&mut self, sid: StateID, byte: u8, to: Transition) { + . . . . let offset = sid.as_usize() << self.stride2(); + . . . . let class = self.classes.get(byte).as_usize(); + 3,542 ( 0.00%) . . . self.table[offset + class] = to; + . . . . } + . . . . + . . . . /// Return an iterator of "sparse" transitions for the given state ID. + . . . . /// "sparse" in this context means that consecutive transitions that are + . . . . /// equivalent are returned as one group, and transitions to the DEAD state + . . . . /// are ignored. + . . . . /// + . . . . /// This winds up being useful for debug printing, since it's much terser +-- line 2276 ---------------------------------------- +-- line 2286 ---------------------------------------- + . . . . } + . . . . } + . . . . + . . . . /// Return the pattern epsilons for the given state ID. + . . . . /// + . . . . /// If the given state ID does not correspond to a match state ID, then the + . . . . /// pattern epsilons returned is empty. + . . . . fn pattern_epsilons(&self, sid: StateID) -> PatternEpsilons { + 74 ( 0.00%) . . . let offset = sid.as_usize() << self.stride2(); + 74 ( 0.00%) . . . PatternEpsilons(self.table[offset + self.pateps_offset].0) + . . . . } + . . . . + . . . . /// Set the pattern epsilons for the given state ID. + . . . . fn set_pattern_epsilons(&mut self, sid: StateID, pateps: PatternEpsilons) { + 4,069 ( 0.00%) . . . let offset = sid.as_usize() << self.stride2(); + 2,380 ( 0.00%) . . . self.table[offset + self.pateps_offset] = Transition(pateps.0); + . . . . } + . . . . + . . . . /// Returns the state ID prior to the one given. This returns None if the + . . . . /// given ID is the first DFA state. + . . . . fn prev_state_id(&self, id: StateID) -> Option { + . . . . if id == DEAD { + . . . . None + . . . . } else { +-- line 2309 ---------------------------------------- +-- line 2317 ---------------------------------------- + . . . . /// "last" in this context means the last state to appear in memory, i.e., + . . . . /// the one with the greatest ID. + . . . . fn last_state_id(&self) -> StateID { + . . . . // CORRECTNESS: A DFA table is always non-empty since it always at + . . . . // least contains a DEAD state. Since every state has the same stride, + . . . . // we can just compute what the "next" state ID would have been and + . . . . // then subtract 1 from it. + . . . . StateID::new_unchecked( + 1 ( 0.00%) . . . (self.table.len() >> self.stride2()).checked_sub(1).unwrap(), + . . . . ) + . . . . } + . . . . + . . . . /// Move the transitions from 'id1' to 'id2' and vice versa. + . . . . /// + . . . . /// WARNING: This does not update the rest of the transition table to have + . . . . /// transitions to 'id1' changed to 'id2' and vice versa. This merely moves + . . . . /// the states in memory. + . . . . pub(super) fn swap_states(&mut self, id1: StateID, id2: StateID) { + 3 ( 0.00%) . . . let o1 = id1.as_usize() << self.stride2(); + 3 ( 0.00%) . . . let o2 = id2.as_usize() << self.stride2(); + . . . . for b in 0..self.stride() { + . . . . self.table.swap(o1 + b, o2 + b); + . . . . } + . . . . } + . . . . + . . . . /// Map all state IDs in this DFA (transition table + start states) + . . . . /// according to the closure given. + . . . . pub(super) fn remap(&mut self, map: impl Fn(StateID) -> StateID) { + . . . . for i in 0..self.state_len() { + 148 ( 0.00%) . . . let offset = i << self.stride2(); + . . . . for b in 0..self.alphabet_len() { + . . . . let next = self.table[offset + b].state_id(); + . . . . self.table[offset + b].set_state_id(map(next)); + . . . . } + . . . . } + . . . . for i in 0..self.starts.len() { + 4 ( 0.00%) . . . self.starts[i] = map(self.starts[i]); + . . . . } + . . . . } + . . . . } + . . . . + . . . . impl core::fmt::Debug for DFA { + . . . . fn fmt(&self, f: &mut core::fmt::Formatter) -> core::fmt::Result { + . . . . fn debug_state_transitions( + . . . . f: &mut core::fmt::Formatter, +-- line 2361 ---------------------------------------- +-- line 2506 ---------------------------------------- + . . . . /// + . . . . /// A potentially more convenient routine to create a cache is + . . . . /// [`DFA::create_cache`], as it does not require also importing the + . . . . /// `Cache` type. + . . . . /// + . . . . /// If you want to reuse the returned `Cache` with some other one-pass DFA, + . . . . /// then you must call [`Cache::reset`] with the desired one-pass DFA. + . . . . pub fn new(re: &DFA) -> Cache { + 3 ( 0.00%) . . . let mut cache = Cache { explicit_slots: vec![], explicit_slot_len: 0 }; + . . . . cache.reset(re); + . . . . cache + . . . . } + . . . . + . . . . /// Reset this cache such that it can be used for searching with a + . . . . /// different [`onepass::DFA`](DFA). + . . . . /// + . . . . /// A cache reset permits reusing memory already allocated in this cache +-- line 2522 ---------------------------------------- +-- line 2552 ---------------------------------------- + . . . . /// assert_eq!( + . . . . /// Some(Match::must(0, 0..3)), + . . . . /// { re2.captures(&mut cache, "☃", &mut caps2); caps2.get_match() }, + . . . . /// ); + . . . . /// + . . . . /// # Ok::<(), Box>(()) + . . . . /// ``` + . . . . pub fn reset(&mut self, re: &DFA) { + 1 ( 0.00%) . . . let explicit_slot_len = re.get_nfa().group_info().explicit_slot_len(); + . . . . self.explicit_slots.resize(explicit_slot_len, None); + 1 ( 0.00%) . . . self.explicit_slot_len = explicit_slot_len; + . . . . } + . . . . + . . . . /// Returns the heap memory usage, in bytes, of this cache. + . . . . /// + . . . . /// This does **not** include the stack size used up by this cache. To + . . . . /// compute that, use `std::mem::size_of::()`. + . . . . pub fn memory_usage(&self) -> usize { + . . . . self.explicit_slots.len() * core::mem::size_of::>() + . . . . } + . . . . + . . . . fn explicit_slots(&mut self) -> &mut [Option] { + 2 ( 0.00%) . . . &mut self.explicit_slots[..self.explicit_slot_len] + . . . . } + . . . . + . . . . fn setup_search(&mut self, explicit_slot_len: usize) { + 1 ( 0.00%) . . . self.explicit_slot_len = explicit_slot_len; + . . . . } + . . . . } + . . . . + . . . . /// Represents a single transition in a one-pass DFA. + . . . . /// + . . . . /// The high 21 bits corresponds to the state ID. The bit following corresponds + . . . . /// to the special "match wins" flag. The remaining low 42 bits corresponds to + . . . . /// the transition epsilons, which contains the slots that should be saved when + . . . . /// this transition is followed and the conditional epsilon transitions that + . . . . /// must be satisfied in order to follow this transition. + . . . . #[derive(Clone, Copy, Eq, PartialEq)] + 80 ( 0.00%) . . . struct Transition(u64); + . . . . + . . . . impl Transition { + . . . . const STATE_ID_BITS: u64 = 21; + . . . . const STATE_ID_SHIFT: u64 = 64 - Transition::STATE_ID_BITS; + . . . . const STATE_ID_LIMIT: u64 = 1 << Transition::STATE_ID_BITS; + . . . . const MATCH_WINS_SHIFT: u64 = 64 - (Transition::STATE_ID_BITS + 1); + . . . . const INFO_MASK: u64 = 0x000003FF_FFFFFFFF; + . . . . + . . . . /// Return a new transition to the given state ID with the given epsilons. + . . . . fn new(match_wins: bool, sid: StateID, epsilons: Epsilons) -> Transition { + . . . . let match_wins = + 1,851 ( 0.00%) . . . if match_wins { 1 << Transition::MATCH_WINS_SHIFT } else { 0 }; + 5,994 ( 0.00%) . . . let sid = sid.as_u64() << Transition::STATE_ID_SHIFT; +13,839 ( 0.00%) . . . Transition(sid | match_wins | epsilons.0) + . . . . } + . . . . + . . . . /// Returns true if and only if this transition points to the DEAD state. + . . . . fn is_dead(self) -> bool { + . . . . self.state_id() == DEAD + . . . . } + . . . . + . . . . /// Return whether this transition has a "match wins" property. +-- line 2612 ---------------------------------------- +-- line 2623 ---------------------------------------- + . . . . + . . . . /// Return the "next" state ID that this transition points to. + . . . . fn state_id(&self) -> StateID { + . . . . // OK because a Transition has a valid StateID in its upper bits by + . . . . // construction. The cast to usize is also correct, even on 16-bit + . . . . // targets because, again, we know the upper bits is a valid StateID, + . . . . // which can never overflow usize on any supported target. + . . . . StateID::new_unchecked( +17,982 ( 0.01%) . . . (self.0 >> Transition::STATE_ID_SHIFT).as_usize(), + . . . . ) + . . . . } + . . . . + . . . . /// Set the "next" state ID in this transition. + . . . . fn set_state_id(&mut self, sid: StateID) { + 5,994 ( 0.00%) . . . *self = Transition::new(self.match_wins(), sid, self.epsilons()); + . . . . } + . . . . + . . . . /// Return the epsilons embedded in this transition. + . . . . fn epsilons(&self) -> Epsilons { + . . . . Epsilons(self.0 & Transition::INFO_MASK) + . . . . } + . . . . } + . . . . +-- line 2645 ---------------------------------------- +-- line 2699 ---------------------------------------- + . . . . /// no pattern ID and an empty epsilons. + . . . . fn is_empty(self) -> bool { + . . . . self.pattern_id().is_none() && self.epsilons().is_empty() + . . . . } + . . . . + . . . . /// Return the pattern ID in this pattern epsilons if one exists. + . . . . fn pattern_id(self) -> Option { + . . . . let pid = self.0 >> PatternEpsilons::PATTERN_ID_SHIFT; + 148 ( 0.00%) . . . if pid == PatternEpsilons::PATTERN_ID_LIMIT { + . . . . None + . . . . } else { + . . . . Some(PatternID::new_unchecked(pid.as_usize())) + . . . . } + . . . . } + . . . . + . . . . /// Returns the pattern ID without checking whether it's valid. If this is + . . . . /// called and there is no pattern ID in this `PatternEpsilons`, then this +-- line 2715 ---------------------------------------- +-- line 2722 ---------------------------------------- + . . . . let pid = self.0 >> PatternEpsilons::PATTERN_ID_SHIFT; + . . . . PatternID::new_unchecked(pid.as_usize()) + . . . . } + . . . . + . . . . /// Return a new pattern epsilons with the given pattern ID, but the same + . . . . /// epsilons. + . . . . fn set_pattern_id(self, pid: PatternID) -> PatternEpsilons { + . . . . PatternEpsilons( + 1 ( 0.00%) . . . (pid.as_u64() << PatternEpsilons::PATTERN_ID_SHIFT) + . . . . | (self.0 & PatternEpsilons::EPSILONS_MASK), + . . . . ) + . . . . } + . . . . + . . . . /// Return the epsilons part of this pattern epsilons. + . . . . fn epsilons(self) -> Epsilons { + . . . . Epsilons(self.0 & PatternEpsilons::EPSILONS_MASK) + . . . . } + . . . . + . . . . /// Return a new pattern epsilons with the given epsilons, but the same + . . . . /// pattern ID. + . . . . fn set_epsilons(self, epsilons: Epsilons) -> PatternEpsilons { + . . . . PatternEpsilons( + 1 ( 0.00%) . . . (self.0 & PatternEpsilons::PATTERN_ID_MASK) + 3 ( 0.00%) . . . | (u64::from(epsilons.0) & PatternEpsilons::EPSILONS_MASK), + . . . . ) + . . . . } + . . . . } + . . . . + . . . . impl core::fmt::Debug for PatternEpsilons { + . . . . fn fmt(&self, f: &mut core::fmt::Formatter) -> core::fmt::Result { + . . . . if self.is_empty() { + . . . . return write!(f, "N/A"); +-- line 2753 ---------------------------------------- +-- line 2797 ---------------------------------------- + . . . . + . . . . /// Returns true if this epsilons contains no slots and no assertions. + . . . . fn is_empty(self) -> bool { + . . . . self.0 == 0 + . . . . } + . . . . + . . . . /// Returns the slot epsilon transitions. + . . . . fn slots(self) -> Slots { + 529 ( 0.00%) . . . Slots((self.0 >> Epsilons::SLOT_SHIFT).low_u32()) + . . . . } + . . . . + . . . . /// Set the slot epsilon transitions. + . . . . fn set_slots(self, slots: Slots) -> Epsilons { + . . . . Epsilons( + 528 ( 0.00%) . . . (u64::from(slots.0) << Epsilons::SLOT_SHIFT) + 264 ( 0.00%) . . . | (self.0 & Epsilons::LOOK_MASK), + . . . . ) + . . . . } + . . . . + . . . . /// Return the set of look-around assertions in these epsilon transitions. + . . . . fn looks(self) -> LookSet { + . . . . LookSet { bits: (self.0 & Epsilons::LOOK_MASK).low_u32() } + . . . . } + . . . . + . . . . /// Set the look-around assertions on these epsilon transitions. + . . . . fn set_looks(self, look_set: LookSet) -> Epsilons { + . . . . Epsilons( + 198 ( 0.00%) . . . (self.0 & Epsilons::SLOT_MASK) + 66 ( 0.00%) . . . | (u64::from(look_set.bits) & Epsilons::LOOK_MASK), + . . . . ) + . . . . } + . . . . } + . . . . + . . . . impl core::fmt::Debug for Epsilons { + . . . . fn fmt(&self, f: &mut core::fmt::Formatter) -> core::fmt::Result { + . . . . let mut wrote = false; + . . . . if !self.slots().is_empty() { +-- line 2833 ---------------------------------------- +-- line 2884 ---------------------------------------- + . . . . struct Slots(u32); + . . . . + . . . . impl Slots { + . . . . const LIMIT: usize = 32; + . . . . + . . . . /// Insert the slot at the given bit index. + . . . . fn insert(self, slot: usize) -> Slots { + . . . . debug_assert!(slot < Slots::LIMIT); + 264 ( 0.00%) . . . Slots(self.0 | (1 << slot.as_u32())) + . . . . } + . . . . + . . . . /// Remove the slot at the given bit index. + . . . . fn remove(self, slot: usize) -> Slots { + . . . . debug_assert!(slot < Slots::LIMIT); + . . . . Slots(self.0 & !(1 << slot.as_u32())) + . . . . } + . . . . + . . . . /// Returns true if and only if this set contains no slots. + . . . . fn is_empty(self) -> bool { + 1 ( 0.00%) . . . self.0 == 0 + . . . . } + . . . . + . . . . /// Returns an iterator over all of the set bits in this set. + . . . . fn iter(self) -> SlotsIter { + . . . . SlotsIter { slots: self } + . . . . } + . . . . + . . . . /// For the position `at` in the current haystack, copy it to +-- line 2911 ---------------------------------------- +-- line 2917 ---------------------------------------- + . . . . /// The slice *must* correspond only to the explicit slots and the first + . . . . /// element of the slice must always correspond to the first explicit slot + . . . . /// in the corresponding NFA. + . . . . fn apply( + . . . . self, + . . . . at: usize, + . . . . caller_explicit_slots: &mut [Option], + . . . . ) { + 1 ( 0.00%) . . . if self.is_empty() { + . . . . return; + . . . . } + . . . . let at = NonMaxUsize::new(at); + . . . . for slot in self.iter() { + . . . . if slot >= caller_explicit_slots.len() { + . . . . break; + . . . . } + . . . . caller_explicit_slots[slot] = at; +-- line 2933 ---------------------------------------- + +38,815 ( 0.01%) . . . + +-------------------------------------------------------------------------------- +-- Auto-annotated source: /home/.cargo/registry/src/index.crates.io-6f17d22bba15001f/regex-automata-0.4.6/src/util/sparse_set.rs +-------------------------------------------------------------------------------- +Ir Ge sysCount sysTime + +-- line 37 ---------------------------------------- + . . . . pub(crate) set1: SparseSet, + . . . . pub(crate) set2: SparseSet, + . . . . } + . . . . + . . . . impl SparseSets { + . . . . /// Create a new pair of sparse sets where each set has the given capacity. + . . . . /// + . . . . /// This panics if the capacity given is bigger than `StateID::LIMIT`. + 819 ( 0.00%) . . . pub(crate) fn new(capacity: usize) -> SparseSets { + 2,106 ( 0.00%) . . . SparseSets { + . . . . set1: SparseSet::new(capacity), + . . . . set2: SparseSet::new(capacity), + . . . . } + 1,053 ( 0.00%) . . . } + . . . . + . . . . /// Resizes these sparse sets to have the new capacity given. + . . . . /// + . . . . /// The sets are automatically cleared. + . . . . /// + . . . . /// This panics if the capacity given is bigger than `StateID::LIMIT`. + . . . . #[inline] + . . . . pub(crate) fn resize(&mut self, new_capacity: usize) { +-- line 58 ---------------------------------------- +-- line 68 ---------------------------------------- + . . . . + . . . . /// Swap set1 with set2. + . . . . pub(crate) fn swap(&mut self) { + . . . . core::mem::swap(&mut self.set1, &mut self.set2); + . . . . } + . . . . + . . . . /// Returns the memory usage, in bytes, used by this pair of sparse sets. + . . . . pub(crate) fn memory_usage(&self) -> usize { + 1,467 ( 0.00%) . . . self.set1.memory_usage() + self.set2.memory_usage() + . . . . } + . . . . } + . . . . + . . . . /// A sparse set used for representing ordered NFA states. + . . . . /// + . . . . /// This supports constant time addition and membership testing. Clearing an + . . . . /// entire set can also be done in constant time. Iteration yields elements + . . . . /// in the order in which they were inserted. +-- line 84 ---------------------------------------- +-- line 110 ---------------------------------------- + . . . . /// + . . . . /// Sparse sets have a fixed size and they cannot grow. Attempting to + . . . . /// insert more distinct elements than the total capacity of the set will + . . . . /// result in a panic. + . . . . /// + . . . . /// This panics if the capacity given is bigger than `StateID::LIMIT`. + . . . . #[inline] + . . . . pub(crate) fn new(capacity: usize) -> SparseSet { + 2,823 ( 0.00%) . . . let mut set = SparseSet { len: 0, dense: vec![], sparse: vec![] }; + . . . . set.resize(capacity); + . . . . set + . . . . } + . . . . + . . . . /// Resizes this sparse set to have the new capacity given. + . . . . /// + . . . . /// This set is automatically cleared. + . . . . /// + . . . . /// This panics if the capacity given is bigger than `StateID::LIMIT`. + . . . . #[inline] + . . . . pub(crate) fn resize(&mut self, new_capacity: usize) { + 479 ( 0.00%) . . . assert!( + 677 ( 0.00%) . . . new_capacity <= StateID::LIMIT, + . . . . "sparse set capacity cannot excced {:?}", + . . . . StateID::LIMIT + . . . . ); + . . . . self.clear(); + . . . . self.dense.resize(new_capacity, StateID::ZERO); + . . . . self.sparse.resize(new_capacity, StateID::ZERO); + . . . . } + . . . . +-- line 139 ---------------------------------------- +-- line 144 ---------------------------------------- + . . . . #[inline] + . . . . pub(crate) fn capacity(&self) -> usize { + . . . . self.dense.len() + . . . . } + . . . . + . . . . /// Returns the number of elements in this set. + . . . . #[inline] + . . . . pub(crate) fn len(&self) -> usize { +10,258 ( 0.00%) . . . self.len + . . . . } + . . . . + . . . . /// Returns true if and only if this set is empty. + . . . . #[inline] + . . . . pub(crate) fn is_empty(&self) -> bool { + 436 ( 0.00%) . . . self.len() == 0 + . . . . } + . . . . + . . . . /// Insert the state ID value into this set and return true if the given + . . . . /// state ID was not previously in this set. + . . . . /// + . . . . /// This operation is idempotent. If the given value is already in this + . . . . /// set, then this is a no-op. + . . . . /// + . . . . /// If more than `capacity` ids are inserted, then this panics. + . . . . /// + . . . . /// This is marked as inline(always) since the compiler won't inline it + . . . . /// otherwise, and it's a fairly hot piece of code in DFA determinization. + . . . . #[cfg_attr(feature = "perf-inline", inline(always))] + . . . . pub(crate) fn insert(&mut self, id: StateID) -> bool { + 5,308 ( 0.00%) . . . if self.contains(id) { + . . . . return false; + . . . . } + . . . . + . . . . let i = self.len(); + 7,016 ( 0.00%) . . . assert!( + 7,016 ( 0.00%) . . . i < self.capacity(), + . . . . "{:?} exceeds capacity of {:?} when inserting {:?}", + . . . . i, + . . . . self.capacity(), + . . . . id, + . . . . ); + . . . . // OK since i < self.capacity() and self.capacity() is guaranteed to + . . . . // be <= StateID::LIMIT. + . . . . let index = StateID::new_unchecked(i); + 7,016 ( 0.00%) . . . self.dense[index] = id; + 8,166 ( 0.00%) . . . self.sparse[id] = index; + 8,215 ( 0.00%) . . . self.len += 1; + . . . . true + . . . . } + . . . . + . . . . /// Returns true if and only if this set contains the given value. + . . . . #[inline] + . . . . pub(crate) fn contains(&self, id: StateID) -> bool { + 7,016 ( 0.00%) . . . let index = self.sparse[id]; +14,032 ( 0.00%) . . . index.as_usize() < self.len() && self.dense[index] == id + . . . . } + . . . . + . . . . /// Clear this set such that it has no members. + . . . . #[inline] + . . . . pub(crate) fn clear(&mut self) { + 1,683 ( 0.00%) . . . self.len = 0; + . . . . } + . . . . + . . . . #[inline] + . . . . pub(crate) fn iter(&self) -> SparseSetIter<'_> { + 477 ( 0.00%) . . . SparseSetIter(self.dense[..self.len()].iter()) + . . . . } + . . . . + . . . . /// Returns the heap memory usage, in bytes, used by this sparse set. + . . . . #[inline] + . . . . pub(crate) fn memory_usage(&self) -> usize { + 1,568 ( 0.00%) . . . self.dense.len() * StateID::SIZE + self.sparse.len() * StateID::SIZE + . . . . } + . . . . } + . . . . + . . . . impl core::fmt::Debug for SparseSet { + . . . . fn fmt(&self, f: &mut core::fmt::Formatter) -> core::fmt::Result { + . . . . let elements: Vec = self.iter().collect(); + . . . . f.debug_tuple("SparseSet").field(&elements).finish() + . . . . } +-- line 223 ---------------------------------------- + + 3,566 ( 0.00%) . . . + +-------------------------------------------------------------------------------- +-- Auto-annotated source: /home/.cargo/registry/src/index.crates.io-6f17d22bba15001f/regex-automata-0.4.6/src/hybrid/dfa.rs +-------------------------------------------------------------------------------- +Ir Ge sysCount sysTime + +-- line 291 ---------------------------------------- + . . . . + . . . . /// Create a new cache for this lazy DFA. + . . . . /// + . . . . /// The cache returned should only be used for searches for this + . . . . /// lazy DFA. If you want to reuse the cache for another DFA, then + . . . . /// you must call [`Cache::reset`] with that DFA (or, equivalently, + . . . . /// [`DFA::reset_cache`]). + . . . . pub fn create_cache(&self) -> Cache { + 22 ( 0.00%) . . . Cache::new(self) +146,780 ( 0.04%) 139 ( 0.02%) . . => /home/.cargo/registry/src/index.crates.io-6f17d22bba15001f/regex-automata-0.4.6/src/hybrid/dfa.rs:regex_automata::hybrid::dfa::Cache::new (11x) + . . . . } + . . . . + . . . . /// Reset the given cache such that it can be used for searching with the + . . . . /// this lazy DFA (and only this DFA). + . . . . /// + . . . . /// A cache reset permits reusing memory already allocated in this cache + . . . . /// with a different lazy DFA. + . . . . /// +-- line 307 ---------------------------------------- +-- line 400 ---------------------------------------- + . . . . /// byte to its corresponding equivalence class. In practice this has a + . . . . /// negligible impact on performance. + . . . . pub fn byte_classes(&self) -> &ByteClasses { + . . . . &self.classes + . . . . } + . . . . + . . . . /// Returns this lazy DFA's configuration. + . . . . pub fn get_config(&self) -> &Config { + 45 ( 0.00%) . . . &self.config + . . . . } + . . . . + . . . . /// Returns a reference to the underlying NFA. + . . . . pub fn get_nfa(&self) -> &thompson::NFA { + 259 ( 0.00%) . . . &self.nfa + . . . . } + . . . . + . . . . /// Returns the stride, as a base-2 exponent, required for these + . . . . /// equivalence classes. + . . . . /// + . . . . /// The stride is always the smallest power of 2 that is greater than or + . . . . /// equal to the alphabet length. This is done so that converting between + . . . . /// state IDs and indices can be done with shifts alone, which is much +-- line 421 ---------------------------------------- +-- line 423 ---------------------------------------- + . . . . fn stride2(&self) -> usize { + . . . . self.stride2 + . . . . } + . . . . + . . . . /// Returns the total stride for every state in this lazy DFA. This + . . . . /// corresponds to the total number of transitions used by each state in + . . . . /// this DFA's transition table. + . . . . fn stride(&self) -> usize { + 2,700 ( 0.00%) . . . 1 << self.stride2() + . . . . } + . . . . + . . . . /// Returns the memory usage, in bytes, of this lazy DFA. + . . . . /// + . . . . /// This does **not** include the stack size used up by this lazy DFA. To + . . . . /// compute that, use `std::mem::size_of::()`. This also does not + . . . . /// include the size of the `Cache` used. + . . . . /// +-- line 439 ---------------------------------------- +-- line 586 ---------------------------------------- + . . . . /// # Ok::<(), Box>(()) + . . . . /// ``` + . . . . #[inline] + . . . . pub fn try_search_fwd( + . . . . &self, + . . . . cache: &mut Cache, + . . . . input: &Input<'_>, + . . . . ) -> Result, MatchError> { + 45 ( 0.00%) . . . let utf8empty = self.get_nfa().has_empty() && self.get_nfa().is_utf8(); + 315 ( 0.00%) . . . let hm = match search::find_fwd(self, cache, input)? { +658,877 ( 0.19%) 694 ( 0.09%) . . => /home/.cargo/registry/src/index.crates.io-6f17d22bba15001f/regex-automata-0.4.6/src/hybrid/search.rs:regex_automata::hybrid::search::find_fwd (45x) + . . . . None => return Ok(None), + 20 ( 0.00%) . . . Some(hm) if !utf8empty => return Ok(Some(hm)), + . . . . Some(hm) => hm, + . . . . }; + . . . . // We get to this point when we know our DFA can match the empty string + . . . . // AND when UTF-8 mode is enabled. In this case, we skip any matches + . . . . // whose offset splits a codepoint. Such a match is necessarily a + . . . . // zero-width match, because UTF-8 mode requires the underlying NFA + . . . . // to be built such that all non-empty matches span valid UTF-8. + . . . . // Therefore, any match that ends in the middle of a codepoint cannot +-- line 605 ---------------------------------------- +-- line 1214 ---------------------------------------- + . . . . #[inline] + . . . . pub fn next_state( + . . . . &self, + . . . . cache: &mut Cache, + . . . . current: LazyStateID, + . . . . input: u8, + . . . . ) -> Result { + . . . . let class = usize::from(self.classes.get(input)); + 221 ( 0.00%) . . . let offset = current.as_usize_untagged() + class; + 448 ( 0.00%) . . . let sid = cache.trans[offset]; + 206 ( 0.00%) . . . if !sid.is_unknown() { + . . . . return Ok(sid); + . . . . } + . . . . let unit = alphabet::Unit::u8(input); + 875 ( 0.00%) . . . Lazy::new(self, cache).cache_next_state(current, unit) +511,566 ( 0.15%) 506 ( 0.06%) . . => /home/.cargo/registry/src/index.crates.io-6f17d22bba15001f/regex-automata-0.4.6/src/hybrid/dfa.rs:regex_automata::hybrid::dfa::Lazy::cache_next_state (218x) + . . . . } + . . . . + . . . . /// Transitions from the current state to the next state, given the next + . . . . /// byte of input and a state ID that is not tagged. + . . . . /// + . . . . /// The only reason to use this routine is performance. In particular, the + . . . . /// `next_state` method needs to do some additional checks, among them is + . . . . /// to account for identifiers to states that are not yet computed. In +-- line 1236 ---------------------------------------- +-- line 1415 ---------------------------------------- + . . . . pub unsafe fn next_state_untagged_unchecked( + . . . . &self, + . . . . cache: &Cache, + . . . . current: LazyStateID, + . . . . input: u8, + . . . . ) -> LazyStateID { + . . . . debug_assert!(!current.is_tagged()); + . . . . let class = usize::from(self.classes.get(input)); + 280 ( 0.00%) . . . let offset = current.as_usize_unchecked() + class; + 545 ( 0.00%) . . . *cache.trans.get_unchecked(offset) + . . . . } + . . . . + . . . . /// Transitions from the current state to the next state for the special + . . . . /// EOI symbol. + . . . . /// + . . . . /// The given cache is used to either reuse pre-computed state + . . . . /// transitions, or to store this newly computed transition for future + . . . . /// reuse. Thus, this routine guarantees that it will never return a state +-- line 1432 ---------------------------------------- +-- line 1551 ---------------------------------------- + . . . . /// error if the given configuration contains an unsupported [`Anchored`] + . . . . /// configuration. + . . . . #[cfg_attr(feature = "perf-inline", inline(always))] + . . . . pub fn start_state( + . . . . &self, + . . . . cache: &mut Cache, + . . . . config: &start::Config, + . . . . ) -> Result { + 135 ( 0.00%) . . . let lazy = LazyRef::new(self, cache); + . . . . let anchored = config.get_anchored(); + . . . . let start = match config.get_look_behind() { + . . . . None => Start::Text, + . . . . Some(byte) => { + . . . . if !self.quitset.is_empty() && self.quitset.contains(byte) { + . . . . return Err(StartError::quit(byte)); + . . . . } + . . . . self.start_map.get(byte) + . . . . } + . . . . }; + . . . . let start_id = lazy.get_cached_start_id(anchored, start)?; + 45 ( 0.00%) . . . if !start_id.is_unknown() { + . . . . return Ok(start_id); + . . . . } + 498 ( 0.00%) . . . Lazy::new(self, cache).cache_start_group(anchored, start) +126,821 ( 0.04%) 188 ( 0.02%) . . => /home/.cargo/registry/src/index.crates.io-6f17d22bba15001f/regex-automata-0.4.6/src/hybrid/dfa.rs:regex_automata::hybrid::dfa::Lazy::cache_start_group (41x) + . . . . } + . . . . + . . . . /// Return the ID of the start state for this lazy DFA when executing a + . . . . /// forward search. + . . . . /// + . . . . /// This is a convenience routine for calling [`DFA::start_state`] that + . . . . /// converts the given [`Input`] to a [start configuration](start::Config). + . . . . /// Additionally, if an error occurs, it is converted from a [`StartError`] +-- line 1582 ---------------------------------------- +-- line 1744 ---------------------------------------- + . . . . id: LazyStateID, + . . . . match_index: usize, + . . . . ) -> PatternID { + . . . . // This is an optimization for the very common case of a DFA with a + . . . . // single pattern. This conditional avoids a somewhat more costly path + . . . . // that finds the pattern ID from the corresponding `State`, which + . . . . // requires a bit of slicing/pointer-chasing. This optimization tends + . . . . // to only matter when matches are frequent. + 10 ( 0.00%) . . . if self.pattern_len() == 1 { + . . . . return PatternID::ZERO; + . . . . } + . . . . LazyRef::new(self, cache) + . . . . .get_cached_state(id) + . . . . .match_pattern(match_index) + . . . . } + . . . . } + . . . . +-- line 1760 ---------------------------------------- +-- line 1867 ---------------------------------------- + . . . . } + . . . . + . . . . impl Cache { + . . . . /// Create a new cache for the given lazy DFA. + . . . . /// + . . . . /// The cache returned should only be used for searches for the given DFA. + . . . . /// If you want to reuse the cache for another DFA, then you must call + . . . . /// [`Cache::reset`] with that DFA. + 585 ( 0.00%) . . . pub fn new(dfa: &DFA) -> Cache { + 2,340 ( 0.00%) . . . let mut cache = Cache { + . . . . trans: alloc::vec![], + . . . . starts: alloc::vec![], + . . . . states: alloc::vec![], + . . . . states_to_id: StateMap::new(), + 234 ( 0.00%) . . . sparses: SparseSets::new(dfa.get_nfa().states().len()), +396,782 ( 0.11%) 490 ( 0.06%) . . => /home/.cargo/registry/src/index.crates.io-6f17d22bba15001f/regex-automata-0.4.6/src/util/sparse_set.rs:regex_automata::util::sparse_set::SparseSets::new (117x) + . . . . stack: alloc::vec![], + . . . . scratch_state_builder: StateBuilderEmpty::new(), + . . . . state_saver: StateSaver::none(), + . . . . memory_usage_state: 0, + . . . . clear_count: 0, + . . . . bytes_searched: 0, + . . . . progress: None, + . . . . }; + . . . . debug!("pre-init lazy DFA cache size: {}", cache.memory_usage()); + 468 ( 0.00%) . . . Lazy { dfa, cache: &mut cache }.init_cache(); +2,295,976 ( 0.66%) 1,555 ( 0.19%) . . => /home/.cargo/registry/src/index.crates.io-6f17d22bba15001f/regex-automata-0.4.6/src/hybrid/dfa.rs:regex_automata::hybrid::dfa::Lazy::init_cache (117x) + . . . . debug!("post-init lazy DFA cache size: {}", cache.memory_usage()); + . . . . cache + 585 ( 0.00%) . . . } + . . . . + . . . . /// Reset this cache such that it can be used for searching with the given + . . . . /// lazy DFA (and only that DFA). + . . . . /// + . . . . /// A cache reset permits reusing memory already allocated in this cache + . . . . /// with a different lazy DFA. + . . . . /// + . . . . /// Resetting a cache sets its "clear count" to 0. This is relevant if the +-- line 1902 ---------------------------------------- +-- line 1949 ---------------------------------------- + . . . . /// Note that keeping track of search progress is _not necessary_ + . . . . /// for correct implementations of search using a lazy DFA. Keeping + . . . . /// track of search progress is only necessary if you want the + . . . . /// [`Config::minimum_bytes_per_state`] configuration knob to work. + . . . . #[inline] + . . . . pub fn search_start(&mut self, at: usize) { + . . . . // If a previous search wasn't marked as finished, then finish it + . . . . // now automatically. + 89 ( 0.00%) . . . if let Some(p) = self.progress.take() { + . . . . self.bytes_searched += p.len(); + . . . . } + 132 ( 0.00%) . . . self.progress = Some(SearchProgress { start: at, at }); + . . . . } + . . . . + . . . . /// Updates the current search to indicate that it has search to the + . . . . /// current position. + . . . . /// + . . . . /// No special care needs to be taken for reverse searches. Namely, the + . . . . /// position given may be _less than_ the starting position of the search. + . . . . /// + . . . . /// # Panics + . . . . /// + . . . . /// This panics if no search has been started by [`Cache::search_start`]. + . . . . #[inline] + . . . . pub fn search_update(&mut self, at: usize) { + . . . . let p = + . . . . self.progress.as_mut().expect("no in-progress search to update"); + 221 ( 0.00%) . . . p.at = at; + . . . . } + . . . . + . . . . /// Indicates that a search has finished at the given position. + . . . . /// + . . . . /// # Panics + . . . . /// + . . . . /// This panics if no search has been started by [`Cache::search_start`]. + . . . . #[inline] + 44 ( 0.00%) . . . pub fn search_finish(&mut self, at: usize) { + . . . . let mut p = + . . . . self.progress.take().expect("no in-progress search to finish"); + . . . . p.at = at; + 44 ( 0.00%) . . . self.bytes_searched += p.len(); + 88 ( 0.00%) . . . } + . . . . + . . . . /// Returns the total number of bytes that have been searched since this + . . . . /// cache was last cleared. + . . . . /// + . . . . /// This is useful for determining the efficiency of the cache. For + . . . . /// example, the lazy DFA uses this value in conjunction with the + . . . . /// [`Config::minimum_bytes_per_state`] knob to help determine whether it + . . . . /// should quit searching. +-- line 1998 ---------------------------------------- +-- line 2020 ---------------------------------------- + . . . . /// compute that, use `std::mem::size_of::()`. + . . . . pub fn memory_usage(&self) -> usize { + . . . . const ID_SIZE: usize = size_of::(); + . . . . const STATE_SIZE: usize = size_of::(); + . . . . + . . . . // NOTE: If you make changes to the below, then + . . . . // 'minimum_cache_capacity' should be updated correspondingly. + . . . . + 4,388 ( 0.00%) . . . self.trans.len() * ID_SIZE + . . . . + self.starts.len() * ID_SIZE + 1,568 ( 0.00%) . . . + self.states.len() * STATE_SIZE + . . . . // Maps likely use more memory than this, but it's probably close. + 784 ( 0.00%) . . . + self.states_to_id.len() * (STATE_SIZE + ID_SIZE) + . . . . + self.sparses.memory_usage() + . . . . + self.stack.capacity() * ID_SIZE + . . . . + self.scratch_state_builder.capacity() + . . . . // Heap memory used by 'State' in both 'states' and 'states_to_id'. + . . . . + self.memory_usage_state + . . . . } + . . . . } + . . . . +-- line 2040 ---------------------------------------- +-- line 2051 ---------------------------------------- + . . . . } + . . . . + . . . . impl SearchProgress { + . . . . /// Returns the length, in bytes, of this search so far. + . . . . /// + . . . . /// This automatically handles the case of a reverse search, where `at` + . . . . /// is likely to be less than `start`. + . . . . fn len(&self) -> usize { + 220 ( 0.00%) . . . if self.start <= self.at { + . . . . self.at - self.start + . . . . } else { + . . . . self.start - self.at + . . . . } + . . . . } + . . . . } + . . . . + . . . . /// A map from states to state identifiers. When using std, we use a standard +-- line 2067 ---------------------------------------- +-- line 2111 ---------------------------------------- + . . . . /// + . . . . /// Where 'all-codepoints-utf8-100x' is the UTF-8 encoding of every + . . . . /// codepoint, in sequence, repeated 100 times. + . . . . /// + . . . . /// With 'inline(never)' hyperfine reports 1.1s per run. With + . . . . /// 'inline(always)', hyperfine reports 1.23s. So that's a 10% improvement. + . . . . #[cold] + . . . . #[inline(never)] + 1,744 ( 0.00%) . . . fn cache_next_state( + . . . . &mut self, + . . . . mut current: LazyStateID, + . . . . unit: alphabet::Unit, + . . . . ) -> Result { + 436 ( 0.00%) . . . let stride2 = self.dfa.stride2(); + 218 ( 0.00%) . . . let empty_builder = self.get_state_builder(); + 872 ( 0.00%) . . . let builder = determinize::next( +151,074 ( 0.04%) 2 ( 0.00%) . . => /home/.cargo/registry/src/index.crates.io-6f17d22bba15001f/regex-automata-0.4.6/src/util/determinize/mod.rs:regex_automata::util::determinize::next (218x) + . . . . self.dfa.get_nfa(), + . . . . self.dfa.get_config().get_match_kind(), + 218 ( 0.00%) . . . &mut self.cache.sparses, + . . . . &mut self.cache.stack, + 654 ( 0.00%) . . . &self.cache.states[current.as_usize_untagged() >> stride2], + . . . . unit, + 1,308 ( 0.00%) . . . empty_builder, + . . . . ); + . . . . let save_state = !self.as_ref().state_builder_fits_in_cache(&builder); + 218 ( 0.00%) . . . if save_state { + . . . . self.save_state(current); + . . . . } + 1,002 ( 0.00%) . . . let next = self.add_builder_state(builder, |sid| sid)?; + 218 ( 0.00%) . . . if save_state { + . . . . current = self.saved_state_id(); + . . . . } + . . . . // This is the payoff. The next time 'next_state' is called with this + . . . . // state and alphabet unit, it will find this transition and avoid + . . . . // having to re-determinize this transition. + 1,090 ( 0.00%) . . . self.set_transition(current, unit, next); + 7,194 ( 0.00%) . . . => /home/.cargo/registry/src/index.crates.io-6f17d22bba15001f/regex-automata-0.4.6/src/hybrid/dfa.rs:regex_automata::hybrid::dfa::Lazy::set_transition (218x) + . . . . Ok(next) + 2,180 ( 0.00%) . . . } + . . . . + . . . . /// Compute and cache the starting state for the given pattern ID (if + . . . . /// present) and the starting configuration. + . . . . /// + . . . . /// This panics if a pattern ID is given and the DFA isn't configured to + . . . . /// build anchored start states for each pattern. + . . . . /// + . . . . /// This will never return an unknown lazy state ID. + . . . . /// + . . . . /// If caching this state would otherwise result in a cache that has been + . . . . /// cleared too many times, then an error is returned. + . . . . #[cold] + . . . . #[inline(never)] + 369 ( 0.00%) . . . fn cache_start_group( + . . . . &mut self, + . . . . anchored: Anchored, + . . . . start: Start, + . . . . ) -> Result { + 82 ( 0.00%) . . . let nfa_start_id = match anchored { + 82 ( 0.00%) . . . Anchored::No => self.dfa.get_nfa().start_unanchored(), + . . . . Anchored::Yes => self.dfa.get_nfa().start_anchored(), + . . . . Anchored::Pattern(pid) => { + . . . . if !self.dfa.get_config().get_starts_for_each_pattern() { + . . . . return Err(StartError::unsupported_anchored(anchored)); + . . . . } + . . . . match self.dfa.get_nfa().start_pattern(pid) { + . . . . None => return Ok(self.as_ref().dead_id()), + . . . . Some(sid) => sid, +-- line 2176 ---------------------------------------- +-- line 2178 ---------------------------------------- + . . . . } + . . . . }; + . . . . + . . . . let id = self + . . . . .cache_start_one(nfa_start_id, start) + . . . . .map_err(StartError::cache)?; + . . . . self.set_start_state(anchored, start, id); + . . . . Ok(id) + 451 ( 0.00%) . . . } + . . . . + . . . . /// Compute and cache the starting state for the given NFA state ID and the + . . . . /// starting configuration. The NFA state ID might be one of the following: + . . . . /// + . . . . /// 1) An unanchored start state to match any pattern. + . . . . /// 2) An anchored start state to match any pattern. + . . . . /// 3) An anchored start state for a particular pattern. + . . . . /// +-- line 2194 ---------------------------------------- +-- line 2196 ---------------------------------------- + . . . . /// + . . . . /// If caching this state would otherwise result in a cache that has been + . . . . /// cleared too many times, then an error is returned. + . . . . fn cache_start_one( + . . . . &mut self, + . . . . nfa_start_id: NFAStateID, + . . . . start: Start, + . . . . ) -> Result { + 41 ( 0.00%) . . . let mut builder_matches = self.get_state_builder().into_matches(); + 82 ( 0.00%) . . . determinize::set_lookbehind_from_start( + 1,378 ( 0.00%) . . . => /home/.cargo/registry/src/index.crates.io-6f17d22bba15001f/regex-automata-0.4.6/src/util/determinize/mod.rs:regex_automata::util::determinize::set_lookbehind_from_start (41x) + . . . . self.dfa.get_nfa(), + . . . . &start, + . . . . &mut builder_matches, + . . . . ); + . . . . self.cache.sparses.set1.clear(); + 164 ( 0.00%) . . . determinize::epsilon_closure( + 36,826 ( 0.01%) 14 ( 0.00%) . . => /home/.cargo/registry/src/index.crates.io-6f17d22bba15001f/regex-automata-0.4.6/src/util/determinize/mod.rs:regex_automata::util::determinize::epsilon_closure (41x) + . . . . self.dfa.get_nfa(), + . . . . nfa_start_id, + . . . . builder_matches.look_have(), + 41 ( 0.00%) . . . &mut self.cache.stack, + . . . . &mut self.cache.sparses.set1, + . . . . ); + 123 ( 0.00%) . . . let mut builder = builder_matches.into_nfa(); + 123 ( 0.00%) . . . determinize::add_nfa_states( + 39,758 ( 0.01%) 133 ( 0.02%) . . => /home/.cargo/registry/src/index.crates.io-6f17d22bba15001f/regex-automata-0.4.6/src/util/determinize/mod.rs:regex_automata::util::determinize::add_nfa_states (41x) + . . . . &self.dfa.get_nfa(), + . . . . &self.cache.sparses.set1, + . . . . &mut builder, + . . . . ); + . . . . let tag_starts = self.dfa.get_config().get_specialize_start_states(); + 205 ( 0.00%) . . . self.add_builder_state(builder, |id| { + 82 ( 0.00%) . . . if tag_starts { + . . . . id.to_start() + . . . . } else { + . . . . id + . . . . } + . . . . }) + . . . . } + . . . . + . . . . /// Either add the given builder state to this cache, or return an ID to an +-- line 2234 ---------------------------------------- +-- line 2242 ---------------------------------------- + . . . . /// + . . . . /// If caching this state would otherwise result in a cache that has been + . . . . /// cleared too many times, then an error is returned. + . . . . fn add_builder_state( + . . . . &mut self, + . . . . builder: StateBuilderNFA, + . . . . idmap: impl Fn(LazyStateID) -> LazyStateID, + . . . . ) -> Result { + 44 ( 0.00%) . . . if let Some(&cached_id) = + . . . . self.cache.states_to_id.get(builder.as_bytes()) + . . . . { + . . . . // Since we have a cached state, put the constructed state's + . . . . // memory back into our scratch space, so that it can be reused. + . . . . self.put_state_builder(builder); + . . . . return Ok(cached_id); + . . . . } + . . . . let result = self.add_state(builder.to_state(), idmap); +-- line 2258 ---------------------------------------- +-- line 2270 ---------------------------------------- + . . . . /// + . . . . /// If caching this state would otherwise result in a cache that has been + . . . . /// cleared too many times, then an error is returned. + . . . . fn add_state( + . . . . &mut self, + . . . . state: State, + . . . . idmap: impl Fn(LazyStateID) -> LazyStateID, + . . . . ) -> Result { + 566 ( 0.00%) . . . if !self.as_ref().state_fits_in_cache(&state) { + . . . . self.try_clear_cache()?; + . . . . } + . . . . // It's important for this to come second, since the above may clear + . . . . // the cache. If we clear the cache after ID generation, then the ID + . . . . // is likely bunk since it would have been generated based on a larger + . . . . // transition table. + 860 ( 0.00%) . . . let mut id = idmap(self.next_state_id()?); + 1,914 ( 0.00%) . . . => /home/.cargo/registry/src/index.crates.io-6f17d22bba15001f/regex-automata-0.4.6/src/hybrid/dfa.rs:regex_automata::hybrid::dfa::Lazy::next_state_id (174x) + 1,268 ( 0.00%) . . . if state.is_match() { + . . . . id = id.to_match(); + . . . . } + . . . . // Add room in the transition table. Since this is a fresh state, all + . . . . // of its transitions are unknown. + . . . . self.cache.trans.extend( + 566 ( 0.00%) . . . iter::repeat(self.as_ref().unknown_id()).take(self.dfa.stride()), + . . . . ); + . . . . // When we add a sentinel state, we never want to set any quit + . . . . // transitions. Technically, this is harmless, since sentinel states + . . . . // have all of their transitions set to loop back to themselves. But + . . . . // when creating sentinel states before the quit sentinel state, + . . . . // this will try to call 'set_transition' on a state ID that doesn't + . . . . // actually exist yet, which isn't allowed. So we just skip doing so + . . . . // entirely. + 683 ( 0.00%) . . . if !self.dfa.quitset.is_empty() && !self.as_ref().is_sentinel(id) { + . . . . let quit_id = self.as_ref().quit_id(); + . . . . for b in self.dfa.quitset.iter() { + . . . . self.set_transition(id, alphabet::Unit::u8(b), quit_id); + . . . . } + . . . . } + 566 ( 0.00%) . . . self.cache.memory_usage_state += state.memory_usage(); + 117 ( 0.00%) . . . self.cache.states.push(state.clone()); + 1,132 ( 0.00%) . . . self.cache.states_to_id.insert(state, id); + . . . . Ok(id) + . . . . } + . . . . + . . . . /// Allocate a new state ID. + . . . . /// + . . . . /// This will never return an unknown lazy state ID. + . . . . /// + . . . . /// If caching this state would otherwise result in a cache that has been + . . . . /// cleared too many times, then an error is returned. + 430 ( 0.00%) . . . fn next_state_id(&mut self) -> Result { + 215 ( 0.00%) . . . let sid = match LazyStateID::new(self.cache.trans.len()) { + . . . . Ok(sid) => sid, + . . . . Err(_) => { + . . . . self.try_clear_cache()?; + . . . . // This has to pass since we check that ID capacity at + . . . . // construction time can fit at least MIN_STATES states. + . . . . LazyStateID::new(self.cache.trans.len()).unwrap() + . . . . } + . . . . }; + . . . . Ok(sid) + 860 ( 0.00%) . . . } + . . . . + . . . . /// Attempt to clear the cache used by this lazy DFA. + . . . . /// + . . . . /// If clearing the cache exceeds the minimum number of required cache + . . . . /// clearings, then this will return a cache error. In this case, + . . . . /// callers should bubble this up as the cache can't be used until it is + . . . . /// reset. Implementations of search should convert this error into a + . . . . /// [`MatchError::gave_up`]. +-- line 2338 ---------------------------------------- +-- line 2497 ---------------------------------------- + . . . . /// Initialize this cache from emptiness to a place where it can be used + . . . . /// for search. + . . . . /// + . . . . /// This is called both at cache creation time and after the cache has been + . . . . /// cleared. + . . . . /// + . . . . /// Primarily, this adds the three sentinel states and allocates some + . . . . /// initial memory. + 936 ( 0.00%) . . . fn init_cache(&mut self) { + . . . . // Why multiply by 2 here? Because we make room for both the unanchored + . . . . // and anchored start states. Unanchored is first and then anchored. + . . . . let mut starts_len = Start::len().checked_mul(2).unwrap(); + . . . . // ... but if we also want start states for every pattern, we make room + . . . . // for that too. + 234 ( 0.00%) . . . if self.dfa.get_config().get_starts_for_each_pattern() { + 318 ( 0.00%) . . . starts_len += Start::len() * self.dfa.pattern_len(); + . . . . } + 117 ( 0.00%) . . . self.cache + . . . . .starts + . . . . .extend(iter::repeat(self.as_ref().unknown_id()).take(starts_len)); + . . . . // This is the set of NFA states that corresponds to each of our three + . . . . // sentinel states: the empty set. + 117 ( 0.00%) . . . let dead = State::dead(); + 44,904 ( 0.01%) . . . => /home/.cargo/registry/src/index.crates.io-6f17d22bba15001f/regex-automata-0.4.6/src/util/determinize/state.rs:regex_automata::util::determinize::state::State::dead (117x) + . . . . // This sets up some states that we use as sentinels that are present + . . . . // in every DFA. While it would be technically possible to implement + . . . . // this DFA without explicitly putting these states in the transition + . . . . // table, this is convenient to do to make `next_state` correct for all + . . . . // valid state IDs without needing explicit conditionals to special + . . . . // case these sentinel states. + . . . . // + . . . . // All three of these states are "dead" states. That is, all of + . . . . // them transition only to themselves. So once you enter one of + . . . . // these states, it's impossible to leave them. Thus, any correct + . . . . // search routine must explicitly check for these state types. (Sans + . . . . // `unknown`, since that is only used internally to represent missing + . . . . // states.) + . . . . let unk_id = + 117 ( 0.00%) . . . self.add_state(dead.clone(), |id| id.to_unknown()).unwrap(); + 117 ( 0.00%) . . . let dead_id = self.add_state(dead.clone(), |id| id.to_dead()).unwrap(); + 117 ( 0.00%) . . . let quit_id = self.add_state(dead.clone(), |id| id.to_quit()).unwrap(); + 234 ( 0.00%) . . . assert_eq!(unk_id, self.as_ref().unknown_id()); + 234 ( 0.00%) . . . assert_eq!(dead_id, self.as_ref().dead_id()); + 234 ( 0.00%) . . . assert_eq!(quit_id, self.as_ref().quit_id()); + . . . . // The idea here is that if you start in an unknown/dead/quit state and + . . . . // try to transition on them, then you should end up where you started. + . . . . self.set_all_transitions(unk_id, unk_id); + . . . . self.set_all_transitions(dead_id, dead_id); + . . . . self.set_all_transitions(quit_id, quit_id); + . . . . // All of these states are technically equivalent from the FSM + . . . . // perspective, so putting all three of them in the cache isn't + . . . . // possible. (They are distinct merely because we use their +-- line 2547 ---------------------------------------- +-- line 2577 ---------------------------------------- + . . . . self.cache + . . . . .state_saver + . . . . .take_saved() + . . . . .expect("state saver does not have saved state ID") + . . . . } + . . . . + . . . . /// Set all transitions on the state 'from' to 'to'. + . . . . fn set_all_transitions(&mut self, from: LazyStateID, to: LazyStateID) { + 89,505 ( 0.03%) . . . for unit in self.dfa.classes.representatives(..) { +134,478 ( 0.04%) . . . self.set_transition(from, unit, to); +738,576 ( 0.21%) . . . => /home/.cargo/registry/src/index.crates.io-6f17d22bba15001f/regex-automata-0.4.6/src/hybrid/dfa.rs:regex_automata::hybrid::dfa::Lazy::set_transition (22,413x) + . . . . } + . . . . } + . . . . + . . . . /// Set the transition on 'from' for 'unit' to 'to'. + . . . . /// + . . . . /// This panics if either 'from' or 'to' is invalid. + . . . . /// + . . . . /// All unit values are OK. + 67,893 ( 0.02%) . . . fn set_transition( + . . . . &mut self, + . . . . from: LazyStateID, + . . . . unit: alphabet::Unit, + . . . . to: LazyStateID, + . . . . ) { + 22,631 ( 0.01%) . . . assert!(self.as_ref().is_valid(from), "invalid 'from' id: {:?}", from); + . . . . assert!(self.as_ref().is_valid(to), "invalid 'to' id: {:?}", to); + . . . . let offset = + 22,631 ( 0.01%) . . . from.as_usize_untagged() + self.dfa.classes.get_by_unit(unit); + 45,262 ( 0.01%) . . . self.cache.trans[offset] = to; + 45,262 ( 0.01%) . . . } + . . . . + . . . . /// Set the start ID for the given pattern ID (if given) and starting + . . . . /// configuration to the ID given. + . . . . /// + . . . . /// This panics if 'id' is not valid or if a pattern ID is given and + . . . . /// 'starts_for_each_pattern' is not enabled. + . . . . fn set_start_state( + . . . . &mut self, + . . . . anchored: Anchored, + . . . . start: Start, + . . . . id: LazyStateID, + . . . . ) { + 41 ( 0.00%) . . . assert!(self.as_ref().is_valid(id)); + . . . . let start_index = start.as_usize(); + 82 ( 0.00%) . . . let index = match anchored { + . . . . Anchored::No => start_index, + . . . . Anchored::Yes => Start::len() + start_index, + . . . . Anchored::Pattern(pid) => { + . . . . assert!( + . . . . self.dfa.get_config().get_starts_for_each_pattern(), + . . . . "attempted to search for a specific pattern \ + . . . . without enabling starts_for_each_pattern", + . . . . ); + . . . . let pid = pid.as_usize(); + . . . . (2 * Start::len()) + (Start::len() * pid) + start_index + . . . . } + . . . . }; + 123 ( 0.00%) . . . self.cache.starts[index] = id; + . . . . } + . . . . + . . . . /// Returns a state builder from this DFA that might have existing + . . . . /// capacity. This helps avoid allocs in cases where a state is built that + . . . . /// turns out to already be cached. + . . . . /// + . . . . /// Callers must put the state builder back with 'put_state_builder', + . . . . /// otherwise the allocation reuse won't work. +-- line 2642 ---------------------------------------- +-- line 2679 ---------------------------------------- + . . . . /// unknown lazy state ID. + . . . . #[cfg_attr(feature = "perf-inline", inline(always))] + . . . . fn get_cached_start_id( + . . . . &self, + . . . . anchored: Anchored, + . . . . start: Start, + . . . . ) -> Result { + . . . . let start_index = start.as_usize(); + 135 ( 0.00%) . . . let index = match anchored { + . . . . Anchored::No => start_index, + . . . . Anchored::Yes => Start::len() + start_index, + . . . . Anchored::Pattern(pid) => { + . . . . if !self.dfa.get_config().get_starts_for_each_pattern() { + . . . . return Err(StartError::unsupported_anchored(anchored)); + . . . . } + . . . . if pid.as_usize() >= self.dfa.pattern_len() { + . . . . return Ok(self.dead_id()); + . . . . } + . . . . (2 * Start::len()) + . . . . + (Start::len() * pid.as_usize()) + . . . . + start_index + . . . . } + . . . . }; + 135 ( 0.00%) . . . Ok(self.cache.starts[index]) + . . . . } + . . . . + . . . . /// Return the cached NFA/DFA powerset state for the given ID. + . . . . /// + . . . . /// This panics if the given ID does not address a valid state. + . . . . fn get_cached_state(&self, sid: LazyStateID) -> &State { + . . . . let index = sid.as_usize_untagged() >> self.dfa.stride2(); + . . . . &self.cache.states[index] +-- line 2710 ---------------------------------------- +-- line 2730 ---------------------------------------- + . . . . } + . . . . + . . . . /// Returns the ID of the dead state for this lazy DFA. + . . . . fn dead_id(&self) -> LazyStateID { + . . . . // This unwrap is OK since the maximum value here is 1 * 512 = 512, + . . . . // which is <= 2047 (the maximum state ID on 16-bit systems). Where + . . . . // 512 is the worst case for our equivalence classes (every byte is a + . . . . // distinct class). + 468 ( 0.00%) . . . LazyStateID::new(1 << self.dfa.stride2()).unwrap().to_dead() + . . . . } + . . . . + . . . . /// Returns the ID of the quit state for this lazy DFA. + . . . . fn quit_id(&self) -> LazyStateID { + . . . . // This unwrap is OK since the maximum value here is 2 * 512 = 1024, + . . . . // which is <= 2047 (the maximum state ID on 16-bit systems). Where + . . . . // 512 is the worst case for our equivalence classes (every byte is a + . . . . // distinct class). + 117 ( 0.00%) . . . LazyStateID::new(2 << self.dfa.stride2()).unwrap().to_quit() + . . . . } + . . . . + . . . . /// Returns true if and only if the given ID is valid. + . . . . /// + . . . . /// An ID is valid if it is both a valid index into the transition table + . . . . /// and is a multiple of the DFA's stride. + . . . . fn is_valid(&self, id: LazyStateID) -> bool { + . . . . let id = id.as_usize_untagged(); +203,966 ( 0.06%) . . . id < self.cache.trans.len() && id % self.dfa.stride() == 0 + . . . . } + . . . . + . . . . /// Returns true if adding the state given would fit in this cache. + . . . . fn state_fits_in_cache(&self, state: &State) -> bool { + 781 ( 0.00%) . . . let needed = self.cache.memory_usage() + . . . . + self.memory_usage_for_one_more_state(state.memory_usage()); + . . . . trace!( + . . . . "lazy DFA cache capacity check: {:?} ?<=? {:?}", + . . . . needed, + . . . . self.dfa.cache_capacity + . . . . ); + 566 ( 0.00%) . . . needed <= self.dfa.cache_capacity + . . . . } + . . . . + . . . . /// Returns true if adding the state to be built by the given builder would + . . . . /// fit in this cache. + . . . . fn state_builder_fits_in_cache(&self, state: &StateBuilderNFA) -> bool { + 872 ( 0.00%) . . . let needed = self.cache.memory_usage() + . . . . + self.memory_usage_for_one_more_state(state.as_bytes().len()); + 872 ( 0.00%) . . . needed <= self.dfa.cache_capacity + . . . . } + . . . . + . . . . /// Returns the additional memory usage, in bytes, required to add one more + . . . . /// state to this cache. The given size should be the heap size, in bytes, + . . . . /// that would be used by the new state being added. + . . . . fn memory_usage_for_one_more_state( + . . . . &self, + . . . . state_heap_size: usize, + . . . . ) -> usize { + . . . . const ID_SIZE: usize = size_of::(); + . . . . const STATE_SIZE: usize = size_of::(); + . . . . + 3,351 ( 0.00%) . . . self.dfa.stride() * ID_SIZE // additional space needed in trans table + . . . . + STATE_SIZE // space in cache.states + . . . . + (STATE_SIZE + ID_SIZE) // space in cache.states_to_id + . . . . + state_heap_size // heap memory used by state itself + . . . . } + . . . . } + . . . . + . . . . /// A simple type that encapsulates the saving of a state ID through a cache + . . . . /// clearing. +-- line 2797 ---------------------------------------- +-- line 2854 ---------------------------------------- + . . . . /// + . . . . /// A lazy DFA configuration is a simple data object that is typically used + . . . . /// with [`Builder::configure`]. + . . . . /// + . . . . /// The default configuration guarantees that a search will never return a + . . . . /// "gave up" or "quit" error, although it is possible for a search to fail + . . . . /// if [`Config::starts_for_each_pattern`] wasn't enabled (which it is not by + . . . . /// default) and an [`Anchored::Pattern`] mode is requested via [`Input`]. + 3,062 ( 0.00%) . . . #[derive(Clone, Debug, Default)] + . . . . pub struct Config { + . . . . // As with other configuration types in this crate, we put all our knobs + . . . . // in options so that we can distinguish between "default" and "not set." + . . . . // This makes it possible to easily combine multiple configurations + . . . . // without default values overwriting explicitly specified values. See the + . . . . // 'overwrite' method. + . . . . // + . . . . // For docs on the fields below, see the corresponding method setters. +-- line 2870 ---------------------------------------- +-- line 2992 ---------------------------------------- + . . . . /// let got_rev = dfa_rev.try_search_rev(&mut cache_rev, &input)?.unwrap(); + . . . . /// assert_eq!(expected_fwd, got_fwd); + . . . . /// assert_eq!(expected_rev, got_rev); + . . . . /// + . . . . /// # Ok::<(), Box>(()) + . . . . /// ``` + . . . . pub fn match_kind(mut self, kind: MatchKind) -> Config { + . . . . self.match_kind = Some(kind); + 1,944 ( 0.00%) . . . self + . . . . } + . . . . + . . . . /// Set a prefilter to be used whenever a start state is entered. + . . . . /// + . . . . /// A [`Prefilter`] in this context is meant to accelerate searches by + . . . . /// looking for literal prefixes that every match for the corresponding + . . . . /// pattern (or patterns) must start with. Once a prefilter produces a + . . . . /// match, the underlying search routine continues on to try and confirm +-- line 3008 ---------------------------------------- +-- line 3067 ---------------------------------------- + . . . . /// // No match reported even though there clearly is one! + . . . . /// None, + . . . . /// re.try_search_fwd(&mut cache, &input)?, + . . . . /// ); + . . . . /// + . . . . /// # Ok::<(), Box>(()) + . . . . /// ``` + . . . . pub fn prefilter(mut self, pre: Option) -> Config { + 1,377 ( 0.00%) . . . self.pre = Some(pre); + 162 ( 0.00%) . . . if self.specialize_start_states.is_none() { + 81 ( 0.00%) . . . self.specialize_start_states = + . . . . Some(self.get_prefilter().is_some()); + . . . . } + 4,164 ( 0.00%) . . . self + . . . . } + . . . . + . . . . /// Whether to compile a separate start state for each pattern in the + . . . . /// lazy DFA. + . . . . /// + . . . . /// When enabled, a separate **anchored** start state is added for each + . . . . /// pattern in the lazy DFA. When this start state is used, then the DFA + . . . . /// will only search for matches for the pattern specified, even if there +-- line 3088 ---------------------------------------- +-- line 3442 ---------------------------------------- + . . . . /// // Start states are not tagged in the default configuration! + . . . . /// assert!(!sid.is_tagged()); + . . . . /// assert!(!sid.is_start()); + . . . . /// + . . . . /// # Ok::<(), Box>(()) + . . . . /// ``` + . . . . pub fn specialize_start_states(mut self, yes: bool) -> Config { + . . . . self.specialize_start_states = Some(yes); + 567 ( 0.00%) . . . self + . . . . } + . . . . + . . . . /// Sets the maximum amount of heap memory, in bytes, to allocate to the + . . . . /// cache for use during a lazy DFA search. If the lazy DFA would otherwise + . . . . /// use more heap memory, then, depending on other configuration knobs, + . . . . /// either stop the search and return an error or clear the cache and + . . . . /// continue the search. + . . . . /// +-- line 3458 ---------------------------------------- +-- line 3703 ---------------------------------------- + . . . . /// called. + . . . . /// * Call [`Cache::search_finish`] before completing a search. (It is + . . . . /// not strictly necessary to call this when an error is returned, as + . . . . /// `Cache::search_start` will automatically finish the previous search + . . . . /// for you. But calling it where possible before returning helps improve + . . . . /// the accuracy of how many bytes have actually been searched.) + . . . . pub fn minimum_bytes_per_state(mut self, min: Option) -> Config { + . . . . self.minimum_bytes_per_state = Some(min); + 1,588 ( 0.00%) . . . self + . . . . } + . . . . + . . . . /// Returns the match semantics set in this configuration. + . . . . pub fn get_match_kind(&self) -> MatchKind { + . . . . self.match_kind.unwrap_or(MatchKind::LeftmostFirst) + . . . . } + . . . . + . . . . /// Returns the prefilter set in this configuration, if one at all. +-- line 3719 ---------------------------------------- +-- line 3755 ---------------------------------------- + . . . . /// it's in a start state and do some kind of optimization (like run a + . . . . /// prefilter). + . . . . pub fn get_specialize_start_states(&self) -> bool { + . . . . self.specialize_start_states.unwrap_or(false) + . . . . } + . . . . + . . . . /// Returns the cache capacity set on this configuration. + . . . . pub fn get_cache_capacity(&self) -> usize { + 175 ( 0.00%) . . . self.cache_capacity.unwrap_or(2 * (1 << 20)) + . . . . } + . . . . + . . . . /// Returns whether the cache capacity check should be skipped. + . . . . pub fn get_skip_cache_capacity_check(&self) -> bool { + . . . . self.skip_cache_capacity_check.unwrap_or(false) + . . . . } + . . . . + . . . . /// Returns, if set, the minimum number of times the cache must be cleared +-- line 3771 ---------------------------------------- +-- line 3812 ---------------------------------------- + . . . . /// + . . . . /// If byte classes are disabled on this configuration, then a map is + . . . . /// returned that puts each byte in its own equivalent class. + . . . . fn byte_classes_from_nfa( + . . . . &self, + . . . . nfa: &thompson::NFA, + . . . . quit: &ByteSet, + . . . . ) -> ByteClasses { + 175 ( 0.00%) . . . if !self.get_byte_classes() { + . . . . // The lazy DFA will always use the equivalence class map, but + . . . . // enabling this option is useful for debugging. Namely, this will + . . . . // cause all transitions to be defined over their actual bytes + . . . . // instead of an opaque equivalence class identifier. The former is + . . . . // much easier to grok as a human. + . . . . ByteClasses::singletons() + . . . . } else { + . . . . let mut set = nfa.byte_class_set().clone(); +-- line 3828 ---------------------------------------- +-- line 3829 ---------------------------------------- + . . . . // It is important to distinguish any "quit" bytes from all other + . . . . // bytes. Otherwise, a non-quit byte may end up in the same class + . . . . // as a quit byte, and thus cause the DFA stop when it shouldn't. + . . . . // + . . . . // Test case: + . . . . // + . . . . // regex-cli find match hybrid --unicode-word-boundary \ + . . . . // -p '^#' -p '\b10\.55\.182\.100\b' -y @conn.json.1000x.log + 175 ( 0.00%) . . . if !quit.is_empty() { + . . . . set.add_set(&quit); + . . . . } + . . . . set.byte_classes() + . . . . } + . . . . } + . . . . + . . . . /// Return the quit set for this configuration and the given NFA. + . . . . /// +-- line 3845 ---------------------------------------- +-- line 3846 ---------------------------------------- + . . . . /// This may return an error if the NFA is incompatible with this + . . . . /// configuration's quit set. For example, if the NFA has a Unicode word + . . . . /// boundary and the quit set doesn't include non-ASCII bytes. + . . . . fn quit_set_from_nfa( + . . . . &self, + . . . . nfa: &thompson::NFA, + . . . . ) -> Result { + . . . . let mut quit = self.quitset.unwrap_or(ByteSet::empty()); + 175 ( 0.00%) . . . if nfa.look_set_any().contains_word_unicode() { + . . . . if self.get_unicode_word_boundary() { + . . . . for b in 0x80..=0xFF { + . . . . quit.add(b); + . . . . } + . . . . } else { + . . . . // If heuristic support for Unicode word boundaries wasn't + . . . . // enabled, then we can still check if our quit set is correct. + . . . . // If the caller set their quit bytes in a way that causes the +-- line 3862 ---------------------------------------- +-- line 3864 ---------------------------------------- + . . . . // we need for heuristic support to work. + . . . . if !quit.contains_range(0x80, 0xFF) { + . . . . return Err( + . . . . BuildError::unsupported_dfa_word_boundary_unicode(), + . . . . ); + . . . . } + . . . . } + . . . . } + 700 ( 0.00%) . . . Ok(quit) + . . . . } + . . . . + . . . . /// Overwrite the default configuration such that the options in `o` are + . . . . /// always used. If an option in `o` is not set, then the corresponding + . . . . /// option in `self` is used. If it's not set in `self` either, then it + . . . . /// remains not set. + . . . . fn overwrite(&self, o: Config) -> Config { + 700 ( 0.00%) . . . Config { + 175 ( 0.00%) . . . match_kind: o.match_kind.or(self.match_kind), + 525 ( 0.00%) . . . pre: o.pre.or_else(|| self.pre.clone()), + 175 ( 0.00%) . . . starts_for_each_pattern: o + . . . . .starts_for_each_pattern + . . . . .or(self.starts_for_each_pattern), + . . . . byte_classes: o.byte_classes.or(self.byte_classes), + . . . . unicode_word_boundary: o + . . . . .unicode_word_boundary + . . . . .or(self.unicode_word_boundary), + 875 ( 0.00%) . . . quitset: o.quitset.or(self.quitset), + . . . . specialize_start_states: o + . . . . .specialize_start_states + . . . . .or(self.specialize_start_states), + 175 ( 0.00%) . . . cache_capacity: o.cache_capacity.or(self.cache_capacity), + 175 ( 0.00%) . . . skip_cache_capacity_check: o + . . . . .skip_cache_capacity_check + . . . . .or(self.skip_cache_capacity_check), + 175 ( 0.00%) . . . minimum_cache_clear_count: o + . . . . .minimum_cache_clear_count + . . . . .or(self.minimum_cache_clear_count), + 175 ( 0.00%) . . . minimum_bytes_per_state: o + . . . . .minimum_bytes_per_state + . . . . .or(self.minimum_bytes_per_state), + . . . . } + . . . . } + . . . . } + . . . . + . . . . /// A builder for constructing a lazy deterministic finite automaton from + . . . . /// regular expressions. +-- line 3909 ---------------------------------------- +-- line 3975 ---------------------------------------- + . . . . config: Config, + . . . . #[cfg(feature = "syntax")] + . . . . thompson: thompson::Compiler, + . . . . } + . . . . + . . . . impl Builder { + . . . . /// Create a new lazy DFA builder with the default configuration. + . . . . pub fn new() -> Builder { + 2,236 ( 0.00%) . . . Builder { + . . . . config: Config::default(), + . . . . #[cfg(feature = "syntax")] + 512 ( 0.00%) . . . thompson: thompson::Compiler::new(), + 3,523 ( 0.00%) . . . => /home/.cargo/registry/src/index.crates.io-6f17d22bba15001f/regex-automata-0.4.6/src/nfa/thompson/compiler.rs:regex_automata::nfa::thompson::compiler::Compiler::new (13x) + . . . . } + . . . . } + . . . . + . . . . /// Build a lazy DFA from the given pattern. + . . . . /// + . . . . /// If there was a problem parsing or compiling the pattern, then an error + . . . . /// is returned. + . . . . #[cfg(feature = "syntax")] +-- line 3994 ---------------------------------------- +-- line 4047 ---------------------------------------- + . . . . /// let dfa = DFA::builder().build_from_nfa(nfa)?; + . . . . /// let mut cache = dfa.create_cache(); + . . . . /// let expected = Some(HalfMatch::must(0, 6)); + . . . . /// let got = dfa.try_search_fwd(&mut cache, &Input::new(haystack))?; + . . . . /// assert_eq!(expected, got); + . . . . /// + . . . . /// # Ok::<(), Box>(()) + . . . . /// ``` + 1,575 ( 0.00%) . . . pub fn build_from_nfa( + . . . . &self, + . . . . nfa: thompson::NFA, + . . . . ) -> Result { + 1,225 ( 0.00%) . . . let quitset = self.config.quit_set_from_nfa(&nfa)?; + . . . . let classes = self.config.byte_classes_from_nfa(&nfa, &quitset); + . . . . // Check that we can fit at least a few states into our cache, + . . . . // otherwise it's pretty senseless to use the lazy DFA. This does have + . . . . // a possible failure mode though. This assumes the maximum size of a + . . . . // state in powerset space (so, the total number of NFA states), which + . . . . // may never actually materialize, and could be quite a bit larger + . . . . // than the actual biggest state. If this turns out to be a problem, + . . . . // we could expose a knob that disables this check. But if so, we have + . . . . // to be careful not to panic in other areas of the code (the cache + . . . . // clearing and init code) that tend to assume some minimum useful + . . . . // cache capacity. + 175 ( 0.00%) . . . let min_cache = minimum_cache_capacity( + . . . . &nfa, + . . . . &classes, + . . . . self.config.get_starts_for_each_pattern(), + . . . . ); + . . . . let mut cache_capacity = self.config.get_cache_capacity(); + 350 ( 0.00%) . . . if cache_capacity < min_cache { + . . . . // When the caller has asked us to skip the cache capacity check, + . . . . // then we simply force the cache capacity to its minimum amount + . . . . // and mush on. + . . . . if self.config.get_skip_cache_capacity_check() { + . . . . debug!( + . . . . "given capacity ({}) is too small, \ + . . . . since skip_cache_capacity_check is enabled, \ + . . . . setting cache capacity to minimum ({})", +-- line 4085 ---------------------------------------- +-- line 4097 ---------------------------------------- + . . . . // of states in our state ID space. This is unlikely to trigger in + . . . . // >=32-bit systems, but 16-bit systems have a pretty small state ID + . . . . // space since a number of bits are used up as sentinels. + . . . . if let Err(err) = minimum_lazy_state_id(&classes) { + . . . . return Err(BuildError::insufficient_state_id_capacity(err)); + . . . . } + . . . . let stride2 = classes.stride2(); + . . . . let start_map = StartByteMap::new(nfa.look_matcher()); + 8,925 ( 0.00%) . . . Ok(DFA { + 13,475 ( 0.00%) . . . => ./string/../sysdeps/x86_64/multiarch/memmove-vec-unaligned-erms.S:__memcpy_avx_unaligned_erms (175x) + . . . . config: self.config.clone(), + 175 ( 0.00%) . . . nfa, + . . . . stride2, + 700 ( 0.00%) . . . start_map, + 5,250 ( 0.00%) . . . => ./string/../sysdeps/x86_64/multiarch/memmove-vec-unaligned-erms.S:__memcpy_avx_unaligned_erms (175x) + 525 ( 0.00%) . . . classes, + 5,250 ( 0.00%) . . . => ./string/../sysdeps/x86_64/multiarch/memmove-vec-unaligned-erms.S:__memcpy_avx_unaligned_erms (175x) + . . . . quitset, + . . . . cache_capacity, + . . . . }) + 1,575 ( 0.00%) . . . } + . . . . + . . . . /// Apply the given lazy DFA configuration options to this builder. + 1,400 ( 0.00%) . . . pub fn configure(&mut self, config: Config) -> &mut Builder { + 4,375 ( 0.00%) . . . self.config = self.config.overwrite(config); + . . . . self + 1,575 ( 0.00%) . . . } + . . . . + . . . . /// Set the syntax configuration for this builder using + . . . . /// [`syntax::Config`](crate::util::syntax::Config). + . . . . /// + . . . . /// This permits setting things like case insensitivity, Unicode and multi + . . . . /// line mode. + . . . . /// + . . . . /// These settings only apply when constructing a lazy DFA directly from a +-- line 4128 ---------------------------------------- +-- line 4282 ---------------------------------------- + . . . . /// It's not likely for this to have any impact 32-bit systems (or higher), but + . . . . /// on 16-bit systems, the lazy state ID space is quite constrained and thus + . . . . /// may be insufficient if our MIN_STATES value is (for some reason) too high. + . . . . fn minimum_lazy_state_id( + . . . . classes: &ByteClasses, + . . . . ) -> Result { + . . . . let stride = 1 << classes.stride2(); + . . . . let min_state_index = MIN_STATES.checked_sub(1).unwrap(); + 350 ( 0.00%) . . . LazyStateID::new(min_state_index * stride) + . . . . } + . . . . + . . . . /// Based on the minimum number of states required for a useful lazy DFA cache, + . . . . /// this returns a heuristic minimum number of bytes of heap space required. + . . . . /// + . . . . /// This is a "heuristic" because the minimum it returns is likely bigger than + . . . . /// the true minimum. Namely, it assumes that each powerset NFA/DFA state uses + . . . . /// the maximum number of NFA states (all of them). This is likely bigger +-- line 4298 ---------------------------------------- +-- line 4322 ---------------------------------------- + . . . . starts_for_each_pattern: bool, + . . . . ) -> usize { + . . . . const ID_SIZE: usize = size_of::(); + . . . . const STATE_SIZE: usize = size_of::(); + . . . . + . . . . let stride = 1 << classes.stride2(); + . . . . let states_len = nfa.states().len(); + . . . . let sparses = 2 * states_len * NFAStateID::SIZE; + 350 ( 0.00%) . . . let trans = MIN_STATES * stride * ID_SIZE; + . . . . + . . . . let mut starts = Start::len() * ID_SIZE; + 175 ( 0.00%) . . . if starts_for_each_pattern { + 486 ( 0.00%) . . . starts += (Start::len() * nfa.pattern_len()) * ID_SIZE; + . . . . } + . . . . + . . . . // The min number of states HAS to be at least 4: we have 3 sentinel states + . . . . // and then we need space for one more when we save a state after clearing + . . . . // the cache. We also need space for one more, otherwise we get stuck in a + . . . . // loop where we try to add a 5th state, which gets rejected, which clears + . . . . // the cache, which adds back a saved state (4th total state) which then + . . . . // tries to add the 5th state again. +-- line 4342 ---------------------------------------- +-- line 4350 ---------------------------------------- + . . . . // Every `State` has 5 bytes for flags, 4 bytes (max) for the number of + . . . . // patterns, followed by 32-bit encodings of patterns and then delta + . . . . // varint encodings of NFA state IDs. We use the worst case (which isn't + . . . . // technically possible) of 5 bytes for each NFA state ID. + . . . . // + . . . . // HOWEVER, three of the states needed by a lazy DFA are just the sentinel + . . . . // unknown, dead and quit states. Those states have a known size and it is + . . . . // small. + 700 ( 0.00%) . . . let dead_state_size = State::dead().memory_usage(); + 67,176 ( 0.02%) . . . => /home/.cargo/registry/src/index.crates.io-6f17d22bba15001f/regex-automata-0.4.6/src/util/determinize/state.rs:regex_automata::util::determinize::state::State::dead (175x) + 700 ( 0.00%) . . . let max_state_size = 5 + 4 + (nfa.pattern_len() * 4) + (states_len * 5); + 350 ( 0.00%) . . . let states = (SENTINEL_STATES * (STATE_SIZE + dead_state_size)) + . . . . + (non_sentinel * (STATE_SIZE + max_state_size)); + . . . . // NOTE: We don't double count heap memory used by State for this map since + . . . . // we use reference counting to avoid doubling memory usage. (This tends to + . . . . // be where most memory is allocated in the cache.) + . . . . let states_to_sid = (MIN_STATES * STATE_SIZE) + (MIN_STATES * ID_SIZE); + . . . . let stack = states_len * NFAStateID::SIZE; + . . . . let scratch_state_builder = max_state_size; + . . . . + 1,225 ( 0.00%) . . . trans + . . . . + starts + . . . . + states + . . . . + states_to_sid + . . . . + sparses + . . . . + stack + . . . . + scratch_state_builder + . . . . } + . . . . +-- line 4377 ---------------------------------------- + +118,629 ( 0.03%) . . . + +-------------------------------------------------------------------------------- +-- Auto-annotated source: /home/.cargo/registry/src/index.crates.io-6f17d22bba15001f/regex-syntax-0.8.2/src/ast/visitor.rs +-------------------------------------------------------------------------------- +Ir Ge sysCount sysTime + +-- line 110 ---------------------------------------- + . . . . /// analysis over an `Ast` without using a stack size proportional to the depth + . . . . /// of the `Ast`. Namely, this method will instead use constant stack size, but + . . . . /// will use heap space proportional to the size of the `Ast`. This may be + . . . . /// desirable in cases where the size of `Ast` is proportional to end user + . . . . /// input. + . . . . /// + . . . . /// If the visitor returns an error at any point, then visiting is stopped and + . . . . /// the error is returned. + 1,539 ( 0.00%) . . . pub fn visit(ast: &Ast, visitor: V) -> Result { + . . . . HeapVisitor::new().visit(ast, visitor) + 1,458 ( 0.00%) . . . } + . . . . + . . . . /// HeapVisitor visits every item in an `Ast` recursively using constant stack + . . . . /// size and a heap size proportional to the size of the `Ast`. + . . . . struct HeapVisitor<'a> { + . . . . /// A stack of `Ast` nodes. This is roughly analogous to the call stack + . . . . /// used in a typical recursive visitor. + . . . . stack: Vec<(&'a Ast, Frame<'a>)>, + . . . . /// Similar to the `Ast` stack above, but is used only for character +-- line 128 ---------------------------------------- +-- line 194 ---------------------------------------- + . . . . /// syntax, which is not possible.) + . . . . enum ClassInduct<'a> { + . . . . Item(&'a ast::ClassSetItem), + . . . . BinaryOp(&'a ast::ClassSetBinaryOp), + . . . . } + . . . . + . . . . impl<'a> HeapVisitor<'a> { + . . . . fn new() -> HeapVisitor<'a> { + 486 ( 0.00%) . . . HeapVisitor { stack: vec![], stack_class: vec![] } + . . . . } + . . . . + . . . . fn visit( + . . . . &mut self, + . . . . mut ast: &'a Ast, + . . . . mut visitor: V, + . . . . ) -> Result { + . . . . self.stack.clear(); + . . . . self.stack_class.clear(); + . . . . + . . . . visitor.start(); + . . . . loop { + 569,805 ( 0.16%) . . . visitor.visit_pre(ast)?; +2,503,709 ( 0.72%) 1,256 ( 0.16%) 2 ( 0.65%) . => /home/.cargo/registry/src/index.crates.io-6f17d22bba15001f/regex-syntax-0.8.2/src/hir/translate.rs:::visit_pre (71,256x) +1,928,319 ( 0.56%) . . . => /home/.cargo/registry/src/index.crates.io-6f17d22bba15001f/regex-syntax-0.8.2/src/ast/parse.rs: as regex_syntax::ast::visitor::Visitor>::visit_pre (71,256x) + 142,512 ( 0.04%) . . . if let Some(x) = self.induct(ast, &mut visitor)? { + . . . . let child = x.child(); + . . . . self.stack.push((ast, x)); + . . . . ast = child; + . . . . continue; + . . . . } + . . . . // No induction means we have a base case, so we can post visit + . . . . // it now. + 209,520 ( 0.06%) . . . visitor.visit_post(ast)?; + . . . . + . . . . // At this point, we now try to pop our call stack until it is + . . . . // either empty or we hit another inductive case. + . . . . loop { + 546,600 ( 0.16%) . . . let (post_ast, frame) = match self.stack.pop() { + 648 ( 0.00%) . . . None => return visitor.finish(), + 6,075 ( 0.00%) . . . => /home/.cargo/registry/src/index.crates.io-6f17d22bba15001f/regex-syntax-0.8.2/src/hir/translate.rs:::finish (81x) + . . . . Some((post_ast, frame)) => (post_ast, frame), + . . . . }; + . . . . // If this is a concat/alternate, then we might have additional + . . . . // inductive steps to process. + . . . . if let Some(x) = self.pop(frame) { + . . . . match x { + . . . . Frame::Alternation { .. } => { + . . . . visitor.visit_alternation_in()?; +-- line 238 ---------------------------------------- +-- line 243 ---------------------------------------- + . . . . _ => {} + . . . . } + . . . . ast = x.child(); + . . . . self.stack.push((post_ast, x)); + . . . . break; + . . . . } + . . . . // Otherwise, we've finished visiting all the child nodes for + . . . . // this AST, so we can post visit it now. + 56,628 ( 0.02%) . . . visitor.visit_post(post_ast)?; + . . . . } + . . . . } + . . . . } + . . . . + . . . . /// Build a stack frame for the given AST if one is needed (which occurs if + . . . . /// and only if there are child nodes in the AST). Otherwise, return None. + . . . . /// + . . . . /// If this visits a class, then the underlying visitor implementation may + . . . . /// return an error which will be passed on here. + . . . . fn induct( + . . . . &mut self, + . . . . ast: &'a Ast, + . . . . visitor: &mut V, + . . . . ) -> Result>, V::Err> { + 427,536 ( 0.12%) . . . Ok(match *ast { + . . . . Ast::ClassBracketed(ref x) => { + . . . . self.visit_class(x, visitor)?; + . . . . None + . . . . } + . . . . Ast::Repetition(ref x) => Some(Frame::Repetition(x)), + . . . . Ast::Group(ref x) => Some(Frame::Group(x)), + 31,572 ( 0.01%) . . . Ast::Concat(ref x) if x.asts.is_empty() => None, + . . . . Ast::Concat(ref x) => { + 31,572 ( 0.01%) . . . Some(Frame::Concat { head: &x.asts[0], tail: &x.asts[1..] }) + . . . . } + 1,024 ( 0.00%) . . . Ast::Alternation(ref x) if x.asts.is_empty() => None, + . . . . Ast::Alternation(ref x) => Some(Frame::Alternation { + 1,024 ( 0.00%) . . . head: &x.asts[0], + . . . . tail: &x.asts[1..], + . . . . }), + . . . . _ => None, + . . . . }) + . . . . } + . . . . + . . . . /// Pops the given frame. If the frame has an additional inductive step, + . . . . /// then return it, otherwise return `None`. + . . . . fn pop(&self, induct: Frame<'a>) -> Option> { + 353,297 ( 0.10%) . . . match induct { + . . . . Frame::Repetition(_) => None, + . . . . Frame::Group(_) => None, + . . . . Frame::Concat { tail, .. } => { + 140,682 ( 0.04%) . . . if tail.is_empty() { + . . . . None + . . . . } else { + . . . . Some(Frame::Concat { head: &tail[0], tail: &tail[1..] }) + . . . . } + . . . . } + . . . . Frame::Alternation { tail, .. } => { + 32,882 ( 0.01%) . . . if tail.is_empty() { + . . . . None + . . . . } else { + . . . . Some(Frame::Alternation { + . . . . head: &tail[0], + . . . . tail: &tail[1..], + . . . . }) + . . . . } + . . . . } +-- line 308 ---------------------------------------- +-- line 323 ---------------------------------------- + . . . . ast = child; + . . . . continue; + . . . . } + . . . . self.visit_class_post(&ast, visitor)?; + . . . . + . . . . // At this point, we now try to pop our call stack until it is + . . . . // either empty or we hit another inductive case. + . . . . loop { + 23,786 ( 0.01%) . . . let (post_ast, frame) = match self.stack_class.pop() { + . . . . None => return Ok(()), + . . . . Some((post_ast, frame)) => (post_ast, frame), + . . . . }; + . . . . // If this is a union or a binary op, then we might have + . . . . // additional inductive steps to process. + . . . . if let Some(x) = self.pop_class(frame) { + . . . . if let ClassFrame::BinaryRHS { ref op, .. } = x { + . . . . visitor.visit_class_set_binary_op_in(op)?; +-- line 339 ---------------------------------------- +-- line 350 ---------------------------------------- + . . . . } + . . . . + . . . . /// Call the appropriate `Visitor` methods given an inductive step. + . . . . fn visit_class_pre( + . . . . &self, + . . . . ast: &ClassInduct<'a>, + . . . . visitor: &mut V, + . . . . ) -> Result<(), V::Err> { + 25,170 ( 0.01%) . . . match *ast { + . . . . ClassInduct::Item(item) => { + 34,412 ( 0.01%) . . . visitor.visit_class_set_item_pre(item)?; + 111,580 ( 0.03%) . . . => /home/.cargo/registry/src/index.crates.io-6f17d22bba15001f/regex-syntax-0.8.2/src/ast/parse.rs: as regex_syntax::ast::visitor::Visitor>::visit_class_set_item_pre (4,916x) + 64,743 ( 0.02%) . . . => /home/.cargo/registry/src/index.crates.io-6f17d22bba15001f/regex-syntax-0.8.2/src/hir/translate.rs:::visit_class_set_item_pre (4,916x) + . . . . } + . . . . ClassInduct::BinaryOp(op) => { + 4,916 ( 0.00%) . . . visitor.visit_class_set_binary_op_pre(op)?; + . . . . } + . . . . } + . . . . Ok(()) + . . . . } + . . . . + . . . . /// Call the appropriate `Visitor` methods given an inductive step. + . . . . fn visit_class_post( + . . . . &self, + . . . . ast: &ClassInduct<'a>, + . . . . visitor: &mut V, + . . . . ) -> Result<(), V::Err> { + 2,384 ( 0.00%) . . . match *ast { + . . . . ClassInduct::Item(item) => { + 22,196 ( 0.01%) . . . visitor.visit_class_set_item_post(item)?; +1,599,466 ( 0.46%) 1,609 ( 0.20%) . . => /home/.cargo/registry/src/index.crates.io-6f17d22bba15001f/regex-syntax-0.8.2/src/hir/translate.rs:::visit_class_set_item_post (4,916x) + . . . . } + . . . . ClassInduct::BinaryOp(op) => { + 1,192 ( 0.00%) . . . visitor.visit_class_set_binary_op_post(op)?; + . . . . } + . . . . } + . . . . Ok(()) + . . . . } + . . . . + . . . . /// Build a stack frame for the given class node if one is needed (which + . . . . /// occurs if and only if there are child nodes). Otherwise, return None. + . . . . fn induct_class(&self, ast: &ClassInduct<'a>) -> Option> { + 47,060 ( 0.01%) . . . match *ast { + . . . . ClassInduct::Item(&ast::ClassSetItem::Bracketed(ref x)) => { + 426 ( 0.00%) . . . match x.kind { + . . . . ast::ClassSet::Item(ref item) => { + . . . . Some(ClassFrame::Union { head: item, tail: &[] }) + . . . . } + . . . . ast::ClassSet::BinaryOp(ref op) => { + . . . . Some(ClassFrame::Binary { op }) + . . . . } + . . . . } + . . . . } + . . . . ClassInduct::Item(&ast::ClassSetItem::Union(ref x)) => { + 1,050 ( 0.00%) . . . if x.items.is_empty() { + . . . . None + . . . . } else { + . . . . Some(ClassFrame::Union { + 1,050 ( 0.00%) . . . head: &x.items[0], + . . . . tail: &x.items[1..], + . . . . }) + . . . . } + . . . . } + . . . . ClassInduct::BinaryOp(op) => { + . . . . Some(ClassFrame::BinaryLHS { op, lhs: &op.lhs, rhs: &op.rhs }) + . . . . } + . . . . _ => None, +-- line 413 ---------------------------------------- +-- line 414 ---------------------------------------- + . . . . } + . . . . } + . . . . + . . . . /// Pops the given frame. If the frame has an additional inductive step, + . . . . /// then return it, otherwise return `None`. + . . . . fn pop_class(&self, induct: ClassFrame<'a>) -> Option> { + . . . . match induct { + . . . . ClassFrame::Union { tail, .. } => { + 8,652 ( 0.00%) . . . if tail.is_empty() { + . . . . None + . . . . } else { + . . . . Some(ClassFrame::Union { + . . . . head: &tail[0], + . . . . tail: &tail[1..], + . . . . }) + . . . . } + . . . . } +-- line 430 ---------------------------------------- +-- line 437 ---------------------------------------- + . . . . } + . . . . } + . . . . + . . . . impl<'a> Frame<'a> { + . . . . /// Perform the next inductive step on this frame and return the next + . . . . /// child AST node to visit. + . . . . fn child(&self) -> &'a Ast { + . . . . match *self { + 7,540 ( 0.00%) . . . Frame::Repetition(rep) => &rep.ast, + 2,772 ( 0.00%) . . . Frame::Group(group) => &group.ast, + . . . . Frame::Concat { head, .. } => head, + . . . . Frame::Alternation { head, .. } => head, + . . . . } + . . . . } + . . . . } + . . . . + . . . . impl<'a> ClassFrame<'a> { + . . . . /// Perform the next inductive step on this frame and return the next +-- line 454 ---------------------------------------- +-- line 464 ---------------------------------------- + . . . . ClassInduct::from_set(rhs) + . . . . } + . . . . } + . . . . } + . . . . } + . . . . + . . . . impl<'a> ClassInduct<'a> { + . . . . fn from_bracketed(ast: &'a ast::ClassBracketed) -> ClassInduct<'a> { + 5,506 ( 0.00%) . . . ClassInduct::from_set(&ast.kind) + . . . . } + . . . . + . . . . fn from_set(ast: &'a ast::ClassSet) -> ClassInduct<'a> { + 33,036 ( 0.01%) . . . match *ast { + . . . . ast::ClassSet::Item(ref item) => ClassInduct::Item(item), + . . . . ast::ClassSet::BinaryOp(ref op) => ClassInduct::BinaryOp(op), + . . . . } + . . . . } + . . . . } + . . . . + . . . . impl<'a> core::fmt::Debug for ClassFrame<'a> { + . . . . fn fmt(&self, f: &mut core::fmt::Formatter<'_>) -> core::fmt::Result { +-- line 484 ---------------------------------------- + +1,392,590 ( 0.40%) . . . + +-------------------------------------------------------------------------------- +-- Auto-annotated source: /home/.cargo/registry/src/index.crates.io-6f17d22bba15001f/regex-syntax-0.8.2/src/unicode.rs +-------------------------------------------------------------------------------- +Ir Ge sysCount sysTime + +-- line 116 ---------------------------------------- + . . . . /// no entry in the underlying case folding table), then this returns an + . . . . /// empty slice. + . . . . /// + . . . . /// # Panics + . . . . /// + . . . . /// This panics when called with a `c` that is less than or equal to the + . . . . /// previous call. In other words, callers need to use this method with + . . . . /// strictly increasing values of `c`. + 3,360 ( 0.00%) . . . pub fn mapping(&mut self, c: char) -> &'static [char] { + 3,360 ( 0.00%) . . . if let Some(last) = self.last { + . . . . assert!( + . . . . last < c, + . . . . "got codepoint U+{:X} which occurs before \ + . . . . last codepoint U+{:X}", + . . . . u32::from(c), + . . . . u32::from(last), + . . . . ); + . . . . } + 1,120 ( 0.00%) . . . self.last = Some(c); + 5,600 ( 0.00%) . . . if self.next >= self.table.len() { + . . . . return &[]; + . . . . } + 2,400 ( 0.00%) . . . let (k, v) = self.table[self.next]; + 2,240 ( 0.00%) . . . if k == c { + 160 ( 0.00%) . . . self.next += 1; + . . . . return v; + . . . . } + . . . . match self.get(c) { + . . . . Err(i) => { + . . . . self.next = i; + . . . . &[] + . . . . } + . . . . Ok(i) => { + . . . . // Since we require lookups to proceed + . . . . // in order, anything we find should be + . . . . // after whatever we thought might be + . . . . // next. Otherwise, the caller is either + . . . . // going out of order or we would have + . . . . // found our next key at 'self.next'. + 2,080 ( 0.00%) . . . assert!(i > self.next); + 2,080 ( 0.00%) . . . self.next = i + 1; + 2,080 ( 0.00%) . . . self.table[i].1 + . . . . } + . . . . } + 4,480 ( 0.00%) . . . } + . . . . + . . . . /// Returns true if and only if the given range overlaps with any region + . . . . /// of the underlying case folding table. That is, when true, there exists + . . . . /// at least one codepoint in the inclusive range `[start, end]` that has + . . . . /// a non-trivial equivalence class of case folded codepoints. Conversely, + . . . . /// when this returns false, all codepoints in the range `[start, end]` + . . . . /// correspond to the trivial equivalence class of case folded codepoints, + . . . . /// i.e., itself. +-- line 168 ---------------------------------------- +-- line 170 ---------------------------------------- + . . . . /// This is useful to call before iterating over the codepoints in the + . . . . /// range and looking up the mapping for each. If you know none of the + . . . . /// mappings will return anything, then you might be able to skip doing it + . . . . /// altogether. + . . . . /// + . . . . /// # Panics + . . . . /// + . . . . /// This panics when `end < start`. + 1,120 ( 0.00%) . . . pub fn overlaps(&self, start: char, end: char) -> bool { + . . . . use core::cmp::Ordering; + . . . . + 4,620 ( 0.00%) . . . assert!(start <= end); + 1,120 ( 0.00%) . . . self.table + . . . . .binary_search_by(|&(c, _)| { +92,240 ( 0.03%) . . . if start <= c && c <= end { + . . . . Ordering::Equal +43,640 ( 0.01%) . . . } else if c > end { + . . . . Ordering::Greater + . . . . } else { + . . . . Ordering::Less + . . . . } + . . . . }) + . . . . .is_ok() + 2,240 ( 0.00%) . . . } + . . . . + . . . . /// Returns the index at which `c` occurs in the simple case fold table. If + . . . . /// `c` does not occur, then this returns an `i` such that `table[i-1].0 < + . . . . /// c` and `table[i].0 > c`. + . . . . fn get(&self, c: char) -> Result { + . . . . self.table.binary_search_by_key(&c, |&(c1, _)| c1) + . . . . } + . . . . } +-- line 201 ---------------------------------------- + +52,990 ( 0.02%) . . . + +-------------------------------------------------------------------------------- +-- Auto-annotated source: /home/.cargo/registry/src/index.crates.io-6f17d22bba15001f/regex-syntax-0.8.2/src/hir/translate.rs +-------------------------------------------------------------------------------- +Ir Ge sysCount sysTime + +-- line 26 ---------------------------------------- + . . . . impl Default for TranslatorBuilder { + . . . . fn default() -> TranslatorBuilder { + . . . . TranslatorBuilder::new() + . . . . } + . . . . } + . . . . + . . . . impl TranslatorBuilder { + . . . . /// Create a new translator builder with a default c onfiguration. + 81 ( 0.00%) . . . pub fn new() -> TranslatorBuilder { + . . . . TranslatorBuilder { + . . . . utf8: true, + . . . . line_terminator: b'\n', + . . . . flags: Flags::default(), + . . . . } + 81 ( 0.00%) . . . } + . . . . + . . . . /// Build a translator using the current configuration. + 81 ( 0.00%) . . . pub fn build(&self) -> Translator { + 405 ( 0.00%) . . . Translator { + . . . . stack: RefCell::new(vec![]), + . . . . flags: Cell::new(self.flags), + . . . . utf8: self.utf8, + 81 ( 0.00%) . . . line_terminator: self.line_terminator, + . . . . } + 81 ( 0.00%) . . . } + . . . . + . . . . /// When disabled, translation will permit the construction of a regular + . . . . /// expression that may match invalid UTF-8. + . . . . /// + . . . . /// When enabled (the default), the translator is guaranteed to produce an + . . . . /// expression that, for non-empty matches, will only ever produce spans + . . . . /// that are entirely valid UTF-8 (otherwise, the translator will return an + . . . . /// error). +-- line 58 ---------------------------------------- +-- line 59 ---------------------------------------- + . . . . /// + . . . . /// Perhaps surprisingly, when UTF-8 is enabled, an empty regex or even + . . . . /// a negated ASCII word boundary (uttered as `(?-u:\B)` in the concrete + . . . . /// syntax) will be allowed even though they can produce matches that split + . . . . /// a UTF-8 encoded codepoint. This only applies to zero-width or "empty" + . . . . /// matches, and it is expected that the regex engine itself must handle + . . . . /// these cases if necessary (perhaps by suppressing any zero-width matches + . . . . /// that split a codepoint). + 81 ( 0.00%) . . . pub fn utf8(&mut self, yes: bool) -> &mut TranslatorBuilder { + 81 ( 0.00%) . . . self.utf8 = yes; + . . . . self + 81 ( 0.00%) . . . } + . . . . + . . . . /// Sets the line terminator for use with `(?u-s:.)` and `(?-us:.)`. + . . . . /// + . . . . /// Namely, instead of `.` (by default) matching everything except for `\n`, + . . . . /// this will cause `.` to match everything except for the byte given. + . . . . /// + . . . . /// If `.` is used in a context where Unicode mode is enabled and this byte + . . . . /// isn't ASCII, then an error will be returned. When Unicode mode is +-- line 78 ---------------------------------------- +-- line 84 ---------------------------------------- + . . . . /// mode or UTF-8 mode are enabled. + . . . . /// + . . . . /// Note that if `R` mode is enabled then it always takes precedence and + . . . . /// the line terminator will be treated as `\r` and `\n` simultaneously. + . . . . /// + . . . . /// Note also that this *doesn't* impact the look-around assertions + . . . . /// `(?m:^)` and `(?m:$)`. That's usually controlled by additional + . . . . /// configuration in the regex engine itself. + 81 ( 0.00%) . . . pub fn line_terminator(&mut self, byte: u8) -> &mut TranslatorBuilder { + 81 ( 0.00%) . . . self.line_terminator = byte; + . . . . self + 81 ( 0.00%) . . . } + . . . . + . . . . /// Enable or disable the case insensitive flag (`i`) by default. + 162 ( 0.00%) . . . pub fn case_insensitive(&mut self, yes: bool) -> &mut TranslatorBuilder { + 162 ( 0.00%) . . . self.flags.case_insensitive = if yes { Some(true) } else { None }; + . . . . self + 81 ( 0.00%) . . . } + . . . . + . . . . /// Enable or disable the multi-line matching flag (`m`) by default. + 162 ( 0.00%) . . . pub fn multi_line(&mut self, yes: bool) -> &mut TranslatorBuilder { + 162 ( 0.00%) . . . self.flags.multi_line = if yes { Some(true) } else { None }; + . . . . self + 81 ( 0.00%) . . . } + . . . . + . . . . /// Enable or disable the "dot matches any character" flag (`s`) by + . . . . /// default. + 162 ( 0.00%) . . . pub fn dot_matches_new_line( + . . . . &mut self, + . . . . yes: bool, + . . . . ) -> &mut TranslatorBuilder { + 162 ( 0.00%) . . . self.flags.dot_matches_new_line = if yes { Some(true) } else { None }; + . . . . self + 81 ( 0.00%) . . . } + . . . . + . . . . /// Enable or disable the CRLF mode flag (`R`) by default. + 162 ( 0.00%) . . . pub fn crlf(&mut self, yes: bool) -> &mut TranslatorBuilder { + 162 ( 0.00%) . . . self.flags.crlf = if yes { Some(true) } else { None }; + . . . . self + 81 ( 0.00%) . . . } + . . . . + . . . . /// Enable or disable the "swap greed" flag (`U`) by default. + 162 ( 0.00%) . . . pub fn swap_greed(&mut self, yes: bool) -> &mut TranslatorBuilder { + 162 ( 0.00%) . . . self.flags.swap_greed = if yes { Some(true) } else { None }; + . . . . self + 81 ( 0.00%) . . . } + . . . . + . . . . /// Enable or disable the Unicode flag (`u`) by default. + 81 ( 0.00%) . . . pub fn unicode(&mut self, yes: bool) -> &mut TranslatorBuilder { + 162 ( 0.00%) . . . self.flags.unicode = if yes { None } else { Some(false) }; + . . . . self + 81 ( 0.00%) . . . } + . . . . } + . . . . + . . . . /// A translator maps abstract syntax to a high level intermediate + . . . . /// representation. + . . . . /// + . . . . /// A translator may be benefit from reuse. That is, a translator can translate + . . . . /// many abstract syntax trees. + . . . . /// +-- line 143 ---------------------------------------- +-- line 165 ---------------------------------------- + . . . . /// intermediate representation (HIR). + . . . . /// + . . . . /// If there was a problem doing the translation, then an HIR-specific + . . . . /// error is returned. + . . . . /// + . . . . /// The original pattern string used to produce the `Ast` *must* also be + . . . . /// provided. The translator does not use the pattern string during any + . . . . /// correct translation, but is used for error reporting. + 243 ( 0.00%) . . . pub fn translate(&mut self, pattern: &str, ast: &Ast) -> Result { + 162 ( 0.00%) . . . ast::visit(ast, TranslatorI::new(self, pattern)) +68,722,234 (19.85%) 151,909 (18.76%) 27 ( 8.71%) . => /home/.cargo/registry/src/index.crates.io-6f17d22bba15001f/regex-syntax-0.8.2/src/ast/visitor.rs:regex_syntax::ast::visitor::visit (81x) + 324 ( 0.00%) . . . } + . . . . } + . . . . + . . . . /// An HirFrame is a single stack frame, represented explicitly, which is + . . . . /// created for each item in the Ast that we traverse. + . . . . /// + . . . . /// Note that technically, this type doesn't represent our entire stack + . . . . /// frame. In particular, the Ast visitor represents any state associated with + . . . . /// traversing the Ast itself. +-- line 183 ---------------------------------------- +-- line 245 ---------------------------------------- + . . . . /// + . . . . /// It is popped after each expression in a branch until an 'Alternation' + . . . . /// frame is observed when doing a post visit on an alternation. + . . . . AlternationBranch, + . . . . } + . . . . + . . . . impl HirFrame { + . . . . /// Assert that the current stack frame is an Hir expression and return it. + 23,931 ( 0.01%) . . . fn unwrap_expr(self) -> Hir { + 21,272 ( 0.01%) . . . match self { + 15,954 ( 0.00%) . . . HirFrame::Expr(expr) => expr, + . . . . HirFrame::Literal(lit) => Hir::literal(lit), + . . . . _ => panic!("tried to unwrap expr from HirFrame, got: {:?}", self), + . . . . } + 26,590 ( 0.01%) . . . } + . . . . + . . . . /// Assert that the current stack frame is a Unicode class expression and + . . . . /// return it. + . . . . fn unwrap_class_unicode(self) -> hir::ClassUnicode { + 14,430 ( 0.00%) . . . match self { + 28,860 ( 0.01%) . . . HirFrame::ClassUnicode(cls) => cls, + . . . . _ => panic!( + . . . . "tried to unwrap Unicode class \ + . . . . from HirFrame, got: {:?}", + . . . . self + . . . . ), + . . . . } + . . . . } + . . . . +-- line 273 ---------------------------------------- +-- line 282 ---------------------------------------- + . . . . self + . . . . ), + . . . . } + . . . . } + . . . . + . . . . /// Assert that the current stack frame is a repetition sentinel. If it + . . . . /// isn't, then panic. + . . . . fn unwrap_repetition(self) { + 3,770 ( 0.00%) . . . match self { + . . . . HirFrame::Repetition => {} + . . . . _ => { + . . . . panic!( + . . . . "tried to unwrap repetition from HirFrame, got: {:?}", + . . . . self + . . . . ) + . . . . } + . . . . } + 1,885 ( 0.00%) . . . } + 16,965 ( 0.00%) . . . => /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/core/src/ptr/mod.rs:core::ptr::drop_in_place (1,885x) + . . . . + . . . . /// Assert that the current stack frame is a group indicator and return + . . . . /// its corresponding flags (the flags that were active at the time the + . . . . /// group was entered). + . . . . fn unwrap_group(self) -> Flags { + 1,386 ( 0.00%) . . . match self { + . . . . HirFrame::Group { old_flags } => old_flags, + . . . . _ => { + . . . . panic!("tried to unwrap group from HirFrame, got: {:?}", self) + . . . . } + . . . . } + 693 ( 0.00%) . . . } + 6,237 ( 0.00%) . . . => /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/core/src/ptr/mod.rs:core::ptr::drop_in_place (693x) + . . . . + . . . . /// Assert that the current stack frame is an alternation pipe sentinel. If + . . . . /// it isn't, then panic. + . . . . fn unwrap_alternation_pipe(self) { + 32,882 ( 0.01%) . . . match self { + . . . . HirFrame::AlternationBranch => {} + . . . . _ => { + . . . . panic!( + . . . . "tried to unwrap alt pipe from HirFrame, got: {:?}", + . . . . self + . . . . ) + . . . . } + . . . . } + 32,882 ( 0.01%) . . . } +147,969 ( 0.04%) . . . => /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/core/src/ptr/mod.rs:core::ptr::drop_in_place (16,441x) + . . . . } + . . . . + . . . . impl<'t, 'p> Visitor for TranslatorI<'t, 'p> { + . . . . type Output = Hir; + . . . . type Err = Error; + . . . . + 162 ( 0.00%) . . . fn finish(self) -> Result { + . . . . // ... otherwise, we should have exactly one HIR on the stack. + 243 ( 0.00%) . . . assert_eq!(self.trans().stack.borrow().len(), 1); + 162 ( 0.00%) . . . Ok(self.pop().unwrap().unwrap_expr()) + 2,673 ( 0.00%) . . . => /home/.cargo/registry/src/index.crates.io-6f17d22bba15001f/regex-syntax-0.8.2/src/hir/translate.rs:regex_syntax::hir::translate::HirFrame::unwrap_expr (81x) + 324 ( 0.00%) . . . } + . . . . +570,048 ( 0.16%) . . . fn visit_pre(&mut self, ast: &Ast) -> Result<()> { +285,024 ( 0.08%) . . . match *ast { + . . . . Ast::ClassBracketed(_) => { + 5,506 ( 0.00%) . . . if self.flags().unicode() { + . . . . let cls = hir::ClassUnicode::empty(); + . . . . self.push(HirFrame::ClassUnicode(cls)); + . . . . } else { + . . . . let cls = hir::ClassBytes::empty(); + . . . . self.push(HirFrame::ClassBytes(cls)); + . . . . } + . . . . } + 1,885 ( 0.00%) . . . Ast::Repetition(_) => self.push(HirFrame::Repetition), + . . . . Ast::Group(ref x) => { + 1,386 ( 0.00%) . . . let old_flags = x + . . . . .flags() + . . . . .map(|ast| self.set_flags(ast)) + . . . . .unwrap_or_else(|| self.flags()); + . . . . self.push(HirFrame::Group { old_flags }); + . . . . } + . . . . Ast::Concat(_) => { + 15,786 ( 0.00%) . . . self.push(HirFrame::Concat); + . . . . } + . . . . Ast::Alternation(ref x) => { + 512 ( 0.00%) . . . self.push(HirFrame::Alternation); + 1,024 ( 0.00%) . . . if !x.asts.is_empty() { + . . . . self.push(HirFrame::AlternationBranch); + . . . . } + . . . . } + . . . . _ => {} + . . . . } + 71,256 ( 0.02%) . . . Ok(()) +641,304 ( 0.19%) . . . } + . . . . +712,560 ( 0.21%) . . . fn visit_post(&mut self, ast: &Ast) -> Result<()> { +356,280 ( 0.10%) . . . match *ast { + . . . . Ast::Empty(_) => { + . . . . self.push(HirFrame::Expr(Hir::empty())); + . . . . } + . . . . Ast::Flags(ref x) => { + 80 ( 0.00%) . . . self.set_flags(&x.flags); + . . . . // Flags in the AST are generally considered directives and + . . . . // not actual sub-expressions. However, they can be used in + . . . . // the concrete syntax like `((?i))`, and we need some kind of + . . . . // indication of an expression there, and Empty is the correct + . . . . // choice. + . . . . // + . . . . // There can also be things like `(?i)+`, but we rule those out + . . . . // in the parser. In the future, we might allow them for + . . . . // consistency sake. + . . . . self.push(HirFrame::Expr(Hir::empty())); + . . . . } + 49,480 ( 0.01%) . . . Ast::Literal(ref x) => match self.ast_literal_to_scalar(x)? { + . . . . Either::Right(byte) => self.push_byte(byte), +395,840 ( 0.11%) . . . Either::Left(ch) => match self.case_fold_char(x.span, ch)? { + . . . . None => self.push_char(ch), + . . . . Some(expr) => self.push(HirFrame::Expr(expr)), + . . . . }, + . . . . }, + . . . . Ast::Dot(ref span) => { + 35 ( 0.00%) . . . self.push(HirFrame::Expr(self.hir_dot(**span)?)); + . . . . } + . . . . Ast::Assertion(ref x) => { + 366 ( 0.00%) . . . self.push(HirFrame::Expr(self.hir_assertion(x)?)); + . . . . } + . . . . Ast::ClassPerl(ref x) => { + . . . . if self.flags().unicode() { + . . . . let cls = self.hir_perl_unicode_class(x)?; + . . . . let hcls = hir::Class::Unicode(cls); + . . . . self.push(HirFrame::Expr(Hir::class(hcls))); + . . . . } else { + . . . . let cls = self.hir_perl_byte_class(x)?; +-- line 408 ---------------------------------------- +-- line 410 ---------------------------------------- + . . . . self.push(HirFrame::Expr(Hir::class(hcls))); + . . . . } + . . . . } + . . . . Ast::ClassUnicode(ref x) => { + . . . . let cls = hir::Class::Unicode(self.hir_unicode_class(x)?); + . . . . self.push(HirFrame::Expr(Hir::class(cls))); + . . . . } + . . . . Ast::ClassBracketed(ref ast) => { + 5,506 ( 0.00%) . . . if self.flags().unicode() { + 2,753 ( 0.00%) . . . let mut cls = self.pop().unwrap().unwrap_class_unicode(); + . . . . self.unicode_fold_and_negate( + 2,753 ( 0.00%) . . . &ast.span, + 5,506 ( 0.00%) . . . ast.negated, + . . . . &mut cls, + . . . . )?; + 13,765 ( 0.00%) . . . let expr = Hir::class(hir::Class::Unicode(cls)); + . . . . self.push(HirFrame::Expr(expr)); + . . . . } else { + . . . . let mut cls = self.pop().unwrap().unwrap_class_bytes(); + . . . . self.bytes_fold_and_negate( + . . . . &ast.span, + . . . . ast.negated, + . . . . &mut cls, + . . . . )?; + . . . . let expr = Hir::class(hir::Class::Bytes(cls)); + . . . . self.push(HirFrame::Expr(expr)); + . . . . } + . . . . } + . . . . Ast::Repetition(ref x) => { + 3,770 ( 0.00%) . . . let expr = self.pop().unwrap().unwrap_expr(); + 62,205 ( 0.02%) . . . => /home/.cargo/registry/src/index.crates.io-6f17d22bba15001f/regex-syntax-0.8.2/src/hir/translate.rs:regex_syntax::hir::translate::HirFrame::unwrap_expr (1,885x) + . . . . self.pop().unwrap().unwrap_repetition(); + 9,425 ( 0.00%) . . . self.push(HirFrame::Expr(self.hir_repetition(x, expr))); + . . . . } + . . . . Ast::Group(ref x) => { + 1,386 ( 0.00%) . . . let expr = self.pop().unwrap().unwrap_expr(); + 22,869 ( 0.01%) . . . => /home/.cargo/registry/src/index.crates.io-6f17d22bba15001f/regex-syntax-0.8.2/src/hir/translate.rs:regex_syntax::hir::translate::HirFrame::unwrap_expr (693x) + . . . . let old_flags = self.pop().unwrap().unwrap_group(); + . . . . self.trans().flags.set(old_flags); + 5,544 ( 0.00%) . . . self.push(HirFrame::Expr(self.hir_capture(x, expr))); + . . . . } + . . . . Ast::Concat(_) => { + . . . . let mut exprs = vec![]; +210,600 ( 0.06%) . . . while let Some(expr) = self.pop_concat_expr() { + 39,784 ( 0.01%) . . . if !matches!(*expr.kind(), HirKind::Empty) { +198,720 ( 0.06%) . . . exprs.push(expr); + . . . . } + 40 ( 0.00%) . . . } + 3,020 ( 0.00%) . . . => /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/core/src/ptr/mod.rs:core::ptr::drop_in_place (20x) + 1,925 ( 0.00%) . . . exprs.reverse(); +110,502 ( 0.03%) . . . self.push(HirFrame::Expr(Hir::concat(exprs))); +24,202,143 ( 6.99%) 51,330 ( 6.34%) 3 ( 0.97%) . => /home/.cargo/registry/src/index.crates.io-6f17d22bba15001f/regex-syntax-0.8.2/src/hir/mod.rs:regex_syntax::hir::Hir::concat (15,786x) + . . . . } + . . . . Ast::Alternation(_) => { + . . . . let mut exprs = vec![]; + 33,906 ( 0.01%) . . . while let Some(expr) = self.pop_alt_expr() { + . . . . self.pop().unwrap().unwrap_alternation_pipe(); + . . . . exprs.push(expr); + . . . . } + 512 ( 0.00%) . . . exprs.reverse(); + 3,584 ( 0.00%) . . . self.push(HirFrame::Expr(Hir::alternation(exprs))); +6,081,394 ( 1.76%) 2,345 ( 0.29%) 4 ( 1.29%) . => /home/.cargo/registry/src/index.crates.io-6f17d22bba15001f/regex-syntax-0.8.2/src/hir/mod.rs:regex_syntax::hir::Hir::alternation (512x) + . . . . } + . . . . } + 71,378 ( 0.02%) . . . Ok(()) +641,304 ( 0.19%) . . . } + . . . . + . . . . fn visit_alternation_in(&mut self) -> Result<()> { + 15,929 ( 0.00%) . . . self.push(HirFrame::AlternationBranch); + . . . . Ok(()) + . . . . } + . . . . + 19,664 ( 0.01%) . . . fn visit_class_set_item_pre( + . . . . &mut self, + . . . . ast: &ast::ClassSetItem, + . . . . ) -> Result<()> { + 9,832 ( 0.00%) . . . match *ast { + . . . . ast::ClassSetItem::Bracketed(_) => { + 142 ( 0.00%) . . . if self.flags().unicode() { + . . . . let cls = hir::ClassUnicode::empty(); + . . . . self.push(HirFrame::ClassUnicode(cls)); + . . . . } else { + . . . . let cls = hir::ClassBytes::empty(); + . . . . self.push(HirFrame::ClassBytes(cls)); + . . . . } + . . . . } + . . . . // We needn't handle the Union case here since the visitor will + . . . . // do it for us. + . . . . _ => {} + . . . . } + 4,916 ( 0.00%) . . . Ok(()) + 24,580 ( 0.01%) . . . } + . . . . + 49,160 ( 0.01%) . . . fn visit_class_set_item_post( + . . . . &mut self, + . . . . ast: &ast::ClassSetItem, + . . . . ) -> Result<()> { + 24,580 ( 0.01%) . . . match *ast { + . . . . ast::ClassSetItem::Empty(_) => {} + . . . . ast::ClassSetItem::Literal(ref x) => { + 7,090 ( 0.00%) . . . if self.flags().unicode() { + 3,545 ( 0.00%) . . . let mut cls = self.pop().unwrap().unwrap_class_unicode(); + 3,545 ( 0.00%) . . . cls.push(hir::ClassUnicodeRange::new(x.c, x.c)); + . . . . self.push(HirFrame::ClassUnicode(cls)); + . . . . } else { + . . . . let mut cls = self.pop().unwrap().unwrap_class_bytes(); + . . . . let byte = self.class_literal_byte(x)?; + . . . . cls.push(hir::ClassBytesRange::new(byte, byte)); + . . . . self.push(HirFrame::ClassBytes(cls)); + . . . . } + . . . . } +-- line 515 ---------------------------------------- +-- line 521 ---------------------------------------- + . . . . } else { + . . . . let mut cls = self.pop().unwrap().unwrap_class_bytes(); + . . . . let start = self.class_literal_byte(&x.start)?; + . . . . let end = self.class_literal_byte(&x.end)?; + . . . . cls.push(hir::ClassBytesRange::new(start, end)); + . . . . self.push(HirFrame::ClassBytes(cls)); + . . . . } + . . . . } + 770 ( 0.00%) . . . ast::ClassSetItem::Ascii(ref x) => { + 1,540 ( 0.00%) . . . if self.flags().unicode() { + . . . . let xcls = self.hir_ascii_unicode_class(x)?; + 770 ( 0.00%) . . . let mut cls = self.pop().unwrap().unwrap_class_unicode(); + . . . . cls.union(&xcls); + 9,240 ( 0.00%) . . . self.push(HirFrame::ClassUnicode(cls)); + . . . . } else { + . . . . let xcls = self.hir_ascii_byte_class(x)?; + . . . . let mut cls = self.pop().unwrap().unwrap_class_bytes(); + . . . . cls.union(&xcls); + . . . . self.push(HirFrame::ClassBytes(cls)); + . . . . } + . . . . } + . . . . ast::ClassSetItem::Unicode(ref x) => { + . . . . let xcls = self.hir_unicode_class(x)?; + . . . . let mut cls = self.pop().unwrap().unwrap_class_unicode(); + . . . . cls.union(&xcls); + . . . . self.push(HirFrame::ClassUnicode(cls)); + . . . . } + 5 ( 0.00%) . . . ast::ClassSetItem::Perl(ref x) => { + 10 ( 0.00%) . . . if self.flags().unicode() { + 15 ( 0.00%) . . . let xcls = self.hir_perl_unicode_class(x)?; + 9,820 ( 0.00%) . . . => /home/.cargo/registry/src/index.crates.io-6f17d22bba15001f/regex-syntax-0.8.2/src/hir/translate.rs:regex_syntax::hir::translate::TranslatorI::hir_perl_unicode_class (5x) + 5 ( 0.00%) . . . let mut cls = self.pop().unwrap().unwrap_class_unicode(); + . . . . cls.union(&xcls); + 60 ( 0.00%) . . . self.push(HirFrame::ClassUnicode(cls)); + . . . . } else { + . . . . let xcls = self.hir_perl_byte_class(x)?; + . . . . let mut cls = self.pop().unwrap().unwrap_class_bytes(); + . . . . cls.union(&xcls); + . . . . self.push(HirFrame::ClassBytes(cls)); + . . . . } + . . . . } + . . . . ast::ClassSetItem::Bracketed(ref ast) => { + 142 ( 0.00%) . . . if self.flags().unicode() { + 71 ( 0.00%) . . . let mut cls1 = self.pop().unwrap().unwrap_class_unicode(); + . . . . self.unicode_fold_and_negate( + 71 ( 0.00%) . . . &ast.span, + 142 ( 0.00%) . . . ast.negated, + . . . . &mut cls1, + . . . . )?; + . . . . + . . . . let mut cls2 = self.pop().unwrap().unwrap_class_unicode(); + . . . . cls2.union(&cls1); + 852 ( 0.00%) . . . self.push(HirFrame::ClassUnicode(cls2)); + . . . . } else { + . . . . let mut cls1 = self.pop().unwrap().unwrap_class_bytes(); + . . . . self.bytes_fold_and_negate( + . . . . &ast.span, + . . . . ast.negated, + . . . . &mut cls1, + . . . . )?; + . . . . +-- line 580 ---------------------------------------- +-- line 581 ---------------------------------------- + . . . . let mut cls2 = self.pop().unwrap().unwrap_class_bytes(); + . . . . cls2.union(&cls1); + . . . . self.push(HirFrame::ClassBytes(cls2)); + . . . . } + . . . . } + . . . . // This is handled automatically by the visitor. + . . . . ast::ClassSetItem::Union(_) => {} + . . . . } + 4,916 ( 0.00%) . . . Ok(()) + 44,244 ( 0.01%) . . . } + . . . . + . . . . fn visit_class_set_binary_op_pre( + . . . . &mut self, + . . . . _op: &ast::ClassSetBinaryOp, + . . . . ) -> Result<()> { + . . . . if self.flags().unicode() { + . . . . let cls = hir::ClassUnicode::empty(); + . . . . self.push(HirFrame::ClassUnicode(cls)); +-- line 598 ---------------------------------------- +-- line 678 ---------------------------------------- + . . . . struct TranslatorI<'t, 'p> { + . . . . trans: &'t Translator, + . . . . pattern: &'p str, + . . . . } + . . . . + . . . . impl<'t, 'p> TranslatorI<'t, 'p> { + . . . . /// Build a new internal translator. + . . . . fn new(trans: &'t Translator, pattern: &'p str) -> TranslatorI<'t, 'p> { + 324 ( 0.00%) . . . TranslatorI { trans, pattern } + . . . . } + . . . . + . . . . /// Return a reference to the underlying translator. + . . . . fn trans(&self) -> &Translator { + . . . . &self.trans + . . . . } + . . . . + . . . . /// Push the given frame on to the call stack. + . . . . fn push(&self, frame: HirFrame) { + 255 ( 0.00%) . . . self.trans().stack.borrow_mut().push(frame); + . . . . } + . . . . + . . . . /// Push the given literal char on to the call stack. + . . . . /// + . . . . /// If the top-most element of the stack is a literal, then the char + . . . . /// is appended to the end of that literal. Otherwise, a new literal + . . . . /// containing just the given char is pushed to the top of the stack. + . . . . fn push_char(&self, ch: char) { + 48,360 ( 0.01%) . . . let mut buf = [0; 4]; + . . . . let bytes = ch.encode_utf8(&mut buf).as_bytes(); + . . . . let mut stack = self.trans().stack.borrow_mut(); +257,968 ( 0.07%) . . . if let Some(HirFrame::Literal(ref mut literal)) = stack.last_mut() { + . . . . literal.extend_from_slice(bytes); + . . . . } else { + . . . . stack.push(HirFrame::Literal(bytes.to_vec())); + . . . . } + . . . . } + . . . . + . . . . /// Push the given literal byte on to the call stack. + . . . . /// +-- line 716 ---------------------------------------- +-- line 731 ---------------------------------------- + . . . . self.trans().stack.borrow_mut().pop() + . . . . } + . . . . + . . . . /// Pop an HIR expression from the top of the stack for a concatenation. + . . . . /// + . . . . /// This returns None if the stack is empty or when a concat frame is seen. + . . . . /// Otherwise, it panics if it could not find an HIR expression. + . . . . fn pop_concat_expr(&self) -> Option { +249,746 ( 0.07%) . . . let frame = self.pop()?; +178,390 ( 0.05%) . . . match frame { + . . . . HirFrame::Concat => None, + 31,962 ( 0.01%) . . . HirFrame::Expr(expr) => Some(expr), + 45,978 ( 0.01%) . . . HirFrame::Literal(lit) => Some(Hir::literal(lit)), + . . . . HirFrame::ClassUnicode(_) => { + . . . . unreachable!("expected expr or concat, got Unicode class") + . . . . } + . . . . HirFrame::ClassBytes(_) => { + . . . . unreachable!("expected expr or concat, got byte class") + . . . . } + . . . . HirFrame::Repetition => { + . . . . unreachable!("expected expr or concat, got repetition") +-- line 751 ---------------------------------------- +-- line 755 ---------------------------------------- + . . . . } + . . . . HirFrame::Alternation => { + . . . . unreachable!("expected expr or concat, got alt marker") + . . . . } + . . . . HirFrame::AlternationBranch => { + . . . . unreachable!("expected expr or concat, got alt branch marker") + . . . . } + . . . . } +107,494 ( 0.03%) . . . } +142,074 ( 0.04%) . . . => /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/core/src/ptr/mod.rs:core::ptr::drop_in_place (15,786x) + . . . . + . . . . /// Pop an HIR expression from the top of the stack for an alternation. + . . . . /// + . . . . /// This returns None if the stack is empty or when an alternation frame is + . . . . /// seen. Otherwise, it panics if it could not find an HIR expression. + . . . . fn pop_alt_expr(&self) -> Option { +118,671 ( 0.03%) . . . let frame = self.pop()?; + 84,765 ( 0.02%) . . . match frame { + . . . . HirFrame::Alternation => None, +109,697 ( 0.03%) . . . HirFrame::Expr(expr) => Some(expr), + 2,310 ( 0.00%) . . . HirFrame::Literal(lit) => Some(Hir::literal(lit)), + . . . . HirFrame::ClassUnicode(_) => { + . . . . unreachable!("expected expr or alt, got Unicode class") + . . . . } + . . . . HirFrame::ClassBytes(_) => { + . . . . unreachable!("expected expr or alt, got byte class") + . . . . } + . . . . HirFrame::Repetition => { + . . . . unreachable!("expected expr or alt, got repetition") +-- line 782 ---------------------------------------- +-- line 786 ---------------------------------------- + . . . . } + . . . . HirFrame::Concat => { + . . . . unreachable!("expected expr or alt, got concat marker") + . . . . } + . . . . HirFrame::AlternationBranch => { + . . . . unreachable!("expected expr or alt, got alt branch marker") + . . . . } + . . . . } + 50,601 ( 0.01%) . . . } + 4,608 ( 0.00%) . . . => /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/core/src/ptr/mod.rs:core::ptr::drop_in_place (512x) + . . . . + . . . . /// Create a new error with the given span and error type. + . . . . fn error(&self, span: Span, kind: ErrorKind) -> Error { + . . . . Error { kind, pattern: self.pattern.to_string(), span } + . . . . } + . . . . + . . . . /// Return a copy of the active flags. + . . . . fn flags(&self) -> Flags { + . . . . self.trans().flags.get() + . . . . } + . . . . + . . . . /// Set the flags of this translator from the flags set in the given AST. + . . . . /// Then, return the old flags. + . . . . fn set_flags(&self, ast_flags: &ast::Flags) -> Flags { + 200 ( 0.00%) . . . let old_flags = self.flags(); + . . . . let mut new_flags = Flags::from_ast(ast_flags); + . . . . new_flags.merge(&old_flags); + . . . . self.trans().flags.set(new_flags); + . . . . old_flags + . . . . } + . . . . + . . . . /// Convert an Ast literal to its scalar representation. + . . . . /// +-- line 817 ---------------------------------------- +-- line 821 ---------------------------------------- + . . . . /// When Unicode mode is disabled, then a `char` will still be returned + . . . . /// whenever possible. A byte is returned only when invalid UTF-8 is + . . . . /// allowed and when the byte is not ASCII. Otherwise, a non-ASCII byte + . . . . /// will result in an error when invalid UTF-8 is not allowed. + . . . . fn ast_literal_to_scalar( + . . . . &self, + . . . . lit: &ast::Literal, + . . . . ) -> Result> { + 98,960 ( 0.03%) . . . if self.flags().unicode() { + 49,480 ( 0.01%) . . . return Ok(Either::Left(lit.c)); + . . . . } + . . . . let byte = match lit.byte() { + . . . . None => return Ok(Either::Left(lit.c)), + . . . . Some(byte) => byte, + . . . . }; + . . . . if byte <= 0x7F { + . . . . return Ok(Either::Left(char::try_from(byte).unwrap())); + . . . . } + . . . . if self.trans().utf8 { + . . . . return Err(self.error(lit.span, ErrorKind::InvalidUtf8)); + . . . . } + . . . . Ok(Either::Right(byte)) + . . . . } + . . . . + . . . . fn case_fold_char(&self, span: Span, c: char) -> Result> { + 51,820 ( 0.01%) . . . if !self.flags().case_insensitive() { + . . . . return Ok(None); + . . . . } + . . . . if self.flags().unicode() { + . . . . // If case folding won't do anything, then don't bother trying. + . . . . let map = unicode::SimpleCaseFolder::new() + 3,360 ( 0.00%) . . . .map(|f| f.overlaps(c, c)) +178,870 ( 0.05%) . . . => /home/.cargo/registry/src/index.crates.io-6f17d22bba15001f/regex-syntax-0.8.2/src/unicode.rs:regex_syntax::unicode::SimpleCaseFolder::overlaps (1,120x) + . . . . .map_err(|_| { + . . . . self.error(span, ErrorKind::UnicodeCaseUnavailable) + . . . . })?; + 2,240 ( 0.00%) . . . if !map { + . . . . return Ok(None); + . . . . } + . . . . let mut cls = + 4,480 ( 0.00%) . . . hir::ClassUnicode::new(vec![hir::ClassUnicodeRange::new( + 32,480 ( 0.01%) . . . => /home/.cargo/registry/src/index.crates.io-6f17d22bba15001f/regex-syntax-0.8.2/src/hir/mod.rs:regex_syntax::hir::ClassUnicode::new (1,120x) + . . . . c, c, + . . . . )]); + 2,240 ( 0.00%) . . . cls.try_case_fold_simple().map_err(|_| { +1,012,881 ( 0.29%) 2,240 ( 0.28%) . . => /home/.cargo/registry/src/index.crates.io-6f17d22bba15001f/regex-syntax-0.8.2/src/hir/mod.rs:regex_syntax::hir::ClassUnicode::try_case_fold_simple (1,120x) + . . . . self.error(span, ErrorKind::UnicodeCaseUnavailable) + . . . . })?; + 5,600 ( 0.00%) . . . Ok(Some(Hir::class(hir::Class::Unicode(cls)))) + . . . . } else { + . . . . if !c.is_ascii() { + . . . . return Ok(None); + . . . . } + . . . . // If case folding won't do anything, then don't bother trying. + . . . . match c { + . . . . 'A'..='Z' | 'a'..='z' => {} + . . . . _ => return Ok(None), +-- line 874 ---------------------------------------- +-- line 882 ---------------------------------------- + . . . . )]); + . . . . cls.case_fold_simple(); + . . . . Ok(Some(Hir::class(hir::Class::Bytes(cls)))) + . . . . } + . . . . } + . . . . + . . . . fn hir_dot(&self, span: Span) -> Result { + . . . . let (utf8, lineterm, flags) = + 15 ( 0.00%) . . . (self.trans().utf8, self.trans().line_terminator, self.flags()); + 5 ( 0.00%) . . . if utf8 && (!flags.unicode() || !lineterm.is_ascii()) { + . . . . return Err(self.error(span, ErrorKind::InvalidUtf8)); + . . . . } + 5 ( 0.00%) . . . let dot = if flags.dot_matches_new_line() { + . . . . if flags.unicode() { + . . . . hir::Dot::AnyChar + . . . . } else { + . . . . hir::Dot::AnyByte + . . . . } + . . . . } else { + 5 ( 0.00%) . . . if flags.unicode() { + 10 ( 0.00%) . . . if flags.crlf() { + . . . . hir::Dot::AnyCharExceptCRLF + . . . . } else { + 5 ( 0.00%) . . . if !lineterm.is_ascii() { + . . . . return Err( + . . . . self.error(span, ErrorKind::InvalidLineTerminator) + . . . . ); + . . . . } + . . . . hir::Dot::AnyCharExcept(char::from(lineterm)) + . . . . } + . . . . } else { + . . . . if flags.crlf() { + . . . . hir::Dot::AnyByteExceptCRLF + . . . . } else { + . . . . hir::Dot::AnyByteExcept(lineterm) + . . . . } + . . . . } + . . . . }; + 15 ( 0.00%) . . . Ok(Hir::dot(dot)) + . . . . } + . . . . + . . . . fn hir_assertion(&self, asst: &ast::Assertion) -> Result { + 244 ( 0.00%) . . . let unicode = self.flags().unicode(); + . . . . let multi_line = self.flags().multi_line(); + . . . . let crlf = self.flags().crlf(); + . . . . Ok(match asst.kind { + 330 ( 0.00%) . . . ast::AssertionKind::StartLine => Hir::look(if multi_line { + . . . . if crlf { + . . . . hir::Look::StartCRLF + . . . . } else { + . . . . hir::Look::StartLF + . . . . } + . . . . } else { + . . . . hir::Look::Start + . . . . }), + 280 ( 0.00%) . . . ast::AssertionKind::EndLine => Hir::look(if multi_line { + . . . . if crlf { + . . . . hir::Look::EndCRLF + . . . . } else { + . . . . hir::Look::EndLF + . . . . } + . . . . } else { + . . . . hir::Look::End + . . . . }), +-- line 945 ---------------------------------------- +-- line 982 ---------------------------------------- + . . . . hir::Look::WordEndHalfUnicode + . . . . } else { + . . . . hir::Look::WordEndHalfAscii + . . . . }), + . . . . }) + . . . . } + . . . . + . . . . fn hir_capture(&self, group: &ast::Group, expr: Hir) -> Hir { + 3,251 ( 0.00%) . . . let (index, name) = match group.kind { + 428 ( 0.00%) . . . ast::GroupKind::CaptureIndex(index) => (index, None), + . . . . ast::GroupKind::CaptureName { ref name, .. } => { + 2,344 ( 0.00%) . . . (name.index, Some(name.name.clone().into_boxed_str())) + 65,950 ( 0.02%) 55 ( 0.01%) . . => /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/alloc/src/string.rs:::clone (586x) + . . . . } + . . . . // The HIR doesn't need to use non-capturing groups, since the way + . . . . // in which the data type is defined handles this automatically. + . . . . ast::GroupKind::NonCapturing(_) => return expr, + . . . . }; + 3,465 ( 0.00%) . . . Hir::capture(hir::Capture { index, name, sub: Box::new(expr) }) + . . . . } + . . . . + . . . . fn hir_repetition(&self, rep: &ast::Repetition, expr: Hir) -> Hir { + 25,059 ( 0.01%) . . . let (min, max) = match rep.op.kind { + . . . . ast::RepetitionKind::ZeroOrOne => (0, Some(1)), + . . . . ast::RepetitionKind::ZeroOrMore => (0, None), + . . . . ast::RepetitionKind::OneOrMore => (1, None), + 315 ( 0.00%) . . . ast::RepetitionKind::Range(ast::RepetitionRange::Exactly(m)) => { + . . . . (m, Some(m)) + . . . . } + . . . . ast::RepetitionKind::Range(ast::RepetitionRange::AtLeast(m)) => { + . . . . (m, None) + . . . . } + . . . . ast::RepetitionKind::Range(ast::RepetitionRange::Bounded( + 67 ( 0.00%) . . . m, + 268 ( 0.00%) . . . n, + . . . . )) => (m, Some(n)), + . . . . }; + . . . . let greedy = + 20,735 ( 0.01%) . . . if self.flags().swap_greed() { !rep.greedy } else { rep.greedy }; + 13,195 ( 0.00%) . . . Hir::repetition(hir::Repetition { + . . . . min, + . . . . max, + . . . . greedy, + . . . . sub: Box::new(expr), + . . . . }) + . . . . } + . . . . + . . . . fn hir_unicode_class( +-- line 1028 ---------------------------------------- +-- line 1058 ---------------------------------------- + . . . . result + . . . . } + . . . . + . . . . fn hir_ascii_unicode_class( + . . . . &self, + . . . . ast: &ast::ClassAscii, + . . . . ) -> Result { + . . . . let mut cls = hir::ClassUnicode::new( + 770 ( 0.00%) . . . ascii_class_as_chars(&ast.kind) + . . . . .map(|(s, e)| hir::ClassUnicodeRange::new(s, e)), + . . . . ); + 1,540 ( 0.00%) . . . self.unicode_fold_and_negate(&ast.span, ast.negated, &mut cls)?; + . . . . Ok(cls) + . . . . } + . . . . + . . . . fn hir_ascii_byte_class( + . . . . &self, + . . . . ast: &ast::ClassAscii, + . . . . ) -> Result { + . . . . let mut cls = hir::ClassBytes::new( + . . . . ascii_class(&ast.kind) + . . . . .map(|(s, e)| hir::ClassBytesRange::new(s, e)), + . . . . ); + . . . . self.bytes_fold_and_negate(&ast.span, ast.negated, &mut cls)?; + . . . . Ok(cls) + . . . . } + . . . . + 50 ( 0.00%) . . . fn hir_perl_unicode_class( + . . . . &self, + . . . . ast_class: &ast::ClassPerl, + . . . . ) -> Result { + . . . . use crate::ast::ClassPerlKind::*; + . . . . + 10 ( 0.00%) . . . assert!(self.flags().unicode()); + 15 ( 0.00%) . . . let result = match ast_class.kind { + . . . . Digit => unicode::perl_digit(), + . . . . Space => unicode::perl_space(), + . . . . Word => unicode::perl_word(), + . . . . }; + . . . . let mut class = + 60 ( 0.00%) . . . self.convert_unicode_class_error(&ast_class.span, result)?; + . . . . // We needn't apply case folding here because the Perl Unicode classes + . . . . // are already closed under Unicode simple case folding. + 10 ( 0.00%) . . . if ast_class.negated { + . . . . class.negate(); + . . . . } + 110 ( 0.00%) . . . Ok(class) + 40 ( 0.00%) . . . } + . . . . + . . . . fn hir_perl_byte_class( + . . . . &self, + . . . . ast_class: &ast::ClassPerl, + . . . . ) -> Result { + . . . . use crate::ast::ClassPerlKind::*; + . . . . + . . . . assert!(!self.flags().unicode()); +-- line 1113 ---------------------------------------- +-- line 1160 ---------------------------------------- + . . . . span: &Span, + . . . . negated: bool, + . . . . class: &mut hir::ClassUnicode, + . . . . ) -> Result<()> { + . . . . // Note that we must apply case folding before negation! + . . . . // Consider `(?i)[^x]`. If we applied negation first, then + . . . . // the result would be the character class that matched any + . . . . // Unicode scalar value. + 4,014 ( 0.00%) . . . if self.flags().case_insensitive() { + . . . . class.try_case_fold_simple().map_err(|_| { + . . . . self.error(span.clone(), ErrorKind::UnicodeCaseUnavailable) + . . . . })?; + . . . . } + 3,594 ( 0.00%) . . . if negated { + . . . . class.negate(); + . . . . } + . . . . Ok(()) + . . . . } + . . . . + . . . . fn bytes_fold_and_negate( + . . . . &self, + . . . . span: &Span, +-- line 1181 ---------------------------------------- +-- line 1234 ---------------------------------------- + . . . . // entirely in the parser. + . . . . } + . . . . + . . . . impl Flags { + . . . . fn from_ast(ast: &ast::Flags) -> Flags { + . . . . let mut flags = Flags::default(); + . . . . let mut enable = true; + . . . . for item in &ast.items { + 170 ( 0.00%) . . . match item.kind { + . . . . ast::FlagsItemKind::Negation => { + . . . . enable = false; + . . . . } + . . . . ast::FlagsItemKind::Flag(ast::Flag::CaseInsensitive) => { + 40 ( 0.00%) . . . flags.case_insensitive = Some(enable); + . . . . } + . . . . ast::FlagsItemKind::Flag(ast::Flag::MultiLine) => { + . . . . flags.multi_line = Some(enable); + . . . . } + . . . . ast::FlagsItemKind::Flag(ast::Flag::DotMatchesNewLine) => { + . . . . flags.dot_matches_new_line = Some(enable); + . . . . } + . . . . ast::FlagsItemKind::Flag(ast::Flag::SwapGreed) => { +-- line 1255 ---------------------------------------- +-- line 1263 ---------------------------------------- + . . . . } + . . . . ast::FlagsItemKind::Flag(ast::Flag::IgnoreWhitespace) => {} + . . . . } + . . . . } + . . . . flags + . . . . } + . . . . + . . . . fn merge(&mut self, previous: &Flags) { + 40 ( 0.00%) . . . if self.case_insensitive.is_none() { + . . . . self.case_insensitive = previous.case_insensitive; + . . . . } + 60 ( 0.00%) . . . if self.multi_line.is_none() { + . . . . self.multi_line = previous.multi_line; + . . . . } + 60 ( 0.00%) . . . if self.dot_matches_new_line.is_none() { + . . . . self.dot_matches_new_line = previous.dot_matches_new_line; + . . . . } + 60 ( 0.00%) . . . if self.swap_greed.is_none() { + . . . . self.swap_greed = previous.swap_greed; + . . . . } + 60 ( 0.00%) . . . if self.unicode.is_none() { + . . . . self.unicode = previous.unicode; + . . . . } + 60 ( 0.00%) . . . if self.crlf.is_none() { + . . . . self.crlf = previous.crlf; + . . . . } + . . . . } + . . . . + . . . . fn case_insensitive(&self) -> bool { + . . . . self.case_insensitive.unwrap_or(false) + . . . . } + . . . . +-- line 1294 ---------------------------------------- +-- line 1318 ---------------------------------------- + . . . . .map(|(s, e)| hir::ClassBytesRange::new(s, e)) + . . . . .collect(); + . . . . hir::ClassBytes::new(ranges) + . . . . } + . . . . + . . . . fn ascii_class(kind: &ast::ClassAsciiKind) -> impl Iterator { + . . . . use crate::ast::ClassAsciiKind::*; + . . . . + 3,080 ( 0.00%) . . . let slice: &'static [(u8, u8)] = match *kind { + . . . . Alnum => &[(b'0', b'9'), (b'A', b'Z'), (b'a', b'z')], + . . . . Alpha => &[(b'A', b'Z'), (b'a', b'z')], + . . . . Ascii => &[(b'\x00', b'\x7F')], + . . . . Blank => &[(b'\t', b'\t'), (b' ', b' ')], + . . . . Cntrl => &[(b'\x00', b'\x1F'), (b'\x7F', b'\x7F')], + . . . . Digit => &[(b'0', b'9')], + . . . . Graph => &[(b'!', b'~')], + . . . . Lower => &[(b'a', b'z')], +-- line 1334 ---------------------------------------- + +881,902 ( 0.25%) . . . + +-------------------------------------------------------------------------------- +-- Auto-annotated source: /home/.cargo/registry/src/index.crates.io-6f17d22bba15001f/regex-automata-0.4.6/src/util/determinize/state.rs +-------------------------------------------------------------------------------- +Ir Ge sysCount sysTime + +-- line 101 ---------------------------------------- + . . . . /// states. + . . . . /// + . . . . /// This type is intended to be used only in NFA-to-DFA conversion via powerset + . . . . /// construction. + . . . . /// + . . . . /// It may be cheaply cloned and accessed safely from multiple threads + . . . . /// simultaneously. + . . . . #[derive(Clone, Eq, Hash, PartialEq, PartialOrd, Ord)] + 566 ( 0.00%) . . . pub(crate) struct State(Arc<[u8]>); + . . . . + . . . . /// This Borrow impl permits us to lookup any state in a map by its byte + . . . . /// representation. This is particularly convenient when one has a StateBuilder + . . . . /// and we want to see if a correspondingly equivalent state already exists. If + . . . . /// one does exist, then we can reuse the allocation required by StateBuilder + . . . . /// without having to convert it into a State first. + . . . . impl core::borrow::Borrow<[u8]> for State { + . . . . fn borrow(&self) -> &[u8] { +-- line 117 ---------------------------------------- +-- line 122 ---------------------------------------- + . . . . impl core::fmt::Debug for State { + . . . . fn fmt(&self, f: &mut core::fmt::Formatter) -> core::fmt::Result { + . . . . f.debug_tuple("State").field(&self.repr()).finish() + . . . . } + . . . . } + . . . . + . . . . /// For docs on these routines, see the internal Repr and ReprVec types below. + . . . . impl State { +2,044 ( 0.00%) . . . pub(crate) fn dead() -> State { + . . . . StateBuilderEmpty::new().into_matches().into_nfa().to_state() +2,920 ( 0.00%) . . . } + . . . . + . . . . pub(crate) fn is_match(&self) -> bool { + . . . . self.repr().is_match() + . . . . } + . . . . + . . . . pub(crate) fn is_from_word(&self) -> bool { + . . . . self.repr().is_from_word() + . . . . } +-- line 140 ---------------------------------------- +-- line 143 ---------------------------------------- + . . . . self.repr().is_half_crlf() + . . . . } + . . . . + . . . . pub(crate) fn look_have(&self) -> LookSet { + . . . . self.repr().look_have() + . . . . } + . . . . + . . . . pub(crate) fn look_need(&self) -> LookSet { + 436 ( 0.00%) . . . self.repr().look_need() + . . . . } + . . . . + . . . . pub(crate) fn match_len(&self) -> usize { + . . . . self.repr().match_len() + . . . . } + . . . . + . . . . pub(crate) fn match_pattern(&self, index: usize) -> PatternID { + . . . . self.repr().match_pattern(index) +-- line 159 ---------------------------------------- +-- line 163 ---------------------------------------- + . . . . self.repr().match_pattern_ids() + . . . . } + . . . . + . . . . #[cfg(all(test, not(miri)))] + . . . . pub(crate) fn iter_match_pattern_ids(&self, f: F) { + . . . . self.repr().iter_match_pattern_ids(f) + . . . . } + . . . . +1,526 ( 0.00%) . . . pub(crate) fn iter_nfa_state_ids(&self, f: F) { + 654 ( 0.00%) . . . self.repr().iter_nfa_state_ids(f) +1,744 ( 0.00%) . . . } + . . . . + . . . . pub(crate) fn memory_usage(&self) -> usize { + . . . . self.0.len() + . . . . } + . . . . + . . . . fn repr(&self) -> Repr<'_> { + . . . . Repr(&*self.0) + . . . . } +-- line 181 ---------------------------------------- +-- line 188 ---------------------------------------- + . . . . /// made when new() is called. Its main use is for being converted into a + . . . . /// builder that can capture assertions and pattern IDs. + . . . . #[derive(Clone, Debug)] + . . . . pub(crate) struct StateBuilderEmpty(Vec); + . . . . + . . . . /// For docs on these routines, see the internal Repr and ReprVec types below. + . . . . impl StateBuilderEmpty { + . . . . pub(crate) fn new() -> StateBuilderEmpty { +1,110 ( 0.00%) . . . StateBuilderEmpty(alloc::vec![]) + . . . . } + . . . . + . . . . pub(crate) fn into_matches(mut self) -> StateBuilderMatches { + . . . . self.0.extend_from_slice(&[0, 0, 0, 0, 0, 0, 0, 0, 0]); +1,069 ( 0.00%) . . . StateBuilderMatches(self.0) + . . . . } + . . . . + . . . . fn clear(&mut self) { + . . . . self.0.clear(); + . . . . } + . . . . + . . . . pub(crate) fn capacity(&self) -> usize { + . . . . self.0.capacity() +-- line 209 ---------------------------------------- +-- line 222 ---------------------------------------- + . . . . f.debug_tuple("StateBuilderMatches").field(&self.repr()).finish() + . . . . } + . . . . } + . . . . + . . . . /// For docs on these routines, see the internal Repr and ReprVec types below. + . . . . impl StateBuilderMatches { + . . . . pub(crate) fn into_nfa(mut self) -> StateBuilderNFA { + . . . . self.repr_vec().close_match_pattern_ids(); +1,077 ( 0.00%) . . . StateBuilderNFA { repr: self.0, prev_nfa_state_id: StateID::ZERO } + . . . . } + . . . . + . . . . pub(crate) fn set_is_from_word(&mut self) { + . . . . self.repr_vec().set_is_from_word() + . . . . } + . . . . + . . . . pub(crate) fn set_is_half_crlf(&mut self) { + . . . . self.repr_vec().set_is_half_crlf() + . . . . } + . . . . + . . . . pub(crate) fn look_have(&self) -> LookSet { + 470 ( 0.00%) . . . LookSet::read_repr(&self.0[1..]) + . . . . } + . . . . + . . . . pub(crate) fn set_look_have( + . . . . &mut self, + . . . . set: impl FnMut(LookSet) -> LookSet, + . . . . ) { + . . . . self.repr_vec().set_look_have(set) + . . . . } + . . . . + 9 ( 0.00%) . . . pub(crate) fn add_match_pattern_id(&mut self, pid: PatternID) { + . . . . self.repr_vec().add_match_pattern_id(pid) + 12 ( 0.00%) . . . } + . . . . + . . . . fn repr(&self) -> Repr<'_> { + . . . . Repr(&self.0) + . . . . } + . . . . + . . . . fn repr_vec(&mut self) -> ReprVec<'_> { + . . . . ReprVec(&mut self.0) + . . . . } +-- line 262 ---------------------------------------- +-- line 290 ---------------------------------------- + . . . . + . . . . pub(crate) fn clear(self) -> StateBuilderEmpty { + . . . . let mut builder = StateBuilderEmpty(self.repr); + . . . . builder.clear(); + . . . . builder + . . . . } + . . . . + . . . . pub(crate) fn look_need(&self) -> LookSet { + 518 ( 0.00%) . . . self.repr().look_need() + . . . . } + . . . . + . . . . pub(crate) fn set_look_have( + . . . . &mut self, + . . . . set: impl FnMut(LookSet) -> LookSet, + . . . . ) { + . . . . self.repr_vec().set_look_have(set) + . . . . } +-- line 306 ---------------------------------------- +-- line 389 ---------------------------------------- + . . . . /// Returns true if and only if this is a match state. + . . . . /// + . . . . /// If callers have added pattern IDs to this state, then callers MUST set + . . . . /// this state as a match state explicitly. However, as a special case, + . . . . /// states that are marked as match states but with no pattern IDs, then + . . . . /// the state is treated as if it had a single pattern ID equivalent to + . . . . /// PatternID::ZERO. + . . . . fn is_match(&self) -> bool { +1,581 ( 0.00%) . . . self.0[0] & (1 << 0) > 0 + . . . . } + . . . . + . . . . /// Returns true if and only if this state has had at least one pattern + . . . . /// ID added to it. + . . . . /// + . . . . /// This is an internal-only flag that permits the representation to save + . . . . /// space in the common case of an NFA with one pattern in it. In that + . . . . /// case, a match state can only ever have exactly one pattern ID: + . . . . /// PatternID::ZERO. So there's no need to represent it. + . . . . fn has_pattern_ids(&self) -> bool { +2,829 ( 0.00%) . . . self.0[0] & (1 << 1) > 0 + . . . . } + . . . . + . . . . /// Returns true if and only if this state is marked as having been created + . . . . /// from a transition over a word byte. This is useful for checking whether + . . . . /// a word boundary assertion is true or not, which requires look-behind + . . . . /// (whether the current state came from a word byte or not) and look-ahead + . . . . /// (whether the transition byte is a word byte or not). + . . . . /// +-- line 416 ---------------------------------------- +-- line 423 ---------------------------------------- + . . . . self.0[0] & (1 << 2) > 0 + . . . . } + . . . . + . . . . /// Returns true if and only if this state is marked as being inside of a + . . . . /// CRLF terminator. In the forward direction, this means the state was + . . . . /// created after seeing a `\r`. In the reverse direction, this means the + . . . . /// state was created after seeing a `\n`. + . . . . fn is_half_crlf(&self) -> bool { + 80 ( 0.00%) . . . self.0[0] & (1 << 3) > 0 + . . . . } + . . . . + . . . . /// The set of look-behind assertions that were true in the transition that + . . . . /// created this state. + . . . . /// + . . . . /// Generally, this should be empty if 'look_need' is empty, since there is + . . . . /// no reason to track which look-behind assertions are true if the state + . . . . /// has no conditional epsilon transitions. +-- line 439 ---------------------------------------- +-- line 518 ---------------------------------------- + . . . . f(PatternID::new_unchecked(usize::try_from(pid).unwrap())); + . . . . } + . . . . } + . . . . + . . . . /// Calls the given function on every NFA state ID in this state. + . . . . fn iter_nfa_state_ids(&self, mut f: F) { + . . . . let mut sids = &self.0[self.pattern_offset_end()..]; + . . . . let mut prev = 0i32; +1,206 ( 0.00%) . . . while !sids.is_empty() { + . . . . let (delta, nr) = read_vari32(sids); + . . . . sids = &sids[nr..]; + 988 ( 0.00%) . . . let sid = prev + delta; + . . . . prev = sid; + . . . . // This is OK since we only ever serialize valid StateIDs to + . . . . // states. And since state IDs can never exceed an isize, they must + . . . . // always be able to fit into a usize, and thus cast is OK. + . . . . f(StateID::new_unchecked(sid.as_usize())) + . . . . } + . . . . } + . . . . +-- line 537 ---------------------------------------- +-- line 548 ---------------------------------------- + . . . . } + . . . . + . . . . /// Returns the total number of *encoded* pattern IDs in this state. + . . . . /// + . . . . /// This may return 0 even when this is a match state, since the pattern + . . . . /// ID `PatternID::ZERO` is not encoded when it's the only pattern ID in + . . . . /// the match state (the overwhelming common case). + . . . . fn encoded_pattern_len(&self) -> usize { + 218 ( 0.00%) . . . if !self.has_pattern_ids() { + . . . . return 0; + . . . . } + . . . . // This unwrap is OK since the total number of patterns is always + . . . . // guaranteed to fit into a usize. + . . . . usize::try_from(wire::read_u32(&self.0[9..13])).unwrap() + . . . . } + . . . . } + . . . . +-- line 564 ---------------------------------------- +-- line 588 ---------------------------------------- + . . . . struct ReprVec<'a>(&'a mut Vec); + . . . . + . . . . impl<'a> ReprVec<'a> { + . . . . /// Set this state as a match state. + . . . . /// + . . . . /// This should not be exposed explicitly outside of this module. It is + . . . . /// set automatically when a pattern ID is added. + . . . . fn set_is_match(&mut self) { + 6 ( 0.00%) . . . self.0[0] |= 1 << 0; + . . . . } + . . . . + . . . . /// Set that this state has pattern IDs explicitly written to it. + . . . . /// + . . . . /// This should not be exposed explicitly outside of this module. This is + . . . . /// used internally as a space saving optimization. Namely, if the state + . . . . /// is a match state but does not have any pattern IDs written to it, + . . . . /// then it is automatically inferred to have a pattern ID of ZERO. +-- line 604 ---------------------------------------- +-- line 621 ---------------------------------------- + . . . . /// In the reverse direction, this should be set when a `\n` has been seen. + . . . . fn set_is_half_crlf(&mut self) { + . . . . self.0[0] |= 1 << 3; + . . . . } + . . . . + . . . . /// The set of look-behind assertions that were true in the transition that + . . . . /// created this state. + . . . . fn look_have(&self) -> LookSet { + 40 ( 0.00%) . . . self.repr().look_have() + . . . . } + . . . . + . . . . /// The set of look-around (both behind and ahead) assertions that appear + . . . . /// at least once in this state's set of NFA states. + . . . . fn look_need(&self) -> LookSet { + . . . . self.repr().look_need() + . . . . } + . . . . +-- line 637 ---------------------------------------- +-- line 660 ---------------------------------------- + . . . . // not write either the pattern ID or the number of patterns encoded. + . . . . // Instead, all we do is set the 'is_match' bit on this state. Overall, + . . . . // this saves 8 bytes per match state for the overwhelming majority of + . . . . // match states. + . . . . // + . . . . // In order to know whether pattern IDs need to be explicitly read or + . . . . // not, we use another internal-only bit, 'has_pattern_ids', to + . . . . // indicate whether they have been explicitly written or not. + 3 ( 0.00%) . . . if !self.repr().has_pattern_ids() { + 3 ( 0.00%) . . . if pid == PatternID::ZERO { + . . . . self.set_is_match(); + . . . . return; + . . . . } + . . . . // Make room for 'close_match_pattern_ids' to write the total + . . . . // number of pattern IDs written. + . . . . self.0.extend(core::iter::repeat(0).take(PatternID::SIZE)); + . . . . self.set_has_pattern_ids(); + . . . . // If this was already a match state, then the only way that's +-- line 677 ---------------------------------------- +-- line 695 ---------------------------------------- + . . . . /// Once this is called, callers must not call it or 'add_match_pattern_id' + . . . . /// again. + . . . . /// + . . . . /// This should not be exposed explicitly outside of this module. It + . . . . /// should be called only when converting a StateBuilderMatches into a + . . . . /// StateBuilderNFA. + . . . . fn close_match_pattern_ids(&mut self) { + . . . . // If we never wrote any pattern IDs, then there's nothing to do here. + 551 ( 0.00%) . . . if !self.repr().has_pattern_ids() { + . . . . return; + . . . . } + . . . . let patsize = PatternID::SIZE; + . . . . let pattern_bytes = self.0.len() - 13; + . . . . // Every pattern ID uses 4 bytes, so number of bytes should be + . . . . // divisible by 4. + . . . . assert_eq!(pattern_bytes % patsize, 0); + . . . . // This unwrap is OK since we are guaranteed that the maximum number +-- line 711 ---------------------------------------- +-- line 713 ---------------------------------------- + . . . . let count32 = u32::try_from(pattern_bytes / patsize).unwrap(); + . . . . wire::NE::write_u32(count32, &mut self.0[9..13]); + . . . . } + . . . . + . . . . /// Add an NFA state ID to this state. The order in which NFA states are + . . . . /// added matters. It is the caller's responsibility to ensure that + . . . . /// duplicate NFA state IDs are not added. + . . . . fn add_nfa_state_id(&mut self, prev: &mut StateID, sid: StateID) { +1,994 ( 0.00%) . . . let delta = sid.as_i32() - prev.as_i32(); + . . . . write_vari32(self.0, delta); + 41 ( 0.00%) . . . *prev = sid; + . . . . } + . . . . + . . . . /// Return a read-only view of this state's representation. + . . . . fn repr(&self) -> Repr<'_> { + . . . . Repr(self.0.as_slice()) + . . . . } + . . . . } + . . . . + . . . . /// Write a signed 32-bit integer using zig-zag encoding. + . . . . /// + . . . . /// https://developers.google.com/protocol-buffers/docs/encoding#varints + . . . . fn write_vari32(data: &mut Vec, n: i32) { + 997 ( 0.00%) . . . let mut un = n.to_bits() << 1; +1,994 ( 0.00%) . . . if n < 0 { + . . . . un = !un; + . . . . } + . . . . write_varu32(data, un) + . . . . } + . . . . + . . . . /// Read a signed 32-bit integer using zig-zag encoding. Also, return the + . . . . /// number of bytes read. + . . . . /// + . . . . /// https://developers.google.com/protocol-buffers/docs/encoding#varints + . . . . fn read_vari32(data: &[u8]) -> (i32, usize) { + . . . . let (un, i) = read_varu32(data); +1,976 ( 0.00%) . . . let mut n = i32::from_bits(un >> 1); +2,964 ( 0.00%) . . . if un & 1 != 0 { + . . . . n = !n; + . . . . } + . . . . (n, i) + . . . . } + . . . . + . . . . /// Write an unsigned 32-bit integer as a varint. In essence, `n` is written + . . . . /// as a sequence of bytes where all bytes except for the last one have the + . . . . /// most significant bit set. The least significant 7 bits correspond to the + . . . . /// actual bits of `n`. So in the worst case, a varint uses 5 bytes, but in + . . . . /// very common cases, it uses fewer than 4. + . . . . /// + . . . . /// https://developers.google.com/protocol-buffers/docs/encoding#varints + . . . . fn write_varu32(data: &mut Vec, mut n: u32) { +2,968 ( 0.00%) . . . while n >= 0b1000_0000 { + 18 ( 0.00%) . . . data.push(n.low_u8() | 0b1000_0000); + 18 ( 0.00%) . . . n >>= 7; + . . . . } + . . . . data.push(n.low_u8()); + . . . . } + . . . . + . . . . /// Read an unsigned 32-bit varint. Also, return the number of bytes read. + . . . . /// + . . . . /// https://developers.google.com/protocol-buffers/docs/encoding#varints + . . . . fn read_varu32(data: &[u8]) -> (u32, usize) { + . . . . // N.B. We can assume correctness here since we know that all varuints are + . . . . // written with write_varu32. Hence, the 'as' uses and unchecked arithmetic + . . . . // is all okay. + . . . . let mut n: u32 = 0; + . . . . let mut shift: u32 = 0; + 998 ( 0.00%) . . . for (i, &b) in data.iter().enumerate() { +5,948 ( 0.00%) . . . if b < 0b1000_0000 { +1,976 ( 0.00%) . . . return (n | (u32::from(b) << shift), i + 1); + . . . . } + 30 ( 0.00%) . . . n |= (u32::from(b) & 0b0111_1111) << shift; + 10 ( 0.00%) . . . shift += 7; + . . . . } + . . . . (0, 0) + . . . . } + . . . . + . . . . /// Push a native-endian encoded `n` on to `dst`. + . . . . fn write_u32(dst: &mut Vec, n: u32) { + . . . . use crate::util::wire::NE; + . . . . +-- line 793 ---------------------------------------- + +5,266 ( 0.00%) . . . + +-------------------------------------------------------------------------------- +-- Auto-annotated source: /home/.cargo/registry/src/index.crates.io-6f17d22bba15001f/regex-automata-0.4.6/src/meta/reverse_inner.rs +-------------------------------------------------------------------------------- +Ir Ge sysCount sysTime + +-- line 45 ---------------------------------------- + . . . . /// The idea here is that the prefilter returned can be used to find candidate + . . . . /// matches. And then the HIR returned can be used to build a reverse regex + . . . . /// matcher, which will find the start of the candidate match. Finally, the + . . . . /// match still has to be confirmed with a normal anchored forward scan to find + . . . . /// the end position of the match. + . . . . /// + . . . . /// Note that this assumes leftmost-first match semantics, so callers must + . . . . /// not call this otherwise. + 104 ( 0.00%) . . . pub(crate) fn extract(hirs: &[&Hir]) -> Option<(Hir, Prefilter)> { + 26 ( 0.00%) . . . if hirs.len() != 1 { + . . . . debug!( + . . . . "skipping reverse inner optimization since it only \ + . . . . supports 1 pattern, {} were given", + . . . . hirs.len(), + . . . . ); + . . . . return None; + . . . . } + 52 ( 0.00%) . . . let mut concat = match top_concat(hirs[0]) { + . . . . Some(concat) => concat, + . . . . None => { + . . . . debug!( + . . . . "skipping reverse inner optimization because a top-level \ + . . . . concatenation could not found", + . . . . ); + . . . . return None; + . . . . } + . . . . }; + . . . . // We skip the first HIR because if it did have a prefix prefilter in it, + . . . . // we probably wouldn't be here looking for an inner prefilter. + . . . . for i in 1..concat.len() { + . . . . let hir = &concat[i]; + 186 ( 0.00%) . . . let pre = match prefilter(hir) { +16,737,867 ( 4.84%) 21,975 ( 2.71%) . . => /home/.cargo/registry/src/index.crates.io-6f17d22bba15001f/regex-automata-0.4.6/src/meta/reverse_inner.rs:regex_automata::meta::reverse_inner::prefilter (31x) + . . . . None => continue, + 88 ( 0.00%) . . . Some(pre) => pre, + . . . . }; + . . . . // Even if we got a prefilter, if it isn't consider "fast," then we + . . . . // probably don't want to bother with it. Namely, since the reverse + . . . . // inner optimization requires some overhead, it likely only makes + . . . . // sense if the prefilter scan itself is (believed) to be much faster + . . . . // than the regex engine. + 22 ( 0.00%) . . . if !pre.is_fast() { + . . . . debug!( + . . . . "skipping extracted inner prefilter because \ + . . . . it probably isn't fast" + . . . . ); + . . . . continue; + . . . . } + 78 ( 0.00%) . . . let concat_suffix = Hir::concat(concat.split_off(i)); +104,806 ( 0.03%) 105 ( 0.01%) . . => /home/.cargo/registry/src/index.crates.io-6f17d22bba15001f/regex-syntax-0.8.2/src/hir/mod.rs:regex_syntax::hir::Hir::concat (13x) + 91 ( 0.00%) . . . let concat_prefix = Hir::concat(concat); +16,386 ( 0.00%) 26 ( 0.00%) . . => /home/.cargo/registry/src/index.crates.io-6f17d22bba15001f/regex-syntax-0.8.2/src/hir/mod.rs:regex_syntax::hir::Hir::concat (13x) + . . . . // Look for a prefilter again. Why? Because above we only looked for + . . . . // a prefilter on the individual 'hir', but we might be able to find + . . . . // something better and more discriminatory by looking at the entire + . . . . // suffix. We don't do this above to avoid making this loop worst case + . . . . // quadratic in the length of 'concat'. + 52 ( 0.00%) . . . let pre2 = match prefilter(&concat_suffix) { +12,828,798 ( 3.71%) 21,332 ( 2.63%) 1 ( 0.32%) . => /home/.cargo/registry/src/index.crates.io-6f17d22bba15001f/regex-automata-0.4.6/src/meta/reverse_inner.rs:regex_automata::meta::reverse_inner::prefilter (13x) + . . . . None => pre, + 52 ( 0.00%) . . . Some(pre2) => { + 13 ( 0.00%) . . . if pre2.is_fast() { + 65 ( 0.00%) . . . pre2 + . . . . } else { + . . . . pre + . . . . } + . . . . } + . . . . }; + 195 ( 0.00%) . . . return Some((concat_prefix, pre2)); + 26 ( 0.00%) . . . } + . . . . debug!( + . . . . "skipping reverse inner optimization because a top-level \ + . . . . sub-expression with a fast prefilter could not be found" + . . . . ); + . . . . None + 117 ( 0.00%) . . . } + . . . . + . . . . /// Attempt to extract a prefilter from an HIR expression. + . . . . /// + . . . . /// We do a little massaging here to do our best that the prefilter we get out + . . . . /// of this is *probably* fast. Basically, the false positive rate has a much + . . . . /// higher impact for things like the reverse inner optimization because more + . . . . /// work needs to potentially be done for each candidate match. + . . . . /// + . . . . /// Note that this assumes leftmost-first match semantics, so callers must + . . . . /// not call this otherwise. + 528 ( 0.00%) . . . fn prefilter(hir: &Hir) -> Option { + 88 ( 0.00%) . . . let mut extractor = literal::Extractor::new(); + 308 ( 0.00%) . . . => /home/.cargo/registry/src/index.crates.io-6f17d22bba15001f/regex-syntax-0.8.2/src/hir/literal.rs:regex_syntax::hir::literal::Extractor::new (44x) + 176 ( 0.00%) . . . extractor.kind(literal::ExtractKind::Prefix); + 132 ( 0.00%) . . . => /home/.cargo/registry/src/index.crates.io-6f17d22bba15001f/regex-syntax-0.8.2/src/hir/literal.rs:regex_syntax::hir::literal::Extractor::kind (44x) + 132 ( 0.00%) . . . let mut prefixes = extractor.extract(hir); +3,326,197 ( 0.96%) 6,496 ( 0.80%) . . => /home/.cargo/registry/src/index.crates.io-6f17d22bba15001f/regex-syntax-0.8.2/src/hir/literal.rs:regex_syntax::hir::literal::Extractor::extract (44x) + . . . . debug!( + . . . . "inner prefixes (len={:?}) extracted before optimization: {:?}", + . . . . prefixes.len(), + . . . . prefixes + . . . . ); + . . . . // Since these are inner literals, we know they cannot be exact. But the + . . . . // extractor doesn't know this. We mark them as inexact because this might + . . . . // impact literal optimization. Namely, optimization weights "all literals + . . . . // are exact" as very high, because it presumes that any match results in + . . . . // an overall match. But of course, that is not the case here. + . . . . // + . . . . // In practice, this avoids plucking out a ASCII-only \s as an alternation + . . . . // of single-byte whitespace characters. + 88 ( 0.00%) . . . prefixes.make_inexact(); + . . . . prefixes.optimize_for_prefix_by_preference(); + . . . . debug!( + . . . . "inner prefixes (len={:?}) extracted after optimization: {:?}", + . . . . prefixes.len(), + . . . . prefixes + . . . . ); + . . . . prefixes + . . . . .literals() + . . . . .and_then(|lits| Prefilter::new(MatchKind::LeftmostFirst, lits)) + 352 ( 0.00%) . . . } + . . . . + . . . . /// Looks for a "top level" HirKind::Concat item in the given HIR. This will + . . . . /// try to return one even if it's embedded in a capturing group, but is + . . . . /// otherwise pretty conservative in what is returned. + . . . . /// + . . . . /// The HIR returned is a complete copy of the concat with all capturing + . . . . /// groups removed. In effect, the concat returned is "flattened" with respect + . . . . /// to capturing groups. This makes the detection logic above for prefixes + . . . . /// a bit simpler, and it works because 1) capturing groups never influence + . . . . /// whether a match occurs or not and 2) capturing groups are not used when + . . . . /// doing the reverse inner search to find the start of the match. + . . . . fn top_concat(mut hir: &Hir) -> Option> { + . . . . loop { + 130 ( 0.00%) . . . hir = match hir.kind() { + 26 ( 0.00%) . . . => /home/.cargo/registry/src/index.crates.io-6f17d22bba15001f/regex-syntax-0.8.2/src/hir/mod.rs:regex_syntax::hir::Hir::kind (13x) + . . . . HirKind::Empty + . . . . | HirKind::Literal(_) + . . . . | HirKind::Class(_) + . . . . | HirKind::Look(_) + . . . . | HirKind::Repetition(_) + . . . . | HirKind::Alternation(_) => return None, + . . . . HirKind::Capture(hir::Capture { ref sub, .. }) => sub, + . . . . HirKind::Concat(ref subs) => { + . . . . // We are careful to only do the flattening/copy when we know + . . . . // we have a "top level" concat we can inspect. This avoids + . . . . // doing extra work in cases where we definitely won't use it. + . . . . // (This might still be wasted work if we can't go on to find + . . . . // some literals to extract.) + . . . . let concat = + 438 ( 0.00%) . . . Hir::concat(subs.iter().map(|h| flatten(h)).collect()); +2,484,151 ( 0.72%) 7,913 ( 0.98%) . . => /home/.cargo/registry/src/index.crates.io-6f17d22bba15001f/regex-automata-0.4.6/src/meta/reverse_inner.rs:regex_automata::meta::reverse_inner::flatten (193x) +118,664 ( 0.03%) 116 ( 0.01%) . . => /home/.cargo/registry/src/index.crates.io-6f17d22bba15001f/regex-syntax-0.8.2/src/hir/mod.rs:regex_syntax::hir::Hir::concat (13x) + 52 ( 0.00%) . . . return match concat.into_kind() { + 2,241 ( 0.00%) . . . => /home/.cargo/registry/src/index.crates.io-6f17d22bba15001f/regex-syntax-0.8.2/src/hir/mod.rs:regex_syntax::hir::Hir::into_kind (13x) + 13 ( 0.00%) . . . HirKind::Concat(xs) => Some(xs), + . . . . // It is actually possible for this case to occur, because + . . . . // 'Hir::concat' might simplify the expression to the point + . . . . // that concatenations are actually removed. One wonders + . . . . // whether this leads to other cases where we should be + . . . . // extracting literals, but in theory, I believe if we do + . . . . // get here, then it means that a "real" prefilter failed + . . . . // to be extracted and we should probably leave well enough + . . . . // alone. (A "real" prefilter is unbothered by "top-level +-- line 193 ---------------------------------------- +-- line 195 ---------------------------------------- + . . . . _ => return None, + . . . . }; + . . . . } + . . . . }; + . . . . } + . . . . } + . . . . + . . . . /// Returns a copy of the given HIR but with all capturing groups removed. +24,350 ( 0.01%) . . . fn flatten(hir: &Hir) -> Hir { +22,887 ( 0.01%) . . . match hir.kind() { + 568 ( 0.00%) . . . => /home/.cargo/registry/src/index.crates.io-6f17d22bba15001f/regex-syntax-0.8.2/src/hir/mod.rs:regex_syntax::hir::Hir::kind (284x) + . . . . HirKind::Empty => Hir::empty(), + . . . . HirKind::Literal(hir::Literal(ref x)) => Hir::literal(x.clone()), + . . . . HirKind::Class(ref x) => Hir::class(x.clone()), + . . . . HirKind::Look(ref x) => Hir::look(x.clone()), + 1,490 ( 0.00%) . . . HirKind::Repetition(ref x) => Hir::repetition(x.with(flatten(&x.sub))), +91,183 ( 0.03%) 242 ( 0.03%) . . => /home/.cargo/registry/src/index.crates.io-6f17d22bba15001f/regex-automata-0.4.6/src/meta/reverse_inner.rs:regex_automata::meta::reverse_inner::flatten'2 (75x) +10,126 ( 0.00%) 32 ( 0.00%) . . => /home/.cargo/registry/src/index.crates.io-6f17d22bba15001f/regex-syntax-0.8.2/src/hir/mod.rs:regex_syntax::hir::Repetition::with (75x) + . . . . // This is the interesting case. We just drop the group information + . . . . // entirely and use the child HIR itself. + 216 ( 0.00%) . . . HirKind::Capture(hir::Capture { ref sub, .. }) => flatten(sub), + . . . . HirKind::Alternation(ref xs) => { + 3,962 ( 0.00%) . . . Hir::alternation(xs.iter().map(|x| flatten(x)).collect()) +1,101,954 ( 0.32%) 5,293 ( 0.65%) . . => /home/.cargo/registry/src/index.crates.io-6f17d22bba15001f/regex-automata-0.4.6/src/meta/reverse_inner.rs:regex_automata::meta::reverse_inner::flatten'2 (1,446x) +551,421 ( 0.16%) 256 ( 0.03%) . . => /home/.cargo/registry/src/index.crates.io-6f17d22bba15001f/regex-syntax-0.8.2/src/hir/mod.rs:regex_syntax::hir::Hir::alternation (55x) + . . . . } + . . . . HirKind::Concat(ref xs) => { + 940 ( 0.00%) . . . Hir::concat(xs.iter().map(|x| flatten(x)).collect()) +455,169 ( 0.13%) 1,640 ( 0.20%) . . => /home/.cargo/registry/src/index.crates.io-6f17d22bba15001f/regex-automata-0.4.6/src/meta/reverse_inner.rs:regex_automata::meta::reverse_inner::flatten'2 (68x) +43,665 ( 0.01%) 74 ( 0.01%) . . => /home/.cargo/registry/src/index.crates.io-6f17d22bba15001f/regex-syntax-0.8.2/src/hir/mod.rs:regex_syntax::hir::Hir::concat (29x) + . . . . } + . . . . } +21,915 ( 0.01%) . . . } + +10,050 ( 0.00%) . . . + +-------------------------------------------------------------------------------- +-- Auto-annotated source: /home/.cargo/registry/src/index.crates.io-6f17d22bba15001f/regex-automata-0.4.6/src/meta/strategy.rs +-------------------------------------------------------------------------------- +Ir Ge sysCount sysTime + +-- line 70 ---------------------------------------- + . . . . fn which_overlapping_matches( + . . . . &self, + . . . . cache: &mut Cache, + . . . . input: &Input<'_>, + . . . . patset: &mut PatternSet, + . . . . ); + . . . . } + . . . . + 1,134 ( 0.00%) . . . pub(super) fn new( + . . . . info: &RegexInfo, + . . . . hirs: &[&Hir], + . . . . ) -> Result, BuildError> { + . . . . // At this point, we're committed to a regex engine of some kind. So pull + . . . . // out a prefilter if we can, which will feed to each of the constituent + . . . . // regex engines. + 162 ( 0.00%) . . . let pre = if info.is_always_anchored_start() { + . . . . // PERF: I'm not sure we necessarily want to do this... We may want to + . . . . // run a prefilter for quickly rejecting in some cases. The problem + . . . . // is that anchored searches overlap quite a bit with the use case + . . . . // of "run a regex on every line to extract data." In that case, the + . . . . // regex always matches, so running a prefilter doesn't really help us + . . . . // there. The main place where a prefilter helps in an anchored search + . . . . // is if the anchored search is not expected to match frequently. That + . . . . // is, the prefilter gives us a way to possibly reject a haystack very +-- line 93 ---------------------------------------- +-- line 97 ---------------------------------------- + . . . . // Or maybe we should only use a prefilter when we think it's "fast"? + . . . . // + . . . . // Interestingly, I think we currently lack the infrastructure for + . . . . // disabling a prefilter based on haystack length. That would probably + . . . . // need to be a new 'Input' option. (Interestingly, an 'Input' used to + . . . . // carry a 'Prefilter' with it, but I moved away from that.) + . . . . debug!("skipping literal extraction since regex is anchored"); + . . . . None + 16 ( 0.00%) . . . } else if let Some(pre) = info.config().get_prefilter() { + . . . . debug!( + . . . . "skipping literal extraction since the caller provided a prefilter" + . . . . ); + . . . . Some(pre.clone()) + 16 ( 0.00%) . . . } else if info.config().get_auto_prefilter() { + . . . . let kind = info.config().get_match_kind(); + 16 ( 0.00%) . . . let prefixes = crate::util::prefilter::prefixes(kind, hirs); +7,580,638 ( 2.19%) 16,769 ( 2.07%) . . => /home/.cargo/registry/src/index.crates.io-6f17d22bba15001f/regex-automata-0.4.6/src/util/prefilter/mod.rs:regex_automata::util::prefilter::prefixes (16x) + . . . . // If we can build a full `Strategy` from just the extracted prefixes, + . . . . // then we can short-circuit and avoid building a regex engine at all. + 32 ( 0.00%) . . . if let Some(pre) = Pre::from_prefixes(info, &prefixes) { + . . . . debug!( + . . . . "found that the regex can be broken down to a literal \ + . . . . search, avoiding the regex engine entirely", + . . . . ); + . . . . return Ok(pre); + . . . . } + . . . . // This now attempts another short-circuit of the regex engine: if we + . . . . // have a huge alternation of just plain literals, then we can just use +-- line 123 ---------------------------------------- +-- line 145 ---------------------------------------- + . . . . strings, + . . . . ); + . . . . Prefilter::new(kind, strings) + . . . . }) + . . . . } else { + . . . . debug!("skipping literal extraction since prefilters were disabled"); + . . . . None + . . . . }; + 9,153 ( 0.00%) . . . let mut core = Core::new(info.clone(), pre.clone(), hirs)?; + . . . . // Now that we have our core regex engines built, there are a few cases + . . . . // where we can do a little bit better than just a normal "search forward + . . . . // and maybe use a prefilter when in a start state." However, these cases + . . . . // may not always work or otherwise build on top of the Core searcher. + . . . . // For example, the reverse anchored optimization seems like it might + . . . . // always work, but only the DFAs support reverse searching and the DFAs + . . . . // might give up or quit for reasons. If we had, e.g., a PikeVM that + . . . . // supported reverse searching, then we could avoid building a full Core +-- line 161 ---------------------------------------- +-- line 169 ---------------------------------------- + . . . . }; + . . . . core = match ReverseSuffix::new(core, hirs) { + . . . . Err(core) => core, + . . . . Ok(rs) => { + . . . . debug!("using reverse suffix strategy"); + . . . . return Ok(Arc::new(rs)); + . . . . } + . . . . }; +43,455 ( 0.01%) . . . core = match ReverseInner::new(core, hirs) { + . . . . Err(core) => core, + . . . . Ok(ri) => { + . . . . debug!("using reverse inner strategy"); + 39 ( 0.00%) . . . return Ok(Arc::new(ri)); + . . . . } + . . . . }; + . . . . debug!("using core strategy"); + 136 ( 0.00%) . . . Ok(Arc::new(core)) + 1,002 ( 0.00%) 15 ( 0.00%) . . } + . . . . + . . . . #[derive(Clone, Debug)] + . . . . struct Pre

{ + . . . . pre: P, + . . . . group_info: GroupInfo, + . . . . } + . . . . + . . . . impl Pre

{ +-- line 194 ---------------------------------------- +-- line 312 ---------------------------------------- + . . . . /// them are alternation of literals, but I haven't had the time to go down + . . . . /// that path yet. + . . . . fn from_alternation_literals( + . . . . info: &RegexInfo, + . . . . hirs: &[&Hir], + . . . . ) -> Option> { + . . . . use crate::util::prefilter::AhoCorasick; + . . . . + 80 ( 0.00%) . . . let lits = crate::meta::literal::alternation_literals(info, hirs)?; + 458 ( 0.00%) . . . => /home/.cargo/registry/src/index.crates.io-6f17d22bba15001f/regex-automata-0.4.6/src/meta/literal.rs:regex_automata::meta::literal::alternation_literals (16x) + . . . . let ac = AhoCorasick::new(MatchKind::LeftmostFirst, &lits)?; + . . . . Some(Pre::new(ac)) + . . . . } + . . . . } + . . . . + . . . . // This implements Strategy for anything that implements PrefilterI. + . . . . // + . . . . // Note that this must only be used for regexes of length 1. Multi-regexes +-- line 328 ---------------------------------------- +-- line 461 ---------------------------------------- + . . . . let mut lookm = LookMatcher::new(); + . . . . lookm.set_line_terminator(info.config().get_line_terminator()); + . . . . let thompson_config = thompson::Config::new() + . . . . .utf8(info.config().get_utf8_empty()) + . . . . .nfa_size_limit(info.config().get_nfa_size_limit()) + . . . . .shrink(false) + . . . . .which_captures(info.config().get_which_captures()) + . . . . .look_matcher(lookm); + 567 ( 0.00%) . . . let nfa = thompson::Compiler::new() +62,997,474 (18.20%) 123,973 (15.31%) 97 (31.29%) . => /home/.cargo/registry/src/index.crates.io-6f17d22bba15001f/regex-automata-0.4.6/src/nfa/thompson/compiler.rs:regex_automata::nfa::thompson::compiler::Compiler::build_many_from_hir (81x) +22,506 ( 0.01%) 4 ( 0.00%) . . => /home/.cargo/registry/src/index.crates.io-6f17d22bba15001f/regex-automata-0.4.6/src/nfa/thompson/compiler.rs:regex_automata::nfa::thompson::compiler::Compiler::new (81x) + . . . . .configure(thompson_config.clone()) + . . . . .build_many_from_hir(hirs) + 81 ( 0.00%) . . . .map_err(BuildError::nfa)?; +8,462,203 ( 2.44%) 22,273 ( 2.75%) 1 ( 0.32%) . => /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/core/src/ptr/mod.rs:core::ptr::drop_in_place (81x) + . . . . // It's possible for the PikeVM or the BB to fail to build, even though + . . . . // at this point, we already have a full NFA in hand. They can fail + . . . . // when a Unicode word boundary is used but where Unicode word boundary + . . . . // support is disabled at compile time, thus making it impossible to + . . . . // match. (Construction can also fail if the NFA was compiled without + . . . . // captures, but we always enable that above.) + 648 ( 0.00%) . . . let pikevm = wrappers::PikeVM::new(&info, pre.clone(), &nfa)?; +43,963 ( 0.01%) 111 ( 0.01%) . . => /home/.cargo/registry/src/index.crates.io-6f17d22bba15001f/regex-automata-0.4.6/src/meta/wrappers.rs:regex_automata::meta::wrappers::PikeVM::new (81x) + . . . . let backtrack = + 1,782 ( 0.00%) . . . wrappers::BoundedBacktracker::new(&info, pre.clone(), &nfa)?; +44,317 ( 0.01%) 111 ( 0.01%) . . => /home/.cargo/registry/src/index.crates.io-6f17d22bba15001f/regex-automata-0.4.6/src/meta/wrappers.rs:regex_automata::meta::wrappers::BoundedBacktracker::new (81x) + . . . . // The onepass engine can of course fail to build, but we expect it to + . . . . // fail in many cases because it is an optimization that doesn't apply + . . . . // to all regexes. The 'OnePass' wrapper encapsulates this failure (and + . . . . // logs a message if it occurs). + 81 ( 0.00%) . . . let onepass = wrappers::OnePass::new(&info, &nfa); +2,500,469 ( 0.72%) 2,480 ( 0.31%) 2 ( 0.65%) . => /home/.cargo/registry/src/index.crates.io-6f17d22bba15001f/regex-automata-0.4.6/src/meta/wrappers.rs:regex_automata::meta::wrappers::OnePass::new (81x) + . . . . // We try to encapsulate whether a particular regex engine should be + . . . . // used within each respective wrapper, but the DFAs need a reverse NFA + . . . . // to build itself, and we really do not want to build a reverse NFA if + . . . . // we know we aren't going to use the lazy DFA. So we do a config check + . . . . // up front, which is in practice the only way we won't try to use the + . . . . // DFA. + . . . . let (nfarev, hybrid, dfa) = + 81 ( 0.00%) . . . if !info.config().get_hybrid() && !info.config().get_dfa() { + . . . . (None, wrappers::Hybrid::none(), wrappers::DFA::none()) + . . . . } else { + . . . . // FIXME: Technically, we don't quite yet KNOW that we need + . . . . // a reverse NFA. It's possible for the DFAs below to both + . . . . // fail to build just based on the forward NFA. In which case, + . . . . // building the reverse NFA was totally wasted work. But... + . . . . // fixing this requires breaking DFA construction apart into + . . . . // two pieces: one for the forward part and another for the + . . . . // reverse part. Quite annoying. Making it worse, when building + . . . . // both DFAs fails, it's quite likely that the NFA is large and + . . . . // that it will take quite some time to build the reverse NFA + . . . . // too. So... it's really probably worth it to do this! + 648 ( 0.00%) . . . let nfarev = thompson::Compiler::new() +38,783,936 (11.20%) 98,220 (12.13%) 2 ( 0.65%) . => /home/.cargo/registry/src/index.crates.io-6f17d22bba15001f/regex-automata-0.4.6/src/nfa/thompson/compiler.rs:regex_automata::nfa::thompson::compiler::Compiler::build_many_from_hir (81x) +21,951 ( 0.01%) . . . => /home/.cargo/registry/src/index.crates.io-6f17d22bba15001f/regex-automata-0.4.6/src/nfa/thompson/compiler.rs:regex_automata::nfa::thompson::compiler::Compiler::new (81x) + . . . . // Currently, reverse NFAs don't support capturing groups, + . . . . // so we MUST disable them. But even if we didn't have to, + . . . . // we would, because nothing in this crate does anything + . . . . // useful with capturing groups in reverse. And of course, + . . . . // the lazy DFA ignores capturing groups in all cases. + . . . . .configure( + . . . . thompson_config + . . . . .clone() + . . . . .which_captures(WhichCaptures::None) + . . . . .reverse(true), + . . . . ) + . . . . .build_many_from_hir(hirs) + 81 ( 0.00%) . . . .map_err(BuildError::nfa)?; +2,993,526 ( 0.86%) 15,439 ( 1.91%) . . => /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/core/src/ptr/mod.rs:core::ptr::drop_in_place (81x) + . . . . let dfa = if !info.config().get_dfa() { + . . . . wrappers::DFA::none() + . . . . } else { + . . . . wrappers::DFA::new(&info, pre.clone(), &nfa, &nfarev) + . . . . }; + 81 ( 0.00%) . . . let hybrid = if !info.config().get_hybrid() { + . . . . wrappers::Hybrid::none() + . . . . } else if dfa.is_some() { + . . . . debug!("skipping lazy DFA because we have a full DFA"); + . . . . wrappers::Hybrid::none() + . . . . } else { + 81 ( 0.00%) . . . wrappers::Hybrid::new(&info, pre.clone(), &nfa, &nfarev) +1,130,520 ( 0.33%) 606 ( 0.07%) . . => /home/.cargo/registry/src/index.crates.io-6f17d22bba15001f/regex-automata-0.4.6/src/meta/wrappers.rs:regex_automata::meta::wrappers::Hybrid::new (81x) + . . . . }; +27,297 ( 0.01%) . . . (Some(nfarev), hybrid, dfa) + . . . . }; + . . . . Ok(Core { + . . . . info, + 1,215 ( 0.00%) . . . pre, + . . . . nfa, + . . . . nfarev, + 1,296 ( 0.00%) . . . pikevm, + . . . . backtrack, + . . . . onepass, + . . . . hybrid, + . . . . dfa, + . . . . }) + . . . . } + . . . . + . . . . #[cfg_attr(feature = "perf-inline", inline(always))] + . . . . fn try_search_mayfail( + . . . . &self, + . . . . cache: &mut Cache, + . . . . input: &Input<'_>, + . . . . ) -> Option, RetryFailError>> { + 45 ( 0.00%) . . . if let Some(e) = self.dfa.get(input) { + . . . . trace!("using full DFA for search at {:?}", input.get_span()); + . . . . Some(e.try_search(input)) + 45 ( 0.00%) . . . } else if let Some(e) = self.hybrid.get(input) { + . . . . trace!("using lazy DFA for search at {:?}", input.get_span()); + . . . . Some(e.try_search(&mut cache.hybrid, input)) + . . . . } else { + . . . . None + . . . . } + . . . . } + . . . . + . . . . fn search_nofail( +-- line 566 ---------------------------------------- +-- line 602 ---------------------------------------- + . . . . // Only the lazy/full DFA returns half-matches, since the DFA requires + . . . . // a reverse scan to find the start position. These fallback regex + . . . . // engines can find the start and end in a single pass, so we just do + . . . . // that and throw away the start offset to conform to the API. + . . . . let m = self.search_nofail(cache, input)?; + . . . . Some(HalfMatch::new(m.pattern(), m.end())) + . . . . } + . . . . + 42 ( 0.00%) . . . fn search_slots_nofail( + . . . . &self, + . . . . cache: &mut Cache, + . . . . input: &Input<'_>, + . . . . slots: &mut [Option], + . . . . ) -> Option { + . . . . if let Some(ref e) = self.onepass.get(input) { + . . . . trace!( + . . . . "using OnePass for capture search at {:?}", +-- line 618 ---------------------------------------- +-- line 628 ---------------------------------------- + . . . . } else { + . . . . trace!( + . . . . "using PikeVM for capture search at {:?}", + . . . . input.get_span() + . . . . ); + . . . . let e = self.pikevm.get(); + . . . . e.search_slots(&mut cache.pikevm, input, slots) + . . . . } + 24 ( 0.00%) . . . } + . . . . + . . . . fn is_match_nofail(&self, cache: &mut Cache, input: &Input<'_>) -> bool { + . . . . if let Some(ref e) = self.onepass.get(input) { + . . . . trace!( + . . . . "using OnePass for is-match search at {:?}", + . . . . input.get_span() + . . . . ); + . . . . e.search_slots(&mut cache.onepass, input, &mut []).is_some() +-- line 644 ---------------------------------------- +-- line 654 ---------------------------------------- + . . . . input.get_span() + . . . . ); + . . . . let e = self.pikevm.get(); + . . . . e.is_match(&mut cache.pikevm, input) + . . . . } + . . . . } + . . . . + . . . . fn is_capture_search_needed(&self, slots_len: usize) -> bool { + 70 ( 0.00%) . . . slots_len > self.nfa.group_info().implicit_slot_len() + . . . . } + . . . . } + . . . . + . . . . impl Strategy for Core { + . . . . #[cfg_attr(feature = "perf-inline", inline(always))] + 72 ( 0.00%) . . . fn group_info(&self) -> &GroupInfo { + . . . . self.nfa.group_info() + 72 ( 0.00%) . . . } + . . . . + . . . . #[cfg_attr(feature = "perf-inline", inline(always))] + 294 ( 0.00%) . . . fn create_cache(&self) -> Cache { + 337 ( 0.00%) . . . Cache { + 330 ( 0.00%) . . . => ./string/../sysdeps/x86_64/multiarch/memmove-vec-unaligned-erms.S:__memcpy_avx_unaligned_erms (11x) + . . . . capmatches: Captures::all(self.group_info().clone()), + 53 ( 0.00%) . . . pikevm: self.pikevm.create_cache(), + . . . . backtrack: self.backtrack.create_cache(), + . . . . onepass: self.onepass.create_cache(), + 53 ( 0.00%) . . . hybrid: self.hybrid.create_cache(), + . . . . revhybrid: wrappers::ReverseHybridCache::none(), + . . . . } + 378 ( 0.00%) . . . } + . . . . + . . . . #[cfg_attr(feature = "perf-inline", inline(always))] + . . . . fn reset_cache(&self, cache: &mut Cache) { + . . . . cache.pikevm.reset(&self.pikevm); + . . . . cache.backtrack.reset(&self.backtrack); + . . . . cache.onepass.reset(&self.onepass); + . . . . cache.hybrid.reset(&self.hybrid); + . . . . } +-- line 690 ---------------------------------------- +-- line 788 ---------------------------------------- + . . . . } + . . . . } + . . . . } else { + . . . . self.is_match_nofail(cache, input) + . . . . } + . . . . } + . . . . + . . . . #[cfg_attr(feature = "perf-inline", inline(always))] + 552 ( 0.00%) . . . fn search_slots( + . . . . &self, + . . . . cache: &mut Cache, + . . . . input: &Input<'_>, + . . . . slots: &mut [Option], + . . . . ) -> Option { + . . . . // Even if the regex has explicit capture groups, if the caller didn't + . . . . // provide any explicit slots, then it doesn't make sense to try and do + . . . . // extra work to get offsets for those slots. Ideally the caller should + . . . . // realize this and not call this routine in the first place, but alas, + . . . . // we try to save the caller from themselves if they do. + 46 ( 0.00%) . . . if !self.is_capture_search_needed(slots.len()) { + . . . . trace!("asked for slots unnecessarily, trying fast path"); + . . . . let m = self.search(cache, input)?; + . . . . copy_match_to_slots(m, slots); + . . . . return Some(m.pattern()); + . . . . } + . . . . // If the onepass DFA is available for this search (which only happens + . . . . // when it's anchored), then skip running a fallible DFA. The onepass + . . . . // DFA isn't as fast as a full or lazy DFA, but it is typically quite +-- line 815 ---------------------------------------- +-- line 821 ---------------------------------------- + . . . . // to say "no match" much more quickly. This does hurt the case of, + . . . . // say, parsing each line in a log file into capture groups, because + . . . . // in that case, the line always matches. So the lazy DFA scan is + . . . . // usually just wasted work. But, the lazy DFA is usually quite fast + . . . . // and doesn't cost too much here. + . . . . if self.onepass.get(&input).is_some() { + . . . . return self.search_slots_nofail(cache, &input, slots); + . . . . } + 90 ( 0.00%) . . . let m = match self.try_search_mayfail(cache, input) { + . . . . Some(Ok(Some(m))) => m, + . . . . Some(Ok(None)) => return None, + . . . . Some(Err(_err)) => { + . . . . trace!("fast capture search failed: {}", _err); + . . . . return self.search_slots_nofail(cache, input, slots); + . . . . } + . . . . None => { + . . . . return self.search_slots_nofail(cache, input, slots); +-- line 837 ---------------------------------------- +-- line 847 ---------------------------------------- + . . . . m.start(), + . . . . m.end(), + . . . . ); + . . . . let input = input + . . . . .clone() + . . . . .span(m.start()..m.end()) + . . . . .anchored(Anchored::Pattern(m.pattern())); + . . . . Some( + 25 ( 0.00%) . . . self.search_slots_nofail(cache, &input, slots) +15,513 ( 0.00%) 6 ( 0.00%) . . => /home/.cargo/registry/src/index.crates.io-6f17d22bba15001f/regex-automata-0.4.6/src/meta/strategy.rs:regex_automata::meta::strategy::Core::search_slots_nofail (5x) + . . . . .expect("should find a match"), + . . . . ) + 368 ( 0.00%) . . . } + . . . . + . . . . #[cfg_attr(feature = "perf-inline", inline(always))] + . . . . fn which_overlapping_matches( + . . . . &self, + . . . . cache: &mut Cache, + . . . . input: &Input<'_>, + . . . . patset: &mut PatternSet, + . . . . ) { +-- line 866 ---------------------------------------- +-- line 902 ---------------------------------------- + . . . . + . . . . #[derive(Debug)] + . . . . struct ReverseAnchored { + . . . . core: Core, + . . . . } + . . . . + . . . . impl ReverseAnchored { + . . . . fn new(core: Core) -> Result { + 81 ( 0.00%) . . . if !core.info.is_always_anchored_end() { + . . . . debug!( + . . . . "skipping reverse anchored optimization because \ + . . . . the regex is not always anchored at the end" + . . . . ); + . . . . return Err(core); + . . . . } + . . . . // Note that the caller can still request an anchored search even when + . . . . // the regex isn't anchored at the start. We detect that case in the +-- line 918 ---------------------------------------- +-- line 1115 ---------------------------------------- + . . . . #[derive(Debug)] + . . . . struct ReverseSuffix { + . . . . core: Core, + . . . . pre: Prefilter, + . . . . } + . . . . + . . . . impl ReverseSuffix { + . . . . fn new(core: Core, hirs: &[&Hir]) -> Result { + 81 ( 0.00%) . . . if !core.info.config().get_auto_prefilter() { + . . . . debug!( + . . . . "skipping reverse suffix optimization because \ + . . . . automatic prefilters are disabled" + . . . . ); + . . . . return Err(core); + . . . . } + . . . . // Like the reverse inner optimization, we don't do this for regexes + . . . . // that are always anchored. It could lead to scanning too much, but +-- line 1131 ---------------------------------------- +-- line 1137 ---------------------------------------- + . . . . // do another forward scan to find the end position.) + . . . . // + . . . . // Note that the caller can still request an anchored search even + . . . . // when the regex isn't anchored. We detect that case in the search + . . . . // routines below and just fallback to the core engine. Currently this + . . . . // optimization assumes all searches are unanchored, so if we do want + . . . . // to enable this optimization for anchored searches, it will need a + . . . . // little work to support it. + 194 ( 0.00%) . . . if core.info.is_always_anchored_start() { + . . . . debug!( + . . . . "skipping reverse suffix optimization because \ + . . . . the regex is always anchored at the start", + . . . . ); + . . . . return Err(core); + . . . . } + . . . . // Only DFAs can do reverse searches (currently), so we need one of + . . . . // them in order to do this optimization. It's possible (although +-- line 1153 ---------------------------------------- +-- line 1162 ---------------------------------------- + . . . . if core.pre.as_ref().map_or(false, |p| p.is_fast()) { + . . . . debug!( + . . . . "skipping reverse suffix optimization because \ + . . . . we already have a prefilter that we think is fast" + . . . . ); + . . . . return Err(core); + . . . . } + . . . . let kind = core.info.config().get_match_kind(); + 13 ( 0.00%) . . . let suffixes = crate::util::prefilter::suffixes(kind, hirs); +2,457,849 ( 0.71%) 5,107 ( 0.63%) . . => /home/.cargo/registry/src/index.crates.io-6f17d22bba15001f/regex-automata-0.4.6/src/util/prefilter/mod.rs:regex_automata::util::prefilter::suffixes (13x) + 25 ( 0.00%) . . . let lcs = match suffixes.longest_common_suffix() { + . . . . None => { + . . . . debug!( + . . . . "skipping reverse suffix optimization because \ + . . . . a longest common suffix could not be found", + . . . . ); + . . . . return Err(core); + . . . . } + . . . . Some(lcs) if lcs.is_empty() => { +-- line 1179 ---------------------------------------- +-- line 1503 ---------------------------------------- + . . . . preinner: Prefilter, + . . . . nfarev: NFA, + . . . . hybrid: wrappers::ReverseHybrid, + . . . . dfa: wrappers::ReverseDFA, + . . . . } + . . . . + . . . . impl ReverseInner { + . . . . fn new(core: Core, hirs: &[&Hir]) -> Result { + 81 ( 0.00%) . . . if !core.info.config().get_auto_prefilter() { + . . . . debug!( + . . . . "skipping reverse inner optimization because \ + . . . . automatic prefilters are disabled" + . . . . ); + . . . . return Err(core); + . . . . } + . . . . // Currently we hard-code the assumption of leftmost-first match + . . . . // semantics. This isn't a huge deal because 'all' semantics tend to + . . . . // only be used for forward overlapping searches with multiple regexes, + . . . . // and this optimization only supports a single pattern at the moment. + 81 ( 0.00%) . . . if core.info.config().get_match_kind() != MatchKind::LeftmostFirst { + . . . . debug!( + . . . . "skipping reverse inner optimization because \ + . . . . match kind is {:?} but this only supports leftmost-first", + . . . . core.info.config().get_match_kind(), + . . . . ); + . . . . return Err(core); + . . . . } + . . . . // It's likely that a reverse inner scan has too much overhead for it +-- line 1530 ---------------------------------------- +-- line 1537 ---------------------------------------- + . . . . // or reject, which is a fair bit of work. + . . . . // + . . . . // Note that the caller can still request an anchored search even + . . . . // when the regex isn't anchored. We detect that case in the search + . . . . // routines below and just fallback to the core engine. Currently this + . . . . // optimization assumes all searches are unanchored, so if we do want + . . . . // to enable this optimization for anchored searches, it will need a + . . . . // little work to support it. + 162 ( 0.00%) . . . if core.info.is_always_anchored_start() { + . . . . debug!( + . . . . "skipping reverse inner optimization because \ + . . . . the regex is always anchored at the start", + . . . . ); + . . . . return Err(core); + . . . . } + . . . . // Only DFAs can do reverse searches (currently), so we need one of + . . . . // them in order to do this optimization. It's possible (although + . . . . // pretty unlikely) that we have neither and need to give up. + 16 ( 0.00%) . . . if !core.hybrid.is_some() && !core.dfa.is_some() { + . . . . debug!( + . . . . "skipping reverse inner optimization because \ + . . . . we don't have a lazy DFA or a full DFA" + . . . . ); + . . . . return Err(core); + . . . . } + . . . . if core.pre.as_ref().map_or(false, |p| p.is_fast()) { + . . . . debug!( + . . . . "skipping reverse inner optimization because \ + . . . . we already have a prefilter that we think is fast" + . . . . ); + 894 ( 0.00%) . . . return Err(core); + . . . . } else if core.pre.is_some() { + . . . . debug!( + . . . . "core engine has a prefix prefilter, but it is \ + . . . . probably not fast, so continuing with attempt to \ + . . . . use reverse inner prefilter" + . . . . ); + . . . . } + 104 ( 0.00%) . . . let (concat_prefix, preinner) = match reverse_inner::extract(hirs) { +33,494,575 ( 9.68%) 58,000 ( 7.16%) 2 ( 0.65%) . => /home/.cargo/registry/src/index.crates.io-6f17d22bba15001f/regex-automata-0.4.6/src/meta/reverse_inner.rs:regex_automata::meta::reverse_inner::extract (13x) + 130 ( 0.00%) . . . Some(x) => x, + . . . . // N.B. the 'extract' function emits debug messages explaining + . . . . // why we bailed out here. + . . . . None => return Err(core), + . . . . }; + . . . . debug!("building reverse NFA for prefix before inner literal"); + . . . . let mut lookm = LookMatcher::new(); + . . . . lookm.set_line_terminator(core.info.config().get_line_terminator()); + . . . . let thompson_config = thompson::Config::new() + . . . . .reverse(true) + . . . . .utf8(core.info.config().get_utf8_empty()) + . . . . .nfa_size_limit(core.info.config().get_nfa_size_limit()) + . . . . .shrink(false) + . . . . .which_captures(WhichCaptures::None) + . . . . .look_matcher(lookm); + 52 ( 0.00%) . . . let result = thompson::Compiler::new() + 3,523 ( 0.00%) . . . => /home/.cargo/registry/src/index.crates.io-6f17d22bba15001f/regex-automata-0.4.6/src/nfa/thompson/compiler.rs:regex_automata::nfa::thompson::compiler::Compiler::new (13x) + 351 ( 0.00%) . . . => /home/.cargo/registry/src/index.crates.io-6f17d22bba15001f/regex-automata-0.4.6/src/nfa/thompson/compiler.rs:regex_automata::nfa::thompson::compiler::Compiler::configure (13x) + . . . . .configure(thompson_config) + 26 ( 0.00%) . . . .build_from_hir(&concat_prefix); +43,995 ( 0.01%) 230 ( 0.03%) . . => /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/core/src/ptr/mod.rs:core::ptr::drop_in_place (13x) + 26 ( 0.00%) . . . let nfarev = match result { + 26 ( 0.00%) . . . Ok(nfarev) => nfarev, + . . . . Err(_err) => { + . . . . debug!( + . . . . "skipping reverse inner optimization because the \ + . . . . reverse NFA failed to build: {}", + . . . . _err, + . . . . ); + . . . . return Err(core); + . . . . } + . . . . }; + . . . . debug!("building reverse DFA for prefix before inner literal"); + . . . . let dfa = if !core.info.config().get_dfa() { + . . . . wrappers::ReverseDFA::none() + . . . . } else { + . . . . wrappers::ReverseDFA::new(&core.info, &nfarev) + . . . . }; + 13 ( 0.00%) . . . let hybrid = if !core.info.config().get_hybrid() { + . . . . wrappers::ReverseHybrid::none() + . . . . } else if dfa.is_some() { + . . . . debug!( + . . . . "skipping lazy DFA for reverse inner optimization \ + . . . . because we have a full DFA" + . . . . ); + . . . . wrappers::ReverseHybrid::none() + . . . . } else { + 13 ( 0.00%) . . . wrappers::ReverseHybrid::new(&core.info, &nfarev) +83,760 ( 0.02%) 39 ( 0.00%) . . => /home/.cargo/registry/src/index.crates.io-6f17d22bba15001f/regex-automata-0.4.6/src/meta/wrappers.rs:regex_automata::meta::wrappers::ReverseHybrid::new (13x) + . . . . }; + 5,759 ( 0.00%) . . . Ok(ReverseInner { core, preinner, nfarev, hybrid, dfa }) + 2,470 ( 0.00%) . . . => ./string/../sysdeps/x86_64/multiarch/memmove-vec-unaligned-erms.S:__memcpy_avx_unaligned_erms (26x) + 13 ( 0.00%) . . . } +233,455 ( 0.07%) 1,126 ( 0.14%) . . => /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/core/src/ptr/mod.rs:core::ptr::drop_in_place (13x) + . . . . + . . . . #[cfg_attr(feature = "perf-inline", inline(always))] + . . . . fn try_search_full( + . . . . &self, + . . . . cache: &mut Cache, + . . . . input: &Input<'_>, + . . . . ) -> Result, RetryError> { + . . . . let mut span = input.get_span(); + . . . . let mut min_match_start = 0; + . . . . let mut min_pre_start = 0; + . . . . loop { + 24 ( 0.00%) . . . let litmatch = match self.preinner.find(input.haystack(), span) { + . . . . None => return Ok(None), + . . . . Some(span) => span, + . . . . }; + . . . . if litmatch.start < min_pre_start { + . . . . trace!( + . . . . "found inner prefilter match at {:?}, which starts \ + . . . . before the end of the last forward scan at {}, \ + . . . . quitting to avoid quadratic behavior", +-- line 1643 ---------------------------------------- +-- line 1746 ---------------------------------------- + . . . . } else { + . . . . unreachable!("ReverseInner always has a DFA") + . . . . } + . . . . } + . . . . } + . . . . + . . . . impl Strategy for ReverseInner { + . . . . #[cfg_attr(feature = "perf-inline", inline(always))] + 14 ( 0.00%) . . . fn group_info(&self) -> &GroupInfo { + . . . . self.core.group_info() + 14 ( 0.00%) . . . } + . . . . + . . . . #[cfg_attr(feature = "perf-inline", inline(always))] + 77 ( 0.00%) . . . fn create_cache(&self) -> Cache { + . . . . let mut cache = self.core.create_cache(); + 11 ( 0.00%) . . . cache.revhybrid = self.hybrid.create_cache(); + . . . . cache + 99 ( 0.00%) . . . } + . . . . + . . . . #[cfg_attr(feature = "perf-inline", inline(always))] + . . . . fn reset_cache(&self, cache: &mut Cache) { + . . . . self.core.reset_cache(cache); + . . . . cache.revhybrid.reset(&self.hybrid); + . . . . } + . . . . + . . . . fn is_accelerated(&self) -> bool { +-- line 1771 ---------------------------------------- +-- line 1835 ---------------------------------------- + . . . . self.core.is_match_nofail(cache, input) + . . . . } + . . . . Ok(None) => false, + . . . . Ok(Some(_)) => true, + . . . . } + . . . . } + . . . . + . . . . #[cfg_attr(feature = "perf-inline", inline(always))] + 144 ( 0.00%) . . . fn search_slots( + . . . . &self, + . . . . cache: &mut Cache, + . . . . input: &Input<'_>, + . . . . slots: &mut [Option], + . . . . ) -> Option { + 12 ( 0.00%) . . . if input.get_anchored().is_anchored() { + . . . . return self.core.search_slots(cache, input, slots); + . . . . } + 12 ( 0.00%) . . . if !self.core.is_capture_search_needed(slots.len()) { + . . . . trace!("asked for slots unnecessarily, trying fast path"); + . . . . let m = self.search(cache, input)?; + . . . . copy_match_to_slots(m, slots); + . . . . return Some(m.pattern()); + . . . . } + . . . . let m = match self.try_search_full(cache, input) { + . . . . Err(RetryError::Quadratic(_err)) => { + . . . . trace!("reverse inner captures optimization failed: {}", _err); +-- line 1860 ---------------------------------------- +-- line 1873 ---------------------------------------- + . . . . m.start(), + . . . . m.end(), + . . . . ); + . . . . let input = input + . . . . .clone() + . . . . .span(m.start()..m.end()) + . . . . .anchored(Anchored::Pattern(m.pattern())); + . . . . self.core.search_slots_nofail(cache, &input, slots) + 96 ( 0.00%) . . . } + . . . . + . . . . #[cfg_attr(feature = "perf-inline", inline(always))] + . . . . fn which_overlapping_matches( + . . . . &self, + . . . . cache: &mut Cache, + . . . . input: &Input<'_>, + . . . . patset: &mut PatternSet, + . . . . ) { +-- line 1889 ---------------------------------------- + +33,055 ( 0.01%) . . . + +-------------------------------------------------------------------------------- +The following files chosen for auto-annotation could not be found: +-------------------------------------------------------------------------------- + ./elf/../sysdeps/x86_64/dl-machine.h + ./elf/./elf/dl-lookup.c + ./elf/./elf/dl-tunables.c + ./elf/./elf/do-rel.h + ./malloc/./malloc/arena.c + ./malloc/./malloc/malloc.c + ./stdio-common/./stdio-common/vfscanf-internal.c + ./stdlib/../stdlib/strtol_l.c + ./string/../sysdeps/x86_64/multiarch/memcmp-avx2-movbe.S + ./string/../sysdeps/x86_64/multiarch/memmove-vec-unaligned-erms.S + ./string/../sysdeps/x86_64/multiarch/memset-vec-unaligned-erms.S + ./string/../sysdeps/x86_64/strcmp.S + /cargo/registry/src/index.crates.io-6f17d22bba15001f/hashbrown-0.12.3/src/map.rs + /cargo/registry/src/index.crates.io-6f17d22bba15001f/hashbrown-0.12.3/src/raw/mod.rs + /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/alloc/src/alloc.rs + /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/alloc/src/boxed.rs + /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/alloc/src/collections/btree/map.rs + /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/alloc/src/collections/btree/node.rs + /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/alloc/src/collections/btree/search.rs + /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/alloc/src/collections/vec_deque/mod.rs + /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/alloc/src/macros.rs + /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/alloc/src/raw_vec.rs + /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/alloc/src/slice.rs + /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/alloc/src/string.rs + /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/alloc/src/vec/drain.rs + /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/alloc/src/vec/into_iter.rs + /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/alloc/src/vec/mod.rs + /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/alloc/src/vec/set_len_on_drop.rs + /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/alloc/src/vec/spec_extend.rs + /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/alloc/src/vec/spec_from_iter.rs + /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/core/src/alloc/layout.rs + /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/core/src/cell.rs + /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/core/src/char/methods.rs + /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/core/src/cmp.rs + /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/core/src/convert/num.rs + /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/core/src/fmt/mod.rs + /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/core/src/hash/mod.rs + /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/core/src/hash/sip.rs + /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/core/src/intrinsics.rs + /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/core/src/iter/adapters/map.rs + /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/core/src/iter/adapters/take.rs + /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/core/src/iter/range.rs + /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/core/src/iter/traits/accum.rs + /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/core/src/iter/traits/collect.rs + /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/core/src/iter/traits/iterator.rs + /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/core/src/macros/mod.rs + /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/core/src/mem/manually_drop.rs + /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/core/src/num/mod.rs + /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/core/src/num/uint_macros.rs + /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/core/src/ops/range.rs + /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/core/src/option.rs + /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/core/src/ptr/const_ptr.rs + /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/core/src/ptr/mod.rs + /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/core/src/ptr/mut_ptr.rs + /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/core/src/result.rs + /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/core/src/slice/cmp.rs + /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/core/src/slice/index.rs + /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/core/src/slice/iter.rs + /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/core/src/slice/iter/macros.rs + /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/core/src/slice/mod.rs + /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/core/src/slice/sort.rs + /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/core/src/str/converts.rs + /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/core/src/str/mod.rs + /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/core/src/str/traits.rs + /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/core/src/str/validations.rs + /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/std/src/alloc.rs + /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/std/src/collections/hash/map.rs + /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/std/src/sys/unix/alloc.rs + +-------------------------------------------------------------------------------- +Ir Ge sysCount sysTime +-------------------------------------------------------------------------------- +65,119,396 (18.81%) 15 ( 0.00%) . . events annotated + diff --git a/releases/0.7.75/cargo-bench.txt b/releases/0.7.75/cargo-bench.txt new file mode 100644 index 00000000..9b0f01dd --- /dev/null +++ b/releases/0.7.75/cargo-bench.txt @@ -0,0 +1,358 @@ +Benchmarking decode_utf/dutf8_baseline_no_decoding +Benchmarking decode_utf/dutf8_baseline_no_decoding: Warming up for 3.0000 s +Benchmarking decode_utf/dutf8_baseline_no_decoding: Collecting 100 samples in estimated 5.0002 s (39M iterations) +Benchmarking decode_utf/dutf8_baseline_no_decoding: Analyzing +decode_utf/dutf8_baseline_no_decoding + time: [127.17 ns 127.71 ns 128.36 ns] +Found 20 outliers among 100 measurements (20.00%) + 3 (3.00%) high mild + 17 (17.00%) high severe +Benchmarking decode_utf/dutf8_encodingrs_decode_to_string +Benchmarking decode_utf/dutf8_encodingrs_decode_to_string: Warming up for 3.0000 s +Benchmarking decode_utf/dutf8_encodingrs_decode_to_string: Collecting 100 samples in estimated 5.0006 s (17M iterations) +Benchmarking decode_utf/dutf8_encodingrs_decode_to_string: Analyzing +decode_utf/dutf8_encodingrs_decode_to_string + time: [282.15 ns 282.82 ns 283.65 ns] +Found 5 outliers among 100 measurements (5.00%) + 2 (2.00%) high mild + 3 (3.00%) high severe +Benchmarking decode_utf/dutf8_encodingrs_decode_to_string_without_replacement +Benchmarking decode_utf/dutf8_encodingrs_decode_to_string_without_replacement: Warming up for 3.0000 s +Benchmarking decode_utf/dutf8_encodingrs_decode_to_string_without_replacement: Collecting 100 samples in estimated 5.0002 s (21M iterations) +Benchmarking decode_utf/dutf8_encodingrs_decode_to_string_without_replacement: Analyzing +decode_utf/dutf8_encodingrs_decode_to_string_without_replacement + time: [243.87 ns 244.20 ns 244.62 ns] +Found 6 outliers among 100 measurements (6.00%) + 5 (5.00%) high mild + 1 (1.00%) high severe +Benchmarking decode_utf/dutf8_encodingrs_mem_utf8_latin1_up_to__std_str_from_utf8_unchecked +Benchmarking decode_utf/dutf8_encodingrs_mem_utf8_latin1_up_to__std_str_from_utf8_unchecked: Warming up for 3.0000 s +Benchmarking decode_utf/dutf8_encodingrs_mem_utf8_latin1_up_to__std_str_from_utf8_unchecked: Collecting 100 samples in estimated 5.0006 s (23M iterations) +Benchmarking decode_utf/dutf8_encodingrs_mem_utf8_latin1_up_to__std_str_from_utf8_unchecked: Analyzing +decode_utf/dutf8_encodingrs_mem_utf8_latin1_up_to__std_str_from_utf8_unchecked + time: [216.17 ns 217.83 ns 220.00 ns] +Found 10 outliers among 100 measurements (10.00%) + 6 (6.00%) high mild + 4 (4.00%) high severe +Benchmarking decode_utf/dutf8_std_str_from_utf8 +Benchmarking decode_utf/dutf8_std_str_from_utf8: Warming up for 3.0000 s +Benchmarking decode_utf/dutf8_std_str_from_utf8: Collecting 100 samples in estimated 5.0010 s (21M iterations) +Benchmarking decode_utf/dutf8_std_str_from_utf8: Analyzing +decode_utf/dutf8_std_str_from_utf8 + time: [233.38 ns 233.97 ns 234.64 ns] +Benchmarking decode_utf/dutf8_std_str_from_utf8_unchecked__allows_invalid +Benchmarking decode_utf/dutf8_std_str_from_utf8_unchecked__allows_invalid: Warming up for 3.0000 s +Benchmarking decode_utf/dutf8_std_str_from_utf8_unchecked__allows_invalid: Collecting 100 samples in estimated 5.0006 s (32M iterations) +Benchmarking decode_utf/dutf8_std_str_from_utf8_unchecked__allows_invalid: Analyzing +decode_utf/dutf8_std_str_from_utf8_unchecked__allows_invalid + time: [155.47 ns 156.36 ns 157.46 ns] +Found 10 outliers among 100 measurements (10.00%) + 6 (6.00%) high mild + 4 (4.00%) high severe +Benchmarking decode_utf/dutf8_custom_check1_lt0x80__overzealous +Benchmarking decode_utf/dutf8_custom_check1_lt0x80__overzealous: Warming up for 3.0000 s +Benchmarking decode_utf/dutf8_custom_check1_lt0x80__overzealous: Collecting 100 samples in estimated 5.0005 s (26M iterations) +Benchmarking decode_utf/dutf8_custom_check1_lt0x80__overzealous: Analyzing +decode_utf/dutf8_custom_check1_lt0x80__overzealous + time: [187.92 ns 188.70 ns 189.47 ns] +Found 8 outliers among 100 measurements (8.00%) + 4 (4.00%) low mild + 4 (4.00%) high mild +Benchmarking decode_utf/dutf8_custom_check2_lt0x80__fallback__encodingrs_mem_utf8_latin1_up_to__overzealous +Benchmarking decode_utf/dutf8_custom_check2_lt0x80__fallback__encodingrs_mem_utf8_latin1_up_to__overzealous: Warming up for 3.0000 s +Benchmarking decode_utf/dutf8_custom_check2_lt0x80__fallback__encodingrs_mem_utf8_latin1_up_to__overzealous: Collecting 100 samples in estimated 5.0004 s (31M iterations) +Benchmarking decode_utf/dutf8_custom_check2_lt0x80__fallback__encodingrs_mem_utf8_latin1_up_to__overzealous: Analyzing +decode_utf/dutf8_custom_check2_lt0x80__fallback__encodingrs_mem_utf8_latin1_up_to__overzealous + time: [164.61 ns 165.64 ns 166.76 ns] +Found 7 outliers among 100 measurements (7.00%) + 1 (1.00%) low mild + 4 (4.00%) high mild + 2 (2.00%) high severe +Benchmarking decode_utf/dutf8_custom_check3__is_ascii__fallback__encodingrs_mem_utf8_latin1_up_to__overzealous +Benchmarking decode_utf/dutf8_custom_check3__is_ascii__fallback__encodingrs_mem_utf8_latin1_up_to__overzealous: Warming up for 3.0000 s +Benchmarking decode_utf/dutf8_custom_check3__is_ascii__fallback__encodingrs_mem_utf8_latin1_up_to__overzealous: Collecting 100 samples in estimated 5.0005 s (44M iterations) +Benchmarking decode_utf/dutf8_custom_check3__is_ascii__fallback__encodingrs_mem_utf8_latin1_up_to__overzealous: Analyzing +decode_utf/dutf8_custom_check3__is_ascii__fallback__encodingrs_mem_utf8_latin1_up_to__overzealous + time: [112.60 ns 113.02 ns 113.50 ns] +Benchmarking decode_utf/dutf8_bstr_to_str +Benchmarking decode_utf/dutf8_bstr_to_str: Warming up for 3.0000 s +Benchmarking decode_utf/dutf8_bstr_to_str: Collecting 100 samples in estimated 5.0010 s (23M iterations) +Benchmarking decode_utf/dutf8_bstr_to_str: Analyzing +decode_utf/dutf8_bstr_to_str + time: [215.31 ns 215.83 ns 216.46 ns] +Found 7 outliers among 100 measurements (7.00%) + 4 (4.00%) high mild + 3 (3.00%) high severe +Benchmarking decode_utf/dutf8_arraystring__SmallString_from_utf8 +Benchmarking decode_utf/dutf8_arraystring__SmallString_from_utf8: Warming up for 3.0000 s +Benchmarking decode_utf/dutf8_arraystring__SmallString_from_utf8: Collecting 100 samples in estimated 5.0021 s (9.4M iterations) +Benchmarking decode_utf/dutf8_arraystring__SmallString_from_utf8: Analyzing +decode_utf/dutf8_arraystring__SmallString_from_utf8 + time: [539.01 ns 541.44 ns 545.33 ns] +Found 12 outliers among 100 measurements (12.00%) + 1 (1.00%) low severe + 2 (2.00%) low mild + 5 (5.00%) high mild + 4 (4.00%) high severe +Benchmarking decode_utf/dutf8_arraystring__CacheString_from_utf8 +Benchmarking decode_utf/dutf8_arraystring__CacheString_from_utf8: Warming up for 3.0000 s +Benchmarking decode_utf/dutf8_arraystring__CacheString_from_utf8: Collecting 100 samples in estimated 5.0016 s (8.3M iterations) +Benchmarking decode_utf/dutf8_arraystring__CacheString_from_utf8: Analyzing +decode_utf/dutf8_arraystring__CacheString_from_utf8 + time: [600.01 ns 601.86 ns 603.48 ns] +Found 12 outliers among 100 measurements (12.00%) + 3 (3.00%) low severe + 6 (6.00%) low mild + 2 (2.00%) high mild + 1 (1.00%) high severe + +Benchmarking bench_prints/print_baseline +Benchmarking bench_prints/print_baseline: Warming up for 3.0000 s +Benchmarking bench_prints/print_baseline: Collecting 100 samples in estimated 5.0000 s (5.4B iterations) +Benchmarking bench_prints/print_baseline: Analyzing +bench_prints/print_baseline + time: [923.77 ps 924.92 ps 926.18 ps] +Found 3 outliers among 100 measurements (3.00%) + 3 (3.00%) high mild +Benchmarking bench_prints/get_byteslice_find_byte_and_repeatlast +Benchmarking bench_prints/get_byteslice_find_byte_and_repeatlast: Warming up for 3.0000 s +Benchmarking bench_prints/get_byteslice_find_byte_and_repeatlast: Collecting 100 samples in estimated 5.0005 s (46M iterations) +Benchmarking bench_prints/get_byteslice_find_byte_and_repeatlast: Analyzing +bench_prints/get_byteslice_find_byte_and_repeatlast + time: [108.90 ns 109.17 ns 109.49 ns] +Found 6 outliers among 100 measurements (6.00%) + 3 (3.00%) high mild + 3 (3.00%) high severe +Benchmarking bench_prints/get_byteslice_find_byte_iter +Benchmarking bench_prints/get_byteslice_find_byte_iter: Warming up for 3.0000 s +Benchmarking bench_prints/get_byteslice_find_byte_iter: Collecting 100 samples in estimated 5.0000 s (1.2B iterations) +Benchmarking bench_prints/get_byteslice_find_byte_iter: Analyzing +bench_prints/get_byteslice_find_byte_iter + time: [4.1771 ns 4.1869 ns 4.2029 ns] +Found 7 outliers among 100 measurements (7.00%) + 3 (3.00%) high mild + 4 (4.00%) high severe + + +running 0 tests + +test result: ok. 0 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s + +Benchmarking slice_contains/X_2_baseline +Benchmarking slice_contains/X_2_baseline: Warming up for 3.0000 s +Benchmarking slice_contains/X_2_baseline: Collecting 100 samples in estimated 5.0000 s (4.4B iterations) +Benchmarking slice_contains/X_2_baseline: Analyzing +slice_contains/X_2_baseline + time: [1.1244 ns 1.1251 ns 1.1258 ns] +Found 2 outliers among 100 measurements (2.00%) + 2 (2.00%) high mild +Benchmarking slice_contains/X_2_custom1_slice_iter_found +Benchmarking slice_contains/X_2_custom1_slice_iter_found: Warming up for 3.0000 s +Benchmarking slice_contains/X_2_custom1_slice_iter_found: Collecting 100 samples in estimated 5.0000 s (2.0B iterations) +Benchmarking slice_contains/X_2_custom1_slice_iter_found: Analyzing +slice_contains/X_2_custom1_slice_iter_found + time: [2.4590 ns 2.4619 ns 2.4650 ns] +Found 5 outliers among 100 measurements (5.00%) + 1 (1.00%) low mild + 1 (1.00%) high mild + 3 (3.00%) high severe +Benchmarking slice_contains/X_2_custom1_slice_iter_notfound +Benchmarking slice_contains/X_2_custom1_slice_iter_notfound: Warming up for 3.0000 s +Benchmarking slice_contains/X_2_custom1_slice_iter_notfound: Collecting 100 samples in estimated 5.0001 s (138M iterations) +Benchmarking slice_contains/X_2_custom1_slice_iter_notfound: Analyzing +slice_contains/X_2_custom1_slice_iter_notfound + time: [36.080 ns 36.295 ns 36.554 ns] +Found 9 outliers among 100 measurements (9.00%) + 1 (1.00%) low mild + 3 (3.00%) high mild + 5 (5.00%) high severe +Benchmarking slice_contains/X_2_custom2_slice_iter_found +Benchmarking slice_contains/X_2_custom2_slice_iter_found: Warming up for 3.0000 s +Benchmarking slice_contains/X_2_custom2_slice_iter_found: Collecting 100 samples in estimated 5.0000 s (2.0B iterations) +Benchmarking slice_contains/X_2_custom2_slice_iter_found: Analyzing +slice_contains/X_2_custom2_slice_iter_found + time: [2.4540 ns 2.4552 ns 2.4566 ns] +Found 11 outliers among 100 measurements (11.00%) + 1 (1.00%) low severe + 1 (1.00%) low mild + 5 (5.00%) high mild + 4 (4.00%) high severe +Benchmarking slice_contains/X_2_custom2_slice_iter_notfound +Benchmarking slice_contains/X_2_custom2_slice_iter_notfound: Warming up for 3.0000 s +Benchmarking slice_contains/X_2_custom2_slice_iter_notfound: Collecting 100 samples in estimated 5.0001 s (162M iterations) +Benchmarking slice_contains/X_2_custom2_slice_iter_notfound: Analyzing +slice_contains/X_2_custom2_slice_iter_notfound + time: [30.829 ns 31.027 ns 31.293 ns] +Found 10 outliers among 100 measurements (10.00%) + 4 (4.00%) high mild + 6 (6.00%) high severe +Benchmarking slice_contains/X_2_custom3_contains_found +Benchmarking slice_contains/X_2_custom3_contains_found: Warming up for 3.0000 s +Benchmarking slice_contains/X_2_custom3_contains_found: Collecting 100 samples in estimated 5.0000 s (1.0B iterations) +Benchmarking slice_contains/X_2_custom3_contains_found: Analyzing +slice_contains/X_2_custom3_contains_found + time: [4.9036 ns 4.9469 ns 4.9900 ns] +Found 10 outliers among 100 measurements (10.00%) + 2 (2.00%) low mild + 6 (6.00%) high mild + 2 (2.00%) high severe +Benchmarking slice_contains/X_2_custom3_contains_notfound +Benchmarking slice_contains/X_2_custom3_contains_notfound: Warming up for 3.0000 s +Benchmarking slice_contains/X_2_custom3_contains_notfound: Collecting 100 samples in estimated 5.0001 s (242M iterations) +Benchmarking slice_contains/X_2_custom3_contains_notfound: Analyzing +slice_contains/X_2_custom3_contains_notfound + time: [20.567 ns 20.586 ns 20.609 ns] +Found 9 outliers among 100 measurements (9.00%) + 1 (1.00%) low mild + 6 (6.00%) high mild + 2 (2.00%) high severe +Benchmarking slice_contains/X_2_jetscii_found +Benchmarking slice_contains/X_2_jetscii_found: Warming up for 3.0000 s +Benchmarking slice_contains/X_2_jetscii_found: Collecting 100 samples in estimated 5.0000 s (431M iterations) +Benchmarking slice_contains/X_2_jetscii_found: Analyzing +slice_contains/X_2_jetscii_found + time: [11.571 ns 11.576 ns 11.581 ns] +Found 14 outliers among 100 measurements (14.00%) + 1 (1.00%) low mild + 4 (4.00%) high mild + 9 (9.00%) high severe +Benchmarking slice_contains/X_2_jetscii_notfound +Benchmarking slice_contains/X_2_jetscii_notfound: Warming up for 3.0000 s +Benchmarking slice_contains/X_2_jetscii_notfound: Collecting 100 samples in estimated 5.0001 s (208M iterations) +Benchmarking slice_contains/X_2_jetscii_notfound: Analyzing +slice_contains/X_2_jetscii_notfound + time: [23.992 ns 24.035 ns 24.103 ns] +Found 9 outliers among 100 measurements (9.00%) + 4 (4.00%) high mild + 5 (5.00%) high severe +Benchmarking slice_contains/X_2_memchr_found +Benchmarking slice_contains/X_2_memchr_found: Warming up for 3.0000 s +Benchmarking slice_contains/X_2_memchr_found: Collecting 100 samples in estimated 5.0000 s (1.3B iterations) +Benchmarking slice_contains/X_2_memchr_found: Analyzing +slice_contains/X_2_memchr_found + time: [3.7809 ns 3.7835 ns 3.7864 ns] +Found 5 outliers among 100 measurements (5.00%) + 2 (2.00%) high mild + 3 (3.00%) high severe +Benchmarking slice_contains/X_2_memchr_notfound +Benchmarking slice_contains/X_2_memchr_notfound: Warming up for 3.0000 s +Benchmarking slice_contains/X_2_memchr_notfound: Collecting 100 samples in estimated 5.0000 s (1.1B iterations) +Benchmarking slice_contains/X_2_memchr_notfound: Analyzing +slice_contains/X_2_memchr_notfound + time: [4.7379 ns 4.7408 ns 4.7439 ns] +Found 5 outliers among 100 measurements (5.00%) + 1 (1.00%) low severe + 1 (1.00%) low mild + 2 (2.00%) high mild + 1 (1.00%) high severe +Benchmarking slice_contains/X_2_unroll_found_200 +Benchmarking slice_contains/X_2_unroll_found_200: Warming up for 3.0000 s +Benchmarking slice_contains/X_2_unroll_found_200: Collecting 100 samples in estimated 5.0000 s (1.0B iterations) +Benchmarking slice_contains/X_2_unroll_found_200: Analyzing +slice_contains/X_2_unroll_found_200 + time: [4.9241 ns 4.9693 ns 5.0132 ns] +Found 6 outliers among 100 measurements (6.00%) + 1 (1.00%) low mild + 3 (3.00%) high mild + 2 (2.00%) high severe +Benchmarking slice_contains/X_2_unroll_notfound_200 +Benchmarking slice_contains/X_2_unroll_notfound_200: Warming up for 3.0000 s +Benchmarking slice_contains/X_2_unroll_notfound_200: Collecting 100 samples in estimated 5.0001 s (243M iterations) +Benchmarking slice_contains/X_2_unroll_notfound_200: Analyzing +slice_contains/X_2_unroll_notfound_200 + time: [20.541 ns 20.556 ns 20.573 ns] +Found 9 outliers among 100 measurements (9.00%) + 2 (2.00%) low severe + 1 (1.00%) low mild + 5 (5.00%) high mild + 1 (1.00%) high severe +Benchmarking slice_contains/X_2_unroll_found_80 +Benchmarking slice_contains/X_2_unroll_found_80: Warming up for 3.0000 s +Benchmarking slice_contains/X_2_unroll_found_80: Collecting 100 samples in estimated 5.0000 s (2.2B iterations) +Benchmarking slice_contains/X_2_unroll_found_80: Analyzing +slice_contains/X_2_unroll_found_80 + time: [2.3036 ns 2.3225 ns 2.3452 ns] +Found 7 outliers among 100 measurements (7.00%) + 5 (5.00%) high mild + 2 (2.00%) high severe +Benchmarking slice_contains/X_2_unroll_notfound_80 +Benchmarking slice_contains/X_2_unroll_notfound_80: Warming up for 3.0000 s +Benchmarking slice_contains/X_2_unroll_notfound_80: Collecting 100 samples in estimated 5.0000 s (456M iterations) +Benchmarking slice_contains/X_2_unroll_notfound_80: Analyzing +slice_contains/X_2_unroll_notfound_80 + time: [10.858 ns 10.884 ns 10.916 ns] +Found 11 outliers among 100 measurements (11.00%) + 3 (3.00%) high mild + 8 (8.00%) high severe +Benchmarking slice_contains/X_2_stringzilla_found +Benchmarking slice_contains/X_2_stringzilla_found: Warming up for 3.0000 s +Benchmarking slice_contains/X_2_stringzilla_found: Collecting 100 samples in estimated 5.0000 s (533M iterations) +Benchmarking slice_contains/X_2_stringzilla_found: Analyzing +slice_contains/X_2_stringzilla_found + time: [9.5214 ns 9.5303 ns 9.5402 ns] +Found 3 outliers among 100 measurements (3.00%) + 1 (1.00%) high mild + 2 (2.00%) high severe +Benchmarking slice_contains/X_2_stringzilla_notfound +Benchmarking slice_contains/X_2_stringzilla_notfound: Warming up for 3.0000 s +Benchmarking slice_contains/X_2_stringzilla_notfound: Collecting 100 samples in estimated 5.0000 s (417M iterations) +Benchmarking slice_contains/X_2_stringzilla_notfound: Analyzing +slice_contains/X_2_stringzilla_notfound + time: [12.090 ns 12.107 ns 12.126 ns] +Found 2 outliers among 100 measurements (2.00%) + 1 (1.00%) high mild + 1 (1.00%) high severe +Benchmarking slice_contains/D2_baseline +Benchmarking slice_contains/D2_baseline: Warming up for 3.0000 s +Benchmarking slice_contains/D2_baseline: Collecting 100 samples in estimated 5.0000 s (4.4B iterations) +Benchmarking slice_contains/D2_baseline: Analyzing +slice_contains/D2_baseline + time: [1.1291 ns 1.1305 ns 1.1323 ns] +Found 9 outliers among 100 measurements (9.00%) + 1 (1.00%) low mild + 5 (5.00%) high mild + 3 (3.00%) high severe +Benchmarking slice_contains/D2_slice_contains_D2_custom +Benchmarking slice_contains/D2_slice_contains_D2_custom: Warming up for 3.0000 s +Benchmarking slice_contains/D2_slice_contains_D2_custom: Collecting 100 samples in estimated 5.0001 s (179M iterations) +Benchmarking slice_contains/D2_slice_contains_D2_custom: Analyzing +slice_contains/D2_slice_contains_D2_custom + time: [28.072 ns 28.157 ns 28.267 ns] +Found 7 outliers among 100 measurements (7.00%) + 3 (3.00%) high mild + 4 (4.00%) high severe +Benchmarking slice_contains/D2_slice_contains_D2_custom_not +Benchmarking slice_contains/D2_slice_contains_D2_custom_not: Warming up for 3.0000 s +Benchmarking slice_contains/D2_slice_contains_D2_custom_not: Collecting 100 samples in estimated 5.0002 s (101M iterations) +Benchmarking slice_contains/D2_slice_contains_D2_custom_not: Analyzing +slice_contains/D2_slice_contains_D2_custom_not + time: [49.272 ns 49.368 ns 49.488 ns] +Found 7 outliers among 100 measurements (7.00%) + 3 (3.00%) high mild + 4 (4.00%) high severe +Benchmarking slice_contains/D2_slice_contains_D2_stringzilla +Benchmarking slice_contains/D2_slice_contains_D2_stringzilla: Warming up for 3.0000 s +Benchmarking slice_contains/D2_slice_contains_D2_stringzilla: Collecting 100 samples in estimated 5.0000 s (69M iterations) +Benchmarking slice_contains/D2_slice_contains_D2_stringzilla: Analyzing +slice_contains/D2_slice_contains_D2_stringzilla + time: [72.754 ns 72.977 ns 73.225 ns] +Found 6 outliers among 100 measurements (6.00%) + 2 (2.00%) low mild + 4 (4.00%) high severe +Benchmarking slice_contains/D2_slice_contains_D2_stringzilla_not +Benchmarking slice_contains/D2_slice_contains_D2_stringzilla_not: Warming up for 3.0000 s +Benchmarking slice_contains/D2_slice_contains_D2_stringzilla_not: Collecting 100 samples in estimated 5.0001 s (48M iterations) +Benchmarking slice_contains/D2_slice_contains_D2_stringzilla_not: Analyzing +slice_contains/D2_slice_contains_D2_stringzilla_not + time: [106.85 ns 107.20 ns 107.63 ns] +Found 8 outliers among 100 measurements (8.00%) + 2 (2.00%) low severe + 1 (1.00%) low mild + 2 (2.00%) high mild + 3 (3.00%) high severe + + +running 0 tests + +test result: ok. 0 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s + diff --git a/releases/0.7.75/compare-grep-sort.txt b/releases/0.7.75/compare-grep-sort.txt new file mode 100644 index 00000000..f14570e2 --- /dev/null +++ b/releases/0.7.75/compare-grep-sort.txt @@ -0,0 +1,91 @@ ++ uname -a +Linux uboo-ubuntu22 5.15.153.1-microsoft-standard-WSL2 #1 SMP Fri Mar 29 23:14:13 UTC 2024 x86_64 x86_64 x86_64 GNU/Linux ++ git log -n1 '--format=%h %D' +d799548f HEAD -> main ++ ./target/release/s4 --version +super_speedy_syslog_searcher 0.7.75 ++ /usr/bin/grep --version +grep (GNU grep) 3.7 ++ /usr/bin/sort --version +sort (GNU coreutils) 8.32 ++ /usr/bin/time --version +time (GNU Time) UNKNOWN ++ hyperfine --version +hyperfine 1.18.0 + ++ cargo clean --quiet ++ cargo build --release --quiet ++ /home/ulug/.cargo/bin/hyperfine --style=basic --export-markdown /tmp/compare-s4_s4_8om2t.md -N -n 's4 (System)' -- './target/release/s4 -a 20000101T080000 -b 20000101T085959.999999 --color=never ./logs/other/tests/gen-100-1-no.log ./logs/other/tests/gen-100-10-.......log ./logs/other/tests/gen-100-10-BRAAAP.log ./logs/other/tests/gen-100-10-FOOBAR.log ./logs/other/tests/gen-100-10-______.log ./logs/other/tests/gen-100-10-skullcrossbones.log ./logs/other/tests/gen-100-4-happyface.log ./logs/other/tests/gen-1000-3-foobar.log ./logs/other/tests/gen-200-1-jajaja.log ./logs/other/tests/gen-400-4-shamrock.log ./logs/other/tests/gen-99999-1-Motley_Crue.log' +Benchmark 1: s4 (System) + Time (mean ± σ): 75.2 ms ± 2.0 ms [User: 58.7 ms, System: 71.9 ms] + Range (min … max): 71.9 ms … 80.5 ms 38 runs + + ++ cargo clean --quiet ++ cargo build --release --quiet --features=mimalloc ++ /home/ulug/.cargo/bin/hyperfine --style=basic --export-markdown /tmp/compare-s4_s4_JiHfb.md -N -n 's4 (mimalloc)' -- './target/release/s4 -a 20000101T080000 -b 20000101T085959.999999 --color=never ./logs/other/tests/gen-100-1-no.log ./logs/other/tests/gen-100-10-.......log ./logs/other/tests/gen-100-10-BRAAAP.log ./logs/other/tests/gen-100-10-FOOBAR.log ./logs/other/tests/gen-100-10-______.log ./logs/other/tests/gen-100-10-skullcrossbones.log ./logs/other/tests/gen-100-4-happyface.log ./logs/other/tests/gen-1000-3-foobar.log ./logs/other/tests/gen-200-1-jajaja.log ./logs/other/tests/gen-400-4-shamrock.log ./logs/other/tests/gen-99999-1-Motley_Crue.log' +Benchmark 1: s4 (mimalloc) + Time (mean ± σ): 43.4 ms ± 1.4 ms [User: 49.6 ms, System: 33.2 ms] + Range (min … max): 41.2 ms … 47.1 ms 66 runs + + ++ cargo clean --quiet ++ cargo build --release --quiet --features=jemalloc ++ /home/ulug/.cargo/bin/hyperfine --style=basic --export-markdown /tmp/compare-s4_s4_CljQs.md -N -n 's4 (jemalloc)' -- './target/release/s4 -a 20000101T080000 -b 20000101T085959.999999 --color=never ./logs/other/tests/gen-100-1-no.log ./logs/other/tests/gen-100-10-.......log ./logs/other/tests/gen-100-10-BRAAAP.log ./logs/other/tests/gen-100-10-FOOBAR.log ./logs/other/tests/gen-100-10-______.log ./logs/other/tests/gen-100-10-skullcrossbones.log ./logs/other/tests/gen-100-4-happyface.log ./logs/other/tests/gen-1000-3-foobar.log ./logs/other/tests/gen-200-1-jajaja.log ./logs/other/tests/gen-400-4-shamrock.log ./logs/other/tests/gen-99999-1-Motley_Crue.log' +Benchmark 1: s4 (jemalloc) + Time (mean ± σ): 49.7 ms ± 2.0 ms [User: 51.4 ms, System: 40.2 ms] + Range (min … max): 46.8 ms … 61.0 ms 62 runs + + ++ /home/ulug/.cargo/bin/hyperfine --style=basic --export-markdown /tmp/compare-s4_s4_QualE.md --shell sh -n grep+sort -- '/usr/bin/grep -hEe '\''^20000101T08[[:digit:]]{4}'\'' ./logs/other/tests/gen-100-1-no.log ./logs/other/tests/gen-100-10-.......log ./logs/other/tests/gen-100-10-BRAAAP.log ./logs/other/tests/gen-100-10-FOOBAR.log ./logs/other/tests/gen-100-10-______.log ./logs/other/tests/gen-100-10-skullcrossbones.log ./logs/other/tests/gen-100-4-happyface.log ./logs/other/tests/gen-1000-3-foobar.log ./logs/other/tests/gen-200-1-jajaja.log ./logs/other/tests/gen-400-4-shamrock.log ./logs/other/tests/gen-99999-1-Motley_Crue.log | /usr/bin/sort -t '\'' '\'' -k 1 -s' +Benchmark 1: grep+sort + Time (mean ± σ): 35.7 ms ± 0.8 ms [User: 24.7 ms, System: 6.9 ms] + Range (min … max): 34.7 ms … 39.5 ms 82 runs + ++ cat ./compare-s4_grep_sort.md +| Command | Mean [ms] | Min [ms] | Max [ms] | Relative | +|:--- |---: |---: |---: |---: | +| `s4 (System)` | 75.2 ± 2.0 | 71.9 | 80.5 | 1.00 | +| `s4 (mimalloc)` | 43.4 ± 1.4 | 41.2 | 47.1 | 1.00 | +| `s4 (jemalloc)` | 49.7 ± 2.0 | 46.8 | 61.0 | 1.00 | +| `grep+sort` | 35.7 ± 0.8 | 34.7 | 39.5 | 1.00 | + + +COMMAND │ MEAN [MS] │ MIN [MS] │ MAX [MS] │ RELATIVE +────────────────┼────────────┼──────────┼──────────┼─────────── +s4 (System) │ 75.2 ± 2.0 │ 71.9 │ 80.5 │ 1.00 +s4 (mimalloc) │ 43.4 ± 1.4 │ 41.2 │ 47.1 │ 1.00 +s4 (jemalloc) │ 49.7 ± 2.0 │ 46.8 │ 61.0 │ 1.00 +grep+sort │ 35.7 ± 0.8 │ 34.7 │ 39.5 │ 1.00 + ++ cargo clean --quiet ++ cargo build --release --quiet ++ /usr/bin/time '--format=real %e s, Max RSS %M KB, %P %%CPU, (%x)' -- ./target/release/s4 -a 20000101T080000 -b 20000101T085959.999999 --color=never ./logs/other/tests/gen-100-1-no.log ./logs/other/tests/gen-100-10-.......log ./logs/other/tests/gen-100-10-BRAAAP.log ./logs/other/tests/gen-100-10-FOOBAR.log ./logs/other/tests/gen-100-10-______.log ./logs/other/tests/gen-100-10-skullcrossbones.log ./logs/other/tests/gen-100-4-happyface.log ./logs/other/tests/gen-1000-3-foobar.log ./logs/other/tests/gen-200-1-jajaja.log ./logs/other/tests/gen-400-4-shamrock.log ./logs/other/tests/gen-99999-1-Motley_Crue.log +real 0.07 s, Max RSS 81624 KB, 171% %CPU, (0) + ++ cargo clean --quiet ++ cargo build --release --quiet --features=mimalloc ++ /usr/bin/time '--format=real %e s, Max RSS %M KB, %P %%CPU, (%x)' -- ./target/release/s4 -a 20000101T080000 -b 20000101T085959.999999 --color=never ./logs/other/tests/gen-100-1-no.log ./logs/other/tests/gen-100-10-.......log ./logs/other/tests/gen-100-10-BRAAAP.log ./logs/other/tests/gen-100-10-FOOBAR.log ./logs/other/tests/gen-100-10-______.log ./logs/other/tests/gen-100-10-skullcrossbones.log ./logs/other/tests/gen-100-4-happyface.log ./logs/other/tests/gen-1000-3-foobar.log ./logs/other/tests/gen-200-1-jajaja.log ./logs/other/tests/gen-400-4-shamrock.log ./logs/other/tests/gen-99999-1-Motley_Crue.log +real 0.04 s, Max RSS 148740 KB, 202% %CPU, (0) + ++ cargo clean --quiet ++ cargo build --release --quiet --features=jemalloc ++ /usr/bin/time '--format=real %e s, Max RSS %M KB, %P %%CPU, (%x)' -- ./target/release/s4 -a 20000101T080000 -b 20000101T085959.999999 --color=never ./logs/other/tests/gen-100-1-no.log ./logs/other/tests/gen-100-10-.......log ./logs/other/tests/gen-100-10-BRAAAP.log ./logs/other/tests/gen-100-10-FOOBAR.log ./logs/other/tests/gen-100-10-______.log ./logs/other/tests/gen-100-10-skullcrossbones.log ./logs/other/tests/gen-100-4-happyface.log ./logs/other/tests/gen-1000-3-foobar.log ./logs/other/tests/gen-200-1-jajaja.log ./logs/other/tests/gen-400-4-shamrock.log ./logs/other/tests/gen-99999-1-Motley_Crue.log +real 0.04 s, Max RSS 130820 KB, 185% %CPU, (0) + ++ /usr/bin/time '--format=real %e s, Max RSS %M KB, %P %%CPU, (%x)' -- sh -c '/usr/bin/grep --color=never --text -hEe '\''^20000101T08[[:digit:]]{4}'\'' -- ./logs/other/tests/gen-100-1-no.log ./logs/other/tests/gen-100-10-.......log ./logs/other/tests/gen-100-10-BRAAAP.log ./logs/other/tests/gen-100-10-FOOBAR.log ./logs/other/tests/gen-100-10-______.log ./logs/other/tests/gen-100-10-skullcrossbones.log ./logs/other/tests/gen-100-4-happyface.log ./logs/other/tests/gen-1000-3-foobar.log ./logs/other/tests/gen-200-1-jajaja.log ./logs/other/tests/gen-400-4-shamrock.log ./logs/other/tests/gen-99999-1-Motley_Crue.log | /usr/bin/sort -t '\'' '\'' -k 1 -s >/dev/null' +real 0.02 s, Max RSS 8256 KB, 81% %CPU, (0) + +The output files will differ due to sorting method differences. +However Line Count and Byte Count should be the same. + +super_speedy_syslog_searcher output file + Line Count 10800 + Byte Count 3552746 +'grep+sort' output file + Line Count 10800 + Byte Count 3552746 +Files /tmp/compare-s4_s4_m9ONG and /tmp/compare-s4_grep_RsG15 differ + +Line Count and Byte Count are the same. (ʘ‿ʘ) + diff --git a/releases/0.7.75/compare-log-mergers.txt b/releases/0.7.75/compare-log-mergers.txt new file mode 100644 index 00000000..c4faf43d --- /dev/null +++ b/releases/0.7.75/compare-log-mergers.txt @@ -0,0 +1,138 @@ ++ git log -n1 --oneline -1 +d799548f (HEAD -> main) (PROJECT) bump version 0.7.75 ++ /usr/bin/time --version +time (GNU Time) UNKNOWN ++ python --version +Python 3.10.12 ++ hyperfine --version +hyperfine 1.18.0 ++ python -m pip install --upgrade --no-python-version-warning --disable-pip-version-check --force --quiet logmerger==0.9.0 +ERROR: pip's dependency resolver does not currently take into account all the packages that are installed. This behaviour is the source of the following dependency conflicts. +toolong 1.5.0 requires textual<0.59.0,>=0.58.0, but you have textual 0.71.0 which is incompatible. ++ python -m pip install --upgrade --no-python-version-warning --disable-pip-version-check --force --quiet toolong==1.5.0 ++ python -m pip install --upgrade --no-python-version-warning --disable-pip-version-check --force --quiet logdissect==3.1.1 +---------------------------------------- ++ /usr/bin/grep --version +grep (GNU grep) 3.7 ++ /usr/bin/sort --version +sort (GNU coreutils) 8.32 + ++ /home/ulug/.cargo/bin/hyperfine --style=basic --export-markdown /tmp/compare-log_mergers_Nx7mJ.md --shell sh -n grep+sort -- '/usr/bin/grep -hEe '\''^2000-01-01T00\:([234][[:digit:]]\:[[:digit:]]{2}|50\:00)'\'' -- ./tools/compare-log-mergers/gen-5000-1-faces.log ./tools/compare-log-mergers/gen-2500-1-faces.log ./tools/compare-log-mergers/gen-2000-1-faces.log | /usr/bin/sort -t '\'' '\'' -k 1 -s > /dev/null' +Benchmark 1: grep+sort + Time (mean ± σ): 41.0 ms ± 0.5 ms [User: 31.8 ms, System: 2.2 ms] + Range (min … max): 40.5 ms … 43.8 ms 72 runs + ++ /usr/bin/time '--format=real %e s, Max RSS %M KB, %P %%CPU, (%x)' -- /usr/bin/grep -hEe '^2000-01-01T00\:([234][[:digit:]]\:[[:digit:]]{2}|50\:00)' -- ./tools/compare-log-mergers/gen-5000-1-faces.log ./tools/compare-log-mergers/gen-2500-1-faces.log ./tools/compare-log-mergers/gen-2000-1-faces.log ++ /usr/bin/sort -t ' ' -k 1 -s +real 0.01 s, Max RSS 2740 KB, 46% %CPU, (0) + +4403 /tmp/compare-log-mergers_GwxgC.out + +| Command | Mean [ms] | Min [ms] | Max [ms] | Relative | +|:---|---:|---:|---:|---:| +| `grep+sort` | 41.0 ± 0.5 | 40.5 | 43.8 | 1.00 | + +---------------------------------------- ++ ./target/release/s4 --version +super_speedy_syslog_searcher 0.7.75 + ++ cargo clean --quiet ++ cargo build --quiet --release ++ /home/ulug/.cargo/bin/hyperfine --style=basic --export-markdown /tmp/compare-log_mergers_F8GHF.md -N -n 's4 (system)' -- ''\''./target/release/s4'\'' -a='\''2000-01-01T00:20:00'\'' -b='\''2000-01-01T00:50:00'\'' --color=never ./tools/compare-log-mergers/gen-5000-1-faces.log ./tools/compare-log-mergers/gen-2500-1-faces.log ./tools/compare-log-mergers/gen-2000-1-faces.log > /dev/null' +Benchmark 1: s4 (system) + Time (mean ± σ): 37.3 ms ± 1.5 ms [User: 35.9 ms, System: 21.1 ms] + Range (min … max): 35.3 ms … 44.6 ms 77 runs + ++ /usr/bin/time '--format=real %e s, Max RSS %M KB, %P %%CPU, (%x)' -- ./target/release/s4 -a=2000-01-01T00:20:00 -b=2000-01-01T00:50:00 --color=never ./tools/compare-log-mergers/gen-5000-1-faces.log ./tools/compare-log-mergers/gen-2500-1-faces.log ./tools/compare-log-mergers/gen-2000-1-faces.log +real 0.05 s, Max RSS 48084 KB, 167% %CPU, (0) + +4403 /tmp/compare-log-mergers_GwxgC.out + +| Command | Mean [ms] | Min [ms] | Max [ms] | Relative | +|:---|---:|---:|---:|---:| +| `s4 (system)` | 37.3 ± 1.5 | 35.3 | 44.6 | 1.00 | + +---------------------------------------- ++ cargo clean --quiet ++ cargo build --quiet --release --features=mimalloc ++ /home/ulug/.cargo/bin/hyperfine --style=basic --export-markdown /tmp/compare-log_mergers_k1J5E.md -N -n 's4 (mimalloc)' -- ''\''./target/release/s4'\'' -a='\''2000-01-01T00:20:00'\'' -b='\''2000-01-01T00:50:00'\'' --color=never ./tools/compare-log-mergers/gen-5000-1-faces.log ./tools/compare-log-mergers/gen-2500-1-faces.log ./tools/compare-log-mergers/gen-2000-1-faces.log > /dev/null' +Benchmark 1: s4 (mimalloc) + Time (mean ± σ): 30.3 ms ± 1.8 ms [User: 26.7 ms, System: 19.7 ms] + Range (min … max): 27.1 ms … 36.6 ms 104 runs + ++ /usr/bin/time '--format=real %e s, Max RSS %M KB, %P %%CPU, (%x)' -- ./target/release/s4 -a=2000-01-01T00:20:00 -b=2000-01-01T00:50:00 --color=never ./tools/compare-log-mergers/gen-5000-1-faces.log ./tools/compare-log-mergers/gen-2500-1-faces.log ./tools/compare-log-mergers/gen-2000-1-faces.log +real 0.04 s, Max RSS 77020 KB, 170% %CPU, (0) + +4403 /tmp/compare-log-mergers_GwxgC.out + +| Command | Mean [ms] | Min [ms] | Max [ms] | Relative | +|:---|---:|---:|---:|---:| +| `s4 (mimalloc)` | 30.3 ± 1.8 | 27.1 | 36.6 | 1.00 | + +---------------------------------------- ++ cargo clean --quiet ++ cargo build --quiet --release --features=jemalloc ++ /home/ulug/.cargo/bin/hyperfine --style=basic --export-markdown /tmp/compare-log_mergers_XaTRi.md -N -n 's4 (jemalloc))' -- ''\''./target/release/s4'\'' -a='\''2000-01-01T00:20:00'\'' -b='\''2000-01-01T00:50:00'\'' --color=never ./tools/compare-log-mergers/gen-5000-1-faces.log ./tools/compare-log-mergers/gen-2500-1-faces.log ./tools/compare-log-mergers/gen-2000-1-faces.log > /dev/null' +Benchmark 1: s4 (jemalloc)) + Time (mean ± σ): 36.0 ms ± 2.0 ms [User: 27.3 ms, System: 26.2 ms] + Range (min … max): 32.5 ms … 43.2 ms 82 runs + ++ /usr/bin/time '--format=real %e s, Max RSS %M KB, %P %%CPU, (%x)' -- ./target/release/s4 -a=2000-01-01T00:20:00 -b=2000-01-01T00:50:00 --color=never ./tools/compare-log-mergers/gen-5000-1-faces.log ./tools/compare-log-mergers/gen-2500-1-faces.log ./tools/compare-log-mergers/gen-2000-1-faces.log +real 0.05 s, Max RSS 69028 KB, 170% %CPU, (0) + +4403 /tmp/compare-log-mergers_GwxgC.out + +| Command | Mean [ms] | Min [ms] | Max [ms] | Relative | +|:---|---:|---:|---:|---:| +| `s4 (jemalloc))` | 36.0 ± 2.0 | 32.5 | 43.2 | 1.00 | + +---------------------------------------- ++ logmerger --version +logmerger 0.9.0 + ++ /home/ulug/.cargo/bin/hyperfine --style=basic --export-markdown /tmp/compare-log_mergers_Gbl2v.md --shell sh -n logmerger -- ''\''logmerger'\'' --inline --output=- --start '\''2000-01-01T00:20:00'\'' --end '\''2000-01-01T00:50:00'\'' ./tools/compare-log-mergers/gen-5000-1-faces.log ./tools/compare-log-mergers/gen-2500-1-faces.log ./tools/compare-log-mergers/gen-2000-1-faces.log > /dev/null' +Benchmark 1: logmerger + Time (mean ± σ): 720.2 ms ± 4.9 ms [User: 693.1 ms, System: 25.0 ms] + Range (min … max): 712.9 ms … 728.0 ms 10 runs + ++ /usr/bin/time '--format=real %e s, Max RSS %M KB, %P %%CPU, (%x)' -- logmerger --inline --output=- --start 2000-01-01T00:20:00 --end 2000-01-01T00:50:00 ./tools/compare-log-mergers/gen-5000-1-faces.log ./tools/compare-log-mergers/gen-2500-1-faces.log ./tools/compare-log-mergers/gen-2000-1-faces.log +real 0.72 s, Max RSS 56332 KB, 99% %CPU, (0) + +4908 /tmp/compare-log-mergers_GwxgC.out + +| Command | Mean [ms] | Min [ms] | Max [ms] | Relative | +|:---|---:|---:|---:|---:| +| `logmerger` | 720.2 ± 4.9 | 712.9 | 728.0 | 1.00 | + +---------------------------------------- ++ logdissect --version +logdissect 3.1.1 + +TODO: figure out how to use logdissect. I'm unable to get it to match on ANY files. + +---------------------------------------- ++ tl --version +tl, version 1.5.0 + ++ /usr/bin/time '--format=real %e s, Max RSS %M KB, %P %%CPU, (%x)' -- tl --merge --output-merge /tmp/compare-log-mergers_GwxgC.out ./tools/compare-log-mergers/gen-5000-1-faces.log ./tools/compare-log-mergers/gen-2500-1-faces.log ./tools/compare-log-mergers/gen-2000-1-faces.log +real 2.85 s, Max RSS 48784 KB, 15% %CPU, (0) + +10003 /tmp/compare-log-mergers_GwxgC.out + ++ cat ./compare-log_mergers.md +| Command | Mean [ms] | Min [ms] | Max [ms] | Relative | +|:--- |---: |---: |---: |---: | +| `grep+sort` | 41.0 ± 0.5 | 40.5 | 43.8 | 1.00 | +| `s4 (system)` | 37.3 ± 1.5 | 35.3 | 44.6 | 1.00 | +| `s4 (mimalloc)` | 30.3 ± 1.8 | 27.1 | 36.6 | 1.00 | +| `s4 (jemalloc))` | 36.0 ± 2.0 | 32.5 | 43.2 | 1.00 | +| `logmerger` | 720.2 ± 4.9 | 712.9 | 728.0 | 1.00 | + + + COMMAND │ MEAN [MS] │ MIN [MS] │ MAX [MS] │ RELATIVE + ─────────────────┼─────────────┼──────────┼──────────┼─────────── + grep+sort │ 41.0 ± 0.5 │ 40.5 │ 43.8 │ 1.00 + s4 (system) │ 37.3 ± 1.5 │ 35.3 │ 44.6 │ 1.00 + s4 (mimalloc) │ 30.3 ± 1.8 │ 27.1 │ 36.6 │ 1.00 + s4 (jemalloc)) │ 36.0 ± 2.0 │ 32.5 │ 43.2 │ 1.00 + logmerger │ 720.2 ± 4.9 │ 712.9 │ 728.0 │ 1.00 \ No newline at end of file diff --git a/releases/0.7.75/compare-s4_grep_sort.md b/releases/0.7.75/compare-s4_grep_sort.md new file mode 100644 index 00000000..f8b4f716 --- /dev/null +++ b/releases/0.7.75/compare-s4_grep_sort.md @@ -0,0 +1,6 @@ +| Command | Mean [ms] | Min [ms] | Max [ms] | Relative | +|:--- |---: |---: |---: |---: | +| `s4 (System)` | 75.2 ± 2.0 | 71.9 | 80.5 | 1.00 | +| `s4 (mimalloc)` | 43.4 ± 1.4 | 41.2 | 47.1 | 1.00 | +| `s4 (jemalloc)` | 49.7 ± 2.0 | 46.8 | 61.0 | 1.00 | +| `grep+sort` | 35.7 ± 0.8 | 34.7 | 39.5 | 1.00 | diff --git a/releases/0.7.75/flamegraph-evtx.svg b/releases/0.7.75/flamegraph-evtx.svg new file mode 100644 index 00000000..839ce42e --- /dev/null +++ b/releases/0.7.75/flamegraph-evtx.svg @@ -0,0 +1,3802 @@ + + + + + + + + + + + + + + + Flame Graph: super_speedy_syslog_searcher 0.7.75; git: d799548f; -freq 8000; created 20240707T231051-0700; flamegraph-flamegraph 0.6.5; rustc 1.70.0
; command: s4 ./logs/programs/evtx/Microsoft-Windows-Kernel-PnP%4Configuration.evtx + + Reset Zoom + Search + + + + ret_from_fork (22 samples, 3.91%) + + ret_.. + + + schedule_tail (22 samples, 3.91%) + + sche.. + + + finish_task_switch.isra.0 (22 samples, 3.91%) + + fini.. + + + __perf_event_task_sched_in (22 samples, 3.91%) + + __pe.. + + + __raw_callee_save___pv_queued_spin_unlock (22 samples, 3.91%) + + __ra.. + + + __x64_sys_exit_group (1 samples, 0.18%) + + + + + do_group_exit (1 samples, 0.18%) + + + + + do_exit (1 samples, 0.18%) + + + + + mm_update_next_owner (1 samples, 0.18%) + + + + + entry_SYSCALL_64_after_hwframe (2 samples, 0.36%) + + + + + do_syscall_64 (2 samples, 0.36%) + + + + + __x64_sys_execve (1 samples, 0.18%) + + + + + do_execveat_common.isra.0 (1 samples, 0.18%) + + + + + bprm_execve (1 samples, 0.18%) + + + + + load_elf_binary (1 samples, 0.18%) + + + + + elf_map (1 samples, 0.18%) + + + + + vm_mmap_pgoff (1 samples, 0.18%) + + + + + do_mmap (1 samples, 0.18%) + + + + + mmap_region (1 samples, 0.18%) + + + + + vma_link (1 samples, 0.18%) + + + + + vma_interval_tree_insert (1 samples, 0.18%) + + + + + mmap_region (1 samples, 0.18%) + + + + + perf_event_mmap (1 samples, 0.18%) + + + + + perf_iterate_sb (1 samples, 0.18%) + + + + + start_thread (2 samples, 0.36%) + + + + + std::sys::unix::thread::Thread::new::thread_start (2 samples, 0.36%) + + + + + std::sys::unix::stack_overflow::imp::make_handler (2 samples, 0.36%) + + + + + __mmap (2 samples, 0.36%) + + + + + entry_SYSCALL_64_after_hwframe (2 samples, 0.36%) + + + + + do_syscall_64 (2 samples, 0.36%) + + + + + vm_mmap_pgoff (2 samples, 0.36%) + + + + + do_mmap (2 samples, 0.36%) + + + + + get_unmapped_area (1 samples, 0.18%) + + + + + arch_get_unmapped_area_topdown (1 samples, 0.18%) + + + + + clone3 (3 samples, 0.53%) + + + + + entry_SYSCALL_64_after_hwframe (1 samples, 0.18%) + + + + + do_syscall_64 (1 samples, 0.18%) + + + + + __do_sys_clone3 (1 samples, 0.18%) + + + + + kernel_clone (1 samples, 0.18%) + + + + + copy_process (1 samples, 0.18%) + + + + + user_disable_single_step (1 samples, 0.18%) + + + + + finish_fault (1 samples, 0.18%) + + + + + do_set_pte (1 samples, 0.18%) + + + + + __page_set_anon_rmap (1 samples, 0.18%) + + + + + asm_exc_page_fault (2 samples, 0.36%) + + + + + exc_page_fault (2 samples, 0.36%) + + + + + do_user_addr_fault (2 samples, 0.36%) + + + + + handle_mm_fault (2 samples, 0.36%) + + + + + __handle_mm_fault (2 samples, 0.36%) + + + + + __mem_cgroup_charge (1 samples, 0.18%) + + + + + get_mem_cgroup_from_mm (1 samples, 0.18%) + + + + + _dl_relocate_object (3 samples, 0.53%) + + + + + _dl_lookup_symbol_x (1 samples, 0.18%) + + + + + asm_exc_page_fault (1 samples, 0.18%) + + + + + exc_page_fault (1 samples, 0.18%) + + + + + do_user_addr_fault (1 samples, 0.18%) + + + + + handle_mm_fault (1 samples, 0.18%) + + + + + __handle_mm_fault (1 samples, 0.18%) + + + + + filemap_map_pages (1 samples, 0.18%) + + + + + xas_find (1 samples, 0.18%) + + + + + xas_load (1 samples, 0.18%) + + + + + _dl_new_object (1 samples, 0.18%) + + + + + asm_exc_page_fault (1 samples, 0.18%) + + + + + exc_page_fault (1 samples, 0.18%) + + + + + do_user_addr_fault (1 samples, 0.18%) + + + + + handle_mm_fault (1 samples, 0.18%) + + + + + __handle_mm_fault (1 samples, 0.18%) + + + + + filemap_map_pages (1 samples, 0.18%) + + + + + next_uptodate_page (1 samples, 0.18%) + + + + + _dl_map_object_deps (1 samples, 0.18%) + + + + + _dl_catch_exception (1 samples, 0.18%) + + + + + openaux (1 samples, 0.18%) + + + + + _dl_map_object (1 samples, 0.18%) + + + + + _dl_map_object_from_fd (1 samples, 0.18%) + + + + + _dl_start (6 samples, 1.07%) + + + + + _dl_sysdep_start (6 samples, 1.07%) + + + + + dl_main (6 samples, 1.07%) + + + + + __libc_early_init (1 samples, 0.18%) + + + + + asm_exc_page_fault (1 samples, 0.18%) + + + + + exc_page_fault (1 samples, 0.18%) + + + + + do_user_addr_fault (1 samples, 0.18%) + + + + + handle_mm_fault (1 samples, 0.18%) + + + + + __handle_mm_fault (1 samples, 0.18%) + + + + + __alloc_pages (1 samples, 0.18%) + + + + + get_page_from_freelist (1 samples, 0.18%) + + + + + kernel_init_free_pages.part.0 (1 samples, 0.18%) + + + + + clear_page_erms (1 samples, 0.18%) + + + + + syscall_exit_to_user_mode (1 samples, 0.18%) + + + + + do_syscall_64 (2 samples, 0.36%) + + + + + ksys_write (1 samples, 0.18%) + + + + + vfs_write (1 samples, 0.18%) + + + + + std::io::Write::write_all (3 samples, 0.53%) + + + + + <termcolor::LossyStandardStream<W> as std::io::Write>::write (3 samples, 0.53%) + + + + + <std::io::stdio::Stdout as std::io::Write>::write (3 samples, 0.53%) + + + + + <&std::io::stdio::Stdout as std::io::Write>::write (3 samples, 0.53%) + + + + + <std::io::stdio::StdoutLock as std::io::Write>::write (3 samples, 0.53%) + + + + + __GI___libc_write (3 samples, 0.53%) + + + + + entry_SYSCALL_64_after_hwframe (3 samples, 0.53%) + + + + + syscall_return_via_sysret (1 samples, 0.18%) + + + + + fsnotify (1 samples, 0.18%) + + + + + <&std::io::stdio::Stdout as std::io::Write>::flush (3 samples, 0.53%) + + + + + std::io::buffered::bufwriter::BufWriter<W>::flush_buf (3 samples, 0.53%) + + + + + __GI___libc_write (3 samples, 0.53%) + + + + + entry_SYSCALL_64_after_hwframe (2 samples, 0.36%) + + + + + do_syscall_64 (2 samples, 0.36%) + + + + + ksys_write (2 samples, 0.36%) + + + + + vfs_write (2 samples, 0.36%) + + + + + __fsnotify_parent (2 samples, 0.36%) + + + + + dput (1 samples, 0.18%) + + + + + s4lib::printer::printers::PrinterLogMessage::print_evtx_color (7 samples, 1.24%) + + + + + <std::io::stdio::Stdout as std::io::Write>::flush (4 samples, 0.71%) + + + + + crossbeam_channel::select::Select::select (12 samples, 2.13%) + + c.. + + + crossbeam_channel::select::run_select (12 samples, 2.13%) + + c.. + + + crossbeam_channel::context::Context::with::{{closure}} (12 samples, 2.13%) + + c.. + + + crossbeam_channel::context::Context::wait_until (12 samples, 2.13%) + + c.. + + + std::thread::park (12 samples, 2.13%) + + s.. + + + syscall (12 samples, 2.13%) + + s.. + + + entry_SYSCALL_64_after_hwframe (12 samples, 2.13%) + + e.. + + + do_syscall_64 (12 samples, 2.13%) + + d.. + + + __x64_sys_futex (12 samples, 2.13%) + + _.. + + + do_futex (12 samples, 2.13%) + + d.. + + + futex_wait (12 samples, 2.13%) + + f.. + + + futex_wait_queue_me (12 samples, 2.13%) + + f.. + + + schedule (12 samples, 2.13%) + + s.. + + + __schedule (12 samples, 2.13%) + + _.. + + + finish_task_switch.isra.0 (12 samples, 2.13%) + + f.. + + + __perf_event_task_sched_in (12 samples, 2.13%) + + _.. + + + s4::processing_loop (20 samples, 3.55%) + + s4::.. + + + std::rt::lang_start::_{{closure}} (21 samples, 3.73%) + + std:.. + + + std::sys_common::backtrace::__rust_begin_short_backtrace (21 samples, 3.73%) + + std:.. + + + s4::main (21 samples, 3.73%) + + s4::.. + + + clap_builder::builder::command::Command::get_matches_from (1 samples, 0.18%) + + + + + clap_builder::builder::command::Command::_do_parse (1 samples, 0.18%) + + + + + clap_builder::builder::command::Command::_build_self (1 samples, 0.18%) + + + + + <alloc::vec::Vec<T> as alloc::vec::spec_from_iter::SpecFromIter<T,I>>::from_iter (1 samples, 0.18%) + + + + + <core::iter::adapters::filter_map::FilterMap<I,F> as core::iter::traits::iterator::Iterator>::next (1 samples, 0.18%) + + + + + <s4lib::readers::journalreader::JournalOutput as clap_builder::derive::ValueEnum>::to_possible_value (1 samples, 0.18%) + + + + + main (22 samples, 3.91%) + + main + + + std::rt::lang_start_internal (22 samples, 3.91%) + + std:.. + + + pthread_getattr_np@@GLIBC_2.32 (1 samples, 0.18%) + + + + + __getdelim (1 samples, 0.18%) + + + + + _IO_file_underflow@@GLIBC_2.2.5 (1 samples, 0.18%) + + + + + __read_nocancel (1 samples, 0.18%) + + + + + entry_SYSCALL_64_after_hwframe (1 samples, 0.18%) + + + + + do_syscall_64 (1 samples, 0.18%) + + + + + ksys_read (1 samples, 0.18%) + + + + + vfs_read (1 samples, 0.18%) + + + + + seq_read (1 samples, 0.18%) + + + + + seq_read_iter (1 samples, 0.18%) + + + + + show_map (1 samples, 0.18%) + + + + + show_map_vma (1 samples, 0.18%) + + + + + _start (29 samples, 5.15%) + + _start + + + __libc_start_main@@GLIBC_2.34 (23 samples, 4.09%) + + __li.. + + + __libc_start_call_main (23 samples, 4.09%) + + __li.. + + + exit (1 samples, 0.18%) + + + + + __run_exit_handlers (1 samples, 0.18%) + + + + + _exit (1 samples, 0.18%) + + + + + entry_SYSCALL_64_after_hwframe (1 samples, 0.18%) + + + + + do_syscall_64 (1 samples, 0.18%) + + + + + __x64_sys_exit_group (1 samples, 0.18%) + + + + + do_group_exit (1 samples, 0.18%) + + + + + zap_other_threads (1 samples, 0.18%) + + + + + try_to_wake_up (1 samples, 0.18%) + + + + + select_task_rq_fair (1 samples, 0.18%) + + + + + s4 (57 samples, 10.12%) + + s4 + + + [unknown] (1 samples, 0.18%) + + + + + <&std::io::stdio::Stdout as std::io::Write>::write (1 samples, 0.18%) + + + + + <std::io::stdio::StdoutLock as std::io::Write>::write (1 samples, 0.18%) + + + + + __GI___libc_write (1 samples, 0.18%) + + + + + entry_SYSCALL_64 (1 samples, 0.18%) + + + + + x86_pmu_enable_all (16 samples, 2.84%) + + x8.. + + + perf-exec (17 samples, 3.02%) + + per.. + + + entry_SYSCALL_64_after_hwframe (17 samples, 3.02%) + + ent.. + + + do_syscall_64 (17 samples, 3.02%) + + do_.. + + + __x64_sys_execve (17 samples, 3.02%) + + __x.. + + + do_execveat_common.isra.0 (17 samples, 3.02%) + + do_.. + + + bprm_execve (17 samples, 3.02%) + + bpr.. + + + load_elf_binary (17 samples, 3.02%) + + loa.. + + + begin_new_exec (17 samples, 3.02%) + + beg.. + + + perf_event_exec (17 samples, 3.02%) + + per.. + + + asm_sysvec_irq_work (1 samples, 0.18%) + + + + + sysvec_irq_work (1 samples, 0.18%) + + + + + __sysvec_irq_work (1 samples, 0.18%) + + + + + irq_work_run_list (1 samples, 0.18%) + + + + + __wake_up_common_lock (1 samples, 0.18%) + + + + + __wake_up_common (1 samples, 0.18%) + + + + + ep_poll_callback (1 samples, 0.18%) + + + + + __wake_up_common_lock (1 samples, 0.18%) + + + + + __wake_up_common (1 samples, 0.18%) + + + + + ep_autoremove_wake_function (1 samples, 0.18%) + + + + + try_to_wake_up (1 samples, 0.18%) + + + + + _raw_spin_lock_irqsave (1 samples, 0.18%) + + + + + __raw_callee_save___pv_queued_spin_unlock (33 samples, 5.86%) + + __raw_c.. + + + __perf_event_task_sched_in (127 samples, 22.56%) + + __perf_event_task_sched_in + + + schedule_tail (150 samples, 26.64%) + + schedule_tail + + + finish_task_switch.isra.0 (150 samples, 26.64%) + + finish_task_switch.isra.0 + + + ret_from_fork (151 samples, 26.82%) + + ret_from_fork + + + calculate_sigpending (1 samples, 0.18%) + + + + + __raw_callee_save___pv_queued_spin_unlock (1 samples, 0.18%) + + + + + srso_alias_safe_ret (1 samples, 0.18%) + + + + + __mod_lruvec_page_state (2 samples, 0.36%) + + + + + __mod_memcg_lruvec_state (2 samples, 0.36%) + + + + + cgroup_rstat_updated (1 samples, 0.18%) + + + + + mmput (3 samples, 0.53%) + + + + + exit_mmap (3 samples, 0.53%) + + + + + unmap_vmas (3 samples, 0.53%) + + + + + unmap_page_range (3 samples, 0.53%) + + + + + page_remove_rmap (3 samples, 0.53%) + + + + + __pv_queued_spin_lock_slowpath (1 samples, 0.18%) + + + + + exit_fs (2 samples, 0.36%) + + + + + _raw_spin_lock (2 samples, 0.36%) + + + + + entry_SYSCALL_64_after_hwframe (6 samples, 1.07%) + + + + + do_syscall_64 (6 samples, 1.07%) + + + + + syscall_exit_to_user_mode (6 samples, 1.07%) + + + + + exit_to_user_mode_prepare (6 samples, 1.07%) + + + + + arch_do_signal_or_restart (6 samples, 1.07%) + + + + + get_signal (6 samples, 1.07%) + + + + + do_group_exit (6 samples, 1.07%) + + + + + do_exit (6 samples, 1.07%) + + + + + acct_process (1 samples, 0.18%) + + + + + do_acct_process (1 samples, 0.18%) + + + + + __kernel_write (1 samples, 0.18%) + + + + + ext4_buffered_write_iter (1 samples, 0.18%) + + + + + generic_perform_write (1 samples, 0.18%) + + + + + generic_write_end (1 samples, 0.18%) + + + + + __block_commit_write.constprop.0.isra.0 (1 samples, 0.18%) + + + + + rwsem_wake.isra.0 (1 samples, 0.18%) + + + + + wake_up_q (1 samples, 0.18%) + + + + + try_to_wake_up (1 samples, 0.18%) + + + + + __task_rq_lock (1 samples, 0.18%) + + + + + _raw_spin_lock (1 samples, 0.18%) + + + + + __pv_queued_spin_lock_slowpath (1 samples, 0.18%) + + + + + schedule (1 samples, 0.18%) + + + + + __schedule (1 samples, 0.18%) + + + + + update_rq_clock (1 samples, 0.18%) + + + + + down_write_killable (4 samples, 0.71%) + + + + + rwsem_down_write_slowpath (4 samples, 0.71%) + + + + + __mmap (6 samples, 1.07%) + + + + + entry_SYSCALL_64_after_hwframe (6 samples, 1.07%) + + + + + do_syscall_64 (6 samples, 1.07%) + + + + + vm_mmap_pgoff (6 samples, 1.07%) + + + + + do_mmap (1 samples, 0.18%) + + + + + get_unmapped_area (1 samples, 0.18%) + + + + + arch_get_unmapped_area_topdown (1 samples, 0.18%) + + + + + vm_unmapped_area (1 samples, 0.18%) + + + + + std::sys::unix::stack_overflow::imp::make_handler (7 samples, 1.24%) + + + + + __raw_callee_save___pv_queued_spin_unlock (14 samples, 2.49%) + + __.. + + + asm_exc_page_fault (29 samples, 5.15%) + + asm_ex.. + + + exc_page_fault (29 samples, 5.15%) + + exc_pa.. + + + do_user_addr_fault (29 samples, 5.15%) + + do_use.. + + + down_read (29 samples, 5.15%) + + down_r.. + + + rwsem_down_read_slowpath (29 samples, 5.15%) + + rwsem_.. + + + schedule_preempt_disabled (29 samples, 5.15%) + + schedu.. + + + schedule (29 samples, 5.15%) + + schedu.. + + + __schedule (29 samples, 5.15%) + + __sche.. + + + finish_task_switch.isra.0 (29 samples, 5.15%) + + finish.. + + + __perf_event_task_sched_in (29 samples, 5.15%) + + __perf.. + + + _dl_allocate_tls (1 samples, 0.18%) + + + + + __libc_calloc (1 samples, 0.18%) + + + + + _int_malloc (1 samples, 0.18%) + + + + + asm_exc_page_fault (1 samples, 0.18%) + + + + + exc_page_fault (1 samples, 0.18%) + + + + + do_user_addr_fault (1 samples, 0.18%) + + + + + up_read (1 samples, 0.18%) + + + + + rwsem_wake.isra.0 (1 samples, 0.18%) + + + + + wake_up_q (1 samples, 0.18%) + + + + + try_to_wake_up (1 samples, 0.18%) + + + + + srso_alias_return_thunk (1 samples, 0.18%) + + + + + rwsem_wake.isra.0 (1 samples, 0.18%) + + + + + wake_up_q (1 samples, 0.18%) + + + + + try_to_wake_up (1 samples, 0.18%) + + + + + _raw_spin_lock_irqsave (1 samples, 0.18%) + + + + + __pv_queued_spin_lock_slowpath (1 samples, 0.18%) + + + + + <rayon_core::registry::DefaultSpawn as rayon_core::registry::ThreadSpawn>::spawn (32 samples, 5.68%) + + <rayon_.. + + + std::thread::Builder::spawn (32 samples, 5.68%) + + std::th.. + + + std::sys::unix::thread::Thread::new (32 samples, 5.68%) + + std::sy.. + + + pthread_create@GLIBC_2.2.5 (32 samples, 5.68%) + + pthread.. + + + __mmap (2 samples, 0.36%) + + + + + entry_SYSCALL_64_after_hwframe (2 samples, 0.36%) + + + + + do_syscall_64 (2 samples, 0.36%) + + + + + vm_mmap_pgoff (2 samples, 0.36%) + + + + + do_mmap (1 samples, 0.18%) + + + + + mmap_region (1 samples, 0.18%) + + + + + perf_event_mmap (1 samples, 0.18%) + + + + + perf_iterate_sb (1 samples, 0.18%) + + + + + perf_iterate_ctx (1 samples, 0.18%) + + + + + perf_event_mmap_output (1 samples, 0.18%) + + + + + s4lib::readers::evtxreader::EvtxReader::new (33 samples, 5.86%) + + s4lib::.. + + + evtx::evtx_parser::ParserSettings::num_threads (33 samples, 5.86%) + + evtx::e.. + + + rayon_core::current_num_threads (33 samples, 5.86%) + + rayon_c.. + + + rayon_core::registry::global_registry (33 samples, 5.86%) + + rayon_c.. + + + std::sys_common::once::futex::Once::call (33 samples, 5.86%) + + std::sy.. + + + rayon_core::registry::default_global_registry (33 samples, 5.86%) + + rayon_c.. + + + rayon_core::registry::Registry::new (33 samples, 5.86%) + + rayon_c.. + + + <alloc::vec::Vec<T> as alloc::vec::spec_from_iter::SpecFromIter<T,I>>::from_iter (1 samples, 0.18%) + + + + + __rdl_alloc (1 samples, 0.18%) + + + + + __posix_memalign (1 samples, 0.18%) + + + + + _int_memalign (1 samples, 0.18%) + + + + + _int_malloc (1 samples, 0.18%) + + + + + asm_exc_page_fault (1 samples, 0.18%) + + + + + exc_page_fault (1 samples, 0.18%) + + + + + do_user_addr_fault (1 samples, 0.18%) + + + + + handle_mm_fault (1 samples, 0.18%) + + + + + s4lib::data::evtx::Evtx::from_evtxrs (1 samples, 0.18%) + + + + + alloc::raw_vec::RawVec<T,A>::reserve::do_reserve_and_handle (1 samples, 0.18%) + + + + + alloc::raw_vec::finish_grow (1 samples, 0.18%) + + + + + realloc (1 samples, 0.18%) + + + + + _int_realloc (1 samples, 0.18%) + + + + + _int_malloc (1 samples, 0.18%) + + + + + sysmalloc (1 samples, 0.18%) + + + + + asm_exc_page_fault (1 samples, 0.18%) + + + + + exc_page_fault (1 samples, 0.18%) + + + + + do_user_addr_fault (1 samples, 0.18%) + + + + + handle_mm_fault (1 samples, 0.18%) + + + + + __handle_mm_fault (1 samples, 0.18%) + + + + + __mem_cgroup_charge (1 samples, 0.18%) + + + + + charge_memcg (1 samples, 0.18%) + + + + + core::iter::adapters::flatten::and_then_or_clear (1 samples, 0.18%) + + + + + cfree@GLIBC_2.2.5 (1 samples, 0.18%) + + + + + _int_free (1 samples, 0.18%) + + + + + __madvise (1 samples, 0.18%) + + + + + entry_SYSCALL_64_after_hwframe (1 samples, 0.18%) + + + + + do_syscall_64 (1 samples, 0.18%) + + + + + __x64_sys_madvise (1 samples, 0.18%) + + + + + do_madvise.part.0 (1 samples, 0.18%) + + + + + zap_page_range (1 samples, 0.18%) + + + + + unmap_page_range (1 samples, 0.18%) + + + + + filemap_get_pages (1 samples, 0.18%) + + + + + filemap_get_read_batch (1 samples, 0.18%) + + + + + asm_exc_page_fault (1 samples, 0.18%) + + + + + std::io::Read::read_to_end (3 samples, 0.53%) + + + + + <std::process::ChildStdout as std::io::Read>::read_buf (3 samples, 0.53%) + + + + + read (3 samples, 0.53%) + + + + + entry_SYSCALL_64_after_hwframe (3 samples, 0.53%) + + + + + do_syscall_64 (3 samples, 0.53%) + + + + + ksys_read (3 samples, 0.53%) + + + + + vfs_read (3 samples, 0.53%) + + + + + new_sync_read (3 samples, 0.53%) + + + + + filemap_read (3 samples, 0.53%) + + + + + copy_page_to_iter (2 samples, 0.36%) + + + + + copy_user_enhanced_fast_string (2 samples, 0.36%) + + + + + s4lib::readers::evtxreader::EvtxReader::analyze (36 samples, 6.39%) + + s4lib::r.. + + + <evtx::evtx_parser::IterChunks<T> as core::iter::traits::iterator::Iterator>::next (34 samples, 6.04%) + + <evtx::e.. + + + __sched_yield (1 samples, 0.18%) + + + + + entry_SYSCALL_64_after_hwframe (1 samples, 0.18%) + + + + + do_syscall_64 (1 samples, 0.18%) + + + + + __x64_sys_sched_yield (1 samples, 0.18%) + + + + + schedule (1 samples, 0.18%) + + + + + __schedule (1 samples, 0.18%) + + + + + s4::exec_fileprocessor_thread (72 samples, 12.79%) + + s4::exec_fileproces.. + + + crossbeam_channel::channel::Sender<T>::send (3 samples, 0.53%) + + + + + get_futex_key (1 samples, 0.18%) + + + + + internal_get_user_pages_fast (1 samples, 0.18%) + + + + + try_grab_compound_head (1 samples, 0.18%) + + + + + mm_release (2 samples, 0.36%) + + + + + do_futex (2 samples, 0.36%) + + + + + futex_wake (2 samples, 0.36%) + + + + + do_group_exit (3 samples, 0.53%) + + + + + do_exit (3 samples, 0.53%) + + + + + exit_mm_release (1 samples, 0.18%) + + + + + futex_exit_release (1 samples, 0.18%) + + + + + exit_robust_list (1 samples, 0.18%) + + + + + syscall_exit_to_user_mode (10 samples, 1.78%) + + s.. + + + exit_to_user_mode_prepare (10 samples, 1.78%) + + e.. + + + arch_do_signal_or_restart (10 samples, 1.78%) + + a.. + + + get_signal (10 samples, 1.78%) + + g.. + + + _raw_spin_lock_irq (7 samples, 1.24%) + + + + + __pv_queued_spin_lock_slowpath (7 samples, 1.24%) + + + + + x86_pmu_enable_all (19 samples, 3.37%) + + x86.. + + + __raw_callee_save___pv_queued_spin_unlock (19 samples, 3.37%) + + __r.. + + + std::sys::unix::locks::futex_condvar::Condvar::wait (145 samples, 25.75%) + + std::sys::unix::locks::futex_condvar::Con.. + + + syscall (145 samples, 25.75%) + + syscall + + + entry_SYSCALL_64_after_hwframe (145 samples, 25.75%) + + entry_SYSCALL_64_after_hwframe + + + do_syscall_64 (145 samples, 25.75%) + + do_syscall_64 + + + __x64_sys_futex (135 samples, 23.98%) + + __x64_sys_futex + + + do_futex (135 samples, 23.98%) + + do_futex + + + futex_wait (135 samples, 23.98%) + + futex_wait + + + futex_wait_queue_me (135 samples, 23.98%) + + futex_wait_queue_me + + + schedule (135 samples, 23.98%) + + schedule + + + __schedule (135 samples, 23.98%) + + __schedule + + + finish_task_switch.isra.0 (135 samples, 23.98%) + + finish_task_switch.isra.0 + + + __perf_event_task_sched_in (135 samples, 23.98%) + + __perf_event_task_sched_in + + + rayon_core::sleep::Sleep::sleep (146 samples, 25.93%) + + rayon_core::sleep::Sleep::sleep + + + crossbeam_deque::deque::Stealer<T>::steal (1 samples, 0.18%) + + + + + rayon_core::registry::WorkerThread::find_work (2 samples, 0.36%) + + + + + <core::iter::adapters::chain::Chain<A,B> as core::iter::traits::iterator::Iterator>::try_fold (1 samples, 0.18%) + + + + + crossbeam_deque::deque::Stealer<T>::steal (1 samples, 0.18%) + + + + + crossbeam_epoch::default::with_handle (1 samples, 0.18%) + + + + + crossbeam_deque::deque::Stealer<T>::steal (1 samples, 0.18%) + + + + + std::sys::common::thread_local::fast_local::fast::Key<T>::try_initialize (1 samples, 0.18%) + + + + + crossbeam_epoch::default::default_collector (1 samples, 0.18%) + + + + + crossbeam_epoch::sync::once_lock::OnceLock<T>::initialize (1 samples, 0.18%) + + + + + schedule (1 samples, 0.18%) + + + + + __schedule (1 samples, 0.18%) + + + + + update_rq_clock (1 samples, 0.18%) + + + + + sched_clock_cpu (1 samples, 0.18%) + + + + + read_hv_sched_clock_tsc (1 samples, 0.18%) + + + + + read_hv_clock_tsc (1 samples, 0.18%) + + + + + __x64_sys_sched_yield (3 samples, 0.53%) + + + + + do_sched_yield (2 samples, 0.36%) + + + + + __sched_yield (4 samples, 0.71%) + + + + + entry_SYSCALL_64_after_hwframe (4 samples, 0.71%) + + + + + do_syscall_64 (4 samples, 0.71%) + + + + + quick_xml::writer::Writer<W>::write_event (2 samples, 0.36%) + + + + + <quick_xml::events::BytesCData as core::ops::deref::Deref>::deref (2 samples, 0.36%) + + + + + quick_xml::events::BytesDecl::new (1 samples, 0.18%) + + + + + evtx::model::xml::XmlElementBuilder::attribute_value (1 samples, 0.18%) + + + + + alloc::raw_vec::RawVec<T,A>::reserve_for_push (1 samples, 0.18%) + + + + + alloc::raw_vec::finish_grow (1 samples, 0.18%) + + + + + malloc (1 samples, 0.18%) + + + + + _int_malloc (1 samples, 0.18%) + + + + + sysmalloc (1 samples, 0.18%) + + + + + __mprotect (1 samples, 0.18%) + + + + + entry_SYSCALL_64_after_hwframe (1 samples, 0.18%) + + + + + do_syscall_64 (1 samples, 0.18%) + + + + + __x64_sys_mprotect (1 samples, 0.18%) + + + + + do_mprotect_pkey (1 samples, 0.18%) + + + + + mprotect_fixup (1 samples, 0.18%) + + + + + change_protection (1 samples, 0.18%) + + + + + evtx::binxml::assemble::create_record_model (4 samples, 0.71%) + + + + + quick_xml::writer::Writer<W>::write_event (1 samples, 0.18%) + + + + + evtx::evtx_record::EvtxRecord::into_xml (10 samples, 1.78%) + + e.. + + + evtx::binxml::assemble::parse_tokens (10 samples, 1.78%) + + e.. + + + <evtx::xml_output::XmlOutput<W> as evtx::xml_output::BinXmlOutput>::visit_open_start_element (3 samples, 0.53%) + + + + + quick_xml::events::BytesStart::push_attribute (2 samples, 0.36%) + + + + + alloc::raw_vec::RawVec<T,A>::reserve::do_reserve_and_handle (2 samples, 0.36%) + + + + + alloc::raw_vec::finish_grow (2 samples, 0.36%) + + + + + realloc (2 samples, 0.36%) + + + + + evtx::binxml::value_variant::BinXmlValue::deserialize_value_type (1 samples, 0.18%) + + + + + evtx::utils::binxml_utils::read_utf16_by_size (1 samples, 0.18%) + + + + + evtx::utils::binxml_utils::read_utf16_string (1 samples, 0.18%) + + + + + <alloc::vec::Vec<T> as alloc::vec::spec_from_iter::SpecFromIter<T,I>>::from_iter (12 samples, 2.13%) + + <.. + + + <evtx::evtx_chunk::IterChunkRecords as core::iter::traits::iterator::Iterator>::next (2 samples, 0.36%) + + + + + <evtx::binxml::deserializer::IterTokens as core::iter::traits::iterator::Iterator>::next (2 samples, 0.36%) + + + + + evtx::binxml::tokens::read_template (2 samples, 0.36%) + + + + + std::panicking::try (13 samples, 2.31%) + + s.. + + + rayon_core::join::join_context::_{{closure}} (13 samples, 2.31%) + + r.. + + + rayon::iter::plumbing::bridge_producer_consumer::helper (13 samples, 2.31%) + + r.. + + + rayon::iter::plumbing::Folder::consume_iter (13 samples, 2.31%) + + r.. + + + core::ops::function::impls::<impl core::ops::function::FnOnce<A> for &mut F>::call_once (13 samples, 2.31%) + + c.. + + + evtx::evtx_chunk::EvtxChunkData::parse (1 samples, 0.18%) + + + + + evtx::evtx_chunk::EvtxChunk::new (1 samples, 0.18%) + + + + + evtx::template_cache::TemplateCache::populate (1 samples, 0.18%) + + + + + evtx::binxml::tokens::read_template_definition (1 samples, 0.18%) + + + + + evtx::binxml::deserializer::BinXmlDeserializer::read_binxml_fragment (1 samples, 0.18%) + + + + + alloc::raw_vec::RawVec<T,A>::reserve_for_push (1 samples, 0.18%) + + + + + alloc::raw_vec::finish_grow (1 samples, 0.18%) + + + + + realloc (1 samples, 0.18%) + + + + + _int_realloc (1 samples, 0.18%) + + + + + asm_exc_page_fault (1 samples, 0.18%) + + + + + exc_page_fault (1 samples, 0.18%) + + + + + do_user_addr_fault (1 samples, 0.18%) + + + + + handle_mm_fault (1 samples, 0.18%) + + + + + __handle_mm_fault (1 samples, 0.18%) + + + + + lru_cache_add (1 samples, 0.18%) + + + + + __pagevec_lru_add (1 samples, 0.18%) + + + + + release_pages (1 samples, 0.18%) + + + + + evtx::model::xml::XmlElementBuilder::finish (1 samples, 0.18%) + + + + + evtx::binxml::assemble::create_record_model (3 samples, 0.53%) + + + + + cfree@GLIBC_2.2.5 (2 samples, 0.36%) + + + + + _int_free (2 samples, 0.36%) + + + + + unlink_chunk.constprop.0 (2 samples, 0.36%) + + + + + quick_xml::events::BytesStart::push_attribute (1 samples, 0.18%) + + + + + alloc::raw_vec::RawVec<T,A>::reserve::do_reserve_and_handle (1 samples, 0.18%) + + + + + alloc::raw_vec::finish_grow (1 samples, 0.18%) + + + + + realloc (1 samples, 0.18%) + + + + + _int_realloc (1 samples, 0.18%) + + + + + _int_malloc (1 samples, 0.18%) + + + + + <evtx::xml_output::XmlOutput<W> as evtx::xml_output::BinXmlOutput>::visit_open_start_element (3 samples, 0.53%) + + + + + <quick_xml::events::attributes::Attribute as core::convert::From<(&str,&str)>>::from (2 samples, 0.36%) + + + + + evtx::evtx_record::EvtxRecord::into_xml (10 samples, 1.78%) + + e.. + + + evtx::binxml::assemble::parse_tokens (10 samples, 1.78%) + + e.. + + + evtx::binxml::tokens::read_template (1 samples, 0.18%) + + + + + evtx::binxml::value_variant::BinXmlValue::deserialize_value_type (1 samples, 0.18%) + + + + + evtx::utils::binxml_utils::read_utf16_by_size (1 samples, 0.18%) + + + + + evtx::utils::binxml_utils::read_utf16_string (1 samples, 0.18%) + + + + + <alloc::string::String as core::iter::traits::collect::FromIterator<char>>::from_iter (1 samples, 0.18%) + + + + + <core::iter::adapters::map::Map<I,F> as core::iter::traits::iterator::Iterator>::try_fold (1 samples, 0.18%) + + + + + rayon_core::registry::in_worker (13 samples, 2.31%) + + r.. + + + rayon_core::join::join_context::_{{closure}} (13 samples, 2.31%) + + r.. + + + rayon::iter::plumbing::bridge_producer_consumer::helper (13 samples, 2.31%) + + r.. + + + rayon::iter::plumbing::Folder::consume_iter (13 samples, 2.31%) + + r.. + + + core::ops::function::impls::<impl core::ops::function::FnOnce<A> for &mut F>::call_once (13 samples, 2.31%) + + c.. + + + <alloc::vec::Vec<T> as alloc::vec::spec_from_iter::SpecFromIter<T,I>>::from_iter (12 samples, 2.13%) + + <.. + + + <evtx::evtx_chunk::IterChunkRecords as core::iter::traits::iterator::Iterator>::next (2 samples, 0.36%) + + + + + <evtx::binxml::deserializer::IterTokens as core::iter::traits::iterator::Iterator>::next (2 samples, 0.36%) + + + + + evtx::binxml::tokens::read_template (2 samples, 0.36%) + + + + + evtx::binxml::value_variant::BinXmlValue::deserialize_value_type (2 samples, 0.36%) + + + + + evtx::binxml::deserializer::BinXmlDeserializer::read_binxml_fragment (2 samples, 0.36%) + + + + + <evtx::binxml::deserializer::IterTokens as core::iter::traits::iterator::Iterator>::next (2 samples, 0.36%) + + + + + evtx::binxml::assemble::expand_templates (1 samples, 0.18%) + + + + + evtx::binxml::assemble::_expand_templates (1 samples, 0.18%) + + + + + evtx::binxml::assemble::expand_template (1 samples, 0.18%) + + + + + evtx::binxml::assemble::_expand_templates (1 samples, 0.18%) + + + + + evtx::binxml::assemble::_expand_templates (1 samples, 0.18%) + + + + + evtx::binxml::assemble::expand_template (1 samples, 0.18%) + + + + + evtx::binxml::assemble::_expand_templates (1 samples, 0.18%) + + + + + malloc (1 samples, 0.18%) + + + + + _int_malloc (1 samples, 0.18%) + + + + + sysmalloc (1 samples, 0.18%) + + + + + __mprotect (1 samples, 0.18%) + + + + + entry_SYSCALL_64_after_hwframe (1 samples, 0.18%) + + + + + do_syscall_64 (1 samples, 0.18%) + + + + + __x64_sys_mprotect (1 samples, 0.18%) + + + + + do_mprotect_pkey (1 samples, 0.18%) + + + + + mprotect_fixup (1 samples, 0.18%) + + + + + perf_event_mmap (1 samples, 0.18%) + + + + + perf_iterate_sb (1 samples, 0.18%) + + + + + perf_iterate_ctx (1 samples, 0.18%) + + + + + perf_event_mmap_output (1 samples, 0.18%) + + + + + perf_output_copy (1 samples, 0.18%) + + + + + memcpy_erms (1 samples, 0.18%) + + + + + evtx::binxml::assemble::create_record_model (3 samples, 0.53%) + + + + + quick_xml::writer::Indentation::current (1 samples, 0.18%) + + + + + alloc::raw_vec::RawVec<T,A>::reserve::do_reserve_and_handle (1 samples, 0.18%) + + + + + alloc::raw_vec::finish_grow (1 samples, 0.18%) + + + + + realloc (1 samples, 0.18%) + + + + + evtx::evtx_record::EvtxRecord::into_xml (7 samples, 1.24%) + + + + + evtx::binxml::assemble::parse_tokens (7 samples, 1.24%) + + + + + <evtx::xml_output::XmlOutput<W> as evtx::xml_output::BinXmlOutput>::visit_open_start_element (3 samples, 0.53%) + + + + + quick_xml::writer::Writer<W>::write_event (3 samples, 0.53%) + + + + + rayon_core::registry::WorkerThread::wait_until_cold (187 samples, 33.21%) + + rayon_core::registry::WorkerThread::wait_until_cold + + + <rayon_core::job::StackJob<L,F,R> as rayon_core::job::Job>::execute (34 samples, 6.04%) + + <rayon_c.. + + + rayon::iter::plumbing::bridge_producer_consumer::helper (21 samples, 3.73%) + + rayo.. + + + rayon::iter::plumbing::Folder::consume_iter (8 samples, 1.42%) + + + + + core::ops::function::impls::<impl core::ops::function::FnOnce<A> for &mut F>::call_once (8 samples, 1.42%) + + + + + <alloc::vec::Vec<T> as alloc::vec::spec_from_iter::SpecFromIter<T,I>>::from_iter (8 samples, 1.42%) + + + + + <evtx::evtx_chunk::IterChunkRecords as core::iter::traits::iterator::Iterator>::next (1 samples, 0.18%) + + + + + <evtx::binxml::deserializer::IterTokens as core::iter::traits::iterator::Iterator>::next (1 samples, 0.18%) + + + + + evtx::binxml::tokens::read_template (1 samples, 0.18%) + + + + + evtx::binxml::value_variant::BinXmlValue::deserialize_value_type (1 samples, 0.18%) + + + + + evtx::binxml::deserializer::BinXmlDeserializer::read_binxml_fragment (1 samples, 0.18%) + + + + + <evtx::binxml::deserializer::IterTokens as core::iter::traits::iterator::Iterator>::next (1 samples, 0.18%) + + + + + evtx::binxml::tokens::read_template (1 samples, 0.18%) + + + + + evtx::binxml::value_variant::BinXmlValue::deserialize_value_type (1 samples, 0.18%) + + + + + evtx::utils::binxml_utils::read_utf16_by_size (1 samples, 0.18%) + + + + + evtx::utils::binxml_utils::read_utf16_string (1 samples, 0.18%) + + + + + <alloc::string::String as core::iter::traits::collect::FromIterator<char>>::from_iter (1 samples, 0.18%) + + + + + <core::iter::adapters::map::Map<I,F> as core::iter::traits::iterator::Iterator>::try_fold (1 samples, 0.18%) + + + + + alloc::raw_vec::RawVec<T,A>::reserve_for_push (1 samples, 0.18%) + + + + + alloc::raw_vec::finish_grow (1 samples, 0.18%) + + + + + realloc (1 samples, 0.18%) + + + + + std::sys_common::backtrace::__rust_begin_short_backtrace (260 samples, 46.18%) + + std::sys_common::backtrace::__rust_begin_short_backtrace + + + rayon_core::registry::ThreadBuilder::run (188 samples, 33.39%) + + rayon_core::registry::ThreadBuilder::run + + + <rayon_core::registry::WorkerThread as core::convert::From<rayon_core::registry::ThreadBuilder>>::from (1 samples, 0.18%) + + + + + malloc (1 samples, 0.18%) + + + + + _int_malloc (1 samples, 0.18%) + + + + + asm_exc_page_fault (1 samples, 0.18%) + + + + + exc_page_fault (1 samples, 0.18%) + + + + + do_user_addr_fault (1 samples, 0.18%) + + + + + down_read (1 samples, 0.18%) + + + + + rwsem_down_read_slowpath (1 samples, 0.18%) + + + + + schedule_preempt_disabled (1 samples, 0.18%) + + + + + schedule (1 samples, 0.18%) + + + + + __schedule (1 samples, 0.18%) + + + + + dequeue_task_fair (1 samples, 0.18%) + + + + + asm_exc_page_fault (1 samples, 0.18%) + + + + + exc_page_fault (1 samples, 0.18%) + + + + + do_user_addr_fault (1 samples, 0.18%) + + + + + handle_mm_fault (1 samples, 0.18%) + + + + + __handle_mm_fault (1 samples, 0.18%) + + + + + __alloc_pages (1 samples, 0.18%) + + + + + get_page_from_freelist (1 samples, 0.18%) + + + + + kernel_init_free_pages.part.0 (1 samples, 0.18%) + + + + + clear_page_erms (1 samples, 0.18%) + + + + + rwsem_wake.isra.0 (1 samples, 0.18%) + + + + + wake_up_q (1 samples, 0.18%) + + + + + try_to_wake_up (1 samples, 0.18%) + + + + + _raw_spin_lock_irqsave (1 samples, 0.18%) + + + + + __pv_queued_spin_lock_slowpath (1 samples, 0.18%) + + + + + mprotect_fixup (1 samples, 0.18%) + + + + + __split_vma (1 samples, 0.18%) + + + + + __vma_adjust (1 samples, 0.18%) + + + + + __mprotect (3 samples, 0.53%) + + + + + entry_SYSCALL_64_after_hwframe (3 samples, 0.53%) + + + + + do_syscall_64 (3 samples, 0.53%) + + + + + __x64_sys_mprotect (3 samples, 0.53%) + + + + + do_mprotect_pkey (3 samples, 0.53%) + + + + + down_write_killable (1 samples, 0.18%) + + + + + rwsem_down_write_slowpath (1 samples, 0.18%) + + + + + schedule (14 samples, 2.49%) + + sc.. + + + __schedule (14 samples, 2.49%) + + __.. + + + finish_task_switch.isra.0 (14 samples, 2.49%) + + fi.. + + + __perf_event_task_sched_in (14 samples, 2.49%) + + __.. + + + std::sys::unix::thread::Thread::new::thread_start (286 samples, 50.80%) + + std::sys::unix::thread::Thread::new::thread_start + + + core::ops::function::FnOnce::call_once{{vtable.shim}} (279 samples, 49.56%) + + core::ops::function::FnOnce::call_once{{vtable.shim}} + + + std::sys::unix::thread::guard::current (19 samples, 3.37%) + + std.. + + + pthread_getattr_np@@GLIBC_2.32 (19 samples, 3.37%) + + pth.. + + + malloc (19 samples, 3.37%) + + mal.. + + + tcache_init.part.0 (19 samples, 3.37%) + + tca.. + + + arena_get2.part.0 (19 samples, 3.37%) + + are.. + + + alloc_new_heap (19 samples, 3.37%) + + all.. + + + __mmap (15 samples, 2.66%) + + __.. + + + entry_SYSCALL_64_after_hwframe (15 samples, 2.66%) + + en.. + + + do_syscall_64 (15 samples, 2.66%) + + do.. + + + vm_mmap_pgoff (15 samples, 2.66%) + + vm.. + + + down_write_killable (15 samples, 2.66%) + + do.. + + + rwsem_down_write_slowpath (15 samples, 2.66%) + + rw.. + + + osq_lock (1 samples, 0.18%) + + + + + entry_SYSCALL_64_after_hwframe (1 samples, 0.18%) + + + + + do_syscall_64 (1 samples, 0.18%) + + + + + __x64_sys_exit (1 samples, 0.18%) + + + + + do_exit (1 samples, 0.18%) + + + + + acct_collect (1 samples, 0.18%) + + + + + _raw_spin_lock_irq (1 samples, 0.18%) + + + + + __pv_queued_spin_lock_slowpath (1 samples, 0.18%) + + + + + start_thread (288 samples, 51.15%) + + start_thread + + + entry_SYSCALL_64 (1 samples, 0.18%) + + + + + memset_erms (1 samples, 0.18%) + + + + + kmem_cache_alloc (2 samples, 0.36%) + + + + + perf_event_init_task (3 samples, 0.53%) + + + + + inherit_task_group.isra.0 (3 samples, 0.53%) + + + + + inherit_event.constprop.0 (3 samples, 0.53%) + + + + + perf_event_alloc (3 samples, 0.53%) + + + + + memset_erms (1 samples, 0.18%) + + + + + entry_SYSCALL_64_after_hwframe (5 samples, 0.89%) + + + + + do_syscall_64 (5 samples, 0.89%) + + + + + __do_sys_clone3 (5 samples, 0.89%) + + + + + kernel_clone (5 samples, 0.89%) + + + + + copy_process (5 samples, 0.89%) + + + + + alloc_pid (1 samples, 0.18%) + + + + + idr_alloc_cyclic (1 samples, 0.18%) + + + + + idr_alloc_u32 (1 samples, 0.18%) + + + + + idr_get_free (1 samples, 0.18%) + + + + + clone3 (294 samples, 52.22%) + + clone3 + + + asm_exc_page_fault (1 samples, 0.18%) + + + + + exc_page_fault (1 samples, 0.18%) + + + + + do_user_addr_fault (1 samples, 0.18%) + + + + + up_read (1 samples, 0.18%) + + + + + rwsem_wake.isra.0 (1 samples, 0.18%) + + + + + wake_up_q (1 samples, 0.18%) + + + + + try_to_wake_up (1 samples, 0.18%) + + + + + _raw_spin_lock_irqsave (1 samples, 0.18%) + + + + + __pv_queued_spin_lock_slowpath (1 samples, 0.18%) + + + + + __mem_cgroup_charge (1 samples, 0.18%) + + + + + charge_memcg (1 samples, 0.18%) + + + + + __alloc_pages (1 samples, 0.18%) + + + + + get_page_from_freelist (1 samples, 0.18%) + + + + + kernel_init_free_pages.part.0 (1 samples, 0.18%) + + + + + clear_page_erms (1 samples, 0.18%) + + + + + handle_mm_fault (3 samples, 0.53%) + + + + + __handle_mm_fault (3 samples, 0.53%) + + + + + find_vma (1 samples, 0.18%) + + + + + __perf_event_task_sched_in (22 samples, 3.91%) + + __pe.. + + + asm_exc_page_fault (36 samples, 6.39%) + + asm_exc_.. + + + exc_page_fault (36 samples, 6.39%) + + exc_page.. + + + do_user_addr_fault (36 samples, 6.39%) + + do_user_.. + + + down_read (32 samples, 5.68%) + + down_re.. + + + rwsem_down_read_slowpath (32 samples, 5.68%) + + rwsem_d.. + + + schedule_preempt_disabled (32 samples, 5.68%) + + schedul.. + + + schedule (32 samples, 5.68%) + + schedule + + + __schedule (32 samples, 5.68%) + + __sched.. + + + finish_task_switch.isra.0 (32 samples, 5.68%) + + finish_.. + + + __irqentry_text_end (1 samples, 0.18%) + + + + + all (563 samples, 100%) + + + + + Microsoft-Windo (489 samples, 86.86%) + + Microsoft-Windo + + + [unknown] (1 samples, 0.18%) + + + + + s4lib::readers::filedecompressor::decompress_to_ntf (1 samples, 0.18%) + + + + + diff --git a/releases/0.7.75/flamegraph-help.svg b/releases/0.7.75/flamegraph-help.svg new file mode 100644 index 00000000..08bc6bd0 --- /dev/null +++ b/releases/0.7.75/flamegraph-help.svg @@ -0,0 +1,1287 @@ + + + + + + + + + + + + + + + Flame Graph: super_speedy_syslog_searcher 0.7.75; git: d799548f; -freq 9999; created 20240707T231048-0700; flamegraph-flamegraph 0.6.5; rustc 1.70.0
; command: s4 --help + + Reset Zoom + Search + + + + __x64_sys_exit_group (1 samples, 3.12%) + + __x.. + + + do_group_exit (1 samples, 3.12%) + + do_.. + + + do_exit (1 samples, 3.12%) + + do_.. + + + mmput (1 samples, 3.12%) + + mmp.. + + + exit_mmap (1 samples, 3.12%) + + exi.. + + + tlb_finish_mmu (1 samples, 3.12%) + + tlb.. + + + release_pages (1 samples, 3.12%) + + rel.. + + + free_unref_page_list (1 samples, 3.12%) + + fre.. + + + free_unref_page_commit.constprop.0 (1 samples, 3.12%) + + fre.. + + + __list_add_valid (1 samples, 3.12%) + + __l.. + + + vm_mmap_pgoff (1 samples, 3.12%) + + vm_.. + + + do_mmap (1 samples, 3.12%) + + do_.. + + + mmap_region (1 samples, 3.12%) + + mma.. + + + perf_event_mmap (1 samples, 3.12%) + + per.. + + + perf_iterate_sb (1 samples, 3.12%) + + per.. + + + perf_iterate_ctx (1 samples, 3.12%) + + per.. + + + perf_event_mmap_output (1 samples, 3.12%) + + per.. + + + memcpy_erms (1 samples, 3.12%) + + mem.. + + + entry_SYSCALL_64_after_hwframe (3 samples, 9.38%) + + entry_SYSCALL.. + + + do_syscall_64 (3 samples, 9.38%) + + do_syscall_64 + + + __x64_sys_execve (2 samples, 6.25%) + + __x64_sy.. + + + do_execveat_common.isra.0 (2 samples, 6.25%) + + do_execv.. + + + bprm_execve (2 samples, 6.25%) + + bprm_exe.. + + + load_elf_binary (2 samples, 6.25%) + + load_elf.. + + + elf_map (1 samples, 3.12%) + + elf.. + + + vm_mmap_pgoff (1 samples, 3.12%) + + vm_.. + + + do_mmap (1 samples, 3.12%) + + do_.. + + + mmap_region (1 samples, 3.12%) + + mma.. + + + vma_set_page_prot (1 samples, 3.12%) + + vma.. + + + init_tls (1 samples, 3.12%) + + ini.. + + + _dl_allocate_tls_storage (1 samples, 3.12%) + + _dl.. + + + __minimal_malloc (1 samples, 3.12%) + + __m.. + + + mmap64 (1 samples, 3.12%) + + mma.. + + + entry_SYSCALL_64_after_hwframe (1 samples, 3.12%) + + ent.. + + + do_syscall_64 (1 samples, 3.12%) + + do_.. + + + vm_mmap_pgoff (1 samples, 3.12%) + + vm_.. + + + do_mmap (1 samples, 3.12%) + + do_.. + + + mmap_region (1 samples, 3.12%) + + mma.. + + + perf_event_mmap (1 samples, 3.12%) + + per.. + + + access (1 samples, 3.12%) + + acc.. + + + entry_SYSCALL_64_after_hwframe (1 samples, 3.12%) + + ent.. + + + do_syscall_64 (1 samples, 3.12%) + + do_.. + + + do_faccessat (1 samples, 3.12%) + + do_.. + + + prepare_creds (1 samples, 3.12%) + + pre.. + + + get_ucounts (1 samples, 3.12%) + + get.. + + + finish_fault (1 samples, 3.12%) + + fin.. + + + do_set_pte (1 samples, 3.12%) + + do_.. + + + _dl_relocate_object (3 samples, 9.38%) + + _dl_relocate_.. + + + asm_exc_page_fault (3 samples, 9.38%) + + asm_exc_page_.. + + + exc_page_fault (3 samples, 9.38%) + + exc_page_fault + + + do_user_addr_fault (3 samples, 9.38%) + + do_user_addr_.. + + + handle_mm_fault (3 samples, 9.38%) + + handle_mm_fau.. + + + __handle_mm_fault (3 samples, 9.38%) + + __handle_mm_f.. + + + copy_page (2 samples, 6.25%) + + copy_page + + + _dl_map_object_deps (1 samples, 3.12%) + + _dl.. + + + _dl_catch_exception (1 samples, 3.12%) + + _dl.. + + + openaux (1 samples, 3.12%) + + ope.. + + + _dl_map_object (1 samples, 3.12%) + + _dl.. + + + _dl_map_object_from_fd (1 samples, 3.12%) + + _dl.. + + + memset (1 samples, 3.12%) + + mem.. + + + asm_exc_page_fault (1 samples, 3.12%) + + asm.. + + + exc_page_fault (1 samples, 3.12%) + + exc.. + + + do_user_addr_fault (1 samples, 3.12%) + + do_.. + + + handle_mm_fault (1 samples, 3.12%) + + han.. + + + __handle_mm_fault (1 samples, 3.12%) + + __h.. + + + __anon_vma_prepare (1 samples, 3.12%) + + __a.. + + + down_write (1 samples, 3.12%) + + dow.. + + + _dl_sysdep_start (7 samples, 21.88%) + + _dl_sysdep_start + + + dl_main (7 samples, 21.88%) + + dl_main + + + __libc_early_init (1 samples, 3.12%) + + __l.. + + + __ctype_init (1 samples, 3.12%) + + __c.. + + + asm_exc_page_fault (1 samples, 3.12%) + + asm.. + + + exc_page_fault (1 samples, 3.12%) + + exc.. + + + do_user_addr_fault (1 samples, 3.12%) + + do_.. + + + handle_mm_fault (1 samples, 3.12%) + + han.. + + + __handle_mm_fault (1 samples, 3.12%) + + __h.. + + + filemap_map_pages (1 samples, 3.12%) + + fil.. + + + next_uptodate_page (1 samples, 3.12%) + + nex.. + + + _dl_start (8 samples, 25.00%) + + _dl_start + + + clap_builder::builder::command::Command::get_matches_from (1 samples, 3.12%) + + cla.. + + + clap_builder::builder::command::Command::_do_parse (1 samples, 3.12%) + + cla.. + + + clap_builder::parser::parser::Parser::get_matches_with (1 samples, 3.12%) + + cla.. + + + clap_builder::parser::parser::Parser::react (1 samples, 3.12%) + + cla.. + + + clap_builder::output::help::write_help (1 samples, 3.12%) + + cla.. + + + clap_builder::output::help_template::HelpTemplate::write_templated_help (1 samples, 3.12%) + + cla.. + + + clap_builder::output::help_template::HelpTemplate::write_all_args (1 samples, 3.12%) + + cla.. + + + clap_builder::output::help_template::HelpTemplate::write_args (1 samples, 3.12%) + + cla.. + + + clap_builder::output::help_template::HelpTemplate::spec_vals (1 samples, 3.12%) + + cla.. + + + <alloc::vec::Vec<T> as alloc::vec::spec_from_iter::SpecFromIter<T,I>>::from_iter (1 samples, 3.12%) + + <al.. + + + std::rt::lang_start::_{{closure}} (2 samples, 6.25%) + + std::rt:.. + + + std::sys_common::backtrace::__rust_begin_short_backtrace (2 samples, 6.25%) + + std::sys.. + + + s4::main (2 samples, 6.25%) + + s4::main + + + <s4::CLI_Args as clap_builder::derive::Args>::augment_args (1 samples, 3.12%) + + <s4.. + + + <clap_builder::builder::styled_str::StyledStr as core::convert::From<&str>>::from (1 samples, 3.12%) + + <cl.. + + + clap_builder::builder::styled_str::StyledStr::none (1 samples, 3.12%) + + cla.. + + + alloc::raw_vec::RawVec<T,A>::reserve::do_reserve_and_handle (1 samples, 3.12%) + + all.. + + + alloc::raw_vec::finish_grow (1 samples, 3.12%) + + all.. + + + asm_exc_page_fault (1 samples, 3.12%) + + asm.. + + + exc_page_fault (1 samples, 3.12%) + + exc.. + + + do_user_addr_fault (1 samples, 3.12%) + + do_.. + + + handle_mm_fault (1 samples, 3.12%) + + han.. + + + __handle_mm_fault (1 samples, 3.12%) + + __h.. + + + filemap_map_pages (1 samples, 3.12%) + + fil.. + + + xas_find (1 samples, 3.12%) + + xas.. + + + xas_load (1 samples, 3.12%) + + xas.. + + + _start (11 samples, 34.38%) + + _start + + + __libc_start_main@@GLIBC_2.34 (3 samples, 9.38%) + + __libc_start_.. + + + __libc_start_call_main (3 samples, 9.38%) + + __libc_start_.. + + + main (3 samples, 9.38%) + + main + + + std::rt::lang_start_internal (3 samples, 9.38%) + + std::rt::lang.. + + + pthread_getattr_np@@GLIBC_2.32 (1 samples, 3.12%) + + pth.. + + + fopen@@GLIBC_2.2.5 (1 samples, 3.12%) + + fop.. + + + malloc (1 samples, 3.12%) + + mal.. + + + tcache_init.part.0 (1 samples, 3.12%) + + tca.. + + + _int_malloc (1 samples, 3.12%) + + _in.. + + + sysmalloc (1 samples, 3.12%) + + sys.. + + + asm_exc_page_fault (1 samples, 3.12%) + + asm.. + + + exc_page_fault (1 samples, 3.12%) + + exc.. + + + do_user_addr_fault (1 samples, 3.12%) + + do_.. + + + handle_mm_fault (1 samples, 3.12%) + + han.. + + + __handle_mm_fault (1 samples, 3.12%) + + __h.. + + + __alloc_pages (1 samples, 3.12%) + + __a.. + + + get_page_from_freelist (1 samples, 3.12%) + + get.. + + + kernel_init_free_pages.part.0 (1 samples, 3.12%) + + ker.. + + + clear_page_erms (1 samples, 3.12%) + + cle.. + + + s4 (15 samples, 46.88%) + + s4 + + + [[heap]] (1 samples, 3.12%) + + [[h.. + + + __run_exit_handlers (1 samples, 3.12%) + + __r.. + + + [libgcc_s.so.1] (1 samples, 3.12%) + + [li.. + + + asm_exc_page_fault (1 samples, 3.12%) + + asm.. + + + irqentry_exit_to_user_mode (1 samples, 3.12%) + + irq.. + + + amd_clear_divider (1 samples, 3.12%) + + amd.. + + + x86_pmu_enable_all (16 samples, 50.00%) + + x86_pmu_enable_all + + + all (32 samples, 100%) + + + + + perf-exec (17 samples, 53.12%) + + perf-exec + + + entry_SYSCALL_64_after_hwframe (17 samples, 53.12%) + + entry_SYSCALL_64_after_hwframe + + + do_syscall_64 (17 samples, 53.12%) + + do_syscall_64 + + + __x64_sys_execve (17 samples, 53.12%) + + __x64_sys_execve + + + do_execveat_common.isra.0 (17 samples, 53.12%) + + do_execveat_common.isra.0 + + + bprm_execve (17 samples, 53.12%) + + bprm_execve + + + load_elf_binary (17 samples, 53.12%) + + load_elf_binary + + + begin_new_exec (17 samples, 53.12%) + + begin_new_exec + + + perf_event_exec (17 samples, 53.12%) + + perf_event_exec + + + asm_sysvec_irq_work (1 samples, 3.12%) + + asm.. + + + sysvec_irq_work (1 samples, 3.12%) + + sys.. + + + __sysvec_irq_work (1 samples, 3.12%) + + __s.. + + + irq_work_run_list (1 samples, 3.12%) + + irq.. + + + __wake_up_common_lock (1 samples, 3.12%) + + __w.. + + + __wake_up_common (1 samples, 3.12%) + + __w.. + + + autoremove_wake_function (1 samples, 3.12%) + + aut.. + + + try_to_wake_up (1 samples, 3.12%) + + try.. + + + ttwu_queue_wakelist (1 samples, 3.12%) + + ttw.. + + + sched_clock_cpu (1 samples, 3.12%) + + sch.. + + + read_hv_sched_clock_tsc (1 samples, 3.12%) + + rea.. + + + read_hv_clock_tsc (1 samples, 3.12%) + + rea.. + + + diff --git a/releases/0.7.75/flamegraph-journal-bz2.svg b/releases/0.7.75/flamegraph-journal-bz2.svg new file mode 100644 index 00000000..1a21fe1b --- /dev/null +++ b/releases/0.7.75/flamegraph-journal-bz2.svg @@ -0,0 +1,2442 @@ + + + + + + + + + + + + + + + Flame Graph: super_speedy_syslog_searcher 0.7.75; git: d799548f; -freq 8000; created 20240707T231057-0700; flamegraph-flamegraph 0.6.5; rustc 1.70.0
; command: s4 ./logs/programs/journal/RHE_91_system.journal.bz2 + + Reset Zoom + Search + + + + syscall_return_via_sysret (1 samples, 0.28%) + + + + + ret_from_fork (22 samples, 6.15%) + + ret_from.. + + + schedule_tail (22 samples, 6.15%) + + schedule.. + + + finish_task_switch.isra.0 (22 samples, 6.15%) + + finish_t.. + + + __perf_event_task_sched_in (22 samples, 6.15%) + + __perf_e.. + + + __raw_callee_save___pv_queued_spin_unlock (22 samples, 6.15%) + + __raw_ca.. + + + truncate_cleanup_page (1 samples, 0.28%) + + + + + try_to_free_buffers (1 samples, 0.28%) + + + + + kmem_cache_free.part.0 (1 samples, 0.28%) + + + + + __slab_free.constprop.0 (1 samples, 0.28%) + + + + + find_lock_entries (1 samples, 0.28%) + + + + + task_work_run (4 samples, 1.12%) + + + + + __fput (4 samples, 1.12%) + + + + + dput (4 samples, 1.12%) + + + + + __dentry_kill (4 samples, 1.12%) + + + + + evict (4 samples, 1.12%) + + + + + ext4_evict_inode (4 samples, 1.12%) + + + + + truncate_inode_pages_range (4 samples, 1.12%) + + + + + delete_from_page_cache_batch (2 samples, 0.56%) + + + + + unaccount_page_cache_page (2 samples, 0.56%) + + + + + page_mapped (2 samples, 0.56%) + + + + + unmap_vmas (1 samples, 0.28%) + + + + + unmap_page_range (1 samples, 0.28%) + + + + + page_remove_rmap (1 samples, 0.28%) + + + + + __mod_lruvec_page_state (1 samples, 0.28%) + + + + + __mod_memcg_lruvec_state (1 samples, 0.28%) + + + + + cgroup_rstat_updated (1 samples, 0.28%) + + + + + mmput (2 samples, 0.56%) + + + + + exit_mmap (2 samples, 0.56%) + + + + + free_pgtables (1 samples, 0.28%) + + + + + unlink_anon_vmas (1 samples, 0.28%) + + + + + kmem_cache_free.part.0 (1 samples, 0.28%) + + + + + __slab_free.constprop.0 (1 samples, 0.28%) + + + + + __x64_sys_exit_group (7 samples, 1.96%) + + _.. + + + do_group_exit (7 samples, 1.96%) + + d.. + + + do_exit (7 samples, 1.96%) + + d.. + + + mm_update_next_owner (1 samples, 0.28%) + + + + + setup_arg_pages (1 samples, 0.28%) + + + + + shift_arg_pages (1 samples, 0.28%) + + + + + __vma_adjust (1 samples, 0.28%) + + + + + anon_vma_interval_tree_remove (1 samples, 0.28%) + + + + + entry_SYSCALL_64_after_hwframe (9 samples, 2.51%) + + en.. + + + do_syscall_64 (9 samples, 2.51%) + + do.. + + + __x64_sys_execve (2 samples, 0.56%) + + + + + do_execveat_common.isra.0 (2 samples, 0.56%) + + + + + bprm_execve (2 samples, 0.56%) + + + + + load_elf_binary (2 samples, 0.56%) + + + + + elf_map (1 samples, 0.28%) + + + + + __vm_munmap (1 samples, 0.28%) + + + + + __do_munmap (1 samples, 0.28%) + + + + + __split_vma (1 samples, 0.28%) + + + + + __vma_adjust (1 samples, 0.28%) + + + + + vma_interval_tree_insert (1 samples, 0.28%) + + + + + __sysconf (1 samples, 0.28%) + + + + + clone3 (2 samples, 0.56%) + + + + + start_thread (2 samples, 0.56%) + + + + + std::sys::unix::thread::Thread::new::thread_start (2 samples, 0.56%) + + + + + std::sys::unix::stack_overflow::imp::make_handler (2 samples, 0.56%) + + + + + __mmap (1 samples, 0.28%) + + + + + entry_SYSCALL_64_after_hwframe (1 samples, 0.28%) + + + + + do_syscall_64 (1 samples, 0.28%) + + + + + vm_mmap_pgoff (1 samples, 0.28%) + + + + + do_mmap (1 samples, 0.28%) + + + + + get_unmapped_area (1 samples, 0.28%) + + + + + arch_get_unmapped_area_topdown (1 samples, 0.28%) + + + + + get_mmap_base (1 samples, 0.28%) + + + + + asm_exc_page_fault (1 samples, 0.28%) + + + + + exc_page_fault (1 samples, 0.28%) + + + + + do_user_addr_fault (1 samples, 0.28%) + + + + + handle_mm_fault (1 samples, 0.28%) + + + + + __handle_mm_fault (1 samples, 0.28%) + + + + + filemap_map_pages (1 samples, 0.28%) + + + + + do_set_pte (1 samples, 0.28%) + + + + + page_add_file_rmap (1 samples, 0.28%) + + + + + __mod_lruvec_page_state (1 samples, 0.28%) + + + + + __mod_lruvec_state (1 samples, 0.28%) + + + + + __mod_node_page_state (1 samples, 0.28%) + + + + + _dl_relocate_object (2 samples, 0.56%) + + + + + _dl_map_object_deps (1 samples, 0.28%) + + + + + _dl_start (4 samples, 1.12%) + + + + + _dl_sysdep_start (4 samples, 1.12%) + + + + + dl_main (4 samples, 1.12%) + + + + + __libc_early_init (1 samples, 0.28%) + + + + + asm_exc_page_fault (1 samples, 0.28%) + + + + + exc_page_fault (1 samples, 0.28%) + + + + + do_user_addr_fault (1 samples, 0.28%) + + + + + handle_mm_fault (1 samples, 0.28%) + + + + + __handle_mm_fault (1 samples, 0.28%) + + + + + filemap_map_pages (1 samples, 0.28%) + + + + + next_uptodate_page (1 samples, 0.28%) + + + + + __memrchr_evex (1 samples, 0.28%) + + + + + syscall_return_via_sysret (1 samples, 0.28%) + + + + + exit_to_user_mode_prepare (1 samples, 0.28%) + + + + + syscall_exit_to_user_mode (2 samples, 0.56%) + + + + + write_null (1 samples, 0.28%) + + + + + <std::io::stdio::Stdout as std::io::Write>::write (6 samples, 1.68%) + + + + + <&std::io::stdio::Stdout as std::io::Write>::write (6 samples, 1.68%) + + + + + <std::io::stdio::StdoutLock as std::io::Write>::write (6 samples, 1.68%) + + + + + __GI___libc_write (5 samples, 1.40%) + + + + + entry_SYSCALL_64_after_hwframe (4 samples, 1.12%) + + + + + do_syscall_64 (4 samples, 1.12%) + + + + + ksys_write (2 samples, 0.56%) + + + + + vfs_write (2 samples, 0.56%) + + + + + std::io::Write::write_all (7 samples, 1.96%) + + s.. + + + <termcolor::LossyStandardStream<W> as std::io::Write>::write (7 samples, 1.96%) + + <.. + + + __memmove_avx512_unaligned_erms (1 samples, 0.28%) + + + + + <std::io::stdio::StdoutLock as std::io::Write>::write (2 samples, 0.56%) + + + + + <std::io::stdio::Stdout as std::io::Write>::write (3 samples, 0.84%) + + + + + <&std::io::stdio::Stdout as std::io::Write>::write (3 samples, 0.84%) + + + + + <termcolor::LossyStandardStream<W> as termcolor::WriteColor>::set_color (5 samples, 1.40%) + + + + + std::io::Write::write_all (5 samples, 1.40%) + + + + + <termcolor::ColorSpec as core::cmp::PartialEq>::eq (1 samples, 0.28%) + + + + + srso_alias_safe_ret (1 samples, 0.28%) + + + + + dget_parent (1 samples, 0.28%) + + + + + __fsnotify_parent (2 samples, 0.56%) + + + + + vfs_write (9 samples, 2.51%) + + vf.. + + + __fdget_pos (1 samples, 0.28%) + + + + + srso_alias_return_thunk (1 samples, 0.28%) + + + + + srso_alias_safe_ret (1 samples, 0.28%) + + + + + entry_SYSCALL_64_after_hwframe (12 samples, 3.35%) + + ent.. + + + do_syscall_64 (12 samples, 3.35%) + + do_.. + + + ksys_write (12 samples, 3.35%) + + ksy.. + + + <std::io::stdio::Stdout as std::io::Write>::flush (13 samples, 3.63%) + + <std.. + + + <&std::io::stdio::Stdout as std::io::Write>::flush (13 samples, 3.63%) + + <&st.. + + + std::io::buffered::bufwriter::BufWriter<W>::flush_buf (13 samples, 3.63%) + + std:.. + + + __GI___libc_write (13 samples, 3.63%) + + __GI.. + + + s4lib::printer::printers::PrinterLogMessage::print_journalentry_color (29 samples, 8.10%) + + s4lib::prin.. + + + _dl_relocate_object (1 samples, 0.28%) + + + + + _dl_lookup_symbol_x (1 samples, 0.28%) + + + + + do_lookup_x (1 samples, 0.28%) + + + + + _dl_map_object_deps (1 samples, 0.28%) + + + + + _dl_catch_exception (1 samples, 0.28%) + + + + + openaux (1 samples, 0.28%) + + + + + _dl_map_object (1 samples, 0.28%) + + + + + strcmp (1 samples, 0.28%) + + + + + s4lib::libload::systemd_dlopen2::load_library_systemd (3 samples, 0.84%) + + + + + dlopen2::wrapper::container::Container<T>::load (3 samples, 0.84%) + + + + + dlopen2::raw::common::Library::open (3 samples, 0.84%) + + + + + dlopen@GLIBC_2.2.5 (3 samples, 0.84%) + + + + + _dlerror_run (3 samples, 0.84%) + + + + + _dl_catch_error (3 samples, 0.84%) + + + + + _dl_catch_exception (3 samples, 0.84%) + + + + + dlopen_doit (3 samples, 0.84%) + + + + + _dl_open (3 samples, 0.84%) + + + + + _dl_catch_exception (3 samples, 0.84%) + + + + + dl_open_worker (3 samples, 0.84%) + + + + + _dl_catch_exception (3 samples, 0.84%) + + + + + dl_open_worker_begin (3 samples, 0.84%) + + + + + _dl_check_map_versions (1 samples, 0.28%) + + + + + _dl_name_match_p (1 samples, 0.28%) + + + + + strcmp (1 samples, 0.28%) + + + + + crossbeam_channel::select::SelectedOperation::recv (2 samples, 0.56%) + + + + + crossbeam_channel::channel::read (2 samples, 0.56%) + + + + + __memmove_avx512_unaligned_erms (2 samples, 0.56%) + + + + + std::thread::park (1 samples, 0.28%) + + + + + syscall (1 samples, 0.28%) + + + + + entry_SYSCALL_64_after_hwframe (1 samples, 0.28%) + + + + + do_syscall_64 (1 samples, 0.28%) + + + + + __x64_sys_futex (1 samples, 0.28%) + + + + + do_futex (1 samples, 0.28%) + + + + + futex_wait (1 samples, 0.28%) + + + + + futex_wait_queue_me (1 samples, 0.28%) + + + + + schedule (1 samples, 0.28%) + + + + + __schedule (1 samples, 0.28%) + + + + + finish_task_switch.isra.0 (1 samples, 0.28%) + + + + + __perf_event_task_sched_in (1 samples, 0.28%) + + + + + __raw_callee_save___pv_queued_spin_unlock (1 samples, 0.28%) + + + + + crossbeam_channel::context::Context::with::{{closure}} (5 samples, 1.40%) + + + + + crossbeam_channel::context::Context::wait_until (5 samples, 1.40%) + + + + + crossbeam_channel::select::Select::select (6 samples, 1.68%) + + + + + crossbeam_channel::select::run_select (6 samples, 1.68%) + + + + + alloc::collections::btree::remove::<impl alloc::collections::btree::node::Handle<alloc::collections::btree::node::NodeRef<alloc::collections::btree::node::marker::Mut,K,V,alloc::collections::btree::node::marker::Leaf>,alloc::collections::btree::node::marker::KV>>::remove_leaf_kv (1 samples, 0.28%) + + + + + alloc::collections::btree::map::BTreeMap<K,V,A>::remove (2 samples, 0.56%) + + + + + alloc::collections::btree::map::entry::OccupiedEntry<K,V,A>::remove_entry (2 samples, 0.56%) + + + + + alloc::collections::btree::remove::<impl alloc::collections::btree::node::Handle<alloc::collections::btree::node::NodeRef<alloc::collections::btree::node::marker::Mut,K,V,alloc::collections::btree::node::marker::LeafOrInternal>,alloc::collections::btree::node::marker::KV>>::remove_kv_tracking (2 samples, 0.56%) + + + + + s4::processing_loop (45 samples, 12.57%) + + s4::processing_loop + + + std::rt::lang_start::_{{closure}} (46 samples, 12.85%) + + std::rt::lang_start.. + + + std::sys_common::backtrace::__rust_begin_short_backtrace (46 samples, 12.85%) + + std::sys_common::ba.. + + + s4::main (46 samples, 12.85%) + + s4::main + + + clap_builder::builder::command::Command::get_matches_from (1 samples, 0.28%) + + + + + clap_builder::builder::command::Command::_do_parse (1 samples, 0.28%) + + + + + clap_builder::parser::parser::Parser::get_matches_with (1 samples, 0.28%) + + + + + clap_builder::parser::parser::Parser::add_defaults (1 samples, 0.28%) + + + + + clap_builder::parser::parser::Parser::react (1 samples, 0.28%) + + + + + clap_builder::parser::parser::Parser::push_arg_values (1 samples, 0.28%) + + + + + <P as clap_builder::builder::value_parser::AnyValueParser>::parse_ref (1 samples, 0.28%) + + + + + <F as clap_builder::builder::value_parser::TypedValueParser>::parse_ref (1 samples, 0.28%) + + + + + s4lib::data::datetime::datetime_parse_from_str_w_tz (1 samples, 0.28%) + + + + + chrono::datetime::DateTime<chrono::offset::fixed::FixedOffset>::parse_from_str (1 samples, 0.28%) + + + + + chrono::format::parsed::Parsed::to_datetime (1 samples, 0.28%) + + + + + s4 (85 samples, 23.74%) + + s4 + + + _start (51 samples, 14.25%) + + _start + + + __libc_start_main@@GLIBC_2.34 (47 samples, 13.13%) + + __libc_start_main@@G.. + + + __libc_start_call_main (47 samples, 13.13%) + + __libc_start_call_ma.. + + + main (47 samples, 13.13%) + + main + + + std::rt::lang_start_internal (47 samples, 13.13%) + + std::rt::lang_start_.. + + + pthread_getattr_np@@GLIBC_2.32 (1 samples, 0.28%) + + + + + pthread_getaffinity_np@GLIBC_2.3.4 (1 samples, 0.28%) + + + + + entry_SYSCALL_64_after_hwframe (1 samples, 0.28%) + + + + + do_syscall_64 (1 samples, 0.28%) + + + + + perf-exec (11 samples, 3.07%) + + per.. + + + entry_SYSCALL_64_after_hwframe (11 samples, 3.07%) + + ent.. + + + do_syscall_64 (11 samples, 3.07%) + + do_.. + + + __x64_sys_execve (11 samples, 3.07%) + + __x.. + + + do_execveat_common.isra.0 (11 samples, 3.07%) + + do_.. + + + bprm_execve (11 samples, 3.07%) + + bpr.. + + + load_elf_binary (11 samples, 3.07%) + + loa.. + + + begin_new_exec (11 samples, 3.07%) + + beg.. + + + perf_event_exec (11 samples, 3.07%) + + per.. + + + x86_pmu_enable_all (11 samples, 3.07%) + + x86.. + + + ctrl-c (1 samples, 0.28%) + + + + + entry_SYSCALL_64_after_hwframe (1 samples, 0.28%) + + + + + do_syscall_64 (1 samples, 0.28%) + + + + + syscall_exit_to_user_mode (1 samples, 0.28%) + + + + + exit_to_user_mode_prepare (1 samples, 0.28%) + + + + + arch_do_signal_or_restart (1 samples, 0.28%) + + + + + get_signal (1 samples, 0.28%) + + + + + do_group_exit (1 samples, 0.28%) + + + + + do_exit (1 samples, 0.28%) + + + + + acct_process (1 samples, 0.28%) + + + + + do_acct_process (1 samples, 0.28%) + + + + + __kernel_write (1 samples, 0.28%) + + + + + ext4_buffered_write_iter (1 samples, 0.28%) + + + + + file_update_time (1 samples, 0.28%) + + + + + generic_update_time (1 samples, 0.28%) + + + + + __mark_inode_dirty (1 samples, 0.28%) + + + + + ext4_dirty_inode (1 samples, 0.28%) + + + + + __ext4_journal_start_sb (1 samples, 0.28%) + + + + + jbd2__journal_start (1 samples, 0.28%) + + + + + kmem_cache_alloc (1 samples, 0.28%) + + + + + [libsystemd.so.0.32.0] (2 samples, 0.56%) + + + + + [libsystemd.so.0.32.0] (4 samples, 1.12%) + + + + + [libsystemd.so.0.32.0] (11 samples, 3.07%) + + [li.. + + + sd_journal_enumerate_data (13 samples, 3.63%) + + sd_j.. + + + sd_journal_enumerate_available_data (14 samples, 3.91%) + + sd_j.. + + + [libsystemd.so.0.32.0] (3 samples, 0.84%) + + + + + [libsystemd.so.0.32.0] (5 samples, 1.40%) + + + + + [libsystemd.so.0.32.0] (8 samples, 2.23%) + + [.. + + + sd_journal_get_data (9 samples, 2.51%) + + sd.. + + + core::fmt::write (4 samples, 1.12%) + + + + + <str as core::fmt::Debug>::fmt (4 samples, 1.12%) + + + + + core::unicode::unicode_data::grapheme_extend::lookup (4 samples, 1.12%) + + + + + s4lib::readers::journalreader::JournalReader::Error_from_Errno (5 samples, 1.40%) + + + + + alloc::fmt::format::format_inner (5 samples, 1.40%) + + + + + [libsystemd.so.0.32.0] (1 samples, 0.28%) + + + + + [libsystemd.so.0.32.0] (1 samples, 0.28%) + + + + + [libsystemd.so.0.32.0] (2 samples, 0.56%) + + + + + [libsystemd.so.0.32.0] (2 samples, 0.56%) + + + + + s4lib::readers::journalreader::JournalReader::next_common (17 samples, 4.75%) + + s4lib:.. + + + [libsystemd.so.0.32.0] (3 samples, 0.84%) + + + + + [libsystemd.so.0.32.0] (3 samples, 0.84%) + + + + + memchr::arch::x86_64::memchr::memchr_raw::find_avx2 (1 samples, 0.28%) + + + + + memchr::arch::x86_64::avx2::memchr::One::find_raw (1 samples, 0.28%) + + + + + <core::fmt::Formatter as core::fmt::Write>::write_fmt (1 samples, 0.28%) + + + + + chrono::format::formatting::DelayedFormat<I>::new_with_offset (2 samples, 0.56%) + + + + + <chrono::offset::fixed::FixedOffset as core::fmt::Debug>::fmt (2 samples, 0.56%) + + + + + __memmove_avx512_unaligned_erms (1 samples, 0.28%) + + + + + <chrono::format::formatting::DelayedFormat<I> as core::fmt::Display>::fmt (2 samples, 0.56%) + + + + + <chrono::datetime::DateTime<chrono::offset::utc::Utc> as core::convert::From<std::time::SystemTime>>::from (1 samples, 0.28%) + + + + + s4lib::readers::journalreader::JournalReader::next_short (39 samples, 10.89%) + + s4lib::readers::.. + + + crossbeam_channel::channel::Sender<T>::send (2 samples, 0.56%) + + + + + core::ptr::drop_in_place<s4lib::readers::journalreader::JournalReader> (1 samples, 0.28%) + + + + + core::ptr::drop_in_place<core::option::Option<tempfile::file::NamedTempFile>> (1 samples, 0.28%) + + + + + <tempfile::file::TempPath as core::ops::drop::Drop>::drop (1 samples, 0.28%) + + + + + std::sys::unix::fs::unlink (1 samples, 0.28%) + + + + + __GI___unlink (1 samples, 0.28%) + + + + + entry_SYSCALL_64_after_hwframe (1 samples, 0.28%) + + + + + do_syscall_64 (1 samples, 0.28%) + + + + + __x64_sys_unlink (1 samples, 0.28%) + + + + + do_unlinkat (1 samples, 0.28%) + + + + + vfs_unlink (1 samples, 0.28%) + + + + + ext4_unlink (1 samples, 0.28%) + + + + + __ext4_unlink (1 samples, 0.28%) + + + + + ext4_orphan_add (1 samples, 0.28%) + + + + + ext4_mark_iloc_dirty (1 samples, 0.28%) + + + + + map_id_up (1 samples, 0.28%) + + + + + clone3 (43 samples, 12.01%) + + clone3 + + + start_thread (43 samples, 12.01%) + + start_thread + + + std::sys::unix::thread::Thread::new::thread_start (43 samples, 12.01%) + + std::sys::unix::th.. + + + core::ops::function::FnOnce::call_once{{vtable.shim}} (43 samples, 12.01%) + + core::ops::functio.. + + + std::sys_common::backtrace::__rust_begin_short_backtrace (43 samples, 12.01%) + + std::sys_common::b.. + + + s4::exec_fileprocessor_thread (43 samples, 12.01%) + + s4::exec_fileproce.. + + + asm_exc_page_fault (1 samples, 0.28%) + + + + + exc_page_fault (1 samples, 0.28%) + + + + + do_user_addr_fault (1 samples, 0.28%) + + + + + handle_mm_fault (1 samples, 0.28%) + + + + + __handle_mm_fault (1 samples, 0.28%) + + + + + __alloc_pages (1 samples, 0.28%) + + + + + get_page_from_freelist (1 samples, 0.28%) + + + + + kernel_init_free_pages.part.0 (1 samples, 0.28%) + + + + + clear_page_erms (1 samples, 0.28%) + + + + + unlock_page (1 samples, 0.28%) + + + + + ext4_reserve_inode_write (2 samples, 0.56%) + + + + + ext4_get_inode_loc (2 samples, 0.56%) + + + + + __ext4_get_inode_loc (2 samples, 0.56%) + + + + + chksum_update (2 samples, 0.56%) + + + + + crc32_body (2 samples, 0.56%) + + + + + ext4_dirty_inode (5 samples, 1.40%) + + + + + __ext4_mark_inode_dirty (5 samples, 1.40%) + + + + + ext4_mark_iloc_dirty (3 samples, 0.84%) + + + + + ext4_inode_csum_set (3 samples, 0.84%) + + + + + ext4_inode_csum (3 samples, 0.84%) + + + + + generic_write_end (7 samples, 1.96%) + + g.. + + + __mark_inode_dirty (6 samples, 1.68%) + + + + + add_to_page_cache_lru (3 samples, 0.84%) + + + + + __add_to_page_cache_locked (3 samples, 0.84%) + + + + + rmqueue_bulk (3 samples, 0.84%) + + + + + __list_del_entry_valid (3 samples, 0.84%) + + + + + grab_cache_page_write_begin (7 samples, 1.96%) + + g.. + + + pagecache_get_page (7 samples, 1.96%) + + p.. + + + __alloc_pages (4 samples, 1.12%) + + + + + get_page_from_freelist (4 samples, 1.12%) + + + + + __list_del_entry_valid (1 samples, 0.28%) + + + + + kmem_cache_alloc (1 samples, 0.28%) + + + + + get_obj_cgroup_from_current (1 samples, 0.28%) + + + + + alloc_page_buffers (2 samples, 0.56%) + + + + + alloc_buffer_head (2 samples, 0.56%) + + + + + _raw_spin_lock (1 samples, 0.28%) + + + + + ext4_da_write_begin (11 samples, 3.07%) + + ext.. + + + __block_write_begin_int (4 samples, 1.12%) + + + + + create_page_buffers (4 samples, 1.12%) + + + + + create_empty_buffers (4 samples, 1.12%) + + + + + __raw_callee_save___pv_queued_spin_unlock (1 samples, 0.28%) + + + + + copy_page_from_iter_atomic (3 samples, 0.84%) + + + + + copy_user_enhanced_fast_string (3 samples, 0.84%) + + + + + std::io::buffered::bufwriter::BufWriter<W>::write_all_cold (22 samples, 6.15%) + + std::io:.. + + + std::io::Write::write_all (22 samples, 6.15%) + + std::io:.. + + + std::os::unix::net::datagram::UnixDatagram::send (22 samples, 6.15%) + + std::os:.. + + + __GI___libc_write (22 samples, 6.15%) + + __GI___l.. + + + entry_SYSCALL_64_after_hwframe (22 samples, 6.15%) + + entry_SY.. + + + do_syscall_64 (22 samples, 6.15%) + + do_sysca.. + + + ksys_write (22 samples, 6.15%) + + ksys_wri.. + + + vfs_write (22 samples, 6.15%) + + vfs_write + + + new_sync_write (22 samples, 6.15%) + + new_sync.. + + + ext4_buffered_write_iter (22 samples, 6.15%) + + ext4_buf.. + + + generic_perform_write (22 samples, 6.15%) + + generic_.. + + + __close (1 samples, 0.28%) + + + + + __GI___pthread_enable_asynccancel (1 samples, 0.28%) + + + + + alloc::raw_vec::RawVec<T,A>::reserve::do_reserve_and_handle (1 samples, 0.28%) + + + + + alloc::raw_vec::finish_grow (1 samples, 0.28%) + + + + + realloc (1 samples, 0.28%) + + + + + bzip2_rs::decoder::Decoder::write (2 samples, 0.56%) + + + + + __memmove_avx512_unaligned_erms (1 samples, 0.28%) + + + + + asm_exc_page_fault (1 samples, 0.28%) + + + + + exc_page_fault (1 samples, 0.28%) + + + + + do_user_addr_fault (1 samples, 0.28%) + + + + + handle_mm_fault (1 samples, 0.28%) + + + + + __handle_mm_fault (1 samples, 0.28%) + + + + + __alloc_pages (1 samples, 0.28%) + + + + + get_page_from_freelist (1 samples, 0.28%) + + + + + __list_del_entry_valid (1 samples, 0.28%) + + + + + s4lib::readers::filedecompressor::decompress_to_ntf (26 samples, 7.26%) + + s4lib::rea.. + + + <bzip2_rs::decoder::reader::DecoderReader<R> as std::io::Read>::read (3 samples, 0.84%) + + + + + <std::process::ChildStdout as std::io::Read>::read (1 samples, 0.28%) + + + + + read (1 samples, 0.28%) + + + + + entry_SYSCALL_64_after_hwframe (1 samples, 0.28%) + + + + + do_syscall_64 (1 samples, 0.28%) + + + + + ksys_read (1 samples, 0.28%) + + + + + vfs_read (1 samples, 0.28%) + + + + + new_sync_read (1 samples, 0.28%) + + + + + filemap_read (1 samples, 0.28%) + + + + + __cond_resched (1 samples, 0.28%) + + + + + crc32fast::Hasher::update (4 samples, 1.12%) + + + + + crc32fast::specialized::pclmulqdq::calculate (4 samples, 1.12%) + + + + + bzip2_rs::huffman::HuffmanTree::decode (18 samples, 5.03%) + + bzip2_.. + + + bzip2_rs::block::bwt::inverse_bwt (11 samples, 3.07%) + + bzi.. + + + do_huge_pmd_anonymous_page (1 samples, 0.28%) + + + + + clear_huge_page (1 samples, 0.28%) + + + + + clear_subpage (1 samples, 0.28%) + + + + + clear_page_erms (1 samples, 0.28%) + + + + + get_mem_cgroup_from_mm (1 samples, 0.28%) + + + + + asm_exc_page_fault (3 samples, 0.84%) + + + + + exc_page_fault (3 samples, 0.84%) + + + + + do_user_addr_fault (3 samples, 0.84%) + + + + + handle_mm_fault (3 samples, 0.84%) + + + + + __handle_mm_fault (3 samples, 0.84%) + + + + + __mem_cgroup_charge (2 samples, 0.56%) + + + + + charge_memcg (1 samples, 0.28%) + + + + + mem_cgroup_charge_statistics.constprop.0 (1 samples, 0.28%) + + + + + alloc::vec::Vec<T,A>::resize (7 samples, 1.96%) + + a.. + + + alloc::vec::Vec<T,A>::push (1 samples, 0.28%) + + + + + __memmove_avx512_unaligned_erms (46 samples, 12.85%) + + __memmove_avx512_un.. + + + all (358 samples, 100%) + + + + + RHE_91_system.j (261 samples, 72.91%) + + RHE_91_system.j + + + [unknown] (217 samples, 60.61%) + + [unknown] + + + bzip2_rs::block::Block::read (191 samples, 53.35%) + + bzip2_rs::block::Block::read + + + diff --git a/releases/0.7.75/flamegraph-journal-gz.svg b/releases/0.7.75/flamegraph-journal-gz.svg new file mode 100644 index 00000000..39cd34bc --- /dev/null +++ b/releases/0.7.75/flamegraph-journal-gz.svg @@ -0,0 +1,2477 @@ + + + + + + + + + + + + + + + Flame Graph: super_speedy_syslog_searcher 0.7.75; git: d799548f; -freq 8000; created 20240707T231059-0700; flamegraph-flamegraph 0.6.5; rustc 1.70.0
; command: s4 ./logs/programs/journal/RHE_91_system.journal.gz + + Reset Zoom + Search + + + + ret_from_fork (22 samples, 11.22%) + + ret_from_fork + + + schedule_tail (22 samples, 11.22%) + + schedule_tail + + + finish_task_switch.isra.0 (22 samples, 11.22%) + + finish_task_switc.. + + + __perf_event_task_sched_in (22 samples, 11.22%) + + __perf_event_task.. + + + __raw_callee_save___pv_queued_spin_unlock (22 samples, 11.22%) + + __raw_callee_save.. + + + truncate_cleanup_page (1 samples, 0.51%) + + + + + try_to_free_buffers (1 samples, 0.51%) + + + + + kmem_cache_free.part.0 (1 samples, 0.51%) + + + + + __slab_free.constprop.0 (1 samples, 0.51%) + + + + + __pagevec_release (1 samples, 0.51%) + + + + + release_pages (1 samples, 0.51%) + + + + + __cond_resched (1 samples, 0.51%) + + + + + srso_alias_safe_ret (1 samples, 0.51%) + + + + + task_work_run (4 samples, 2.04%) + + t.. + + + __fput (4 samples, 2.04%) + + _.. + + + dput (4 samples, 2.04%) + + d.. + + + __dentry_kill (4 samples, 2.04%) + + _.. + + + evict (4 samples, 2.04%) + + e.. + + + ext4_evict_inode (4 samples, 2.04%) + + e.. + + + truncate_inode_pages_range (4 samples, 2.04%) + + t.. + + + mmput (1 samples, 0.51%) + + + + + exit_mmap (1 samples, 0.51%) + + + + + unmap_vmas (1 samples, 0.51%) + + + + + unmap_page_range (1 samples, 0.51%) + + + + + __x64_sys_exit_group (6 samples, 3.06%) + + __x.. + + + do_group_exit (6 samples, 3.06%) + + do_.. + + + do_exit (6 samples, 3.06%) + + do_.. + + + mm_update_next_owner (1 samples, 0.51%) + + + + + setup_arg_pages (1 samples, 0.51%) + + + + + shift_arg_pages (1 samples, 0.51%) + + + + + move_page_tables.part.0 (1 samples, 0.51%) + + + + + entry_SYSCALL_64_after_hwframe (8 samples, 4.08%) + + entr.. + + + do_syscall_64 (8 samples, 4.08%) + + do_s.. + + + __x64_sys_execve (2 samples, 1.02%) + + + + + do_execveat_common.isra.0 (2 samples, 1.02%) + + + + + bprm_execve (2 samples, 1.02%) + + + + + load_elf_binary (2 samples, 1.02%) + + + + + map_vdso_randomized (1 samples, 0.51%) + + + + + mmap_region (1 samples, 0.51%) + + + + + security_vm_enough_memory_mm (1 samples, 0.51%) + + + + + cap_vm_enough_memory (1 samples, 0.51%) + + + + + clone3 (2 samples, 1.02%) + + + + + start_thread (2 samples, 1.02%) + + + + + std::sys::unix::thread::Thread::new::thread_start (2 samples, 1.02%) + + + + + std::sys::unix::stack_overflow::imp::make_handler (2 samples, 1.02%) + + + + + __mmap (2 samples, 1.02%) + + + + + entry_SYSCALL_64_after_hwframe (2 samples, 1.02%) + + + + + do_syscall_64 (2 samples, 1.02%) + + + + + vm_mmap_pgoff (2 samples, 1.02%) + + + + + do_mmap (2 samples, 1.02%) + + + + + get_unmapped_area (1 samples, 0.51%) + + + + + asm_exc_page_fault (1 samples, 0.51%) + + + + + exc_page_fault (1 samples, 0.51%) + + + + + do_user_addr_fault (1 samples, 0.51%) + + + + + handle_mm_fault (1 samples, 0.51%) + + + + + __handle_mm_fault (1 samples, 0.51%) + + + + + filemap_map_pages (1 samples, 0.51%) + + + + + next_uptodate_page (1 samples, 0.51%) + + + + + _dl_relocate_object (2 samples, 1.02%) + + + + + asm_exc_page_fault (2 samples, 1.02%) + + + + + exc_page_fault (2 samples, 1.02%) + + + + + do_user_addr_fault (2 samples, 1.02%) + + + + + handle_mm_fault (2 samples, 1.02%) + + + + + __handle_mm_fault (2 samples, 1.02%) + + + + + _dl_start (3 samples, 1.53%) + + + + + _dl_sysdep_start (3 samples, 1.53%) + + + + + dl_main (3 samples, 1.53%) + + + + + _dl_map_object_deps (1 samples, 0.51%) + + + + + _dl_catch_exception (1 samples, 0.51%) + + + + + openaux (1 samples, 0.51%) + + + + + _dl_map_object (1 samples, 0.51%) + + + + + _dl_map_object_from_fd (1 samples, 0.51%) + + + + + memset (1 samples, 0.51%) + + + + + asm_exc_page_fault (1 samples, 0.51%) + + + + + exc_page_fault (1 samples, 0.51%) + + + + + do_user_addr_fault (1 samples, 0.51%) + + + + + handle_mm_fault (1 samples, 0.51%) + + + + + __handle_mm_fault (1 samples, 0.51%) + + + + + copy_page (1 samples, 0.51%) + + + + + std::io::Write::write_all (1 samples, 0.51%) + + + + + <termcolor::LossyStandardStream<W> as std::io::Write>::write (1 samples, 0.51%) + + + + + <std::io::stdio::Stdout as std::io::Write>::write (1 samples, 0.51%) + + + + + <&std::io::stdio::Stdout as std::io::Write>::write (1 samples, 0.51%) + + + + + <std::io::stdio::StdoutLock as std::io::Write>::write (1 samples, 0.51%) + + + + + __GI___libc_write (1 samples, 0.51%) + + + + + entry_SYSCALL_64_after_hwframe (1 samples, 0.51%) + + + + + do_syscall_64 (1 samples, 0.51%) + + + + + ksys_write (1 samples, 0.51%) + + + + + vfs_write (1 samples, 0.51%) + + + + + write_null (1 samples, 0.51%) + + + + + std::io::Write::write_all (1 samples, 0.51%) + + + + + <std::io::stdio::Stdout as std::io::Write>::write (1 samples, 0.51%) + + + + + <&std::io::stdio::Stdout as std::io::Write>::write (1 samples, 0.51%) + + + + + <std::io::stdio::StdoutLock as std::io::Write>::write (1 samples, 0.51%) + + + + + __memrchr_evex (1 samples, 0.51%) + + + + + termcolor::Ansi<W>::write_color (2 samples, 1.02%) + + + + + <std::io::stdio::StdoutLock as std::io::Write>::write (1 samples, 0.51%) + + + + + std::io::Write::write_all (2 samples, 1.02%) + + + + + <std::io::stdio::Stdout as std::io::Write>::write (2 samples, 1.02%) + + + + + <&std::io::stdio::Stdout as std::io::Write>::write (2 samples, 1.02%) + + + + + <termcolor::LossyStandardStream<W> as termcolor::WriteColor>::set_color (5 samples, 2.55%) + + <t.. + + + srso_alias_return_thunk (1 samples, 0.51%) + + + + + srso_alias_safe_ret (1 samples, 0.51%) + + + + + syscall_exit_to_user_mode (1 samples, 0.51%) + + + + + lockref_put_return (2 samples, 1.02%) + + + + + __fsnotify_parent (4 samples, 2.04%) + + _.. + + + dput (4 samples, 2.04%) + + d.. + + + vfs_write (8 samples, 4.08%) + + vfs_.. + + + __fdget_pos (1 samples, 0.51%) + + + + + __fget_light (1 samples, 0.51%) + + + + + __fget_files (1 samples, 0.51%) + + + + + entry_SYSCALL_64_after_hwframe (13 samples, 6.63%) + + entry_SYS.. + + + do_syscall_64 (12 samples, 6.12%) + + do_sysca.. + + + ksys_write (11 samples, 5.61%) + + ksys_wr.. + + + __GI___pthread_disable_asynccancel (1 samples, 0.51%) + + + + + s4lib::printer::printers::PrinterLogMessage::print_journalentry_color (22 samples, 11.22%) + + s4lib::printer::p.. + + + <std::io::stdio::Stdout as std::io::Write>::flush (16 samples, 8.16%) + + <std::io::s.. + + + <&std::io::stdio::Stdout as std::io::Write>::flush (16 samples, 8.16%) + + <&std::io::.. + + + std::io::buffered::bufwriter::BufWriter<W>::flush_buf (16 samples, 8.16%) + + std::io::bu.. + + + __GI___libc_write (16 samples, 8.16%) + + __GI___libc.. + + + _dl_relocate_object (1 samples, 0.51%) + + + + + _dl_lookup_symbol_x (1 samples, 0.51%) + + + + + do_lookup_x (1 samples, 0.51%) + + + + + check_match (1 samples, 0.51%) + + + + + strcmp (1 samples, 0.51%) + + + + + s4lib::libload::systemd_dlopen2::load_library_systemd (2 samples, 1.02%) + + + + + dlopen2::wrapper::container::Container<T>::load (2 samples, 1.02%) + + + + + dlopen2::raw::common::Library::open (2 samples, 1.02%) + + + + + dlopen@GLIBC_2.2.5 (2 samples, 1.02%) + + + + + _dlerror_run (2 samples, 1.02%) + + + + + _dl_catch_error (2 samples, 1.02%) + + + + + _dl_catch_exception (2 samples, 1.02%) + + + + + dlopen_doit (2 samples, 1.02%) + + + + + _dl_open (2 samples, 1.02%) + + + + + _dl_catch_exception (2 samples, 1.02%) + + + + + dl_open_worker (2 samples, 1.02%) + + + + + _dl_catch_exception (2 samples, 1.02%) + + + + + dl_open_worker_begin (2 samples, 1.02%) + + + + + _dl_map_object_deps (1 samples, 0.51%) + + + + + _dl_catch_exception (1 samples, 0.51%) + + + + + openaux (1 samples, 0.51%) + + + + + _dl_map_object (1 samples, 0.51%) + + + + + _dl_map_object_from_fd (1 samples, 0.51%) + + + + + mmap64 (1 samples, 0.51%) + + + + + entry_SYSCALL_64_after_hwframe (1 samples, 0.51%) + + + + + do_syscall_64 (1 samples, 0.51%) + + + + + ksys_mmap_pgoff (1 samples, 0.51%) + + + + + vm_mmap_pgoff (1 samples, 0.51%) + + + + + do_mmap (1 samples, 0.51%) + + + + + mmap_region (1 samples, 0.51%) + + + + + __do_munmap (1 samples, 0.51%) + + + + + hashbrown::set::HashSet<T,S,A>::remove (1 samples, 0.51%) + + + + + core::hash::BuildHasher::hash_one (1 samples, 0.51%) + + + + + crossbeam_channel::select::SelectedOperation::recv (2 samples, 1.02%) + + + + + crossbeam_channel::channel::read (2 samples, 1.02%) + + + + + __memmove_avx512_unaligned_erms (2 samples, 1.02%) + + + + + std::thread::park (1 samples, 0.51%) + + + + + syscall (1 samples, 0.51%) + + + + + entry_SYSCALL_64_after_hwframe (1 samples, 0.51%) + + + + + do_syscall_64 (1 samples, 0.51%) + + + + + __x64_sys_futex (1 samples, 0.51%) + + + + + do_futex (1 samples, 0.51%) + + + + + futex_wait (1 samples, 0.51%) + + + + + futex_wait_queue_me (1 samples, 0.51%) + + + + + schedule (1 samples, 0.51%) + + + + + __schedule (1 samples, 0.51%) + + + + + dequeue_task_fair (1 samples, 0.51%) + + + + + dequeue_entity (1 samples, 0.51%) + + + + + update_load_avg (1 samples, 0.51%) + + + + + __update_load_avg_se (1 samples, 0.51%) + + + + + _raw_spin_lock (1 samples, 0.51%) + + + + + __sched_yield (2 samples, 1.02%) + + + + + entry_SYSCALL_64_after_hwframe (2 samples, 1.02%) + + + + + do_syscall_64 (2 samples, 1.02%) + + + + + __x64_sys_sched_yield (2 samples, 1.02%) + + + + + schedule (2 samples, 1.02%) + + + + + __schedule (2 samples, 1.02%) + + + + + crossbeam_channel::context::Context::wait_until (7 samples, 3.57%) + + cros.. + + + crossbeam_channel::context::Context::with::{{closure}} (9 samples, 4.59%) + + cross.. + + + <crossbeam_channel::channel::Receiver<T> as crossbeam_channel::select::SelectHandle>::register (2 samples, 1.02%) + + + + + crossbeam_channel::waker::SyncWaker::register (2 samples, 1.02%) + + + + + crossbeam_channel::select::Select::select (10 samples, 5.10%) + + crossb.. + + + crossbeam_channel::select::run_select (10 samples, 5.10%) + + crossb.. + + + <crossbeam_channel::flavors::array::Receiver<T> as crossbeam_channel::select::SelectHandle>::try_select (1 samples, 0.51%) + + + + + cfree@GLIBC_2.2.5 (1 samples, 0.51%) + + + + + __lll_lock_wake_private (1 samples, 0.51%) + + + + + entry_SYSCALL_64_after_hwframe (1 samples, 0.51%) + + + + + do_syscall_64 (1 samples, 0.51%) + + + + + __x64_sys_futex (1 samples, 0.51%) + + + + + do_futex (1 samples, 0.51%) + + + + + futex_wake (1 samples, 0.51%) + + + + + s4::processing_loop (40 samples, 20.41%) + + s4::processing_loop + + + std::rt::lang_start::_{{closure}} (41 samples, 20.92%) + + std::rt::lang_start::_{{closure}} + + + std::sys_common::backtrace::__rust_begin_short_backtrace (41 samples, 20.92%) + + std::sys_common::backtrace::__rus.. + + + s4::main (41 samples, 20.92%) + + s4::main + + + clap_builder::builder::command::Command::get_matches_from (1 samples, 0.51%) + + + + + clap_builder::builder::app_settings::AppFlags::is_set (1 samples, 0.51%) + + + + + _start (45 samples, 22.96%) + + _start + + + __libc_start_main@@GLIBC_2.34 (42 samples, 21.43%) + + __libc_start_main@@GLIBC_2.34 + + + __libc_start_call_main (42 samples, 21.43%) + + __libc_start_call_main + + + main (42 samples, 21.43%) + + main + + + std::rt::lang_start_internal (42 samples, 21.43%) + + std::rt::lang_start_internal + + + pthread_getattr_np@@GLIBC_2.32 (1 samples, 0.51%) + + + + + __getdelim (1 samples, 0.51%) + + + + + malloc (1 samples, 0.51%) + + + + + _int_malloc (1 samples, 0.51%) + + + + + s4 (79 samples, 40.31%) + + s4 + + + [[heap]] (1 samples, 0.51%) + + + + + __GI___libc_write (1 samples, 0.51%) + + + + + entry_SYSCALL_64 (1 samples, 0.51%) + + + + + perf-exec (11 samples, 5.61%) + + perf-ex.. + + + entry_SYSCALL_64_after_hwframe (11 samples, 5.61%) + + entry_S.. + + + do_syscall_64 (11 samples, 5.61%) + + do_sysc.. + + + __x64_sys_execve (11 samples, 5.61%) + + __x64_s.. + + + do_execveat_common.isra.0 (11 samples, 5.61%) + + do_exec.. + + + bprm_execve (11 samples, 5.61%) + + bprm_ex.. + + + load_elf_binary (11 samples, 5.61%) + + load_el.. + + + begin_new_exec (11 samples, 5.61%) + + begin_n.. + + + perf_event_exec (11 samples, 5.61%) + + perf_ev.. + + + x86_pmu_enable_all (11 samples, 5.61%) + + x86_pmu.. + + + ctrl-c (1 samples, 0.51%) + + + + + entry_SYSCALL_64_after_hwframe (1 samples, 0.51%) + + + + + do_syscall_64 (1 samples, 0.51%) + + + + + syscall_exit_to_user_mode (1 samples, 0.51%) + + + + + exit_to_user_mode_prepare (1 samples, 0.51%) + + + + + arch_do_signal_or_restart (1 samples, 0.51%) + + + + + get_signal (1 samples, 0.51%) + + + + + do_group_exit (1 samples, 0.51%) + + + + + do_exit (1 samples, 0.51%) + + + + + acct_process (1 samples, 0.51%) + + + + + do_acct_process (1 samples, 0.51%) + + + + + __kernel_write (1 samples, 0.51%) + + + + + ext4_buffered_write_iter (1 samples, 0.51%) + + + + + generic_perform_write (1 samples, 0.51%) + + + + + ext4_da_write_begin (1 samples, 0.51%) + + + + + grab_cache_page_write_begin (1 samples, 0.51%) + + + + + pagecache_get_page (1 samples, 0.51%) + + + + + xas_load (1 samples, 0.51%) + + + + + [libsystemd.so.0.32.0] (1 samples, 0.51%) + + + + + [libsystemd.so.0.32.0] (6 samples, 3.06%) + + [li.. + + + [libsystemd.so.0.32.0] (11 samples, 5.61%) + + [libsys.. + + + sd_journal_enumerate_available_data (12 samples, 6.12%) + + sd_journ.. + + + sd_journal_enumerate_data (12 samples, 6.12%) + + sd_journ.. + + + [libsystemd.so.0.32.0] (1 samples, 0.51%) + + + + + [libsystemd.so.0.32.0] (3 samples, 1.53%) + + + + + sd_journal_get_data (4 samples, 2.04%) + + s.. + + + [libsystemd.so.0.32.0] (4 samples, 2.04%) + + [.. + + + core::unicode::unicode_data::grapheme_extend::lookup (1 samples, 0.51%) + + + + + s4lib::readers::journalreader::JournalReader::Error_from_Errno (2 samples, 1.02%) + + + + + alloc::fmt::format::format_inner (2 samples, 1.02%) + + + + + core::fmt::write (2 samples, 1.02%) + + + + + <str as core::fmt::Debug>::fmt (2 samples, 1.02%) + + + + + [libsystemd.so.0.32.0] (1 samples, 0.51%) + + + + + [libsystemd.so.0.32.0] (1 samples, 0.51%) + + + + + [libsystemd.so.0.32.0] (1 samples, 0.51%) + + + + + [libsystemd.so.0.32.0] (1 samples, 0.51%) + + + + + [libsystemd.so.0.32.0] (2 samples, 1.02%) + + + + + [libsystemd.so.0.32.0] (2 samples, 1.02%) + + + + + s4lib::readers::journalreader::JournalReader::next_common (9 samples, 4.59%) + + s4lib.. + + + memchr::arch::x86_64::avx2::memchr::One::find_raw_avx2 (2 samples, 1.02%) + + + + + memchr::arch::x86_64::memchr::memchr_raw::find_avx2 (4 samples, 2.04%) + + m.. + + + memchr::arch::x86_64::avx2::memchr::One::find_raw (4 samples, 2.04%) + + m.. + + + malloc (1 samples, 0.51%) + + + + + _int_malloc (1 samples, 0.51%) + + + + + core::fmt::write (1 samples, 0.51%) + + + + + core::fmt::num::imp::<impl core::fmt::Display for i32>::fmt (1 samples, 0.51%) + + + + + core::fmt::Formatter::pad_integral (1 samples, 0.51%) + + + + + <alloc::string::String as core::fmt::Write>::write_str (1 samples, 0.51%) + + + + + <chrono::offset::fixed::FixedOffset as core::fmt::Debug>::fmt (3 samples, 1.53%) + + + + + <core::fmt::Formatter as core::fmt::Write>::write_fmt (3 samples, 1.53%) + + + + + chrono::format::formatting::DelayedFormat<I>::new_with_offset (4 samples, 2.04%) + + c.. + + + __memmove_avx512_unaligned_erms (1 samples, 0.51%) + + + + + cfree@GLIBC_2.2.5 (1 samples, 0.51%) + + + + + _int_free (1 samples, 0.51%) + + + + + s4lib::readers::journalreader::JournalReader::next_short (36 samples, 18.37%) + + s4lib::readers::journalreader.. + + + <chrono::format::formatting::DelayedFormat<I> as core::fmt::Display>::fmt (5 samples, 2.55%) + + <c.. + + + crossbeam_channel::waker::SyncWaker::notify (1 samples, 0.51%) + + + + + std::sys::unix::futex::futex_wake (1 samples, 0.51%) + + + + + syscall (1 samples, 0.51%) + + + + + entry_SYSCALL_64_after_hwframe (1 samples, 0.51%) + + + + + do_syscall_64 (1 samples, 0.51%) + + + + + __x64_sys_futex (1 samples, 0.51%) + + + + + do_futex (1 samples, 0.51%) + + + + + futex_wake (1 samples, 0.51%) + + + + + wake_up_q (1 samples, 0.51%) + + + + + try_to_wake_up (1 samples, 0.51%) + + + + + crossbeam_channel::channel::Sender<T>::send (2 samples, 1.02%) + + + + + crossbeam_channel::context::Context::with::{{closure}} (1 samples, 0.51%) + + + + + std::thread::park (1 samples, 0.51%) + + + + + syscall (1 samples, 0.51%) + + + + + entry_SYSCALL_64_after_hwframe (1 samples, 0.51%) + + + + + do_syscall_64 (1 samples, 0.51%) + + + + + __x64_sys_futex (1 samples, 0.51%) + + + + + do_futex (1 samples, 0.51%) + + + + + futex_wait (1 samples, 0.51%) + + + + + futex_wait_queue_me (1 samples, 0.51%) + + + + + schedule (1 samples, 0.51%) + + + + + __schedule (1 samples, 0.51%) + + + + + update_rq_clock (1 samples, 0.51%) + + + + + sched_clock_cpu (1 samples, 0.51%) + + + + + read_hv_sched_clock_tsc (1 samples, 0.51%) + + + + + read_hv_clock_tsc (1 samples, 0.51%) + + + + + clone3 (39 samples, 19.90%) + + clone3 + + + start_thread (39 samples, 19.90%) + + start_thread + + + std::sys::unix::thread::Thread::new::thread_start (39 samples, 19.90%) + + std::sys::unix::thread::Thread:.. + + + core::ops::function::FnOnce::call_once{{vtable.shim}} (39 samples, 19.90%) + + core::ops::function::FnOnce::ca.. + + + std::sys_common::backtrace::__rust_begin_short_backtrace (39 samples, 19.90%) + + std::sys_common::backtrace::__r.. + + + s4::exec_fileprocessor_thread (39 samples, 19.90%) + + s4::exec_fileprocessor_thread + + + core::ptr::drop_in_place<s4lib::readers::journalreader::JournalReader> (1 samples, 0.51%) + + + + + core::ptr::drop_in_place<core::option::Option<tempfile::file::NamedTempFile>> (1 samples, 0.51%) + + + + + <tempfile::file::TempPath as core::ops::drop::Drop>::drop (1 samples, 0.51%) + + + + + std::sys::unix::fs::unlink (1 samples, 0.51%) + + + + + __GI___unlink (1 samples, 0.51%) + + + + + entry_SYSCALL_64_after_hwframe (1 samples, 0.51%) + + + + + do_syscall_64 (1 samples, 0.51%) + + + + + __x64_sys_unlink (1 samples, 0.51%) + + + + + do_unlinkat (1 samples, 0.51%) + + + + + vfs_unlink (1 samples, 0.51%) + + + + + ext4_unlink (1 samples, 0.51%) + + + + + __ext4_unlink (1 samples, 0.51%) + + + + + ext4_orphan_add (1 samples, 0.51%) + + + + + asm_exc_page_fault (2 samples, 1.02%) + + + + + exc_page_fault (2 samples, 1.02%) + + + + + do_user_addr_fault (2 samples, 1.02%) + + + + + handle_mm_fault (2 samples, 1.02%) + + + + + __handle_mm_fault (2 samples, 1.02%) + + + + + __alloc_pages (2 samples, 1.02%) + + + + + get_page_from_freelist (2 samples, 1.02%) + + + + + kernel_init_free_pages.part.0 (2 samples, 1.02%) + + + + + clear_page_erms (2 samples, 1.02%) + + + + + chksum_update (2 samples, 1.02%) + + + + + crc32_body (2 samples, 1.02%) + + + + + ext4_inode_csum_set (3 samples, 1.53%) + + + + + ext4_inode_csum (3 samples, 1.53%) + + + + + __ext4_handle_dirty_metadata (1 samples, 0.51%) + + + + + ext4_dirty_inode (5 samples, 2.55%) + + ex.. + + + __ext4_mark_inode_dirty (5 samples, 2.55%) + + __.. + + + ext4_mark_iloc_dirty (5 samples, 2.55%) + + ex.. + + + stop_this_handle (1 samples, 0.51%) + + + + + __wake_up_common_lock (1 samples, 0.51%) + + + + + _raw_spin_lock_irqsave (1 samples, 0.51%) + + + + + __mark_inode_dirty (7 samples, 3.57%) + + __ma.. + + + __ext4_journal_stop (2 samples, 1.02%) + + + + + jbd2_journal_stop (2 samples, 1.02%) + + + + + _raw_spin_unlock_irqrestore (1 samples, 0.51%) + + + + + __raw_callee_save___pv_queued_spin_unlock (1 samples, 0.51%) + + + + + generic_write_end (9 samples, 4.59%) + + gener.. + + + __block_commit_write.constprop.0.isra.0 (2 samples, 1.02%) + + + + + mark_buffer_dirty (2 samples, 1.02%) + + + + + xas_find_conflict (1 samples, 0.51%) + + + + + add_to_page_cache_lru (4 samples, 2.04%) + + a.. + + + __add_to_page_cache_locked (4 samples, 2.04%) + + _.. + + + node_dirty_ok (1 samples, 0.51%) + + + + + grab_cache_page_write_begin (6 samples, 3.06%) + + gra.. + + + pagecache_get_page (6 samples, 3.06%) + + pag.. + + + __alloc_pages (2 samples, 1.02%) + + + + + get_page_from_freelist (2 samples, 1.02%) + + + + + __list_del_entry_valid (1 samples, 0.51%) + + + + + _raw_write_lock (2 samples, 1.02%) + + + + + ext4_es_insert_delayed_block (3 samples, 1.53%) + + + + + ext4_da_write_begin (10 samples, 5.10%) + + ext4_d.. + + + __block_write_begin_int (4 samples, 2.04%) + + _.. + + + ext4_da_get_block_prep (4 samples, 2.04%) + + e.. + + + ext4_da_reserve_space (1 samples, 0.51%) + + + + + __dquot_alloc_space (1 samples, 0.51%) + + + + + std::io::Write::write_all (24 samples, 12.24%) + + std::io::Write::wr.. + + + std::os::unix::net::datagram::UnixDatagram::send (24 samples, 12.24%) + + std::os::unix::net.. + + + __GI___libc_write (24 samples, 12.24%) + + __GI___libc_write + + + entry_SYSCALL_64_after_hwframe (24 samples, 12.24%) + + entry_SYSCALL_64_a.. + + + do_syscall_64 (24 samples, 12.24%) + + do_syscall_64 + + + ksys_write (24 samples, 12.24%) + + ksys_write + + + vfs_write (24 samples, 12.24%) + + vfs_write + + + new_sync_write (24 samples, 12.24%) + + new_sync_write + + + ext4_buffered_write_iter (24 samples, 12.24%) + + ext4_buffered_writ.. + + + generic_perform_write (24 samples, 12.24%) + + generic_perform_wr.. + + + copy_page_from_iter_atomic (5 samples, 2.55%) + + co.. + + + copy_user_enhanced_fast_string (5 samples, 2.55%) + + co.. + + + std::io::buffered::bufwriter::BufWriter<W>::write_all_cold (25 samples, 12.76%) + + std::io::buffered::.. + + + miniz_oxide::inflate::core::transfer (19 samples, 9.69%) + + miniz_oxide::i.. + + + miniz_oxide::inflate::core::init_tree (1 samples, 0.51%) + + + + + miniz_oxide::inflate::core::apply_match (1 samples, 0.51%) + + + + + __memmove_avx512_unaligned_erms (2 samples, 1.02%) + + + + + flate2::zio::read (36 samples, 18.37%) + + flate2::zio::read + + + <flate2::ffi::rust::Inflate as flate2::ffi::InflateBackend>::decompress (36 samples, 18.37%) + + <flate2::ffi::rust::Inflate a.. + + + miniz_oxide::inflate::stream::inflate (36 samples, 18.37%) + + miniz_oxide::inflate::stream:.. + + + miniz_oxide::inflate::core::decompress (36 samples, 18.37%) + + miniz_oxide::inflate::core::d.. + + + all (196 samples, 100%) + + + + + RHE_91_system.j (105 samples, 53.57%) + + RHE_91_system.j + + + [unknown] (64 samples, 32.65%) + + [unknown] + + + s4lib::readers::filedecompressor::decompress_to_ntf (64 samples, 32.65%) + + s4lib::readers::filedecompressor::decompress_to_ntf + + + <flate2::gz::bufread::GzDecoder<R> as std::io::Read>::read (39 samples, 19.90%) + + <flate2::gz::bufread::GzDecoder.. + + + crc32fast::Hasher::update (3 samples, 1.53%) + + + + + crc32fast::specialized::pclmulqdq::calculate (3 samples, 1.53%) + + + + + diff --git a/releases/0.7.75/flamegraph-journal-lz4.svg b/releases/0.7.75/flamegraph-journal-lz4.svg new file mode 100644 index 00000000..0ecd2273 --- /dev/null +++ b/releases/0.7.75/flamegraph-journal-lz4.svg @@ -0,0 +1,2592 @@ + + + + + + + + + + + + + + + Flame Graph: super_speedy_syslog_searcher 0.7.75; git: d799548f; -freq 8000; created 20240707T231102-0700; flamegraph-flamegraph 0.6.5; rustc 1.70.0
; command: s4 ./logs/programs/journal/RHE_91_system.journal.lz4 + + Reset Zoom + Search + + + + ret_from_fork (22 samples, 12.22%) + + ret_from_fork + + + schedule_tail (22 samples, 12.22%) + + schedule_tail + + + finish_task_switch.isra.0 (22 samples, 12.22%) + + finish_task_switch.. + + + __perf_event_task_sched_in (22 samples, 12.22%) + + __perf_event_task_.. + + + __raw_callee_save___pv_queued_spin_unlock (22 samples, 12.22%) + + __raw_callee_save_.. + + + kmem_cache_free.part.0 (1 samples, 0.56%) + + + + + __slab_free.constprop.0 (1 samples, 0.56%) + + + + + truncate_cleanup_page (2 samples, 1.11%) + + + + + try_to_free_buffers (2 samples, 1.11%) + + + + + __cancel_dirty_page (1 samples, 0.56%) + + + + + account_page_cleaned (1 samples, 0.56%) + + + + + __mod_lruvec_page_state (1 samples, 0.56%) + + + + + __mod_lruvec_state (1 samples, 0.56%) + + + + + __list_del_entry_valid (1 samples, 0.56%) + + + + + evict (4 samples, 2.22%) + + e.. + + + ext4_evict_inode (4 samples, 2.22%) + + e.. + + + truncate_inode_pages_range (4 samples, 2.22%) + + t.. + + + __pagevec_release (2 samples, 1.11%) + + + + + release_pages (2 samples, 1.11%) + + + + + free_unref_page_list (2 samples, 1.11%) + + + + + free_pcppages_bulk (2 samples, 1.11%) + + + + + task_work_run (5 samples, 2.78%) + + ta.. + + + __fput (5 samples, 2.78%) + + __.. + + + dput (5 samples, 2.78%) + + dp.. + + + __dentry_kill (5 samples, 2.78%) + + __.. + + + destroy_inode (1 samples, 0.56%) + + + + + __destroy_inode (1 samples, 0.56%) + + + + + fsnotify_destroy_marks (1 samples, 0.56%) + + + + + fsnotify_grab_connector (1 samples, 0.56%) + + + + + __srcu_read_unlock (1 samples, 0.56%) + + + + + unmap_vmas (1 samples, 0.56%) + + + + + unmap_page_range (1 samples, 0.56%) + + + + + page_remove_rmap (1 samples, 0.56%) + + + + + __mod_lruvec_page_state (1 samples, 0.56%) + + + + + __mod_lruvec_state (1 samples, 0.56%) + + + + + __mod_node_page_state (1 samples, 0.56%) + + + + + mmput (2 samples, 1.11%) + + + + + exit_mmap (2 samples, 1.11%) + + + + + free_pgtables (1 samples, 0.56%) + + + + + unlink_anon_vmas (1 samples, 0.56%) + + + + + kmem_cache_free.part.0 (1 samples, 0.56%) + + + + + __slab_free.constprop.0 (1 samples, 0.56%) + + + + + __x64_sys_exit_group (8 samples, 4.44%) + + __x64.. + + + do_group_exit (8 samples, 4.44%) + + do_gr.. + + + do_exit (8 samples, 4.44%) + + do_ex.. + + + mm_update_next_owner (1 samples, 0.56%) + + + + + entry_SYSCALL_64_after_hwframe (9 samples, 5.00%) + + entry_.. + + + do_syscall_64 (9 samples, 5.00%) + + do_sys.. + + + __x64_sys_execve (1 samples, 0.56%) + + + + + do_execveat_common.isra.0 (1 samples, 0.56%) + + + + + bprm_execve (1 samples, 0.56%) + + + + + load_elf_binary (1 samples, 0.56%) + + + + + setup_arg_pages (1 samples, 0.56%) + + + + + expand_downwards (1 samples, 0.56%) + + + + + perf_event_mmap (1 samples, 0.56%) + + + + + perf_iterate_sb (1 samples, 0.56%) + + + + + perf_iterate_ctx (1 samples, 0.56%) + + + + + perf_event_mmap_output (1 samples, 0.56%) + + + + + perf_output_copy (1 samples, 0.56%) + + + + + memcpy_erms (1 samples, 0.56%) + + + + + __mprotect (1 samples, 0.56%) + + + + + entry_SYSCALL_64_after_hwframe (1 samples, 0.56%) + + + + + do_syscall_64 (1 samples, 0.56%) + + + + + __x64_sys_mprotect (1 samples, 0.56%) + + + + + do_mprotect_pkey (1 samples, 0.56%) + + + + + mprotect_fixup (1 samples, 0.56%) + + + + + __split_vma (1 samples, 0.56%) + + + + + start_thread (2 samples, 1.11%) + + + + + std::sys::unix::thread::Thread::new::thread_start (2 samples, 1.11%) + + + + + std::sys::unix::stack_overflow::imp::make_handler (2 samples, 1.11%) + + + + + __GI___sigaltstack (1 samples, 0.56%) + + + + + entry_SYSCALL_64_after_hwframe (1 samples, 0.56%) + + + + + do_syscall_64 (1 samples, 0.56%) + + + + + syscall_exit_to_user_mode (1 samples, 0.56%) + + + + + srso_alias_safe_ret (1 samples, 0.56%) + + + + + clone3 (3 samples, 1.67%) + + + + + entry_SYSCALL_64_after_hwframe (1 samples, 0.56%) + + + + + do_syscall_64 (1 samples, 0.56%) + + + + + __do_sys_clone3 (1 samples, 0.56%) + + + + + kernel_clone (1 samples, 0.56%) + + + + + add_device_randomness (1 samples, 0.56%) + + + + + srso_alias_safe_ret (1 samples, 0.56%) + + + + + entry_SYSCALL_64_after_hwframe (1 samples, 0.56%) + + + + + do_syscall_64 (1 samples, 0.56%) + + + + + __x64_sys_execve (1 samples, 0.56%) + + + + + do_execveat_common.isra.0 (1 samples, 0.56%) + + + + + kfree (1 samples, 0.56%) + + + + + _dl_relocate_object (1 samples, 0.56%) + + + + + asm_exc_page_fault (1 samples, 0.56%) + + + + + exc_page_fault (1 samples, 0.56%) + + + + + do_user_addr_fault (1 samples, 0.56%) + + + + + handle_mm_fault (1 samples, 0.56%) + + + + + __handle_mm_fault (1 samples, 0.56%) + + + + + filemap_map_pages (1 samples, 0.56%) + + + + + next_uptodate_page (1 samples, 0.56%) + + + + + _dl_map_object_deps (1 samples, 0.56%) + + + + + _dl_catch_exception (1 samples, 0.56%) + + + + + openaux (1 samples, 0.56%) + + + + + _dl_map_object (1 samples, 0.56%) + + + + + _dl_map_object_from_fd (1 samples, 0.56%) + + + + + mmap64 (1 samples, 0.56%) + + + + + entry_SYSCALL_64_after_hwframe (1 samples, 0.56%) + + + + + do_syscall_64 (1 samples, 0.56%) + + + + + vm_mmap_pgoff (1 samples, 0.56%) + + + + + do_mmap (1 samples, 0.56%) + + + + + mmap_region (1 samples, 0.56%) + + + + + perf_event_mmap (1 samples, 0.56%) + + + + + perf_iterate_sb (1 samples, 0.56%) + + + + + perf_iterate_ctx (1 samples, 0.56%) + + + + + _dl_start (3 samples, 1.67%) + + + + + _dl_sysdep_start (3 samples, 1.67%) + + + + + dl_main (3 samples, 1.67%) + + + + + _dl_find_object_init (1 samples, 0.56%) + + + + + _dlfo_sort_mappings (1 samples, 0.56%) + + + + + __memrchr_evex (1 samples, 0.56%) + + + + + vfs_write (2 samples, 1.11%) + + + + + ksys_write (3 samples, 1.67%) + + + + + entry_SYSCALL_64_after_hwframe (4 samples, 2.22%) + + e.. + + + do_syscall_64 (4 samples, 2.22%) + + d.. + + + std::io::Write::write_all (6 samples, 3.33%) + + std.. + + + <termcolor::LossyStandardStream<W> as std::io::Write>::write (6 samples, 3.33%) + + <te.. + + + <std::io::stdio::Stdout as std::io::Write>::write (6 samples, 3.33%) + + <st.. + + + <&std::io::stdio::Stdout as std::io::Write>::write (6 samples, 3.33%) + + <&s.. + + + <std::io::stdio::StdoutLock as std::io::Write>::write (6 samples, 3.33%) + + <st.. + + + __GI___libc_write (5 samples, 2.78%) + + __.. + + + alloc::vec::Vec<T,A>::extend_from_slice (1 samples, 0.56%) + + + + + termcolor::Ansi<W>::write_color (3 samples, 1.67%) + + + + + <termcolor::LossyStandardStream<W> as termcolor::WriteColor>::set_color (4 samples, 2.22%) + + <.. + + + std::io::Write::write_all (1 samples, 0.56%) + + + + + srso_alias_return_thunk (1 samples, 0.56%) + + + + + srso_alias_safe_ret (1 samples, 0.56%) + + + + + write_null (2 samples, 1.11%) + + + + + srso_alias_return_thunk (1 samples, 0.56%) + + + + + srso_alias_safe_ret (1 samples, 0.56%) + + + + + dput (1 samples, 0.56%) + + + + + lockref_put_return (1 samples, 0.56%) + + + + + __fsnotify_parent (2 samples, 1.11%) + + + + + dget_parent (1 samples, 0.56%) + + + + + rcu_read_unlock_strict (1 samples, 0.56%) + + + + + vfs_write (9 samples, 5.00%) + + vfs_wr.. + + + srso_alias_return_thunk (1 samples, 0.56%) + + + + + srso_alias_safe_ret (1 samples, 0.56%) + + + + + __fdget_pos (3 samples, 1.67%) + + + + + __fget_light (2 samples, 1.11%) + + + + + __fget_files (2 samples, 1.11%) + + + + + do_syscall_64 (15 samples, 8.33%) + + do_syscall_64 + + + ksys_write (14 samples, 7.78%) + + ksys_write + + + entry_SYSCALL_64_after_hwframe (17 samples, 9.44%) + + entry_SYSCALL_.. + + + __x86_indirect_thunk_rax (1 samples, 0.56%) + + + + + std::io::buffered::bufwriter::BufWriter<W>::flush_buf (19 samples, 10.56%) + + std::io::buffer.. + + + __GI___libc_write (19 samples, 10.56%) + + __GI___libc_wri.. + + + s4lib::printer::printers::PrinterLogMessage::print_journalentry_color (31 samples, 17.22%) + + s4lib::printer::printers::P.. + + + <std::io::stdio::Stdout as std::io::Write>::flush (20 samples, 11.11%) + + <std::io::stdio:.. + + + <&std::io::stdio::Stdout as std::io::Write>::flush (20 samples, 11.11%) + + <&std::io::stdio.. + + + _dl_relocate_object (1 samples, 0.56%) + + + + + _dl_lookup_symbol_x (1 samples, 0.56%) + + + + + do_lookup_x (1 samples, 0.56%) + + + + + s4lib::libload::systemd_dlopen2::load_library_systemd (2 samples, 1.11%) + + + + + dlopen2::wrapper::container::Container<T>::load (2 samples, 1.11%) + + + + + dlopen2::raw::common::Library::open (2 samples, 1.11%) + + + + + dlopen@GLIBC_2.2.5 (2 samples, 1.11%) + + + + + _dlerror_run (2 samples, 1.11%) + + + + + _dl_catch_error (2 samples, 1.11%) + + + + + _dl_catch_exception (2 samples, 1.11%) + + + + + dlopen_doit (2 samples, 1.11%) + + + + + _dl_open (2 samples, 1.11%) + + + + + _dl_catch_exception (2 samples, 1.11%) + + + + + dl_open_worker (2 samples, 1.11%) + + + + + _dl_catch_exception (2 samples, 1.11%) + + + + + dl_open_worker_begin (2 samples, 1.11%) + + + + + _dl_map_object_deps (1 samples, 0.56%) + + + + + _dl_catch_exception (1 samples, 0.56%) + + + + + openaux (1 samples, 0.56%) + + + + + _dl_map_object (1 samples, 0.56%) + + + + + _dl_map_object_from_fd (1 samples, 0.56%) + + + + + mmap64 (1 samples, 0.56%) + + + + + entry_SYSCALL_64_after_hwframe (1 samples, 0.56%) + + + + + do_syscall_64 (1 samples, 0.56%) + + + + + ksys_mmap_pgoff (1 samples, 0.56%) + + + + + vm_mmap_pgoff (1 samples, 0.56%) + + + + + do_mmap (1 samples, 0.56%) + + + + + mmap_region (1 samples, 0.56%) + + + + + perf_event_mmap (1 samples, 0.56%) + + + + + perf_iterate_sb (1 samples, 0.56%) + + + + + perf_iterate_ctx (1 samples, 0.56%) + + + + + perf_event_mmap_output (1 samples, 0.56%) + + + + + hashbrown::set::HashSet<T,S,A>::remove (2 samples, 1.11%) + + + + + core::hash::BuildHasher::hash_one (2 samples, 1.11%) + + + + + crossbeam_channel::context::Context::wait_until (3 samples, 1.67%) + + + + + crossbeam_channel::context::Context::with::{{closure}} (4 samples, 2.22%) + + c.. + + + <crossbeam_channel::channel::Receiver<T> as crossbeam_channel::select::SelectHandle>::register (1 samples, 0.56%) + + + + + crossbeam_channel::waker::SyncWaker::register (1 samples, 0.56%) + + + + + crossbeam_channel::select::Select::select (6 samples, 3.33%) + + cro.. + + + crossbeam_channel::select::run_select (6 samples, 3.33%) + + cro.. + + + <crossbeam_channel::flavors::array::Receiver<T> as crossbeam_channel::select::SelectHandle>::try_select (2 samples, 1.11%) + + + + + s4::processing_loop (43 samples, 23.89%) + + s4::processing_loop + + + alloc::collections::btree::map::BTreeMap<K,V,A>::remove (2 samples, 1.11%) + + + + + alloc::collections::btree::map::entry::OccupiedEntry<K,V,A>::remove_entry (2 samples, 1.11%) + + + + + alloc::collections::btree::remove::<impl alloc::collections::btree::node::Handle<alloc::collections::btree::node::NodeRef<alloc::collections::btree::node::marker::Mut,K,V,alloc::collections::btree::node::marker::LeafOrInternal>,alloc::collections::btree::node::marker::KV>>::remove_kv_tracking (2 samples, 1.11%) + + + + + alloc::collections::btree::remove::<impl alloc::collections::btree::node::Handle<alloc::collections::btree::node::NodeRef<alloc::collections::btree::node::marker::Mut,K,V,alloc::collections::btree::node::marker::Leaf>,alloc::collections::btree::node::marker::KV>>::remove_leaf_kv (2 samples, 1.11%) + + + + + std::rt::lang_start::_{{closure}} (44 samples, 24.44%) + + std::rt::lang_start::_{{closure}} + + + std::sys_common::backtrace::__rust_begin_short_backtrace (44 samples, 24.44%) + + std::sys_common::backtrace::__rust_begi.. + + + s4::main (44 samples, 24.44%) + + s4::main + + + clap_builder::builder::command::Command::get_matches_from (1 samples, 0.56%) + + + + + clap_builder::builder::command::Command::_do_parse (1 samples, 0.56%) + + + + + clap_builder::parser::parser::Parser::get_matches_with (1 samples, 0.56%) + + + + + clap_builder::parser::parser::Parser::add_defaults (1 samples, 0.56%) + + + + + clap_builder::parser::parser::Parser::react (1 samples, 0.56%) + + + + + clap_builder::parser::parser::Parser::push_arg_values (1 samples, 0.56%) + + + + + <P as clap_builder::builder::value_parser::AnyValueParser>::parse_ref (1 samples, 0.56%) + + + + + <F as clap_builder::builder::value_parser::TypedValueParser>::parse_ref (1 samples, 0.56%) + + + + + s4lib::data::datetime::datetime_parse_from_str_w_tz (1 samples, 0.56%) + + + + + chrono::datetime::DateTime<chrono::offset::fixed::FixedOffset>::parse_from_str (1 samples, 0.56%) + + + + + chrono::format::parsed::Parsed::to_datetime (1 samples, 0.56%) + + + + + chrono::format::parsed::Parsed::to_naive_datetime_with_offset (1 samples, 0.56%) + + + + + chrono::format::parsed::Parsed::to_naive_date (1 samples, 0.56%) + + + + + s4 (83 samples, 46.11%) + + s4 + + + _start (49 samples, 27.22%) + + _start + + + __libc_start_main@@GLIBC_2.34 (45 samples, 25.00%) + + __libc_start_main@@GLIBC_2.34 + + + __libc_start_call_main (45 samples, 25.00%) + + __libc_start_call_main + + + main (45 samples, 25.00%) + + main + + + std::rt::lang_start_internal (45 samples, 25.00%) + + std::rt::lang_start_internal + + + <&[u8] as alloc::ffi::c_str::CString::new::SpecNewImpl>::spec_new_impl (1 samples, 0.56%) + + + + + asm_exc_page_fault (1 samples, 0.56%) + + + + + exc_page_fault (1 samples, 0.56%) + + + + + do_user_addr_fault (1 samples, 0.56%) + + + + + handle_mm_fault (1 samples, 0.56%) + + + + + __handle_mm_fault (1 samples, 0.56%) + + + + + filemap_map_pages (1 samples, 0.56%) + + + + + do_set_pte (1 samples, 0.56%) + + + + + page_add_file_rmap (1 samples, 0.56%) + + + + + __mod_lruvec_page_state (1 samples, 0.56%) + + + + + __mod_memcg_lruvec_state (1 samples, 0.56%) + + + + + cgroup_rstat_updated (1 samples, 0.56%) + + + + + perf-exec (11 samples, 6.11%) + + perf-exec + + + entry_SYSCALL_64_after_hwframe (11 samples, 6.11%) + + entry_SY.. + + + do_syscall_64 (11 samples, 6.11%) + + do_sysca.. + + + __x64_sys_execve (11 samples, 6.11%) + + __x64_sy.. + + + do_execveat_common.isra.0 (11 samples, 6.11%) + + do_execv.. + + + bprm_execve (11 samples, 6.11%) + + bprm_exe.. + + + load_elf_binary (11 samples, 6.11%) + + load_elf.. + + + begin_new_exec (11 samples, 6.11%) + + begin_ne.. + + + perf_event_exec (11 samples, 6.11%) + + perf_eve.. + + + __raw_callee_save___pv_queued_spin_unlock (11 samples, 6.11%) + + __raw_ca.. + + + [libsystemd.so.0.32.0] (2 samples, 1.11%) + + + + + [libsystemd.so.0.32.0] (8 samples, 4.44%) + + [libs.. + + + [libsystemd.so.0.32.0] (11 samples, 6.11%) + + [libsyst.. + + + sd_journal_enumerate_available_data (13 samples, 7.22%) + + sd_journal.. + + + sd_journal_enumerate_data (13 samples, 7.22%) + + sd_journal.. + + + __strlen_evex (1 samples, 0.56%) + + + + + [libsystemd.so.0.32.0] (6 samples, 3.33%) + + [li.. + + + [libsystemd.so.0.32.0] (9 samples, 5.00%) + + [libsy.. + + + [libsystemd.so.0.32.0] (10 samples, 5.56%) + + [libsys.. + + + sd_journal_get_data (11 samples, 6.11%) + + sd_journ.. + + + core::unicode::unicode_data::grapheme_extend::lookup (1 samples, 0.56%) + + + + + <str as core::fmt::Debug>::fmt (2 samples, 1.11%) + + + + + s4lib::readers::journalreader::JournalReader::Error_from_Errno (3 samples, 1.67%) + + + + + alloc::fmt::format::format_inner (3 samples, 1.67%) + + + + + core::fmt::write (3 samples, 1.67%) + + + + + <&mut W as core::fmt::Write>::write_str (1 samples, 0.56%) + + + + + alloc::raw_vec::RawVec<T,A>::reserve::do_reserve_and_handle (1 samples, 0.56%) + + + + + alloc::raw_vec::finish_grow (1 samples, 0.56%) + + + + + realloc (1 samples, 0.56%) + + + + + asm_exc_page_fault (1 samples, 0.56%) + + + + + exc_page_fault (1 samples, 0.56%) + + + + + do_user_addr_fault (1 samples, 0.56%) + + + + + handle_mm_fault (1 samples, 0.56%) + + + + + __handle_mm_fault (1 samples, 0.56%) + + + + + filemap_map_pages (1 samples, 0.56%) + + + + + next_uptodate_page (1 samples, 0.56%) + + + + + [libsystemd.so.0.32.0] (1 samples, 0.56%) + + + + + [libsystemd.so.0.32.0] (2 samples, 1.11%) + + + + + [libsystemd.so.0.32.0] (4 samples, 2.22%) + + [.. + + + [libsystemd.so.0.32.0] (4 samples, 2.22%) + + [.. + + + s4lib::readers::journalreader::JournalReader::next_common (19 samples, 10.56%) + + s4lib::readers:.. + + + [libsystemd.so.0.32.0] (5 samples, 2.78%) + + [l.. + + + [libsystemd.so.0.32.0] (5 samples, 2.78%) + + [l.. + + + nix::errno::consts::from_i32 (1 samples, 0.56%) + + + + + memchr::arch::x86_64::memchr::memchr_raw::find_avx2 (2 samples, 1.11%) + + + + + memchr::arch::x86_64::avx2::memchr::One::find_raw (2 samples, 1.11%) + + + + + chrono::format::formatting::DelayedFormat<I>::format_numeric::write_two (1 samples, 0.56%) + + + + + alloc::raw_vec::RawVec<T,A>::reserve_for_push (1 samples, 0.56%) + + + + + alloc::raw_vec::finish_grow (1 samples, 0.56%) + + + + + realloc (1 samples, 0.56%) + + + + + _int_realloc (1 samples, 0.56%) + + + + + s4lib::readers::journalreader::JournalReader::next_short (39 samples, 21.67%) + + s4lib::readers::journalreader::Jou.. + + + <chrono::format::formatting::DelayedFormat<I> as core::fmt::Display>::fmt (4 samples, 2.22%) + + <.. + + + s4lib::readers::journalreader::JournalReader::new (1 samples, 0.56%) + + + + + sd_journal_open_files (1 samples, 0.56%) + + + + + [libsystemd.so.0.32.0] (1 samples, 0.56%) + + + + + [libsystemd.so.0.32.0] (1 samples, 0.56%) + + + + + crossbeam_channel::context::Context::with::{{closure}} (1 samples, 0.56%) + + + + + std::thread::park (1 samples, 0.56%) + + + + + syscall (1 samples, 0.56%) + + + + + entry_SYSCALL_64_after_hwframe (1 samples, 0.56%) + + + + + do_syscall_64 (1 samples, 0.56%) + + + + + __x64_sys_futex (1 samples, 0.56%) + + + + + do_futex (1 samples, 0.56%) + + + + + futex_wait (1 samples, 0.56%) + + + + + futex_wait_queue_me (1 samples, 0.56%) + + + + + schedule (1 samples, 0.56%) + + + + + __schedule (1 samples, 0.56%) + + + + + clone3 (42 samples, 23.33%) + + clone3 + + + start_thread (42 samples, 23.33%) + + start_thread + + + std::sys::unix::thread::Thread::new::thread_start (42 samples, 23.33%) + + std::sys::unix::thread::Thread::new::.. + + + core::ops::function::FnOnce::call_once{{vtable.shim}} (42 samples, 23.33%) + + core::ops::function::FnOnce::call_onc.. + + + std::sys_common::backtrace::__rust_begin_short_backtrace (42 samples, 23.33%) + + std::sys_common::backtrace::__rust_be.. + + + s4::exec_fileprocessor_thread (42 samples, 23.33%) + + s4::exec_fileprocessor_thread + + + crossbeam_channel::channel::Sender<T>::send (2 samples, 1.11%) + + + + + asm_exc_page_fault (1 samples, 0.56%) + + + + + exc_page_fault (1 samples, 0.56%) + + + + + do_user_addr_fault (1 samples, 0.56%) + + + + + handle_mm_fault (1 samples, 0.56%) + + + + + __handle_mm_fault (1 samples, 0.56%) + + + + + __mem_cgroup_charge (1 samples, 0.56%) + + + + + charge_memcg (1 samples, 0.56%) + + + + + mem_cgroup_charge_statistics.constprop.0 (1 samples, 0.56%) + + + + + ext4_file_write_iter (1 samples, 0.56%) + + + + + ext4_reserve_inode_write (1 samples, 0.56%) + + + + + __ext4_journal_get_write_access (1 samples, 0.56%) + + + + + ext4_dirty_inode (2 samples, 1.11%) + + + + + __ext4_mark_inode_dirty (2 samples, 1.11%) + + + + + ext4_mark_iloc_dirty (1 samples, 0.56%) + + + + + ext4_inode_csum_set (1 samples, 0.56%) + + + + + ext4_inode_csum (1 samples, 0.56%) + + + + + chksum_update (1 samples, 0.56%) + + + + + crc32_body (1 samples, 0.56%) + + + + + stop_this_handle (1 samples, 0.56%) + + + + + __mark_inode_dirty (4 samples, 2.22%) + + _.. + + + __ext4_journal_stop (2 samples, 1.11%) + + + + + jbd2_journal_stop (2 samples, 1.11%) + + + + + kmem_cache_free.part.0 (1 samples, 0.56%) + + + + + generic_write_end (6 samples, 3.33%) + + gen.. + + + __block_commit_write.constprop.0.isra.0 (2 samples, 1.11%) + + + + + mark_buffer_dirty (2 samples, 1.11%) + + + + + lru_cache_add (1 samples, 0.56%) + + + + + __pagevec_lru_add (1 samples, 0.56%) + + + + + release_pages (1 samples, 0.56%) + + + + + add_to_page_cache_lru (2 samples, 1.11%) + + + + + __add_to_page_cache_locked (1 samples, 0.56%) + + + + + rmqueue_bulk (3 samples, 1.67%) + + + + + __list_del_entry_valid (3 samples, 1.67%) + + + + + grab_cache_page_write_begin (6 samples, 3.33%) + + gra.. + + + pagecache_get_page (6 samples, 3.33%) + + pag.. + + + __alloc_pages (4 samples, 2.22%) + + _.. + + + get_page_from_freelist (4 samples, 2.22%) + + g.. + + + ext4_claim_free_clusters (1 samples, 0.56%) + + + + + ext4_da_get_block_prep (2 samples, 1.11%) + + + + + ext4_da_reserve_space (2 samples, 1.11%) + + + + + __dquot_alloc_space (1 samples, 0.56%) + + + + + __block_write_begin_int (3 samples, 1.67%) + + + + + ext4_da_write_begin (10 samples, 5.56%) + + ext4_da.. + + + std::io::buffered::bufwriter::BufWriter<W>::write_all_cold (22 samples, 12.22%) + + std::io::buffered:.. + + + std::io::Write::write_all (22 samples, 12.22%) + + std::io::Write::wr.. + + + std::os::unix::net::datagram::UnixDatagram::send (22 samples, 12.22%) + + std::os::unix::net.. + + + __GI___libc_write (22 samples, 12.22%) + + __GI___libc_write + + + entry_SYSCALL_64_after_hwframe (22 samples, 12.22%) + + entry_SYSCALL_64_a.. + + + do_syscall_64 (22 samples, 12.22%) + + do_syscall_64 + + + ksys_write (22 samples, 12.22%) + + ksys_write + + + vfs_write (22 samples, 12.22%) + + vfs_write + + + new_sync_write (22 samples, 12.22%) + + new_sync_write + + + ext4_buffered_write_iter (21 samples, 11.67%) + + ext4_buffered_wri.. + + + generic_perform_write (21 samples, 11.67%) + + generic_perform_w.. + + + copy_page_from_iter_atomic (5 samples, 2.78%) + + co.. + + + copy_user_enhanced_fast_string (5 samples, 2.78%) + + co.. + + + cfree@GLIBC_2.2.5 (1 samples, 0.56%) + + + + + __munmap (1 samples, 0.56%) + + + + + entry_SYSCALL_64_after_hwframe (1 samples, 0.56%) + + + + + do_syscall_64 (1 samples, 0.56%) + + + + + __x64_sys_munmap (1 samples, 0.56%) + + + + + __vm_munmap (1 samples, 0.56%) + + + + + __do_munmap (1 samples, 0.56%) + + + + + unmap_region (1 samples, 0.56%) + + + + + unmap_vmas (1 samples, 0.56%) + + + + + unmap_page_range (1 samples, 0.56%) + + + + + page_remove_rmap (1 samples, 0.56%) + + + + + __mod_lruvec_page_state (1 samples, 0.56%) + + + + + __mod_lruvec_state (1 samples, 0.56%) + + + + + std::io::default_read_exact (1 samples, 0.56%) + + + + + <std::io::buffered::bufreader::BufReader<R> as std::io::Read>::read (1 samples, 0.56%) + + + + + <std::process::ChildStdout as std::io::Read>::read (1 samples, 0.56%) + + + + + read (1 samples, 0.56%) + + + + + entry_SYSCALL_64_after_hwframe (1 samples, 0.56%) + + + + + do_syscall_64 (1 samples, 0.56%) + + + + + ksys_read (1 samples, 0.56%) + + + + + vfs_read (1 samples, 0.56%) + + + + + new_sync_read (1 samples, 0.56%) + + + + + filemap_read (1 samples, 0.56%) + + + + + copy_page_to_iter (1 samples, 0.56%) + + + + + copy_user_enhanced_fast_string (1 samples, 0.56%) + + + + + lru_cache_add (1 samples, 0.56%) + + + + + __pagevec_lru_add (1 samples, 0.56%) + + + + + clear_subpage (1 samples, 0.56%) + + + + + clear_page_erms (1 samples, 0.56%) + + + + + do_huge_pmd_anonymous_page (2 samples, 1.11%) + + + + + clear_huge_page (2 samples, 1.11%) + + + + + __mem_cgroup_charge (1 samples, 0.56%) + + + + + get_mem_cgroup_from_mm (1 samples, 0.56%) + + + + + handle_mm_fault (5 samples, 2.78%) + + ha.. + + + __handle_mm_fault (5 samples, 2.78%) + + __.. + + + __alloc_pages (1 samples, 0.56%) + + + + + get_page_from_freelist (1 samples, 0.56%) + + + + + kernel_init_free_pages.part.0 (1 samples, 0.56%) + + + + + clear_page_erms (1 samples, 0.56%) + + + + + do_user_addr_fault (6 samples, 3.33%) + + do_.. + + + find_vma (1 samples, 0.56%) + + + + + asm_exc_page_fault (8 samples, 4.44%) + + asm_e.. + + + exc_page_fault (8 samples, 4.44%) + + exc_p.. + + + __memset_avx512_unaligned_erms (10 samples, 5.56%) + + __memse.. + + + __memmove_avx512_unaligned_erms (1 samples, 0.56%) + + + + + <twox_hash::thirty_two::XxHash32 as core::hash::Hasher>::write (5 samples, 2.78%) + + <t.. + + + all (180 samples, 100%) + + + + + RHE_91_system.j (86 samples, 47.78%) + + RHE_91_system.j + + + [unknown] (43 samples, 23.89%) + + [unknown] + + + s4lib::readers::filedecompressor::decompress_to_ntf (43 samples, 23.89%) + + s4lib::readers::filedecompressor::deco.. + + + <lz4_flex::frame::decompress::FrameDecoder<R> as std::io::Read>::read (20 samples, 11.11%) + + <lz4_flex::frame.. + + + diff --git a/releases/0.7.75/flamegraph-journal-tar.svg b/releases/0.7.75/flamegraph-journal-tar.svg new file mode 100644 index 00000000..d2f2e7df --- /dev/null +++ b/releases/0.7.75/flamegraph-journal-tar.svg @@ -0,0 +1,2512 @@ + + + + + + + + + + + + + + + Flame Graph: super_speedy_syslog_searcher 0.7.75; git: d799548f; -freq 8000; created 20240707T231108-0700; flamegraph-flamegraph 0.6.5; rustc 1.70.0
; command: s4 ./logs/programs/journal/RHE_91_system.tar + + Reset Zoom + Search + + + + __raw_callee_save___pv_queued_spin_unlock (11 samples, 6.40%) + + __raw_ca.. + + + ret_from_fork (22 samples, 12.79%) + + ret_from_fork + + + schedule_tail (22 samples, 12.79%) + + schedule_tail + + + finish_task_switch.isra.0 (22 samples, 12.79%) + + finish_task_switch... + + + __perf_event_task_sched_in (22 samples, 12.79%) + + __perf_event_task_s.. + + + try_to_free_buffers (1 samples, 0.58%) + + + + + kmem_cache_free.part.0 (1 samples, 0.58%) + + + + + __slab_free.constprop.0 (1 samples, 0.58%) + + + + + jbd2_journal_try_to_free_buffers (1 samples, 0.58%) + + + + + jbd2_journal_grab_journal_head (1 samples, 0.58%) + + + + + truncate_cleanup_page (3 samples, 1.74%) + + + + + block_invalidatepage (1 samples, 0.58%) + + + + + find_lock_entries (1 samples, 0.58%) + + + + + task_work_run (5 samples, 2.91%) + + ta.. + + + __fput (5 samples, 2.91%) + + __.. + + + dput (5 samples, 2.91%) + + dp.. + + + __dentry_kill (5 samples, 2.91%) + + __.. + + + evict (5 samples, 2.91%) + + ev.. + + + ext4_evict_inode (5 samples, 2.91%) + + ex.. + + + truncate_inode_pages_range (5 samples, 2.91%) + + tr.. + + + __pagevec_release (1 samples, 0.58%) + + + + + release_pages (1 samples, 0.58%) + + + + + free_unref_page_list (1 samples, 0.58%) + + + + + free_pcppages_bulk (1 samples, 0.58%) + + + + + __x64_sys_exit_group (7 samples, 4.07%) + + __x6.. + + + do_group_exit (7 samples, 4.07%) + + do_g.. + + + do_exit (7 samples, 4.07%) + + do_e.. + + + mmput (2 samples, 1.16%) + + + + + exit_mmap (2 samples, 1.16%) + + + + + unmap_vmas (2 samples, 1.16%) + + + + + unmap_page_range (2 samples, 1.16%) + + + + + page_remove_rmap (2 samples, 1.16%) + + + + + entry_SYSCALL_64_after_hwframe (8 samples, 4.65%) + + entry.. + + + do_syscall_64 (8 samples, 4.65%) + + do_sy.. + + + __x64_sys_execve (1 samples, 0.58%) + + + + + do_execveat_common.isra.0 (1 samples, 0.58%) + + + + + bprm_execve (1 samples, 0.58%) + + + + + load_elf_binary (1 samples, 0.58%) + + + + + __clear_user (1 samples, 0.58%) + + + + + __mprotect (1 samples, 0.58%) + + + + + __x86_indirect_thunk_r12 (1 samples, 0.58%) + + + + + start_thread (2 samples, 1.16%) + + + + + std::sys::unix::thread::Thread::new::thread_start (2 samples, 1.16%) + + + + + std::sys::unix::stack_overflow::imp::make_handler (2 samples, 1.16%) + + + + + __mmap (1 samples, 0.58%) + + + + + entry_SYSCALL_64_after_hwframe (1 samples, 0.58%) + + + + + do_syscall_64 (1 samples, 0.58%) + + + + + vm_mmap_pgoff (1 samples, 0.58%) + + + + + do_mmap (1 samples, 0.58%) + + + + + get_unmapped_area (1 samples, 0.58%) + + + + + arch_get_unmapped_area_topdown (1 samples, 0.58%) + + + + + vm_unmapped_area (1 samples, 0.58%) + + + + + clone3 (3 samples, 1.74%) + + + + + entry_SYSCALL_64_after_hwframe (1 samples, 0.58%) + + + + + do_syscall_64 (1 samples, 0.58%) + + + + + __do_sys_clone3 (1 samples, 0.58%) + + + + + kernel_clone (1 samples, 0.58%) + + + + + copy_process (1 samples, 0.58%) + + + + + account_kernel_stack.isra.0 (1 samples, 0.58%) + + + + + _dl_lookup_symbol_x (1 samples, 0.58%) + + + + + do_lookup_x (1 samples, 0.58%) + + + + + _dl_relocate_object (2 samples, 1.16%) + + + + + _dl_start (3 samples, 1.74%) + + + + + _dl_sysdep_start (3 samples, 1.74%) + + + + + dl_main (3 samples, 1.74%) + + + + + _dl_map_object_deps (1 samples, 0.58%) + + + + + _dl_catch_exception (1 samples, 0.58%) + + + + + openaux (1 samples, 0.58%) + + + + + _dl_map_object (1 samples, 0.58%) + + + + + open_verify.constprop.0 (1 samples, 0.58%) + + + + + __GI___open64_nocancel (1 samples, 0.58%) + + + + + entry_SYSCALL_64_after_hwframe (1 samples, 0.58%) + + + + + do_syscall_64 (1 samples, 0.58%) + + + + + __x64_sys_openat (1 samples, 0.58%) + + + + + do_sys_openat2 (1 samples, 0.58%) + + + + + getname_flags.part.0 (1 samples, 0.58%) + + + + + <&std::io::stdio::Stdout as std::io::Write>::write (1 samples, 0.58%) + + + + + <std::io::stdio::StdoutLock as std::io::Write>::write (1 samples, 0.58%) + + + + + __GI___libc_write (1 samples, 0.58%) + + + + + entry_SYSCALL_64_after_hwframe (1 samples, 0.58%) + + + + + do_syscall_64 (1 samples, 0.58%) + + + + + ksys_write (1 samples, 0.58%) + + + + + vfs_write (1 samples, 0.58%) + + + + + std::io::Write::write_all (2 samples, 1.16%) + + + + + <termcolor::LossyStandardStream<W> as std::io::Write>::write (2 samples, 1.16%) + + + + + <std::io::stdio::Stdout as std::io::Write>::write (2 samples, 1.16%) + + + + + <termcolor::LossyStandardStream<W> as termcolor::WriteColor>::set_color (1 samples, 0.58%) + + + + + termcolor::Ansi<W>::write_color (1 samples, 0.58%) + + + + + write_null (1 samples, 0.58%) + + + + + srso_alias_safe_ret (1 samples, 0.58%) + + + + + syscall_return_via_sysret (1 samples, 0.58%) + + + + + syscall_exit_to_user_mode (1 samples, 0.58%) + + + + + fsnotify (3 samples, 1.74%) + + + + + __fsnotify_parent (4 samples, 2.33%) + + _.. + + + vfs_write (10 samples, 5.81%) + + vfs_wri.. + + + srso_alias_return_thunk (2 samples, 1.16%) + + + + + srso_alias_safe_ret (2 samples, 1.16%) + + + + + do_syscall_64 (14 samples, 8.14%) + + do_syscall_.. + + + ksys_write (13 samples, 7.56%) + + ksys_write + + + __fdget_pos (3 samples, 1.74%) + + + + + __fget_light (1 samples, 0.58%) + + + + + __fget_files (1 samples, 0.58%) + + + + + entry_SYSCALL_64_after_hwframe (16 samples, 9.30%) + + entry_SYSCALL.. + + + entry_SYSCALL_64 (1 samples, 0.58%) + + + + + __GI___pthread_disable_asynccancel (1 samples, 0.58%) + + + + + std::io::buffered::bufwriter::BufWriter<W>::flush_buf (21 samples, 12.21%) + + std::io::buffered:.. + + + __GI___libc_write (21 samples, 12.21%) + + __GI___libc_write + + + s4lib::printer::printers::PrinterLogMessage::print_journalentry_color (26 samples, 15.12%) + + s4lib::printer::printer.. + + + <std::io::stdio::Stdout as std::io::Write>::flush (23 samples, 13.37%) + + <std::io::stdio::Std.. + + + <&std::io::stdio::Stdout as std::io::Write>::flush (23 samples, 13.37%) + + <&std::io::stdio::St.. + + + _dl_relocate_object (1 samples, 0.58%) + + + + + mprotect (1 samples, 0.58%) + + + + + entry_SYSCALL_64_after_hwframe (1 samples, 0.58%) + + + + + do_syscall_64 (1 samples, 0.58%) + + + + + __x64_sys_mprotect (1 samples, 0.58%) + + + + + do_mprotect_pkey (1 samples, 0.58%) + + + + + mprotect_fixup (1 samples, 0.58%) + + + + + perf_event_mmap (1 samples, 0.58%) + + + + + perf_iterate_sb (1 samples, 0.58%) + + + + + perf_iterate_ctx (1 samples, 0.58%) + + + + + perf_event_mmap_output (1 samples, 0.58%) + + + + + __perf_event__output_id_sample (1 samples, 0.58%) + + + + + s4lib::libload::systemd_dlopen2::load_library_systemd (2 samples, 1.16%) + + + + + dlopen2::wrapper::container::Container<T>::load (2 samples, 1.16%) + + + + + dlopen2::raw::common::Library::open (2 samples, 1.16%) + + + + + dlopen@GLIBC_2.2.5 (2 samples, 1.16%) + + + + + _dlerror_run (2 samples, 1.16%) + + + + + _dl_catch_error (2 samples, 1.16%) + + + + + _dl_catch_exception (2 samples, 1.16%) + + + + + dlopen_doit (2 samples, 1.16%) + + + + + _dl_open (2 samples, 1.16%) + + + + + _dl_catch_exception (2 samples, 1.16%) + + + + + dl_open_worker (2 samples, 1.16%) + + + + + _dl_catch_exception (2 samples, 1.16%) + + + + + dl_open_worker_begin (2 samples, 1.16%) + + + + + _dl_map_object_deps (1 samples, 0.58%) + + + + + _dl_catch_exception (1 samples, 0.58%) + + + + + openaux (1 samples, 0.58%) + + + + + _dl_map_object (1 samples, 0.58%) + + + + + open_verify.constprop.0 (1 samples, 0.58%) + + + + + __GI___open64_nocancel (1 samples, 0.58%) + + + + + entry_SYSCALL_64_after_hwframe (1 samples, 0.58%) + + + + + do_syscall_64 (1 samples, 0.58%) + + + + + __x64_sys_openat (1 samples, 0.58%) + + + + + do_sys_openat2 (1 samples, 0.58%) + + + + + do_filp_open (1 samples, 0.58%) + + + + + path_openat (1 samples, 0.58%) + + + + + lookup_fast (1 samples, 0.58%) + + + + + __d_lookup_rcu (1 samples, 0.58%) + + + + + crossbeam_channel::channel::read (1 samples, 0.58%) + + + + + crossbeam_channel::waker::SyncWaker::notify (1 samples, 0.58%) + + + + + crossbeam_channel::select::SelectedOperation::recv (2 samples, 1.16%) + + + + + __memmove_avx512_unaligned_erms (1 samples, 0.58%) + + + + + crossbeam_channel::context::Context::wait_until (2 samples, 1.16%) + + + + + <crossbeam_channel::flavors::array::Receiver<T> as crossbeam_channel::select::SelectHandle>::try_select (1 samples, 0.58%) + + + + + <crossbeam_channel::channel::Receiver<T> as crossbeam_channel::select::SelectHandle>::unregister (1 samples, 0.58%) + + + + + crossbeam_channel::waker::SyncWaker::unregister (1 samples, 0.58%) + + + + + crossbeam_channel::select::Select::select (5 samples, 2.91%) + + cr.. + + + crossbeam_channel::select::run_select (5 samples, 2.91%) + + cr.. + + + crossbeam_channel::context::Context::with::{{closure}} (5 samples, 2.91%) + + cr.. + + + cfree@GLIBC_2.2.5 (1 samples, 0.58%) + + + + + _int_free (1 samples, 0.58%) + + + + + alloc::collections::btree::remove::<impl alloc::collections::btree::node::Handle<alloc::collections::btree::node::NodeRef<alloc::collections::btree::node::marker::Mut,K,V,alloc::collections::btree::node::marker::LeafOrInternal>,alloc::collections::btree::node::marker::KV>>::remove_kv_tracking (1 samples, 0.58%) + + + + + alloc::collections::btree::remove::<impl alloc::collections::btree::node::Handle<alloc::collections::btree::node::NodeRef<alloc::collections::btree::node::marker::Mut,K,V,alloc::collections::btree::node::marker::Leaf>,alloc::collections::btree::node::marker::KV>>::remove_leaf_kv (1 samples, 0.58%) + + + + + alloc::collections::btree::map::BTreeMap<K,V,A>::remove (2 samples, 1.16%) + + + + + alloc::collections::btree::map::entry::OccupiedEntry<K,V,A>::remove_entry (2 samples, 1.16%) + + + + + s4::processing_loop (41 samples, 23.84%) + + s4::processing_loop + + + std::rt::lang_start::_{{closure}} (42 samples, 24.42%) + + std::rt::lang_start::_{{closure}} + + + std::sys_common::backtrace::__rust_begin_short_backtrace (42 samples, 24.42%) + + std::sys_common::backtrace::__rust_begi.. + + + s4::main (42 samples, 24.42%) + + s4::main + + + clap_builder::builder::command::Command::get_matches_from (1 samples, 0.58%) + + + + + clap_builder::builder::command::Command::_do_parse (1 samples, 0.58%) + + + + + clap_builder::parser::parser::Parser::get_matches_with (1 samples, 0.58%) + + + + + clap_builder::parser::parser::Parser::resolve_pending (1 samples, 0.58%) + + + + + clap_builder::parser::parser::Parser::react (1 samples, 0.58%) + + + + + clap_builder::parser::parser::Parser::start_custom_arg (1 samples, 0.58%) + + + + + clap_builder::parser::matches::matched_arg::MatchedArg::new_val_group (1 samples, 0.58%) + + + + + alloc::raw_vec::RawVec<T,A>::reserve_for_push (1 samples, 0.58%) + + + + + alloc::raw_vec::finish_grow (1 samples, 0.58%) + + + + + malloc (1 samples, 0.58%) + + + + + _int_malloc (1 samples, 0.58%) + + + + + _start (46 samples, 26.74%) + + _start + + + __libc_start_main@@GLIBC_2.34 (43 samples, 25.00%) + + __libc_start_main@@GLIBC_2.34 + + + __libc_start_call_main (43 samples, 25.00%) + + __libc_start_call_main + + + main (43 samples, 25.00%) + + main + + + std::rt::lang_start_internal (43 samples, 25.00%) + + std::rt::lang_start_internal + + + pthread_getattr_np@@GLIBC_2.32 (1 samples, 0.58%) + + + + + __getdelim (1 samples, 0.58%) + + + + + _IO_file_underflow@@GLIBC_2.2.5 (1 samples, 0.58%) + + + + + __read_nocancel (1 samples, 0.58%) + + + + + entry_SYSCALL_64_after_hwframe (1 samples, 0.58%) + + + + + do_syscall_64 (1 samples, 0.58%) + + + + + ksys_read (1 samples, 0.58%) + + + + + vfs_read (1 samples, 0.58%) + + + + + seq_read (1 samples, 0.58%) + + + + + seq_read_iter (1 samples, 0.58%) + + + + + show_map (1 samples, 0.58%) + + + + + show_map_vma (1 samples, 0.58%) + + + + + seq_path (1 samples, 0.58%) + + + + + mangle_path (1 samples, 0.58%) + + + + + strchr (1 samples, 0.58%) + + + + + tar::archive::EntriesFields::next_entry_raw (5 samples, 2.91%) + + ta.. + + + <std::process::ChildStdout as std::io::Read>::read (5 samples, 2.91%) + + <s.. + + + read (5 samples, 2.91%) + + re.. + + + entry_SYSCALL_64_after_hwframe (5 samples, 2.91%) + + en.. + + + do_syscall_64 (5 samples, 2.91%) + + do.. + + + ksys_read (5 samples, 2.91%) + + ks.. + + + vfs_read (5 samples, 2.91%) + + vf.. + + + new_sync_read (5 samples, 2.91%) + + ne.. + + + filemap_read (5 samples, 2.91%) + + fi.. + + + copy_page_to_iter (5 samples, 2.91%) + + co.. + + + copy_user_enhanced_fast_string (5 samples, 2.91%) + + co.. + + + [unknown] (6 samples, 3.49%) + + [un.. + + + <std::io::stdio::StdoutLock as std::io::Write>::write (1 samples, 0.58%) + + + + + __GI___libc_write (1 samples, 0.58%) + + + + + entry_SYSCALL_64 (1 samples, 0.58%) + + + + + s4 (87 samples, 50.58%) + + s4 + + + [[heap]] (2 samples, 1.16%) + + + + + __GI___libc_write (2 samples, 1.16%) + + + + + entry_SYSCALL_64 (2 samples, 1.16%) + + + + + perf_event_exec (14 samples, 8.14%) + + perf_event_.. + + + x86_pmu_enable_all (14 samples, 8.14%) + + x86_pmu_ena.. + + + perf-exec (15 samples, 8.72%) + + perf-exec + + + entry_SYSCALL_64_after_hwframe (15 samples, 8.72%) + + entry_SYSCAL.. + + + do_syscall_64 (15 samples, 8.72%) + + do_syscall_64 + + + __x64_sys_execve (15 samples, 8.72%) + + __x64_sys_ex.. + + + do_execveat_common.isra.0 (15 samples, 8.72%) + + do_execveat_.. + + + bprm_execve (15 samples, 8.72%) + + bprm_execve + + + load_elf_binary (15 samples, 8.72%) + + load_elf_bin.. + + + begin_new_exec (15 samples, 8.72%) + + begin_new_ex.. + + + __set_task_comm (1 samples, 0.58%) + + + + + __raw_callee_save___pv_queued_spin_unlock (1 samples, 0.58%) + + + + + ctrl-c (1 samples, 0.58%) + + + + + entry_SYSCALL_64_after_hwframe (1 samples, 0.58%) + + + + + do_syscall_64 (1 samples, 0.58%) + + + + + syscall_exit_to_user_mode (1 samples, 0.58%) + + + + + exit_to_user_mode_prepare (1 samples, 0.58%) + + + + + arch_do_signal_or_restart (1 samples, 0.58%) + + + + + get_signal (1 samples, 0.58%) + + + + + do_group_exit (1 samples, 0.58%) + + + + + do_exit (1 samples, 0.58%) + + + + + acct_process (1 samples, 0.58%) + + + + + do_acct_process (1 samples, 0.58%) + + + + + __kernel_write (1 samples, 0.58%) + + + + + ext4_buffered_write_iter (1 samples, 0.58%) + + + + + file_update_time (1 samples, 0.58%) + + + + + generic_update_time (1 samples, 0.58%) + + + + + __mark_inode_dirty (1 samples, 0.58%) + + + + + ext4_dirty_inode (1 samples, 0.58%) + + + + + __ext4_mark_inode_dirty (1 samples, 0.58%) + + + + + ext4_mark_iloc_dirty (1 samples, 0.58%) + + + + + ext4_inode_csum_set (1 samples, 0.58%) + + + + + ext4_inode_csum (1 samples, 0.58%) + + + + + chksum_update (1 samples, 0.58%) + + + + + crc32_body (1 samples, 0.58%) + + + + + [libsystemd.so.0.32.0] (3 samples, 1.74%) + + + + + [libsystemd.so.0.32.0] (7 samples, 4.07%) + + [lib.. + + + [libsystemd.so.0.32.0] (10 samples, 5.81%) + + [libsys.. + + + sd_journal_enumerate_available_data (12 samples, 6.98%) + + sd_journa.. + + + sd_journal_enumerate_data (12 samples, 6.98%) + + sd_journa.. + + + sd_journal_restart_data (1 samples, 0.58%) + + + + + sd_journal_get_realtime_usec (1 samples, 0.58%) + + + + + [libsystemd.so.0.32.0] (1 samples, 0.58%) + + + + + asm_exc_page_fault (3 samples, 1.74%) + + + + + exc_page_fault (3 samples, 1.74%) + + + + + do_user_addr_fault (3 samples, 1.74%) + + + + + handle_mm_fault (3 samples, 1.74%) + + + + + __handle_mm_fault (3 samples, 1.74%) + + + + + filemap_map_pages (3 samples, 1.74%) + + + + + next_uptodate_page (3 samples, 1.74%) + + + + + __strlen_evex (1 samples, 0.58%) + + + + + [libsystemd.so.0.32.0] (4 samples, 2.33%) + + [.. + + + [libsystemd.so.0.32.0] (6 samples, 3.49%) + + [li.. + + + sd_journal_get_data (11 samples, 6.40%) + + sd_journ.. + + + [libsystemd.so.0.32.0] (8 samples, 4.65%) + + [libs.. + + + malloc (1 samples, 0.58%) + + + + + _int_malloc (1 samples, 0.58%) + + + + + s4lib::readers::journalreader::JournalReader::Error_from_Errno (2 samples, 1.16%) + + + + + alloc::fmt::format::format_inner (2 samples, 1.16%) + + + + + core::fmt::write (1 samples, 0.58%) + + + + + <str as core::fmt::Debug>::fmt (1 samples, 0.58%) + + + + + core::unicode::printable::is_printable (1 samples, 0.58%) + + + + + [libsystemd.so.0.32.0] (1 samples, 0.58%) + + + + + [libsystemd.so.0.32.0] (1 samples, 0.58%) + + + + + [libsystemd.so.0.32.0] (1 samples, 0.58%) + + + + + s4lib::readers::journalreader::JournalReader::next_common (17 samples, 9.88%) + + s4lib::readers.. + + + [libsystemd.so.0.32.0] (2 samples, 1.16%) + + + + + memchr::arch::x86_64::memchr::memchr_raw::find_avx2 (1 samples, 0.58%) + + + + + memchr::arch::x86_64::avx2::memchr::One::find_raw (1 samples, 0.58%) + + + + + memchr::arch::x86_64::avx2::memchr::One::find_raw_avx2 (1 samples, 0.58%) + + + + + _int_malloc (1 samples, 0.58%) + + + + + malloc (2 samples, 1.16%) + + + + + __lll_lock_wait_private (1 samples, 0.58%) + + + + + entry_SYSCALL_64_after_hwframe (1 samples, 0.58%) + + + + + do_syscall_64 (1 samples, 0.58%) + + + + + __x64_sys_futex (1 samples, 0.58%) + + + + + do_futex (1 samples, 0.58%) + + + + + futex_wait (1 samples, 0.58%) + + + + + futex_wait_setup (1 samples, 0.58%) + + + + + hash_futex (1 samples, 0.58%) + + + + + chrono::format::formatting::DelayedFormat<I>::new_with_offset (2 samples, 1.16%) + + + + + realloc (1 samples, 0.58%) + + + + + _int_realloc (1 samples, 0.58%) + + + + + chrono::format::formatting::DelayedFormat<I>::format_numeric::write_two (2 samples, 1.16%) + + + + + alloc::raw_vec::RawVec<T,A>::reserve_for_push (2 samples, 1.16%) + + + + + alloc::raw_vec::finish_grow (2 samples, 1.16%) + + + + + <chrono::format::formatting::DelayedFormat<I> as core::fmt::Display>::fmt (5 samples, 2.91%) + + <c.. + + + std::time::SystemTime::duration_since (1 samples, 0.58%) + + + + + std::sys::unix::time::Timespec::sub_timespec (1 samples, 0.58%) + + + + + s4lib::readers::journalreader::JournalReader::next_short (41 samples, 23.84%) + + s4lib::readers::journalreader::Journal.. + + + <chrono::datetime::DateTime<chrono::offset::utc::Utc> as core::convert::From<std::time::SystemTime>>::from (2 samples, 1.16%) + + + + + chrono::naive::date::NaiveDate::from_num_days_from_ce_opt (1 samples, 0.58%) + + + + + std::sys::unix::thread::Thread::new::thread_start (42 samples, 24.42%) + + std::sys::unix::thread::Thread::new::th.. + + + core::ops::function::FnOnce::call_once{{vtable.shim}} (42 samples, 24.42%) + + core::ops::function::FnOnce::call_once{.. + + + std::sys_common::backtrace::__rust_begin_short_backtrace (42 samples, 24.42%) + + std::sys_common::backtrace::__rust_begi.. + + + s4::exec_fileprocessor_thread (42 samples, 24.42%) + + s4::exec_fileprocessor_thread + + + crossbeam_channel::channel::Sender<T>::send (1 samples, 0.58%) + + + + + crossbeam_channel::waker::SyncWaker::notify (1 samples, 0.58%) + + + + + crossbeam_channel::waker::Waker::notify (1 samples, 0.58%) + + + + + <alloc::vec::drain::Drain<T,A> as core::ops::drop::Drop>::drop (1 samples, 0.58%) + + + + + clone3 (43 samples, 25.00%) + + clone3 + + + start_thread (43 samples, 25.00%) + + start_thread + + + entry_SYSCALL_64_after_hwframe (1 samples, 0.58%) + + + + + do_syscall_64 (1 samples, 0.58%) + + + + + __x64_sys_exit (1 samples, 0.58%) + + + + + do_exit (1 samples, 0.58%) + + + + + mm_release (1 samples, 0.58%) + + + + + do_futex (1 samples, 0.58%) + + + + + futex_wake (1 samples, 0.58%) + + + + + tempfile::Builder::tempfile (1 samples, 0.58%) + + + + + tempfile::util::create_helper (1 samples, 0.58%) + + + + + tempfile::util::tmpname (1 samples, 0.58%) + + + + + std::sys::unix::os_str::Buf::push_slice (1 samples, 0.58%) + + + + + ext4_reserve_inode_write (1 samples, 0.58%) + + + + + __ext4_journal_get_write_access (1 samples, 0.58%) + + + + + ext4_inode_csum_set (1 samples, 0.58%) + + + + + ext4_inode_csum (1 samples, 0.58%) + + + + + chksum_update (1 samples, 0.58%) + + + + + crc32_body (1 samples, 0.58%) + + + + + ext4_dirty_inode (3 samples, 1.74%) + + + + + __ext4_mark_inode_dirty (3 samples, 1.74%) + + + + + ext4_mark_iloc_dirty (2 samples, 1.16%) + + + + + _raw_spin_unlock_irqrestore (1 samples, 0.58%) + + + + + __mark_inode_dirty (5 samples, 2.91%) + + __.. + + + __ext4_journal_stop (2 samples, 1.16%) + + + + + jbd2_journal_stop (2 samples, 1.16%) + + + + + stop_this_handle (2 samples, 1.16%) + + + + + __wake_up_common_lock (2 samples, 1.16%) + + + + + generic_write_end (7 samples, 4.07%) + + gene.. + + + __block_commit_write.constprop.0.isra.0 (2 samples, 1.16%) + + + + + mark_buffer_dirty (2 samples, 1.16%) + + + + + fault_in_iov_iter_readable (2 samples, 1.16%) + + + + + fault_in_readable (2 samples, 1.16%) + + + + + __get_user_nocheck_1 (2 samples, 1.16%) + + + + + grab_cache_page_write_begin (1 samples, 0.58%) + + + + + pagecache_get_page (1 samples, 0.58%) + + + + + add_to_page_cache_lru (1 samples, 0.58%) + + + + + __add_to_page_cache_locked (1 samples, 0.58%) + + + + + ext4_es_lookup_extent (2 samples, 1.16%) + + + + + ext4_es_insert_delayed_block (1 samples, 0.58%) + + + + + __es_insert_extent (1 samples, 0.58%) + + + + + ext4_da_reserve_space (1 samples, 0.58%) + + + + + down_read (1 samples, 0.58%) + + + + + ext4_da_get_block_prep (6 samples, 3.49%) + + ext.. + + + ext4_da_write_begin (8 samples, 4.65%) + + ext4_.. + + + __block_write_begin_int (7 samples, 4.07%) + + __bl.. + + + create_page_buffers (1 samples, 0.58%) + + + + + create_empty_buffers (1 samples, 0.58%) + + + + + __raw_callee_save___pv_queued_spin_unlock (1 samples, 0.58%) + + + + + std::io::buffered::bufwriter::BufWriter<W>::write_all_cold (19 samples, 11.05%) + + std::io::buffere.. + + + std::io::Write::write_all (19 samples, 11.05%) + + std::io::Write::.. + + + std::os::unix::net::datagram::UnixDatagram::send (19 samples, 11.05%) + + std::os::unix::n.. + + + __GI___libc_write (19 samples, 11.05%) + + __GI___libc_write + + + entry_SYSCALL_64_after_hwframe (19 samples, 11.05%) + + entry_SYSCALL_64.. + + + do_syscall_64 (19 samples, 11.05%) + + do_syscall_64 + + + ksys_write (19 samples, 11.05%) + + ksys_write + + + vfs_write (19 samples, 11.05%) + + vfs_write + + + new_sync_write (19 samples, 11.05%) + + new_sync_write + + + ext4_buffered_write_iter (19 samples, 11.05%) + + ext4_buffered_wr.. + + + generic_perform_write (19 samples, 11.05%) + + generic_perform_.. + + + copy_page_from_iter_atomic (2 samples, 1.16%) + + + + + copy_user_enhanced_fast_string (2 samples, 1.16%) + + + + + filemap_get_pages (1 samples, 0.58%) + + + + + filemap_get_read_batch (1 samples, 0.58%) + + + + + copy_user_enhanced_fast_string (3 samples, 1.74%) + + + + + copy_page_to_iter (4 samples, 2.33%) + + c.. + + + all (172 samples, 100%) + + + + + RHE_91_system.t (69 samples, 40.12%) + + RHE_91_system.t + + + [unknown] (26 samples, 15.12%) + + [unknown] + + + s4lib::readers::filedecompressor::decompress_to_ntf (26 samples, 15.12%) + + s4lib::readers::filedec.. + + + <tar::entry::EntryFields as std::io::Read>::read (6 samples, 3.49%) + + <ta.. + + + <std::io::Take<T> as std::io::Read>::read (6 samples, 3.49%) + + <st.. + + + <std::process::ChildStdout as std::io::Read>::read (6 samples, 3.49%) + + <st.. + + + read (6 samples, 3.49%) + + read + + + entry_SYSCALL_64_after_hwframe (6 samples, 3.49%) + + ent.. + + + do_syscall_64 (6 samples, 3.49%) + + do_.. + + + ksys_read (6 samples, 3.49%) + + ksy.. + + + vfs_read (6 samples, 3.49%) + + vfs.. + + + new_sync_read (6 samples, 3.49%) + + new.. + + + filemap_read (6 samples, 3.49%) + + fil.. + + + diff --git a/releases/0.7.75/flamegraph-journal-xz.svg b/releases/0.7.75/flamegraph-journal-xz.svg new file mode 100644 index 00000000..06385975 --- /dev/null +++ b/releases/0.7.75/flamegraph-journal-xz.svg @@ -0,0 +1,2892 @@ + + + + + + + + + + + + + + + Flame Graph: super_speedy_syslog_searcher 0.7.75; git: d799548f; -freq 8000; created 20240707T231105-0700; flamegraph-flamegraph 0.6.5; rustc 1.70.0
; command: s4 ./logs/programs/journal/RHE_91_system.journal.xz + + Reset Zoom + Search + + + + ret_from_fork (22 samples, 5.95%) + + ret_from.. + + + schedule_tail (22 samples, 5.95%) + + schedule.. + + + finish_task_switch.isra.0 (22 samples, 5.95%) + + finish_t.. + + + __perf_event_task_sched_in (22 samples, 5.95%) + + __perf_e.. + + + __raw_callee_save___pv_queued_spin_unlock (22 samples, 5.95%) + + __raw_ca.. + + + truncate_cleanup_page (1 samples, 0.27%) + + + + + try_to_free_buffers (1 samples, 0.27%) + + + + + kmem_cache_free.part.0 (1 samples, 0.27%) + + + + + __slab_free.constprop.0 (1 samples, 0.27%) + + + + + delete_from_page_cache_batch (1 samples, 0.27%) + + + + + unaccount_page_cache_page (1 samples, 0.27%) + + + + + PageHuge (1 samples, 0.27%) + + + + + __list_del_entry_valid (2 samples, 0.54%) + + + + + __pagevec_release (3 samples, 0.81%) + + + + + release_pages (3 samples, 0.81%) + + + + + free_unref_page_list (3 samples, 0.81%) + + + + + free_pcppages_bulk (3 samples, 0.81%) + + + + + __free_one_page (1 samples, 0.27%) + + + + + task_work_run (6 samples, 1.62%) + + + + + __fput (6 samples, 1.62%) + + + + + dput (6 samples, 1.62%) + + + + + __dentry_kill (6 samples, 1.62%) + + + + + evict (6 samples, 1.62%) + + + + + ext4_evict_inode (6 samples, 1.62%) + + + + + truncate_inode_pages_range (6 samples, 1.62%) + + + + + __x64_sys_exit_group (8 samples, 2.16%) + + _.. + + + do_group_exit (8 samples, 2.16%) + + d.. + + + do_exit (8 samples, 2.16%) + + d.. + + + mmput (2 samples, 0.54%) + + + + + exit_mmap (2 samples, 0.54%) + + + + + unmap_vmas (2 samples, 0.54%) + + + + + unmap_page_range (2 samples, 0.54%) + + + + + page_remove_rmap (2 samples, 0.54%) + + + + + vm_mmap_pgoff (1 samples, 0.27%) + + + + + do_mmap (1 samples, 0.27%) + + + + + mmap_region (1 samples, 0.27%) + + + + + vma_link (1 samples, 0.27%) + + + + + entry_SYSCALL_64_after_hwframe (10 samples, 2.70%) + + en.. + + + do_syscall_64 (10 samples, 2.70%) + + do.. + + + __x64_sys_execve (2 samples, 0.54%) + + + + + do_execveat_common.isra.0 (2 samples, 0.54%) + + + + + bprm_execve (2 samples, 0.54%) + + + + + load_elf_binary (2 samples, 0.54%) + + + + + begin_new_exec (1 samples, 0.27%) + + + + + perf_event_comm (1 samples, 0.27%) + + + + + perf_iterate_sb (1 samples, 0.27%) + + + + + perf_iterate_ctx (1 samples, 0.27%) + + + + + perf_event_comm_output (1 samples, 0.27%) + + + + + __mmap (1 samples, 0.27%) + + + + + entry_SYSCALL_64_after_hwframe (1 samples, 0.27%) + + + + + do_syscall_64 (1 samples, 0.27%) + + + + + vm_mmap_pgoff (1 samples, 0.27%) + + + + + do_mmap (1 samples, 0.27%) + + + + + mmap_region (1 samples, 0.27%) + + + + + perf_event_mmap (1 samples, 0.27%) + + + + + perf_iterate_sb (1 samples, 0.27%) + + + + + perf_iterate_ctx (1 samples, 0.27%) + + + + + perf_event_mmap_output (1 samples, 0.27%) + + + + + __perf_event_header__init_id (1 samples, 0.27%) + + + + + clone3 (2 samples, 0.54%) + + + + + start_thread (2 samples, 0.54%) + + + + + std::sys::unix::thread::Thread::new::thread_start (2 samples, 0.54%) + + + + + std::sys::unix::stack_overflow::imp::make_handler (2 samples, 0.54%) + + + + + __GI___sigaltstack (1 samples, 0.27%) + + + + + entry_SYSCALL_64_after_hwframe (1 samples, 0.27%) + + + + + do_syscall_64 (1 samples, 0.27%) + + + + + __x64_sys_sigaltstack (1 samples, 0.27%) + + + + + _copy_to_user (1 samples, 0.27%) + + + + + asm_exc_page_fault (1 samples, 0.27%) + + + + + exc_page_fault (1 samples, 0.27%) + + + + + do_user_addr_fault (1 samples, 0.27%) + + + + + handle_mm_fault (1 samples, 0.27%) + + + + + __handle_mm_fault (1 samples, 0.27%) + + + + + finish_fault (1 samples, 0.27%) + + + + + do_set_pte (1 samples, 0.27%) + + + + + lru_cache_add_inactive_or_unevictable (1 samples, 0.27%) + + + + + error_entry (1 samples, 0.27%) + + + + + sync_regs (1 samples, 0.27%) + + + + + memcpy_erms (1 samples, 0.27%) + + + + + asm_exc_page_fault (1 samples, 0.27%) + + + + + exc_page_fault (1 samples, 0.27%) + + + + + do_user_addr_fault (1 samples, 0.27%) + + + + + handle_mm_fault (1 samples, 0.27%) + + + + + __handle_mm_fault (1 samples, 0.27%) + + + + + copy_page (1 samples, 0.27%) + + + + + _dl_lookup_symbol_x (1 samples, 0.27%) + + + + + do_lookup_x (1 samples, 0.27%) + + + + + _dl_relocate_object (4 samples, 1.08%) + + + + + _dl_start (6 samples, 1.62%) + + + + + _dl_sysdep_start (5 samples, 1.35%) + + + + + dl_main (5 samples, 1.35%) + + + + + _dl_map_object_deps (1 samples, 0.27%) + + + + + _dl_catch_exception (1 samples, 0.27%) + + + + + openaux (1 samples, 0.27%) + + + + + _dl_map_object (1 samples, 0.27%) + + + + + _dl_map_object_from_fd (1 samples, 0.27%) + + + + + mmap64 (1 samples, 0.27%) + + + + + entry_SYSCALL_64_after_hwframe (1 samples, 0.27%) + + + + + do_syscall_64 (1 samples, 0.27%) + + + + + ksys_mmap_pgoff (1 samples, 0.27%) + + + + + vm_mmap_pgoff (1 samples, 0.27%) + + + + + do_mmap (1 samples, 0.27%) + + + + + mmap_region (1 samples, 0.27%) + + + + + __do_munmap (1 samples, 0.27%) + + + + + __split_vma (1 samples, 0.27%) + + + + + __vma_adjust (1 samples, 0.27%) + + + + + vma_interval_tree_remove (1 samples, 0.27%) + + + + + __memrchr_evex (1 samples, 0.27%) + + + + + write_null (1 samples, 0.27%) + + + + + std::io::Write::write_all (4 samples, 1.08%) + + + + + <termcolor::LossyStandardStream<W> as std::io::Write>::write (4 samples, 1.08%) + + + + + <std::io::stdio::Stdout as std::io::Write>::write (4 samples, 1.08%) + + + + + <&std::io::stdio::Stdout as std::io::Write>::write (4 samples, 1.08%) + + + + + <std::io::stdio::StdoutLock as std::io::Write>::write (4 samples, 1.08%) + + + + + __GI___libc_write (3 samples, 0.81%) + + + + + entry_SYSCALL_64_after_hwframe (3 samples, 0.81%) + + + + + do_syscall_64 (3 samples, 0.81%) + + + + + ksys_write (3 samples, 0.81%) + + + + + vfs_write (3 samples, 0.81%) + + + + + __memrchr_evex (1 samples, 0.27%) + + + + + termcolor::Ansi<W>::write_color (2 samples, 0.54%) + + + + + std::io::Write::write_all (2 samples, 0.54%) + + + + + <std::io::stdio::Stdout as std::io::Write>::write (2 samples, 0.54%) + + + + + <&std::io::stdio::Stdout as std::io::Write>::write (2 samples, 0.54%) + + + + + <std::io::stdio::StdoutLock as std::io::Write>::write (2 samples, 0.54%) + + + + + <termcolor::LossyStandardStream<W> as termcolor::WriteColor>::set_color (3 samples, 0.81%) + + + + + std::io::Write::write_all (1 samples, 0.27%) + + + + + <std::io::stdio::Stdout as std::io::Write>::write (1 samples, 0.27%) + + + + + <&std::io::stdio::Stdout as std::io::Write>::write (1 samples, 0.27%) + + + + + <termcolor::ColorSpec as core::clone::Clone>::clone (3 samples, 0.81%) + + + + + syscall_exit_to_user_mode (2 samples, 0.54%) + + + + + __fsnotify_parent (1 samples, 0.27%) + + + + + dput (1 samples, 0.27%) + + + + + vfs_write (4 samples, 1.08%) + + + + + fput_many (1 samples, 0.27%) + + + + + srso_alias_return_thunk (1 samples, 0.27%) + + + + + srso_alias_safe_ret (1 samples, 0.27%) + + + + + __fget_light (1 samples, 0.27%) + + + + + __fget_files (1 samples, 0.27%) + + + + + ksys_write (10 samples, 2.70%) + + ks.. + + + __fdget_pos (5 samples, 1.35%) + + + + + std::io::buffered::bufwriter::BufWriter<W>::flush_buf (13 samples, 3.51%) + + std.. + + + __GI___libc_write (13 samples, 3.51%) + + __G.. + + + entry_SYSCALL_64_after_hwframe (13 samples, 3.51%) + + ent.. + + + do_syscall_64 (13 samples, 3.51%) + + do_.. + + + <&std::io::stdio::Stdout as std::io::Write>::flush (14 samples, 3.78%) + + <&st.. + + + <std::io::stdio::Stdout as std::io::Write>::flush (15 samples, 4.05%) + + <std.. + + + s4lib::printer::printers::PrinterLogMessage::print_journalentry_color (27 samples, 7.30%) + + s4lib::pri.. + + + check_match (1 samples, 0.27%) + + + + + strcmp (1 samples, 0.27%) + + + + + _dl_relocate_object (2 samples, 0.54%) + + + + + _dl_lookup_symbol_x (2 samples, 0.54%) + + + + + do_lookup_x (2 samples, 0.54%) + + + + + dlopen2::wrapper::container::Container<T>::load (3 samples, 0.81%) + + + + + dlopen2::raw::common::Library::open (3 samples, 0.81%) + + + + + dlopen@GLIBC_2.2.5 (3 samples, 0.81%) + + + + + _dlerror_run (3 samples, 0.81%) + + + + + _dl_catch_error (3 samples, 0.81%) + + + + + _dl_catch_exception (3 samples, 0.81%) + + + + + dlopen_doit (3 samples, 0.81%) + + + + + _dl_open (3 samples, 0.81%) + + + + + _dl_catch_exception (3 samples, 0.81%) + + + + + dl_open_worker (3 samples, 0.81%) + + + + + _dl_catch_exception (3 samples, 0.81%) + + + + + dl_open_worker_begin (3 samples, 0.81%) + + + + + _dl_map_object_deps (1 samples, 0.27%) + + + + + _dl_catch_exception (1 samples, 0.27%) + + + + + openaux (1 samples, 0.27%) + + + + + _dl_map_object (1 samples, 0.27%) + + + + + _dl_map_object_from_fd (1 samples, 0.27%) + + + + + asm_exc_page_fault (1 samples, 0.27%) + + + + + exc_page_fault (1 samples, 0.27%) + + + + + do_user_addr_fault (1 samples, 0.27%) + + + + + handle_mm_fault (1 samples, 0.27%) + + + + + __handle_mm_fault (1 samples, 0.27%) + + + + + wp_page_copy (1 samples, 0.27%) + + + + + add_mm_counter_fast (1 samples, 0.27%) + + + + + s4lib::libload::systemd_dlopen2::load_library_systemd (4 samples, 1.08%) + + + + + asm_exc_page_fault (1 samples, 0.27%) + + + + + exc_page_fault (1 samples, 0.27%) + + + + + do_user_addr_fault (1 samples, 0.27%) + + + + + hashbrown::set::HashSet<T,S,A>::remove (1 samples, 0.27%) + + + + + core::hash::BuildHasher::hash_one (1 samples, 0.27%) + + + + + __sched_yield (1 samples, 0.27%) + + + + + entry_SYSCALL_64_after_hwframe (1 samples, 0.27%) + + + + + do_syscall_64 (1 samples, 0.27%) + + + + + __x64_sys_sched_yield (1 samples, 0.27%) + + + + + schedule (1 samples, 0.27%) + + + + + __schedule (1 samples, 0.27%) + + + + + crossbeam_channel::context::Context::wait_until (2 samples, 0.54%) + + + + + <crossbeam_channel::channel::Receiver<T> as crossbeam_channel::select::SelectHandle>::register (1 samples, 0.27%) + + + + + crossbeam_channel::waker::SyncWaker::register (1 samples, 0.27%) + + + + + crossbeam_channel::select::Select::select (4 samples, 1.08%) + + + + + crossbeam_channel::select::run_select (4 samples, 1.08%) + + + + + crossbeam_channel::context::Context::with::{{closure}} (4 samples, 1.08%) + + + + + core::hash::BuildHasher::hash_one (1 samples, 0.27%) + + + + + cfree@GLIBC_2.2.5 (1 samples, 0.27%) + + + + + _int_free (1 samples, 0.27%) + + + + + s4::processing_loop (42 samples, 11.35%) + + s4::processing_lo.. + + + std::rt::lang_start::_{{closure}} (43 samples, 11.62%) + + std::rt::lang_sta.. + + + std::sys_common::backtrace::__rust_begin_short_backtrace (43 samples, 11.62%) + + std::sys_common::.. + + + s4::main (43 samples, 11.62%) + + s4::main + + + <s4::CLI_Args as clap_builder::derive::Args>::augment_args (1 samples, 0.27%) + + + + + __memmove_avx512_unaligned_erms (1 samples, 0.27%) + + + + + __poll (1 samples, 0.27%) + + + + + entry_SYSCALL_64_after_hwframe (1 samples, 0.27%) + + + + + do_syscall_64 (1 samples, 0.27%) + + + + + __x64_sys_poll (1 samples, 0.27%) + + + + + do_sys_poll (1 samples, 0.27%) + + + + + tty_poll (1 samples, 0.27%) + + + + + n_tty_poll (1 samples, 0.27%) + + + + + tty_buffer_space_avail (1 samples, 0.27%) + + + + + _start (51 samples, 13.78%) + + _start + + + __libc_start_main@@GLIBC_2.34 (45 samples, 12.16%) + + __libc_start_main@.. + + + __libc_start_call_main (45 samples, 12.16%) + + __libc_start_call_.. + + + main (45 samples, 12.16%) + + main + + + std::rt::lang_start_internal (45 samples, 12.16%) + + std::rt::lang_star.. + + + <&[u8] as alloc::ffi::c_str::CString::new::SpecNewImpl>::spec_new_impl (1 samples, 0.27%) + + + + + __rust_alloc (1 samples, 0.27%) + + + + + asm_exc_page_fault (1 samples, 0.27%) + + + + + exc_page_fault (1 samples, 0.27%) + + + + + syscall (1 samples, 0.27%) + + + + + entry_SYSCALL_64 (1 samples, 0.27%) + + + + + s4 (87 samples, 23.51%) + + s4 + + + [unknown] (2 samples, 0.54%) + + + + + <std::io::stdio::StdoutLock as std::io::Write>::write (1 samples, 0.27%) + + + + + __GI___libc_write (1 samples, 0.27%) + + + + + entry_SYSCALL_64 (1 samples, 0.27%) + + + + + perf-exec (14 samples, 3.78%) + + perf.. + + + entry_SYSCALL_64_after_hwframe (14 samples, 3.78%) + + entr.. + + + do_syscall_64 (14 samples, 3.78%) + + do_s.. + + + __x64_sys_execve (14 samples, 3.78%) + + __x6.. + + + do_execveat_common.isra.0 (14 samples, 3.78%) + + do_e.. + + + bprm_execve (14 samples, 3.78%) + + bprm.. + + + load_elf_binary (14 samples, 3.78%) + + load.. + + + begin_new_exec (14 samples, 3.78%) + + begi.. + + + perf_event_exec (14 samples, 3.78%) + + perf.. + + + x86_pmu_enable_all (14 samples, 3.78%) + + x86_.. + + + ctrl-c (1 samples, 0.27%) + + + + + entry_SYSCALL_64_after_hwframe (1 samples, 0.27%) + + + + + do_syscall_64 (1 samples, 0.27%) + + + + + syscall_exit_to_user_mode (1 samples, 0.27%) + + + + + exit_to_user_mode_prepare (1 samples, 0.27%) + + + + + arch_do_signal_or_restart (1 samples, 0.27%) + + + + + get_signal (1 samples, 0.27%) + + + + + do_group_exit (1 samples, 0.27%) + + + + + do_exit (1 samples, 0.27%) + + + + + acct_process (1 samples, 0.27%) + + + + + do_acct_process (1 samples, 0.27%) + + + + + override_creds (1 samples, 0.27%) + + + + + [libsystemd.so.0.32.0] (7 samples, 1.89%) + + [.. + + + [libsystemd.so.0.32.0] (7 samples, 1.89%) + + [.. + + + sd_journal_enumerate_available_data (14 samples, 3.78%) + + sd_j.. + + + sd_journal_enumerate_data (14 samples, 3.78%) + + sd_j.. + + + [libsystemd.so.0.32.0] (14 samples, 3.78%) + + [lib.. + + + asm_exc_page_fault (1 samples, 0.27%) + + + + + exc_page_fault (1 samples, 0.27%) + + + + + do_user_addr_fault (1 samples, 0.27%) + + + + + handle_mm_fault (1 samples, 0.27%) + + + + + __handle_mm_fault (1 samples, 0.27%) + + + + + filemap_map_pages (1 samples, 0.27%) + + + + + next_uptodate_page (1 samples, 0.27%) + + + + + [libsystemd.so.0.32.0] (6 samples, 1.62%) + + + + + [libsystemd.so.0.32.0] (7 samples, 1.89%) + + [.. + + + sd_journal_get_data (9 samples, 2.43%) + + sd.. + + + [libsystemd.so.0.32.0] (8 samples, 2.16%) + + [.. + + + core::unicode::unicode_data::grapheme_extend::lookup (2 samples, 0.54%) + + + + + <&mut W as core::fmt::Write>::write_str (1 samples, 0.27%) + + + + + alloc::raw_vec::RawVec<T,A>::reserve::do_reserve_and_handle (1 samples, 0.27%) + + + + + alloc::raw_vec::finish_grow (1 samples, 0.27%) + + + + + realloc (1 samples, 0.27%) + + + + + _int_realloc (1 samples, 0.27%) + + + + + <str as core::fmt::Debug>::fmt (4 samples, 1.08%) + + + + + s4lib::readers::journalreader::JournalReader::Error_from_Errno (5 samples, 1.35%) + + + + + alloc::fmt::format::format_inner (5 samples, 1.35%) + + + + + core::fmt::write (5 samples, 1.35%) + + + + + <&mut W as core::fmt::Write>::write_str (1 samples, 0.27%) + + + + + alloc::raw_vec::RawVec<T,A>::reserve::do_reserve_and_handle (1 samples, 0.27%) + + + + + alloc::raw_vec::finish_grow (1 samples, 0.27%) + + + + + realloc (1 samples, 0.27%) + + + + + __lll_lock_wake_private (1 samples, 0.27%) + + + + + entry_SYSCALL_64_after_hwframe (1 samples, 0.27%) + + + + + do_syscall_64 (1 samples, 0.27%) + + + + + __x64_sys_futex (1 samples, 0.27%) + + + + + core::str::converts::from_utf8 (1 samples, 0.27%) + + + + + s4lib::readers::journalreader::JournalReader::next_common (16 samples, 4.32%) + + s4lib.. + + + [libsystemd.so.0.32.0] (1 samples, 0.27%) + + + + + [libsystemd.so.0.32.0] (1 samples, 0.27%) + + + + + [libsystemd.so.0.32.0] (1 samples, 0.27%) + + + + + [libsystemd.so.0.32.0] (1 samples, 0.27%) + + + + + [libsystemd.so.0.32.0] (1 samples, 0.27%) + + + + + [libsystemd.so.0.32.0] (1 samples, 0.27%) + + + + + [libsystemd.so.0.32.0] (1 samples, 0.27%) + + + + + memchr::arch::x86_64::avx2::memchr::One::find_raw (1 samples, 0.27%) + + + + + memchr::arch::x86_64::memchr::memchr_raw::find_avx2 (2 samples, 0.54%) + + + + + core::fmt::num::imp::<impl core::fmt::Display for i32>::fmt (1 samples, 0.27%) + + + + + chrono::format::formatting::DelayedFormat<I>::new_with_offset (2 samples, 0.54%) + + + + + <chrono::offset::fixed::FixedOffset as core::fmt::Debug>::fmt (2 samples, 0.54%) + + + + + <core::fmt::Formatter as core::fmt::Write>::write_fmt (2 samples, 0.54%) + + + + + core::fmt::write (2 samples, 0.54%) + + + + + chrono::format::formatting::DelayedFormat<I>::format_numeric::write_two (1 samples, 0.27%) + + + + + alloc::raw_vec::RawVec<T,A>::reserve_for_push (1 samples, 0.27%) + + + + + alloc::raw_vec::finish_grow (1 samples, 0.27%) + + + + + realloc (1 samples, 0.27%) + + + + + s4lib::readers::journalreader::JournalReader::next_short (36 samples, 9.73%) + + s4lib::readers.. + + + <chrono::format::formatting::DelayedFormat<I> as core::fmt::Display>::fmt (2 samples, 0.54%) + + + + + cfree@GLIBC_2.2.5 (1 samples, 0.27%) + + + + + _int_free (1 samples, 0.27%) + + + + + s4lib::readers::journalreader::JournalReader::new (1 samples, 0.27%) + + + + + sd_journal_open_files (1 samples, 0.27%) + + + + + [libsystemd.so.0.32.0] (1 samples, 0.27%) + + + + + [libsystemd.so.0.32.0] (1 samples, 0.27%) + + + + + __libc_fcntl64 (1 samples, 0.27%) + + + + + __fcntl64_nocancel_adjusted (1 samples, 0.27%) + + + + + entry_SYSCALL_64_after_hwframe (1 samples, 0.27%) + + + + + do_syscall_64 (1 samples, 0.27%) + + + + + __x64_sys_fcntl (1 samples, 0.27%) + + + + + do_fcntl (1 samples, 0.27%) + + + + + std::sys::unix::thread::Thread::new::thread_start (39 samples, 10.54%) + + std::sys::unix:.. + + + core::ops::function::FnOnce::call_once{{vtable.shim}} (39 samples, 10.54%) + + core::ops::func.. + + + std::sys_common::backtrace::__rust_begin_short_backtrace (39 samples, 10.54%) + + std::sys_common.. + + + s4::exec_fileprocessor_thread (39 samples, 10.54%) + + s4::exec_filepr.. + + + crossbeam_channel::channel::Sender<T>::send (2 samples, 0.54%) + + + + + clone3 (40 samples, 10.81%) + + clone3 + + + start_thread (40 samples, 10.81%) + + start_thread + + + entry_SYSCALL_64_after_hwframe (1 samples, 0.27%) + + + + + do_syscall_64 (1 samples, 0.27%) + + + + + __x64_sys_exit (1 samples, 0.27%) + + + + + do_exit (1 samples, 0.27%) + + + + + acct_collect (1 samples, 0.27%) + + + + + _raw_spin_lock_irq (1 samples, 0.27%) + + + + + __pv_queued_spin_lock_slowpath (1 samples, 0.27%) + + + + + asm_exc_page_fault (1 samples, 0.27%) + + + + + exc_page_fault (1 samples, 0.27%) + + + + + do_user_addr_fault (1 samples, 0.27%) + + + + + handle_mm_fault (1 samples, 0.27%) + + + + + __handle_mm_fault (1 samples, 0.27%) + + + + + lru_cache_add (1 samples, 0.27%) + + + + + __pagevec_lru_add (1 samples, 0.27%) + + + + + page_mapping (1 samples, 0.27%) + + + + + crc32_body (2 samples, 0.54%) + + + + + __crc32c_le (1 samples, 0.27%) + + + + + ext4_inode_csum_set (4 samples, 1.08%) + + + + + ext4_inode_csum (4 samples, 1.08%) + + + + + chksum_update (4 samples, 1.08%) + + + + + ext4_dirty_inode (5 samples, 1.35%) + + + + + __ext4_mark_inode_dirty (5 samples, 1.35%) + + + + + ext4_mark_iloc_dirty (5 samples, 1.35%) + + + + + generic_write_end (6 samples, 1.62%) + + + + + __mark_inode_dirty (6 samples, 1.62%) + + + + + __ext4_journal_stop (1 samples, 0.27%) + + + + + jbd2_journal_stop (1 samples, 0.27%) + + + + + stop_this_handle (1 samples, 0.27%) + + + + + __wake_up_common_lock (1 samples, 0.27%) + + + + + _raw_spin_unlock_irqrestore (1 samples, 0.27%) + + + + + add_to_page_cache_lru (1 samples, 0.27%) + + + + + lru_cache_add (1 samples, 0.27%) + + + + + grab_cache_page_write_begin (2 samples, 0.54%) + + + + + pagecache_get_page (2 samples, 0.54%) + + + + + __alloc_pages (1 samples, 0.27%) + + + + + get_page_from_freelist (1 samples, 0.27%) + + + + + up_read (1 samples, 0.27%) + + + + + ext4_es_insert_delayed_block (1 samples, 0.27%) + + + + + srso_alias_return_thunk (1 samples, 0.27%) + + + + + srso_alias_safe_ret (1 samples, 0.27%) + + + + + ext4_claim_free_clusters (1 samples, 0.27%) + + + + + ext4_da_get_block_prep (4 samples, 1.08%) + + + + + ext4_da_reserve_space (2 samples, 0.54%) + + + + + __dquot_alloc_space (1 samples, 0.27%) + + + + + _raw_spin_lock (1 samples, 0.27%) + + + + + ext4_da_write_begin (7 samples, 1.89%) + + e.. + + + __block_write_begin_int (5 samples, 1.35%) + + + + + create_page_buffers (1 samples, 0.27%) + + + + + create_empty_buffers (1 samples, 0.27%) + + + + + alloc_page_buffers (1 samples, 0.27%) + + + + + alloc_buffer_head (1 samples, 0.27%) + + + + + kmem_cache_alloc (1 samples, 0.27%) + + + + + get_obj_cgroup_from_current (1 samples, 0.27%) + + + + + copy_page_from_iter_atomic (1 samples, 0.27%) + + + + + copy_user_enhanced_fast_string (1 samples, 0.27%) + + + + + entry_SYSCALL_64_after_hwframe (15 samples, 4.05%) + + entr.. + + + do_syscall_64 (15 samples, 4.05%) + + do_s.. + + + ksys_write (15 samples, 4.05%) + + ksys.. + + + vfs_write (15 samples, 4.05%) + + vfs_.. + + + new_sync_write (15 samples, 4.05%) + + new_.. + + + ext4_buffered_write_iter (15 samples, 4.05%) + + ext4.. + + + generic_perform_write (15 samples, 4.05%) + + gene.. + + + std::io::buffered::bufwriter::BufWriter<W>::write_all_cold (16 samples, 4.32%) + + std::.. + + + std::io::Write::write_all (16 samples, 4.32%) + + std::.. + + + std::os::unix::net::datagram::UnixDatagram::send (16 samples, 4.32%) + + std::.. + + + __GI___libc_write (16 samples, 4.32%) + + __GI_.. + + + __x86_indirect_thunk_rax (1 samples, 0.27%) + + + + + lzma_rs::decode::xz::validate_block_check (58 samples, 15.68%) + + lzma_rs::decode::xz::val.. + + + crc::crc64::<impl crc::Crc<u64>>::checksum (58 samples, 15.68%) + + crc::crc64::<impl crc::C.. + + + <std::io::buffered::bufreader::BufReader<R> as std::io::Read>::read (3 samples, 0.81%) + + + + + std::io::Read::read_exact (7 samples, 1.89%) + + s.. + + + lzma_rs::decode::rangecoder::RangeDecoder<R>::parse_reverse_bit_tree (10 samples, 2.70%) + + lz.. + + + std::io::Read::read_exact (1 samples, 0.27%) + + + + + lzma_rs::decode::rangecoder::RangeDecoder<R>::get (8 samples, 2.16%) + + l.. + + + <std::io::buffered::bufreader::BufReader<R> as std::io::Read>::read (1 samples, 0.27%) + + + + + std::io::Read::read_exact (2 samples, 0.54%) + + + + + lzma_rs::decode::rangecoder::BitTree::parse (10 samples, 2.70%) + + lz.. + + + lzma_rs::decode::rangecoder::LenDecoder::decode (13 samples, 3.51%) + + lzm.. + + + <std::io::buffered::bufreader::BufReader<R> as std::io::Read>::read (1 samples, 0.27%) + + + + + lzma_rs::decode::rangecoder::BitTree::parse (2 samples, 0.54%) + + + + + std::io::Read::read_exact (2 samples, 0.54%) + + + + + <std::process::ChildStdout as std::io::Read>::read_buf (1 samples, 0.27%) + + + + + read (1 samples, 0.27%) + + + + + entry_SYSCALL_64_after_hwframe (1 samples, 0.27%) + + + + + do_syscall_64 (1 samples, 0.27%) + + + + + ksys_read (1 samples, 0.27%) + + + + + vfs_read (1 samples, 0.27%) + + + + + __fsnotify_parent (1 samples, 0.27%) + + + + + <std::io::buffered::bufreader::BufReader<R> as std::io::BufRead>::fill_buf (4 samples, 1.08%) + + + + + __mod_memcg_lruvec_state (1 samples, 0.27%) + + + + + page_add_new_anon_rmap (2 samples, 0.54%) + + + + + __mod_lruvec_page_state (2 samples, 0.54%) + + + + + do_huge_pmd_anonymous_page (1 samples, 0.27%) + + + + + clear_huge_page (1 samples, 0.27%) + + + + + __cond_resched (1 samples, 0.27%) + + + + + __mem_cgroup_charge (1 samples, 0.27%) + + + + + get_mem_cgroup_from_mm (1 samples, 0.27%) + + + + + rmqueue_bulk (1 samples, 0.27%) + + + + + __list_del_entry_valid (1 samples, 0.27%) + + + + + asm_exc_page_fault (8 samples, 2.16%) + + a.. + + + exc_page_fault (8 samples, 2.16%) + + e.. + + + do_user_addr_fault (8 samples, 2.16%) + + d.. + + + handle_mm_fault (8 samples, 2.16%) + + h.. + + + __handle_mm_fault (8 samples, 2.16%) + + _.. + + + __alloc_pages (4 samples, 1.08%) + + + + + get_page_from_freelist (4 samples, 1.08%) + + + + + kernel_init_free_pages.part.0 (3 samples, 0.81%) + + + + + clear_page_erms (3 samples, 0.81%) + + + + + <lzma_rs::decode::lzbuffer::LzAccumBuffer<W> as lzma_rs::decode::lzbuffer::LzBuffer<W>>::append_lz (47 samples, 12.70%) + + <lzma_rs::decode::l.. + + + lzma_rs::decode::lzma::DecoderState::process (142 samples, 38.38%) + + lzma_rs::decode::lzma::DecoderState::process + + + cfree@GLIBC_2.2.5 (1 samples, 0.27%) + + + + + __munmap (1 samples, 0.27%) + + + + + entry_SYSCALL_64_after_hwframe (1 samples, 0.27%) + + + + + do_syscall_64 (1 samples, 0.27%) + + + + + __x64_sys_munmap (1 samples, 0.27%) + + + + + __vm_munmap (1 samples, 0.27%) + + + + + __do_munmap (1 samples, 0.27%) + + + + + unmap_region (1 samples, 0.27%) + + + + + tlb_finish_mmu (1 samples, 0.27%) + + + + + release_pages (1 samples, 0.27%) + + + + + do_huge_pmd_anonymous_page (1 samples, 0.27%) + + + + + clear_huge_page (1 samples, 0.27%) + + + + + clear_subpage (1 samples, 0.27%) + + + + + clear_page_erms (1 samples, 0.27%) + + + + + get_mem_cgroup_from_mm (2 samples, 0.54%) + + + + + __mem_cgroup_charge (3 samples, 0.81%) + + + + + charge_memcg (1 samples, 0.27%) + + + + + mem_cgroup_charge_statistics.constprop.0 (1 samples, 0.27%) + + + + + handle_mm_fault (5 samples, 1.35%) + + + + + __handle_mm_fault (5 samples, 1.35%) + + + + + __alloc_pages (1 samples, 0.27%) + + + + + get_page_from_freelist (1 samples, 0.27%) + + + + + exc_page_fault (6 samples, 1.62%) + + + + + do_user_addr_fault (6 samples, 1.62%) + + + + + asm_exc_page_fault (8 samples, 2.16%) + + a.. + + + lzma_rs::decode::xz::decode_filter (152 samples, 41.08%) + + lzma_rs::decode::xz::decode_filter + + + lzma_rs::decode::lzma2::Lzma2Decoder::decompress (152 samples, 41.08%) + + lzma_rs::decode::lzma2::Lzma2Decoder::decompress + + + __memmove_avx512_unaligned_erms (9 samples, 2.43%) + + __.. + + + all (370 samples, 100%) + + + + + RHE_91_system.j (268 samples, 72.43%) + + RHE_91_system.j + + + [unknown] (227 samples, 61.35%) + + [unknown] + + + s4lib::readers::filedecompressor::decompress_to_ntf (227 samples, 61.35%) + + s4lib::readers::filedecompressor::decompress_to_ntf + + + lzma_rs::decode::xz::decode_stream (227 samples, 61.35%) + + lzma_rs::decode::xz::decode_stream + + + cfree@GLIBC_2.2.5 (1 samples, 0.27%) + + + + + __munmap (1 samples, 0.27%) + + + + + entry_SYSCALL_64_after_hwframe (1 samples, 0.27%) + + + + + do_syscall_64 (1 samples, 0.27%) + + + + + __x64_sys_munmap (1 samples, 0.27%) + + + + + __vm_munmap (1 samples, 0.27%) + + + + + __do_munmap (1 samples, 0.27%) + + + + + find_vma (1 samples, 0.27%) + + + + + diff --git a/releases/0.7.75/flamegraph-journal.svg b/releases/0.7.75/flamegraph-journal.svg new file mode 100644 index 00000000..6dd9fc3c --- /dev/null +++ b/releases/0.7.75/flamegraph-journal.svg @@ -0,0 +1,2097 @@ + + + + + + + + + + + + + + + Flame Graph: super_speedy_syslog_searcher 0.7.75; git: d799548f; -freq 8000; created 20240707T231054-0700; flamegraph-flamegraph 0.6.5; rustc 1.70.0
; command: s4 ./logs/programs/journal/RHE_91_system.journal + + Reset Zoom + Search + + + + ret_from_fork (22 samples, 16.06%) + + ret_from_fork + + + schedule_tail (22 samples, 16.06%) + + schedule_tail + + + finish_task_switch.isra.0 (22 samples, 16.06%) + + finish_task_switch.isra.0 + + + __perf_event_task_sched_in (22 samples, 16.06%) + + __perf_event_task_sched_in + + + __raw_callee_save___pv_queued_spin_unlock (22 samples, 16.06%) + + __raw_callee_save___pv_qu.. + + + unmap_vmas (1 samples, 0.73%) + + + + + unmap_page_range (1 samples, 0.73%) + + + + + page_remove_rmap (1 samples, 0.73%) + + + + + __x64_sys_exit_group (2 samples, 1.46%) + + + + + do_group_exit (2 samples, 1.46%) + + + + + do_exit (2 samples, 1.46%) + + + + + mmput (2 samples, 1.46%) + + + + + exit_mmap (2 samples, 1.46%) + + + + + tlb_finish_mmu (1 samples, 0.73%) + + + + + free_pages_and_swap_cache (1 samples, 0.73%) + + + + + elf_map (1 samples, 0.73%) + + + + + vm_mmap_pgoff (1 samples, 0.73%) + + + + + security_mmap_file (1 samples, 0.73%) + + + + + entry_SYSCALL_64_after_hwframe (4 samples, 2.92%) + + en.. + + + do_syscall_64 (4 samples, 2.92%) + + do.. + + + __x64_sys_execve (2 samples, 1.46%) + + + + + do_execveat_common.isra.0 (2 samples, 1.46%) + + + + + bprm_execve (2 samples, 1.46%) + + + + + load_elf_binary (2 samples, 1.46%) + + + + + __clear_user (1 samples, 0.73%) + + + + + asm_exc_page_fault (1 samples, 0.73%) + + + + + exc_page_fault (1 samples, 0.73%) + + + + + do_user_addr_fault (1 samples, 0.73%) + + + + + handle_mm_fault (1 samples, 0.73%) + + + + + __handle_mm_fault (1 samples, 0.73%) + + + + + copy_page (1 samples, 0.73%) + + + + + vm_unmapped_area (1 samples, 0.73%) + + + + + clone3 (2 samples, 1.46%) + + + + + start_thread (2 samples, 1.46%) + + + + + std::sys::unix::thread::Thread::new::thread_start (2 samples, 1.46%) + + + + + std::sys::unix::stack_overflow::imp::make_handler (2 samples, 1.46%) + + + + + __mmap (2 samples, 1.46%) + + + + + entry_SYSCALL_64_after_hwframe (2 samples, 1.46%) + + + + + do_syscall_64 (2 samples, 1.46%) + + + + + vm_mmap_pgoff (2 samples, 1.46%) + + + + + do_mmap (2 samples, 1.46%) + + + + + get_unmapped_area (2 samples, 1.46%) + + + + + arch_get_unmapped_area_topdown (2 samples, 1.46%) + + + + + get_mmap_base (1 samples, 0.73%) + + + + + asm_exc_page_fault (1 samples, 0.73%) + + + + + exc_page_fault (1 samples, 0.73%) + + + + + do_user_addr_fault (1 samples, 0.73%) + + + + + handle_mm_fault (1 samples, 0.73%) + + + + + __handle_mm_fault (1 samples, 0.73%) + + + + + copy_page (1 samples, 0.73%) + + + + + asm_exc_page_fault (1 samples, 0.73%) + + + + + _dl_relocate_object (3 samples, 2.19%) + + _.. + + + _dl_map_object_from_fd (1 samples, 0.73%) + + + + + mmap64 (1 samples, 0.73%) + + + + + entry_SYSCALL_64_after_hwframe (1 samples, 0.73%) + + + + + do_syscall_64 (1 samples, 0.73%) + + + + + vm_mmap_pgoff (1 samples, 0.73%) + + + + + do_mmap (1 samples, 0.73%) + + + + + mmap_region (1 samples, 0.73%) + + + + + __do_munmap (1 samples, 0.73%) + + + + + unmap_region (1 samples, 0.73%) + + + + + unmap_vmas (1 samples, 0.73%) + + + + + unmap_page_range (1 samples, 0.73%) + + + + + _dl_start (6 samples, 4.38%) + + _dl_s.. + + + _dl_sysdep_start (5 samples, 3.65%) + + _dl_.. + + + dl_main (5 samples, 3.65%) + + dl_m.. + + + _dl_map_object_deps (2 samples, 1.46%) + + + + + _dl_catch_exception (2 samples, 1.46%) + + + + + openaux (2 samples, 1.46%) + + + + + _dl_map_object (2 samples, 1.46%) + + + + + _dl_load_cache_lookup (1 samples, 0.73%) + + + + + _dl_sysdep_read_whole_file (1 samples, 0.73%) + + + + + __GI___open64_nocancel (1 samples, 0.73%) + + + + + entry_SYSCALL_64_after_hwframe (1 samples, 0.73%) + + + + + do_syscall_64 (1 samples, 0.73%) + + + + + __x64_sys_openat (1 samples, 0.73%) + + + + + do_sys_openat2 (1 samples, 0.73%) + + + + + do_filp_open (1 samples, 0.73%) + + + + + path_openat (1 samples, 0.73%) + + + + + lookup_fast (1 samples, 0.73%) + + + + + __d_lookup_rcu (1 samples, 0.73%) + + + + + s4lib::readers::filepreprocessor::process_path (1 samples, 0.73%) + + + + + std::sys::unix::fs::canonicalize (1 samples, 0.73%) + + + + + realpath@@GLIBC_2.3 (1 samples, 0.73%) + + + + + asm_exc_page_fault (1 samples, 0.73%) + + + + + exc_page_fault (1 samples, 0.73%) + + + + + do_user_addr_fault (1 samples, 0.73%) + + + + + handle_mm_fault (1 samples, 0.73%) + + + + + __handle_mm_fault (1 samples, 0.73%) + + + + + filemap_map_pages (1 samples, 0.73%) + + + + + next_uptodate_page (1 samples, 0.73%) + + + + + syscall_exit_to_user_mode (1 samples, 0.73%) + + + + + __fsnotify_parent (1 samples, 0.73%) + + + + + dput (1 samples, 0.73%) + + + + + lockref_put_return (1 samples, 0.73%) + + + + + entry_SYSCALL_64_after_hwframe (4 samples, 2.92%) + + en.. + + + do_syscall_64 (4 samples, 2.92%) + + do.. + + + ksys_write (3 samples, 2.19%) + + k.. + + + vfs_write (3 samples, 2.19%) + + v.. + + + <termcolor::LossyStandardStream<W> as std::io::Write>::write (5 samples, 3.65%) + + <ter.. + + + <std::io::stdio::Stdout as std::io::Write>::write (5 samples, 3.65%) + + <std.. + + + <&std::io::stdio::Stdout as std::io::Write>::write (5 samples, 3.65%) + + <&st.. + + + <std::io::stdio::StdoutLock as std::io::Write>::write (5 samples, 3.65%) + + <std.. + + + __GI___libc_write (5 samples, 3.65%) + + __GI.. + + + std::io::Write::write_all (6 samples, 4.38%) + + std::.. + + + core::ptr::drop_in_place<std::io::stdio::StdoutLock> (1 samples, 0.73%) + + + + + asm_exc_page_fault (1 samples, 0.73%) + + + + + irqentry_exit_to_user_mode (1 samples, 0.73%) + + + + + exit_to_user_mode_prepare (1 samples, 0.73%) + + + + + alloc::vec::Vec<T,A>::extend_from_slice (1 samples, 0.73%) + + + + + __memmove_avx512_unaligned_erms (1 samples, 0.73%) + + + + + <termcolor::ColorSpec as core::clone::Clone>::clone (1 samples, 0.73%) + + + + + syscall_exit_to_user_mode (2 samples, 1.46%) + + + + + __fsnotify_parent (1 samples, 0.73%) + + + + + fsnotify (1 samples, 0.73%) + + + + + vfs_write (5 samples, 3.65%) + + vfs_.. + + + fput_many (1 samples, 0.73%) + + + + + __fget_files (2 samples, 1.46%) + + + + + rcu_read_unlock_strict (2 samples, 1.46%) + + + + + __fdget_pos (4 samples, 2.92%) + + __.. + + + __fget_light (4 samples, 2.92%) + + __.. + + + ksys_write (11 samples, 8.03%) + + ksys_write + + + entry_SYSCALL_64_after_hwframe (14 samples, 10.22%) + + entry_SYSCALL_6.. + + + do_syscall_64 (14 samples, 10.22%) + + do_syscall_64 + + + entry_SYSCALL_64 (1 samples, 0.73%) + + + + + __x86_indirect_thunk_rax (1 samples, 0.73%) + + + + + <std::io::stdio::Stdout as std::io::Write>::flush (18 samples, 13.14%) + + <std::io::stdio::Std.. + + + <&std::io::stdio::Stdout as std::io::Write>::flush (18 samples, 13.14%) + + <&std::io::stdio::St.. + + + std::io::buffered::bufwriter::BufWriter<W>::flush_buf (18 samples, 13.14%) + + std::io::buffered::b.. + + + __GI___libc_write (18 samples, 13.14%) + + __GI___libc_write + + + s4lib::printer::printers::PrinterLogMessage::print_journalentry_color (29 samples, 21.17%) + + s4lib::printer::printers::Printer.. + + + _dl_relocate_object (1 samples, 0.73%) + + + + + _dl_lookup_symbol_x (1 samples, 0.73%) + + + + + do_lookup_x (1 samples, 0.73%) + + + + + check_match (1 samples, 0.73%) + + + + + dl_open_worker_begin (2 samples, 1.46%) + + + + + _dl_map_object_deps (1 samples, 0.73%) + + + + + _dl_catch_exception (1 samples, 0.73%) + + + + + openaux (1 samples, 0.73%) + + + + + _dl_map_object (1 samples, 0.73%) + + + + + _dl_map_object_from_fd (1 samples, 0.73%) + + + + + mmap64 (1 samples, 0.73%) + + + + + asm_exc_page_fault (1 samples, 0.73%) + + + + + s4lib::libload::systemd_dlopen2::load_library_systemd (3 samples, 2.19%) + + s.. + + + dlopen2::wrapper::container::Container<T>::load (3 samples, 2.19%) + + d.. + + + dlopen2::raw::common::Library::open (3 samples, 2.19%) + + d.. + + + dlopen@GLIBC_2.2.5 (3 samples, 2.19%) + + d.. + + + _dlerror_run (3 samples, 2.19%) + + _.. + + + _dl_catch_error (3 samples, 2.19%) + + _.. + + + _dl_catch_exception (3 samples, 2.19%) + + _.. + + + dlopen_doit (3 samples, 2.19%) + + d.. + + + _dl_open (3 samples, 2.19%) + + _.. + + + _dl_catch_exception (3 samples, 2.19%) + + _.. + + + dl_open_worker (3 samples, 2.19%) + + d.. + + + _dl_catch_exception (3 samples, 2.19%) + + _.. + + + _dl_init (1 samples, 0.73%) + + + + + call_init.part.0 (1 samples, 0.73%) + + + + + gpg_err_init (1 samples, 0.73%) + + + + + __bindtextdomain (1 samples, 0.73%) + + + + + asm_exc_page_fault (1 samples, 0.73%) + + + + + exc_page_fault (1 samples, 0.73%) + + + + + do_user_addr_fault (1 samples, 0.73%) + + + + + handle_mm_fault (1 samples, 0.73%) + + + + + __handle_mm_fault (1 samples, 0.73%) + + + + + filemap_map_pages (1 samples, 0.73%) + + + + + next_uptodate_page (1 samples, 0.73%) + + + + + hashbrown::set::HashSet<T,S,A>::remove (1 samples, 0.73%) + + + + + crossbeam_channel::select::SelectedOperation::recv (1 samples, 0.73%) + + + + + __memmove_avx512_unaligned_erms (1 samples, 0.73%) + + + + + __sched_yield (1 samples, 0.73%) + + + + + entry_SYSCALL_64_after_hwframe (1 samples, 0.73%) + + + + + crossbeam_channel::context::Context::with::{{closure}} (2 samples, 1.46%) + + + + + crossbeam_channel::context::Context::wait_until (2 samples, 1.46%) + + + + + crossbeam_channel::select::Select::select (3 samples, 2.19%) + + c.. + + + crossbeam_channel::select::run_select (3 samples, 2.19%) + + c.. + + + <crossbeam_channel::flavors::array::Receiver<T> as crossbeam_channel::select::SelectHandle>::try_select (1 samples, 0.73%) + + + + + _int_free (1 samples, 0.73%) + + + + + entry_SYSCALL_64_after_hwframe (1 samples, 0.73%) + + + + + do_syscall_64 (1 samples, 0.73%) + + + + + syscall_exit_to_user_mode (1 samples, 0.73%) + + + + + cfree@GLIBC_2.2.5 (3 samples, 2.19%) + + c.. + + + __lll_lock_wake_private (2 samples, 1.46%) + + + + + s4::processing_loop (42 samples, 30.66%) + + s4::processing_loop + + + std::rt::lang_start::_{{closure}} (44 samples, 32.12%) + + std::rt::lang_start::_{{closure}} + + + std::sys_common::backtrace::__rust_begin_short_backtrace (44 samples, 32.12%) + + std::sys_common::backtrace::__rust_begin_short_backt.. + + + s4::main (44 samples, 32.12%) + + s4::main + + + <s4::CLI_Args as clap_builder::derive::Args>::augment_args (1 samples, 0.73%) + + + + + <clap_builder::builder::styled_str::StyledStr as core::convert::From<&str>>::from (1 samples, 0.73%) + + + + + clap_builder::builder::styled_str::StyledStr::none (1 samples, 0.73%) + + + + + alloc::raw_vec::RawVec<T,A>::reserve::do_reserve_and_handle (1 samples, 0.73%) + + + + + alloc::raw_vec::finish_grow (1 samples, 0.73%) + + + + + malloc (1 samples, 0.73%) + + + + + _int_malloc (1 samples, 0.73%) + + + + + asm_exc_page_fault (1 samples, 0.73%) + + + + + exc_page_fault (1 samples, 0.73%) + + + + + do_user_addr_fault (1 samples, 0.73%) + + + + + s4 (79 samples, 57.66%) + + s4 + + + _start (51 samples, 37.23%) + + _start + + + __libc_start_main@@GLIBC_2.34 (45 samples, 32.85%) + + __libc_start_main@@GLIBC_2.34 + + + __libc_start_call_main (45 samples, 32.85%) + + __libc_start_call_main + + + main (45 samples, 32.85%) + + main + + + std::rt::lang_start_internal (45 samples, 32.85%) + + std::rt::lang_start_internal + + + __poll (1 samples, 0.73%) + + + + + entry_SYSCALL_64_after_hwframe (1 samples, 0.73%) + + + + + do_syscall_64 (1 samples, 0.73%) + + + + + __x64_sys_poll (1 samples, 0.73%) + + + + + do_sys_poll (1 samples, 0.73%) + + + + + tty_poll (1 samples, 0.73%) + + + + + n_tty_poll (1 samples, 0.73%) + + + + + tty_buffer_flush_work (1 samples, 0.73%) + + + + + perf_event_exec (14 samples, 10.22%) + + perf_event_exec + + + x86_pmu_enable_all (14 samples, 10.22%) + + x86_pmu_enable_.. + + + perf-exec (15 samples, 10.95%) + + perf-exec + + + entry_SYSCALL_64_after_hwframe (15 samples, 10.95%) + + entry_SYSCALL_64.. + + + do_syscall_64 (15 samples, 10.95%) + + do_syscall_64 + + + __x64_sys_execve (15 samples, 10.95%) + + __x64_sys_execve + + + do_execveat_common.isra.0 (15 samples, 10.95%) + + do_execveat_comm.. + + + bprm_execve (15 samples, 10.95%) + + bprm_execve + + + load_elf_binary (15 samples, 10.95%) + + load_elf_binary + + + begin_new_exec (15 samples, 10.95%) + + begin_new_exec + + + perf_event_comm (1 samples, 0.73%) + + + + + perf_iterate_sb (1 samples, 0.73%) + + + + + perf_event_comm_output (1 samples, 0.73%) + + + + + ctrl-c (1 samples, 0.73%) + + + + + entry_SYSCALL_64_after_hwframe (1 samples, 0.73%) + + + + + do_syscall_64 (1 samples, 0.73%) + + + + + syscall_exit_to_user_mode (1 samples, 0.73%) + + + + + exit_to_user_mode_prepare (1 samples, 0.73%) + + + + + arch_do_signal_or_restart (1 samples, 0.73%) + + + + + get_signal (1 samples, 0.73%) + + + + + do_group_exit (1 samples, 0.73%) + + + + + do_exit (1 samples, 0.73%) + + + + + acct_process (1 samples, 0.73%) + + + + + do_acct_process (1 samples, 0.73%) + + + + + __kernel_write (1 samples, 0.73%) + + + + + ext4_buffered_write_iter (1 samples, 0.73%) + + + + + file_update_time (1 samples, 0.73%) + + + + + generic_update_time (1 samples, 0.73%) + + + + + __mark_inode_dirty (1 samples, 0.73%) + + + + + ext4_dirty_inode (1 samples, 0.73%) + + + + + __ext4_mark_inode_dirty (1 samples, 0.73%) + + + + + ext4_reserve_inode_write (1 samples, 0.73%) + + + + + ext4_get_inode_loc (1 samples, 0.73%) + + + + + __ext4_get_inode_loc (1 samples, 0.73%) + + + + + __getblk_gfp (1 samples, 0.73%) + + + + + __find_get_block (1 samples, 0.73%) + + + + + [libsystemd.so.0.32.0] (1 samples, 0.73%) + + + + + [libsystemd.so.0.32.0] (4 samples, 2.92%) + + [l.. + + + [libsystemd.so.0.32.0] (7 samples, 5.11%) + + [libsy.. + + + sd_journal_enumerate_available_data (8 samples, 5.84%) + + sd_jour.. + + + sd_journal_enumerate_data (8 samples, 5.84%) + + sd_jour.. + + + sd_journal_get_realtime_usec (1 samples, 0.73%) + + + + + [libsystemd.so.0.32.0] (1 samples, 0.73%) + + + + + [libsystemd.so.0.32.0] (1 samples, 0.73%) + + + + + [libsystemd.so.0.32.0] (1 samples, 0.73%) + + + + + [libsystemd.so.0.32.0] (4 samples, 2.92%) + + [l.. + + + [libsystemd.so.0.32.0] (5 samples, 3.65%) + + [lib.. + + + sd_journal_get_data (8 samples, 5.84%) + + sd_jour.. + + + [libsystemd.so.0.32.0] (8 samples, 5.84%) + + [libsys.. + + + __lll_lock_wake_private (1 samples, 0.73%) + + + + + entry_SYSCALL_64_after_hwframe (1 samples, 0.73%) + + + + + do_syscall_64 (1 samples, 0.73%) + + + + + __x64_sys_futex (1 samples, 0.73%) + + + + + do_futex (1 samples, 0.73%) + + + + + futex_wake (1 samples, 0.73%) + + + + + malloc (2 samples, 1.46%) + + + + + s4lib::readers::journalreader::JournalReader::Error_from_Errno (4 samples, 2.92%) + + s4.. + + + alloc::fmt::format::format_inner (4 samples, 2.92%) + + al.. + + + core::fmt::write (2 samples, 1.46%) + + + + + <str as core::fmt::Debug>::fmt (2 samples, 1.46%) + + + + + core::unicode::unicode_data::grapheme_extend::lookup (2 samples, 1.46%) + + + + + asm_exc_page_fault (1 samples, 0.73%) + + + + + exc_page_fault (1 samples, 0.73%) + + + + + do_user_addr_fault (1 samples, 0.73%) + + + + + handle_mm_fault (1 samples, 0.73%) + + + + + __handle_mm_fault (1 samples, 0.73%) + + + + + filemap_map_pages (1 samples, 0.73%) + + + + + next_uptodate_page (1 samples, 0.73%) + + + + + [libsystemd.so.0.32.0] (2 samples, 1.46%) + + + + + [libsystemd.so.0.32.0] (2 samples, 1.46%) + + + + + [libsystemd.so.0.32.0] (4 samples, 2.92%) + + [l.. + + + [libsystemd.so.0.32.0] (4 samples, 2.92%) + + [l.. + + + [libsystemd.so.0.32.0] (5 samples, 3.65%) + + [lib.. + + + s4lib::readers::journalreader::JournalReader::next_common (19 samples, 13.87%) + + s4lib::readers::journ.. + + + [libsystemd.so.0.32.0] (6 samples, 4.38%) + + [libs.. + + + memchr::arch::x86_64::memchr::memchr_raw::find_avx2 (2 samples, 1.46%) + + + + + memchr::arch::x86_64::avx2::memchr::One::find_raw (2 samples, 1.46%) + + + + + malloc (1 samples, 0.73%) + + + + + _int_malloc (1 samples, 0.73%) + + + + + chrono::format::formatting::DelayedFormat<I>::new_with_offset (1 samples, 0.73%) + + + + + s4lib::readers::journalreader::JournalReader::next_short (38 samples, 27.74%) + + s4lib::readers::journalreader::JournalReader:.. + + + <chrono::format::formatting::DelayedFormat<I> as core::fmt::Display>::fmt (7 samples, 5.11%) + + <chron.. + + + s4lib::readers::journalreader::JournalReader::new (1 samples, 0.73%) + + + + + sd_journal_open_files (1 samples, 0.73%) + + + + + [libsystemd.so.0.32.0] (1 samples, 0.73%) + + + + + [libsystemd.so.0.32.0] (1 samples, 0.73%) + + + + + crossbeam_channel::waker::SyncWaker::notify (1 samples, 0.73%) + + + + + std::sys_common::backtrace::__rust_begin_short_backtrace (41 samples, 29.93%) + + std::sys_common::backtrace::__rust_begin_short_b.. + + + s4::exec_fileprocessor_thread (41 samples, 29.93%) + + s4::exec_fileprocessor_thread + + + crossbeam_channel::channel::Sender<T>::send (2 samples, 1.46%) + + + + + all (137 samples, 100%) + + + + + RHE_91_system.j (42 samples, 30.66%) + + RHE_91_system.j + + + clone3 (42 samples, 30.66%) + + clone3 + + + start_thread (42 samples, 30.66%) + + start_thread + + + std::sys::unix::thread::Thread::new::thread_start (42 samples, 30.66%) + + std::sys::unix::thread::Thread::new::thread_start + + + core::ops::function::FnOnce::call_once{{vtable.shim}} (42 samples, 30.66%) + + core::ops::function::FnOnce::call_once{{vtable.sh.. + + + std::sys::unix::thread::guard::current (1 samples, 0.73%) + + + + + pthread_getattr_np@@GLIBC_2.32 (1 samples, 0.73%) + + + + + malloc (1 samples, 0.73%) + + + + + tcache_init.part.0 (1 samples, 0.73%) + + + + + arena_get2.part.0 (1 samples, 0.73%) + + + + + alloc_new_heap (1 samples, 0.73%) + + + + + asm_exc_page_fault (1 samples, 0.73%) + + + + + exc_page_fault (1 samples, 0.73%) + + + + + do_user_addr_fault (1 samples, 0.73%) + + + + + handle_mm_fault (1 samples, 0.73%) + + + + + __handle_mm_fault (1 samples, 0.73%) + + + + + diff --git a/releases/0.7.75/flamegraph-syslog-bz2.svg b/releases/0.7.75/flamegraph-syslog-bz2.svg new file mode 100644 index 00000000..a1909ae0 --- /dev/null +++ b/releases/0.7.75/flamegraph-syslog-bz2.svg @@ -0,0 +1,4997 @@ + + + + + + + + + + + + + + + Flame Graph: super_speedy_syslog_searcher 0.7.75; git: d799548f; -freq 8000; created 20240707T231119-0700; flamegraph-flamegraph 0.6.5; rustc 1.70.0
; command: s4 ./logs/other/tests/gen-1000-3-foobar.log.bz2 + + Reset Zoom + Search + + + + __raw_callee_save___pv_queued_spin_unlock (11 samples, 1.51%) + + + + + ret_from_fork (22 samples, 3.03%) + + ret.. + + + schedule_tail (22 samples, 3.03%) + + sch.. + + + finish_task_switch.isra.0 (22 samples, 3.03%) + + fin.. + + + __perf_event_task_sched_in (22 samples, 3.03%) + + __p.. + + + entry_SYSCALL_64_safe_stack (1 samples, 0.14%) + + + + + cgroup_rstat_updated (2 samples, 0.28%) + + + + + page_remove_rmap (5 samples, 0.69%) + + + + + __mod_lruvec_page_state (5 samples, 0.69%) + + + + + __mod_memcg_lruvec_state (5 samples, 0.69%) + + + + + unmap_vmas (7 samples, 0.96%) + + + + + unmap_page_range (7 samples, 0.96%) + + + + + lock_page_lruvec_irqsave (1 samples, 0.14%) + + + + + _raw_spin_lock_irqsave (1 samples, 0.14%) + + + + + free_unref_page_commit.constprop.0 (1 samples, 0.14%) + + + + + __list_del_entry_valid (1 samples, 0.14%) + + + + + free_unref_page_list (3 samples, 0.41%) + + + + + free_pcppages_bulk (2 samples, 0.28%) + + + + + __free_one_page (1 samples, 0.14%) + + + + + mmput (13 samples, 1.79%) + + m.. + + + exit_mmap (13 samples, 1.79%) + + e.. + + + tlb_finish_mmu (6 samples, 0.83%) + + + + + release_pages (6 samples, 0.83%) + + + + + __x64_sys_exit_group (14 samples, 1.93%) + + _.. + + + do_group_exit (14 samples, 1.93%) + + d.. + + + do_exit (14 samples, 1.93%) + + d.. + + + mm_update_next_owner (1 samples, 0.14%) + + + + + vm_mmap_pgoff (1 samples, 0.14%) + + + + + do_mmap (1 samples, 0.14%) + + + + + mmap_region (1 samples, 0.14%) + + + + + vma_link (1 samples, 0.14%) + + + + + vma_interval_tree_insert (1 samples, 0.14%) + + + + + entry_SYSCALL_64_after_hwframe (16 samples, 2.20%) + + e.. + + + do_syscall_64 (16 samples, 2.20%) + + d.. + + + __x64_sys_execve (2 samples, 0.28%) + + + + + do_execveat_common.isra.0 (2 samples, 0.28%) + + + + + bprm_execve (2 samples, 0.28%) + + + + + load_elf_binary (2 samples, 0.28%) + + + + + setup_arg_pages (1 samples, 0.14%) + + + + + shift_arg_pages (1 samples, 0.14%) + + + + + move_page_tables.part.0 (1 samples, 0.14%) + + + + + __pte_alloc (1 samples, 0.14%) + + + + + pte_alloc_one (1 samples, 0.14%) + + + + + std::sys::unix::thread::Thread::new::thread_start (1 samples, 0.14%) + + + + + std::sys::unix::stack_overflow::imp::make_handler (1 samples, 0.14%) + + + + + __mprotect (1 samples, 0.14%) + + + + + entry_SYSCALL_64_after_hwframe (1 samples, 0.14%) + + + + + do_syscall_64 (1 samples, 0.14%) + + + + + __x64_sys_mprotect (1 samples, 0.14%) + + + + + do_mprotect_pkey (1 samples, 0.14%) + + + + + security_file_mprotect (1 samples, 0.14%) + + + + + start_thread (2 samples, 0.28%) + + + + + entry_SYSCALL_64 (1 samples, 0.14%) + + + + + clone3 (3 samples, 0.41%) + + + + + entry_SYSCALL_64_after_hwframe (1 samples, 0.14%) + + + + + do_syscall_64 (1 samples, 0.14%) + + + + + __do_sys_clone3 (1 samples, 0.14%) + + + + + kernel_clone (1 samples, 0.14%) + + + + + copy_process (1 samples, 0.14%) + + + + + perf_event_init_task (1 samples, 0.14%) + + + + + inherit_task_group.isra.0 (1 samples, 0.14%) + + + + + inherit_event.constprop.0 (1 samples, 0.14%) + + + + + asm_exc_page_fault (1 samples, 0.14%) + + + + + exc_page_fault (1 samples, 0.14%) + + + + + irqentry_enter (1 samples, 0.14%) + + + + + _dl_relocate_object (2 samples, 0.28%) + + + + + _dl_lookup_symbol_x (1 samples, 0.14%) + + + + + do_lookup_x (1 samples, 0.14%) + + + + + _dl_map_object_deps (1 samples, 0.14%) + + + + + _dl_catch_exception (1 samples, 0.14%) + + + + + openaux (1 samples, 0.14%) + + + + + _dl_map_object (1 samples, 0.14%) + + + + + _dl_load_cache_lookup (1 samples, 0.14%) + + + + + _dl_sysdep_read_whole_file (1 samples, 0.14%) + + + + + __GI___close_nocancel (1 samples, 0.14%) + + + + + entry_SYSCALL_64_after_hwframe (1 samples, 0.14%) + + + + + do_syscall_64 (1 samples, 0.14%) + + + + + _dl_start (4 samples, 0.55%) + + + + + _dl_sysdep_start (4 samples, 0.55%) + + + + + dl_main (4 samples, 0.55%) + + + + + __libc_early_init (1 samples, 0.14%) + + + + + __getrlimit (1 samples, 0.14%) + + + + + asm_exc_page_fault (1 samples, 0.14%) + + + + + std::thread::Thread::new (1 samples, 0.14%) + + + + + alloc::sync::arcinner_layout_for_value_layout (1 samples, 0.14%) + + + + + __memrchr_evex (2 samples, 0.28%) + + + + + syscall_return_via_sysret (1 samples, 0.14%) + + + + + syscall_exit_to_user_mode (1 samples, 0.14%) + + + + + srso_alias_safe_ret (1 samples, 0.14%) + + + + + vfs_write (2 samples, 0.28%) + + + + + __fdget_pos (2 samples, 0.28%) + + + + + __fget_light (2 samples, 0.28%) + + + + + __fget_files (2 samples, 0.28%) + + + + + entry_SYSCALL_64_after_hwframe (6 samples, 0.83%) + + + + + do_syscall_64 (6 samples, 0.83%) + + + + + ksys_write (5 samples, 0.69%) + + + + + <std::io::stdio::StdoutLock as std::io::Write>::write (10 samples, 1.38%) + + + + + __GI___libc_write (8 samples, 1.10%) + + + + + <&std::io::stdio::Stdout as std::io::Write>::write (11 samples, 1.51%) + + + + + std::io::Write::write_all (13 samples, 1.79%) + + s.. + + + <termcolor::LossyStandardStream<W> as std::io::Write>::write (13 samples, 1.79%) + + <.. + + + <std::io::stdio::Stdout as std::io::Write>::write (13 samples, 1.79%) + + <.. + + + <std::io::stdio::StdoutLock as std::io::Write>::write (1 samples, 0.14%) + + + + + __memrchr_evex (1 samples, 0.14%) + + + + + termcolor::Ansi<W>::write_color (2 samples, 0.28%) + + + + + std::io::Write::write_all (2 samples, 0.28%) + + + + + <std::io::stdio::Stdout as std::io::Write>::write (2 samples, 0.28%) + + + + + <&std::io::stdio::Stdout as std::io::Write>::write (2 samples, 0.28%) + + + + + <std::io::stdio::StdoutLock as std::io::Write>::write (1 samples, 0.14%) + + + + + __memrchr_evex (1 samples, 0.14%) + + + + + <&std::io::stdio::Stdout as std::io::Write>::write (2 samples, 0.28%) + + + + + <std::io::stdio::Stdout as std::io::Write>::write (4 samples, 0.55%) + + + + + <termcolor::LossyStandardStream<W> as termcolor::WriteColor>::set_color (7 samples, 0.96%) + + + + + std::io::Write::write_all (5 samples, 0.69%) + + + + + <termcolor::LossyStandardStream<W> as std::io::Write>::flush (1 samples, 0.14%) + + + + + syscall_return_via_sysret (2 samples, 0.28%) + + + + + srso_alias_return_thunk (1 samples, 0.14%) + + + + + srso_alias_safe_ret (1 samples, 0.14%) + + + + + exit_to_user_mode_prepare (1 samples, 0.14%) + + + + + syscall_exit_to_user_mode (3 samples, 0.41%) + + + + + security_file_permission (1 samples, 0.14%) + + + + + lockref_put_return (3 samples, 0.41%) + + + + + dput (7 samples, 0.96%) + + + + + __fsnotify_parent (9 samples, 1.24%) + + + + + vfs_write (18 samples, 2.48%) + + vf.. + + + fput_many (1 samples, 0.14%) + + + + + __fdget_pos (3 samples, 0.41%) + + + + + __fget_light (3 samples, 0.41%) + + + + + __fget_files (3 samples, 0.41%) + + + + + ksys_write (26 samples, 3.58%) + + ksys.. + + + do_syscall_64 (30 samples, 4.13%) + + do_s.. + + + entry_SYSCALL_64_after_hwframe (33 samples, 4.54%) + + entry.. + + + entry_SYSCALL_64 (1 samples, 0.14%) + + + + + std::io::buffered::bufwriter::BufWriter<W>::flush_buf (39 samples, 5.36%) + + std::io.. + + + __GI___libc_write (39 samples, 5.36%) + + __GI___.. + + + <&std::io::stdio::Stdout as std::io::Write>::flush (40 samples, 5.50%) + + <&std::.. + + + <std::io::stdio::Stdout as std::io::Write>::flush (41 samples, 5.64%) + + <std::i.. + + + s4lib::printer::printers::PrinterLogMessage::print_sysline_color (68 samples, 9.35%) + + s4lib::printe.. + + + hashbrown::map::HashMap<K,V,S,A>::get_mut (1 samples, 0.14%) + + + + + crossbeam_channel::select::SelectedOperation::recv (4 samples, 0.55%) + + + + + crossbeam_channel::channel::read (4 samples, 0.55%) + + + + + __memmove_avx512_unaligned_erms (4 samples, 0.55%) + + + + + syscall_exit_to_user_mode (1 samples, 0.14%) + + + + + exit_to_user_mode_prepare (1 samples, 0.14%) + + + + + __rseq_handle_notify_resume (1 samples, 0.14%) + + + + + pick_next_task_fair (1 samples, 0.14%) + + + + + std::thread::park (3 samples, 0.41%) + + + + + syscall (3 samples, 0.41%) + + + + + entry_SYSCALL_64_after_hwframe (3 samples, 0.41%) + + + + + do_syscall_64 (3 samples, 0.41%) + + + + + __x64_sys_futex (2 samples, 0.28%) + + + + + do_futex (2 samples, 0.28%) + + + + + futex_wait (2 samples, 0.28%) + + + + + futex_wait_queue_me (2 samples, 0.28%) + + + + + schedule (2 samples, 0.28%) + + + + + __schedule (2 samples, 0.28%) + + + + + __perf_event_task_sched_out (1 samples, 0.14%) + + + + + crossbeam_channel::context::Context::wait_until (7 samples, 0.96%) + + + + + crossbeam_channel::waker::SyncWaker::unregister (1 samples, 0.14%) + + + + + crossbeam_channel::context::Context::with::{{closure}} (9 samples, 1.24%) + + + + + <crossbeam_channel::channel::Receiver<T> as crossbeam_channel::select::SelectHandle>::unregister (2 samples, 0.28%) + + + + + crossbeam_channel::select::Select::select (10 samples, 1.38%) + + + + + crossbeam_channel::select::run_select (10 samples, 1.38%) + + + + + <crossbeam_channel::flavors::array::Receiver<T> as crossbeam_channel::select::SelectHandle>::try_select (1 samples, 0.14%) + + + + + cfree@GLIBC_2.2.5 (1 samples, 0.14%) + + + + + alloc::collections::btree::remove::<impl alloc::collections::btree::node::Handle<alloc::collections::btree::node::NodeRef<alloc::collections::btree::node::marker::Mut,K,V,alloc::collections::btree::node::marker::LeafOrInternal>,alloc::collections::btree::node::marker::KV>>::remove_kv_tracking (1 samples, 0.14%) + + + + + alloc::collections::btree::map::BTreeMap<K,V,A>::remove (3 samples, 0.41%) + + + + + alloc::collections::btree::map::entry::OccupiedEntry<K,V,A>::remove_entry (3 samples, 0.41%) + + + + + s4::processing_loop (89 samples, 12.24%) + + s4::processing_loop + + + _start (95 samples, 13.07%) + + _start + + + __libc_start_main@@GLIBC_2.34 (91 samples, 12.52%) + + __libc_start_main@@.. + + + __libc_start_call_main (91 samples, 12.52%) + + __libc_start_call_m.. + + + main (91 samples, 12.52%) + + main + + + std::rt::lang_start_internal (91 samples, 12.52%) + + std::rt::lang_start.. + + + std::rt::lang_start::_{{closure}} (90 samples, 12.38%) + + std::rt::lang_star.. + + + std::sys_common::backtrace::__rust_begin_short_backtrace (90 samples, 12.38%) + + std::sys_common::b.. + + + s4::main (90 samples, 12.38%) + + s4::main + + + clap_builder::builder::command::Command::get_matches_from (1 samples, 0.14%) + + + + + clap_builder::builder::command::Command::_do_parse (1 samples, 0.14%) + + + + + clap_builder::parser::parser::Parser::get_matches_with (1 samples, 0.14%) + + + + + clap_builder::parser::parser::Parser::add_defaults (1 samples, 0.14%) + + + + + clap_builder::parser::parser::Parser::react (1 samples, 0.14%) + + + + + clap_builder::parser::parser::Parser::push_arg_values (1 samples, 0.14%) + + + + + clap_builder::parser::arg_matcher::ArgMatcher::add_val_to (1 samples, 0.14%) + + + + + clap_builder::parser::matches::matched_arg::MatchedArg::append_val (1 samples, 0.14%) + + + + + alloc::raw_vec::RawVec<T,A>::reserve_for_push (1 samples, 0.14%) + + + + + alloc::raw_vec::finish_grow (1 samples, 0.14%) + + + + + malloc (1 samples, 0.14%) + + + + + _int_malloc (1 samples, 0.14%) + + + + + asm_exc_page_fault (1 samples, 0.14%) + + + + + srso_alias_return_thunk (1 samples, 0.14%) + + + + + s4 (138 samples, 18.98%) + + s4 + + + [unknown] (1 samples, 0.14%) + + + + + <std::io::stdio::StdoutLock as std::io::Write>::write (1 samples, 0.14%) + + + + + __GI___libc_write (1 samples, 0.14%) + + + + + entry_SYSCALL_64 (1 samples, 0.14%) + + + + + perf-exec (11 samples, 1.51%) + + + + + entry_SYSCALL_64_after_hwframe (11 samples, 1.51%) + + + + + do_syscall_64 (11 samples, 1.51%) + + + + + __x64_sys_execve (11 samples, 1.51%) + + + + + do_execveat_common.isra.0 (11 samples, 1.51%) + + + + + bprm_execve (11 samples, 1.51%) + + + + + load_elf_binary (11 samples, 1.51%) + + + + + begin_new_exec (11 samples, 1.51%) + + + + + perf_event_exec (11 samples, 1.51%) + + + + + __raw_callee_save___pv_queued_spin_unlock (11 samples, 1.51%) + + + + + regex_automata::nfa::thompson::pikevm::ActiveStates::new (1 samples, 0.14%) + + + + + regex_automata::nfa::thompson::pikevm::ActiveStates::reset (1 samples, 0.14%) + + + + + alloc::raw_vec::RawVec<T,A>::reserve::do_reserve_and_handle (1 samples, 0.14%) + + + + + alloc::raw_vec::finish_grow (1 samples, 0.14%) + + + + + malloc (1 samples, 0.14%) + + + + + _int_malloc (1 samples, 0.14%) + + + + + <regex_automata::meta::strategy::ReverseInner as regex_automata::meta::strategy::Strategy>::create_cache (2 samples, 0.28%) + + + + + regex_automata::hybrid::dfa::Cache::new (1 samples, 0.14%) + + + + + regex_automata::hybrid::dfa::Lazy::init_cache (1 samples, 0.14%) + + + + + malloc_consolidate (1 samples, 0.14%) + + + + + alloc::raw_vec::RawVec<T,A>::reserve::do_reserve_and_handle (5 samples, 0.69%) + + + + + alloc::raw_vec::finish_grow (5 samples, 0.69%) + + + + + malloc (5 samples, 0.69%) + + + + + _int_malloc (5 samples, 0.69%) + + + + + regex_automata::nfa::thompson::pikevm::ActiveStates::new (6 samples, 0.83%) + + + + + regex_automata::nfa::thompson::pikevm::ActiveStates::reset (6 samples, 0.83%) + + + + + __memset_avx512_unaligned_erms (1 samples, 0.14%) + + + + + asm_exc_page_fault (1 samples, 0.14%) + + + + + exc_page_fault (1 samples, 0.14%) + + + + + do_user_addr_fault (1 samples, 0.14%) + + + + + handle_mm_fault (1 samples, 0.14%) + + + + + __handle_mm_fault (1 samples, 0.14%) + + + + + __alloc_pages (1 samples, 0.14%) + + + + + get_page_from_freelist (1 samples, 0.14%) + + + + + __list_del_entry_valid (1 samples, 0.14%) + + + + + regex_automata::util::sparse_set::SparseSets::new (1 samples, 0.14%) + + + + + alloc::raw_vec::RawVec<T,A>::reserve::do_reserve_and_handle (1 samples, 0.14%) + + + + + alloc::raw_vec::finish_grow (1 samples, 0.14%) + + + + + malloc (1 samples, 0.14%) + + + + + _int_malloc (1 samples, 0.14%) + + + + + regex_automata::util::pool::inner::Pool<T,F>::get_slow (10 samples, 1.38%) + + + + + regex_automata::meta::regex::Builder::build_many_from_hir::{{closure}} (10 samples, 1.38%) + + + + + <regex_automata::meta::strategy::Core as regex_automata::meta::strategy::Strategy>::create_cache (8 samples, 1.10%) + + + + + regex_automata::hybrid::dfa::Cache::new (2 samples, 0.28%) + + + + + regex_automata::meta::regex::Regex::create_captures (1 samples, 0.14%) + + + + + regex_syntax::hir::translate::TranslatorI::push (1 samples, 0.14%) + + + + + regex_syntax::hir::translate::TranslatorI::push (2 samples, 0.28%) + + + + + regex_syntax::hir::interval::IntervalSet<I>::canonicalize (1 samples, 0.14%) + + + + + <regex_syntax::hir::translate::TranslatorI as regex_syntax::ast::visitor::Visitor>::visit_pre (5 samples, 0.69%) + + + + + regex_syntax::hir::translate::TranslatorI::push (3 samples, 0.41%) + + + + + regex_syntax::hir::translate::HirFrame::unwrap_expr (1 samples, 0.14%) + + + + + regex_syntax::hir::Properties::repetition (1 samples, 0.14%) + + + + + malloc (2 samples, 0.28%) + + + + + regex_syntax::hir::Hir::literal (3 samples, 0.41%) + + + + + regex_syntax::hir::Hir::into_parts (1 samples, 0.14%) + + + + + malloc (2 samples, 0.28%) + + + + + _int_malloc (2 samples, 0.28%) + + + + + cfree@GLIBC_2.2.5 (1 samples, 0.14%) + + + + + _int_free (1 samples, 0.14%) + + + + + alloc::raw_vec::RawVec<T,A>::reserve_for_push (1 samples, 0.14%) + + + + + alloc::raw_vec::finish_grow (1 samples, 0.14%) + + + + + __rust_alloc (1 samples, 0.14%) + + + + + regex_syntax::hir::Hir::concat (10 samples, 1.38%) + + + + + regex_syntax::hir::Hir::alternation (1 samples, 0.14%) + + + + + malloc (1 samples, 0.14%) + + + + + _int_malloc (1 samples, 0.14%) + + + + + sysmalloc (1 samples, 0.14%) + + + + + asm_exc_page_fault (1 samples, 0.14%) + + + + + exc_page_fault (1 samples, 0.14%) + + + + + do_user_addr_fault (1 samples, 0.14%) + + + + + handle_mm_fault (1 samples, 0.14%) + + + + + __handle_mm_fault (1 samples, 0.14%) + + + + + __mem_cgroup_charge (1 samples, 0.14%) + + + + + get_mem_cgroup_from_mm (1 samples, 0.14%) + + + + + alloc::vec::Vec<T,A>::into_boxed_slice (1 samples, 0.14%) + + + + + realloc (1 samples, 0.14%) + + + + + alloc::raw_vec::RawVec<T,A>::reserve::do_reserve_and_handle (1 samples, 0.14%) + + + + + alloc::raw_vec::finish_grow (1 samples, 0.14%) + + + + + realloc (1 samples, 0.14%) + + + + + <regex_syntax::hir::translate::TranslatorI as regex_syntax::ast::visitor::Visitor>::visit_post (29 samples, 3.99%) + + <reg.. + + + regex_syntax::hir::translate::TranslatorI::push (1 samples, 0.14%) + + + + + <regex_syntax::hir::translate::TranslatorI as regex_syntax::ast::visitor::Visitor>::visit_class_set_item_post (2 samples, 0.28%) + + + + + regex_syntax::hir::interval::IntervalSet<I>::negate (1 samples, 0.14%) + + + + + regex_syntax::hir::translate::Translator::translate (39 samples, 5.36%) + + regex_s.. + + + regex_syntax::ast::visitor::visit (39 samples, 5.36%) + + regex_s.. + + + regex_syntax::ast::visitor::visit (1 samples, 0.14%) + + + + + <regex_syntax::ast::parse::NestLimiter<P> as regex_syntax::ast::visitor::Visitor>::visit_pre (1 samples, 0.14%) + + + + + regex_syntax::ast::parse::ParserI<P>::push_group (1 samples, 0.14%) + + + + + regex_syntax::ast::Concat::into_ast (1 samples, 0.14%) + + + + + alloc::raw_vec::RawVec<T,A>::reserve_for_push (1 samples, 0.14%) + + + + + alloc::raw_vec::finish_grow (1 samples, 0.14%) + + + + + realloc (1 samples, 0.14%) + + + + + _int_realloc (1 samples, 0.14%) + + + + + _int_malloc (1 samples, 0.14%) + + + + + regex_syntax::ast::parse::ParserI<P>::push_alternate (3 samples, 0.41%) + + + + + regex_syntax::ast::parse::ParserI<P>::maybe_parse_ascii_class (1 samples, 0.14%) + + + + + regex_syntax::ast::parse::ParserI<P>::char (1 samples, 0.14%) + + + + + regex_syntax::ast::parse::ParserI<P>::parse_set_class (4 samples, 0.55%) + + + + + regex_syntax::ast::parse::ParserI<P>::char (1 samples, 0.14%) + + + + + regex_syntax::ast::parse::ParserI<P>::bump (1 samples, 0.14%) + + + + + unlink_chunk.constprop.0 (1 samples, 0.14%) + + + + + _int_malloc (2 samples, 0.28%) + + + + + malloc (5 samples, 0.69%) + + + + + alloc::raw_vec::RawVec<T,A>::reserve_for_push (1 samples, 0.14%) + + + + + alloc::raw_vec::finish_grow (1 samples, 0.14%) + + + + + malloc (1 samples, 0.14%) + + + + + regex_syntax::ast::parse::Parser::parse (27 samples, 3.71%) + + rege.. + + + regex_syntax::ast::parse::ParserI<P>::parse_with_comments (27 samples, 3.71%) + + rege.. + + + __memmove_avx512_unaligned_erms (1 samples, 0.14%) + + + + + core::ptr::drop_in_place<regex_syntax::ast::ClassSet> (2 samples, 0.28%) + + + + + <regex_syntax::ast::ClassSet as core::ops::drop::Drop>::drop (2 samples, 0.28%) + + + + + <alloc::vec::Vec<T,A> as alloc::vec::spec_extend::SpecExtend<T,I>>::spec_extend (1 samples, 0.14%) + + + + + alloc::raw_vec::RawVec<T,A>::reserve::do_reserve_and_handle (1 samples, 0.14%) + + + + + alloc::raw_vec::finish_grow (1 samples, 0.14%) + + + + + realloc (1 samples, 0.14%) + + + + + _int_realloc (1 samples, 0.14%) + + + + + _int_malloc (1 samples, 0.14%) + + + + + malloc_consolidate (1 samples, 0.14%) + + + + + unlink_chunk.constprop.0 (1 samples, 0.14%) + + + + + cfree@GLIBC_2.2.5 (1 samples, 0.14%) + + + + + _int_free (1 samples, 0.14%) + + + + + core::ptr::drop_in_place<regex_syntax::ast::Ast> (4 samples, 0.55%) + + + + + malloc_consolidate (1 samples, 0.14%) + + + + + _int_free (5 samples, 0.69%) + + + + + cfree@GLIBC_2.2.5 (6 samples, 0.83%) + + + + + <alloc::vec::Vec<T,A> as alloc::vec::spec_extend::SpecExtend<T,I>>::spec_extend (1 samples, 0.14%) + + + + + alloc::raw_vec::RawVec<T,A>::reserve::do_reserve_and_handle (1 samples, 0.14%) + + + + + alloc::raw_vec::finish_grow (1 samples, 0.14%) + + + + + realloc (1 samples, 0.14%) + + + + + _int_realloc (1 samples, 0.14%) + + + + + _int_malloc (1 samples, 0.14%) + + + + + core::ptr::drop_in_place<regex_syntax::ast::Ast> (14 samples, 1.93%) + + c.. + + + <regex_syntax::ast::Ast as core::ops::drop::Drop>::drop (14 samples, 1.93%) + + <.. + + + malloc (1 samples, 0.14%) + + + + + core::ptr::drop_in_place<alloc::boxed::Box<regex_syntax::hir::Hir>> (1 samples, 0.14%) + + + + + <regex_syntax::hir::Hir as core::ops::drop::Drop>::drop (1 samples, 0.14%) + + + + + regex::builders::Builder::build_one_bytes (84 samples, 11.55%) + + regex::builders::.. + + + regex_automata::meta::regex::Builder::build (84 samples, 11.55%) + + regex_automata::m.. + + + <alloc::vec::Vec<T,A> as core::ops::drop::Drop>::drop (4 samples, 0.55%) + + + + + <regex_syntax::hir::Hir as core::ops::drop::Drop>::drop (4 samples, 0.55%) + + + + + cfree@GLIBC_2.2.5 (2 samples, 0.28%) + + + + + _int_free (2 samples, 0.28%) + + + + + malloc_consolidate (1 samples, 0.14%) + + + + + unlink_chunk.constprop.0 (1 samples, 0.14%) + + + + + s4lib::readers::syslinereader::SyslineReader::find_sysline_in_block_year (97 samples, 13.34%) + + s4lib::readers::sysl.. + + + s4lib::readers::syslinereader::SyslineReader::parse_datetime_in_line_cached (97 samples, 13.34%) + + s4lib::readers::sysl.. + + + s4lib::data::datetime::bytes_to_regex_to_datetime (97 samples, 13.34%) + + s4lib::data::datetim.. + + + once_cell::imp::OnceCell<T>::initialize (86 samples, 11.83%) + + once_cell::imp::On.. + + + once_cell::imp::initialize_or_wait (86 samples, 11.83%) + + once_cell::imp::in.. + + + once_cell::imp::OnceCell<T>::initialize::_{{closure}} (86 samples, 11.83%) + + once_cell::imp::On.. + + + regex::regex::bytes::Regex::new (86 samples, 11.83%) + + regex::regex::byte.. + + + <alloc::vec::Vec<T,A> as alloc::vec::spec_extend::SpecExtend<T,I>>::spec_extend (2 samples, 0.28%) + + + + + <core::iter::adapters::map::Map<I,F> as core::iter::traits::iterator::Iterator>::fold (2 samples, 0.28%) + + + + + malloc (2 samples, 0.28%) + + + + + _int_malloc (2 samples, 0.28%) + + + + + s4lib::readers::syslogprocessor::SyslogProcessor::process_stage1_blockzero_analysis (98 samples, 13.48%) + + s4lib::readers::sysl.. + + + s4lib::readers::blockreader::BlockReader::read_block (1 samples, 0.14%) + + + + + s4lib::readers::blockreader::BlockReader::read_block_FileBz2 (1 samples, 0.14%) + + + + + __memset_avx512_unaligned_erms (1 samples, 0.14%) + + + + + asm_exc_page_fault (1 samples, 0.14%) + + + + + s4lib::readers::linereader::LineReader::drop_line (1 samples, 0.14%) + + + + + <alloc::vec::into_iter::IntoIter<T,A> as core::ops::drop::Drop>::drop (1 samples, 0.14%) + + + + + s4lib::readers::linereader::LineReader::drop_lines (3 samples, 0.41%) + + + + + s4lib::readers::syslogprocessor::SyslogProcessor::drop_data_try (4 samples, 0.55%) + + + + + s4lib::readers::syslinereader::SyslineReader::drop_data (4 samples, 0.55%) + + + + + s4lib::readers::syslinereader::SyslineReader::drop_sysline (4 samples, 0.55%) + + + + + alloc::collections::btree::map::entry::OccupiedEntry<K,V,A>::remove_entry (1 samples, 0.14%) + + + + + alloc::collections::btree::remove::<impl alloc::collections::btree::node::Handle<alloc::collections::btree::node::NodeRef<alloc::collections::btree::node::marker::Mut,K,V,alloc::collections::btree::node::marker::LeafOrInternal>,alloc::collections::btree::node::marker::KV>>::remove_kv_tracking (1 samples, 0.14%) + + + + + alloc::collections::btree::remove::<impl alloc::collections::btree::node::Handle<alloc::collections::btree::node::NodeRef<alloc::collections::btree::node::marker::Mut,K,V,alloc::collections::btree::node::marker::Leaf>,alloc::collections::btree::node::marker::KV>>::remove_leaf_kv (1 samples, 0.14%) + + + + + __memmove_avx512_unaligned_erms (1 samples, 0.14%) + + + + + s4lib::data::line::Line::get_boxptrs (1 samples, 0.14%) + + + + + malloc (1 samples, 0.14%) + + + + + _int_malloc (1 samples, 0.14%) + + + + + <chrono::format::strftime::StrftimeItems as core::iter::traits::iterator::Iterator>::next (1 samples, 0.14%) + + + + + s4lib::data::datetime::datetime_parse_from_str (7 samples, 0.96%) + + + + + chrono::naive::datetime::NaiveDateTime::parse_from_str (7 samples, 0.96%) + + + + + chrono::format::parse::parse_internal (7 samples, 0.96%) + + + + + <core::hash::sip::Hasher<S> as core::hash::Hasher>::write (1 samples, 0.14%) + + + + + core::hash::BuildHasher::hash_one (2 samples, 0.28%) + + + + + regex_automata::util::captures::Captures::get_group_by_name (3 samples, 0.41%) + + + + + regex_automata::meta::regex::Regex::create_captures (1 samples, 0.14%) + + + + + __memset_avx512_unaligned_erms (1 samples, 0.14%) + + + + + regex_automata::meta::strategy::Core::search_slots_nofail (3 samples, 0.41%) + + + + + regex_automata::nfa::thompson::backtrack::BoundedBacktracker::try_search_slots (3 samples, 0.41%) + + + + + regex_automata::nfa::thompson::backtrack::BoundedBacktracker::try_search_slots_imp (3 samples, 0.41%) + + + + + regex_automata::nfa::thompson::backtrack::BoundedBacktracker::search_imp (3 samples, 0.41%) + + + + + <regex_automata::meta::strategy::Core as regex_automata::meta::strategy::Strategy>::search_slots (5 samples, 0.69%) + + + + + regex_automata::hybrid::regex::Regex::try_search (2 samples, 0.28%) + + + + + regex_automata::hybrid::search::find_fwd (2 samples, 0.28%) + + + + + s4lib::data::datetime::bytes_to_regex_to_datetime (17 samples, 2.34%) + + s.. + + + __rdl_alloc (1 samples, 0.14%) + + + + + <alloc::vec::Vec<T> as alloc::vec::spec_from_iter::SpecFromIter<T,I>>::from_iter (2 samples, 0.28%) + + + + + s4lib::readers::syslinereader::SyslineReader::parse_datetime_in_line_cached (21 samples, 2.89%) + + s4.. + + + alloc::collections::btree::navigate::<impl alloc::collections::btree::node::NodeRef<alloc::collections::btree::node::marker::Immut,K,V,alloc::collections::btree::node::marker::LeafOrInternal>>::range_search (1 samples, 0.14%) + + + + + alloc::collections::btree::node::Handle<alloc::collections::btree::node::NodeRef<alloc::collections::btree::node::marker::Mut,K,V,alloc::collections::btree::node::marker::Leaf>,alloc::collections::btree::node::marker::Edge>::insert_recursing (1 samples, 0.14%) + + + + + __memmove_avx512_unaligned_erms (1 samples, 0.14%) + + + + + rangemap::map::RangeMap<K,V>::insert (3 samples, 0.41%) + + + + + alloc::collections::btree::map::BTreeMap<K,V,A>::insert (2 samples, 0.28%) + + + + + s4lib::readers::syslinereader::SyslineReader::insert_sysline (4 samples, 0.55%) + + + + + __rdl_alloc (1 samples, 0.14%) + + + + + s4lib::readers::syslinereader::SyslineReader::check_store (1 samples, 0.14%) + + + + + s4lib::readers::linereader::LineReader::insert_line (1 samples, 0.14%) + + + + + alloc::collections::btree::map::BTreeMap<K,V,A>::insert (1 samples, 0.14%) + + + + + alloc::collections::btree::navigate::<impl alloc::collections::btree::node::NodeRef<alloc::collections::btree::node::marker::Immut,K,V,alloc::collections::btree::node::marker::LeafOrInternal>>::range_search (3 samples, 0.41%) + + + + + s4lib::readers::linereader::LineReader::get_linep (5 samples, 0.69%) + + + + + s4lib::readers::blockreader::BlockReader::drop_block (1 samples, 0.14%) + + + + + alloc::collections::btree::map::entry::OccupiedEntry<K,V,A>::remove_entry (1 samples, 0.14%) + + + + + alloc::collections::btree::remove::<impl alloc::collections::btree::node::Handle<alloc::collections::btree::node::NodeRef<alloc::collections::btree::node::marker::Mut,K,V,alloc::collections::btree::node::marker::LeafOrInternal>,alloc::collections::btree::node::marker::KV>>::remove_kv_tracking (1 samples, 0.14%) + + + + + alloc::collections::btree::remove::<impl alloc::collections::btree::node::Handle<alloc::collections::btree::node::NodeRef<alloc::collections::btree::node::marker::Mut,K,V,alloc::collections::btree::node::marker::Leaf>,alloc::collections::btree::node::marker::KV>>::remove_leaf_kv (1 samples, 0.14%) + + + + + s4lib::readers::blockreader::BlockReader::read_block_FileBz2 (3 samples, 0.41%) + + + + + __memset_avx512_unaligned_erms (2 samples, 0.28%) + + + + + s4lib::readers::blockreader::BlockReader::read_block (4 samples, 0.55%) + + + + + lru::LruCache<K,V,S>::put (2 samples, 0.28%) + + + + + alloc::collections::btree::map::BTreeMap<K,V,A>::contains_key (2 samples, 0.28%) + + + + + s4lib::readers::linereader::LineReader::find_line (27 samples, 3.71%) + + s4li.. + + + s4lib::readers::syslinereader::SyslineReader::find_sysline_between_datetime_filters (54 samples, 7.43%) + + s4lib::rea.. + + + s4lib::readers::syslinereader::SyslineReader::find_sysline_at_datetime_filter_linear_search (54 samples, 7.43%) + + s4lib::rea.. + + + s4lib::readers::syslinereader::SyslineReader::find_sysline_year (54 samples, 7.43%) + + s4lib::rea.. + + + crossbeam_channel::context::Context::with::{{closure}} (2 samples, 0.28%) + + + + + crossbeam_channel::channel::Sender<T>::send (3 samples, 0.41%) + + + + + clone3 (160 samples, 22.01%) + + clone3 + + + start_thread (160 samples, 22.01%) + + start_thread + + + std::sys::unix::thread::Thread::new::thread_start (160 samples, 22.01%) + + std::sys::unix::thread::Thread::new.. + + + core::ops::function::FnOnce::call_once{{vtable.shim}} (160 samples, 22.01%) + + core::ops::function::FnOnce::call_o.. + + + std::sys_common::backtrace::__rust_begin_short_backtrace (160 samples, 22.01%) + + std::sys_common::backtrace::__rust_.. + + + s4::exec_fileprocessor_thread (160 samples, 22.01%) + + s4::exec_fileprocessor_thread + + + s4lib::readers::syslogprocessor::SyslogProcessor::process_stage1_blockzero_analysis (2 samples, 0.28%) + + + + + s4lib::readers::syslinereader::SyslineReader::find_sysline_in_block_year (2 samples, 0.28%) + + + + + s4lib::readers::syslinereader::SyslineReader::parse_datetime_in_line_cached (2 samples, 0.28%) + + + + + s4lib::data::datetime::bytes_to_regex_to_datetime (2 samples, 0.28%) + + + + + once_cell::imp::OnceCell<T>::initialize (2 samples, 0.28%) + + + + + once_cell::imp::initialize_or_wait (2 samples, 0.28%) + + + + + once_cell::imp::OnceCell<T>::initialize::_{{closure}} (2 samples, 0.28%) + + + + + regex::regex::bytes::Regex::new (2 samples, 0.28%) + + + + + regex::builders::Builder::build_one_bytes (2 samples, 0.28%) + + + + + regex_automata::meta::regex::Builder::build (2 samples, 0.28%) + + + + + regex_automata::meta::strategy::new (2 samples, 0.28%) + + + + + regex_automata::nfa::thompson::compiler::Compiler::build_many_from_hir (2 samples, 0.28%) + + + + + regex_automata::nfa::thompson::builder::Builder::build (2 samples, 0.28%) + + + + + malloc (2 samples, 0.28%) + + + + + _int_malloc (2 samples, 0.28%) + + + + + regex_automata::nfa::thompson::compiler::Compiler::c_bounded (1 samples, 0.14%) + + + + + regex_automata::nfa::thompson::builder::Builder::patch (1 samples, 0.14%) + + + + + alloc::raw_vec::RawVec<T,A>::reserve_for_push (1 samples, 0.14%) + + + + + alloc::raw_vec::finish_grow (1 samples, 0.14%) + + + + + regex_automata::nfa::thompson::literal_trie::LiteralTrie::add (2 samples, 0.28%) + + + + + regex_automata::nfa::thompson::compiler::Compiler::build_many_from_hir (4 samples, 0.55%) + + + + + <core::iter::adapters::map::Map<I,F> as core::iter::traits::iterator::Iterator>::next (4 samples, 0.55%) + + + + + regex_automata::nfa::thompson::compiler::Compiler::c_cap (4 samples, 0.55%) + + + + + regex_automata::nfa::thompson::compiler::Compiler::c (4 samples, 0.55%) + + + + + regex_automata::nfa::thompson::compiler::Compiler::c_cap (4 samples, 0.55%) + + + + + regex_automata::nfa::thompson::compiler::Compiler::c (3 samples, 0.41%) + + + + + cfree@GLIBC_2.2.5 (1 samples, 0.14%) + + + + + _int_free (1 samples, 0.14%) + + + + + asm_exc_page_fault (1 samples, 0.14%) + + + + + exc_page_fault (1 samples, 0.14%) + + + + + do_user_addr_fault (1 samples, 0.14%) + + + + + handle_mm_fault (1 samples, 0.14%) + + + + + __handle_mm_fault (1 samples, 0.14%) + + + + + __alloc_pages (1 samples, 0.14%) + + + + + get_page_from_freelist (1 samples, 0.14%) + + + + + regex_automata::meta::wrappers::OnePass::new (2 samples, 0.28%) + + + + + regex_automata::dfa::onepass::Builder::build_from_nfa (2 samples, 0.28%) + + + + + regex_automata::dfa::onepass::InternalBuilder::compile_transition (2 samples, 0.28%) + + + + + regex_automata::dfa::onepass::InternalBuilder::add_dfa_state_for_nfa_state (2 samples, 0.28%) + + + + + __memset_avx512_unaligned_erms (2 samples, 0.28%) + + + + + alloc::raw_vec::RawVec<T,A>::reserve_for_push (1 samples, 0.14%) + + + + + alloc::raw_vec::finish_grow (1 samples, 0.14%) + + + + + realloc (1 samples, 0.14%) + + + + + _int_realloc (1 samples, 0.14%) + + + + + __memmove_avx512_unaligned_erms (1 samples, 0.14%) + + + + + regex_syntax::hir::literal::Seq::optimize_by_preference (2 samples, 0.28%) + + + + + regex_syntax::hir::literal::PreferenceTrie::minimize (2 samples, 0.28%) + + + + + alloc::vec::Vec<T,A>::retain_mut (2 samples, 0.28%) + + + + + regex_syntax::hir::literal::PreferenceTrie::insert (2 samples, 0.28%) + + + + + alloc::raw_vec::RawVec<T,A>::reserve::do_reserve_and_handle (1 samples, 0.14%) + + + + + alloc::raw_vec::finish_grow (1 samples, 0.14%) + + + + + __memcmp_evex_movbe (1 samples, 0.14%) + + + + + regex_syntax::hir::literal::Extractor::union (2 samples, 0.28%) + + + + + <alloc::vec::Vec<T,A> as alloc::vec::spec_extend::SpecExtend<T,I>>::spec_extend (1 samples, 0.14%) + + + + + s4lib::readers::syslinereader::SyslineReader::parse_datetime_in_line_cached (11 samples, 1.51%) + + + + + s4lib::data::datetime::bytes_to_regex_to_datetime (11 samples, 1.51%) + + + + + once_cell::imp::OnceCell<T>::initialize (11 samples, 1.51%) + + + + + once_cell::imp::initialize_or_wait (11 samples, 1.51%) + + + + + once_cell::imp::OnceCell<T>::initialize::_{{closure}} (11 samples, 1.51%) + + + + + regex::regex::bytes::Regex::new (11 samples, 1.51%) + + + + + regex::builders::Builder::build_one_bytes (11 samples, 1.51%) + + + + + regex_automata::meta::regex::Builder::build (11 samples, 1.51%) + + + + + regex_automata::meta::strategy::new (11 samples, 1.51%) + + + + + regex_automata::meta::reverse_inner::extract (5 samples, 0.69%) + + + + + regex_syntax::hir::literal::Extractor::extract (3 samples, 0.41%) + + + + + regex_syntax::hir::literal::Extractor::extract (3 samples, 0.41%) + + + + + hashbrown::raw::RawTable<T,A>::insert (1 samples, 0.14%) + + + + + hashbrown::raw::RawTable<T,A>::reserve_rehash (1 samples, 0.14%) + + + + + regex_automata::util::captures::GroupInfo::new (2 samples, 0.28%) + + + + + hashbrown::map::HashMap<K,V,S,A>::insert (2 samples, 0.28%) + + + + + core::hash::BuildHasher::hash_one (1 samples, 0.14%) + + + + + __memset_avx512_unaligned_erms (1 samples, 0.14%) + + + + + regex_automata::nfa::thompson::nfa::Inner::into_nfa (2 samples, 0.28%) + + + + + s4lib::readers::syslinereader::SyslineReader::find_sysline_in_block_year (5 samples, 0.69%) + + + + + s4lib::readers::syslinereader::SyslineReader::parse_datetime_in_line_cached (5 samples, 0.69%) + + + + + s4lib::data::datetime::bytes_to_regex_to_datetime (5 samples, 0.69%) + + + + + once_cell::imp::OnceCell<T>::initialize (5 samples, 0.69%) + + + + + once_cell::imp::initialize_or_wait (5 samples, 0.69%) + + + + + once_cell::imp::OnceCell<T>::initialize::_{{closure}} (5 samples, 0.69%) + + + + + regex::regex::bytes::Regex::new (5 samples, 0.69%) + + + + + regex::builders::Builder::build_one_bytes (5 samples, 0.69%) + + + + + regex_automata::meta::regex::Builder::build (5 samples, 0.69%) + + + + + regex_automata::meta::strategy::new (5 samples, 0.69%) + + + + + regex_automata::nfa::thompson::compiler::Compiler::build_many_from_hir (5 samples, 0.69%) + + + + + regex_automata::nfa::thompson::builder::Builder::build (5 samples, 0.69%) + + + + + regex_automata::nfa::thompson::nfa::Inner::add (1 samples, 0.14%) + + + + + alloc::raw_vec::RawVec<T,A>::reserve_for_push (1 samples, 0.14%) + + + + + alloc::raw_vec::finish_grow (1 samples, 0.14%) + + + + + realloc (1 samples, 0.14%) + + + + + _int_realloc (1 samples, 0.14%) + + + + + _int_malloc (1 samples, 0.14%) + + + + + malloc (1 samples, 0.14%) + + + + + alloc::raw_vec::RawVec<T,A>::reserve_for_push (3 samples, 0.41%) + + + + + alloc::raw_vec::finish_grow (3 samples, 0.41%) + + + + + regex_automata::nfa::thompson::literal_trie::LiteralTrie::compile (8 samples, 1.10%) + + + + + alloc::raw_vec::RawVec<T,A>::reserve_for_push (2 samples, 0.28%) + + + + + alloc::raw_vec::finish_grow (2 samples, 0.28%) + + + + + malloc (2 samples, 0.28%) + + + + + _int_malloc (2 samples, 0.28%) + + + + + _int_malloc (2 samples, 0.28%) + + + + + malloc (3 samples, 0.41%) + + + + + regex_automata::nfa::thompson::literal_trie::LiteralTrie::add (6 samples, 0.83%) + + + + + alloc::raw_vec::RawVec<T,A>::reserve::do_reserve_and_handle (4 samples, 0.55%) + + + + + alloc::raw_vec::finish_grow (4 samples, 0.55%) + + + + + __rdl_alloc (1 samples, 0.14%) + + + + + malloc_consolidate (1 samples, 0.14%) + + + + + unlink_chunk.constprop.0 (1 samples, 0.14%) + + + + + regex_automata::nfa::thompson::compiler::Compiler::build_many_from_hir (17 samples, 2.34%) + + r.. + + + <core::iter::adapters::map::Map<I,F> as core::iter::traits::iterator::Iterator>::next (17 samples, 2.34%) + + <.. + + + regex_automata::nfa::thompson::compiler::Compiler::c_cap (17 samples, 2.34%) + + r.. + + + regex_automata::nfa::thompson::compiler::Compiler::c (17 samples, 2.34%) + + r.. + + + regex_automata::nfa::thompson::compiler::Compiler::c_cap (17 samples, 2.34%) + + r.. + + + regex_automata::nfa::thompson::compiler::Compiler::c (17 samples, 2.34%) + + r.. + + + cfree@GLIBC_2.2.5 (3 samples, 0.41%) + + + + + _int_free (3 samples, 0.41%) + + + + + s4lib::data::datetime::bytes_to_regex_to_datetime (18 samples, 2.48%) + + s4.. + + + once_cell::imp::OnceCell<T>::initialize (18 samples, 2.48%) + + on.. + + + once_cell::imp::initialize_or_wait (18 samples, 2.48%) + + on.. + + + once_cell::imp::OnceCell<T>::initialize::_{{closure}} (18 samples, 2.48%) + + on.. + + + regex::regex::bytes::Regex::new (18 samples, 2.48%) + + re.. + + + regex::builders::Builder::build_one_bytes (18 samples, 2.48%) + + re.. + + + regex_automata::meta::regex::Builder::build (18 samples, 2.48%) + + re.. + + + regex_automata::meta::strategy::new (18 samples, 2.48%) + + re.. + + + regex_automata::meta::reverse_inner::extract (1 samples, 0.14%) + + + + + <regex_syntax::hir::Hir as core::ops::drop::Drop>::drop (1 samples, 0.14%) + + + + + <alloc::vec::Vec<T,A> as alloc::vec::spec_extend::SpecExtend<T,I>>::spec_extend (1 samples, 0.14%) + + + + + alloc::raw_vec::RawVec<T,A>::reserve::do_reserve_and_handle (1 samples, 0.14%) + + + + + alloc::raw_vec::finish_grow (1 samples, 0.14%) + + + + + realloc (1 samples, 0.14%) + + + + + _int_realloc (1 samples, 0.14%) + + + + + _int_malloc (1 samples, 0.14%) + + + + + malloc_consolidate (1 samples, 0.14%) + + + + + regex_syntax::ast::parse::ParserI<P>::parse_set_class_open (2 samples, 0.28%) + + + + + regex_syntax::ast::parse::Parser::parse (3 samples, 0.41%) + + + + + regex_syntax::ast::parse::ParserI<P>::parse_with_comments (3 samples, 0.41%) + + + + + regex_syntax::ast::parse::ParserI<P>::parse_set_class (3 samples, 0.41%) + + + + + regex_syntax::ast::parse::ParserI<P>::push_class_open (3 samples, 0.41%) + + + + + alloc::raw_vec::RawVec<T,A>::reserve_for_push (1 samples, 0.14%) + + + + + alloc::raw_vec::finish_grow (1 samples, 0.14%) + + + + + malloc (1 samples, 0.14%) + + + + + _int_malloc (1 samples, 0.14%) + + + + + malloc_consolidate (1 samples, 0.14%) + + + + + unlink_chunk.constprop.0 (1 samples, 0.14%) + + + + + regex_automata::util::prefilter::suffixes (2 samples, 0.28%) + + + + + regex_syntax::hir::literal::Extractor::extract (2 samples, 0.28%) + + + + + regex_syntax::hir::literal::Extractor::extract (2 samples, 0.28%) + + + + + regex_syntax::hir::literal::Extractor::extract (2 samples, 0.28%) + + + + + regex_syntax::hir::literal::Extractor::cross (2 samples, 0.28%) + + + + + alloc::raw_vec::RawVec<T,A>::reserve_for_push (1 samples, 0.14%) + + + + + alloc::raw_vec::finish_grow (1 samples, 0.14%) + + + + + realloc (1 samples, 0.14%) + + + + + _int_realloc (1 samples, 0.14%) + + + + + _int_malloc (1 samples, 0.14%) + + + + + malloc_consolidate (1 samples, 0.14%) + + + + + unlink_chunk.constprop.0 (1 samples, 0.14%) + + + + + regex_syntax::hir::literal::Seq::optimize_by_preference (2 samples, 0.28%) + + + + + regex_syntax::hir::literal::PreferenceTrie::minimize (2 samples, 0.28%) + + + + + alloc::vec::Vec<T,A>::retain_mut (2 samples, 0.28%) + + + + + regex_syntax::hir::literal::PreferenceTrie::insert (2 samples, 0.28%) + + + + + alloc::raw_vec::RawVec<T,A>::reserve::do_reserve_and_handle (1 samples, 0.14%) + + + + + alloc::raw_vec::finish_grow (1 samples, 0.14%) + + + + + realloc (1 samples, 0.14%) + + + + + _int_realloc (1 samples, 0.14%) + + + + + __memmove_avx512_unaligned_erms (1 samples, 0.14%) + + + + + __memcmp_evex_movbe (1 samples, 0.14%) + + + + + regex_syntax::hir::literal::Extractor::union (2 samples, 0.28%) + + + + + <alloc::vec::Vec<T,A> as alloc::vec::spec_extend::SpecExtend<T,I>>::spec_extend (1 samples, 0.14%) + + + + + regex_automata::util::prefilter::prefixes (5 samples, 0.69%) + + + + + regex_syntax::hir::literal::Extractor::extract (3 samples, 0.41%) + + + + + regex_syntax::hir::literal::Extractor::extract (3 samples, 0.41%) + + + + + regex_automata::nfa::thompson::compiler::Compiler::c_at_least (1 samples, 0.14%) + + + + + regex_automata::nfa::thompson::nfa::Inner::add (3 samples, 0.41%) + + + + + malloc (1 samples, 0.14%) + + + + + alloc::vec::Vec<T,A>::into_boxed_slice (1 samples, 0.14%) + + + + + __rust_alloc (1 samples, 0.14%) + + + + + regex_automata::nfa::thompson::compiler::Compiler::build_many_from_hir (8 samples, 1.10%) + + + + + regex_automata::nfa::thompson::builder::Builder::build (7 samples, 0.96%) + + + + + regex_automata::meta::wrappers::BoundedBacktracker::new (1 samples, 0.14%) + + + + + regex_automata::nfa::thompson::compiler::Compiler::new (1 samples, 0.14%) + + + + + regex_automata::nfa::thompson::range_trie::RangeTrie::new (1 samples, 0.14%) + + + + + regex_automata::nfa::thompson::range_trie::RangeTrie::add_empty (1 samples, 0.14%) + + + + + core::ptr::drop_in_place<core::cell::RefCell<regex_automata::nfa::thompson::compiler::Utf8State>> (1 samples, 0.14%) + + + + + core::ptr::drop_in_place<alloc::vec::Vec<core::option::Option<alloc::sync::Arc<str>>>> (1 samples, 0.14%) + + + + + malloc_consolidate (1 samples, 0.14%) + + + + + _int_free (4 samples, 0.55%) + + + + + s4lib::readers::syslogprocessor::SyslogProcessor::process_stage1_blockzero_analysis (26 samples, 3.58%) + + s4li.. + + + s4lib::readers::syslinereader::SyslineReader::find_sysline_in_block_year (26 samples, 3.58%) + + s4li.. + + + s4lib::readers::syslinereader::SyslineReader::parse_datetime_in_line_cached (26 samples, 3.58%) + + s4li.. + + + s4lib::data::datetime::bytes_to_regex_to_datetime (26 samples, 3.58%) + + s4li.. + + + once_cell::imp::OnceCell<T>::initialize (26 samples, 3.58%) + + once.. + + + once_cell::imp::initialize_or_wait (26 samples, 3.58%) + + once.. + + + once_cell::imp::OnceCell<T>::initialize::_{{closure}} (26 samples, 3.58%) + + once.. + + + regex::regex::bytes::Regex::new (26 samples, 3.58%) + + rege.. + + + regex::builders::Builder::build_one_bytes (26 samples, 3.58%) + + rege.. + + + regex_automata::meta::regex::Builder::build (26 samples, 3.58%) + + rege.. + + + regex_automata::meta::strategy::new (23 samples, 3.16%) + + reg.. + + + core::ptr::drop_in_place<regex_automata::nfa::thompson::compiler::Compiler> (7 samples, 0.96%) + + + + + cfree@GLIBC_2.2.5 (5 samples, 0.69%) + + + + + s4::exec_fileprocessor_thread (27 samples, 3.71%) + + s4::.. + + + s4lib::readers::syslogprocessor::SyslogProcessor::new (1 samples, 0.14%) + + + + + s4lib::readers::syslinereader::SyslineReader::new (1 samples, 0.14%) + + + + + s4lib::readers::linereader::LineReader::new (1 samples, 0.14%) + + + + + s4lib::readers::blockreader::BlockReader::new (1 samples, 0.14%) + + + + + asm_exc_page_fault (1 samples, 0.14%) + + + + + exc_page_fault (1 samples, 0.14%) + + + + + do_user_addr_fault (1 samples, 0.14%) + + + + + handle_mm_fault (1 samples, 0.14%) + + + + + __handle_mm_fault (1 samples, 0.14%) + + + + + filemap_map_pages (1 samples, 0.14%) + + + + + next_uptodate_page (1 samples, 0.14%) + + + + + regex_automata::meta::wrappers::Hybrid::new (1 samples, 0.14%) + + + + + regex_automata::hybrid::dfa::Builder::build_from_nfa (1 samples, 0.14%) + + + + + aho_corasick::nfa::noncontiguous::Compiler::shuffle (1 samples, 0.14%) + + + + + aho_corasick::util::remapper::Remapper::remap (1 samples, 0.14%) + + + + + <aho_corasick::nfa::noncontiguous::NFA as aho_corasick::util::remapper::Remappable>::remap (1 samples, 0.14%) + + + + + aho_corasick::nfa::noncontiguous::Compiler::set_anchored_start_state (1 samples, 0.14%) + + + + + aho_corasick::nfa::noncontiguous::Compiler::init_unanchored_start_state (1 samples, 0.14%) + + + + + aho_corasick::nfa::noncontiguous::NFA::init_full_state (1 samples, 0.14%) + + + + + aho_corasick::nfa::noncontiguous::Compiler::densify (1 samples, 0.14%) + + + + + regex_automata::meta::strategy::new (7 samples, 0.96%) + + + + + regex_automata::meta::reverse_inner::extract (6 samples, 0.83%) + + + + + regex_automata::util::prefilter::Choice::new (6 samples, 0.83%) + + + + + regex_automata::util::prefilter::teddy::Teddy::new (6 samples, 0.83%) + + + + + aho_corasick::nfa::noncontiguous::Builder::build (6 samples, 0.83%) + + + + + regex_automata::util::prefilter::Prefilter::new (1 samples, 0.14%) + + + + + regex_automata::util::prefilter::Choice::new (1 samples, 0.14%) + + + + + regex_automata::util::prefilter::teddy::Teddy::new (1 samples, 0.14%) + + + + + aho_corasick::dfa::Builder::build_from_noncontiguous (1 samples, 0.14%) + + + + + malloc (1 samples, 0.14%) + + + + + _int_malloc (1 samples, 0.14%) + + + + + sysmalloc (1 samples, 0.14%) + + + + + asm_exc_page_fault (1 samples, 0.14%) + + + + + exc_page_fault (1 samples, 0.14%) + + + + + do_user_addr_fault (1 samples, 0.14%) + + + + + handle_mm_fault (1 samples, 0.14%) + + + + + __handle_mm_fault (1 samples, 0.14%) + + + + + __alloc_pages (1 samples, 0.14%) + + + + + get_page_from_freelist (1 samples, 0.14%) + + + + + kernel_init_free_pages.part.0 (1 samples, 0.14%) + + + + + clear_page_erms (1 samples, 0.14%) + + + + + asm_exc_page_fault (1 samples, 0.14%) + + + + + exc_page_fault (1 samples, 0.14%) + + + + + do_user_addr_fault (1 samples, 0.14%) + + + + + handle_mm_fault (1 samples, 0.14%) + + + + + __handle_mm_fault (1 samples, 0.14%) + + + + + __alloc_pages (1 samples, 0.14%) + + + + + get_page_from_freelist (1 samples, 0.14%) + + + + + kernel_init_free_pages.part.0 (1 samples, 0.14%) + + + + + clear_page_erms (1 samples, 0.14%) + + + + + regex_automata::nfa::thompson::compiler::Utf8Compiler::new (3 samples, 0.41%) + + + + + regex_automata::nfa::thompson::map::Utf8BoundedMap::clear (3 samples, 0.41%) + + + + + <T as alloc::vec::spec_from_elem::SpecFromElem>::from_elem (3 samples, 0.41%) + + + + + alloc::vec::Vec<T,A>::extend_with (2 samples, 0.28%) + + + + + regex_automata::nfa::thompson::compiler::Compiler::build_many_from_hir (4 samples, 0.55%) + + + + + <core::iter::adapters::map::Map<I,F> as core::iter::traits::iterator::Iterator>::next (4 samples, 0.55%) + + + + + regex_automata::nfa::thompson::compiler::Compiler::c_cap (4 samples, 0.55%) + + + + + regex_automata::nfa::thompson::compiler::Compiler::c (4 samples, 0.55%) + + + + + regex_automata::nfa::thompson::compiler::Compiler::c_cap (4 samples, 0.55%) + + + + + regex_automata::nfa::thompson::compiler::Compiler::c (4 samples, 0.55%) + + + + + regex_automata::nfa::thompson::compiler::Compiler::c_alt_iter (4 samples, 0.55%) + + + + + regex_automata::nfa::thompson::compiler::Compiler::c (4 samples, 0.55%) + + + + + regex_automata::nfa::thompson::compiler::Compiler::c (4 samples, 0.55%) + + + + + regex_automata::nfa::thompson::builder::Builder::add (1 samples, 0.14%) + + + + + alloc::raw_vec::RawVec<T,A>::reserve_for_push (1 samples, 0.14%) + + + + + alloc::raw_vec::finish_grow (1 samples, 0.14%) + + + + + realloc (1 samples, 0.14%) + + + + + _int_realloc (1 samples, 0.14%) + + + + + __memmove_avx512_unaligned_erms (1 samples, 0.14%) + + + + + aho_corasick::packed::api::Builder::extend (1 samples, 0.14%) + + + + + aho_corasick::packed::pattern::Patterns::add (1 samples, 0.14%) + + + + + malloc (1 samples, 0.14%) + + + + + _int_malloc (1 samples, 0.14%) + + + + + aho_corasick::packed::api::Builder::build (1 samples, 0.14%) + + + + + aho_corasick::packed::rabinkarp::RabinKarp::new (1 samples, 0.14%) + + + + + alloc::vec::from_elem (1 samples, 0.14%) + + + + + regex_automata::util::prefilter::teddy::Teddy::new (4 samples, 0.55%) + + + + + aho_corasick::dfa::Builder::build_from_noncontiguous (2 samples, 0.28%) + + + + + aho_corasick::dfa::Builder::finish_build_one_start::{{closure}} (2 samples, 0.28%) + + + + + regex_automata::meta::regex::Builder::build (10 samples, 1.38%) + + + + + regex_automata::meta::strategy::new (10 samples, 1.38%) + + + + + regex_automata::meta::reverse_inner::extract (5 samples, 0.69%) + + + + + regex_automata::util::prefilter::Choice::new (5 samples, 0.69%) + + + + + regex_automata::util::prefilter::aho_corasick::AhoCorasick::new (1 samples, 0.14%) + + + + + aho_corasick::ahocorasick::AhoCorasickBuilder::build (1 samples, 0.14%) + + + + + aho_corasick::dfa::Builder::build_from_noncontiguous (1 samples, 0.14%) + + + + + alloc::vec::from_elem (1 samples, 0.14%) + + + + + regex_automata::nfa::thompson::builder::Builder::add (1 samples, 0.14%) + + + + + alloc::raw_vec::RawVec<T,A>::reserve_for_push (1 samples, 0.14%) + + + + + alloc::raw_vec::finish_grow (1 samples, 0.14%) + + + + + realloc (1 samples, 0.14%) + + + + + _int_realloc (1 samples, 0.14%) + + + + + _int_malloc (1 samples, 0.14%) + + + + + sysmalloc (1 samples, 0.14%) + + + + + asm_exc_page_fault (1 samples, 0.14%) + + + + + exc_page_fault (1 samples, 0.14%) + + + + + do_user_addr_fault (1 samples, 0.14%) + + + + + handle_mm_fault (1 samples, 0.14%) + + + + + __handle_mm_fault (1 samples, 0.14%) + + + + + __alloc_pages (1 samples, 0.14%) + + + + + get_page_from_freelist (1 samples, 0.14%) + + + + + kernel_init_free_pages.part.0 (1 samples, 0.14%) + + + + + clear_page_erms (1 samples, 0.14%) + + + + + regex_automata::nfa::thompson::literal_trie::LiteralTrie::compile (2 samples, 0.28%) + + + + + alloc::raw_vec::RawVec<T,A>::reserve_for_push (1 samples, 0.14%) + + + + + alloc::raw_vec::finish_grow (1 samples, 0.14%) + + + + + realloc (1 samples, 0.14%) + + + + + _int_realloc (1 samples, 0.14%) + + + + + _int_malloc (1 samples, 0.14%) + + + + + regex_automata::nfa::thompson::builder::Builder::add (2 samples, 0.28%) + + + + + regex::regex::bytes::Regex::new (5 samples, 0.69%) + + + + + regex::builders::Builder::build_one_bytes (5 samples, 0.69%) + + + + + regex_automata::meta::regex::Builder::build (5 samples, 0.69%) + + + + + regex_automata::meta::strategy::new (5 samples, 0.69%) + + + + + regex_automata::nfa::thompson::compiler::Compiler::build_many_from_hir (5 samples, 0.69%) + + + + + <core::iter::adapters::map::Map<I,F> as core::iter::traits::iterator::Iterator>::next (5 samples, 0.69%) + + + + + regex_automata::nfa::thompson::compiler::Compiler::c_cap (5 samples, 0.69%) + + + + + regex_automata::nfa::thompson::compiler::Compiler::c (5 samples, 0.69%) + + + + + regex_automata::nfa::thompson::compiler::Compiler::c_cap (5 samples, 0.69%) + + + + + regex_automata::nfa::thompson::compiler::Compiler::c (5 samples, 0.69%) + + + + + regex_automata::nfa::thompson::compiler::Compiler::c_alt_iter (3 samples, 0.41%) + + + + + regex_automata::nfa::thompson::compiler::Compiler::c (3 samples, 0.41%) + + + + + _int_malloc (1 samples, 0.14%) + + + + + regex_automata::nfa::thompson::compiler::Compiler::c_cap (2 samples, 0.28%) + + + + + regex_automata::nfa::thompson::compiler::Compiler::c (2 samples, 0.28%) + + + + + regex_automata::nfa::thompson::literal_trie::LiteralTrie::compile (2 samples, 0.28%) + + + + + alloc::raw_vec::RawVec<T,A>::reserve_for_push (2 samples, 0.28%) + + + + + alloc::raw_vec::finish_grow (2 samples, 0.28%) + + + + + malloc (2 samples, 0.28%) + + + + + irqentry_enter (1 samples, 0.14%) + + + + + exc_page_fault (2 samples, 0.28%) + + + + + do_user_addr_fault (1 samples, 0.14%) + + + + + handle_mm_fault (1 samples, 0.14%) + + + + + __handle_mm_fault (1 samples, 0.14%) + + + + + __alloc_pages (1 samples, 0.14%) + + + + + get_page_from_freelist (1 samples, 0.14%) + + + + + kernel_init_free_pages.part.0 (1 samples, 0.14%) + + + + + clear_page_erms (1 samples, 0.14%) + + + + + asm_exc_page_fault (3 samples, 0.41%) + + + + + regex_automata::nfa::thompson::compiler::Utf8Compiler::new (11 samples, 1.51%) + + + + + regex_automata::nfa::thompson::map::Utf8BoundedMap::clear (11 samples, 1.51%) + + + + + <T as alloc::vec::spec_from_elem::SpecFromElem>::from_elem (11 samples, 1.51%) + + + + + alloc::vec::Vec<T,A>::extend_with (11 samples, 1.51%) + + + + + regex_automata::nfa::thompson::builder::Builder::patch (1 samples, 0.14%) + + + + + regex_automata::nfa::thompson::compiler::Compiler::c_alt_iter (13 samples, 1.79%) + + r.. + + + regex_automata::nfa::thompson::compiler::Compiler::c (13 samples, 1.79%) + + r.. + + + regex_automata::nfa::thompson::compiler::Compiler::c (2 samples, 0.28%) + + + + + regex_automata::nfa::thompson::builder::Builder::add (1 samples, 0.14%) + + + + + malloc (1 samples, 0.14%) + + + + + _int_malloc (1 samples, 0.14%) + + + + + sysmalloc (1 samples, 0.14%) + + + + + asm_exc_page_fault (1 samples, 0.14%) + + + + + exc_page_fault (1 samples, 0.14%) + + + + + do_user_addr_fault (1 samples, 0.14%) + + + + + handle_mm_fault (1 samples, 0.14%) + + + + + __handle_mm_fault (1 samples, 0.14%) + + + + + __alloc_pages (1 samples, 0.14%) + + + + + get_page_from_freelist (1 samples, 0.14%) + + + + + kernel_init_free_pages.part.0 (1 samples, 0.14%) + + + + + clear_page_erms (1 samples, 0.14%) + + + + + do_user_addr_fault (1 samples, 0.14%) + + + + + handle_mm_fault (1 samples, 0.14%) + + + + + __handle_mm_fault (1 samples, 0.14%) + + + + + __mem_cgroup_charge (1 samples, 0.14%) + + + + + asm_exc_page_fault (2 samples, 0.28%) + + + + + exc_page_fault (2 samples, 0.28%) + + + + + __memmove_avx512_unaligned_erms (2 samples, 0.28%) + + + + + regex::builders::Builder::build_one_bytes (28 samples, 3.85%) + + rege.. + + + regex_automata::meta::regex::Builder::build (28 samples, 3.85%) + + rege.. + + + regex_automata::meta::strategy::new (28 samples, 3.85%) + + rege.. + + + regex_automata::nfa::thompson::compiler::Compiler::build_many_from_hir (28 samples, 3.85%) + + rege.. + + + <core::iter::adapters::map::Map<I,F> as core::iter::traits::iterator::Iterator>::next (28 samples, 3.85%) + + <cor.. + + + regex_automata::nfa::thompson::compiler::Compiler::c_cap (28 samples, 3.85%) + + rege.. + + + regex_automata::nfa::thompson::compiler::Compiler::c (28 samples, 3.85%) + + rege.. + + + regex_automata::nfa::thompson::compiler::Compiler::c_cap (28 samples, 3.85%) + + rege.. + + + regex_automata::nfa::thompson::compiler::Compiler::c (28 samples, 3.85%) + + rege.. + + + regex_automata::nfa::thompson::compiler::Compiler::c (13 samples, 1.79%) + + r.. + + + regex_automata::nfa::thompson::compiler::Utf8Compiler::new (13 samples, 1.79%) + + r.. + + + regex_automata::nfa::thompson::map::Utf8BoundedMap::clear (13 samples, 1.79%) + + r.. + + + <T as alloc::vec::spec_from_elem::SpecFromElem>::from_elem (13 samples, 1.79%) + + <.. + + + alloc::vec::Vec<T,A>::extend_with (12 samples, 1.65%) + + + + + regex_automata::nfa::thompson::literal_trie::LiteralTrie::compile (1 samples, 0.14%) + + + + + alloc::raw_vec::RawVec<T,A>::reserve_for_push (1 samples, 0.14%) + + + + + alloc::raw_vec::finish_grow (1 samples, 0.14%) + + + + + realloc (1 samples, 0.14%) + + + + + _int_realloc (1 samples, 0.14%) + + + + + once_cell::imp::initialize_or_wait (2 samples, 0.28%) + + + + + once_cell::imp::OnceCell<T>::initialize::_{{closure}} (2 samples, 0.28%) + + + + + regex::regex::bytes::Regex::new (2 samples, 0.28%) + + + + + regex::builders::Builder::build_one_bytes (2 samples, 0.28%) + + + + + regex_automata::meta::regex::Builder::build (2 samples, 0.28%) + + + + + regex_automata::meta::strategy::new (2 samples, 0.28%) + + + + + regex_automata::nfa::thompson::compiler::Compiler::build_many_from_hir (2 samples, 0.28%) + + + + + <core::iter::adapters::map::Map<I,F> as core::iter::traits::iterator::Iterator>::next (2 samples, 0.28%) + + + + + regex_automata::nfa::thompson::compiler::Compiler::c_cap (2 samples, 0.28%) + + + + + regex_automata::nfa::thompson::compiler::Compiler::c (2 samples, 0.28%) + + + + + regex_automata::nfa::thompson::compiler::Compiler::c_cap (2 samples, 0.28%) + + + + + regex_automata::nfa::thompson::compiler::Compiler::c (2 samples, 0.28%) + + + + + regex_automata::nfa::thompson::literal_trie::LiteralTrie::add (1 samples, 0.14%) + + + + + alloc::raw_vec::RawVec<T,A>::reserve::do_reserve_and_handle (1 samples, 0.14%) + + + + + alloc::raw_vec::finish_grow (1 samples, 0.14%) + + + + + realloc (1 samples, 0.14%) + + + + + _int_realloc (1 samples, 0.14%) + + + + + _int_malloc (1 samples, 0.14%) + + + + + do_user_addr_fault (1 samples, 0.14%) + + + + + handle_mm_fault (1 samples, 0.14%) + + + + + __handle_mm_fault (1 samples, 0.14%) + + + + + __mem_cgroup_charge (1 samples, 0.14%) + + + + + charge_memcg (1 samples, 0.14%) + + + + + mem_cgroup_charge_statistics.constprop.0 (1 samples, 0.14%) + + + + + regex_automata::nfa::thompson::builder::Builder::add (2 samples, 0.28%) + + + + + alloc::raw_vec::RawVec<T,A>::reserve_for_push (2 samples, 0.28%) + + + + + alloc::raw_vec::finish_grow (2 samples, 0.28%) + + + + + realloc (2 samples, 0.28%) + + + + + _int_realloc (2 samples, 0.28%) + + + + + __memmove_avx512_unaligned_erms (2 samples, 0.28%) + + + + + asm_exc_page_fault (2 samples, 0.28%) + + + + + exc_page_fault (2 samples, 0.28%) + + + + + once_cell::imp::OnceCell<T>::initialize::_{{closure}} (3 samples, 0.41%) + + + + + regex::regex::bytes::Regex::new (3 samples, 0.41%) + + + + + regex::builders::Builder::build_one_bytes (3 samples, 0.41%) + + + + + regex_automata::meta::regex::Builder::build (3 samples, 0.41%) + + + + + regex_automata::meta::strategy::new (3 samples, 0.41%) + + + + + regex_automata::nfa::thompson::compiler::Compiler::build_many_from_hir (3 samples, 0.41%) + + + + + <core::iter::adapters::map::Map<I,F> as core::iter::traits::iterator::Iterator>::next (3 samples, 0.41%) + + + + + regex_automata::nfa::thompson::compiler::Compiler::c_cap (3 samples, 0.41%) + + + + + regex_automata::nfa::thompson::compiler::Compiler::c (3 samples, 0.41%) + + + + + regex_automata::nfa::thompson::compiler::Compiler::c_cap (3 samples, 0.41%) + + + + + regex_automata::nfa::thompson::compiler::Compiler::c (3 samples, 0.41%) + + + + + regex_automata::nfa::thompson::literal_trie::LiteralTrie::compile (3 samples, 0.41%) + + + + + alloc::raw_vec::RawVec<T,A>::reserve_for_push (1 samples, 0.14%) + + + + + alloc::raw_vec::finish_grow (1 samples, 0.14%) + + + + + malloc (1 samples, 0.14%) + + + + + _int_malloc (1 samples, 0.14%) + + + + + crc32fast::specialized::pclmulqdq::calculate (4 samples, 0.55%) + + + + + crc32fast::Hasher::update (5 samples, 0.69%) + + + + + crc32fast::baseline::update_fast_16 (1 samples, 0.14%) + + + + + bzip2_rs::huffman::HuffmanTree::new (1 samples, 0.14%) + + + + + <tinyvec::arrayvec::ArrayVec<A> as core::default::Default>::default (1 samples, 0.14%) + + + + + bzip2_rs::huffman::HuffmanTree::decode (1 samples, 0.14%) + + + + + bzip2_rs::block::bwt::inverse_bwt (17 samples, 2.34%) + + b.. + + + pte_alloc_one (1 samples, 0.14%) + + + + + __alloc_pages (1 samples, 0.14%) + + + + + do_huge_pmd_anonymous_page (2 samples, 0.28%) + + + + + clear_huge_page (1 samples, 0.14%) + + + + + clear_subpage (1 samples, 0.14%) + + + + + clear_page_erms (1 samples, 0.14%) + + + + + __mem_cgroup_charge (1 samples, 0.14%) + + + + + charge_memcg (1 samples, 0.14%) + + + + + mem_cgroup_charge_statistics.constprop.0 (1 samples, 0.14%) + + + + + __alloc_pages (2 samples, 0.28%) + + + + + get_page_from_freelist (2 samples, 0.28%) + + + + + kernel_init_free_pages.part.0 (2 samples, 0.28%) + + + + + clear_page_erms (2 samples, 0.28%) + + + + + __handle_mm_fault (6 samples, 0.83%) + + + + + exc_page_fault (7 samples, 0.96%) + + + + + do_user_addr_fault (7 samples, 0.96%) + + + + + handle_mm_fault (7 samples, 0.96%) + + + + + __count_memcg_events (1 samples, 0.14%) + + + + + asm_exc_page_fault (8 samples, 1.10%) + + + + + alloc::vec::Vec<T,A>::resize (12 samples, 1.65%) + + + + + __memmove_avx512_unaligned_erms (4 samples, 0.55%) + + + + + gen-1000-3-foob (577 samples, 79.37%) + + gen-1000-3-foob + + + [unknown] (417 samples, 57.36%) + + [unknown] + + + bzip2_rs::block::Block::read (299 samples, 41.13%) + + bzip2_rs::block::Block::read + + + all (727 samples, 100%) + + + + + ctrl-c (1 samples, 0.14%) + + + + + entry_SYSCALL_64_after_hwframe (1 samples, 0.14%) + + + + + do_syscall_64 (1 samples, 0.14%) + + + + + syscall_exit_to_user_mode (1 samples, 0.14%) + + + + + exit_to_user_mode_prepare (1 samples, 0.14%) + + + + + arch_do_signal_or_restart (1 samples, 0.14%) + + + + + get_signal (1 samples, 0.14%) + + + + + do_group_exit (1 samples, 0.14%) + + + + + do_exit (1 samples, 0.14%) + + + + + exit_fs (1 samples, 0.14%) + + + + + diff --git a/releases/0.7.75/flamegraph-syslog-empty.svg b/releases/0.7.75/flamegraph-syslog-empty.svg new file mode 100644 index 00000000..214d731c --- /dev/null +++ b/releases/0.7.75/flamegraph-syslog-empty.svg @@ -0,0 +1,1017 @@ + + + + + + + + + + + + + + + Flame Graph: super_speedy_syslog_searcher 0.7.75; git: d799548f; -freq 8000; created 20240707T231111-0700; flamegraph-flamegraph 0.6.5; rustc 1.70.0
; command: s4 ./logs/other/tests/empty.log + + Reset Zoom + Search + + + + setup_arg_pages (1 samples, 5.00%) + + setup_.. + + + shift_arg_pages (1 samples, 5.00%) + + shift_.. + + + __vma_adjust (1 samples, 5.00%) + + __vma_.. + + + entry_SYSCALL_64_after_hwframe (2 samples, 10.00%) + + entry_SYSCALL_.. + + + do_syscall_64 (2 samples, 10.00%) + + do_syscall_64 + + + __x64_sys_execve (2 samples, 10.00%) + + __x64_sys_exec.. + + + do_execveat_common.isra.0 (2 samples, 10.00%) + + do_execveat_co.. + + + bprm_execve (2 samples, 10.00%) + + bprm_execve + + + load_elf_binary (2 samples, 10.00%) + + load_elf_binary + + + elf_map (1 samples, 5.00%) + + elf_map + + + vm_mmap_pgoff (1 samples, 5.00%) + + vm_mma.. + + + do_mmap (1 samples, 5.00%) + + do_mmap + + + mmap_region (1 samples, 5.00%) + + mmap_r.. + + + vma_link (1 samples, 5.00%) + + vma_li.. + + + vma_interval_tree_insert (1 samples, 5.00%) + + vma_in.. + + + init_tls (1 samples, 5.00%) + + init_t.. + + + __tls_init_tp (1 samples, 5.00%) + + __tls_.. + + + entry_SYSCALL_64_after_hwframe (1 samples, 5.00%) + + entry_.. + + + do_syscall_64 (1 samples, 5.00%) + + do_sys.. + + + syscall_exit_to_user_mode (1 samples, 5.00%) + + syscal.. + + + wp_page_copy (1 samples, 5.00%) + + wp_pag.. + + + __alloc_pages (1 samples, 5.00%) + + __allo.. + + + get_page_from_freelist (1 samples, 5.00%) + + get_pa.. + + + rmqueue_bulk (1 samples, 5.00%) + + rmqueu.. + + + __list_del_entry_valid (1 samples, 5.00%) + + __list.. + + + _dl_relocate_object (2 samples, 10.00%) + + _dl_relocate_o.. + + + asm_exc_page_fault (2 samples, 10.00%) + + asm_exc_page_f.. + + + exc_page_fault (2 samples, 10.00%) + + exc_page_fault + + + do_user_addr_fault (2 samples, 10.00%) + + do_user_addr_f.. + + + handle_mm_fault (2 samples, 10.00%) + + handle_mm_fault + + + __handle_mm_fault (2 samples, 10.00%) + + __handle_mm_fa.. + + + filemap_map_pages (1 samples, 5.00%) + + filema.. + + + next_uptodate_page (1 samples, 5.00%) + + next_u.. + + + _dl_start (4 samples, 20.00%) + + _dl_start + + + _dl_sysdep_start (4 samples, 20.00%) + + _dl_sysdep_start + + + dl_main (4 samples, 20.00%) + + dl_main + + + _dl_init_paths (1 samples, 5.00%) + + _dl_in.. + + + asm_exc_page_fault (1 samples, 5.00%) + + asm_ex.. + + + exc_page_fault (1 samples, 5.00%) + + exc_pa.. + + + do_user_addr_fault (1 samples, 5.00%) + + do_use.. + + + handle_mm_fault (1 samples, 5.00%) + + handle.. + + + __handle_mm_fault (1 samples, 5.00%) + + __hand.. + + + __anon_vma_prepare (1 samples, 5.00%) + + __anon.. + + + kmem_cache_alloc (1 samples, 5.00%) + + kmem_c.. + + + std::sys::unix::stack_overflow::imp::make_handler (1 samples, 5.00%) + + std::s.. + + + __sysconf (1 samples, 5.00%) + + __sysc.. + + + asm_exc_page_fault (1 samples, 5.00%) + + asm_ex.. + + + exc_page_fault (1 samples, 5.00%) + + exc_pa.. + + + do_user_addr_fault (1 samples, 5.00%) + + do_use.. + + + handle_mm_fault (1 samples, 5.00%) + + handle.. + + + __handle_mm_fault (1 samples, 5.00%) + + __hand.. + + + filemap_map_pages (1 samples, 5.00%) + + filema.. + + + next_uptodate_page (1 samples, 5.00%) + + next_u.. + + + s4::processing_loop (1 samples, 5.00%) + + s4::pr.. + + + hashbrown::raw::RawTable<T,A>::shrink_to (1 samples, 5.00%) + + hashbr.. + + + <hashbrown::raw::RawTable<T,A> as core::ops::drop::Drop>::drop (1 samples, 5.00%) + + <hashb.. + + + s4 (9 samples, 45.00%) + + s4 + + + _start (7 samples, 35.00%) + + _start + + + __libc_start_main@@GLIBC_2.34 (3 samples, 15.00%) + + __libc_start_main@@GLIB.. + + + __libc_start_call_main (3 samples, 15.00%) + + __libc_start_call_main + + + main (3 samples, 15.00%) + + main + + + std::rt::lang_start_internal (3 samples, 15.00%) + + std::rt::lang_start_int.. + + + std::rt::lang_start::_{{closure}} (2 samples, 10.00%) + + std::rt::lang_.. + + + std::sys_common::backtrace::__rust_begin_short_backtrace (2 samples, 10.00%) + + std::sys_commo.. + + + s4::main (2 samples, 10.00%) + + s4::main + + + <s4::CLI_Args as clap_builder::derive::Args>::augment_args (1 samples, 5.00%) + + <s4::C.. + + + once_cell::imp::OnceCell<T>::initialize (1 samples, 5.00%) + + once_c.. + + + once_cell::imp::initialize_or_wait (1 samples, 5.00%) + + once_c.. + + + once_cell::imp::OnceCell<T>::initialize::_{{closure}} (1 samples, 5.00%) + + once_c.. + + + core::ops::function::FnOnce::call_once (1 samples, 5.00%) + + core::.. + + + std::sys::common::thread_local::fast_local::fast::Key<T>::try_initialize (1 samples, 5.00%) + + std::s.. + + + std::sys::common::thread_local::fast_local::fast::Key<T>::try_initialize (1 samples, 5.00%) + + std::s.. + + + <chrono::offset::local::Local as chrono::offset::TimeZone>::offset_from_utc_datetime (1 samples, 5.00%) + + <chron.. + + + chrono::offset::local::inner::offset (1 samples, 5.00%) + + chrono.. + + + <chrono::offset::local::inner::Cache as core::default::Default>::default (1 samples, 5.00%) + + <chron.. + + + chrono::offset::local::inner::current_zone (1 samples, 5.00%) + + chrono.. + + + chrono::offset::local::tz_info::timezone::TimeZone::from_posix_tz (1 samples, 5.00%) + + chrono.. + + + std::fs::read::inner (1 samples, 5.00%) + + std::f.. + + + std::sys::unix::fs::try_statx (1 samples, 5.00%) + + std::s.. + + + statx (1 samples, 5.00%) + + statx + + + entry_SYSCALL_64_after_hwframe (1 samples, 5.00%) + + entry_.. + + + do_syscall_64 (1 samples, 5.00%) + + do_sys.. + + + __x64_sys_statx (1 samples, 5.00%) + + __x64_.. + + + do_statx (1 samples, 5.00%) + + do_sta.. + + + vfs_statx (1 samples, 5.00%) + + vfs_st.. + + + user_path_at_empty (1 samples, 5.00%) + + user_p.. + + + filename_lookup (1 samples, 5.00%) + + filena.. + + + path_lookupat (1 samples, 5.00%) + + path_l.. + + + path_init (1 samples, 5.00%) + + path_i.. + + + __fdget_raw (1 samples, 5.00%) + + __fdge.. + + + all (20 samples, 100%) + + + + + perf-exec (11 samples, 55.00%) + + perf-exec + + + entry_SYSCALL_64_after_hwframe (11 samples, 55.00%) + + entry_SYSCALL_64_after_hwframe + + + do_syscall_64 (11 samples, 55.00%) + + do_syscall_64 + + + __x64_sys_execve (11 samples, 55.00%) + + __x64_sys_execve + + + do_execveat_common.isra.0 (11 samples, 55.00%) + + do_execveat_common.isra.0 + + + bprm_execve (11 samples, 55.00%) + + bprm_execve + + + load_elf_binary (11 samples, 55.00%) + + load_elf_binary + + + begin_new_exec (11 samples, 55.00%) + + begin_new_exec + + + perf_event_exec (11 samples, 55.00%) + + perf_event_exec + + + __raw_callee_save___pv_queued_spin_unlock (11 samples, 55.00%) + + __raw_callee_save___pv_queued_spin_unlock + + + diff --git a/releases/0.7.75/flamegraph-syslog-gz.svg b/releases/0.7.75/flamegraph-syslog-gz.svg new file mode 100644 index 00000000..b00e3228 --- /dev/null +++ b/releases/0.7.75/flamegraph-syslog-gz.svg @@ -0,0 +1,5222 @@ + + + + + + + + + + + + + + + Flame Graph: super_speedy_syslog_searcher 0.7.75; git: d799548f; -freq 8000; created 20240707T231122-0700; flamegraph-flamegraph 0.6.5; rustc 1.70.0
; command: s4 ./logs/other/tests/gen-1000-3-foobar.log.gz + + Reset Zoom + Search + + + + ret_from_fork (22 samples, 5.01%) + + ret_fr.. + + + schedule_tail (22 samples, 5.01%) + + schedu.. + + + finish_task_switch.isra.0 (22 samples, 5.01%) + + finish.. + + + __perf_event_task_sched_in (22 samples, 5.01%) + + __perf.. + + + __raw_callee_save___pv_queued_spin_unlock (22 samples, 5.01%) + + __raw_.. + + + cgroup_rstat_updated (1 samples, 0.23%) + + + + + __mod_memcg_lruvec_state (3 samples, 0.68%) + + + + + page_remove_rmap (4 samples, 0.91%) + + + + + __mod_lruvec_page_state (4 samples, 0.91%) + + + + + unmap_vmas (5 samples, 1.14%) + + + + + unmap_page_range (5 samples, 1.14%) + + + + + free_unref_page_commit.constprop.0 (1 samples, 0.23%) + + + + + __list_add_valid (1 samples, 0.23%) + + + + + __list_del_entry_valid (4 samples, 0.91%) + + + + + __x64_sys_exit_group (11 samples, 2.51%) + + __.. + + + do_group_exit (11 samples, 2.51%) + + do.. + + + do_exit (11 samples, 2.51%) + + do.. + + + mmput (11 samples, 2.51%) + + mm.. + + + exit_mmap (11 samples, 2.51%) + + ex.. + + + tlb_finish_mmu (6 samples, 1.37%) + + + + + release_pages (6 samples, 1.37%) + + + + + free_unref_page_list (6 samples, 1.37%) + + + + + free_pcppages_bulk (5 samples, 1.14%) + + + + + __free_one_page (1 samples, 0.23%) + + + + + mutex_unlock (1 samples, 0.23%) + + + + + entry_SYSCALL_64_after_hwframe (13 samples, 2.96%) + + ent.. + + + do_syscall_64 (13 samples, 2.96%) + + do_.. + + + __x64_sys_execve (2 samples, 0.46%) + + + + + do_execveat_common.isra.0 (2 samples, 0.46%) + + + + + bprm_execve (2 samples, 0.46%) + + + + + load_elf_binary (2 samples, 0.46%) + + + + + __clear_user (1 samples, 0.23%) + + + + + asm_exc_page_fault (1 samples, 0.23%) + + + + + exc_page_fault (1 samples, 0.23%) + + + + + do_user_addr_fault (1 samples, 0.23%) + + + + + handle_mm_fault (1 samples, 0.23%) + + + + + __handle_mm_fault (1 samples, 0.23%) + + + + + __alloc_pages (1 samples, 0.23%) + + + + + get_page_from_freelist (1 samples, 0.23%) + + + + + __list_del_entry_valid (1 samples, 0.23%) + + + + + __sysconf (1 samples, 0.23%) + + + + + clone3 (2 samples, 0.46%) + + + + + start_thread (2 samples, 0.46%) + + + + + std::sys::unix::thread::Thread::new::thread_start (2 samples, 0.46%) + + + + + std::sys::unix::stack_overflow::imp::make_handler (2 samples, 0.46%) + + + + + __mmap (1 samples, 0.23%) + + + + + entry_SYSCALL_64_after_hwframe (1 samples, 0.23%) + + + + + do_syscall_64 (1 samples, 0.23%) + + + + + vm_mmap_pgoff (1 samples, 0.23%) + + + + + do_mmap (1 samples, 0.23%) + + + + + mmap_region (1 samples, 0.23%) + + + + + perf_event_mmap (1 samples, 0.23%) + + + + + perf_iterate_sb (1 samples, 0.23%) + + + + + _dl_lookup_symbol_x (1 samples, 0.23%) + + + + + do_lookup_x (1 samples, 0.23%) + + + + + check_match (1 samples, 0.23%) + + + + + strcmp (1 samples, 0.23%) + + + + + _dl_relocate_object (3 samples, 0.68%) + + + + + _dl_map_object_from_fd (1 samples, 0.23%) + + + + + mmap64 (1 samples, 0.23%) + + + + + entry_SYSCALL_64_after_hwframe (1 samples, 0.23%) + + + + + do_syscall_64 (1 samples, 0.23%) + + + + + ksys_mmap_pgoff (1 samples, 0.23%) + + + + + vm_mmap_pgoff (1 samples, 0.23%) + + + + + do_mmap (1 samples, 0.23%) + + + + + mmap_region (1 samples, 0.23%) + + + + + perf_event_mmap (1 samples, 0.23%) + + + + + d_path (1 samples, 0.23%) + + + + + prepend_path (1 samples, 0.23%) + + + + + prepend_copy (1 samples, 0.23%) + + + + + copy_from_kernel_nofault (1 samples, 0.23%) + + + + + _dl_sysdep_start (5 samples, 1.14%) + + + + + dl_main (5 samples, 1.14%) + + + + + _dl_map_object_deps (2 samples, 0.46%) + + + + + _dl_catch_exception (2 samples, 0.46%) + + + + + openaux (2 samples, 0.46%) + + + + + _dl_map_object (2 samples, 0.46%) + + + + + _dl_start (6 samples, 1.37%) + + + + + _dl_setup_hash (1 samples, 0.23%) + + + + + asm_exc_page_fault (1 samples, 0.23%) + + + + + exc_page_fault (1 samples, 0.23%) + + + + + do_user_addr_fault (1 samples, 0.23%) + + + + + handle_mm_fault (1 samples, 0.23%) + + + + + __handle_mm_fault (1 samples, 0.23%) + + + + + filemap_map_pages (1 samples, 0.23%) + + + + + std::sys::unix::args::imp::ARGV_INIT_ARRAY::init_wrapper (1 samples, 0.23%) + + + + + asm_exc_page_fault (1 samples, 0.23%) + + + + + exc_page_fault (1 samples, 0.23%) + + + + + do_user_addr_fault (1 samples, 0.23%) + + + + + handle_mm_fault (1 samples, 0.23%) + + + + + __handle_mm_fault (1 samples, 0.23%) + + + + + filemap_map_pages (1 samples, 0.23%) + + + + + next_uptodate_page (1 samples, 0.23%) + + + + + std::io::buffered::bufwriter::BufWriter<W>::flush_buf (1 samples, 0.23%) + + + + + fsnotify (1 samples, 0.23%) + + + + + dget_parent (1 samples, 0.23%) + + + + + lockref_get_not_zero (1 samples, 0.23%) + + + + + entry_SYSCALL_64_after_hwframe (3 samples, 0.68%) + + + + + do_syscall_64 (3 samples, 0.68%) + + + + + ksys_write (3 samples, 0.68%) + + + + + vfs_write (3 samples, 0.68%) + + + + + __fsnotify_parent (3 samples, 0.68%) + + + + + std::io::Write::write_all (6 samples, 1.37%) + + + + + <termcolor::LossyStandardStream<W> as std::io::Write>::write (6 samples, 1.37%) + + + + + <std::io::stdio::Stdout as std::io::Write>::write (6 samples, 1.37%) + + + + + <&std::io::stdio::Stdout as std::io::Write>::write (6 samples, 1.37%) + + + + + <std::io::stdio::StdoutLock as std::io::Write>::write (6 samples, 1.37%) + + + + + __GI___libc_write (5 samples, 1.14%) + + + + + __memrchr_evex (1 samples, 0.23%) + + + + + __memmove_avx512_unaligned_erms (1 samples, 0.23%) + + + + + <std::io::stdio::StdoutLock as std::io::Write>::write (3 samples, 0.68%) + + + + + <std::io::stdio::Stdout as std::io::Write>::write (4 samples, 0.91%) + + + + + <&std::io::stdio::Stdout as std::io::Write>::write (4 samples, 0.91%) + + + + + std::io::Write::write_all (6 samples, 1.37%) + + + + + <termcolor::LossyStandardStream<W> as termcolor::WriteColor>::set_color (7 samples, 1.59%) + + + + + <termcolor::ColorSpec as core::cmp::PartialEq>::eq (1 samples, 0.23%) + + + + + <termcolor::ColorSpec as core::clone::Clone>::clone (1 samples, 0.23%) + + + + + write_null (1 samples, 0.23%) + + + + + srso_alias_safe_ret (1 samples, 0.23%) + + + + + syscall_return_via_sysret (1 samples, 0.23%) + + + + + srso_alias_safe_ret (1 samples, 0.23%) + + + + + syscall_exit_to_user_mode (2 samples, 0.46%) + + + + + rw_verify_area (1 samples, 0.23%) + + + + + __fsnotify_parent (1 samples, 0.23%) + + + + + dput (1 samples, 0.23%) + + + + + lockref_put_return (1 samples, 0.23%) + + + + + vfs_write (6 samples, 1.37%) + + + + + fput_many (1 samples, 0.23%) + + + + + fput (1 samples, 0.23%) + + + + + __fdget_pos (1 samples, 0.23%) + + + + + ksys_write (10 samples, 2.28%) + + k.. + + + __x64_sys_write (1 samples, 0.23%) + + + + + do_syscall_64 (16 samples, 3.64%) + + do_s.. + + + entry_SYSCALL_64_after_hwframe (17 samples, 3.87%) + + entr.. + + + entry_SYSCALL_64 (3 samples, 0.68%) + + + + + __x86_indirect_thunk_rax (1 samples, 0.23%) + + + + + <std::io::stdio::Stdout as std::io::Write>::flush (24 samples, 5.47%) + + <std::i.. + + + <&std::io::stdio::Stdout as std::io::Write>::flush (24 samples, 5.47%) + + <&std::.. + + + std::io::buffered::bufwriter::BufWriter<W>::flush_buf (24 samples, 5.47%) + + std::io.. + + + __GI___libc_write (24 samples, 5.47%) + + __GI___.. + + + s4lib::printer::printers::PrinterLogMessage::print_sysline_color (42 samples, 9.57%) + + s4lib::printer.. + + + hashbrown::set::HashSet<T,S,A>::remove (2 samples, 0.46%) + + + + + hashbrown::raw::RawTable<T,A>::remove_entry (2 samples, 0.46%) + + + + + ctrlc::set_handler (1 samples, 0.23%) + + + + + crossbeam_channel::select::SelectedOperation::recv (2 samples, 0.46%) + + + + + crossbeam_channel::channel::read (2 samples, 0.46%) + + + + + __memmove_avx512_unaligned_erms (2 samples, 0.46%) + + + + + std::thread::park (1 samples, 0.23%) + + + + + syscall (1 samples, 0.23%) + + + + + entry_SYSCALL_64_after_hwframe (1 samples, 0.23%) + + + + + do_syscall_64 (1 samples, 0.23%) + + + + + __x64_sys_futex (1 samples, 0.23%) + + + + + do_futex (1 samples, 0.23%) + + + + + futex_wait (1 samples, 0.23%) + + + + + futex_wait_queue_me (1 samples, 0.23%) + + + + + schedule (1 samples, 0.23%) + + + + + __schedule (1 samples, 0.23%) + + + + + pick_next_task_idle (1 samples, 0.23%) + + + + + __update_idle_core (1 samples, 0.23%) + + + + + __x64_sys_sched_yield (1 samples, 0.23%) + + + + + schedule (1 samples, 0.23%) + + + + + __schedule (1 samples, 0.23%) + + + + + _raw_spin_lock (1 samples, 0.23%) + + + + + __sched_yield (2 samples, 0.46%) + + + + + entry_SYSCALL_64_after_hwframe (2 samples, 0.46%) + + + + + do_syscall_64 (2 samples, 0.46%) + + + + + crossbeam_channel::context::Context::wait_until (4 samples, 0.91%) + + + + + crossbeam_channel::context::Context::with::{{closure}} (5 samples, 1.14%) + + + + + <crossbeam_channel::channel::Receiver<T> as crossbeam_channel::select::SelectHandle>::unregister (1 samples, 0.23%) + + + + + <crossbeam_channel::flavors::array::Receiver<T> as crossbeam_channel::select::SelectHandle>::try_select (1 samples, 0.23%) + + + + + crossbeam_channel::select::Select::select (7 samples, 1.59%) + + + + + crossbeam_channel::select::run_select (7 samples, 1.59%) + + + + + alloc::collections::btree::remove::<impl alloc::collections::btree::node::Handle<alloc::collections::btree::node::NodeRef<alloc::collections::btree::node::marker::Mut,K,V,alloc::collections::btree::node::marker::LeafOrInternal>,alloc::collections::btree::node::marker::KV>>::remove_kv_tracking (1 samples, 0.23%) + + + + + alloc::collections::btree::remove::<impl alloc::collections::btree::node::Handle<alloc::collections::btree::node::NodeRef<alloc::collections::btree::node::marker::Mut,K,V,alloc::collections::btree::node::marker::Leaf>,alloc::collections::btree::node::marker::KV>>::remove_leaf_kv (1 samples, 0.23%) + + + + + alloc::collections::btree::map::BTreeMap<K,V,A>::remove (2 samples, 0.46%) + + + + + alloc::collections::btree::map::entry::OccupiedEntry<K,V,A>::remove_entry (2 samples, 0.46%) + + + + + alloc::collections::btree::map::BTreeMap<K,V,A>::insert (1 samples, 0.23%) + + + + + __memmove_avx512_unaligned_erms (2 samples, 0.46%) + + + + + s4::processing_loop (65 samples, 14.81%) + + s4::processing_loop + + + clap_builder::builder::command::Command::get_matches_from (1 samples, 0.23%) + + + + + clap_builder::builder::command::Command::_do_parse (1 samples, 0.23%) + + + + + clap_builder::parser::parser::Parser::get_matches_with (1 samples, 0.23%) + + + + + clap_builder::parser::parser::Parser::add_defaults (1 samples, 0.23%) + + + + + clap_builder::parser::parser::Parser::react (1 samples, 0.23%) + + + + + clap_builder::parser::parser::Parser::push_arg_values (1 samples, 0.23%) + + + + + <P as clap_builder::builder::value_parser::AnyValueParser>::parse_ref (1 samples, 0.23%) + + + + + <F as clap_builder::builder::value_parser::TypedValueParser>::parse_ref (1 samples, 0.23%) + + + + + s4lib::data::datetime::datetime_parse_from_str_w_tz (1 samples, 0.23%) + + + + + chrono::datetime::DateTime<chrono::offset::fixed::FixedOffset>::parse_from_str (1 samples, 0.23%) + + + + + chrono::format::parsed::Parsed::to_datetime (1 samples, 0.23%) + + + + + std::rt::lang_start::_{{closure}} (67 samples, 15.26%) + + std::rt::lang_start::_{.. + + + std::sys_common::backtrace::__rust_begin_short_backtrace (67 samples, 15.26%) + + std::sys_common::backtr.. + + + s4::main (67 samples, 15.26%) + + s4::main + + + <s4::CLI_Args as clap_builder::derive::Args>::augment_args (1 samples, 0.23%) + + + + + once_cell::imp::OnceCell<T>::initialize (1 samples, 0.23%) + + + + + once_cell::imp::initialize_or_wait (1 samples, 0.23%) + + + + + once_cell::imp::OnceCell<T>::initialize::_{{closure}} (1 samples, 0.23%) + + + + + core::ops::function::FnOnce::call_once (1 samples, 0.23%) + + + + + std::sys::common::thread_local::fast_local::fast::Key<T>::try_initialize (1 samples, 0.23%) + + + + + std::sys::common::thread_local::fast_local::fast::Key<T>::try_initialize (1 samples, 0.23%) + + + + + s4::UTC_NOW::__getit (1 samples, 0.23%) + + + + + _start (75 samples, 17.08%) + + _start + + + __libc_start_main@@GLIBC_2.34 (69 samples, 15.72%) + + __libc_start_main@@GLIBC.. + + + __libc_start_call_main (68 samples, 15.49%) + + __libc_start_call_main + + + main (68 samples, 15.49%) + + main + + + std::rt::lang_start_internal (68 samples, 15.49%) + + std::rt::lang_start_inte.. + + + pthread_getattr_np@@GLIBC_2.32 (1 samples, 0.23%) + + + + + __getdelim (1 samples, 0.23%) + + + + + realloc (1 samples, 0.23%) + + + + + _int_realloc (1 samples, 0.23%) + + + + + _int_malloc (1 samples, 0.23%) + + + + + [unknown] (1 samples, 0.23%) + + + + + <std::io::stdio::StdoutLock as std::io::Write>::write (1 samples, 0.23%) + + + + + __GI___libc_write (1 samples, 0.23%) + + + + + entry_SYSCALL_64 (1 samples, 0.23%) + + + + + s4 (114 samples, 25.97%) + + s4 + + + [[heap]] (1 samples, 0.23%) + + + + + __GI___libc_write (1 samples, 0.23%) + + + + + entry_SYSCALL_64 (1 samples, 0.23%) + + + + + perf-exec (14 samples, 3.19%) + + per.. + + + entry_SYSCALL_64_after_hwframe (14 samples, 3.19%) + + ent.. + + + do_syscall_64 (14 samples, 3.19%) + + do_.. + + + __x64_sys_execve (14 samples, 3.19%) + + __x.. + + + do_execveat_common.isra.0 (14 samples, 3.19%) + + do_.. + + + bprm_execve (14 samples, 3.19%) + + bpr.. + + + load_elf_binary (14 samples, 3.19%) + + loa.. + + + begin_new_exec (14 samples, 3.19%) + + beg.. + + + perf_event_exec (14 samples, 3.19%) + + per.. + + + __raw_callee_save___pv_queued_spin_unlock (14 samples, 3.19%) + + __r.. + + + <regex_automata::meta::strategy::ReverseInner as regex_automata::meta::strategy::Strategy>::create_cache (1 samples, 0.23%) + + + + + regex_automata::nfa::thompson::pikevm::ActiveStates::new (1 samples, 0.23%) + + + + + regex_automata::nfa::thompson::pikevm::ActiveStates::reset (1 samples, 0.23%) + + + + + __memset_avx512_unaligned_erms (1 samples, 0.23%) + + + + + asm_exc_page_fault (1 samples, 0.23%) + + + + + exc_page_fault (1 samples, 0.23%) + + + + + malloc_consolidate (1 samples, 0.23%) + + + + + regex_automata::nfa::thompson::pikevm::ActiveStates::new (2 samples, 0.46%) + + + + + regex_automata::nfa::thompson::pikevm::ActiveStates::reset (2 samples, 0.46%) + + + + + alloc::raw_vec::RawVec<T,A>::reserve::do_reserve_and_handle (2 samples, 0.46%) + + + + + alloc::raw_vec::finish_grow (2 samples, 0.46%) + + + + + malloc (2 samples, 0.46%) + + + + + _int_malloc (2 samples, 0.46%) + + + + + regex_automata::util::sparse_set::SparseSets::new (1 samples, 0.23%) + + + + + alloc::raw_vec::RawVec<T,A>::reserve::do_reserve_and_handle (1 samples, 0.23%) + + + + + alloc::raw_vec::finish_grow (1 samples, 0.23%) + + + + + malloc (1 samples, 0.23%) + + + + + _int_malloc (1 samples, 0.23%) + + + + + regex_automata::hybrid::dfa::Lazy::init_cache (1 samples, 0.23%) + + + + + regex_automata::util::pool::inner::Pool<T,F>::get_slow (6 samples, 1.37%) + + + + + regex_automata::meta::regex::Builder::build_many_from_hir::{{closure}} (6 samples, 1.37%) + + + + + <regex_automata::meta::strategy::Core as regex_automata::meta::strategy::Strategy>::create_cache (5 samples, 1.14%) + + + + + regex_automata::hybrid::dfa::Cache::new (3 samples, 0.68%) + + + + + hashbrown::map::HashMap<K,V,S,A>::insert (1 samples, 0.23%) + + + + + core::hash::BuildHasher::hash_one (1 samples, 0.23%) + + + + + <core::hash::sip::Hasher<S> as core::hash::Hasher>::write (1 samples, 0.23%) + + + + + regex_syntax::hir::translate::TranslatorI::push (1 samples, 0.23%) + + + + + regex_syntax::hir::translate::TranslatorI::push (1 samples, 0.23%) + + + + + <regex_syntax::hir::translate::TranslatorI as regex_syntax::ast::visitor::Visitor>::visit_pre (2 samples, 0.46%) + + + + + regex_syntax::hir::interval::IntervalSet<I>::canonicalize (1 samples, 0.23%) + + + + + regex_syntax::hir::translate::TranslatorI::push (3 samples, 0.68%) + + + + + regex_syntax::hir::Properties::repetition (1 samples, 0.23%) + + + + + malloc (1 samples, 0.23%) + + + + + malloc (2 samples, 0.46%) + + + + + _int_malloc (2 samples, 0.46%) + + + + + regex_syntax::hir::Hir::into_parts (6 samples, 1.37%) + + + + + _int_free (3 samples, 0.68%) + + + + + cfree@GLIBC_2.2.5 (4 samples, 0.91%) + + + + + alloc::raw_vec::RawVec<T,A>::reserve_for_push (1 samples, 0.23%) + + + + + alloc::raw_vec::finish_grow (1 samples, 0.23%) + + + + + regex_syntax::hir::Hir::concat (13 samples, 2.96%) + + reg.. + + + regex_syntax::hir::interval::IntervalSet<I>::canonicalize (1 samples, 0.23%) + + + + + malloc (1 samples, 0.23%) + + + + + regex_syntax::hir::Properties::alternation (2 samples, 0.46%) + + + + + malloc (1 samples, 0.23%) + + + + + <regex_syntax::hir::Hir as core::ops::drop::Drop>::drop (1 samples, 0.23%) + + + + + regex_syntax::hir::Hir::into_parts (5 samples, 1.14%) + + + + + regex_syntax::hir::Hir::alternation (9 samples, 2.05%) + + r.. + + + regex_syntax::hir::ClassUnicode::new (1 samples, 0.23%) + + + + + core::str::converts::from_utf8 (1 samples, 0.23%) + + + + + alloc::vec::Vec<T,A>::into_boxed_slice (1 samples, 0.23%) + + + + + realloc (1 samples, 0.23%) + + + + + alloc::raw_vec::RawVec<T,A>::reserve::do_reserve_and_handle (1 samples, 0.23%) + + + + + alloc::raw_vec::finish_grow (1 samples, 0.23%) + + + + + <regex_syntax::hir::translate::TranslatorI as regex_syntax::ast::visitor::Visitor>::visit_post (40 samples, 9.11%) + + <regex_syntax.. + + + regex_syntax::hir::interval::IntervalSet<I>::canonicalize (1 samples, 0.23%) + + + + + alloc::raw_vec::RawVec<T,A>::reserve_for_push (1 samples, 0.23%) + + + + + alloc::raw_vec::finish_grow (1 samples, 0.23%) + + + + + alloc::raw_vec::RawVec<T,A>::reserve::do_reserve_and_handle (1 samples, 0.23%) + + + + + alloc::raw_vec::finish_grow (1 samples, 0.23%) + + + + + malloc (1 samples, 0.23%) + + + + + __memmove_avx512_unaligned_erms (1 samples, 0.23%) + + + + + regex_syntax::hir::translate::Translator::translate (47 samples, 10.71%) + + regex_syntax::hi.. + + + regex_syntax::ast::visitor::visit (47 samples, 10.71%) + + regex_syntax::as.. + + + <regex_syntax::hir::translate::TranslatorI as regex_syntax::ast::visitor::Visitor>::visit_class_set_item_post (4 samples, 0.91%) + + + + + regex_syntax::ast::visitor::visit (2 samples, 0.46%) + + + + + <regex_syntax::ast::parse::NestLimiter<P> as regex_syntax::ast::visitor::Visitor>::visit_pre (2 samples, 0.46%) + + + + + regex_syntax::ast::parse::ParserI<P>::push_group (1 samples, 0.23%) + + + + + __memmove_avx512_unaligned_erms (1 samples, 0.23%) + + + + + regex_syntax::ast::parse::ParserI<P>::char (1 samples, 0.23%) + + + + + malloc (1 samples, 0.23%) + + + + + _int_malloc (1 samples, 0.23%) + + + + + regex_syntax::ast::Concat::into_ast (3 samples, 0.68%) + + + + + alloc::raw_vec::RawVec<T,A>::reserve_for_push (1 samples, 0.23%) + + + + + alloc::raw_vec::finish_grow (1 samples, 0.23%) + + + + + realloc (1 samples, 0.23%) + + + + + _int_realloc (1 samples, 0.23%) + + + + + _int_malloc (1 samples, 0.23%) + + + + + malloc_consolidate (1 samples, 0.23%) + + + + + regex_syntax::ast::parse::ParserI<P>::push_alternate (8 samples, 1.82%) + + r.. + + + regex_syntax::ast::parse::ParserI<P>::pop_group (1 samples, 0.23%) + + + + + cfree@GLIBC_2.2.5 (1 samples, 0.23%) + + + + + _int_free (1 samples, 0.23%) + + + + + regex_syntax::ast::parse::ParserI<P>::parse_uncounted_repetition (1 samples, 0.23%) + + + + + regex_syntax::ast::parse::ParserI<P>::parse_set_class (1 samples, 0.23%) + + + + + regex_syntax::ast::ClassSetUnion::push (1 samples, 0.23%) + + + + + alloc::raw_vec::RawVec<T,A>::reserve_for_push (1 samples, 0.23%) + + + + + alloc::raw_vec::finish_grow (1 samples, 0.23%) + + + + + __rust_alloc (1 samples, 0.23%) + + + + + regex_syntax::ast::parse::ParserI<P>::char (1 samples, 0.23%) + + + + + _int_malloc (1 samples, 0.23%) + + + + + malloc (3 samples, 0.68%) + + + + + regex_syntax::ast::parse::Parser::parse (23 samples, 5.24%) + + regex_.. + + + regex_syntax::ast::parse::ParserI<P>::parse_with_comments (23 samples, 5.24%) + + regex_.. + + + malloc (1 samples, 0.23%) + + + + + _int_malloc (1 samples, 0.23%) + + + + + __memmove_avx512_unaligned_erms (1 samples, 0.23%) + + + + + unlink_chunk.constprop.0 (1 samples, 0.23%) + + + + + malloc_consolidate (3 samples, 0.68%) + + + + + core::ptr::drop_in_place<regex_syntax::ast::ClassSet> (5 samples, 1.14%) + + + + + <regex_syntax::ast::ClassSet as core::ops::drop::Drop>::drop (5 samples, 1.14%) + + + + + <alloc::vec::Vec<T,A> as alloc::vec::spec_extend::SpecExtend<T,I>>::spec_extend (4 samples, 0.91%) + + + + + alloc::raw_vec::RawVec<T,A>::reserve::do_reserve_and_handle (4 samples, 0.91%) + + + + + alloc::raw_vec::finish_grow (4 samples, 0.91%) + + + + + realloc (4 samples, 0.91%) + + + + + _int_realloc (4 samples, 0.91%) + + + + + _int_malloc (4 samples, 0.91%) + + + + + core::ptr::drop_in_place<regex_syntax::ast::Ast> (7 samples, 1.59%) + + + + + cfree@GLIBC_2.2.5 (2 samples, 0.46%) + + + + + _int_free (2 samples, 0.46%) + + + + + _int_free (5 samples, 1.14%) + + + + + cfree@GLIBC_2.2.5 (6 samples, 1.37%) + + + + + <alloc::vec::Vec<T,A> as alloc::vec::spec_extend::SpecExtend<T,I>>::spec_extend (1 samples, 0.23%) + + + + + alloc::raw_vec::RawVec<T,A>::reserve::do_reserve_and_handle (1 samples, 0.23%) + + + + + alloc::raw_vec::finish_grow (1 samples, 0.23%) + + + + + realloc (1 samples, 0.23%) + + + + + _int_realloc (1 samples, 0.23%) + + + + + _int_malloc (1 samples, 0.23%) + + + + + core::ptr::drop_in_place<regex_syntax::ast::Ast> (15 samples, 3.42%) + + cor.. + + + <regex_syntax::ast::Ast as core::ops::drop::Drop>::drop (15 samples, 3.42%) + + <re.. + + + core::ptr::drop_in_place<regex_syntax::hir::HirKind> (1 samples, 0.23%) + + + + + unlink_chunk.constprop.0 (1 samples, 0.23%) + + + + + schedule (15 samples, 3.42%) + + sch.. + + + __schedule (15 samples, 3.42%) + + __s.. + + + finish_task_switch.isra.0 (15 samples, 3.42%) + + fin.. + + + __perf_event_task_sched_in (15 samples, 3.42%) + + __p.. + + + x86_pmu_enable_all (15 samples, 3.42%) + + x86.. + + + asm_sysvec_hyperv_stimer0 (16 samples, 3.64%) + + asm_.. + + + irqentry_exit_to_user_mode (16 samples, 3.64%) + + irqe.. + + + exit_to_user_mode_prepare (16 samples, 3.64%) + + exit.. + + + malloc_consolidate (18 samples, 4.10%) + + mall.. + + + _int_free (23 samples, 5.24%) + + _int_f.. + + + regex::builders::Builder::build_one_bytes (111 samples, 25.28%) + + regex::builders::Builder::build_one_bytes + + + regex_automata::meta::regex::Builder::build (111 samples, 25.28%) + + regex_automata::meta::regex::Builder::bu.. + + + <alloc::vec::Vec<T,A> as core::ops::drop::Drop>::drop (25 samples, 5.69%) + + <alloc:.. + + + <regex_syntax::hir::Hir as core::ops::drop::Drop>::drop (25 samples, 5.69%) + + <regex_.. + + + cfree@GLIBC_2.2.5 (24 samples, 5.47%) + + cfree@G.. + + + regex::regex::bytes::Regex::new (112 samples, 25.51%) + + regex::regex::bytes::Regex::new + + + <alloc::vec::Vec<T,A> as alloc::vec::spec_extend::SpecExtend<T,I>>::spec_extend (1 samples, 0.23%) + + + + + <core::iter::adapters::map::Map<I,F> as core::iter::traits::iterator::Iterator>::fold (1 samples, 0.23%) + + + + + malloc (1 samples, 0.23%) + + + + + _int_malloc (1 samples, 0.23%) + + + + + malloc_consolidate (1 samples, 0.23%) + + + + + s4lib::data::datetime::bytes_to_regex_to_datetime (119 samples, 27.11%) + + s4lib::data::datetime::bytes_to_regex_to_da.. + + + once_cell::imp::OnceCell<T>::initialize (113 samples, 25.74%) + + once_cell::imp::OnceCell<T>::initialize + + + once_cell::imp::initialize_or_wait (113 samples, 25.74%) + + once_cell::imp::initialize_or_wait + + + once_cell::imp::OnceCell<T>::initialize::_{{closure}} (113 samples, 25.74%) + + once_cell::imp::OnceCell<T>::initialize::.. + + + s4lib::readers::syslogprocessor::SyslogProcessor::process_stage1_blockzero_analysis (120 samples, 27.33%) + + s4lib::readers::syslogprocessor::SyslogProce.. + + + s4lib::readers::syslinereader::SyslineReader::find_sysline_in_block_year (120 samples, 27.33%) + + s4lib::readers::syslinereader::SyslineReader.. + + + s4lib::readers::syslinereader::SyslineReader::parse_datetime_in_line_cached (120 samples, 27.33%) + + s4lib::readers::syslinereader::SyslineReader.. + + + core::slice::sort::merge_sort (1 samples, 0.23%) + + + + + entry_SYSCALL_64 (1 samples, 0.23%) + + + + + lru::LruCache<K,V,S>::pop (1 samples, 0.23%) + + + + + s4lib::readers::syslogprocessor::SyslogProcessor::drop_data_try (2 samples, 0.46%) + + + + + s4lib::readers::syslinereader::SyslineReader::drop_data (2 samples, 0.46%) + + + + + s4lib::readers::syslinereader::SyslineReader::drop_sysline (2 samples, 0.46%) + + + + + s4lib::readers::linereader::LineReader::drop_lines (2 samples, 0.46%) + + + + + s4lib::readers::linereader::LineReader::drop_line (2 samples, 0.46%) + + + + + chrono::offset::LocalResult<T>::and_then (1 samples, 0.23%) + + + + + s4lib::data::datetime::datetime_parse_from_str (2 samples, 0.46%) + + + + + chrono::naive::datetime::NaiveDateTime::parse_from_str (1 samples, 0.23%) + + + + + chrono::format::parse::parse_internal (1 samples, 0.23%) + + + + + <core::hash::sip::Hasher<S> as core::hash::Hasher>::write (1 samples, 0.23%) + + + + + core::hash::BuildHasher::hash_one (3 samples, 0.68%) + + + + + regex_automata::util::captures::Captures::get_group_by_name (6 samples, 1.37%) + + + + + malloc (1 samples, 0.23%) + + + + + regex_automata::meta::regex::Regex::create_captures (2 samples, 0.46%) + + + + + regex_automata::nfa::thompson::backtrack::BoundedBacktracker::try_search_slots (3 samples, 0.68%) + + + + + regex_automata::nfa::thompson::backtrack::BoundedBacktracker::try_search_slots_imp (3 samples, 0.68%) + + + + + regex_automata::nfa::thompson::backtrack::BoundedBacktracker::search_imp (3 samples, 0.68%) + + + + + regex_automata::meta::strategy::Core::search_slots_nofail (4 samples, 0.91%) + + + + + <regex_automata::meta::strategy::Core as regex_automata::meta::strategy::Strategy>::search_slots (5 samples, 1.14%) + + + + + s4lib::data::datetime::bytes_to_regex_to_datetime (17 samples, 3.87%) + + s4li.. + + + alloc::raw_vec::RawVec<T,A>::reserve::do_reserve_and_handle (1 samples, 0.23%) + + + + + alloc::raw_vec::finish_grow (1 samples, 0.23%) + + + + + malloc (1 samples, 0.23%) + + + + + _int_malloc (1 samples, 0.23%) + + + + + <alloc::vec::Vec<T> as alloc::vec::spec_from_iter::SpecFromIter<T,I>>::from_iter (1 samples, 0.23%) + + + + + malloc (1 samples, 0.23%) + + + + + _int_malloc (1 samples, 0.23%) + + + + + s4lib::readers::syslinereader::SyslineReader::parse_datetime_in_line_cached (20 samples, 4.56%) + + s4lib.. + + + alloc::collections::btree::navigate::<impl alloc::collections::btree::node::NodeRef<alloc::collections::btree::node::marker::Immut,K,V,alloc::collections::btree::node::marker::LeafOrInternal>>::range_search (1 samples, 0.23%) + + + + + malloc (1 samples, 0.23%) + + + + + alloc::collections::btree::node::Handle<alloc::collections::btree::node::NodeRef<alloc::collections::btree::node::marker::Mut,K,V,alloc::collections::btree::node::marker::Leaf>,alloc::collections::btree::node::marker::Edge>::insert_recursing (2 samples, 0.46%) + + + + + alloc::collections::btree::map::BTreeMap<K,V,A>::insert (3 samples, 0.68%) + + + + + rangemap::map::RangeMap<K,V>::insert (5 samples, 1.14%) + + + + + s4lib::readers::syslinereader::SyslineReader::insert_sysline (6 samples, 1.37%) + + + + + alloc::collections::btree::map::entry::VacantEntry<K,V,A>::insert (1 samples, 0.23%) + + + + + alloc::collections::btree::node::Handle<alloc::collections::btree::node::NodeRef<alloc::collections::btree::node::marker::Mut,K,V,alloc::collections::btree::node::marker::Leaf>,alloc::collections::btree::node::marker::Edge>::insert_recursing (1 samples, 0.23%) + + + + + malloc (1 samples, 0.23%) + + + + + _int_malloc (1 samples, 0.23%) + + + + + alloc::collections::btree::map::BTreeMap<K,V,A>::insert (2 samples, 0.46%) + + + + + s4lib::readers::linereader::LineReader::insert_line (3 samples, 0.68%) + + + + + alloc::collections::btree::navigate::<impl alloc::collections::btree::node::NodeRef<alloc::collections::btree::node::marker::Immut,K,V,alloc::collections::btree::node::marker::LeafOrInternal>>::range_search (1 samples, 0.23%) + + + + + s4lib::readers::linereader::LineReader::get_linep (3 samples, 0.68%) + + + + + miniz_oxide::inflate::core::transfer (3 samples, 0.68%) + + + + + __memmove_avx512_unaligned_erms (1 samples, 0.23%) + + + + + flate2::zio::read (5 samples, 1.14%) + + + + + <flate2::ffi::rust::Inflate as flate2::ffi::InflateBackend>::decompress (5 samples, 1.14%) + + + + + miniz_oxide::inflate::stream::inflate (5 samples, 1.14%) + + + + + miniz_oxide::inflate::core::decompress (5 samples, 1.14%) + + + + + s4lib::readers::blockreader::BlockReader::read_block (7 samples, 1.59%) + + + + + s4lib::readers::blockreader::BlockReader::read_block_FileGz (7 samples, 1.59%) + + + + + <flate2::gz::bufread::GzDecoder<R> as std::io::Read>::read (7 samples, 1.59%) + + + + + crc32fast::Hasher::update (2 samples, 0.46%) + + + + + crc32fast::baseline::update_fast_16 (2 samples, 0.46%) + + + + + malloc (2 samples, 0.46%) + + + + + alloc::collections::btree::navigate::LeafRange<BorrowType,K,V>::perform_next_checked (1 samples, 0.23%) + + + + + alloc::collections::btree::navigate::<impl alloc::collections::btree::node::NodeRef<alloc::collections::btree::node::marker::Immut,K,V,alloc::collections::btree::node::marker::LeafOrInternal>>::range_search (1 samples, 0.23%) + + + + + alloc::collections::btree::map::BTreeMap<K,V,A>::contains_key (1 samples, 0.23%) + + + + + s4lib::readers::linereader::LineReader::find_line (30 samples, 6.83%) + + s4lib::re.. + + + lru::LruCache<K,V,S>::put (3 samples, 0.68%) + + + + + s4lib::readers::syslinereader::SyslineReader::find_sysline_year (60 samples, 13.67%) + + s4lib::readers::sysli.. + + + s4lib::readers::syslinereader::SyslineReader::find_sysline_between_datetime_filters (61 samples, 13.90%) + + s4lib::readers::sysli.. + + + s4lib::readers::syslinereader::SyslineReader::find_sysline_at_datetime_filter_linear_search (61 samples, 13.90%) + + s4lib::readers::sysli.. + + + std::thread::park (1 samples, 0.23%) + + + + + syscall (1 samples, 0.23%) + + + + + entry_SYSCALL_64_after_hwframe (1 samples, 0.23%) + + + + + do_syscall_64 (1 samples, 0.23%) + + + + + __x64_sys_futex (1 samples, 0.23%) + + + + + do_futex (1 samples, 0.23%) + + + + + futex_wait (1 samples, 0.23%) + + + + + futex_wait_queue_me (1 samples, 0.23%) + + + + + schedule (1 samples, 0.23%) + + + + + __schedule (1 samples, 0.23%) + + + + + crossbeam_channel::context::Context::with::{{closure}} (2 samples, 0.46%) + + + + + __sched_yield (1 samples, 0.23%) + + + + + entry_SYSCALL_64_after_hwframe (1 samples, 0.23%) + + + + + do_syscall_64 (1 samples, 0.23%) + + + + + __x64_sys_sched_yield (1 samples, 0.23%) + + + + + schedule (1 samples, 0.23%) + + + + + __schedule (1 samples, 0.23%) + + + + + update_rq_clock (1 samples, 0.23%) + + + + + sched_clock_cpu (1 samples, 0.23%) + + + + + read_hv_sched_clock_tsc (1 samples, 0.23%) + + + + + read_hv_clock_tsc (1 samples, 0.23%) + + + + + __sched_yield (1 samples, 0.23%) + + + + + entry_SYSCALL_64_after_hwframe (1 samples, 0.23%) + + + + + do_syscall_64 (1 samples, 0.23%) + + + + + syscall_enter_from_user_mode (1 samples, 0.23%) + + + + + clone3 (187 samples, 42.60%) + + clone3 + + + start_thread (187 samples, 42.60%) + + start_thread + + + std::sys::unix::thread::Thread::new::thread_start (187 samples, 42.60%) + + std::sys::unix::thread::Thread::new::thread_start + + + core::ops::function::FnOnce::call_once{{vtable.shim}} (187 samples, 42.60%) + + core::ops::function::FnOnce::call_once{{vtable.shim}} + + + std::sys_common::backtrace::__rust_begin_short_backtrace (187 samples, 42.60%) + + std::sys_common::backtrace::__rust_begin_short_backtrace + + + s4::exec_fileprocessor_thread (187 samples, 42.60%) + + s4::exec_fileprocessor_thread + + + crossbeam_channel::channel::Sender<T>::send (4 samples, 0.91%) + + + + + __memmove_avx512_unaligned_erms (1 samples, 0.23%) + + + + + std::sys_common::backtrace::__rust_begin_short_backtrace (2 samples, 0.46%) + + + + + s4::exec_fileprocessor_thread (2 samples, 0.46%) + + + + + s4lib::readers::syslogprocessor::SyslogProcessor::process_stage1_blockzero_analysis (2 samples, 0.46%) + + + + + s4lib::readers::syslinereader::SyslineReader::find_sysline_in_block_year (2 samples, 0.46%) + + + + + s4lib::readers::syslinereader::SyslineReader::parse_datetime_in_line_cached (2 samples, 0.46%) + + + + + s4lib::data::datetime::bytes_to_regex_to_datetime (2 samples, 0.46%) + + + + + once_cell::imp::OnceCell<T>::initialize (2 samples, 0.46%) + + + + + once_cell::imp::initialize_or_wait (2 samples, 0.46%) + + + + + once_cell::imp::OnceCell<T>::initialize::_{{closure}} (2 samples, 0.46%) + + + + + regex::regex::bytes::Regex::new (2 samples, 0.46%) + + + + + regex::builders::Builder::build_one_bytes (2 samples, 0.46%) + + + + + regex_automata::meta::regex::Builder::build (2 samples, 0.46%) + + + + + regex_syntax::ast::parse::Parser::parse (2 samples, 0.46%) + + + + + regex_syntax::ast::parse::ParserI<P>::parse_with_comments (2 samples, 0.46%) + + + + + regex_syntax::ast::parse::ParserI<P>::parse_set_class (2 samples, 0.46%) + + + + + regex_syntax::ast::parse::ParserI<P>::pop_class (2 samples, 0.46%) + + + + + s4lib::readers::syslogprocessor::SyslogProcessor::process_stage1_blockzero_analysis (1 samples, 0.23%) + + + + + s4lib::readers::syslinereader::SyslineReader::find_sysline_in_block_year (1 samples, 0.23%) + + + + + s4lib::readers::syslinereader::SyslineReader::parse_datetime_in_line_cached (1 samples, 0.23%) + + + + + s4lib::data::datetime::bytes_to_regex_to_datetime (1 samples, 0.23%) + + + + + once_cell::imp::OnceCell<T>::initialize (1 samples, 0.23%) + + + + + once_cell::imp::initialize_or_wait (1 samples, 0.23%) + + + + + once_cell::imp::OnceCell<T>::initialize::_{{closure}} (1 samples, 0.23%) + + + + + regex::regex::bytes::Regex::new (1 samples, 0.23%) + + + + + regex::builders::Builder::build_one_bytes (1 samples, 0.23%) + + + + + regex_automata::meta::regex::Builder::build (1 samples, 0.23%) + + + + + regex_automata::meta::strategy::new (1 samples, 0.23%) + + + + + regex_automata::nfa::thompson::compiler::Compiler::build_many_from_hir (1 samples, 0.23%) + + + + + regex_automata::nfa::thompson::builder::Builder::build (1 samples, 0.23%) + + + + + malloc (1 samples, 0.23%) + + + + + _int_malloc (1 samples, 0.23%) + + + + + regex_syntax::hir::Hir::kind (1 samples, 0.23%) + + + + + regex_automata::nfa::thompson::compiler::Compiler::c (4 samples, 0.91%) + + + + + regex_automata::nfa::thompson::literal_trie::LiteralTrie::add (3 samples, 0.68%) + + + + + regex_automata::nfa::thompson::compiler::Compiler::c_cap (5 samples, 1.14%) + + + + + regex_automata::nfa::thompson::builder::Builder::add_capture_start (1 samples, 0.23%) + + + + + alloc::raw_vec::RawVec<T,A>::reserve_for_push (1 samples, 0.23%) + + + + + alloc::raw_vec::finish_grow (1 samples, 0.23%) + + + + + realloc (1 samples, 0.23%) + + + + + regex_automata::nfa::thompson::literal_trie::LiteralTrie::add (1 samples, 0.23%) + + + + + regex_automata::nfa::thompson::compiler::Compiler::build_many_from_hir (7 samples, 1.59%) + + + + + <core::iter::adapters::map::Map<I,F> as core::iter::traits::iterator::Iterator>::next (7 samples, 1.59%) + + + + + regex_automata::nfa::thompson::compiler::Compiler::c_cap (7 samples, 1.59%) + + + + + regex_automata::nfa::thompson::compiler::Compiler::c (7 samples, 1.59%) + + + + + regex_automata::nfa::thompson::compiler::Compiler::c (2 samples, 0.46%) + + + + + regex_automata::nfa::thompson::builder::Builder::add (1 samples, 0.23%) + + + + + regex_automata::meta::wrappers::OnePass::new (1 samples, 0.23%) + + + + + regex_automata::dfa::onepass::Builder::build_from_nfa (1 samples, 0.23%) + + + + + regex_automata::dfa::onepass::InternalBuilder::stack_push (1 samples, 0.23%) + + + + + alloc::raw_vec::RawVec<T,A>::reserve_for_push (1 samples, 0.23%) + + + + + alloc::raw_vec::finish_grow (1 samples, 0.23%) + + + + + regex_syntax::hir::literal::Seq::optimize_by_preference (1 samples, 0.23%) + + + + + regex_syntax::hir::literal::PreferenceTrie::minimize (1 samples, 0.23%) + + + + + alloc::vec::Vec<T,A>::retain_mut (1 samples, 0.23%) + + + + + regex_syntax::hir::literal::PreferenceTrie::insert (1 samples, 0.23%) + + + + + alloc::raw_vec::RawVec<T,A>::reserve::do_reserve_and_handle (1 samples, 0.23%) + + + + + alloc::raw_vec::finish_grow (1 samples, 0.23%) + + + + + regex_syntax::hir::Hir::concat (1 samples, 0.23%) + + + + + alloc::raw_vec::RawVec<T,A>::reserve_for_push (1 samples, 0.23%) + + + + + alloc::raw_vec::finish_grow (1 samples, 0.23%) + + + + + realloc (1 samples, 0.23%) + + + + + s4lib::readers::syslinereader::SyslineReader::parse_datetime_in_line_cached (11 samples, 2.51%) + + s4.. + + + s4lib::data::datetime::bytes_to_regex_to_datetime (11 samples, 2.51%) + + s4.. + + + once_cell::imp::OnceCell<T>::initialize (11 samples, 2.51%) + + on.. + + + once_cell::imp::initialize_or_wait (11 samples, 2.51%) + + on.. + + + once_cell::imp::OnceCell<T>::initialize::_{{closure}} (11 samples, 2.51%) + + on.. + + + regex::regex::bytes::Regex::new (11 samples, 2.51%) + + re.. + + + regex::builders::Builder::build_one_bytes (11 samples, 2.51%) + + re.. + + + regex_automata::meta::regex::Builder::build (11 samples, 2.51%) + + re.. + + + regex_automata::meta::strategy::new (11 samples, 2.51%) + + re.. + + + regex_automata::meta::reverse_inner::extract (3 samples, 0.68%) + + + + + regex_automata::meta::reverse_inner::flatten (1 samples, 0.23%) + + + + + regex_syntax::hir::Hir::alternation (1 samples, 0.23%) + + + + + regex_syntax::hir::Hir::into_parts (1 samples, 0.23%) + + + + + regex_syntax::hir::literal::Seq::optimize_by_preference (1 samples, 0.23%) + + + + + cfree@GLIBC_2.2.5 (1 samples, 0.23%) + + + + + alloc::sync::Arc<T>::drop_slow (1 samples, 0.23%) + + + + + core::ptr::drop_in_place<regex_automata::util::prefilter::teddy::Teddy> (1 samples, 0.23%) + + + + + alloc::sync::Arc<T>::drop_slow (1 samples, 0.23%) + + + + + core::ptr::drop_in_place<aho_corasick::packed::teddy::generic::Teddy<16_usize>> (1 samples, 0.23%) + + + + + alloc::sync::Arc<T>::drop_slow (1 samples, 0.23%) + + + + + cfree@GLIBC_2.2.5 (1 samples, 0.23%) + + + + + _int_free (1 samples, 0.23%) + + + + + s4lib::readers::syslinereader::SyslineReader::find_sysline_in_block_year (3 samples, 0.68%) + + + + + s4lib::readers::syslinereader::SyslineReader::parse_datetime_in_line_cached (3 samples, 0.68%) + + + + + s4lib::data::datetime::bytes_to_regex_to_datetime (3 samples, 0.68%) + + + + + once_cell::imp::OnceCell<T>::initialize (3 samples, 0.68%) + + + + + once_cell::imp::initialize_or_wait (3 samples, 0.68%) + + + + + once_cell::imp::OnceCell<T>::initialize::_{{closure}} (3 samples, 0.68%) + + + + + regex::regex::bytes::Regex::new (3 samples, 0.68%) + + + + + regex::builders::Builder::build_one_bytes (3 samples, 0.68%) + + + + + regex_automata::meta::regex::Builder::build (3 samples, 0.68%) + + + + + regex_automata::meta::strategy::new (3 samples, 0.68%) + + + + + regex_automata::meta::reverse_inner::extract (3 samples, 0.68%) + + + + + s4lib::readers::blockreader::BlockReader::new (1 samples, 0.23%) + + + + + asm_exc_page_fault (1 samples, 0.23%) + + + + + exc_page_fault (1 samples, 0.23%) + + + + + alloc::raw_vec::RawVec<T,A>::reserve_for_push (1 samples, 0.23%) + + + + + alloc::raw_vec::finish_grow (1 samples, 0.23%) + + + + + malloc (1 samples, 0.23%) + + + + + regex_automata::nfa::thompson::literal_trie::LiteralTrie::compile (5 samples, 1.14%) + + + + + realloc (1 samples, 0.23%) + + + + + malloc (4 samples, 0.91%) + + + + + _int_malloc (4 samples, 0.91%) + + + + + alloc::raw_vec::RawVec<T,A>::reserve_for_push (6 samples, 1.37%) + + + + + alloc::raw_vec::finish_grow (6 samples, 1.37%) + + + + + _int_malloc (3 samples, 0.68%) + + + + + malloc (4 samples, 0.91%) + + + + + regex_automata::nfa::thompson::literal_trie::LiteralTrie::add (11 samples, 2.51%) + + re.. + + + alloc::raw_vec::RawVec<T,A>::reserve::do_reserve_and_handle (5 samples, 1.14%) + + + + + alloc::raw_vec::finish_grow (5 samples, 1.14%) + + + + + regex_automata::nfa::thompson::compiler::Compiler::c_cap (18 samples, 4.10%) + + rege.. + + + regex_automata::nfa::thompson::compiler::Compiler::c (18 samples, 4.10%) + + rege.. + + + cfree@GLIBC_2.2.5 (2 samples, 0.46%) + + + + + _int_free (2 samples, 0.46%) + + + + + regex_automata::nfa::thompson::compiler::Compiler::build_many_from_hir (19 samples, 4.33%) + + regex.. + + + <core::iter::adapters::map::Map<I,F> as core::iter::traits::iterator::Iterator>::next (19 samples, 4.33%) + + <core.. + + + regex_automata::nfa::thompson::compiler::Compiler::c_cap (19 samples, 4.33%) + + regex.. + + + regex_automata::nfa::thompson::compiler::Compiler::c (19 samples, 4.33%) + + regex.. + + + regex_automata::nfa::thompson::compiler::Compiler::c_alt_iter (1 samples, 0.23%) + + + + + regex_automata::nfa::thompson::compiler::Compiler::c (1 samples, 0.23%) + + + + + regex_automata::nfa::thompson::map::Utf8SuffixMap::clear (1 samples, 0.23%) + + + + + malloc (1 samples, 0.23%) + + + + + _int_malloc (1 samples, 0.23%) + + + + + alloc::raw_vec::RawVec<T,A>::reserve_for_push (1 samples, 0.23%) + + + + + alloc::raw_vec::finish_grow (1 samples, 0.23%) + + + + + realloc (1 samples, 0.23%) + + + + + _int_realloc (1 samples, 0.23%) + + + + + _int_malloc (1 samples, 0.23%) + + + + + unlink_chunk.constprop.0 (1 samples, 0.23%) + + + + + s4lib::data::datetime::bytes_to_regex_to_datetime (23 samples, 5.24%) + + s4lib:.. + + + once_cell::imp::OnceCell<T>::initialize (23 samples, 5.24%) + + once_c.. + + + once_cell::imp::initialize_or_wait (23 samples, 5.24%) + + once_c.. + + + once_cell::imp::OnceCell<T>::initialize::_{{closure}} (23 samples, 5.24%) + + once_c.. + + + regex::regex::bytes::Regex::new (23 samples, 5.24%) + + regex:.. + + + regex::builders::Builder::build_one_bytes (23 samples, 5.24%) + + regex:.. + + + regex_automata::meta::regex::Builder::build (23 samples, 5.24%) + + regex_.. + + + regex_automata::meta::strategy::new (23 samples, 5.24%) + + regex_.. + + + regex_automata::meta::reverse_inner::extract (4 samples, 0.91%) + + + + + regex_syntax::hir::literal::Seq::optimize_by_preference (4 samples, 0.91%) + + + + + regex_syntax::hir::literal::PreferenceTrie::minimize (4 samples, 0.91%) + + + + + alloc::vec::Vec<T,A>::retain_mut (4 samples, 0.91%) + + + + + regex_syntax::hir::literal::PreferenceTrie::insert (4 samples, 0.91%) + + + + + alloc::raw_vec::RawVec<T,A>::reserve::do_reserve_and_handle (3 samples, 0.68%) + + + + + alloc::raw_vec::finish_grow (3 samples, 0.68%) + + + + + malloc (3 samples, 0.68%) + + + + + _int_malloc (3 samples, 0.68%) + + + + + regex_syntax::ast::parse::ParserI<P>::pop_class (1 samples, 0.23%) + + + + + regex_syntax::ast::parse::ParserI<P>::pop_class_op (1 samples, 0.23%) + + + + + regex_syntax::ast::parse::Parser::parse (3 samples, 0.68%) + + + + + regex_syntax::ast::parse::ParserI<P>::parse_with_comments (3 samples, 0.68%) + + + + + regex_syntax::ast::parse::ParserI<P>::parse_set_class (3 samples, 0.68%) + + + + + regex_syntax::ast::parse::ParserI<P>::parse_set_class_range (2 samples, 0.46%) + + + + + regex_syntax::ast::parse::ParserI<P>::parse_escape (2 samples, 0.46%) + + + + + regex_automata::util::prefilter::prefixes (1 samples, 0.23%) + + + + + regex_syntax::hir::literal::Seq::optimize_by_preference (1 samples, 0.23%) + + + + + regex_syntax::hir::literal::PreferenceTrie::minimize (1 samples, 0.23%) + + + + + alloc::vec::Vec<T,A>::retain_mut (1 samples, 0.23%) + + + + + regex_syntax::hir::literal::PreferenceTrie::insert (1 samples, 0.23%) + + + + + regex_automata::nfa::thompson::nfa::Inner::add (1 samples, 0.23%) + + + + + regex_automata::nfa::thompson::compiler::Compiler::build_many_from_hir (3 samples, 0.68%) + + + + + regex_automata::nfa::thompson::builder::Builder::build (3 samples, 0.68%) + + + + + malloc (1 samples, 0.23%) + + + + + _int_malloc (1 samples, 0.23%) + + + + + malloc_consolidate (1 samples, 0.23%) + + + + + core::ptr::drop_in_place<regex_syntax::hir::Hir> (1 samples, 0.23%) + + + + + <regex_syntax::hir::Hir as core::ops::drop::Drop>::drop (1 samples, 0.23%) + + + + + cfree@GLIBC_2.2.5 (1 samples, 0.23%) + + + + + _int_free (1 samples, 0.23%) + + + + + core::ptr::drop_in_place<core::cell::RefCell<regex_automata::nfa::thompson::range_trie::RangeTrie>> (1 samples, 0.23%) + + + + + core::ptr::drop_in_place<core::cell::RefCell<regex_automata::nfa::thompson::compiler::Utf8State>> (1 samples, 0.23%) + + + + + malloc_consolidate (1 samples, 0.23%) + + + + + unlink_chunk.constprop.0 (1 samples, 0.23%) + + + + + core::ptr::drop_in_place<regex_automata::nfa::thompson::compiler::Compiler> (9 samples, 2.05%) + + c.. + + + cfree@GLIBC_2.2.5 (7 samples, 1.59%) + + + + + _int_free (7 samples, 1.59%) + + + + + s4::exec_fileprocessor_thread (19 samples, 4.33%) + + s4::e.. + + + s4lib::readers::syslogprocessor::SyslogProcessor::process_stage1_blockzero_analysis (19 samples, 4.33%) + + s4lib.. + + + s4lib::readers::syslinereader::SyslineReader::find_sysline_in_block_year (19 samples, 4.33%) + + s4lib.. + + + s4lib::readers::syslinereader::SyslineReader::parse_datetime_in_line_cached (19 samples, 4.33%) + + s4lib.. + + + s4lib::data::datetime::bytes_to_regex_to_datetime (19 samples, 4.33%) + + s4lib.. + + + once_cell::imp::OnceCell<T>::initialize (19 samples, 4.33%) + + once_.. + + + once_cell::imp::initialize_or_wait (19 samples, 4.33%) + + once_.. + + + once_cell::imp::OnceCell<T>::initialize::_{{closure}} (19 samples, 4.33%) + + once_.. + + + regex::regex::bytes::Regex::new (19 samples, 4.33%) + + regex.. + + + regex::builders::Builder::build_one_bytes (19 samples, 4.33%) + + regex.. + + + regex_automata::meta::regex::Builder::build (19 samples, 4.33%) + + regex.. + + + regex_automata::meta::strategy::new (16 samples, 3.64%) + + rege.. + + + __memmove_avx512_unaligned_erms (1 samples, 0.23%) + + + + + aho_corasick::packed::api::Builder::build (1 samples, 0.23%) + + + + + aho_corasick::packed::teddy::builder::Builder::build (1 samples, 0.23%) + + + + + aho_corasick::packed::teddy::builder::x86_64::FatAVX2<3_usize>::new (1 samples, 0.23%) + + + + + aho_corasick::packed::teddy::builder::x86_64::FatAVX2<3_usize>::new_unchecked (1 samples, 0.23%) + + + + + aho_corasick::packed::teddy::generic::Teddy<_>::new (1 samples, 0.23%) + + + + + aho_corasick::packed::pattern::Pattern::low_nybbles (1 samples, 0.23%) + + + + + __libc_calloc (1 samples, 0.23%) + + + + + regex_automata::util::prefilter::Prefilter::new (2 samples, 0.46%) + + + + + regex_automata::util::prefilter::Choice::new (2 samples, 0.46%) + + + + + regex_automata::util::prefilter::teddy::Teddy::new (2 samples, 0.46%) + + + + + aho_corasick::nfa::noncontiguous::Builder::build (1 samples, 0.23%) + + + + + aho_corasick::nfa::noncontiguous::Compiler::shuffle (1 samples, 0.23%) + + + + + aho_corasick::util::remapper::Remapper::remap (1 samples, 0.23%) + + + + + <aho_corasick::nfa::noncontiguous::NFA as aho_corasick::util::remapper::Remappable>::remap (1 samples, 0.23%) + + + + + regex_automata::meta::wrappers::Hybrid::new (1 samples, 0.23%) + + + + + regex_automata::hybrid::dfa::Builder::build_from_nfa (1 samples, 0.23%) + + + + + regex_automata::util::prefilter::teddy::Teddy::new (4 samples, 0.91%) + + + + + aho_corasick::nfa::noncontiguous::Builder::build (4 samples, 0.91%) + + + + + regex_automata::meta::strategy::new (8 samples, 1.82%) + + r.. + + + regex_automata::meta::reverse_inner::extract (5 samples, 1.14%) + + + + + regex_automata::util::prefilter::Choice::new (5 samples, 1.14%) + + + + + regex_automata::util::prefilter::aho_corasick::AhoCorasick::new (1 samples, 0.23%) + + + + + aho_corasick::ahocorasick::AhoCorasickBuilder::build (1 samples, 0.23%) + + + + + aho_corasick::nfa::noncontiguous::Builder::build (1 samples, 0.23%) + + + + + aho_corasick::nfa::noncontiguous::Compiler::init_unanchored_start_state (1 samples, 0.23%) + + + + + aho_corasick::nfa::noncontiguous::NFA::init_full_state (1 samples, 0.23%) + + + + + malloc (1 samples, 0.23%) + + + + + _int_malloc (1 samples, 0.23%) + + + + + malloc_consolidate (1 samples, 0.23%) + + + + + unlink_chunk.constprop.0 (1 samples, 0.23%) + + + + + regex_automata::util::prefilter::Prefilter::new (2 samples, 0.46%) + + + + + regex_automata::util::prefilter::Choice::new (2 samples, 0.46%) + + + + + regex_automata::util::prefilter::teddy::Teddy::new (2 samples, 0.46%) + + + + + aho_corasick::packed::api::Builder::build (2 samples, 0.46%) + + + + + aho_corasick::packed::rabinkarp::RabinKarp::new (2 samples, 0.46%) + + + + + alloc::vec::from_elem (2 samples, 0.46%) + + + + + __alloc_pages (1 samples, 0.23%) + + + + + get_page_from_freelist (1 samples, 0.23%) + + + + + kernel_init_free_pages.part.0 (1 samples, 0.23%) + + + + + clear_page_erms (1 samples, 0.23%) + + + + + asm_exc_page_fault (2 samples, 0.46%) + + + + + exc_page_fault (2 samples, 0.46%) + + + + + do_user_addr_fault (2 samples, 0.46%) + + + + + handle_mm_fault (2 samples, 0.46%) + + + + + __handle_mm_fault (2 samples, 0.46%) + + + + + regex_automata::nfa::thompson::compiler::Utf8Compiler::new (3 samples, 0.68%) + + + + + regex_automata::nfa::thompson::map::Utf8BoundedMap::clear (3 samples, 0.68%) + + + + + <T as alloc::vec::spec_from_elem::SpecFromElem>::from_elem (3 samples, 0.68%) + + + + + alloc::vec::Vec<T,A>::extend_with (3 samples, 0.68%) + + + + + regex_automata::nfa::thompson::compiler::Compiler::build_many_from_hir (4 samples, 0.91%) + + + + + <core::iter::adapters::map::Map<I,F> as core::iter::traits::iterator::Iterator>::next (4 samples, 0.91%) + + + + + regex_automata::nfa::thompson::compiler::Compiler::c_cap (4 samples, 0.91%) + + + + + regex_automata::nfa::thompson::compiler::Compiler::c (4 samples, 0.91%) + + + + + regex_automata::nfa::thompson::compiler::Compiler::c_cap (4 samples, 0.91%) + + + + + regex_automata::nfa::thompson::compiler::Compiler::c (4 samples, 0.91%) + + + + + regex_automata::nfa::thompson::compiler::Compiler::c_alt_iter (4 samples, 0.91%) + + + + + regex_automata::nfa::thompson::compiler::Compiler::c (4 samples, 0.91%) + + + + + regex_automata::nfa::thompson::compiler::Compiler::c (4 samples, 0.91%) + + + + + regex_automata::nfa::thompson::builder::Builder::patch (1 samples, 0.23%) + + + + + alloc::raw_vec::RawVec<T,A>::reserve_for_push (1 samples, 0.23%) + + + + + alloc::raw_vec::finish_grow (1 samples, 0.23%) + + + + + aho_corasick::packed::api::Builder::extend (1 samples, 0.23%) + + + + + aho_corasick::packed::pattern::Patterns::add (1 samples, 0.23%) + + + + + alloc::raw_vec::RawVec<T,A>::reserve_for_push (1 samples, 0.23%) + + + + + alloc::raw_vec::finish_grow (1 samples, 0.23%) + + + + + realloc (1 samples, 0.23%) + + + + + regex_automata::util::prefilter::teddy::Teddy::new (2 samples, 0.46%) + + + + + aho_corasick::dfa::Builder::build_from_noncontiguous (1 samples, 0.23%) + + + + + aho_corasick::dfa::Builder::finish_build_one_start::{{closure}} (1 samples, 0.23%) + + + + + regex_automata::meta::regex::Builder::build (9 samples, 2.05%) + + r.. + + + regex_automata::meta::strategy::new (9 samples, 2.05%) + + r.. + + + regex_automata::meta::reverse_inner::extract (3 samples, 0.68%) + + + + + regex_automata::util::prefilter::Choice::new (3 samples, 0.68%) + + + + + regex_automata::util::prefilter::aho_corasick::AhoCorasick::new (1 samples, 0.23%) + + + + + aho_corasick::ahocorasick::AhoCorasickBuilder::build (1 samples, 0.23%) + + + + + aho_corasick::dfa::Builder::build_from_noncontiguous (1 samples, 0.23%) + + + + + regex_automata::nfa::thompson::builder::Builder::add (1 samples, 0.23%) + + + + + alloc::raw_vec::RawVec<T,A>::reserve_for_push (1 samples, 0.23%) + + + + + alloc::raw_vec::finish_grow (1 samples, 0.23%) + + + + + realloc (1 samples, 0.23%) + + + + + _int_realloc (1 samples, 0.23%) + + + + + _int_malloc (1 samples, 0.23%) + + + + + sysmalloc (1 samples, 0.23%) + + + + + __mprotect (1 samples, 0.23%) + + + + + entry_SYSCALL_64_after_hwframe (1 samples, 0.23%) + + + + + do_syscall_64 (1 samples, 0.23%) + + + + + __x64_sys_mprotect (1 samples, 0.23%) + + + + + do_mprotect_pkey (1 samples, 0.23%) + + + + + mprotect_fixup (1 samples, 0.23%) + + + + + perf_event_mmap (1 samples, 0.23%) + + + + + perf_iterate_sb (1 samples, 0.23%) + + + + + perf_iterate_ctx (1 samples, 0.23%) + + + + + perf_event_mmap_output (1 samples, 0.23%) + + + + + __perf_event_header__init_id (1 samples, 0.23%) + + + + + sched_clock_cpu (1 samples, 0.23%) + + + + + read_hv_sched_clock_tsc (1 samples, 0.23%) + + + + + read_hv_clock_tsc (1 samples, 0.23%) + + + + + sysmalloc (1 samples, 0.23%) + + + + + asm_exc_page_fault (1 samples, 0.23%) + + + + + exc_page_fault (1 samples, 0.23%) + + + + + do_user_addr_fault (1 samples, 0.23%) + + + + + handle_mm_fault (1 samples, 0.23%) + + + + + __handle_mm_fault (1 samples, 0.23%) + + + + + __alloc_pages (1 samples, 0.23%) + + + + + get_page_from_freelist (1 samples, 0.23%) + + + + + rmqueue_bulk (1 samples, 0.23%) + + + + + __list_del_entry_valid (1 samples, 0.23%) + + + + + regex_automata::nfa::thompson::literal_trie::LiteralTrie::compile (3 samples, 0.68%) + + + + + alloc::raw_vec::RawVec<T,A>::reserve_for_push (2 samples, 0.46%) + + + + + alloc::raw_vec::finish_grow (2 samples, 0.46%) + + + + + realloc (2 samples, 0.46%) + + + + + _int_realloc (2 samples, 0.46%) + + + + + _int_malloc (2 samples, 0.46%) + + + + + regex_automata::nfa::thompson::compiler::Compiler::c_cap (1 samples, 0.23%) + + + + + regex_automata::nfa::thompson::compiler::Compiler::c (1 samples, 0.23%) + + + + + regex_automata::nfa::thompson::builder::Builder::add (1 samples, 0.23%) + + + + + regex_automata::nfa::thompson::compiler::Compiler::c_alt_iter (3 samples, 0.68%) + + + + + regex_automata::nfa::thompson::compiler::Compiler::c (3 samples, 0.68%) + + + + + regex::regex::bytes::Regex::new (8 samples, 1.82%) + + r.. + + + regex::builders::Builder::build_one_bytes (8 samples, 1.82%) + + r.. + + + regex_automata::meta::regex::Builder::build (8 samples, 1.82%) + + r.. + + + regex_automata::meta::strategy::new (8 samples, 1.82%) + + r.. + + + regex_automata::nfa::thompson::compiler::Compiler::build_many_from_hir (8 samples, 1.82%) + + r.. + + + <core::iter::adapters::map::Map<I,F> as core::iter::traits::iterator::Iterator>::next (8 samples, 1.82%) + + <.. + + + regex_automata::nfa::thompson::compiler::Compiler::c_cap (8 samples, 1.82%) + + r.. + + + regex_automata::nfa::thompson::compiler::Compiler::c (8 samples, 1.82%) + + r.. + + + regex_automata::nfa::thompson::compiler::Compiler::c_cap (8 samples, 1.82%) + + r.. + + + regex_automata::nfa::thompson::compiler::Compiler::c (8 samples, 1.82%) + + r.. + + + regex_automata::nfa::thompson::compiler::Compiler::c (1 samples, 0.23%) + + + + + regex_automata::nfa::thompson::compiler::Utf8Compiler::finish (1 samples, 0.23%) + + + + + regex_automata::nfa::thompson::compiler::Utf8Compiler::compile_from (1 samples, 0.23%) + + + + + regex_automata::nfa::thompson::literal_trie::LiteralTrie::compile (1 samples, 0.23%) + + + + + alloc::raw_vec::RawVec<T,A>::reserve_for_push (1 samples, 0.23%) + + + + + alloc::raw_vec::finish_grow (1 samples, 0.23%) + + + + + alloc::raw_vec::RawVec<T,A>::reserve_for_push (1 samples, 0.23%) + + + + + alloc::raw_vec::finish_grow (1 samples, 0.23%) + + + + + realloc (1 samples, 0.23%) + + + + + _int_realloc (1 samples, 0.23%) + + + + + _int_malloc (1 samples, 0.23%) + + + + + malloc_consolidate (1 samples, 0.23%) + + + + + regex_automata::nfa::thompson::compiler::Compiler::c_cap (3 samples, 0.68%) + + + + + regex_automata::nfa::thompson::compiler::Compiler::c (3 samples, 0.68%) + + + + + regex_automata::nfa::thompson::literal_trie::LiteralTrie::add (2 samples, 0.46%) + + + + + alloc::raw_vec::RawVec<T,A>::reserve::do_reserve_and_handle (1 samples, 0.23%) + + + + + alloc::raw_vec::finish_grow (1 samples, 0.23%) + + + + + malloc (1 samples, 0.23%) + + + + + _int_malloc (1 samples, 0.23%) + + + + + irqentry_enter (1 samples, 0.23%) + + + + + lru_cache_add (1 samples, 0.23%) + + + + + __pagevec_lru_add (1 samples, 0.23%) + + + + + page_mapping (1 samples, 0.23%) + + + + + __mem_cgroup_charge (1 samples, 0.23%) + + + + + charge_memcg (1 samples, 0.23%) + + + + + mem_cgroup_charge_statistics.constprop.0 (1 samples, 0.23%) + + + + + rmqueue_bulk (2 samples, 0.46%) + + + + + __list_del_entry_valid (2 samples, 0.46%) + + + + + __alloc_pages (3 samples, 0.68%) + + + + + get_page_from_freelist (3 samples, 0.68%) + + + + + kernel_init_free_pages.part.0 (1 samples, 0.23%) + + + + + clear_page_erms (1 samples, 0.23%) + + + + + handle_mm_fault (6 samples, 1.37%) + + + + + __handle_mm_fault (6 samples, 1.37%) + + + + + asm_exc_page_fault (8 samples, 1.82%) + + a.. + + + exc_page_fault (8 samples, 1.82%) + + e.. + + + do_user_addr_fault (7 samples, 1.59%) + + + + + regex_automata::nfa::thompson::compiler::Compiler::c_alt_iter (12 samples, 2.73%) + + re.. + + + regex_automata::nfa::thompson::compiler::Compiler::c (12 samples, 2.73%) + + re.. + + + regex_automata::nfa::thompson::compiler::Utf8Compiler::new (12 samples, 2.73%) + + re.. + + + regex_automata::nfa::thompson::map::Utf8BoundedMap::clear (12 samples, 2.73%) + + re.. + + + <T as alloc::vec::spec_from_elem::SpecFromElem>::from_elem (12 samples, 2.73%) + + <T.. + + + alloc::vec::Vec<T,A>::extend_with (12 samples, 2.73%) + + al.. + + + asm_exc_page_fault (1 samples, 0.23%) + + + + + exc_page_fault (1 samples, 0.23%) + + + + + do_user_addr_fault (1 samples, 0.23%) + + + + + handle_mm_fault (1 samples, 0.23%) + + + + + __handle_mm_fault (1 samples, 0.23%) + + + + + __mem_cgroup_charge (1 samples, 0.23%) + + + + + perf_event_mmap_output (1 samples, 0.23%) + + + + + perf_output_copy (1 samples, 0.23%) + + + + + memcpy_erms (1 samples, 0.23%) + + + + + malloc (3 samples, 0.68%) + + + + + _int_malloc (3 samples, 0.68%) + + + + + sysmalloc (3 samples, 0.68%) + + + + + __mprotect (2 samples, 0.46%) + + + + + entry_SYSCALL_64_after_hwframe (2 samples, 0.46%) + + + + + do_syscall_64 (2 samples, 0.46%) + + + + + __x64_sys_mprotect (2 samples, 0.46%) + + + + + do_mprotect_pkey (2 samples, 0.46%) + + + + + mprotect_fixup (2 samples, 0.46%) + + + + + perf_event_mmap (2 samples, 0.46%) + + + + + perf_iterate_sb (2 samples, 0.46%) + + + + + perf_iterate_ctx (2 samples, 0.46%) + + + + + kernel_init_free_pages.part.0 (3 samples, 0.68%) + + + + + clear_page_erms (3 samples, 0.68%) + + + + + __alloc_pages (4 samples, 0.91%) + + + + + get_page_from_freelist (4 samples, 0.91%) + + + + + exc_page_fault (5 samples, 1.14%) + + + + + do_user_addr_fault (5 samples, 1.14%) + + + + + handle_mm_fault (5 samples, 1.14%) + + + + + __handle_mm_fault (5 samples, 1.14%) + + + + + asm_exc_page_fault (7 samples, 1.59%) + + + + + __memmove_avx512_unaligned_erms (1 samples, 0.23%) + + + + + regex::builders::Builder::build_one_bytes (33 samples, 7.52%) + + regex::bui.. + + + regex_automata::meta::regex::Builder::build (33 samples, 7.52%) + + regex_auto.. + + + regex_automata::meta::strategy::new (33 samples, 7.52%) + + regex_auto.. + + + regex_automata::nfa::thompson::compiler::Compiler::build_many_from_hir (33 samples, 7.52%) + + regex_auto.. + + + <core::iter::adapters::map::Map<I,F> as core::iter::traits::iterator::Iterator>::next (33 samples, 7.52%) + + <core::ite.. + + + regex_automata::nfa::thompson::compiler::Compiler::c_cap (33 samples, 7.52%) + + regex_auto.. + + + regex_automata::nfa::thompson::compiler::Compiler::c (33 samples, 7.52%) + + regex_auto.. + + + regex_automata::nfa::thompson::compiler::Compiler::c_cap (33 samples, 7.52%) + + regex_auto.. + + + regex_automata::nfa::thompson::compiler::Compiler::c (33 samples, 7.52%) + + regex_auto.. + + + regex_automata::nfa::thompson::compiler::Compiler::c (18 samples, 4.10%) + + rege.. + + + regex_automata::nfa::thompson::compiler::Utf8Compiler::new (18 samples, 4.10%) + + rege.. + + + regex_automata::nfa::thompson::map::Utf8BoundedMap::clear (18 samples, 4.10%) + + rege.. + + + <T as alloc::vec::spec_from_elem::SpecFromElem>::from_elem (18 samples, 4.10%) + + <T a.. + + + alloc::vec::Vec<T,A>::extend_with (15 samples, 3.42%) + + all.. + + + realloc (1 samples, 0.23%) + + + + + _int_realloc (1 samples, 0.23%) + + + + + _int_free (1 samples, 0.23%) + + + + + regex_automata::nfa::thompson::literal_trie::LiteralTrie::compile (2 samples, 0.46%) + + + + + alloc::raw_vec::RawVec<T,A>::reserve_for_push (2 samples, 0.46%) + + + + + alloc::raw_vec::finish_grow (2 samples, 0.46%) + + + + + malloc (1 samples, 0.23%) + + + + + _int_malloc (1 samples, 0.23%) + + + + + sysmalloc (1 samples, 0.23%) + + + + + asm_exc_page_fault (1 samples, 0.23%) + + + + + exc_page_fault (1 samples, 0.23%) + + + + + irqentry_enter (1 samples, 0.23%) + + + + + once_cell::imp::OnceCell<T>::initialize::_{{closure}} (4 samples, 0.91%) + + + + + regex::regex::bytes::Regex::new (4 samples, 0.91%) + + + + + regex::builders::Builder::build_one_bytes (4 samples, 0.91%) + + + + + regex_automata::meta::regex::Builder::build (4 samples, 0.91%) + + + + + regex_automata::meta::strategy::new (4 samples, 0.91%) + + + + + regex_automata::nfa::thompson::compiler::Compiler::build_many_from_hir (4 samples, 0.91%) + + + + + <core::iter::adapters::map::Map<I,F> as core::iter::traits::iterator::Iterator>::next (4 samples, 0.91%) + + + + + regex_automata::nfa::thompson::compiler::Compiler::c_cap (4 samples, 0.91%) + + + + + regex_automata::nfa::thompson::compiler::Compiler::c (4 samples, 0.91%) + + + + + regex_automata::nfa::thompson::compiler::Compiler::c_cap (4 samples, 0.91%) + + + + + regex_automata::nfa::thompson::compiler::Compiler::c (4 samples, 0.91%) + + + + + regex_automata::nfa::thompson::literal_trie::LiteralTrie::add (2 samples, 0.46%) + + + + + alloc::raw_vec::RawVec<T,A>::reserve_for_push (2 samples, 0.46%) + + + + + alloc::raw_vec::finish_grow (2 samples, 0.46%) + + + + + realloc (2 samples, 0.46%) + + + + + _int_realloc (2 samples, 0.46%) + + + + + _int_malloc (2 samples, 0.46%) + + + + + malloc_consolidate (1 samples, 0.23%) + + + + + miniz_oxide::inflate::stream::InflateState::new_boxed (1 samples, 0.23%) + + + + + __memmove_avx512_unaligned_erms (1 samples, 0.23%) + + + + + asm_exc_page_fault (1 samples, 0.23%) + + + + + exc_page_fault (1 samples, 0.23%) + + + + + do_user_addr_fault (1 samples, 0.23%) + + + + + handle_mm_fault (1 samples, 0.23%) + + + + + __handle_mm_fault (1 samples, 0.23%) + + + + + __mem_cgroup_charge (1 samples, 0.23%) + + + + + get_mem_cgroup_from_mm (1 samples, 0.23%) + + + + + all (439 samples, 100%) + + + + + gen-1000-3-foob (311 samples, 70.84%) + + gen-1000-3-foob + + + [unknown] (124 samples, 28.25%) + + [unknown] + + + core::ops::function::FnOnce::call_once{{vtable.shim}} (1 samples, 0.23%) + + + + + std::sys_common::backtrace::__rust_begin_short_backtrace (1 samples, 0.23%) + + + + + s4::exec_fileprocessor_thread (1 samples, 0.23%) + + + + + s4lib::readers::syslogprocessor::SyslogProcessor::process_stage1_blockzero_analysis (1 samples, 0.23%) + + + + + s4lib::readers::syslinereader::SyslineReader::find_sysline_in_block_year (1 samples, 0.23%) + + + + + s4lib::readers::syslinereader::SyslineReader::parse_datetime_in_line_cached (1 samples, 0.23%) + + + + + s4lib::data::datetime::bytes_to_regex_to_datetime (1 samples, 0.23%) + + + + + once_cell::imp::OnceCell<T>::initialize (1 samples, 0.23%) + + + + + once_cell::imp::initialize_or_wait (1 samples, 0.23%) + + + + + once_cell::imp::OnceCell<T>::initialize::_{{closure}} (1 samples, 0.23%) + + + + + regex::regex::bytes::Regex::new (1 samples, 0.23%) + + + + + regex::builders::Builder::build_one_bytes (1 samples, 0.23%) + + + + + regex_automata::meta::regex::Builder::build (1 samples, 0.23%) + + + + + regex_syntax::ast::parse::Parser::parse (1 samples, 0.23%) + + + + + regex_syntax::ast::parse::ParserI<P>::parse_with_comments (1 samples, 0.23%) + + + + + regex_syntax::ast::parse::ParserI<P>::parse_set_class (1 samples, 0.23%) + + + + + regex_syntax::ast::parse::ParserI<P>::parse_set_class_range (1 samples, 0.23%) + + + + + regex_syntax::ast::parse::ParserI<P>::char (1 samples, 0.23%) + + + + + diff --git a/releases/0.7.75/flamegraph-syslog-lz4.svg b/releases/0.7.75/flamegraph-syslog-lz4.svg new file mode 100644 index 00000000..c1ef67e4 --- /dev/null +++ b/releases/0.7.75/flamegraph-syslog-lz4.svg @@ -0,0 +1,5292 @@ + + + + + + + + + + + + + + + Flame Graph: super_speedy_syslog_searcher 0.7.75; git: d799548f; -freq 8000; created 20240707T231125-0700; flamegraph-flamegraph 0.6.5; rustc 1.70.0
; command: s4 ./logs/other/tests/gen-1000-3-foobar.log.lz4 + + Reset Zoom + Search + + + + ret_from_fork (22 samples, 5.29%) + + ret_fr.. + + + schedule_tail (22 samples, 5.29%) + + schedu.. + + + finish_task_switch.isra.0 (22 samples, 5.29%) + + finish.. + + + __perf_event_task_sched_in (22 samples, 5.29%) + + __perf.. + + + __raw_callee_save___pv_queued_spin_unlock (22 samples, 5.29%) + + __raw_.. + + + cgroup_rstat_updated (1 samples, 0.24%) + + + + + __mod_memcg_lruvec_state (2 samples, 0.48%) + + + + + __mod_lruvec_state (1 samples, 0.24%) + + + + + srso_alias_return_thunk (1 samples, 0.24%) + + + + + srso_alias_safe_ret (1 samples, 0.24%) + + + + + unmap_vmas (5 samples, 1.20%) + + + + + unmap_page_range (5 samples, 1.20%) + + + + + page_remove_rmap (5 samples, 1.20%) + + + + + __mod_lruvec_page_state (5 samples, 1.20%) + + + + + __list_del_entry_valid (2 samples, 0.48%) + + + + + __free_one_page (1 samples, 0.24%) + + + + + __x64_sys_exit_group (10 samples, 2.40%) + + __.. + + + do_group_exit (10 samples, 2.40%) + + do.. + + + do_exit (10 samples, 2.40%) + + do.. + + + mmput (10 samples, 2.40%) + + mm.. + + + exit_mmap (10 samples, 2.40%) + + ex.. + + + tlb_finish_mmu (5 samples, 1.20%) + + + + + release_pages (5 samples, 1.20%) + + + + + free_unref_page_list (5 samples, 1.20%) + + + + + free_pcppages_bulk (5 samples, 1.20%) + + + + + entry_SYSCALL_64_after_hwframe (11 samples, 2.64%) + + en.. + + + do_syscall_64 (11 samples, 2.64%) + + do.. + + + __x64_sys_execve (1 samples, 0.24%) + + + + + do_execveat_common.isra.0 (1 samples, 0.24%) + + + + + bprm_execve (1 samples, 0.24%) + + + + + load_elf_binary (1 samples, 0.24%) + + + + + vm_mmap_pgoff (1 samples, 0.24%) + + + + + do_mmap (1 samples, 0.24%) + + + + + mmap_region (1 samples, 0.24%) + + + + + perf_event_mmap (1 samples, 0.24%) + + + + + perf_iterate_sb (1 samples, 0.24%) + + + + + perf_iterate_ctx (1 samples, 0.24%) + + + + + perf_event_mmap_output (1 samples, 0.24%) + + + + + __perf_event_header__init_id (1 samples, 0.24%) + + + + + __task_pid_nr_ns (1 samples, 0.24%) + + + + + std::sys::unix::thread::Thread::new::thread_start (1 samples, 0.24%) + + + + + std::sys::unix::stack_overflow::imp::make_handler (1 samples, 0.24%) + + + + + __mmap (1 samples, 0.24%) + + + + + entry_SYSCALL_64_after_hwframe (1 samples, 0.24%) + + + + + do_syscall_64 (1 samples, 0.24%) + + + + + vm_mmap_pgoff (1 samples, 0.24%) + + + + + do_mmap (1 samples, 0.24%) + + + + + mmap_region (1 samples, 0.24%) + + + + + perf_event_mmap (1 samples, 0.24%) + + + + + perf_iterate_sb (1 samples, 0.24%) + + + + + perf_iterate_ctx (1 samples, 0.24%) + + + + + clone3 (2 samples, 0.48%) + + + + + start_thread (2 samples, 0.48%) + + + + + entry_SYSCALL_64_after_hwframe (1 samples, 0.24%) + + + + + do_syscall_64 (1 samples, 0.24%) + + + + + __x64_sys_rt_sigprocmask (1 samples, 0.24%) + + + + + sigprocmask (1 samples, 0.24%) + + + + + __raw_callee_save___pv_queued_spin_unlock (1 samples, 0.24%) + + + + + finish_fault (1 samples, 0.24%) + + + + + do_set_pte (1 samples, 0.24%) + + + + + lru_cache_add (1 samples, 0.24%) + + + + + __pagevec_lru_add (1 samples, 0.24%) + + + + + page_mapping (1 samples, 0.24%) + + + + + copy_page (1 samples, 0.24%) + + + + + _dl_relocate_object (3 samples, 0.72%) + + + + + asm_exc_page_fault (3 samples, 0.72%) + + + + + exc_page_fault (3 samples, 0.72%) + + + + + do_user_addr_fault (3 samples, 0.72%) + + + + + handle_mm_fault (3 samples, 0.72%) + + + + + __handle_mm_fault (3 samples, 0.72%) + + + + + __mem_cgroup_charge (1 samples, 0.24%) + + + + + charge_memcg (1 samples, 0.24%) + + + + + _dl_map_object_from_fd (1 samples, 0.24%) + + + + + mmap64 (1 samples, 0.24%) + + + + + entry_SYSCALL_64_after_hwframe (1 samples, 0.24%) + + + + + do_syscall_64 (1 samples, 0.24%) + + + + + ksys_mmap_pgoff (1 samples, 0.24%) + + + + + vm_mmap_pgoff (1 samples, 0.24%) + + + + + do_mmap (1 samples, 0.24%) + + + + + mmap_region (1 samples, 0.24%) + + + + + perf_event_mmap (1 samples, 0.24%) + + + + + perf_iterate_sb (1 samples, 0.24%) + + + + + perf_iterate_ctx (1 samples, 0.24%) + + + + + perf_event_mmap_output (1 samples, 0.24%) + + + + + memcpy_erms (1 samples, 0.24%) + + + + + _dl_start (5 samples, 1.20%) + + + + + _dl_sysdep_start (5 samples, 1.20%) + + + + + dl_main (5 samples, 1.20%) + + + + + _dl_map_object_deps (2 samples, 0.48%) + + + + + _dl_catch_exception (2 samples, 0.48%) + + + + + openaux (2 samples, 0.48%) + + + + + _dl_map_object (2 samples, 0.48%) + + + + + _dl_load_cache_lookup (1 samples, 0.24%) + + + + + _dl_sysdep_read_whole_file (1 samples, 0.24%) + + + + + __GI___open64_nocancel (1 samples, 0.24%) + + + + + entry_SYSCALL_64_after_hwframe (1 samples, 0.24%) + + + + + do_syscall_64 (1 samples, 0.24%) + + + + + __x64_sys_openat (1 samples, 0.24%) + + + + + do_sys_openat2 (1 samples, 0.24%) + + + + + do_filp_open (1 samples, 0.24%) + + + + + path_openat (1 samples, 0.24%) + + + + + vfs_open (1 samples, 0.24%) + + + + + __memrchr_evex (3 samples, 0.72%) + + + + + dput (1 samples, 0.24%) + + + + + lockref_put_return (1 samples, 0.24%) + + + + + __fsnotify_parent (2 samples, 0.48%) + + + + + dget_parent (1 samples, 0.24%) + + + + + rcu_read_unlock_strict (1 samples, 0.24%) + + + + + vfs_write (4 samples, 0.96%) + + + + + entry_SYSCALL_64_after_hwframe (6 samples, 1.44%) + + + + + do_syscall_64 (6 samples, 1.44%) + + + + + ksys_write (6 samples, 1.44%) + + + + + __fdget_pos (2 samples, 0.48%) + + + + + __GI___libc_write (7 samples, 1.68%) + + + + + <std::io::stdio::StdoutLock as std::io::Write>::write (11 samples, 2.64%) + + <s.. + + + std::io::Write::write_all (12 samples, 2.88%) + + st.. + + + <termcolor::LossyStandardStream<W> as std::io::Write>::write (12 samples, 2.88%) + + <t.. + + + <std::io::stdio::Stdout as std::io::Write>::write (12 samples, 2.88%) + + <s.. + + + <&std::io::stdio::Stdout as std::io::Write>::write (12 samples, 2.88%) + + <&.. + + + __memmove_avx512_unaligned_erms (1 samples, 0.24%) + + + + + __memmove_avx512_unaligned_erms (1 samples, 0.24%) + + + + + termcolor::Ansi<W>::write_color (3 samples, 0.72%) + + + + + std::io::Write::write_all (3 samples, 0.72%) + + + + + <std::io::stdio::Stdout as std::io::Write>::write (3 samples, 0.72%) + + + + + <&std::io::stdio::Stdout as std::io::Write>::write (3 samples, 0.72%) + + + + + <std::io::stdio::StdoutLock as std::io::Write>::write (3 samples, 0.72%) + + + + + __memrchr_evex (1 samples, 0.24%) + + + + + <std::io::stdio::Stdout as std::io::Write>::write (2 samples, 0.48%) + + + + + <&std::io::stdio::Stdout as std::io::Write>::write (2 samples, 0.48%) + + + + + <std::io::stdio::StdoutLock as std::io::Write>::write (2 samples, 0.48%) + + + + + <termcolor::LossyStandardStream<W> as termcolor::WriteColor>::set_color (6 samples, 1.44%) + + + + + std::io::Write::write_all (3 samples, 0.72%) + + + + + syscall_exit_to_user_mode (1 samples, 0.24%) + + + + + write_null (1 samples, 0.24%) + + + + + fsnotify (2 samples, 0.48%) + + + + + lockref_put_return (1 samples, 0.24%) + + + + + dput (3 samples, 0.72%) + + + + + __fsnotify_parent (7 samples, 1.68%) + + + + + vfs_write (10 samples, 2.40%) + + vf.. + + + fput_many (3 samples, 0.72%) + + + + + __fget_light (1 samples, 0.24%) + + + + + ksys_write (15 samples, 3.61%) + + ksys.. + + + __fdget_pos (2 samples, 0.48%) + + + + + entry_SYSCALL_64_after_hwframe (18 samples, 4.33%) + + entry.. + + + do_syscall_64 (18 samples, 4.33%) + + do_sy.. + + + entry_SYSCALL_64 (2 samples, 0.48%) + + + + + __GI___libc_write (23 samples, 5.53%) + + __GI___.. + + + <&std::io::stdio::Stdout as std::io::Write>::flush (24 samples, 5.77%) + + <&std::.. + + + std::io::buffered::bufwriter::BufWriter<W>::flush_buf (24 samples, 5.77%) + + std::io.. + + + <std::io::stdio::Stdout as std::io::Write>::flush (25 samples, 6.01%) + + <std::io.. + + + s4lib::printer::printers::PrinterLogMessage::print_sysline_color (47 samples, 11.30%) + + s4lib::printer::p.. + + + hashbrown::map::HashMap<K,V,S,A>::insert (1 samples, 0.24%) + + + + + crossbeam_channel::select::SelectedOperation::recv (1 samples, 0.24%) + + + + + crossbeam_channel::channel::read (1 samples, 0.24%) + + + + + __memmove_avx512_unaligned_erms (1 samples, 0.24%) + + + + + __put_user_nocheck_8 (1 samples, 0.24%) + + + + + syscall_exit_to_user_mode (2 samples, 0.48%) + + + + + exit_to_user_mode_prepare (2 samples, 0.48%) + + + + + __rseq_handle_notify_resume (2 samples, 0.48%) + + + + + std::thread::park (3 samples, 0.72%) + + + + + syscall (3 samples, 0.72%) + + + + + entry_SYSCALL_64_after_hwframe (3 samples, 0.72%) + + + + + do_syscall_64 (3 samples, 0.72%) + + + + + __x64_sys_futex (1 samples, 0.24%) + + + + + do_futex (1 samples, 0.24%) + + + + + futex_wait (1 samples, 0.24%) + + + + + futex_wait_queue_me (1 samples, 0.24%) + + + + + schedule (1 samples, 0.24%) + + + + + __schedule (1 samples, 0.24%) + + + + + __perf_event_task_sched_out (1 samples, 0.24%) + + + + + amd_pmu_disable_all (1 samples, 0.24%) + + + + + x86_pmu_disable_all (1 samples, 0.24%) + + + + + amd_pmu_addr_offset (1 samples, 0.24%) + + + + + crossbeam_channel::context::Context::wait_until (5 samples, 1.20%) + + + + + crossbeam_channel::context::Context::with::{{closure}} (6 samples, 1.44%) + + + + + <crossbeam_channel::flavors::array::Receiver<T> as crossbeam_channel::select::SelectHandle>::try_select (1 samples, 0.24%) + + + + + <crossbeam_channel::flavors::array::Receiver<T> as crossbeam_channel::select::SelectHandle>::try_select (1 samples, 0.24%) + + + + + crossbeam_channel::select::Select::select (8 samples, 1.92%) + + c.. + + + crossbeam_channel::select::run_select (8 samples, 1.92%) + + c.. + + + alloc::collections::btree::map::BTreeMap<K,V,A>::remove (1 samples, 0.24%) + + + + + alloc::collections::btree::map::entry::OccupiedEntry<K,V,A>::remove_entry (1 samples, 0.24%) + + + + + s4::processing_loop (61 samples, 14.66%) + + s4::processing_loop + + + std::rt::lang_start::_{{closure}} (62 samples, 14.90%) + + std::rt::lang_start::_{.. + + + std::sys_common::backtrace::__rust_begin_short_backtrace (62 samples, 14.90%) + + std::sys_common::backtr.. + + + s4::main (62 samples, 14.90%) + + s4::main + + + <s4::CLI_Args as clap_builder::derive::Args>::augment_args (1 samples, 0.24%) + + + + + once_cell::imp::OnceCell<T>::initialize (1 samples, 0.24%) + + + + + once_cell::imp::initialize_or_wait (1 samples, 0.24%) + + + + + once_cell::imp::OnceCell<T>::initialize::_{{closure}} (1 samples, 0.24%) + + + + + core::ops::function::FnOnce::call_once (1 samples, 0.24%) + + + + + std::sys::common::thread_local::fast_local::fast::Key<T>::try_initialize (1 samples, 0.24%) + + + + + std::sys::common::thread_local::fast_local::fast::Key<T>::try_initialize (1 samples, 0.24%) + + + + + <chrono::offset::local::Local as chrono::offset::TimeZone>::offset_from_utc_datetime (1 samples, 0.24%) + + + + + chrono::offset::local::inner::offset (1 samples, 0.24%) + + + + + <chrono::offset::local::inner::Cache as core::default::Default>::default (1 samples, 0.24%) + + + + + chrono::offset::local::inner::current_zone (1 samples, 0.24%) + + + + + chrono::offset::local::tz_info::timezone::TimeZone::from_posix_tz (1 samples, 0.24%) + + + + + std::fs::read::inner (1 samples, 0.24%) + + + + + __close (1 samples, 0.24%) + + + + + entry_SYSCALL_64_after_hwframe (1 samples, 0.24%) + + + + + do_syscall_64 (1 samples, 0.24%) + + + + + syscall_exit_to_user_mode (1 samples, 0.24%) + + + + + exit_to_user_mode_prepare (1 samples, 0.24%) + + + + + __rseq_handle_notify_resume (1 samples, 0.24%) + + + + + __put_user_nocheck_8 (1 samples, 0.24%) + + + + + main (63 samples, 15.14%) + + main + + + std::rt::lang_start_internal (63 samples, 15.14%) + + std::rt::lang_start_int.. + + + pthread_getattr_np@@GLIBC_2.32 (1 samples, 0.24%) + + + + + fopen@@GLIBC_2.2.5 (1 samples, 0.24%) + + + + + _IO_new_file_init_internal (1 samples, 0.24%) + + + + + _IO_link_in (1 samples, 0.24%) + + + + + asm_exc_page_fault (1 samples, 0.24%) + + + + + srso_alias_return_thunk (1 samples, 0.24%) + + + + + srso_alias_safe_ret (1 samples, 0.24%) + + + + + __libc_start_main@@GLIBC_2.34 (64 samples, 15.38%) + + __libc_start_main@@GLIBC.. + + + __libc_start_call_main (64 samples, 15.38%) + + __libc_start_call_main + + + exit (1 samples, 0.24%) + + + + + __run_exit_handlers (1 samples, 0.24%) + + + + + _dl_fini (1 samples, 0.24%) + + + + + _dl_sort_maps (1 samples, 0.24%) + + + + + dfs_traversal.part.0 (1 samples, 0.24%) + + + + + s4 (105 samples, 25.24%) + + s4 + + + _start (70 samples, 16.83%) + + _start + + + [[kernel.kallsyms]] (1 samples, 0.24%) + + + + + perf_event_exec (14 samples, 3.37%) + + per.. + + + x86_pmu_enable_all (14 samples, 3.37%) + + x86.. + + + perf-exec (15 samples, 3.61%) + + perf.. + + + entry_SYSCALL_64_after_hwframe (15 samples, 3.61%) + + entr.. + + + do_syscall_64 (15 samples, 3.61%) + + do_s.. + + + __x64_sys_execve (15 samples, 3.61%) + + __x6.. + + + do_execveat_common.isra.0 (15 samples, 3.61%) + + do_e.. + + + bprm_execve (15 samples, 3.61%) + + bprm.. + + + load_elf_binary (15 samples, 3.61%) + + load.. + + + begin_new_exec (15 samples, 3.61%) + + begi.. + + + perf_event_comm (1 samples, 0.24%) + + + + + <regex_automata::meta::strategy::ReverseInner as regex_automata::meta::strategy::Strategy>::create_cache (1 samples, 0.24%) + + + + + regex_automata::hybrid::dfa::Cache::new (1 samples, 0.24%) + + + + + regex_automata::hybrid::dfa::Lazy::init_cache (1 samples, 0.24%) + + + + + unlink_chunk.constprop.0 (1 samples, 0.24%) + + + + + malloc_consolidate (3 samples, 0.72%) + + + + + regex_automata::nfa::thompson::pikevm::ActiveStates::new (4 samples, 0.96%) + + + + + regex_automata::nfa::thompson::pikevm::ActiveStates::reset (4 samples, 0.96%) + + + + + alloc::raw_vec::RawVec<T,A>::reserve::do_reserve_and_handle (4 samples, 0.96%) + + + + + alloc::raw_vec::finish_grow (4 samples, 0.96%) + + + + + malloc (4 samples, 0.96%) + + + + + _int_malloc (4 samples, 0.96%) + + + + + regex_automata::util::pool::inner::Pool<T,F>::get_slow (6 samples, 1.44%) + + + + + regex_automata::meta::regex::Builder::build_many_from_hir::{{closure}} (6 samples, 1.44%) + + + + + <regex_automata::meta::strategy::Core as regex_automata::meta::strategy::Strategy>::create_cache (5 samples, 1.20%) + + + + + regex_automata::hybrid::dfa::Cache::new (1 samples, 0.24%) + + + + + regex_automata::hybrid::dfa::Lazy::init_cache (1 samples, 0.24%) + + + + + regex_automata::hybrid::dfa::Lazy::set_transition (1 samples, 0.24%) + + + + + regex_syntax::hir::translate::TranslatorI::push (1 samples, 0.24%) + + + + + regex_syntax::hir::translate::TranslatorI::push (2 samples, 0.48%) + + + + + <regex_syntax::hir::translate::TranslatorI as regex_syntax::ast::visitor::Visitor>::visit_pre (3 samples, 0.72%) + + + + + regex_syntax::hir::translate::TranslatorI::push (2 samples, 0.48%) + + + + + regex_syntax::hir::Properties::capture (1 samples, 0.24%) + + + + + malloc (1 samples, 0.24%) + + + + + regex_syntax::hir::Hir::literal (1 samples, 0.24%) + + + + + malloc (1 samples, 0.24%) + + + + + <regex_syntax::hir::Hir as core::ops::drop::Drop>::drop (1 samples, 0.24%) + + + + + regex_syntax::hir::Hir::into_parts (4 samples, 0.96%) + + + + + cfree@GLIBC_2.2.5 (3 samples, 0.72%) + + + + + _int_free (3 samples, 0.72%) + + + + + alloc::raw_vec::RawVec<T,A>::reserve_for_push (1 samples, 0.24%) + + + + + alloc::raw_vec::finish_grow (1 samples, 0.24%) + + + + + __rdl_alloc (1 samples, 0.24%) + + + + + regex_syntax::hir::Hir::concat (11 samples, 2.64%) + + re.. + + + regex_syntax::hir::lift_common_prefix (1 samples, 0.24%) + + + + + regex_syntax::hir::Properties::alternation (2 samples, 0.48%) + + + + + regex_syntax::hir::Hir::alternation (6 samples, 1.44%) + + + + + alloc::raw_vec::RawVec<T,A>::reserve_for_push (1 samples, 0.24%) + + + + + alloc::raw_vec::finish_grow (1 samples, 0.24%) + + + + + realloc (1 samples, 0.24%) + + + + + _int_realloc (1 samples, 0.24%) + + + + + _int_malloc (1 samples, 0.24%) + + + + + malloc_consolidate (1 samples, 0.24%) + + + + + <regex_syntax::hir::translate::TranslatorI as regex_syntax::ast::visitor::Visitor>::visit_post (30 samples, 7.21%) + + <regex_syn.. + + + <regex_syntax::hir::translate::TranslatorI as regex_syntax::ast::visitor::Visitor>::visit_class_set_item_pre (1 samples, 0.24%) + + + + + regex_syntax::hir::interval::IntervalSet<I>::canonicalize (1 samples, 0.24%) + + + + + <regex_syntax::hir::translate::TranslatorI as regex_syntax::ast::visitor::Visitor>::visit_class_set_item_post (1 samples, 0.24%) + + + + + alloc::raw_vec::RawVec<T,A>::reserve::do_reserve_and_handle (1 samples, 0.24%) + + + + + alloc::raw_vec::finish_grow (1 samples, 0.24%) + + + + + malloc (1 samples, 0.24%) + + + + + regex_syntax::hir::translate::Translator::translate (37 samples, 8.89%) + + regex_syntax:.. + + + regex_syntax::ast::visitor::visit (37 samples, 8.89%) + + regex_syntax:.. + + + regex_syntax::ast::visitor::visit (2 samples, 0.48%) + + + + + <regex_syntax::ast::parse::NestLimiter<P> as regex_syntax::ast::visitor::Visitor>::visit_pre (2 samples, 0.48%) + + + + + regex_syntax::ast::parse::ParserI<P>::parse_group (2 samples, 0.48%) + + + + + regex_syntax::ast::parse::ParserI<P>::parse_capture_name (2 samples, 0.48%) + + + + + regex_syntax::ast::parse::ParserI<P>::push_group (3 samples, 0.72%) + + + + + regex_syntax::ast::Concat::into_ast (2 samples, 0.48%) + + + + + malloc (2 samples, 0.48%) + + + + + regex_syntax::ast::parse::ParserI<P>::push_alternate (3 samples, 0.72%) + + + + + alloc::raw_vec::RawVec<T,A>::reserve_for_push (1 samples, 0.24%) + + + + + alloc::raw_vec::finish_grow (1 samples, 0.24%) + + + + + realloc (1 samples, 0.24%) + + + + + _int_realloc (1 samples, 0.24%) + + + + + regex_syntax::ast::parse::ParserI<P>::pop_group (1 samples, 0.24%) + + + + + regex_syntax::ast::parse::ParserI<P>::parse_counted_repetition (1 samples, 0.24%) + + + + + regex_syntax::ast::parse::ParserI<P>::parse_decimal (1 samples, 0.24%) + + + + + regex_syntax::ast::parse::ParserI<P>::char (2 samples, 0.48%) + + + + + _int_malloc (3 samples, 0.72%) + + + + + malloc (6 samples, 1.44%) + + + + + regex_syntax::ast::parse::Parser::parse (28 samples, 6.73%) + + regex_syn.. + + + regex_syntax::ast::parse::ParserI<P>::parse_with_comments (28 samples, 6.73%) + + regex_syn.. + + + regex_automata::meta::regex::RegexInfo::new (1 samples, 0.24%) + + + + + malloc (1 samples, 0.24%) + + + + + malloc (1 samples, 0.24%) + + + + + __memmove_avx512_unaligned_erms (1 samples, 0.24%) + + + + + unlink_chunk.constprop.0 (1 samples, 0.24%) + + + + + malloc_consolidate (2 samples, 0.48%) + + + + + core::ptr::drop_in_place<regex_syntax::ast::ClassSet> (4 samples, 0.96%) + + + + + <regex_syntax::ast::ClassSet as core::ops::drop::Drop>::drop (4 samples, 0.96%) + + + + + <alloc::vec::Vec<T,A> as alloc::vec::spec_extend::SpecExtend<T,I>>::spec_extend (3 samples, 0.72%) + + + + + alloc::raw_vec::RawVec<T,A>::reserve::do_reserve_and_handle (3 samples, 0.72%) + + + + + alloc::raw_vec::finish_grow (3 samples, 0.72%) + + + + + realloc (3 samples, 0.72%) + + + + + _int_realloc (3 samples, 0.72%) + + + + + _int_malloc (3 samples, 0.72%) + + + + + cfree@GLIBC_2.2.5 (3 samples, 0.72%) + + + + + _int_free (3 samples, 0.72%) + + + + + <regex_syntax::ast::Ast as core::ops::drop::Drop>::drop (2 samples, 0.48%) + + + + + core::ptr::drop_in_place<regex_syntax::ast::Ast> (10 samples, 2.40%) + + co.. + + + cfree@GLIBC_2.2.5 (3 samples, 0.72%) + + + + + _int_free (3 samples, 0.72%) + + + + + core::ptr::drop_in_place<regex_syntax::ast::Ast> (15 samples, 3.61%) + + core.. + + + <regex_syntax::ast::Ast as core::ops::drop::Drop>::drop (15 samples, 3.61%) + + <reg.. + + + <alloc::vec::Vec<T,A> as alloc::vec::spec_extend::SpecExtend<T,I>>::spec_extend (1 samples, 0.24%) + + + + + alloc::raw_vec::RawVec<T,A>::reserve::do_reserve_and_handle (1 samples, 0.24%) + + + + + alloc::raw_vec::finish_grow (1 samples, 0.24%) + + + + + realloc (1 samples, 0.24%) + + + + + _int_realloc (1 samples, 0.24%) + + + + + _int_malloc (1 samples, 0.24%) + + + + + regex::builders::Builder::build_one_bytes (83 samples, 19.95%) + + regex::builders::Builder::build.. + + + regex_automata::meta::regex::Builder::build (83 samples, 19.95%) + + regex_automata::meta::regex::Bu.. + + + <alloc::vec::Vec<T,A> as core::ops::drop::Drop>::drop (2 samples, 0.48%) + + + + + <regex_syntax::hir::Hir as core::ops::drop::Drop>::drop (2 samples, 0.48%) + + + + + cfree@GLIBC_2.2.5 (2 samples, 0.48%) + + + + + _int_free (2 samples, 0.48%) + + + + + malloc_consolidate (1 samples, 0.24%) + + + + + unlink_chunk.constprop.0 (1 samples, 0.24%) + + + + + <core::iter::adapters::map::Map<I,F> as core::iter::traits::iterator::Iterator>::fold (2 samples, 0.48%) + + + + + malloc (2 samples, 0.48%) + + + + + _int_malloc (2 samples, 0.48%) + + + + + s4lib::readers::syslinereader::SyslineReader::find_sysline_in_block_year (92 samples, 22.12%) + + s4lib::readers::syslinereader::Sysl.. + + + s4lib::readers::syslinereader::SyslineReader::parse_datetime_in_line_cached (92 samples, 22.12%) + + s4lib::readers::syslinereader::Sysl.. + + + s4lib::data::datetime::bytes_to_regex_to_datetime (92 samples, 22.12%) + + s4lib::data::datetime::bytes_to_reg.. + + + once_cell::imp::OnceCell<T>::initialize (86 samples, 20.67%) + + once_cell::imp::OnceCell<T>::init.. + + + once_cell::imp::initialize_or_wait (86 samples, 20.67%) + + once_cell::imp::initialize_or_wait + + + once_cell::imp::OnceCell<T>::initialize::_{{closure}} (86 samples, 20.67%) + + once_cell::imp::OnceCell<T>::init.. + + + regex::regex::bytes::Regex::new (86 samples, 20.67%) + + regex::regex::bytes::Regex::new + + + <alloc::vec::Vec<T,A> as alloc::vec::spec_extend::SpecExtend<T,I>>::spec_extend (3 samples, 0.72%) + + + + + __memset_avx512_unaligned_erms (1 samples, 0.24%) + + + + + asm_exc_page_fault (1 samples, 0.24%) + + + + + exc_page_fault (1 samples, 0.24%) + + + + + do_user_addr_fault (1 samples, 0.24%) + + + + + handle_mm_fault (1 samples, 0.24%) + + + + + __handle_mm_fault (1 samples, 0.24%) + + + + + do_huge_pmd_anonymous_page (1 samples, 0.24%) + + + + + clear_huge_page (1 samples, 0.24%) + + + + + clear_subpage (1 samples, 0.24%) + + + + + clear_page_erms (1 samples, 0.24%) + + + + + asm_exc_page_fault (3 samples, 0.72%) + + + + + exc_page_fault (3 samples, 0.72%) + + + + + __memset_avx512_unaligned_erms (4 samples, 0.96%) + + + + + __irqentry_text_end (1 samples, 0.24%) + + + + + __memmove_avx512_unaligned_erms (1 samples, 0.24%) + + + + + s4lib::readers::syslogprocessor::SyslogProcessor::process_stage1_blockzero_analysis (100 samples, 24.04%) + + s4lib::readers::syslogprocessor::Syslo.. + + + s4lib::readers::blockreader::BlockReader::read_block (8 samples, 1.92%) + + s.. + + + s4lib::readers::blockreader::BlockReader::read_block_FileLz4 (8 samples, 1.92%) + + s.. + + + <lz4_flex::frame::decompress::FrameDecoder<R> as std::io::Read>::read (7 samples, 1.68%) + + + + + <twox_hash::thirty_two::XxHash32 as core::hash::Hasher>::write (2 samples, 0.48%) + + + + + cfree@GLIBC_2.2.5 (1 samples, 0.24%) + + + + + _int_free (1 samples, 0.24%) + + + + + s4lib::readers::syslogprocessor::SyslogProcessor::drop_data_try (3 samples, 0.72%) + + + + + s4lib::readers::syslinereader::SyslineReader::drop_data (3 samples, 0.72%) + + + + + s4lib::readers::syslinereader::SyslineReader::drop_sysline (3 samples, 0.72%) + + + + + s4lib::data::line::Line::get_boxptrs (1 samples, 0.24%) + + + + + malloc (1 samples, 0.24%) + + + + + _int_malloc (1 samples, 0.24%) + + + + + chrono::format::parsed::Parsed::to_naive_date (1 samples, 0.24%) + + + + + chrono::format::parsed::Parsed::to_naive_datetime_with_offset (2 samples, 0.48%) + + + + + asm_sysvec_hyperv_stimer0 (1 samples, 0.24%) + + + + + sysvec_hyperv_stimer0 (1 samples, 0.24%) + + + + + irq_exit_rcu (1 samples, 0.24%) + + + + + __softirqentry_text_start (1 samples, 0.24%) + + + + + try_to_wake_up (1 samples, 0.24%) + + + + + _raw_spin_lock (1 samples, 0.24%) + + + + + s4lib::data::datetime::datetime_parse_from_str (4 samples, 0.96%) + + + + + chrono::naive::datetime::NaiveDateTime::parse_from_str (4 samples, 0.96%) + + + + + chrono::format::parse::parse_internal (2 samples, 0.48%) + + + + + <core::hash::sip::Hasher<S> as core::hash::Hasher>::write (1 samples, 0.24%) + + + + + regex_automata::util::captures::Captures::get_group_by_name (4 samples, 0.96%) + + + + + core::hash::BuildHasher::hash_one (4 samples, 0.96%) + + + + + __memset_avx512_unaligned_erms (1 samples, 0.24%) + + + + + regex_automata::meta::regex::Regex::create_captures (2 samples, 0.48%) + + + + + __memmove_avx512_unaligned_erms (1 samples, 0.24%) + + + + + regex_automata::meta::strategy::Core::search_slots_nofail (3 samples, 0.72%) + + + + + regex_automata::nfa::thompson::backtrack::BoundedBacktracker::try_search_slots (3 samples, 0.72%) + + + + + regex_automata::nfa::thompson::backtrack::BoundedBacktracker::try_search_slots_imp (3 samples, 0.72%) + + + + + regex_automata::nfa::thompson::backtrack::BoundedBacktracker::search_imp (3 samples, 0.72%) + + + + + <regex_automata::meta::strategy::Core as regex_automata::meta::strategy::Strategy>::search_slots (4 samples, 0.96%) + + + + + regex_automata::hybrid::regex::Regex::try_search (1 samples, 0.24%) + + + + + regex_automata::hybrid::search::find_fwd (1 samples, 0.24%) + + + + + s4lib::data::datetime::bytes_to_regex_to_datetime (18 samples, 4.33%) + + s4lib.. + + + lru::LruCache<K,V,S>::put (1 samples, 0.24%) + + + + + alloc::raw_vec::RawVec<T,A>::reserve::do_reserve_and_handle (1 samples, 0.24%) + + + + + alloc::raw_vec::finish_grow (1 samples, 0.24%) + + + + + malloc (1 samples, 0.24%) + + + + + _int_malloc (1 samples, 0.24%) + + + + + s4lib::readers::syslinereader::SyslineReader::parse_datetime_in_line_cached (22 samples, 5.29%) + + s4lib:.. + + + <alloc::vec::Vec<T> as alloc::vec::spec_from_iter::SpecFromIter<T,I>>::from_iter (1 samples, 0.24%) + + + + + malloc (1 samples, 0.24%) + + + + + alloc::collections::btree::navigate::<impl alloc::collections::btree::node::NodeRef<alloc::collections::btree::node::marker::Immut,K,V,alloc::collections::btree::node::marker::LeafOrInternal>>::range_search (6 samples, 1.44%) + + + + + alloc::collections::btree::map::BTreeMap<K,V,A>::insert (1 samples, 0.24%) + + + + + s4lib::readers::syslinereader::SyslineReader::insert_sysline (8 samples, 1.92%) + + s.. + + + rangemap::map::RangeMap<K,V>::insert (8 samples, 1.92%) + + r.. + + + alloc::collections::btree::navigate::<impl alloc::collections::btree::node::NodeRef<alloc::collections::btree::node::marker::Immut,K,V,alloc::collections::btree::node::marker::LeafOrInternal>>::range_search (1 samples, 0.24%) + + + + + s4lib::readers::syslinereader::SyslineReader::check_store (2 samples, 0.48%) + + + + + alloc::collections::btree::navigate::LeafRange<BorrowType,K,V>::perform_next_checked (1 samples, 0.24%) + + + + + s4lib::readers::linereader::LineReader::get_linep (2 samples, 0.48%) + + + + + alloc::collections::btree::navigate::<impl alloc::collections::btree::node::NodeRef<alloc::collections::btree::node::marker::Immut,K,V,alloc::collections::btree::node::marker::LeafOrInternal>>::range_search (1 samples, 0.24%) + + + + + s4lib::readers::blockreader::BlockReader::read_block_FileLz4 (1 samples, 0.24%) + + + + + __memset_avx512_unaligned_erms (1 samples, 0.24%) + + + + + s4lib::readers::blockreader::BlockReader::read_block (2 samples, 0.48%) + + + + + s4lib::data::line::LinePart::new (1 samples, 0.24%) + + + + + malloc (1 samples, 0.24%) + + + + + _int_malloc (1 samples, 0.24%) + + + + + lru::LruCache<K,V,S>::put (1 samples, 0.24%) + + + + + alloc::collections::btree::navigate::LeafRange<BorrowType,K,V>::perform_next_checked (2 samples, 0.48%) + + + + + alloc::collections::btree::navigate::<impl alloc::collections::btree::node::NodeRef<alloc::collections::btree::node::marker::Immut,K,V,alloc::collections::btree::node::marker::LeafOrInternal>>::range_search (1 samples, 0.24%) + + + + + alloc::collections::btree::map::BTreeMap<K,V,A>::contains_key (2 samples, 0.48%) + + + + + s4lib::readers::linereader::LineReader::find_line (18 samples, 4.33%) + + s4lib.. + + + s4lib::readers::syslinereader::SyslineReader::find_sysline_between_datetime_filters (51 samples, 12.26%) + + s4lib::readers::sy.. + + + s4lib::readers::syslinereader::SyslineReader::find_sysline_at_datetime_filter_linear_search (51 samples, 12.26%) + + s4lib::readers::sy.. + + + s4lib::readers::syslinereader::SyslineReader::find_sysline_year (51 samples, 12.26%) + + s4lib::readers::sy.. + + + lru::LruCache<K,V,S>::put (1 samples, 0.24%) + + + + + std::sys::unix::futex::futex_wake (1 samples, 0.24%) + + + + + syscall (1 samples, 0.24%) + + + + + entry_SYSCALL_64_after_hwframe (1 samples, 0.24%) + + + + + do_syscall_64 (1 samples, 0.24%) + + + + + __x64_sys_futex (1 samples, 0.24%) + + + + + do_futex (1 samples, 0.24%) + + + + + futex_wake (1 samples, 0.24%) + + + + + crossbeam_channel::waker::SyncWaker::notify (2 samples, 0.48%) + + + + + __sched_yield (1 samples, 0.24%) + + + + + entry_SYSCALL_64 (1 samples, 0.24%) + + + + + __memmove_avx512_unaligned_erms (1 samples, 0.24%) + + + + + clone3 (159 samples, 38.22%) + + clone3 + + + start_thread (159 samples, 38.22%) + + start_thread + + + std::sys::unix::thread::Thread::new::thread_start (159 samples, 38.22%) + + std::sys::unix::thread::Thread::new::thread_start + + + core::ops::function::FnOnce::call_once{{vtable.shim}} (159 samples, 38.22%) + + core::ops::function::FnOnce::call_once{{vtable.shim}} + + + std::sys_common::backtrace::__rust_begin_short_backtrace (159 samples, 38.22%) + + std::sys_common::backtrace::__rust_begin_short_backtrace + + + s4::exec_fileprocessor_thread (159 samples, 38.22%) + + s4::exec_fileprocessor_thread + + + crossbeam_channel::channel::Sender<T>::send (5 samples, 1.20%) + + + + + start_thread (1 samples, 0.24%) + + + + + std::sys::unix::thread::Thread::new::thread_start (1 samples, 0.24%) + + + + + core::ops::function::FnOnce::call_once{{vtable.shim}} (1 samples, 0.24%) + + + + + std::sys_common::backtrace::__rust_begin_short_backtrace (1 samples, 0.24%) + + + + + s4::exec_fileprocessor_thread (1 samples, 0.24%) + + + + + s4lib::readers::syslogprocessor::SyslogProcessor::process_stage1_blockzero_analysis (1 samples, 0.24%) + + + + + s4lib::readers::syslinereader::SyslineReader::find_sysline_in_block_year (1 samples, 0.24%) + + + + + s4lib::readers::syslinereader::SyslineReader::parse_datetime_in_line_cached (1 samples, 0.24%) + + + + + s4lib::data::datetime::bytes_to_regex_to_datetime (1 samples, 0.24%) + + + + + once_cell::imp::OnceCell<T>::initialize (1 samples, 0.24%) + + + + + once_cell::imp::initialize_or_wait (1 samples, 0.24%) + + + + + once_cell::imp::OnceCell<T>::initialize::_{{closure}} (1 samples, 0.24%) + + + + + regex::regex::bytes::Regex::new (1 samples, 0.24%) + + + + + regex::builders::Builder::build_one_bytes (1 samples, 0.24%) + + + + + regex_automata::meta::regex::Builder::build (1 samples, 0.24%) + + + + + regex_syntax::ast::parse::Parser::parse (1 samples, 0.24%) + + + + + regex_syntax::ast::parse::ParserI<P>::parse_with_comments (1 samples, 0.24%) + + + + + regex_syntax::ast::parse::ParserI<P>::push_group (1 samples, 0.24%) + + + + + regex_syntax::ast::parse::ParserI<P>::parse_group (1 samples, 0.24%) + + + + + regex_syntax::ast::parse::ParserI<P>::parse_capture_name (1 samples, 0.24%) + + + + + <alloc::string::String as core::clone::Clone>::clone (1 samples, 0.24%) + + + + + malloc (1 samples, 0.24%) + + + + + _int_malloc (1 samples, 0.24%) + + + + + cfree@GLIBC_2.2.5 (1 samples, 0.24%) + + + + + _int_free (1 samples, 0.24%) + + + + + s4lib::readers::syslogprocessor::SyslogProcessor::process_stage1_blockzero_analysis (2 samples, 0.48%) + + + + + s4lib::readers::syslinereader::SyslineReader::find_sysline_in_block_year (2 samples, 0.48%) + + + + + s4lib::readers::syslinereader::SyslineReader::parse_datetime_in_line_cached (2 samples, 0.48%) + + + + + s4lib::data::datetime::bytes_to_regex_to_datetime (2 samples, 0.48%) + + + + + once_cell::imp::OnceCell<T>::initialize (2 samples, 0.48%) + + + + + once_cell::imp::initialize_or_wait (2 samples, 0.48%) + + + + + once_cell::imp::OnceCell<T>::initialize::_{{closure}} (2 samples, 0.48%) + + + + + regex::regex::bytes::Regex::new (2 samples, 0.48%) + + + + + regex::builders::Builder::build_one_bytes (2 samples, 0.48%) + + + + + regex_automata::meta::regex::Builder::build (2 samples, 0.48%) + + + + + regex_automata::meta::strategy::new (2 samples, 0.48%) + + + + + regex_automata::nfa::thompson::compiler::Compiler::build_many_from_hir (2 samples, 0.48%) + + + + + regex_automata::nfa::thompson::builder::Builder::build (2 samples, 0.48%) + + + + + alloc::raw_vec::RawVec<T,A>::reserve_for_push (1 samples, 0.24%) + + + + + alloc::raw_vec::finish_grow (1 samples, 0.24%) + + + + + realloc (1 samples, 0.24%) + + + + + regex_automata::nfa::thompson::compiler::Compiler::c_bounded (1 samples, 0.24%) + + + + + regex_automata::nfa::thompson::builder::Builder::patch (1 samples, 0.24%) + + + + + alloc::raw_vec::RawVec<T,A>::reserve_for_push (1 samples, 0.24%) + + + + + alloc::raw_vec::finish_grow (1 samples, 0.24%) + + + + + alloc::raw_vec::RawVec<T,A>::reserve::do_reserve_and_handle (1 samples, 0.24%) + + + + + regex_automata::nfa::thompson::literal_trie::LiteralTrie::add (8 samples, 1.92%) + + r.. + + + cfree@GLIBC_2.2.5 (4 samples, 0.96%) + + + + + regex_automata::nfa::thompson::compiler::Compiler::c (14 samples, 3.37%) + + reg.. + + + regex_automata::nfa::thompson::compiler::Compiler::c_cap (16 samples, 3.85%) + + rege.. + + + regex_automata::nfa::thompson::builder::Builder::add (1 samples, 0.24%) + + + + + alloc::raw_vec::RawVec<T,A>::reserve_for_push (1 samples, 0.24%) + + + + + alloc::raw_vec::finish_grow (1 samples, 0.24%) + + + + + realloc (1 samples, 0.24%) + + + + + _int_realloc (1 samples, 0.24%) + + + + + __memmove_avx512_unaligned_erms (1 samples, 0.24%) + + + + + asm_exc_page_fault (1 samples, 0.24%) + + + + + exc_page_fault (1 samples, 0.24%) + + + + + do_user_addr_fault (1 samples, 0.24%) + + + + + handle_mm_fault (1 samples, 0.24%) + + + + + __handle_mm_fault (1 samples, 0.24%) + + + + + __alloc_pages (1 samples, 0.24%) + + + + + get_page_from_freelist (1 samples, 0.24%) + + + + + kernel_init_free_pages.part.0 (1 samples, 0.24%) + + + + + clear_page_erms (1 samples, 0.24%) + + + + + regex_automata::nfa::thompson::compiler::Compiler::build_many_from_hir (17 samples, 4.09%) + + rege.. + + + <core::iter::adapters::map::Map<I,F> as core::iter::traits::iterator::Iterator>::next (17 samples, 4.09%) + + <cor.. + + + regex_automata::nfa::thompson::compiler::Compiler::c_cap (17 samples, 4.09%) + + rege.. + + + regex_automata::nfa::thompson::compiler::Compiler::c (17 samples, 4.09%) + + rege.. + + + regex_automata::nfa::thompson::compiler::Compiler::c (1 samples, 0.24%) + + + + + regex_automata::meta::wrappers::OnePass::new (1 samples, 0.24%) + + + + + regex_automata::dfa::onepass::Builder::build_from_nfa (1 samples, 0.24%) + + + + + regex_automata::dfa::onepass::InternalBuilder::compile_transition (1 samples, 0.24%) + + + + + regex_automata::dfa::onepass::InternalBuilder::add_dfa_state_for_nfa_state (1 samples, 0.24%) + + + + + __memset_avx512_unaligned_erms (1 samples, 0.24%) + + + + + asm_exc_page_fault (1 samples, 0.24%) + + + + + exc_page_fault (1 samples, 0.24%) + + + + + realloc (1 samples, 0.24%) + + + + + malloc (1 samples, 0.24%) + + + + + _int_malloc (1 samples, 0.24%) + + + + + regex_syntax::hir::literal::Seq::optimize_by_preference (3 samples, 0.72%) + + + + + regex_syntax::hir::literal::PreferenceTrie::minimize (3 samples, 0.72%) + + + + + alloc::vec::Vec<T,A>::retain_mut (3 samples, 0.72%) + + + + + regex_syntax::hir::literal::PreferenceTrie::insert (3 samples, 0.72%) + + + + + alloc::raw_vec::RawVec<T,A>::reserve::do_reserve_and_handle (3 samples, 0.72%) + + + + + alloc::raw_vec::finish_grow (3 samples, 0.72%) + + + + + regex_syntax::hir::literal::Extractor::extract (1 samples, 0.24%) + + + + + regex_syntax::hir::literal::Extractor::cross (1 samples, 0.24%) + + + + + regex_syntax::hir::Properties::literal (1 samples, 0.24%) + + + + + malloc (1 samples, 0.24%) + + + + + s4lib::readers::syslinereader::SyslineReader::parse_datetime_in_line_cached (24 samples, 5.77%) + + s4lib::.. + + + s4lib::data::datetime::bytes_to_regex_to_datetime (24 samples, 5.77%) + + s4lib::.. + + + once_cell::imp::OnceCell<T>::initialize (24 samples, 5.77%) + + once_ce.. + + + once_cell::imp::initialize_or_wait (24 samples, 5.77%) + + once_ce.. + + + once_cell::imp::OnceCell<T>::initialize::_{{closure}} (24 samples, 5.77%) + + once_ce.. + + + regex::regex::bytes::Regex::new (24 samples, 5.77%) + + regex::.. + + + regex::builders::Builder::build_one_bytes (24 samples, 5.77%) + + regex::.. + + + regex_automata::meta::regex::Builder::build (24 samples, 5.77%) + + regex_a.. + + + regex_automata::meta::strategy::new (24 samples, 5.77%) + + regex_a.. + + + regex_automata::meta::reverse_inner::extract (6 samples, 1.44%) + + + + + regex_automata::meta::reverse_inner::flatten (2 samples, 0.48%) + + + + + <alloc::vec::Vec<T> as alloc::vec::spec_from_iter::SpecFromIter<T,I>>::from_iter (2 samples, 0.48%) + + + + + regex_automata::meta::reverse_inner::flatten (2 samples, 0.48%) + + + + + <alloc::vec::Vec<T> as alloc::vec::spec_from_iter::SpecFromIter<T,I>>::from_iter (1 samples, 0.24%) + + + + + regex_automata::nfa::thompson::compiler::Compiler::build_many_from_hir (1 samples, 0.24%) + + + + + regex_automata::nfa::thompson::builder::Builder::build (1 samples, 0.24%) + + + + + regex_automata::nfa::thompson::nfa::Inner::into_nfa (1 samples, 0.24%) + + + + + s4lib::readers::syslinereader::SyslineReader::find_sysline_in_block_year (2 samples, 0.48%) + + + + + s4lib::readers::syslinereader::SyslineReader::parse_datetime_in_line_cached (2 samples, 0.48%) + + + + + s4lib::data::datetime::bytes_to_regex_to_datetime (2 samples, 0.48%) + + + + + once_cell::imp::OnceCell<T>::initialize (2 samples, 0.48%) + + + + + once_cell::imp::initialize_or_wait (2 samples, 0.48%) + + + + + once_cell::imp::OnceCell<T>::initialize::_{{closure}} (2 samples, 0.48%) + + + + + regex::regex::bytes::Regex::new (2 samples, 0.48%) + + + + + regex::builders::Builder::build_one_bytes (2 samples, 0.48%) + + + + + regex_automata::meta::regex::Builder::build (2 samples, 0.48%) + + + + + regex_automata::meta::strategy::new (2 samples, 0.48%) + + + + + regex_automata::meta::reverse_inner::extract (1 samples, 0.24%) + + + + + regex_automata::meta::reverse_inner::flatten (1 samples, 0.24%) + + + + + <alloc::vec::Vec<T> as alloc::vec::spec_from_iter::SpecFromIter<T,I>>::from_iter (1 samples, 0.24%) + + + + + asm_exc_page_fault (1 samples, 0.24%) + + + + + exc_page_fault (1 samples, 0.24%) + + + + + do_user_addr_fault (1 samples, 0.24%) + + + + + find_vma (1 samples, 0.24%) + + + + + vmacache_update (1 samples, 0.24%) + + + + + do_huge_pmd_anonymous_page (2 samples, 0.48%) + + + + + clear_huge_page (2 samples, 0.48%) + + + + + clear_subpage (2 samples, 0.48%) + + + + + clear_page_erms (2 samples, 0.48%) + + + + + do_user_addr_fault (6 samples, 1.44%) + + + + + handle_mm_fault (6 samples, 1.44%) + + + + + __handle_mm_fault (6 samples, 1.44%) + + + + + __alloc_pages (4 samples, 0.96%) + + + + + get_page_from_freelist (4 samples, 0.96%) + + + + + kernel_init_free_pages.part.0 (4 samples, 0.96%) + + + + + clear_page_erms (4 samples, 0.96%) + + + + + __memset_avx512_unaligned_erms (8 samples, 1.92%) + + _.. + + + asm_exc_page_fault (8 samples, 1.92%) + + a.. + + + exc_page_fault (8 samples, 1.92%) + + e.. + + + __memmove_avx512_unaligned_erms (2 samples, 0.48%) + + + + + s4lib::readers::blockreader::BlockReader::new (13 samples, 3.12%) + + s4l.. + + + <lz4_flex::frame::decompress::FrameDecoder<R> as std::io::Read>::read (12 samples, 2.88%) + + <l.. + + + <twox_hash::thirty_two::XxHash32 as core::hash::Hasher>::write (2 samples, 0.48%) + + + + + cfree@GLIBC_2.2.5 (1 samples, 0.24%) + + + + + _int_free (1 samples, 0.24%) + + + + + alloc::raw_vec::RawVec<T,A>::reserve_for_push (1 samples, 0.24%) + + + + + alloc::raw_vec::finish_grow (1 samples, 0.24%) + + + + + malloc (1 samples, 0.24%) + + + + + regex_automata::nfa::thompson::literal_trie::LiteralTrie::compile (6 samples, 1.44%) + + + + + _int_malloc (1 samples, 0.24%) + + + + + malloc (2 samples, 0.48%) + + + + + alloc::raw_vec::RawVec<T,A>::reserve_for_push (3 samples, 0.72%) + + + + + alloc::raw_vec::finish_grow (3 samples, 0.72%) + + + + + malloc (1 samples, 0.24%) + + + + + _int_malloc (1 samples, 0.24%) + + + + + regex_automata::nfa::thompson::literal_trie::LiteralTrie::add (5 samples, 1.20%) + + + + + alloc::raw_vec::RawVec<T,A>::reserve::do_reserve_and_handle (2 samples, 0.48%) + + + + + alloc::raw_vec::finish_grow (2 samples, 0.48%) + + + + + __rdl_alloc (1 samples, 0.24%) + + + + + regex_automata::nfa::thompson::compiler::Compiler::c_alt_iter (1 samples, 0.24%) + + + + + regex_automata::nfa::thompson::compiler::Compiler::patch (1 samples, 0.24%) + + + + + regex_automata::nfa::thompson::builder::Builder::patch (1 samples, 0.24%) + + + + + unlink_chunk.constprop.0 (1 samples, 0.24%) + + + + + regex_automata::nfa::thompson::compiler::Compiler::c_cap (14 samples, 3.37%) + + reg.. + + + regex_automata::nfa::thompson::compiler::Compiler::c (14 samples, 3.37%) + + reg.. + + + cfree@GLIBC_2.2.5 (2 samples, 0.48%) + + + + + _int_free (2 samples, 0.48%) + + + + + malloc_consolidate (2 samples, 0.48%) + + + + + regex_automata::nfa::thompson::literal_trie::LiteralTrie::compile (1 samples, 0.24%) + + + + + alloc::raw_vec::RawVec<T,A>::reserve_for_push (1 samples, 0.24%) + + + + + alloc::raw_vec::finish_grow (1 samples, 0.24%) + + + + + malloc (1 samples, 0.24%) + + + + + regex_automata::nfa::thompson::compiler::Compiler::build_many_from_hir (16 samples, 3.85%) + + rege.. + + + <core::iter::adapters::map::Map<I,F> as core::iter::traits::iterator::Iterator>::next (16 samples, 3.85%) + + <cor.. + + + regex_automata::nfa::thompson::compiler::Compiler::c_cap (16 samples, 3.85%) + + rege.. + + + regex_automata::nfa::thompson::compiler::Compiler::c (16 samples, 3.85%) + + rege.. + + + regex_automata::nfa::thompson::compiler::Compiler::c (2 samples, 0.48%) + + + + + regex_automata::nfa::thompson::literal_trie::LiteralTrie::add (1 samples, 0.24%) + + + + + alloc::raw_vec::RawVec<T,A>::reserve_for_push (1 samples, 0.24%) + + + + + alloc::raw_vec::finish_grow (1 samples, 0.24%) + + + + + malloc (1 samples, 0.24%) + + + + + _int_malloc (1 samples, 0.24%) + + + + + alloc::raw_vec::RawVec<T,A>::reserve_for_push (1 samples, 0.24%) + + + + + alloc::raw_vec::finish_grow (1 samples, 0.24%) + + + + + realloc (1 samples, 0.24%) + + + + + _int_realloc (1 samples, 0.24%) + + + + + _int_malloc (1 samples, 0.24%) + + + + + regex_syntax::hir::literal::Seq::optimize_by_preference (2 samples, 0.48%) + + + + + regex_syntax::hir::literal::PreferenceTrie::minimize (2 samples, 0.48%) + + + + + alloc::vec::Vec<T,A>::retain_mut (2 samples, 0.48%) + + + + + regex_syntax::hir::literal::PreferenceTrie::insert (2 samples, 0.48%) + + + + + alloc::raw_vec::RawVec<T,A>::reserve::do_reserve_and_handle (1 samples, 0.24%) + + + + + alloc::raw_vec::finish_grow (1 samples, 0.24%) + + + + + malloc (1 samples, 0.24%) + + + + + _int_malloc (1 samples, 0.24%) + + + + + s4lib::data::datetime::bytes_to_regex_to_datetime (19 samples, 4.57%) + + s4lib.. + + + once_cell::imp::OnceCell<T>::initialize (19 samples, 4.57%) + + once_.. + + + once_cell::imp::initialize_or_wait (19 samples, 4.57%) + + once_.. + + + once_cell::imp::OnceCell<T>::initialize::_{{closure}} (19 samples, 4.57%) + + once_.. + + + regex::regex::bytes::Regex::new (19 samples, 4.57%) + + regex.. + + + regex::builders::Builder::build_one_bytes (19 samples, 4.57%) + + regex.. + + + regex_automata::meta::regex::Builder::build (19 samples, 4.57%) + + regex.. + + + regex_automata::meta::strategy::new (19 samples, 4.57%) + + regex.. + + + regex_automata::meta::reverse_inner::extract (3 samples, 0.72%) + + + + + regex_syntax::hir::literal::Extractor::extract (1 samples, 0.24%) + + + + + regex_syntax::hir::literal::Extractor::union (1 samples, 0.24%) + + + + + <alloc::vec::Vec<T,A> as alloc::vec::spec_extend::SpecExtend<T,I>>::spec_extend (1 samples, 0.24%) + + + + + alloc::raw_vec::RawVec<T,A>::reserve::do_reserve_and_handle (1 samples, 0.24%) + + + + + alloc::raw_vec::finish_grow (1 samples, 0.24%) + + + + + realloc (1 samples, 0.24%) + + + + + _int_realloc (1 samples, 0.24%) + + + + + _int_malloc (1 samples, 0.24%) + + + + + malloc_consolidate (1 samples, 0.24%) + + + + + regex_syntax::ast::parse::ParserI<P>::parse_set_class_open (1 samples, 0.24%) + + + + + regex_syntax::ast::parse::Parser::parse (2 samples, 0.48%) + + + + + regex_syntax::ast::parse::ParserI<P>::parse_with_comments (2 samples, 0.48%) + + + + + regex_syntax::ast::parse::ParserI<P>::parse_set_class (2 samples, 0.48%) + + + + + regex_syntax::ast::parse::ParserI<P>::push_class_open (2 samples, 0.48%) + + + + + alloc::raw_vec::RawVec<T,A>::reserve_for_push (1 samples, 0.24%) + + + + + alloc::raw_vec::finish_grow (1 samples, 0.24%) + + + + + malloc (1 samples, 0.24%) + + + + + _int_malloc (1 samples, 0.24%) + + + + + malloc_consolidate (1 samples, 0.24%) + + + + + regex_automata::util::prefilter::suffixes (1 samples, 0.24%) + + + + + regex_syntax::hir::literal::Extractor::extract (1 samples, 0.24%) + + + + + regex_syntax::hir::literal::Extractor::cross (1 samples, 0.24%) + + + + + cfree@GLIBC_2.2.5 (1 samples, 0.24%) + + + + + _int_free (1 samples, 0.24%) + + + + + regex_automata::util::prefilter::prefixes (2 samples, 0.48%) + + + + + regex_syntax::hir::literal::Seq::optimize_by_preference (2 samples, 0.48%) + + + + + regex_syntax::hir::literal::PreferenceTrie::minimize (2 samples, 0.48%) + + + + + alloc::vec::Vec<T,A>::retain_mut (2 samples, 0.48%) + + + + + regex_syntax::hir::literal::PreferenceTrie::insert (2 samples, 0.48%) + + + + + regex_automata::nfa::thompson::compiler::Compiler::new (1 samples, 0.24%) + + + + + asm_exc_page_fault (1 samples, 0.24%) + + + + + exc_page_fault (1 samples, 0.24%) + + + + + do_user_addr_fault (1 samples, 0.24%) + + + + + handle_mm_fault (1 samples, 0.24%) + + + + + __handle_mm_fault (1 samples, 0.24%) + + + + + filemap_map_pages (1 samples, 0.24%) + + + + + next_uptodate_page (1 samples, 0.24%) + + + + + regex_syntax::hir::Hir::dot (1 samples, 0.24%) + + + + + regex_syntax::hir::ClassBytes::push (1 samples, 0.24%) + + + + + regex_automata::nfa::thompson::nfa::Inner::remap (2 samples, 0.48%) + + + + + regex_automata::nfa::thompson::compiler::Compiler::build_many_from_hir (6 samples, 1.44%) + + + + + regex_automata::nfa::thompson::builder::Builder::build (5 samples, 1.20%) + + + + + regex_automata::nfa::thompson::nfa::Inner::add (3 samples, 0.72%) + + + + + unlink_chunk.constprop.0 (1 samples, 0.24%) + + + + + malloc (2 samples, 0.48%) + + + + + _int_malloc (2 samples, 0.48%) + + + + + malloc_consolidate (2 samples, 0.48%) + + + + + __rust_dealloc (1 samples, 0.24%) + + + + + core::ptr::drop_in_place<core::cell::RefCell<regex_automata::nfa::thompson::compiler::Utf8State>> (3 samples, 0.72%) + + + + + _int_free (1 samples, 0.24%) + + + + + s4::exec_fileprocessor_thread (20 samples, 4.81%) + + s4::ex.. + + + s4lib::readers::syslogprocessor::SyslogProcessor::process_stage1_blockzero_analysis (20 samples, 4.81%) + + s4lib:.. + + + s4lib::readers::syslinereader::SyslineReader::find_sysline_in_block_year (20 samples, 4.81%) + + s4lib:.. + + + s4lib::readers::syslinereader::SyslineReader::parse_datetime_in_line_cached (20 samples, 4.81%) + + s4lib:.. + + + s4lib::data::datetime::bytes_to_regex_to_datetime (20 samples, 4.81%) + + s4lib:.. + + + once_cell::imp::OnceCell<T>::initialize (20 samples, 4.81%) + + once_c.. + + + once_cell::imp::initialize_or_wait (20 samples, 4.81%) + + once_c.. + + + once_cell::imp::OnceCell<T>::initialize::_{{closure}} (20 samples, 4.81%) + + once_c.. + + + regex::regex::bytes::Regex::new (20 samples, 4.81%) + + regex:.. + + + regex::builders::Builder::build_one_bytes (20 samples, 4.81%) + + regex:.. + + + regex_automata::meta::regex::Builder::build (20 samples, 4.81%) + + regex_.. + + + regex_automata::meta::strategy::new (18 samples, 4.33%) + + regex.. + + + core::ptr::drop_in_place<regex_automata::nfa::thompson::compiler::Compiler> (6 samples, 1.44%) + + + + + cfree@GLIBC_2.2.5 (3 samples, 0.72%) + + + + + aho_corasick::util::alphabet::ByteClassSet::set_range (1 samples, 0.24%) + + + + + aho_corasick::nfa::noncontiguous::Compiler::shuffle (1 samples, 0.24%) + + + + + aho_corasick::util::remapper::Remapper::remap (1 samples, 0.24%) + + + + + <aho_corasick::nfa::noncontiguous::NFA as aho_corasick::util::remapper::Remappable>::remap (1 samples, 0.24%) + + + + + regex_automata::meta::strategy::new (3 samples, 0.72%) + + + + + regex_automata::meta::reverse_inner::extract (3 samples, 0.72%) + + + + + regex_automata::util::prefilter::Choice::new (3 samples, 0.72%) + + + + + regex_automata::util::prefilter::teddy::Teddy::new (3 samples, 0.72%) + + + + + aho_corasick::nfa::noncontiguous::Builder::build (3 samples, 0.72%) + + + + + regex_automata::util::prefilter::Prefilter::new (1 samples, 0.24%) + + + + + regex_automata::util::prefilter::Choice::new (1 samples, 0.24%) + + + + + regex_automata::util::prefilter::teddy::Teddy::new (1 samples, 0.24%) + + + + + aho_corasick::packed::api::Builder::build (1 samples, 0.24%) + + + + + aho_corasick::packed::teddy::builder::Builder::build (1 samples, 0.24%) + + + + + aho_corasick::packed::teddy::builder::x86_64::SlimAVX2<1_usize>::new_unchecked (1 samples, 0.24%) + + + + + aho_corasick::packed::teddy::generic::Teddy<_>::new (1 samples, 0.24%) + + + + + alloc::vec::from_elem (1 samples, 0.24%) + + + + + regex_automata::nfa::thompson::compiler::Utf8Compiler::add (1 samples, 0.24%) + + + + + regex_automata::nfa::thompson::compiler::Utf8Compiler::compile_from (1 samples, 0.24%) + + + + + regex_automata::nfa::thompson::compiler::Utf8Compiler::compile (1 samples, 0.24%) + + + + + malloc (1 samples, 0.24%) + + + + + _int_malloc (1 samples, 0.24%) + + + + + malloc (1 samples, 0.24%) + + + + + _int_malloc (1 samples, 0.24%) + + + + + sysmalloc (1 samples, 0.24%) + + + + + asm_exc_page_fault (1 samples, 0.24%) + + + + + exc_page_fault (1 samples, 0.24%) + + + + + do_user_addr_fault (1 samples, 0.24%) + + + + + find_vma (1 samples, 0.24%) + + + + + vmacache_find (1 samples, 0.24%) + + + + + regex_automata::nfa::thompson::compiler::Utf8Compiler::new (2 samples, 0.48%) + + + + + regex_automata::nfa::thompson::map::Utf8BoundedMap::clear (2 samples, 0.48%) + + + + + <T as alloc::vec::spec_from_elem::SpecFromElem>::from_elem (2 samples, 0.48%) + + + + + alloc::vec::Vec<T,A>::extend_with (1 samples, 0.24%) + + + + + regex_automata::nfa::thompson::compiler::Compiler::build_many_from_hir (4 samples, 0.96%) + + + + + <core::iter::adapters::map::Map<I,F> as core::iter::traits::iterator::Iterator>::next (4 samples, 0.96%) + + + + + regex_automata::nfa::thompson::compiler::Compiler::c_cap (4 samples, 0.96%) + + + + + regex_automata::nfa::thompson::compiler::Compiler::c (4 samples, 0.96%) + + + + + regex_automata::nfa::thompson::compiler::Compiler::c_cap (4 samples, 0.96%) + + + + + regex_automata::nfa::thompson::compiler::Compiler::c (4 samples, 0.96%) + + + + + regex_automata::nfa::thompson::compiler::Compiler::c_alt_iter (4 samples, 0.96%) + + + + + regex_automata::nfa::thompson::compiler::Compiler::c (4 samples, 0.96%) + + + + + regex_automata::nfa::thompson::compiler::Compiler::c (3 samples, 0.72%) + + + + + regex_automata::nfa::thompson::compiler::Compiler::c (1 samples, 0.24%) + + + + + regex_automata::nfa::thompson::builder::Builder::add (1 samples, 0.24%) + + + + + aho_corasick::dfa::Builder::finish_build_one_start::{{closure}} (1 samples, 0.24%) + + + + + regex_automata::util::prefilter::teddy::Teddy::new (3 samples, 0.72%) + + + + + aho_corasick::dfa::Builder::build_from_noncontiguous (3 samples, 0.72%) + + + + + regex_automata::meta::regex::Builder::build (9 samples, 2.16%) + + r.. + + + regex_automata::meta::strategy::new (9 samples, 2.16%) + + r.. + + + regex_automata::meta::reverse_inner::extract (4 samples, 0.96%) + + + + + regex_automata::util::prefilter::Choice::new (4 samples, 0.96%) + + + + + regex_automata::util::prefilter::aho_corasick::AhoCorasick::new (1 samples, 0.24%) + + + + + aho_corasick::ahocorasick::AhoCorasickBuilder::build (1 samples, 0.24%) + + + + + aho_corasick::dfa::Builder::build_from_noncontiguous (1 samples, 0.24%) + + + + + aho_corasick::dfa::DFA::set_matches (1 samples, 0.24%) + + + + + alloc::raw_vec::RawVec<T,A>::reserve_for_push (1 samples, 0.24%) + + + + + alloc::raw_vec::finish_grow (1 samples, 0.24%) + + + + + malloc (1 samples, 0.24%) + + + + + _int_malloc (1 samples, 0.24%) + + + + + regex_automata::nfa::thompson::compiler::Compiler::c_alt_iter (1 samples, 0.24%) + + + + + regex_automata::nfa::thompson::compiler::Compiler::c (1 samples, 0.24%) + + + + + regex_automata::nfa::thompson::builder::Builder::add (1 samples, 0.24%) + + + + + regex::regex::bytes::Regex::new (2 samples, 0.48%) + + + + + regex::builders::Builder::build_one_bytes (2 samples, 0.48%) + + + + + regex_automata::meta::regex::Builder::build (2 samples, 0.48%) + + + + + regex_automata::meta::strategy::new (2 samples, 0.48%) + + + + + regex_automata::nfa::thompson::compiler::Compiler::build_many_from_hir (2 samples, 0.48%) + + + + + <core::iter::adapters::map::Map<I,F> as core::iter::traits::iterator::Iterator>::next (2 samples, 0.48%) + + + + + regex_automata::nfa::thompson::compiler::Compiler::c_cap (2 samples, 0.48%) + + + + + regex_automata::nfa::thompson::compiler::Compiler::c (2 samples, 0.48%) + + + + + regex_automata::nfa::thompson::compiler::Compiler::c_cap (2 samples, 0.48%) + + + + + regex_automata::nfa::thompson::compiler::Compiler::c (2 samples, 0.48%) + + + + + regex_automata::nfa::thompson::compiler::Compiler::c (1 samples, 0.24%) + + + + + regex_automata::nfa::thompson::builder::Builder::add (1 samples, 0.24%) + + + + + alloc::raw_vec::RawVec<T,A>::reserve_for_push (1 samples, 0.24%) + + + + + alloc::raw_vec::finish_grow (1 samples, 0.24%) + + + + + realloc (1 samples, 0.24%) + + + + + _int_realloc (1 samples, 0.24%) + + + + + __memmove_avx512_unaligned_erms (1 samples, 0.24%) + + + + + regex_automata::nfa::thompson::compiler::Compiler::c_exactly (1 samples, 0.24%) + + + + + regex_automata::nfa::thompson::compiler::Compiler::c_concat (1 samples, 0.24%) + + + + + regex_automata::nfa::thompson::compiler::Compiler::c (1 samples, 0.24%) + + + + + <regex_syntax::hir::ClassUnicodeIter as core::iter::traits::iterator::Iterator>::next (1 samples, 0.24%) + + + + + regex_automata::nfa::thompson::builder::Builder::add (1 samples, 0.24%) + + + + + alloc::raw_vec::RawVec<T,A>::reserve_for_push (1 samples, 0.24%) + + + + + regex_automata::nfa::thompson::compiler::Compiler::c_cap (3 samples, 0.72%) + + + + + regex_automata::nfa::thompson::compiler::Compiler::c (3 samples, 0.72%) + + + + + regex_automata::nfa::thompson::literal_trie::LiteralTrie::compile (3 samples, 0.72%) + + + + + malloc (1 samples, 0.24%) + + + + + _int_malloc (1 samples, 0.24%) + + + + + sysmalloc (1 samples, 0.24%) + + + + + asm_exc_page_fault (1 samples, 0.24%) + + + + + exc_page_fault (1 samples, 0.24%) + + + + + do_user_addr_fault (1 samples, 0.24%) + + + + + handle_mm_fault (1 samples, 0.24%) + + + + + __handle_mm_fault (1 samples, 0.24%) + + + + + __alloc_pages (1 samples, 0.24%) + + + + + get_page_from_freelist (1 samples, 0.24%) + + + + + kernel_init_free_pages.part.0 (1 samples, 0.24%) + + + + + clear_page_erms (1 samples, 0.24%) + + + + + __mem_cgroup_charge (1 samples, 0.24%) + + + + + get_mem_cgroup_from_mm (1 samples, 0.24%) + + + + + rmqueue_bulk (1 samples, 0.24%) + + + + + __list_del_entry_valid (1 samples, 0.24%) + + + + + __alloc_pages (4 samples, 0.96%) + + + + + get_page_from_freelist (4 samples, 0.96%) + + + + + kernel_init_free_pages.part.0 (3 samples, 0.72%) + + + + + clear_page_erms (3 samples, 0.72%) + + + + + handle_mm_fault (6 samples, 1.44%) + + + + + __handle_mm_fault (6 samples, 1.44%) + + + + + vmacache_find (1 samples, 0.24%) + + + + + asm_exc_page_fault (8 samples, 1.92%) + + a.. + + + exc_page_fault (8 samples, 1.92%) + + e.. + + + do_user_addr_fault (8 samples, 1.92%) + + d.. + + + find_vma (2 samples, 0.48%) + + + + + regex_automata::nfa::thompson::map::Utf8BoundedMap::clear (15 samples, 3.61%) + + rege.. + + + <T as alloc::vec::spec_from_elem::SpecFromElem>::from_elem (15 samples, 3.61%) + + <T a.. + + + alloc::vec::Vec<T,A>::extend_with (14 samples, 3.37%) + + all.. + + + regex_automata::nfa::thompson::compiler::Utf8Compiler::new (16 samples, 3.85%) + + rege.. + + + alloc::raw_vec::RawVec<T,A>::reserve_for_push (1 samples, 0.24%) + + + + + alloc::raw_vec::finish_grow (1 samples, 0.24%) + + + + + malloc (1 samples, 0.24%) + + + + + regex_automata::nfa::thompson::compiler::Utf8Compiler::add (1 samples, 0.24%) + + + + + regex_automata::nfa::thompson::compiler::Utf8Compiler::compile_from (1 samples, 0.24%) + + + + + regex_automata::nfa::thompson::compiler::Utf8Compiler::compile (1 samples, 0.24%) + + + + + regex_automata::nfa::thompson::builder::Builder::patch (1 samples, 0.24%) + + + + + regex_automata::nfa::thompson::builder::Builder::add (1 samples, 0.24%) + + + + + regex_automata::nfa::thompson::compiler::Compiler::c_alt_iter (20 samples, 4.81%) + + regex_.. + + + regex_automata::nfa::thompson::compiler::Compiler::c (20 samples, 4.81%) + + regex_.. + + + regex_automata::nfa::thompson::compiler::Compiler::c (3 samples, 0.72%) + + + + + __handle_mm_fault (1 samples, 0.24%) + + + + + page_add_new_anon_rmap (1 samples, 0.24%) + + + + + asm_exc_page_fault (2 samples, 0.48%) + + + + + exc_page_fault (2 samples, 0.48%) + + + + + do_user_addr_fault (2 samples, 0.48%) + + + + + handle_mm_fault (2 samples, 0.48%) + + + + + __memmove_avx512_unaligned_erms (4 samples, 0.96%) + + + + + regex::builders::Builder::build_one_bytes (35 samples, 8.41%) + + regex::build.. + + + regex_automata::meta::regex::Builder::build (35 samples, 8.41%) + + regex_automa.. + + + regex_automata::meta::strategy::new (35 samples, 8.41%) + + regex_automa.. + + + regex_automata::nfa::thompson::compiler::Compiler::build_many_from_hir (35 samples, 8.41%) + + regex_automa.. + + + <core::iter::adapters::map::Map<I,F> as core::iter::traits::iterator::Iterator>::next (35 samples, 8.41%) + + <core::iter:.. + + + regex_automata::nfa::thompson::compiler::Compiler::c_cap (35 samples, 8.41%) + + regex_automa.. + + + regex_automata::nfa::thompson::compiler::Compiler::c (35 samples, 8.41%) + + regex_automa.. + + + regex_automata::nfa::thompson::compiler::Compiler::c_cap (35 samples, 8.41%) + + regex_automa.. + + + regex_automata::nfa::thompson::compiler::Compiler::c (35 samples, 8.41%) + + regex_automa.. + + + regex_automata::nfa::thompson::compiler::Compiler::c (11 samples, 2.64%) + + re.. + + + regex_automata::nfa::thompson::compiler::Utf8Compiler::new (11 samples, 2.64%) + + re.. + + + regex_automata::nfa::thompson::map::Utf8BoundedMap::clear (11 samples, 2.64%) + + re.. + + + <T as alloc::vec::spec_from_elem::SpecFromElem>::from_elem (11 samples, 2.64%) + + <T.. + + + alloc::vec::Vec<T,A>::extend_with (11 samples, 2.64%) + + al.. + + + alloc::raw_vec::RawVec<T,A>::reserve_for_push (1 samples, 0.24%) + + + + + alloc::raw_vec::finish_grow (1 samples, 0.24%) + + + + + realloc (1 samples, 0.24%) + + + + + _int_realloc (1 samples, 0.24%) + + + + + _int_malloc (1 samples, 0.24%) + + + + + unlink_chunk.constprop.0 (1 samples, 0.24%) + + + + + regex_automata::nfa::thompson::literal_trie::LiteralTrie::add (2 samples, 0.48%) + + + + + alloc::raw_vec::RawVec<T,A>::reserve::do_reserve_and_handle (1 samples, 0.24%) + + + + + alloc::raw_vec::finish_grow (1 samples, 0.24%) + + + + + realloc (1 samples, 0.24%) + + + + + _int_realloc (1 samples, 0.24%) + + + + + _int_malloc (1 samples, 0.24%) + + + + + once_cell::imp::initialize_or_wait (3 samples, 0.72%) + + + + + once_cell::imp::OnceCell<T>::initialize::_{{closure}} (3 samples, 0.72%) + + + + + regex::regex::bytes::Regex::new (3 samples, 0.72%) + + + + + regex::builders::Builder::build_one_bytes (3 samples, 0.72%) + + + + + regex_automata::meta::regex::Builder::build (3 samples, 0.72%) + + + + + regex_automata::meta::strategy::new (3 samples, 0.72%) + + + + + regex_automata::nfa::thompson::compiler::Compiler::build_many_from_hir (3 samples, 0.72%) + + + + + <core::iter::adapters::map::Map<I,F> as core::iter::traits::iterator::Iterator>::next (3 samples, 0.72%) + + + + + regex_automata::nfa::thompson::compiler::Compiler::c_cap (3 samples, 0.72%) + + + + + regex_automata::nfa::thompson::compiler::Compiler::c (3 samples, 0.72%) + + + + + regex_automata::nfa::thompson::compiler::Compiler::c_cap (3 samples, 0.72%) + + + + + regex_automata::nfa::thompson::compiler::Compiler::c (3 samples, 0.72%) + + + + + regex_automata::nfa::thompson::compiler::Compiler::c (1 samples, 0.24%) + + + + + regex_syntax::utf8::Utf8Sequence::as_slice (1 samples, 0.24%) + + + + + regex_automata::nfa::thompson::literal_trie::LiteralTrie::compile (1 samples, 0.24%) + + + + + regex_automata::nfa::thompson::builder::Builder::add (1 samples, 0.24%) + + + + + alloc::raw_vec::RawVec<T,A>::reserve_for_push (1 samples, 0.24%) + + + + + alloc::raw_vec::finish_grow (1 samples, 0.24%) + + + + + realloc (1 samples, 0.24%) + + + + + _int_realloc (1 samples, 0.24%) + + + + + __memmove_avx512_unaligned_erms (1 samples, 0.24%) + + + + + asm_exc_page_fault (1 samples, 0.24%) + + + + + exc_page_fault (1 samples, 0.24%) + + + + + do_user_addr_fault (1 samples, 0.24%) + + + + + handle_mm_fault (1 samples, 0.24%) + + + + + __handle_mm_fault (1 samples, 0.24%) + + + + + __mem_cgroup_charge (1 samples, 0.24%) + + + + + charge_memcg (1 samples, 0.24%) + + + + + mem_cgroup_charge_statistics.constprop.0 (1 samples, 0.24%) + + + + + unlink_chunk.constprop.0 (1 samples, 0.24%) + + + + + gen-1000-3-foob (295 samples, 70.91%) + + gen-1000-3-foob + + + [unknown] (136 samples, 32.69%) + + [unknown] + + + once_cell::imp::OnceCell<T>::initialize::_{{closure}} (3 samples, 0.72%) + + + + + regex::regex::bytes::Regex::new (3 samples, 0.72%) + + + + + regex::builders::Builder::build_one_bytes (3 samples, 0.72%) + + + + + regex_automata::meta::regex::Builder::build (3 samples, 0.72%) + + + + + regex_automata::meta::strategy::new (3 samples, 0.72%) + + + + + regex_automata::nfa::thompson::compiler::Compiler::build_many_from_hir (3 samples, 0.72%) + + + + + <core::iter::adapters::map::Map<I,F> as core::iter::traits::iterator::Iterator>::next (3 samples, 0.72%) + + + + + regex_automata::nfa::thompson::compiler::Compiler::c_cap (3 samples, 0.72%) + + + + + regex_automata::nfa::thompson::compiler::Compiler::c (3 samples, 0.72%) + + + + + regex_automata::nfa::thompson::compiler::Compiler::c_cap (3 samples, 0.72%) + + + + + regex_automata::nfa::thompson::compiler::Compiler::c (3 samples, 0.72%) + + + + + regex_automata::nfa::thompson::literal_trie::LiteralTrie::add (2 samples, 0.48%) + + + + + alloc::raw_vec::RawVec<T,A>::reserve_for_push (2 samples, 0.48%) + + + + + alloc::raw_vec::finish_grow (2 samples, 0.48%) + + + + + realloc (2 samples, 0.48%) + + + + + _int_realloc (2 samples, 0.48%) + + + + + _int_malloc (2 samples, 0.48%) + + + + + malloc_consolidate (2 samples, 0.48%) + + + + + all (416 samples, 100%) + + + + + ctrl-c (1 samples, 0.24%) + + + + + clone3 (1 samples, 0.24%) + + + + + start_thread (1 samples, 0.24%) + + + + + std::sys::unix::thread::Thread::new::thread_start (1 samples, 0.24%) + + + + + core::ops::function::FnOnce::call_once{{vtable.shim}} (1 samples, 0.24%) + + + + + std::sys_common::backtrace::__rust_begin_short_backtrace (1 samples, 0.24%) + + + + + nix::unistd::read (1 samples, 0.24%) + + + + + read (1 samples, 0.24%) + + + + + entry_SYSCALL_64_after_hwframe (1 samples, 0.24%) + + + + + do_syscall_64 (1 samples, 0.24%) + + + + + syscall_exit_to_user_mode (1 samples, 0.24%) + + + + + exit_to_user_mode_prepare (1 samples, 0.24%) + + + + + arch_do_signal_or_restart (1 samples, 0.24%) + + + + + get_signal (1 samples, 0.24%) + + + + + do_group_exit (1 samples, 0.24%) + + + + + do_exit (1 samples, 0.24%) + + + + + acct_collect (1 samples, 0.24%) + + + + + diff --git a/releases/0.7.75/flamegraph-syslog-no-matches.svg b/releases/0.7.75/flamegraph-syslog-no-matches.svg new file mode 100644 index 00000000..3fb1f088 --- /dev/null +++ b/releases/0.7.75/flamegraph-syslog-no-matches.svg @@ -0,0 +1,6422 @@ + + + + + + + + + + + + + + + Flame Graph: super_speedy_syslog_searcher 0.7.75; git: d799548f; -freq 8000; created 20240707T231113-0700; flamegraph-flamegraph 0.6.5; rustc 1.70.0
; command: s4 ./logs/other/tests/numbers3.log + + Reset Zoom + Search + + + + ret_from_fork (22 samples, 3.59%) + + ret_.. + + + schedule_tail (22 samples, 3.59%) + + sche.. + + + finish_task_switch.isra.0 (22 samples, 3.59%) + + fini.. + + + __perf_event_task_sched_in (22 samples, 3.59%) + + __pe.. + + + __raw_callee_save___pv_queued_spin_unlock (22 samples, 3.59%) + + __ra.. + + + __list_del_entry_valid (2 samples, 0.33%) + + + + + __free_one_page (3 samples, 0.49%) + + + + + free_pcppages_bulk (6 samples, 0.98%) + + + + + free_unref_page_list (7 samples, 1.14%) + + + + + __mem_cgroup_uncharge_list (1 samples, 0.16%) + + + + + uncharge_page (1 samples, 0.16%) + + + + + release_pages (10 samples, 1.63%) + + + + + tlb_flush_mmu (11 samples, 1.79%) + + t.. + + + free_pages_and_swap_cache (1 samples, 0.16%) + + + + + free_swap_cache (1 samples, 0.16%) + + + + + cgroup_rstat_updated (3 samples, 0.49%) + + + + + __mod_memcg_lruvec_state (5 samples, 0.82%) + + + + + __mod_lruvec_page_state (6 samples, 0.98%) + + + + + __mod_lruvec_state (1 samples, 0.16%) + + + + + __mod_node_page_state (1 samples, 0.16%) + + + + + page_remove_rmap (7 samples, 1.14%) + + + + + __tlb_remove_page_size (1 samples, 0.16%) + + + + + unmap_vmas (20 samples, 3.26%) + + unm.. + + + unmap_page_range (20 samples, 3.26%) + + unm.. + + + mmput (21 samples, 3.43%) + + mmp.. + + + exit_mmap (21 samples, 3.43%) + + exi.. + + + tlb_finish_mmu (1 samples, 0.16%) + + + + + release_pages (1 samples, 0.16%) + + + + + __x64_sys_exit_group (22 samples, 3.59%) + + __x6.. + + + do_group_exit (22 samples, 3.59%) + + do_g.. + + + do_exit (22 samples, 3.59%) + + do_e.. + + + mm_update_next_owner (1 samples, 0.16%) + + + + + setup_new_exec (1 samples, 0.16%) + + + + + arch_pick_mmap_layout (1 samples, 0.16%) + + + + + get_random_u64 (1 samples, 0.16%) + + + + + entry_SYSCALL_64_after_hwframe (24 samples, 3.92%) + + entr.. + + + do_syscall_64 (24 samples, 3.92%) + + do_s.. + + + __x64_sys_execve (2 samples, 0.33%) + + + + + do_execveat_common.isra.0 (2 samples, 0.33%) + + + + + bprm_execve (2 samples, 0.33%) + + + + + load_elf_binary (2 samples, 0.33%) + + + + + __clear_user (1 samples, 0.16%) + + + + + asm_exc_page_fault (1 samples, 0.16%) + + + + + __mmap (1 samples, 0.16%) + + + + + entry_SYSCALL_64_after_hwframe (1 samples, 0.16%) + + + + + do_syscall_64 (1 samples, 0.16%) + + + + + vm_mmap_pgoff (1 samples, 0.16%) + + + + + do_mmap (1 samples, 0.16%) + + + + + mmap_region (1 samples, 0.16%) + + + + + perf_event_mmap (1 samples, 0.16%) + + + + + perf_iterate_sb (1 samples, 0.16%) + + + + + perf_event_mmap_output (1 samples, 0.16%) + + + + + start_thread (2 samples, 0.33%) + + + + + std::sys::unix::thread::Thread::new::thread_start (2 samples, 0.33%) + + + + + std::sys::unix::stack_overflow::imp::make_handler (2 samples, 0.33%) + + + + + __GI___sigaltstack (1 samples, 0.16%) + + + + + entry_SYSCALL_64_after_hwframe (1 samples, 0.16%) + + + + + do_syscall_64 (1 samples, 0.16%) + + + + + __x64_sys_sigaltstack (1 samples, 0.16%) + + + + + _copy_from_user (1 samples, 0.16%) + + + + + copy_user_generic_unrolled (1 samples, 0.16%) + + + + + clone3 (3 samples, 0.49%) + + + + + entry_SYSCALL_64_after_hwframe (1 samples, 0.16%) + + + + + do_syscall_64 (1 samples, 0.16%) + + + + + __do_sys_clone3 (1 samples, 0.16%) + + + + + kernel_clone (1 samples, 0.16%) + + + + + copy_process (1 samples, 0.16%) + + + + + perf_event_init_task (1 samples, 0.16%) + + + + + inherit_task_group.isra.0 (1 samples, 0.16%) + + + + + inherit_event.constprop.0 (1 samples, 0.16%) + + + + + perf_event_alloc (1 samples, 0.16%) + + + + + perf_try_init_event (1 samples, 0.16%) + + + + + x86_pmu_event_init (1 samples, 0.16%) + + + + + allocate_fake_cpuc (1 samples, 0.16%) + + + + + kmem_cache_alloc_trace (1 samples, 0.16%) + + + + + memset_erms (1 samples, 0.16%) + + + + + irqentry_enter (1 samples, 0.16%) + + + + + srso_alias_return_thunk (1 samples, 0.16%) + + + + + srso_alias_safe_ret (1 samples, 0.16%) + + + + + asm_exc_page_fault (2 samples, 0.33%) + + + + + exc_page_fault (2 samples, 0.33%) + + + + + do_user_addr_fault (1 samples, 0.16%) + + + + + handle_mm_fault (1 samples, 0.16%) + + + + + __handle_mm_fault (1 samples, 0.16%) + + + + + wp_page_copy (1 samples, 0.16%) + + + + + copy_mc_enhanced_fast_string (1 samples, 0.16%) + + + + + _dl_relocate_object (3 samples, 0.49%) + + + + + _dl_receive_error (1 samples, 0.16%) + + + + + version_check_doit (1 samples, 0.16%) + + + + + _dl_check_all_versions (1 samples, 0.16%) + + + + + _dl_check_map_versions (1 samples, 0.16%) + + + + + _dl_name_match_p (1 samples, 0.16%) + + + + + strcmp (1 samples, 0.16%) + + + + + _dl_sysdep_start (5 samples, 0.82%) + + + + + dl_main (5 samples, 0.82%) + + + + + _dl_map_object_deps (1 samples, 0.16%) + + + + + _dl_catch_exception (1 samples, 0.16%) + + + + + openaux (1 samples, 0.16%) + + + + + _dl_map_object (1 samples, 0.16%) + + + + + _dl_map_object_from_fd (1 samples, 0.16%) + + + + + _dl_start (6 samples, 0.98%) + + + + + clap_builder::builder::command::Command::get_matches_from (1 samples, 0.16%) + + + + + clap_builder::builder::command::Command::_do_parse (1 samples, 0.16%) + + + + + clap_builder::parser::parser::Parser::get_matches_with (1 samples, 0.16%) + + + + + clap_builder::parser::parser::Parser::add_defaults (1 samples, 0.16%) + + + + + clap_builder::parser::parser::Parser::react (1 samples, 0.16%) + + + + + clap_builder::parser::parser::Parser::start_custom_arg (1 samples, 0.16%) + + + + + clap_builder::parser::matches::matched_arg::MatchedArg::new_val_group (1 samples, 0.16%) + + + + + alloc::raw_vec::RawVec<T,A>::reserve_for_push (1 samples, 0.16%) + + + + + std::rt::lang_start::_{{closure}} (2 samples, 0.33%) + + + + + std::sys_common::backtrace::__rust_begin_short_backtrace (2 samples, 0.33%) + + + + + s4::main (2 samples, 0.33%) + + + + + <clap_builder::builder::str::Str as core::convert::From<&str>>::from (1 samples, 0.16%) + + + + + asm_exc_page_fault (1 samples, 0.16%) + + + + + exc_page_fault (1 samples, 0.16%) + + + + + do_user_addr_fault (1 samples, 0.16%) + + + + + handle_mm_fault (1 samples, 0.16%) + + + + + __handle_mm_fault (1 samples, 0.16%) + + + + + filemap_map_pages (1 samples, 0.16%) + + + + + next_uptodate_page (1 samples, 0.16%) + + + + + s4 (58 samples, 9.46%) + + s4 + + + _start (9 samples, 1.47%) + + + + + __libc_start_main@@GLIBC_2.34 (3 samples, 0.49%) + + + + + __libc_start_call_main (3 samples, 0.49%) + + + + + main (3 samples, 0.49%) + + + + + std::rt::lang_start_internal (3 samples, 0.49%) + + + + + __poll (1 samples, 0.16%) + + + + + entry_SYSCALL_64_after_hwframe (1 samples, 0.16%) + + + + + do_syscall_64 (1 samples, 0.16%) + + + + + __x64_sys_poll (1 samples, 0.16%) + + + + + do_sys_poll (1 samples, 0.16%) + + + + + tty_poll (1 samples, 0.16%) + + + + + perf-exec (14 samples, 2.28%) + + p.. + + + entry_SYSCALL_64_after_hwframe (14 samples, 2.28%) + + e.. + + + do_syscall_64 (14 samples, 2.28%) + + d.. + + + __x64_sys_execve (14 samples, 2.28%) + + _.. + + + do_execveat_common.isra.0 (14 samples, 2.28%) + + d.. + + + bprm_execve (14 samples, 2.28%) + + b.. + + + load_elf_binary (14 samples, 2.28%) + + l.. + + + begin_new_exec (14 samples, 2.28%) + + b.. + + + perf_event_exec (14 samples, 2.28%) + + p.. + + + x86_pmu_enable_all (14 samples, 2.28%) + + x.. + + + unlink_chunk.constprop.0 (1 samples, 0.16%) + + + + + malloc_consolidate (2 samples, 0.33%) + + + + + alloc::raw_vec::RawVec<T,A>::reserve::do_reserve_and_handle (3 samples, 0.49%) + + + + + alloc::raw_vec::finish_grow (3 samples, 0.49%) + + + + + malloc (3 samples, 0.49%) + + + + + _int_malloc (3 samples, 0.49%) + + + + + asm_exc_page_fault (2 samples, 0.33%) + + + + + exc_page_fault (2 samples, 0.33%) + + + + + do_user_addr_fault (2 samples, 0.33%) + + + + + handle_mm_fault (2 samples, 0.33%) + + + + + __handle_mm_fault (2 samples, 0.33%) + + + + + __alloc_pages (2 samples, 0.33%) + + + + + get_page_from_freelist (2 samples, 0.33%) + + + + + kernel_init_free_pages.part.0 (2 samples, 0.33%) + + + + + clear_page_erms (2 samples, 0.33%) + + + + + __memset_avx512_unaligned_erms (4 samples, 0.65%) + + + + + regex_automata::nfa::thompson::pikevm::ActiveStates::new (8 samples, 1.31%) + + + + + regex_automata::nfa::thompson::pikevm::ActiveStates::reset (8 samples, 1.31%) + + + + + regex_automata::hybrid::dfa::Lazy::set_transition (1 samples, 0.16%) + + + + + <regex_automata::meta::strategy::ReverseInner as regex_automata::meta::strategy::Strategy>::create_cache (10 samples, 1.63%) + + + + + regex_automata::hybrid::dfa::Cache::new (2 samples, 0.33%) + + + + + regex_automata::hybrid::dfa::Lazy::init_cache (2 samples, 0.33%) + + + + + hashbrown::map::HashMap<K,V,S,A>::insert (1 samples, 0.16%) + + + + + unlink_chunk.constprop.0 (3 samples, 0.49%) + + + + + malloc_consolidate (7 samples, 1.14%) + + + + + alloc::raw_vec::RawVec<T,A>::reserve::do_reserve_and_handle (8 samples, 1.31%) + + + + + alloc::raw_vec::finish_grow (8 samples, 1.31%) + + + + + malloc (8 samples, 1.31%) + + + + + _int_malloc (8 samples, 1.31%) + + + + + rmqueue_bulk (1 samples, 0.16%) + + + + + __list_del_entry_valid (1 samples, 0.16%) + + + + + do_user_addr_fault (3 samples, 0.49%) + + + + + handle_mm_fault (3 samples, 0.49%) + + + + + __handle_mm_fault (3 samples, 0.49%) + + + + + __alloc_pages (3 samples, 0.49%) + + + + + get_page_from_freelist (3 samples, 0.49%) + + + + + kernel_init_free_pages.part.0 (2 samples, 0.33%) + + + + + clear_page_erms (2 samples, 0.33%) + + + + + asm_exc_page_fault (6 samples, 0.98%) + + + + + exc_page_fault (6 samples, 0.98%) + + + + + regex_automata::nfa::thompson::pikevm::ActiveStates::new (15 samples, 2.45%) + + re.. + + + regex_automata::nfa::thompson::pikevm::ActiveStates::reset (15 samples, 2.45%) + + re.. + + + __memset_avx512_unaligned_erms (7 samples, 1.14%) + + + + + regex_automata::hybrid::dfa::Lazy::set_transition (1 samples, 0.16%) + + + + + regex_automata::util::pool::inner::Pool<T,F>::get_slow (27 samples, 4.40%) + + regex.. + + + regex_automata::meta::regex::Builder::build_many_from_hir::{{closure}} (27 samples, 4.40%) + + regex.. + + + <regex_automata::meta::strategy::Core as regex_automata::meta::strategy::Strategy>::create_cache (17 samples, 2.77%) + + <r.. + + + regex_automata::hybrid::dfa::Cache::new (2 samples, 0.33%) + + + + + regex_automata::hybrid::dfa::Lazy::init_cache (2 samples, 0.33%) + + + + + hashbrown::map::HashMap<K,V,S,A>::insert (1 samples, 0.16%) + + + + + hashbrown::raw::RawTable<T,A>::insert (1 samples, 0.16%) + + + + + hashbrown::raw::RawTable<T,A>::reserve_rehash (1 samples, 0.16%) + + + + + malloc (1 samples, 0.16%) + + + + + regex_automata::meta::regex::Regex::create_captures (1 samples, 0.16%) + + + + + malloc (1 samples, 0.16%) + + + + + _int_malloc (1 samples, 0.16%) + + + + + regex_automata::meta::regex::Builder::syntax (1 samples, 0.16%) + + + + + regex_automata::meta::regex::Builder::configure (1 samples, 0.16%) + + + + + asm_exc_page_fault (1 samples, 0.16%) + + + + + exc_page_fault (1 samples, 0.16%) + + + + + do_user_addr_fault (1 samples, 0.16%) + + + + + handle_mm_fault (1 samples, 0.16%) + + + + + __handle_mm_fault (1 samples, 0.16%) + + + + + filemap_map_pages (1 samples, 0.16%) + + + + + do_set_pte (1 samples, 0.16%) + + + + + page_add_file_rmap (1 samples, 0.16%) + + + + + regex_syntax::hir::translate::TranslatorI::push (1 samples, 0.16%) + + + + + asm_exc_page_fault (1 samples, 0.16%) + + + + + exc_page_fault (1 samples, 0.16%) + + + + + do_user_addr_fault (1 samples, 0.16%) + + + + + handle_mm_fault (1 samples, 0.16%) + + + + + __handle_mm_fault (1 samples, 0.16%) + + + + + __mem_cgroup_charge (1 samples, 0.16%) + + + + + charge_memcg (1 samples, 0.16%) + + + + + mem_cgroup_charge_statistics.constprop.0 (1 samples, 0.16%) + + + + + alloc::raw_vec::RawVec<T,A>::reserve_for_push (1 samples, 0.16%) + + + + + alloc::raw_vec::finish_grow (1 samples, 0.16%) + + + + + realloc (1 samples, 0.16%) + + + + + regex_syntax::hir::translate::TranslatorI::push (8 samples, 1.31%) + + + + + <regex_syntax::hir::translate::TranslatorI as regex_syntax::ast::visitor::Visitor>::visit_pre (9 samples, 1.47%) + + + + + regex_syntax::hir::translate::TranslatorI::push (2 samples, 0.33%) + + + + + malloc (1 samples, 0.16%) + + + + + _int_malloc (1 samples, 0.16%) + + + + + malloc_consolidate (1 samples, 0.16%) + + + + + alloc::vec::Vec<T,A>::into_boxed_slice (2 samples, 0.33%) + + + + + regex_syntax::hir::Hir::literal (4 samples, 0.65%) + + + + + _int_malloc (2 samples, 0.33%) + + + + + regex_syntax::hir::Hir::into_parts (3 samples, 0.49%) + + + + + malloc (3 samples, 0.49%) + + + + + malloc (1 samples, 0.16%) + + + + + cfree@GLIBC_2.2.5 (3 samples, 0.49%) + + + + + alloc::raw_vec::finish_grow (1 samples, 0.16%) + + + + + malloc (1 samples, 0.16%) + + + + + _int_malloc (1 samples, 0.16%) + + + + + sysmalloc (1 samples, 0.16%) + + + + + __mprotect (1 samples, 0.16%) + + + + + entry_SYSCALL_64_after_hwframe (1 samples, 0.16%) + + + + + do_syscall_64 (1 samples, 0.16%) + + + + + __x64_sys_mprotect (1 samples, 0.16%) + + + + + do_mprotect_pkey (1 samples, 0.16%) + + + + + mprotect_fixup (1 samples, 0.16%) + + + + + perf_event_mmap (1 samples, 0.16%) + + + + + perf_iterate_sb (1 samples, 0.16%) + + + + + perf_iterate_ctx (1 samples, 0.16%) + + + + + perf_event_mmap_output (1 samples, 0.16%) + + + + + perf_output_copy (1 samples, 0.16%) + + + + + memcpy_erms (1 samples, 0.16%) + + + + + alloc::raw_vec::RawVec<T,A>::reserve_for_push (2 samples, 0.33%) + + + + + regex_syntax::hir::Hir::concat (18 samples, 2.94%) + + re.. + + + malloc (2 samples, 0.33%) + + + + + regex_syntax::hir::Properties::class (3 samples, 0.49%) + + + + + regex_syntax::hir::ClassUnicode::literal (1 samples, 0.16%) + + + + + regex_syntax::hir::Hir::class (5 samples, 0.82%) + + + + + cfree@GLIBC_2.2.5 (1 samples, 0.16%) + + + + + _int_free (1 samples, 0.16%) + + + + + regex_syntax::hir::Properties::alternation (2 samples, 0.33%) + + + + + regex_syntax::hir::Hir::into_parts (2 samples, 0.33%) + + + + + malloc (1 samples, 0.16%) + + + + + _int_malloc (1 samples, 0.16%) + + + + + sysmalloc (1 samples, 0.16%) + + + + + __mprotect (1 samples, 0.16%) + + + + + entry_SYSCALL_64_after_hwframe (1 samples, 0.16%) + + + + + do_syscall_64 (1 samples, 0.16%) + + + + + __x64_sys_mprotect (1 samples, 0.16%) + + + + + do_mprotect_pkey (1 samples, 0.16%) + + + + + mprotect_fixup (1 samples, 0.16%) + + + + + perf_event_mmap (1 samples, 0.16%) + + + + + perf_iterate_sb (1 samples, 0.16%) + + + + + regex_syntax::hir::Hir::alternation (8 samples, 1.31%) + + + + + regex_syntax::hir::ClassUnicode::try_case_fold_simple (1 samples, 0.16%) + + + + + <regex_syntax::hir::ClassUnicodeRange as regex_syntax::hir::interval::Interval>::case_fold_simple (1 samples, 0.16%) + + + + + alloc::raw_vec::RawVec<T,A>::reserve_for_push (1 samples, 0.16%) + + + + + alloc::raw_vec::finish_grow (1 samples, 0.16%) + + + + + regex_syntax::hir::ClassUnicode::new (1 samples, 0.16%) + + + + + <alloc::vec::Vec<T> as alloc::vec::spec_from_iter::SpecFromIter<T,alloc::vec::into_iter::IntoIter<T>>>::from_iter (1 samples, 0.16%) + + + + + malloc (1 samples, 0.16%) + + + + + core::str::converts::from_utf8 (1 samples, 0.16%) + + + + + core::ptr::drop_in_place<regex_syntax::hir::translate::HirFrame> (1 samples, 0.16%) + + + + + asm_exc_page_fault (1 samples, 0.16%) + + + + + exc_page_fault (1 samples, 0.16%) + + + + + do_user_addr_fault (1 samples, 0.16%) + + + + + handle_mm_fault (1 samples, 0.16%) + + + + + __handle_mm_fault (1 samples, 0.16%) + + + + + __alloc_pages (1 samples, 0.16%) + + + + + get_page_from_freelist (1 samples, 0.16%) + + + + + kernel_init_free_pages.part.0 (1 samples, 0.16%) + + + + + clear_page_erms (1 samples, 0.16%) + + + + + realloc (4 samples, 0.65%) + + + + + alloc::vec::Vec<T,A>::into_boxed_slice (5 samples, 0.82%) + + + + + alloc::raw_vec::RawVec<T,A>::reserve_for_push (1 samples, 0.16%) + + + + + __memmove_avx512_unaligned_erms (1 samples, 0.16%) + + + + + <regex_syntax::hir::translate::TranslatorI as regex_syntax::ast::visitor::Visitor>::visit_post (64 samples, 10.44%) + + <regex_syntax::.. + + + <regex_syntax::hir::translate::TranslatorI as regex_syntax::ast::visitor::Visitor>::visit_class_set_item_pre (1 samples, 0.16%) + + + + + <regex_syntax::hir::translate::TranslatorI as regex_syntax::ast::visitor::Visitor>::visit_class_set_item_post (2 samples, 0.33%) + + + + + regex_syntax::hir::translate::TranslatorI::push (2 samples, 0.33%) + + + + + regex_syntax::hir::translate::Translator::translate (82 samples, 13.38%) + + regex_syntax::hir::t.. + + + regex_syntax::ast::visitor::visit (82 samples, 13.38%) + + regex_syntax::ast::v.. + + + alloc::raw_vec::RawVec<T,A>::reserve_for_push (1 samples, 0.16%) + + + + + alloc::raw_vec::finish_grow (1 samples, 0.16%) + + + + + malloc (1 samples, 0.16%) + + + + + <regex_syntax::ast::parse::NestLimiter<P> as regex_syntax::ast::visitor::Visitor>::visit_pre (3 samples, 0.49%) + + + + + regex_syntax::ast::visitor::visit (6 samples, 0.98%) + + + + + regex_syntax::ast::parse::ParserI<P>::parse_capture_name (1 samples, 0.16%) + + + + + regex_syntax::ast::parse::ParserI<P>::bump (1 samples, 0.16%) + + + + + regex_syntax::ast::parse::ParserI<P>::char (1 samples, 0.16%) + + + + + core::str::count::char_count_general_case (1 samples, 0.16%) + + + + + regex_syntax::ast::parse::ParserI<P>::push_group (5 samples, 0.82%) + + + + + regex_syntax::ast::parse::ParserI<P>::parse_group (5 samples, 0.82%) + + + + + _int_malloc (2 samples, 0.33%) + + + + + malloc (3 samples, 0.49%) + + + + + regex_syntax::ast::Concat::into_ast (5 samples, 0.82%) + + + + + alloc::raw_vec::finish_grow (1 samples, 0.16%) + + + + + realloc (1 samples, 0.16%) + + + + + alloc::raw_vec::RawVec<T,A>::reserve_for_push (3 samples, 0.49%) + + + + + regex_syntax::ast::parse::ParserI<P>::push_alternate (10 samples, 1.63%) + + + + + regex_syntax::ast::parse::ParserI<P>::pop_group (1 samples, 0.16%) + + + + + regex_syntax::ast::parse::ParserI<P>::parse_uncounted_repetition (1 samples, 0.16%) + + + + + regex_syntax::ast::parse::ParserI<P>::maybe_parse_ascii_class (1 samples, 0.16%) + + + + + regex_syntax::ast::parse::ParserI<P>::bump (1 samples, 0.16%) + + + + + regex_syntax::ast::parse::ParserI<P>::char (1 samples, 0.16%) + + + + + regex_syntax::ast::ClassSetUnion::push (1 samples, 0.16%) + + + + + regex_syntax::ast::parse::ParserI<P>::parse_set_class (5 samples, 0.82%) + + + + + regex_syntax::ast::parse::ParserI<P>::parse_counted_repetition (1 samples, 0.16%) + + + + + regex_syntax::ast::parse::ParserI<P>::char (4 samples, 0.65%) + + + + + regex_syntax::ast::parse::ParserI<P>::bump (1 samples, 0.16%) + + + + + regex_syntax::ast::parse::ParserI<P>::char (1 samples, 0.16%) + + + + + _int_malloc (7 samples, 1.14%) + + + + + malloc (8 samples, 1.31%) + + + + + realloc (1 samples, 0.16%) + + + + + _int_realloc (1 samples, 0.16%) + + + + + malloc (2 samples, 0.33%) + + + + + alloc::raw_vec::finish_grow (4 samples, 0.65%) + + + + + __rdl_alloc (1 samples, 0.16%) + + + + + alloc::raw_vec::RawVec<T,A>::reserve_for_push (5 samples, 0.82%) + + + + + regex_syntax::ast::parse::Parser::parse (61 samples, 9.95%) + + regex_syntax::.. + + + regex_syntax::ast::parse::ParserI<P>::parse_with_comments (61 samples, 9.95%) + + regex_syntax::.. + + + regex_automata::meta::strategy::new (1 samples, 0.16%) + + + + + asm_exc_page_fault (1 samples, 0.16%) + + + + + regex_automata::meta::regex::RegexInfo::new (1 samples, 0.16%) + + + + + regex_syntax::hir::Properties::union (1 samples, 0.16%) + + + + + malloc (1 samples, 0.16%) + + + + + _int_malloc (1 samples, 0.16%) + + + + + __memmove_avx512_unaligned_erms (1 samples, 0.16%) + + + + + unlink_chunk.constprop.0 (3 samples, 0.49%) + + + + + malloc_consolidate (8 samples, 1.31%) + + + + + core::ptr::drop_in_place<regex_syntax::ast::ClassSet> (10 samples, 1.63%) + + + + + <regex_syntax::ast::ClassSet as core::ops::drop::Drop>::drop (10 samples, 1.63%) + + + + + <alloc::vec::Vec<T,A> as alloc::vec::spec_extend::SpecExtend<T,I>>::spec_extend (9 samples, 1.47%) + + + + + alloc::raw_vec::RawVec<T,A>::reserve::do_reserve_and_handle (9 samples, 1.47%) + + + + + alloc::raw_vec::finish_grow (9 samples, 1.47%) + + + + + realloc (9 samples, 1.47%) + + + + + _int_realloc (9 samples, 1.47%) + + + + + _int_malloc (9 samples, 1.47%) + + + + + cfree@GLIBC_2.2.5 (4 samples, 0.65%) + + + + + _int_free (4 samples, 0.65%) + + + + + core::ptr::drop_in_place<regex_syntax::ast::Ast> (15 samples, 2.45%) + + co.. + + + _int_free (7 samples, 1.14%) + + + + + cfree@GLIBC_2.2.5 (9 samples, 1.47%) + + + + + unlink_chunk.constprop.0 (1 samples, 0.16%) + + + + + malloc_consolidate (1 samples, 0.16%) + + + + + alloc::raw_vec::RawVec<T,A>::reserve::do_reserve_and_handle (3 samples, 0.49%) + + + + + alloc::raw_vec::finish_grow (3 samples, 0.49%) + + + + + realloc (3 samples, 0.49%) + + + + + _int_realloc (3 samples, 0.49%) + + + + + _int_malloc (3 samples, 0.49%) + + + + + <alloc::vec::Vec<T,A> as alloc::vec::spec_extend::SpecExtend<T,I>>::spec_extend (5 samples, 0.82%) + + + + + core::ptr::drop_in_place<regex_syntax::ast::Ast> (30 samples, 4.89%) + + core::.. + + + <regex_syntax::ast::Ast as core::ops::drop::Drop>::drop (30 samples, 4.89%) + + <regex.. + + + malloc (1 samples, 0.16%) + + + + + core::ptr::drop_in_place<regex_syntax::hir::HirKind> (1 samples, 0.16%) + + + + + _int_free (6 samples, 0.98%) + + + + + cfree@GLIBC_2.2.5 (7 samples, 1.14%) + + + + + alloc::raw_vec::RawVec<T,A>::reserve::do_reserve_and_handle (1 samples, 0.16%) + + + + + alloc::raw_vec::finish_grow (1 samples, 0.16%) + + + + + realloc (1 samples, 0.16%) + + + + + _int_realloc (1 samples, 0.16%) + + + + + _int_malloc (1 samples, 0.16%) + + + + + malloc_consolidate (1 samples, 0.16%) + + + + + <alloc::vec::Vec<T,A> as alloc::vec::spec_extend::SpecExtend<T,I>>::spec_extend (2 samples, 0.33%) + + + + + regex::builders::Builder::build_one_bytes (189 samples, 30.83%) + + regex::builders::Builder::build_one_bytes + + + regex_automata::meta::regex::Builder::build (187 samples, 30.51%) + + regex_automata::meta::regex::Builder::build + + + <alloc::vec::Vec<T,A> as core::ops::drop::Drop>::drop (12 samples, 1.96%) + + <.. + + + <regex_syntax::hir::Hir as core::ops::drop::Drop>::drop (12 samples, 1.96%) + + <.. + + + once_cell::imp::OnceCell<T>::initialize (190 samples, 31.00%) + + once_cell::imp::OnceCell<T>::initialize + + + once_cell::imp::initialize_or_wait (190 samples, 31.00%) + + once_cell::imp::initialize_or_wait + + + once_cell::imp::OnceCell<T>::initialize::_{{closure}} (190 samples, 31.00%) + + once_cell::imp::OnceCell<T>::initialize::_{{closur.. + + + regex::regex::bytes::Regex::new (190 samples, 31.00%) + + regex::regex::bytes::Regex::new + + + <alloc::vec::Vec<T,A> as alloc::vec::spec_extend::SpecExtend<T,I>>::spec_extend (1 samples, 0.16%) + + + + + <core::iter::adapters::map::Map<I,F> as core::iter::traits::iterator::Iterator>::fold (1 samples, 0.16%) + + + + + __memmove_avx512_unaligned_erms (1 samples, 0.16%) + + + + + s4lib::readers::syslogprocessor::SyslogProcessor::process_stage1_blockzero_analysis (219 samples, 35.73%) + + s4lib::readers::syslogprocessor::SyslogProcessor::process_.. + + + s4lib::readers::syslinereader::SyslineReader::find_sysline_in_block_year (219 samples, 35.73%) + + s4lib::readers::syslinereader::SyslineReader::find_sysline.. + + + s4lib::readers::syslinereader::SyslineReader::parse_datetime_in_line_cached (219 samples, 35.73%) + + s4lib::readers::syslinereader::SyslineReader::parse_dateti.. + + + s4lib::data::datetime::bytes_to_regex_to_datetime (219 samples, 35.73%) + + s4lib::data::datetime::bytes_to_regex_to_datetime + + + <regex_automata::meta::strategy::Core as regex_automata::meta::strategy::Strategy>::search_slots (1 samples, 0.16%) + + + + + regex_automata::hybrid::regex::Regex::try_search (1 samples, 0.16%) + + + + + regex_automata::hybrid::search::find_fwd (1 samples, 0.16%) + + + + + regex_automata::hybrid::dfa::Lazy::cache_start_group (1 samples, 0.16%) + + + + + regex_automata::util::determinize::add_nfa_states (1 samples, 0.16%) + + + + + clone3 (220 samples, 35.89%) + + clone3 + + + start_thread (220 samples, 35.89%) + + start_thread + + + std::sys::unix::thread::Thread::new::thread_start (220 samples, 35.89%) + + std::sys::unix::thread::Thread::new::thread_start + + + core::ops::function::FnOnce::call_once{{vtable.shim}} (220 samples, 35.89%) + + core::ops::function::FnOnce::call_once{{vtable.shim}} + + + std::sys_common::backtrace::__rust_begin_short_backtrace (220 samples, 35.89%) + + std::sys_common::backtrace::__rust_begin_short_backtrace + + + s4::exec_fileprocessor_thread (220 samples, 35.89%) + + s4::exec_fileprocessor_thread + + + crossbeam_channel::channel::Sender<T>::send (1 samples, 0.16%) + + + + + crossbeam_channel::waker::SyncWaker::notify (1 samples, 0.16%) + + + + + std::sys::unix::futex::futex_wake (1 samples, 0.16%) + + + + + syscall (1 samples, 0.16%) + + + + + entry_SYSCALL_64_after_hwframe (1 samples, 0.16%) + + + + + do_syscall_64 (1 samples, 0.16%) + + + + + __x64_sys_futex (1 samples, 0.16%) + + + + + do_futex (1 samples, 0.16%) + + + + + futex_wake (1 samples, 0.16%) + + + + + mark_wake_futex (1 samples, 0.16%) + + + + + __memmove_avx512_unaligned_erms (1 samples, 0.16%) + + + + + std::sys_common::backtrace::__rust_begin_short_backtrace (3 samples, 0.49%) + + + + + s4::exec_fileprocessor_thread (3 samples, 0.49%) + + + + + s4lib::readers::syslogprocessor::SyslogProcessor::process_stage1_blockzero_analysis (3 samples, 0.49%) + + + + + s4lib::readers::syslinereader::SyslineReader::find_sysline_in_block_year (3 samples, 0.49%) + + + + + s4lib::readers::syslinereader::SyslineReader::parse_datetime_in_line_cached (3 samples, 0.49%) + + + + + s4lib::data::datetime::bytes_to_regex_to_datetime (3 samples, 0.49%) + + + + + once_cell::imp::OnceCell<T>::initialize (3 samples, 0.49%) + + + + + once_cell::imp::initialize_or_wait (3 samples, 0.49%) + + + + + once_cell::imp::OnceCell<T>::initialize::_{{closure}} (3 samples, 0.49%) + + + + + regex::regex::bytes::Regex::new (3 samples, 0.49%) + + + + + regex::builders::Builder::build_one_bytes (3 samples, 0.49%) + + + + + regex_automata::meta::regex::Builder::build (3 samples, 0.49%) + + + + + regex_syntax::ast::parse::Parser::parse (3 samples, 0.49%) + + + + + regex_syntax::ast::parse::ParserI<P>::parse_with_comments (3 samples, 0.49%) + + + + + regex_syntax::ast::parse::ParserI<P>::parse_set_class (3 samples, 0.49%) + + + + + regex_syntax::ast::parse::ParserI<P>::pop_class (3 samples, 0.49%) + + + + + std::sys::unix::thread::Thread::new::thread_start (1 samples, 0.16%) + + + + + core::ops::function::FnOnce::call_once{{vtable.shim}} (1 samples, 0.16%) + + + + + std::sys_common::backtrace::__rust_begin_short_backtrace (1 samples, 0.16%) + + + + + s4::exec_fileprocessor_thread (1 samples, 0.16%) + + + + + s4lib::readers::syslogprocessor::SyslogProcessor::process_stage1_blockzero_analysis (1 samples, 0.16%) + + + + + s4lib::readers::syslinereader::SyslineReader::find_sysline_in_block_year (1 samples, 0.16%) + + + + + s4lib::readers::syslinereader::SyslineReader::parse_datetime_in_line_cached (1 samples, 0.16%) + + + + + s4lib::data::datetime::bytes_to_regex_to_datetime (1 samples, 0.16%) + + + + + once_cell::imp::OnceCell<T>::initialize (1 samples, 0.16%) + + + + + once_cell::imp::initialize_or_wait (1 samples, 0.16%) + + + + + once_cell::imp::OnceCell<T>::initialize::_{{closure}} (1 samples, 0.16%) + + + + + regex::regex::bytes::Regex::new (1 samples, 0.16%) + + + + + regex::builders::Builder::build_one_bytes (1 samples, 0.16%) + + + + + regex_automata::meta::regex::Builder::build (1 samples, 0.16%) + + + + + regex_syntax::ast::parse::Parser::parse (1 samples, 0.16%) + + + + + regex_syntax::ast::parse::ParserI<P>::parse_with_comments (1 samples, 0.16%) + + + + + regex_syntax::ast::parse::ParserI<P>::parse_set_class (1 samples, 0.16%) + + + + + regex_syntax::ast::parse::ParserI<P>::parse_set_class_range (1 samples, 0.16%) + + + + + regex_automata::util::prefilter::suffixes (1 samples, 0.16%) + + + + + regex_syntax::hir::literal::Extractor::extract (1 samples, 0.16%) + + + + + regex_syntax::hir::literal::Extractor::extract (1 samples, 0.16%) + + + + + regex_syntax::hir::literal::Extractor::extract (1 samples, 0.16%) + + + + + regex_syntax::hir::literal::Extractor::cross (1 samples, 0.16%) + + + + + malloc (1 samples, 0.16%) + + + + + _int_malloc (1 samples, 0.16%) + + + + + malloc_consolidate (1 samples, 0.16%) + + + + + regex_automata::util::prefilter::prefixes (1 samples, 0.16%) + + + + + regex_syntax::hir::literal::Extractor::extract (1 samples, 0.16%) + + + + + regex_syntax::hir::literal::Extractor::extract (1 samples, 0.16%) + + + + + regex_syntax::hir::literal::Extractor::extract (1 samples, 0.16%) + + + + + regex_syntax::hir::literal::Extractor::cross (1 samples, 0.16%) + + + + + malloc (1 samples, 0.16%) + + + + + _int_malloc (1 samples, 0.16%) + + + + + regex_automata::util::captures::GroupInfo::new (1 samples, 0.16%) + + + + + regex_automata::nfa::thompson::nfa::Inner::add (1 samples, 0.16%) + + + + + alloc::raw_vec::RawVec<T,A>::reserve_for_push (1 samples, 0.16%) + + + + + alloc::raw_vec::finish_grow (1 samples, 0.16%) + + + + + realloc (1 samples, 0.16%) + + + + + _int_realloc (1 samples, 0.16%) + + + + + __memmove_avx512_unaligned_erms (1 samples, 0.16%) + + + + + malloc (1 samples, 0.16%) + + + + + _int_malloc (1 samples, 0.16%) + + + + + realloc (1 samples, 0.16%) + + + + + _int_realloc (1 samples, 0.16%) + + + + + _int_malloc (1 samples, 0.16%) + + + + + regex_automata::nfa::thompson::compiler::Compiler::build_many_from_hir (5 samples, 0.82%) + + + + + regex_automata::nfa::thompson::builder::Builder::build (5 samples, 0.82%) + + + + + alloc::raw_vec::RawVec<T,A>::reserve_for_push (2 samples, 0.33%) + + + + + alloc::raw_vec::finish_grow (2 samples, 0.33%) + + + + + malloc (1 samples, 0.16%) + + + + + _int_malloc (1 samples, 0.16%) + + + + + s4lib::readers::syslogprocessor::SyslogProcessor::process_stage1_blockzero_analysis (8 samples, 1.31%) + + + + + s4lib::readers::syslinereader::SyslineReader::find_sysline_in_block_year (8 samples, 1.31%) + + + + + s4lib::readers::syslinereader::SyslineReader::parse_datetime_in_line_cached (8 samples, 1.31%) + + + + + s4lib::data::datetime::bytes_to_regex_to_datetime (8 samples, 1.31%) + + + + + once_cell::imp::OnceCell<T>::initialize (8 samples, 1.31%) + + + + + once_cell::imp::initialize_or_wait (8 samples, 1.31%) + + + + + once_cell::imp::OnceCell<T>::initialize::_{{closure}} (8 samples, 1.31%) + + + + + regex::regex::bytes::Regex::new (8 samples, 1.31%) + + + + + regex::builders::Builder::build_one_bytes (8 samples, 1.31%) + + + + + regex_automata::meta::regex::Builder::build (8 samples, 1.31%) + + + + + regex_automata::meta::strategy::new (8 samples, 1.31%) + + + + + regex_automata::meta::wrappers::PikeVM::new (1 samples, 0.16%) + + + + + regex_automata::nfa::thompson::compiler::Compiler::new (1 samples, 0.16%) + + + + + regex_automata::nfa::thompson::range_trie::RangeTrie::new (1 samples, 0.16%) + + + + + regex_automata::nfa::thompson::range_trie::RangeTrie::add_empty (1 samples, 0.16%) + + + + + alloc::raw_vec::RawVec<T,A>::reserve_for_push (1 samples, 0.16%) + + + + + asm_exc_page_fault (1 samples, 0.16%) + + + + + regex_automata::nfa::thompson::literal_trie::LiteralTrie::add (8 samples, 1.31%) + + + + + _int_free (2 samples, 0.33%) + + + + + cfree@GLIBC_2.2.5 (4 samples, 0.65%) + + + + + regex_automata::nfa::thompson::compiler::Compiler::c_cap (13 samples, 2.12%) + + r.. + + + regex_automata::nfa::thompson::compiler::Compiler::c (13 samples, 2.12%) + + r.. + + + regex_automata::nfa::thompson::compiler::Compiler::build_many_from_hir (14 samples, 2.28%) + + r.. + + + <core::iter::adapters::map::Map<I,F> as core::iter::traits::iterator::Iterator>::next (14 samples, 2.28%) + + <.. + + + regex_automata::nfa::thompson::compiler::Compiler::c_cap (14 samples, 2.28%) + + r.. + + + regex_automata::nfa::thompson::compiler::Compiler::c (14 samples, 2.28%) + + r.. + + + regex_automata::nfa::thompson::compiler::Compiler::c (1 samples, 0.16%) + + + + + regex_automata::nfa::thompson::builder::Builder::add (1 samples, 0.16%) + + + + + regex_automata::dfa::onepass::InternalBuilder::stack_push (1 samples, 0.16%) + + + + + regex_automata::dfa::onepass::InternalBuilder::add_dfa_state_for_nfa_state (3 samples, 0.49%) + + + + + regex_automata::meta::wrappers::OnePass::new (5 samples, 0.82%) + + + + + regex_automata::dfa::onepass::Builder::build_from_nfa (5 samples, 0.82%) + + + + + malloc (1 samples, 0.16%) + + + + + _int_malloc (1 samples, 0.16%) + + + + + _int_realloc (1 samples, 0.16%) + + + + + __memmove_avx512_unaligned_erms (1 samples, 0.16%) + + + + + realloc (3 samples, 0.49%) + + + + + alloc::raw_vec::finish_grow (4 samples, 0.65%) + + + + + malloc (1 samples, 0.16%) + + + + + alloc::raw_vec::RawVec<T,A>::reserve_for_push (5 samples, 0.82%) + + + + + alloc::raw_vec::finish_grow (2 samples, 0.33%) + + + + + malloc (2 samples, 0.33%) + + + + + alloc::raw_vec::RawVec<T,A>::reserve::do_reserve_and_handle (3 samples, 0.49%) + + + + + __memmove_avx512_unaligned_erms (1 samples, 0.16%) + + + + + regex_syntax::hir::literal::Seq::optimize_by_preference (15 samples, 2.45%) + + re.. + + + regex_syntax::hir::literal::PreferenceTrie::minimize (15 samples, 2.45%) + + re.. + + + alloc::vec::Vec<T,A>::retain_mut (15 samples, 2.45%) + + al.. + + + regex_syntax::hir::literal::PreferenceTrie::insert (15 samples, 2.45%) + + re.. + + + regex_syntax::hir::literal::Extractor::extract (1 samples, 0.16%) + + + + + regex_syntax::hir::literal::Extractor::extract (1 samples, 0.16%) + + + + + regex_syntax::hir::literal::Extractor::union (1 samples, 0.16%) + + + + + __memcmp_evex_movbe (1 samples, 0.16%) + + + + + regex_syntax::hir::Hir::concat (1 samples, 0.16%) + + + + + regex_syntax::hir::Hir::into_parts (1 samples, 0.16%) + + + + + malloc (1 samples, 0.16%) + + + + + regex_syntax::hir::Hir::into_parts (3 samples, 0.49%) + + + + + regex_syntax::hir::Hir::alternation (4 samples, 0.65%) + + + + + s4lib::readers::syslinereader::SyslineReader::parse_datetime_in_line_cached (41 samples, 6.69%) + + s4lib::re.. + + + s4lib::data::datetime::bytes_to_regex_to_datetime (41 samples, 6.69%) + + s4lib::da.. + + + once_cell::imp::OnceCell<T>::initialize (41 samples, 6.69%) + + once_cell.. + + + once_cell::imp::initialize_or_wait (41 samples, 6.69%) + + once_cell.. + + + once_cell::imp::OnceCell<T>::initialize::_{{closure}} (41 samples, 6.69%) + + once_cell.. + + + regex::regex::bytes::Regex::new (41 samples, 6.69%) + + regex::re.. + + + regex::builders::Builder::build_one_bytes (41 samples, 6.69%) + + regex::bu.. + + + regex_automata::meta::regex::Builder::build (41 samples, 6.69%) + + regex_aut.. + + + regex_automata::meta::strategy::new (41 samples, 6.69%) + + regex_aut.. + + + regex_automata::meta::reverse_inner::extract (22 samples, 3.59%) + + rege.. + + + regex_automata::meta::reverse_inner::flatten (5 samples, 0.82%) + + + + + <alloc::vec::Vec<T> as alloc::vec::spec_from_iter::SpecFromIter<T,I>>::from_iter (1 samples, 0.16%) + + + + + regex_automata::meta::reverse_inner::flatten (1 samples, 0.16%) + + + + + regex_syntax::hir::Properties::literal (1 samples, 0.16%) + + + + + malloc (1 samples, 0.16%) + + + + + alloc::raw_vec::RawVec<T,A>::reserve_for_push (1 samples, 0.16%) + + + + + alloc::raw_vec::finish_grow (1 samples, 0.16%) + + + + + regex_automata::util::captures::GroupInfoInner::add_first_group (2 samples, 0.33%) + + + + + regex_automata::util::captures::GroupInfo::new (3 samples, 0.49%) + + + + + alloc::raw_vec::RawVec<T,A>::reserve_for_push (1 samples, 0.16%) + + + + + regex_automata::nfa::thompson::compiler::Compiler::build_many_from_hir (4 samples, 0.65%) + + + + + regex_automata::nfa::thompson::builder::Builder::build (4 samples, 0.65%) + + + + + regex_automata::nfa::thompson::nfa::Inner::into_nfa (1 samples, 0.16%) + + + + + regex_automata::meta::reverse_inner::flatten (1 samples, 0.16%) + + + + + <alloc::vec::Vec<T> as alloc::vec::spec_from_iter::SpecFromIter<T,I>>::from_iter (1 samples, 0.16%) + + + + + <regex_syntax::hir::literal::Literal as core::convert::AsRef<[u8]>>::as_ref (1 samples, 0.16%) + + + + + s4lib::readers::syslinereader::SyslineReader::find_sysline_in_block_year (8 samples, 1.31%) + + + + + s4lib::readers::syslinereader::SyslineReader::parse_datetime_in_line_cached (8 samples, 1.31%) + + + + + s4lib::data::datetime::bytes_to_regex_to_datetime (8 samples, 1.31%) + + + + + once_cell::imp::OnceCell<T>::initialize (8 samples, 1.31%) + + + + + once_cell::imp::initialize_or_wait (8 samples, 1.31%) + + + + + once_cell::imp::OnceCell<T>::initialize::_{{closure}} (8 samples, 1.31%) + + + + + regex::regex::bytes::Regex::new (8 samples, 1.31%) + + + + + regex::builders::Builder::build_one_bytes (8 samples, 1.31%) + + + + + regex_automata::meta::regex::Builder::build (8 samples, 1.31%) + + + + + regex_automata::meta::strategy::new (8 samples, 1.31%) + + + + + regex_automata::meta::reverse_inner::extract (4 samples, 0.65%) + + + + + <regex_syntax::hir::Hir as core::ops::drop::Drop>::drop (2 samples, 0.33%) + + + + + cfree@GLIBC_2.2.5 (2 samples, 0.33%) + + + + + _int_free (2 samples, 0.33%) + + + + + s4lib::readers::blockreader::BlockReader::new (1 samples, 0.16%) + + + + + std::fs::OpenOptions::_open (1 samples, 0.16%) + + + + + core::ffi::c_str::CStr::from_bytes_with_nul (1 samples, 0.16%) + + + + + asm_exc_page_fault (1 samples, 0.16%) + + + + + exc_page_fault (1 samples, 0.16%) + + + + + do_user_addr_fault (1 samples, 0.16%) + + + + + handle_mm_fault (1 samples, 0.16%) + + + + + __handle_mm_fault (1 samples, 0.16%) + + + + + __cgroup_throttle_swaprate (1 samples, 0.16%) + + + + + regex_automata::nfa::thompson::builder::Builder::add (4 samples, 0.65%) + + + + + cfree@GLIBC_2.2.5 (1 samples, 0.16%) + + + + + _int_free (1 samples, 0.16%) + + + + + alloc::raw_vec::finish_grow (2 samples, 0.33%) + + + + + malloc (2 samples, 0.33%) + + + + + alloc::raw_vec::RawVec<T,A>::reserve_for_push (3 samples, 0.49%) + + + + + regex_automata::nfa::thompson::literal_trie::LiteralTrie::compile (19 samples, 3.10%) + + reg.. + + + _int_malloc (10 samples, 1.63%) + + + + + malloc (12 samples, 1.96%) + + m.. + + + alloc::raw_vec::finish_grow (13 samples, 2.12%) + + a.. + + + alloc::raw_vec::RawVec<T,A>::reserve_for_push (15 samples, 2.45%) + + al.. + + + _int_free (1 samples, 0.16%) + + + + + realloc (2 samples, 0.33%) + + + + + _int_realloc (2 samples, 0.33%) + + + + + __memmove_avx512_unaligned_erms (1 samples, 0.16%) + + + + + _int_malloc (3 samples, 0.49%) + + + + + malloc (4 samples, 0.65%) + + + + + regex_automata::nfa::thompson::literal_trie::LiteralTrie::add (22 samples, 3.59%) + + rege.. + + + alloc::raw_vec::RawVec<T,A>::reserve::do_reserve_and_handle (7 samples, 1.14%) + + + + + alloc::raw_vec::finish_grow (7 samples, 1.14%) + + + + + __rdl_alloc (1 samples, 0.16%) + + + + + regex_automata::nfa::thompson::compiler::Compiler::patch (1 samples, 0.16%) + + + + + regex_automata::nfa::thompson::compiler::Compiler::c (1 samples, 0.16%) + + + + + regex_automata::nfa::thompson::compiler::Compiler::c_alt_iter (3 samples, 0.49%) + + + + + regex_automata::nfa::thompson::builder::Builder::add (1 samples, 0.16%) + + + + + malloc_consolidate (1 samples, 0.16%) + + + + + unlink_chunk.constprop.0 (1 samples, 0.16%) + + + + + regex_automata::nfa::thompson::compiler::Compiler::c_cap (48 samples, 7.83%) + + regex_autom.. + + + regex_automata::nfa::thompson::compiler::Compiler::c (48 samples, 7.83%) + + regex_autom.. + + + cfree@GLIBC_2.2.5 (4 samples, 0.65%) + + + + + _int_free (4 samples, 0.65%) + + + + + regex_automata::nfa::thompson::compiler::Compiler::build_many_from_hir (49 samples, 7.99%) + + regex_autom.. + + + <core::iter::adapters::map::Map<I,F> as core::iter::traits::iterator::Iterator>::next (49 samples, 7.99%) + + <core::iter.. + + + regex_automata::nfa::thompson::compiler::Compiler::c_cap (49 samples, 7.99%) + + regex_autom.. + + + regex_automata::nfa::thompson::compiler::Compiler::c (49 samples, 7.99%) + + regex_autom.. + + + regex_automata::nfa::thompson::compiler::Compiler::c (1 samples, 0.16%) + + + + + regex_automata::nfa::thompson::literal_trie::LiteralTrie::add (1 samples, 0.16%) + + + + + alloc::raw_vec::RawVec<T,A>::reserve_for_push (1 samples, 0.16%) + + + + + alloc::raw_vec::finish_grow (1 samples, 0.16%) + + + + + realloc (1 samples, 0.16%) + + + + + _int_realloc (1 samples, 0.16%) + + + + + _int_malloc (1 samples, 0.16%) + + + + + malloc_consolidate (1 samples, 0.16%) + + + + + unlink_chunk.constprop.0 (1 samples, 0.16%) + + + + + alloc::raw_vec::RawVec<T,A>::reserve_for_push (1 samples, 0.16%) + + + + + alloc::raw_vec::finish_grow (1 samples, 0.16%) + + + + + realloc (1 samples, 0.16%) + + + + + _int_realloc (1 samples, 0.16%) + + + + + _int_malloc (1 samples, 0.16%) + + + + + malloc_consolidate (1 samples, 0.16%) + + + + + regex_syntax::hir::literal::Seq::optimize_by_preference (3 samples, 0.49%) + + + + + regex_syntax::hir::literal::PreferenceTrie::minimize (3 samples, 0.49%) + + + + + alloc::vec::Vec<T,A>::retain_mut (3 samples, 0.49%) + + + + + regex_syntax::hir::literal::PreferenceTrie::insert (3 samples, 0.49%) + + + + + alloc::raw_vec::RawVec<T,A>::reserve::do_reserve_and_handle (2 samples, 0.33%) + + + + + alloc::raw_vec::finish_grow (2 samples, 0.33%) + + + + + realloc (2 samples, 0.33%) + + + + + _int_realloc (2 samples, 0.33%) + + + + + _int_malloc (2 samples, 0.33%) + + + + + regex_syntax::hir::literal::Extractor::union (1 samples, 0.16%) + + + + + <alloc::vec::Vec<T,A> as alloc::vec::spec_extend::SpecExtend<T,I>>::spec_extend (1 samples, 0.16%) + + + + + alloc::raw_vec::RawVec<T,A>::reserve::do_reserve_and_handle (1 samples, 0.16%) + + + + + alloc::raw_vec::finish_grow (1 samples, 0.16%) + + + + + realloc (1 samples, 0.16%) + + + + + _int_realloc (1 samples, 0.16%) + + + + + _int_malloc (1 samples, 0.16%) + + + + + malloc_consolidate (1 samples, 0.16%) + + + + + regex_syntax::hir::literal::Extractor::cross (1 samples, 0.16%) + + + + + malloc (1 samples, 0.16%) + + + + + _int_malloc (1 samples, 0.16%) + + + + + regex_syntax::hir::literal::Extractor::extract (4 samples, 0.65%) + + + + + regex_syntax::hir::literal::Extractor::extract (3 samples, 0.49%) + + + + + malloc (2 samples, 0.33%) + + + + + _int_malloc (2 samples, 0.33%) + + + + + regex_automata::util::prefilter::Choice::new (1 samples, 0.16%) + + + + + regex_automata::util::prefilter::memmem::Memmem::new (1 samples, 0.16%) + + + + + regex_automata::meta::reverse_inner::flatten (1 samples, 0.16%) + + + + + <alloc::vec::Vec<T> as alloc::vec::spec_from_iter::SpecFromIter<T,I>>::from_iter (1 samples, 0.16%) + + + + + regex_automata::meta::reverse_inner::flatten (1 samples, 0.16%) + + + + + regex_syntax::hir::Hir::concat (1 samples, 0.16%) + + + + + cfree@GLIBC_2.2.5 (1 samples, 0.16%) + + + + + s4lib::data::datetime::bytes_to_regex_to_datetime (59 samples, 9.62%) + + s4lib::data::d.. + + + once_cell::imp::OnceCell<T>::initialize (59 samples, 9.62%) + + once_cell::imp.. + + + once_cell::imp::initialize_or_wait (59 samples, 9.62%) + + once_cell::imp.. + + + once_cell::imp::OnceCell<T>::initialize::_{{closure}} (59 samples, 9.62%) + + once_cell::imp.. + + + regex::regex::bytes::Regex::new (59 samples, 9.62%) + + regex::regex::.. + + + regex::builders::Builder::build_one_bytes (59 samples, 9.62%) + + regex::builder.. + + + regex_automata::meta::regex::Builder::build (59 samples, 9.62%) + + regex_automata.. + + + regex_automata::meta::strategy::new (59 samples, 9.62%) + + regex_automata.. + + + regex_automata::meta::reverse_inner::extract (10 samples, 1.63%) + + + + + <regex_syntax::hir::Hir as core::ops::drop::Drop>::drop (1 samples, 0.16%) + + + + + <alloc::vec::Vec<T,A> as alloc::vec::spec_extend::SpecExtend<T,I>>::spec_extend (1 samples, 0.16%) + + + + + alloc::raw_vec::RawVec<T,A>::reserve::do_reserve_and_handle (1 samples, 0.16%) + + + + + alloc::raw_vec::finish_grow (1 samples, 0.16%) + + + + + realloc (1 samples, 0.16%) + + + + + _int_realloc (1 samples, 0.16%) + + + + + _int_malloc (1 samples, 0.16%) + + + + + malloc_consolidate (1 samples, 0.16%) + + + + + regex_syntax::ast::parse::ParserI<P>::push_class_open (1 samples, 0.16%) + + + + + alloc::raw_vec::RawVec<T,A>::reserve_for_push (1 samples, 0.16%) + + + + + alloc::raw_vec::finish_grow (1 samples, 0.16%) + + + + + malloc (1 samples, 0.16%) + + + + + _int_malloc (1 samples, 0.16%) + + + + + unlink_chunk.constprop.0 (1 samples, 0.16%) + + + + + regex_syntax::ast::parse::ParserI<P>::pop_class (1 samples, 0.16%) + + + + + regex_syntax::ast::parse::ParserI<P>::pop_class_op (1 samples, 0.16%) + + + + + __memmove_avx512_unaligned_erms (1 samples, 0.16%) + + + + + regex_syntax::ast::parse::Parser::parse (4 samples, 0.65%) + + + + + regex_syntax::ast::parse::ParserI<P>::parse_with_comments (4 samples, 0.65%) + + + + + regex_syntax::ast::parse::ParserI<P>::parse_set_class (4 samples, 0.65%) + + + + + regex_syntax::ast::parse::ParserI<P>::parse_set_class_range (2 samples, 0.33%) + + + + + regex_syntax::ast::parse::ParserI<P>::parse_escape (2 samples, 0.33%) + + + + + regex_syntax::hir::literal::Extractor::union (1 samples, 0.16%) + + + + + __memcmp_evex_movbe (1 samples, 0.16%) + + + + + regex_automata::util::prefilter::suffixes (2 samples, 0.33%) + + + + + regex_syntax::hir::literal::Extractor::extract (2 samples, 0.33%) + + + + + regex_syntax::hir::literal::Extractor::extract (2 samples, 0.33%) + + + + + regex_syntax::hir::literal::Extractor::extract (1 samples, 0.16%) + + + + + regex_syntax::hir::literal::Extractor::cross (1 samples, 0.16%) + + + + + alloc::raw_vec::RawVec<T,A>::reserve_for_push (1 samples, 0.16%) + + + + + alloc::raw_vec::finish_grow (1 samples, 0.16%) + + + + + realloc (1 samples, 0.16%) + + + + + _int_realloc (1 samples, 0.16%) + + + + + _int_malloc (1 samples, 0.16%) + + + + + regex_syntax::hir::literal::Seq::optimize_by_preference (2 samples, 0.33%) + + + + + regex_syntax::hir::literal::PreferenceTrie::minimize (2 samples, 0.33%) + + + + + alloc::vec::Vec<T,A>::retain_mut (2 samples, 0.33%) + + + + + regex_syntax::hir::literal::PreferenceTrie::insert (2 samples, 0.33%) + + + + + regex_syntax::hir::literal::Extractor::union (1 samples, 0.16%) + + + + + __memcmp_evex_movbe (1 samples, 0.16%) + + + + + regex_syntax::hir::literal::Extractor::extract (2 samples, 0.33%) + + + + + regex_syntax::hir::literal::Extractor::extract (1 samples, 0.16%) + + + + + regex_syntax::hir::literal::Extractor::cross (1 samples, 0.16%) + + + + + cfree@GLIBC_2.2.5 (1 samples, 0.16%) + + + + + _int_free (1 samples, 0.16%) + + + + + regex_automata::util::prefilter::prefixes (5 samples, 0.82%) + + + + + regex_syntax::hir::literal::Extractor::extract (3 samples, 0.49%) + + + + + regex_syntax::hir::literal::Extractor::cross (1 samples, 0.16%) + + + + + regex_automata::nfa::thompson::nfa::Inner::remap (3 samples, 0.49%) + + + + + asm_exc_page_fault (1 samples, 0.16%) + + + + + exc_page_fault (1 samples, 0.16%) + + + + + do_user_addr_fault (1 samples, 0.16%) + + + + + handle_mm_fault (1 samples, 0.16%) + + + + + __handle_mm_fault (1 samples, 0.16%) + + + + + lru_cache_add (1 samples, 0.16%) + + + + + __pagevec_lru_add (1 samples, 0.16%) + + + + + release_pages (1 samples, 0.16%) + + + + + regex_automata::nfa::thompson::nfa::Inner::add (11 samples, 1.79%) + + r.. + + + _int_malloc (1 samples, 0.16%) + + + + + malloc (2 samples, 0.33%) + + + + + __memmove_avx512_unaligned_erms (1 samples, 0.16%) + + + + + regex_automata::nfa::thompson::compiler::Compiler::build_many_from_hir (22 samples, 3.59%) + + rege.. + + + regex_automata::nfa::thompson::builder::Builder::build (22 samples, 3.59%) + + rege.. + + + regex_automata::meta::wrappers::OnePass::new (1 samples, 0.16%) + + + + + regex_automata::meta::wrappers::BoundedBacktracker::new (1 samples, 0.16%) + + + + + regex_automata::nfa::thompson::compiler::Compiler::new (1 samples, 0.16%) + + + + + __memmove_avx512_unaligned_erms (1 samples, 0.16%) + + + + + malloc_consolidate (1 samples, 0.16%) + + + + + malloc (2 samples, 0.33%) + + + + + _int_malloc (2 samples, 0.33%) + + + + + cfree@GLIBC_2.2.5 (2 samples, 0.33%) + + + + + _int_free (2 samples, 0.33%) + + + + + malloc_consolidate (2 samples, 0.33%) + + + + + core::ptr::drop_in_place<core::cell::RefCell<regex_automata::nfa::thompson::compiler::Utf8State>> (5 samples, 0.82%) + + + + + unlink_chunk.constprop.0 (1 samples, 0.16%) + + + + + malloc_consolidate (2 samples, 0.33%) + + + + + _int_free (6 samples, 0.98%) + + + + + cfree@GLIBC_2.2.5 (7 samples, 1.14%) + + + + + core::ptr::drop_in_place<regex_automata::nfa::thompson::compiler::Compiler> (14 samples, 2.28%) + + c.. + + + s4::exec_fileprocessor_thread (52 samples, 8.48%) + + s4::exec_fil.. + + + s4lib::readers::syslogprocessor::SyslogProcessor::process_stage1_blockzero_analysis (52 samples, 8.48%) + + s4lib::reade.. + + + s4lib::readers::syslinereader::SyslineReader::find_sysline_in_block_year (52 samples, 8.48%) + + s4lib::reade.. + + + s4lib::readers::syslinereader::SyslineReader::parse_datetime_in_line_cached (52 samples, 8.48%) + + s4lib::reade.. + + + s4lib::data::datetime::bytes_to_regex_to_datetime (52 samples, 8.48%) + + s4lib::data:.. + + + once_cell::imp::OnceCell<T>::initialize (52 samples, 8.48%) + + once_cell::i.. + + + once_cell::imp::initialize_or_wait (52 samples, 8.48%) + + once_cell::i.. + + + once_cell::imp::OnceCell<T>::initialize::_{{closure}} (52 samples, 8.48%) + + once_cell::i.. + + + regex::regex::bytes::Regex::new (52 samples, 8.48%) + + regex::regex.. + + + regex::builders::Builder::build_one_bytes (52 samples, 8.48%) + + regex::build.. + + + regex_automata::meta::regex::Builder::build (52 samples, 8.48%) + + regex_automa.. + + + regex_automata::meta::strategy::new (48 samples, 7.83%) + + regex_autom.. + + + cfree@GLIBC_2.2.5 (1 samples, 0.16%) + + + + + _int_free (1 samples, 0.16%) + + + + + malloc_consolidate (1 samples, 0.16%) + + + + + unlink_chunk.constprop.0 (1 samples, 0.16%) + + + + + regex_automata::util::prefilter::Prefilter::new (1 samples, 0.16%) + + + + + regex_automata::util::prefilter::Choice::new (1 samples, 0.16%) + + + + + regex_automata::util::prefilter::teddy::Teddy::new (1 samples, 0.16%) + + + + + aho_corasick::nfa::noncontiguous::Builder::build (1 samples, 0.16%) + + + + + aho_corasick::nfa::noncontiguous::Compiler::densify (1 samples, 0.16%) + + + + + regex_automata::meta::wrappers::Hybrid::new (2 samples, 0.33%) + + + + + regex_automata::hybrid::dfa::Builder::build_from_nfa (2 samples, 0.33%) + + + + + aho_corasick::packed::teddy::builder::x86_64::SlimAVX2<3_usize>::new (1 samples, 0.16%) + + + + + aho_corasick::packed::teddy::builder::x86_64::SlimAVX2<3_usize>::new_unchecked (1 samples, 0.16%) + + + + + aho_corasick::packed::teddy::generic::Teddy<_>::new (1 samples, 0.16%) + + + + + alloc::raw_vec::RawVec<T,A>::reserve_for_push (1 samples, 0.16%) + + + + + alloc::raw_vec::finish_grow (1 samples, 0.16%) + + + + + aho_corasick::packed::pattern::Pattern::low_nybbles (1 samples, 0.16%) + + + + + __libc_calloc (1 samples, 0.16%) + + + + + _int_malloc (1 samples, 0.16%) + + + + + aho_corasick::packed::api::Builder::build (3 samples, 0.49%) + + + + + aho_corasick::packed::teddy::builder::Builder::build (3 samples, 0.49%) + + + + + aho_corasick::packed::teddy::builder::x86_64::FatAVX2<3_usize>::new (2 samples, 0.33%) + + + + + aho_corasick::packed::teddy::builder::x86_64::FatAVX2<3_usize>::new_unchecked (2 samples, 0.33%) + + + + + aho_corasick::packed::teddy::generic::Teddy<_>::new (2 samples, 0.33%) + + + + + __memcmp_evex_movbe (1 samples, 0.16%) + + + + + alloc::raw_vec::RawVec<T,A>::reserve_for_push (1 samples, 0.16%) + + + + + alloc::raw_vec::finish_grow (1 samples, 0.16%) + + + + + realloc (1 samples, 0.16%) + + + + + _int_realloc (1 samples, 0.16%) + + + + + __memmove_avx512_unaligned_erms (1 samples, 0.16%) + + + + + aho_corasick::nfa::noncontiguous::NFA::add_transition (2 samples, 0.33%) + + + + + aho_corasick::nfa::noncontiguous::Compiler::shuffle (3 samples, 0.49%) + + + + + aho_corasick::util::remapper::Remapper::remap (3 samples, 0.49%) + + + + + <aho_corasick::nfa::noncontiguous::NFA as aho_corasick::util::remapper::Remappable>::remap (3 samples, 0.49%) + + + + + aho_corasick::nfa::noncontiguous::Compiler::set_anchored_start_state (1 samples, 0.16%) + + + + + aho_corasick::nfa::noncontiguous::Compiler::init_unanchored_start_state (1 samples, 0.16%) + + + + + aho_corasick::nfa::noncontiguous::NFA::init_full_state (1 samples, 0.16%) + + + + + alloc::raw_vec::RawVec<T,A>::reserve_for_push (1 samples, 0.16%) + + + + + alloc::raw_vec::finish_grow (1 samples, 0.16%) + + + + + realloc (1 samples, 0.16%) + + + + + aho_corasick::nfa::noncontiguous::Compiler::fill_failure_transitions (1 samples, 0.16%) + + + + + alloc::raw_vec::RawVec<T,A>::reserve::do_reserve_and_handle (1 samples, 0.16%) + + + + + alloc::raw_vec::finish_grow (1 samples, 0.16%) + + + + + realloc (1 samples, 0.16%) + + + + + _int_realloc (1 samples, 0.16%) + + + + + _int_malloc (1 samples, 0.16%) + + + + + sysmalloc (1 samples, 0.16%) + + + + + asm_exc_page_fault (1 samples, 0.16%) + + + + + aho_corasick::nfa::noncontiguous::Compiler::densify (2 samples, 0.33%) + + + + + aho_corasick::nfa::noncontiguous::Compiler::add_dead_state_loop (1 samples, 0.16%) + + + + + aho_corasick::nfa::noncontiguous::NFA::init_full_state (1 samples, 0.16%) + + + + + regex_automata::util::prefilter::teddy::Teddy::new (16 samples, 2.61%) + + re.. + + + aho_corasick::nfa::noncontiguous::Builder::build (13 samples, 2.12%) + + a.. + + + regex_automata::meta::strategy::new (20 samples, 3.26%) + + reg.. + + + regex_automata::meta::reverse_inner::extract (17 samples, 2.77%) + + re.. + + + regex_automata::util::prefilter::Choice::new (17 samples, 2.77%) + + re.. + + + regex_automata::util::prefilter::aho_corasick::AhoCorasick::new (1 samples, 0.16%) + + + + + aho_corasick::ahocorasick::AhoCorasickBuilder::build (1 samples, 0.16%) + + + + + aho_corasick::nfa::noncontiguous::Builder::build (1 samples, 0.16%) + + + + + aho_corasick::nfa::noncontiguous::Compiler::densify (1 samples, 0.16%) + + + + + regex_automata::nfa::thompson::compiler::Utf8Compiler::add (1 samples, 0.16%) + + + + + regex_automata::nfa::thompson::compiler::Utf8Compiler::compile_from (1 samples, 0.16%) + + + + + alloc::raw_vec::RawVec<T,A>::reserve_for_push (1 samples, 0.16%) + + + + + alloc::raw_vec::finish_grow (1 samples, 0.16%) + + + + + realloc (1 samples, 0.16%) + + + + + _int_realloc (1 samples, 0.16%) + + + + + _int_free (1 samples, 0.16%) + + + + + malloc (1 samples, 0.16%) + + + + + _int_malloc (1 samples, 0.16%) + + + + + __alloc_pages (1 samples, 0.16%) + + + + + get_page_from_freelist (1 samples, 0.16%) + + + + + kernel_init_free_pages.part.0 (1 samples, 0.16%) + + + + + clear_page_erms (1 samples, 0.16%) + + + + + exc_page_fault (3 samples, 0.49%) + + + + + do_user_addr_fault (3 samples, 0.49%) + + + + + handle_mm_fault (3 samples, 0.49%) + + + + + __handle_mm_fault (3 samples, 0.49%) + + + + + asm_exc_page_fault (4 samples, 0.65%) + + + + + __memmove_avx512_unaligned_erms (1 samples, 0.16%) + + + + + regex_automata::nfa::thompson::compiler::Utf8Compiler::new (13 samples, 2.12%) + + r.. + + + regex_automata::nfa::thompson::map::Utf8BoundedMap::clear (13 samples, 2.12%) + + r.. + + + <T as alloc::vec::spec_from_elem::SpecFromElem>::from_elem (13 samples, 2.12%) + + <.. + + + alloc::vec::Vec<T,A>::extend_with (12 samples, 1.96%) + + a.. + + + regex_automata::nfa::thompson::builder::Builder::add (1 samples, 0.16%) + + + + + regex_automata::nfa::thompson::compiler::Compiler::c (2 samples, 0.33%) + + + + + regex_automata::nfa::thompson::compiler::Compiler::build_many_from_hir (17 samples, 2.77%) + + re.. + + + <core::iter::adapters::map::Map<I,F> as core::iter::traits::iterator::Iterator>::next (17 samples, 2.77%) + + <c.. + + + regex_automata::nfa::thompson::compiler::Compiler::c_cap (17 samples, 2.77%) + + re.. + + + regex_automata::nfa::thompson::compiler::Compiler::c (17 samples, 2.77%) + + re.. + + + regex_automata::nfa::thompson::compiler::Compiler::c_cap (17 samples, 2.77%) + + re.. + + + regex_automata::nfa::thompson::compiler::Compiler::c (17 samples, 2.77%) + + re.. + + + regex_automata::nfa::thompson::compiler::Compiler::c_alt_iter (17 samples, 2.77%) + + re.. + + + regex_automata::nfa::thompson::compiler::Compiler::c (17 samples, 2.77%) + + re.. + + + regex_automata::nfa::thompson::compiler::Compiler::c (16 samples, 2.61%) + + re.. + + + regex_automata::nfa::thompson::builder::Builder::add (1 samples, 0.16%) + + + + + alloc::raw_vec::RawVec<T,A>::reserve_for_push (1 samples, 0.16%) + + + + + alloc::raw_vec::finish_grow (1 samples, 0.16%) + + + + + realloc (1 samples, 0.16%) + + + + + _int_realloc (1 samples, 0.16%) + + + + + _int_malloc (1 samples, 0.16%) + + + + + sysmalloc (1 samples, 0.16%) + + + + + asm_exc_page_fault (1 samples, 0.16%) + + + + + exc_page_fault (1 samples, 0.16%) + + + + + do_user_addr_fault (1 samples, 0.16%) + + + + + find_vma (1 samples, 0.16%) + + + + + regex_automata::meta::wrappers::Hybrid::new (1 samples, 0.16%) + + + + + regex_automata::nfa::thompson::compiler::Compiler::new (1 samples, 0.16%) + + + + + regex_automata::nfa::thompson::range_trie::RangeTrie::new (1 samples, 0.16%) + + + + + aho_corasick::packed::api::Builder::extend (1 samples, 0.16%) + + + + + aho_corasick::packed::pattern::Patterns::add (1 samples, 0.16%) + + + + + __memmove_avx512_unaligned_erms (1 samples, 0.16%) + + + + + aho_corasick::packed::teddy::builder::Builder::build (1 samples, 0.16%) + + + + + aho_corasick::packed::teddy::builder::x86_64::FatAVX2<3_usize>::new (1 samples, 0.16%) + + + + + aho_corasick::packed::teddy::builder::x86_64::FatAVX2<3_usize>::new_unchecked (1 samples, 0.16%) + + + + + aho_corasick::packed::api::Builder::build (2 samples, 0.33%) + + + + + aho_corasick::packed::rabinkarp::RabinKarp::new (1 samples, 0.16%) + + + + + alloc::raw_vec::RawVec<T,A>::reserve_for_push (1 samples, 0.16%) + + + + + alloc::raw_vec::finish_grow (1 samples, 0.16%) + + + + + malloc (2 samples, 0.33%) + + + + + _int_malloc (2 samples, 0.33%) + + + + + alloc::raw_vec::RawVec<T,A>::reserve_for_push (3 samples, 0.49%) + + + + + alloc::raw_vec::finish_grow (3 samples, 0.49%) + + + + + aho_corasick::dfa::DFA::set_matches (4 samples, 0.65%) + + + + + aho_corasick::dfa::Builder::finish_build_one_start::{{closure}} (7 samples, 1.14%) + + + + + __memset_avx512_unaligned_erms (1 samples, 0.16%) + + + + + aho_corasick::dfa::Builder::build_from_noncontiguous (15 samples, 2.45%) + + ah.. + + + regex_automata::meta::regex::Builder::build (37 samples, 6.04%) + + regex_au.. + + + regex_automata::meta::strategy::new (37 samples, 6.04%) + + regex_au.. + + + regex_automata::meta::reverse_inner::extract (19 samples, 3.10%) + + reg.. + + + regex_automata::util::prefilter::Choice::new (19 samples, 3.10%) + + reg.. + + + regex_automata::util::prefilter::teddy::Teddy::new (19 samples, 3.10%) + + reg.. + + + __rust_dealloc (1 samples, 0.16%) + + + + + regex_automata::nfa::thompson::compiler::Compiler::c_cap (1 samples, 0.16%) + + + + + regex_automata::nfa::thompson::compiler::Compiler::c (1 samples, 0.16%) + + + + + regex_automata::nfa::thompson::literal_trie::LiteralTrie::add (1 samples, 0.16%) + + + + + regex_automata::nfa::thompson::builder::Builder::patch (1 samples, 0.16%) + + + + + regex_automata::nfa::thompson::builder::Builder::add (2 samples, 0.33%) + + + + + regex::regex::bytes::Regex::new (6 samples, 0.98%) + + + + + regex::builders::Builder::build_one_bytes (6 samples, 0.98%) + + + + + regex_automata::meta::regex::Builder::build (6 samples, 0.98%) + + + + + regex_automata::meta::strategy::new (6 samples, 0.98%) + + + + + regex_automata::nfa::thompson::compiler::Compiler::build_many_from_hir (6 samples, 0.98%) + + + + + <core::iter::adapters::map::Map<I,F> as core::iter::traits::iterator::Iterator>::next (6 samples, 0.98%) + + + + + regex_automata::nfa::thompson::compiler::Compiler::c_cap (6 samples, 0.98%) + + + + + regex_automata::nfa::thompson::compiler::Compiler::c (6 samples, 0.98%) + + + + + regex_automata::nfa::thompson::compiler::Compiler::c_cap (6 samples, 0.98%) + + + + + regex_automata::nfa::thompson::compiler::Compiler::c (6 samples, 0.98%) + + + + + regex_automata::nfa::thompson::compiler::Compiler::c_alt_iter (5 samples, 0.82%) + + + + + regex_automata::nfa::thompson::compiler::Compiler::c (5 samples, 0.82%) + + + + + regex_automata::nfa::thompson::literal_trie::LiteralTrie::compile (1 samples, 0.16%) + + + + + cfree@GLIBC_2.2.5 (1 samples, 0.16%) + + + + + _int_free (1 samples, 0.16%) + + + + + realloc (1 samples, 0.16%) + + + + + _int_realloc (1 samples, 0.16%) + + + + + _int_malloc (1 samples, 0.16%) + + + + + malloc_consolidate (1 samples, 0.16%) + + + + + regex_automata::nfa::thompson::compiler::Compiler::c_cap (3 samples, 0.49%) + + + + + regex_automata::nfa::thompson::compiler::Compiler::c (3 samples, 0.49%) + + + + + regex_automata::nfa::thompson::literal_trie::LiteralTrie::add (2 samples, 0.33%) + + + + + alloc::raw_vec::RawVec<T,A>::reserve_for_push (2 samples, 0.33%) + + + + + alloc::raw_vec::finish_grow (2 samples, 0.33%) + + + + + malloc (1 samples, 0.16%) + + + + + _int_malloc (1 samples, 0.16%) + + + + + malloc (1 samples, 0.16%) + + + + + _int_malloc (1 samples, 0.16%) + + + + + malloc_consolidate (1 samples, 0.16%) + + + + + release_pages (1 samples, 0.16%) + + + + + lru_cache_add (4 samples, 0.65%) + + + + + __pagevec_lru_add (4 samples, 0.65%) + + + + + page_mapping (3 samples, 0.49%) + + + + + __mem_cgroup_charge (4 samples, 0.65%) + + + + + charge_memcg (4 samples, 0.65%) + + + + + mem_cgroup_charge_statistics.constprop.0 (4 samples, 0.65%) + + + + + rmqueue_bulk (1 samples, 0.16%) + + + + + __list_del_entry_valid (1 samples, 0.16%) + + + + + kernel_init_free_pages.part.0 (6 samples, 0.98%) + + + + + clear_page_erms (6 samples, 0.98%) + + + + + get_page_from_freelist (8 samples, 1.31%) + + + + + __list_del_entry_valid (1 samples, 0.16%) + + + + + __alloc_pages (9 samples, 1.47%) + + + + + handle_mm_fault (19 samples, 3.10%) + + han.. + + + __handle_mm_fault (19 samples, 3.10%) + + __h.. + + + vmacache_find (2 samples, 0.33%) + + + + + asm_exc_page_fault (22 samples, 3.59%) + + asm_.. + + + exc_page_fault (22 samples, 3.59%) + + exc_.. + + + do_user_addr_fault (22 samples, 3.59%) + + do_u.. + + + find_vma (3 samples, 0.49%) + + + + + srso_alias_return_thunk (1 samples, 0.16%) + + + + + srso_alias_safe_ret (1 samples, 0.16%) + + + + + __memmove_avx512_unaligned_erms (3 samples, 0.49%) + + + + + regex_automata::nfa::thompson::compiler::Utf8Compiler::new (38 samples, 6.20%) + + regex_au.. + + + regex_automata::nfa::thompson::map::Utf8BoundedMap::clear (38 samples, 6.20%) + + regex_au.. + + + <T as alloc::vec::spec_from_elem::SpecFromElem>::from_elem (38 samples, 6.20%) + + <T as al.. + + + alloc::vec::Vec<T,A>::extend_with (37 samples, 6.04%) + + alloc::v.. + + + regex_automata::nfa::thompson::compiler::Utf8Compiler::add (1 samples, 0.16%) + + + + + regex_automata::nfa::thompson::builder::Builder::patch (2 samples, 0.33%) + + + + + regex_automata::nfa::thompson::builder::Builder::add (2 samples, 0.33%) + + + + + alloc::raw_vec::RawVec<T,A>::allocate_in (1 samples, 0.16%) + + + + + malloc (1 samples, 0.16%) + + + + + regex_automata::nfa::thompson::compiler::Compiler::c_alt_iter (45 samples, 7.34%) + + regex_auto.. + + + regex_automata::nfa::thompson::compiler::Compiler::c (45 samples, 7.34%) + + regex_auto.. + + + regex_automata::nfa::thompson::compiler::Compiler::c (6 samples, 0.98%) + + + + + malloc (1 samples, 0.16%) + + + + + _int_malloc (1 samples, 0.16%) + + + + + sysmalloc (1 samples, 0.16%) + + + + + asm_exc_page_fault (1 samples, 0.16%) + + + + + exc_page_fault (1 samples, 0.16%) + + + + + do_user_addr_fault (1 samples, 0.16%) + + + + + handle_mm_fault (1 samples, 0.16%) + + + + + __handle_mm_fault (1 samples, 0.16%) + + + + + __alloc_pages (1 samples, 0.16%) + + + + + get_page_from_freelist (1 samples, 0.16%) + + + + + __list_del_entry_valid (1 samples, 0.16%) + + + + + error_return (1 samples, 0.16%) + + + + + memcg_check_events.isra.0 (1 samples, 0.16%) + + + + + mem_cgroup_charge_statistics.constprop.0 (1 samples, 0.16%) + + + + + charge_memcg (3 samples, 0.49%) + + + + + __mem_cgroup_charge (4 samples, 0.65%) + + + + + srso_alias_return_thunk (1 samples, 0.16%) + + + + + srso_alias_safe_ret (1 samples, 0.16%) + + + + + rmqueue_bulk (2 samples, 0.33%) + + + + + __list_del_entry_valid (2 samples, 0.33%) + + + + + __alloc_pages (5 samples, 0.82%) + + + + + get_page_from_freelist (5 samples, 0.82%) + + + + + kernel_init_free_pages.part.0 (2 samples, 0.33%) + + + + + clear_page_erms (2 samples, 0.33%) + + + + + exc_page_fault (10 samples, 1.63%) + + + + + do_user_addr_fault (10 samples, 1.63%) + + + + + handle_mm_fault (10 samples, 1.63%) + + + + + __handle_mm_fault (10 samples, 1.63%) + + + + + asm_exc_page_fault (12 samples, 1.96%) + + a.. + + + __memmove_avx512_unaligned_erms (2 samples, 0.33%) + + + + + __irqentry_text_end (1 samples, 0.16%) + + + + + regex_automata::nfa::thompson::compiler::Compiler::build_many_from_hir (70 samples, 11.42%) + + regex_automata::n.. + + + <core::iter::adapters::map::Map<I,F> as core::iter::traits::iterator::Iterator>::next (70 samples, 11.42%) + + <core::iter::adap.. + + + regex_automata::nfa::thompson::compiler::Compiler::c_cap (70 samples, 11.42%) + + regex_automata::n.. + + + regex_automata::nfa::thompson::compiler::Compiler::c (70 samples, 11.42%) + + regex_automata::n.. + + + regex_automata::nfa::thompson::compiler::Compiler::c_cap (70 samples, 11.42%) + + regex_automata::n.. + + + regex_automata::nfa::thompson::compiler::Compiler::c (70 samples, 11.42%) + + regex_automata::n.. + + + regex_automata::nfa::thompson::compiler::Compiler::c (22 samples, 3.59%) + + rege.. + + + regex_automata::nfa::thompson::compiler::Utf8Compiler::new (22 samples, 3.59%) + + rege.. + + + regex_automata::nfa::thompson::map::Utf8BoundedMap::clear (22 samples, 3.59%) + + rege.. + + + <T as alloc::vec::spec_from_elem::SpecFromElem>::from_elem (22 samples, 3.59%) + + <T a.. + + + alloc::vec::Vec<T,A>::extend_with (21 samples, 3.43%) + + all.. + + + regex::builders::Builder::build_one_bytes (71 samples, 11.58%) + + regex::builders::.. + + + regex_automata::meta::regex::Builder::build (71 samples, 11.58%) + + regex_automata::m.. + + + regex_automata::meta::strategy::new (71 samples, 11.58%) + + regex_automata::m.. + + + regex_automata::meta::reverse_inner::extract (1 samples, 0.16%) + + + + + regex_syntax::hir::literal::Extractor::extract (1 samples, 0.16%) + + + + + regex_syntax::hir::literal::Extractor::extract (1 samples, 0.16%) + + + + + regex_syntax::hir::literal::Extractor::extract (1 samples, 0.16%) + + + + + regex_syntax::hir::literal::Extractor::extract (1 samples, 0.16%) + + + + + regex_syntax::hir::literal::Extractor::union (1 samples, 0.16%) + + + + + <alloc::vec::Vec<T,A> as alloc::vec::spec_extend::SpecExtend<T,I>>::spec_extend (1 samples, 0.16%) + + + + + alloc::raw_vec::RawVec<T,A>::reserve::do_reserve_and_handle (1 samples, 0.16%) + + + + + alloc::raw_vec::finish_grow (1 samples, 0.16%) + + + + + realloc (1 samples, 0.16%) + + + + + _int_realloc (1 samples, 0.16%) + + + + + _int_malloc (1 samples, 0.16%) + + + + + regex_automata::nfa::thompson::literal_trie::LiteralTrie::compile (1 samples, 0.16%) + + + + + alloc::raw_vec::RawVec<T,A>::reserve_for_push (1 samples, 0.16%) + + + + + alloc::raw_vec::finish_grow (1 samples, 0.16%) + + + + + realloc (1 samples, 0.16%) + + + + + _int_realloc (1 samples, 0.16%) + + + + + regex_automata::nfa::thompson::compiler::Compiler::build_many_from_hir (2 samples, 0.33%) + + + + + <core::iter::adapters::map::Map<I,F> as core::iter::traits::iterator::Iterator>::next (2 samples, 0.33%) + + + + + regex_automata::nfa::thompson::compiler::Compiler::c_cap (2 samples, 0.33%) + + + + + regex_automata::nfa::thompson::compiler::Compiler::c (2 samples, 0.33%) + + + + + regex_automata::nfa::thompson::compiler::Compiler::c_cap (2 samples, 0.33%) + + + + + regex_automata::nfa::thompson::compiler::Compiler::c (2 samples, 0.33%) + + + + + regex_automata::nfa::thompson::literal_trie::LiteralTrie::add (1 samples, 0.16%) + + + + + alloc::raw_vec::RawVec<T,A>::reserve_for_push (1 samples, 0.16%) + + + + + alloc::raw_vec::finish_grow (1 samples, 0.16%) + + + + + realloc (1 samples, 0.16%) + + + + + _int_realloc (1 samples, 0.16%) + + + + + _int_malloc (1 samples, 0.16%) + + + + + once_cell::imp::initialize_or_wait (3 samples, 0.49%) + + + + + once_cell::imp::OnceCell<T>::initialize::_{{closure}} (3 samples, 0.49%) + + + + + regex::regex::bytes::Regex::new (3 samples, 0.49%) + + + + + regex::builders::Builder::build_one_bytes (3 samples, 0.49%) + + + + + regex_automata::meta::regex::Builder::build (3 samples, 0.49%) + + + + + regex_automata::meta::strategy::new (3 samples, 0.49%) + + + + + regex_automata::meta::reverse_inner::extract (1 samples, 0.16%) + + + + + regex_syntax::hir::literal::Extractor::extract (1 samples, 0.16%) + + + + + regex_syntax::hir::literal::Extractor::extract (1 samples, 0.16%) + + + + + regex_syntax::hir::literal::Extractor::union (1 samples, 0.16%) + + + + + <alloc::vec::Vec<T,A> as alloc::vec::spec_extend::SpecExtend<T,I>>::spec_extend (1 samples, 0.16%) + + + + + alloc::raw_vec::RawVec<T,A>::reserve::do_reserve_and_handle (1 samples, 0.16%) + + + + + alloc::raw_vec::finish_grow (1 samples, 0.16%) + + + + + realloc (1 samples, 0.16%) + + + + + _int_realloc (1 samples, 0.16%) + + + + + _int_malloc (1 samples, 0.16%) + + + + + malloc_consolidate (1 samples, 0.16%) + + + + + regex_automata::nfa::thompson::compiler::Compiler::build_many_from_hir (1 samples, 0.16%) + + + + + <core::iter::adapters::map::Map<I,F> as core::iter::traits::iterator::Iterator>::next (1 samples, 0.16%) + + + + + regex_automata::nfa::thompson::compiler::Compiler::c_cap (1 samples, 0.16%) + + + + + regex_automata::nfa::thompson::compiler::Compiler::c (1 samples, 0.16%) + + + + + regex_automata::nfa::thompson::compiler::Compiler::c_alt_iter (1 samples, 0.16%) + + + + + regex_automata::nfa::thompson::compiler::Compiler::c (1 samples, 0.16%) + + + + + regex_automata::nfa::thompson::map::Utf8SuffixMap::clear (1 samples, 0.16%) + + + + + malloc (1 samples, 0.16%) + + + + + _int_malloc (1 samples, 0.16%) + + + + + malloc_consolidate (1 samples, 0.16%) + + + + + once_cell::imp::OnceCell<T>::initialize (2 samples, 0.33%) + + + + + once_cell::imp::initialize_or_wait (2 samples, 0.33%) + + + + + once_cell::imp::OnceCell<T>::initialize::_{{closure}} (2 samples, 0.33%) + + + + + regex::regex::bytes::Regex::new (2 samples, 0.33%) + + + + + regex::builders::Builder::build_one_bytes (2 samples, 0.33%) + + + + + regex_automata::meta::regex::Builder::build (2 samples, 0.33%) + + + + + regex_automata::meta::strategy::new (2 samples, 0.33%) + + + + + regex_automata::meta::reverse_inner::extract (1 samples, 0.16%) + + + + + regex_automata::meta::reverse_inner::flatten (1 samples, 0.16%) + + + + + <alloc::vec::Vec<T> as alloc::vec::spec_from_iter::SpecFromIter<T,I>>::from_iter (1 samples, 0.16%) + + + + + regex_automata::meta::reverse_inner::flatten (1 samples, 0.16%) + + + + + regex_syntax::hir::Hir::concat (1 samples, 0.16%) + + + + + alloc::raw_vec::RawVec<T,A>::reserve_for_push (1 samples, 0.16%) + + + + + alloc::raw_vec::finish_grow (1 samples, 0.16%) + + + + + malloc (1 samples, 0.16%) + + + + + _int_malloc (1 samples, 0.16%) + + + + + asm_exc_page_fault (1 samples, 0.16%) + + + + + exc_page_fault (1 samples, 0.16%) + + + + + do_user_addr_fault (1 samples, 0.16%) + + + + + handle_mm_fault (1 samples, 0.16%) + + + + + __handle_mm_fault (1 samples, 0.16%) + + + + + __mem_cgroup_charge (1 samples, 0.16%) + + + + + regex_automata::nfa::thompson::builder::Builder::add (3 samples, 0.49%) + + + + + alloc::raw_vec::RawVec<T,A>::reserve_for_push (3 samples, 0.49%) + + + + + alloc::raw_vec::finish_grow (3 samples, 0.49%) + + + + + realloc (3 samples, 0.49%) + + + + + _int_realloc (3 samples, 0.49%) + + + + + __memmove_avx512_unaligned_erms (3 samples, 0.49%) + + + + + regex_automata::nfa::thompson::literal_trie::LiteralTrie::compile (5 samples, 0.82%) + + + + + alloc::raw_vec::RawVec<T,A>::reserve_for_push (2 samples, 0.33%) + + + + + alloc::raw_vec::finish_grow (2 samples, 0.33%) + + + + + malloc (2 samples, 0.33%) + + + + + _int_malloc (2 samples, 0.33%) + + + + + regex_automata::nfa::thompson::literal_trie::LiteralTrie::add (1 samples, 0.16%) + + + + + alloc::raw_vec::RawVec<T,A>::reserve_for_push (1 samples, 0.16%) + + + + + alloc::raw_vec::finish_grow (1 samples, 0.16%) + + + + + realloc (1 samples, 0.16%) + + + + + _int_realloc (1 samples, 0.16%) + + + + + _int_malloc (1 samples, 0.16%) + + + + + sysmalloc (1 samples, 0.16%) + + + + + __mprotect (1 samples, 0.16%) + + + + + entry_SYSCALL_64_after_hwframe (1 samples, 0.16%) + + + + + do_syscall_64 (1 samples, 0.16%) + + + + + __x64_sys_mprotect (1 samples, 0.16%) + + + + + do_mprotect_pkey (1 samples, 0.16%) + + + + + mprotect_fixup (1 samples, 0.16%) + + + + + perf_event_mmap (1 samples, 0.16%) + + + + + perf_iterate_sb (1 samples, 0.16%) + + + + + perf_iterate_ctx (1 samples, 0.16%) + + + + + perf_event_mmap_output (1 samples, 0.16%) + + + + + __perf_event__output_id_sample (1 samples, 0.16%) + + + + + perf_output_copy (1 samples, 0.16%) + + + + + once_cell::imp::OnceCell<T>::initialize::_{{closure}} (7 samples, 1.14%) + + + + + regex::regex::bytes::Regex::new (7 samples, 1.14%) + + + + + regex::builders::Builder::build_one_bytes (7 samples, 1.14%) + + + + + regex_automata::meta::regex::Builder::build (7 samples, 1.14%) + + + + + regex_automata::meta::strategy::new (7 samples, 1.14%) + + + + + regex_automata::nfa::thompson::compiler::Compiler::build_many_from_hir (7 samples, 1.14%) + + + + + <core::iter::adapters::map::Map<I,F> as core::iter::traits::iterator::Iterator>::next (7 samples, 1.14%) + + + + + regex_automata::nfa::thompson::compiler::Compiler::c_cap (7 samples, 1.14%) + + + + + regex_automata::nfa::thompson::compiler::Compiler::c (7 samples, 1.14%) + + + + + regex_automata::nfa::thompson::compiler::Compiler::c_cap (7 samples, 1.14%) + + + + + regex_automata::nfa::thompson::compiler::Compiler::c (7 samples, 1.14%) + + + + + regex_automata::nfa::thompson::compiler::Compiler::c (1 samples, 0.16%) + + + + + alloc::raw_vec::RawVec<T,A>::allocate_in (1 samples, 0.16%) + + + + + malloc (1 samples, 0.16%) + + + + + numbers3.log (540 samples, 88.09%) + + numbers3.log + + + [unknown] (320 samples, 52.20%) + + [unknown] + + + core::ops::function::FnOnce::call_once{{vtable.shim}} (1 samples, 0.16%) + + + + + std::sys_common::backtrace::__rust_begin_short_backtrace (1 samples, 0.16%) + + + + + s4::exec_fileprocessor_thread (1 samples, 0.16%) + + + + + s4lib::readers::syslogprocessor::SyslogProcessor::process_stage1_blockzero_analysis (1 samples, 0.16%) + + + + + s4lib::readers::syslinereader::SyslineReader::find_sysline_in_block_year (1 samples, 0.16%) + + + + + s4lib::readers::syslinereader::SyslineReader::parse_datetime_in_line_cached (1 samples, 0.16%) + + + + + s4lib::data::datetime::bytes_to_regex_to_datetime (1 samples, 0.16%) + + + + + once_cell::imp::OnceCell<T>::initialize (1 samples, 0.16%) + + + + + once_cell::imp::initialize_or_wait (1 samples, 0.16%) + + + + + once_cell::imp::OnceCell<T>::initialize::_{{closure}} (1 samples, 0.16%) + + + + + regex::regex::bytes::Regex::new (1 samples, 0.16%) + + + + + regex::builders::Builder::build_one_bytes (1 samples, 0.16%) + + + + + regex_automata::meta::regex::Builder::build (1 samples, 0.16%) + + + + + regex_syntax::ast::parse::Parser::parse (1 samples, 0.16%) + + + + + regex_syntax::ast::parse::ParserI<P>::parse_with_comments (1 samples, 0.16%) + + + + + regex_syntax::ast::parse::ParserI<P>::parse_set_class (1 samples, 0.16%) + + + + + regex_syntax::ast::parse::ParserI<P>::parse_set_class_range (1 samples, 0.16%) + + + + + regex_syntax::ast::parse::ParserI<P>::parse_set_class_item (1 samples, 0.16%) + + + + + regex_syntax::ast::parse::ParserI<P>::char (1 samples, 0.16%) + + + + + all (613 samples, 100%) + + + + + ctrl-c (1 samples, 0.16%) + + + + + entry_SYSCALL_64_after_hwframe (1 samples, 0.16%) + + + + + do_syscall_64 (1 samples, 0.16%) + + + + + syscall_exit_to_user_mode (1 samples, 0.16%) + + + + + exit_to_user_mode_prepare (1 samples, 0.16%) + + + + + arch_do_signal_or_restart (1 samples, 0.16%) + + + + + get_signal (1 samples, 0.16%) + + + + + do_group_exit (1 samples, 0.16%) + + + + + do_exit (1 samples, 0.16%) + + + + + acct_process (1 samples, 0.16%) + + + + + do_acct_process (1 samples, 0.16%) + + + + + __kernel_write (1 samples, 0.16%) + + + + + ext4_buffered_write_iter (1 samples, 0.16%) + + + + + file_update_time (1 samples, 0.16%) + + + + + generic_update_time (1 samples, 0.16%) + + + + + __mark_inode_dirty (1 samples, 0.16%) + + + + + __ext4_journal_stop (1 samples, 0.16%) + + + + + jbd2_journal_stop (1 samples, 0.16%) + + + + + kmem_cache_free.part.0 (1 samples, 0.16%) + + + + + diff --git a/releases/0.7.75/flamegraph-syslog-tar.svg b/releases/0.7.75/flamegraph-syslog-tar.svg new file mode 100644 index 00000000..d0768ef8 --- /dev/null +++ b/releases/0.7.75/flamegraph-syslog-tar.svg @@ -0,0 +1,5282 @@ + + + + + + + + + + + + + + + Flame Graph: super_speedy_syslog_searcher 0.7.75; git: d799548f; -freq 8000; created 20240707T231130-0700; flamegraph-flamegraph 0.6.5; rustc 1.70.0
; command: s4 ./logs/other/tests/gen-1000-3-foobar.log.tar + + Reset Zoom + Search + + + + x86_pmu_enable_all (14 samples, 3.19%) + + x86.. + + + ret_from_fork (25 samples, 5.69%) + + ret_fro.. + + + schedule_tail (25 samples, 5.69%) + + schedul.. + + + finish_task_switch.isra.0 (25 samples, 5.69%) + + finish_.. + + + __perf_event_task_sched_in (25 samples, 5.69%) + + __perf_.. + + + __mod_lruvec_page_state (2 samples, 0.46%) + + + + + __mod_memcg_lruvec_state (2 samples, 0.46%) + + + + + page_remove_rmap (3 samples, 0.68%) + + + + + unmap_vmas (4 samples, 0.91%) + + + + + unmap_page_range (4 samples, 0.91%) + + + + + __list_del_entry_valid (1 samples, 0.23%) + + + + + free_unref_page_list (3 samples, 0.68%) + + + + + free_pcppages_bulk (3 samples, 0.68%) + + + + + __free_one_page (2 samples, 0.46%) + + + + + mmput (8 samples, 1.82%) + + m.. + + + exit_mmap (8 samples, 1.82%) + + e.. + + + tlb_finish_mmu (4 samples, 0.91%) + + + + + release_pages (4 samples, 0.91%) + + + + + __mod_zone_page_state (1 samples, 0.23%) + + + + + __x64_sys_exit_group (9 samples, 2.05%) + + _.. + + + do_group_exit (9 samples, 2.05%) + + d.. + + + do_exit (9 samples, 2.05%) + + d.. + + + mm_update_next_owner (1 samples, 0.23%) + + + + + elf_map (1 samples, 0.23%) + + + + + __vm_munmap (1 samples, 0.23%) + + + + + __do_munmap (1 samples, 0.23%) + + + + + entry_SYSCALL_64_after_hwframe (11 samples, 2.51%) + + en.. + + + do_syscall_64 (11 samples, 2.51%) + + do.. + + + __x64_sys_execve (2 samples, 0.46%) + + + + + do_execveat_common.isra.0 (2 samples, 0.46%) + + + + + bprm_execve (2 samples, 0.46%) + + + + + load_elf_binary (2 samples, 0.46%) + + + + + _get_random_bytes.part.0 (1 samples, 0.23%) + + + + + crng_make_state (1 samples, 0.23%) + + + + + crng_fast_key_erasure (1 samples, 0.23%) + + + + + chacha_block_generic (1 samples, 0.23%) + + + + + chacha_permute (1 samples, 0.23%) + + + + + mmap_region (1 samples, 0.23%) + + + + + perf_event_mmap (1 samples, 0.23%) + + + + + perf_iterate_sb (1 samples, 0.23%) + + + + + perf_iterate_ctx (1 samples, 0.23%) + + + + + perf_event_mmap_output (1 samples, 0.23%) + + + + + start_thread (2 samples, 0.46%) + + + + + std::sys::unix::thread::Thread::new::thread_start (2 samples, 0.46%) + + + + + std::sys::unix::stack_overflow::imp::make_handler (2 samples, 0.46%) + + + + + __mmap (2 samples, 0.46%) + + + + + entry_SYSCALL_64_after_hwframe (2 samples, 0.46%) + + + + + do_syscall_64 (2 samples, 0.46%) + + + + + vm_mmap_pgoff (2 samples, 0.46%) + + + + + do_mmap (2 samples, 0.46%) + + + + + get_unmapped_area (1 samples, 0.23%) + + + + + arch_get_unmapped_area_topdown (1 samples, 0.23%) + + + + + vm_unmapped_area (1 samples, 0.23%) + + + + + clone3 (3 samples, 0.68%) + + + + + entry_SYSCALL_64_after_hwframe (1 samples, 0.23%) + + + + + do_syscall_64 (1 samples, 0.23%) + + + + + __do_sys_clone3 (1 samples, 0.23%) + + + + + kernel_clone (1 samples, 0.23%) + + + + + copy_process (1 samples, 0.23%) + + + + + perf_event_init_task (1 samples, 0.23%) + + + + + inherit_task_group.isra.0 (1 samples, 0.23%) + + + + + inherit_event.constprop.0 (1 samples, 0.23%) + + + + + asm_exc_page_fault (1 samples, 0.23%) + + + + + exc_page_fault (1 samples, 0.23%) + + + + + do_user_addr_fault (1 samples, 0.23%) + + + + + handle_mm_fault (1 samples, 0.23%) + + + + + __handle_mm_fault (1 samples, 0.23%) + + + + + wp_page_copy (1 samples, 0.23%) + + + + + exc_page_fault (1 samples, 0.23%) + + + + + do_user_addr_fault (1 samples, 0.23%) + + + + + handle_mm_fault (1 samples, 0.23%) + + + + + __handle_mm_fault (1 samples, 0.23%) + + + + + __do_fault (1 samples, 0.23%) + + + + + filemap_fault (1 samples, 0.23%) + + + + + pagecache_get_page (1 samples, 0.23%) + + + + + xas_load (1 samples, 0.23%) + + + + + asm_exc_page_fault (2 samples, 0.46%) + + + + + _dl_relocate_object (3 samples, 0.68%) + + + + + _dl_lookup_symbol_x (1 samples, 0.23%) + + + + + do_lookup_x (1 samples, 0.23%) + + + + + _dl_map_object_deps (1 samples, 0.23%) + + + + + _dl_catch_exception (1 samples, 0.23%) + + + + + openaux (1 samples, 0.23%) + + + + + _dl_map_object (1 samples, 0.23%) + + + + + _dl_load_cache_lookup (1 samples, 0.23%) + + + + + _dl_start (6 samples, 1.37%) + + + + + _dl_sysdep_start (6 samples, 1.37%) + + + + + dl_main (6 samples, 1.37%) + + + + + __libc_early_init (1 samples, 0.23%) + + + + + __pthread_tunables_init (1 samples, 0.23%) + + + + + _dl_runtime_resolve_xsavec (1 samples, 0.23%) + + + + + _dl_fixup (1 samples, 0.23%) + + + + + syscall_return_via_sysret (1 samples, 0.23%) + + + + + fsnotify (1 samples, 0.23%) + + + + + dput (1 samples, 0.23%) + + + + + lockref_put_return (1 samples, 0.23%) + + + + + __fsnotify_parent (3 samples, 0.68%) + + + + + vfs_write (4 samples, 0.91%) + + + + + entry_SYSCALL_64_after_hwframe (5 samples, 1.14%) + + + + + do_syscall_64 (5 samples, 1.14%) + + + + + ksys_write (5 samples, 1.14%) + + + + + __fdget_pos (1 samples, 0.23%) + + + + + __fget_light (1 samples, 0.23%) + + + + + __GI___libc_write (7 samples, 1.59%) + + + + + std::io::Write::write_all (8 samples, 1.82%) + + s.. + + + <termcolor::LossyStandardStream<W> as std::io::Write>::write (8 samples, 1.82%) + + <.. + + + <std::io::stdio::Stdout as std::io::Write>::write (8 samples, 1.82%) + + <.. + + + <&std::io::stdio::Stdout as std::io::Write>::write (8 samples, 1.82%) + + <.. + + + <std::io::stdio::StdoutLock as std::io::Write>::write (8 samples, 1.82%) + + <.. + + + __memmove_avx512_unaligned_erms (2 samples, 0.46%) + + + + + __memrchr_evex (2 samples, 0.46%) + + + + + std::io::Write::write_all (4 samples, 0.91%) + + + + + <std::io::stdio::Stdout as std::io::Write>::write (4 samples, 0.91%) + + + + + <&std::io::stdio::Stdout as std::io::Write>::write (4 samples, 0.91%) + + + + + <std::io::stdio::StdoutLock as std::io::Write>::write (4 samples, 0.91%) + + + + + termcolor::Ansi<W>::write_color (5 samples, 1.14%) + + + + + __memmove_avx512_unaligned_erms (1 samples, 0.23%) + + + + + <std::io::stdio::StdoutLock as std::io::Write>::write (2 samples, 0.46%) + + + + + std::io::Write::write_all (3 samples, 0.68%) + + + + + <std::io::stdio::Stdout as std::io::Write>::write (3 samples, 0.68%) + + + + + <&std::io::stdio::Stdout as std::io::Write>::write (3 samples, 0.68%) + + + + + <termcolor::LossyStandardStream<W> as termcolor::WriteColor>::set_color (9 samples, 2.05%) + + <.. + + + syscall_exit_to_user_mode (2 samples, 0.46%) + + + + + __fsnotify_parent (2 samples, 0.46%) + + + + + dput (2 samples, 0.46%) + + + + + lockref_put_return (2 samples, 0.46%) + + + + + vfs_write (7 samples, 1.59%) + + + + + srso_alias_safe_ret (1 samples, 0.23%) + + + + + fput_many (3 samples, 0.68%) + + + + + srso_alias_return_thunk (1 samples, 0.23%) + + + + + srso_alias_safe_ret (1 samples, 0.23%) + + + + + ksys_write (13 samples, 2.96%) + + ksy.. + + + __fdget_pos (2 samples, 0.46%) + + + + + __fget_light (1 samples, 0.23%) + + + + + __fget_files (1 samples, 0.23%) + + + + + rcu_read_unlock_strict (1 samples, 0.23%) + + + + + __x64_sys_write (1 samples, 0.23%) + + + + + do_syscall_64 (17 samples, 3.87%) + + do_s.. + + + entry_SYSCALL_64_after_hwframe (18 samples, 4.10%) + + entr.. + + + entry_SYSCALL_64 (3 samples, 0.68%) + + + + + __GI___pthread_disable_asynccancel (2 samples, 0.46%) + + + + + __GI___libc_write (29 samples, 6.61%) + + __GI___li.. + + + <std::io::stdio::Stdout as std::io::Write>::flush (30 samples, 6.83%) + + <std::io:.. + + + <&std::io::stdio::Stdout as std::io::Write>::flush (30 samples, 6.83%) + + <&std::io.. + + + std::io::buffered::bufwriter::BufWriter<W>::flush_buf (30 samples, 6.83%) + + std::io::.. + + + s4lib::printer::printers::PrinterLogMessage::print_sysline_color (53 samples, 12.07%) + + s4lib::printer::pr.. + + + hashbrown::set::HashSet<T,S,A>::remove (1 samples, 0.23%) + + + + + hashbrown::raw::RawTable<T,A>::remove_entry (1 samples, 0.23%) + + + + + ctrlc::set_handler (1 samples, 0.23%) + + + + + std::thread::Builder::spawn (1 samples, 0.23%) + + + + + std::sys::unix::thread::Thread::new (1 samples, 0.23%) + + + + + pthread_create@GLIBC_2.2.5 (1 samples, 0.23%) + + + + + asm_exc_page_fault (1 samples, 0.23%) + + + + + exc_page_fault (1 samples, 0.23%) + + + + + do_user_addr_fault (1 samples, 0.23%) + + + + + handle_mm_fault (1 samples, 0.23%) + + + + + __handle_mm_fault (1 samples, 0.23%) + + + + + __cgroup_throttle_swaprate (1 samples, 0.23%) + + + + + crossbeam_channel::select::SelectedOperation::recv (1 samples, 0.23%) + + + + + crossbeam_channel::channel::read (1 samples, 0.23%) + + + + + __memmove_avx512_unaligned_erms (1 samples, 0.23%) + + + + + crossbeam_channel::context::Context::wait_until (1 samples, 0.23%) + + + + + __perf_event_task_sched_in (15 samples, 3.42%) + + __p.. + + + x86_pmu_enable_all (15 samples, 3.42%) + + x86.. + + + crossbeam_channel::context::Context::with::{{closure}} (17 samples, 3.87%) + + cros.. + + + <crossbeam_channel::channel::Receiver<T> as crossbeam_channel::select::SelectHandle>::unregister (16 samples, 3.64%) + + <cro.. + + + crossbeam_channel::waker::SyncWaker::unregister (16 samples, 3.64%) + + cros.. + + + std::sys::unix::locks::futex_mutex::Mutex::lock_contended (16 samples, 3.64%) + + std:.. + + + syscall (16 samples, 3.64%) + + sysc.. + + + entry_SYSCALL_64_after_hwframe (16 samples, 3.64%) + + entr.. + + + do_syscall_64 (16 samples, 3.64%) + + do_s.. + + + __x64_sys_futex (16 samples, 3.64%) + + __x6.. + + + do_futex (16 samples, 3.64%) + + do_f.. + + + futex_wait (16 samples, 3.64%) + + fute.. + + + futex_wait_queue_me (16 samples, 3.64%) + + fute.. + + + schedule (16 samples, 3.64%) + + sche.. + + + __schedule (16 samples, 3.64%) + + __sc.. + + + finish_task_switch.isra.0 (16 samples, 3.64%) + + fini.. + + + __mmdrop (1 samples, 0.23%) + + + + + free_unref_page (1 samples, 0.23%) + + + + + free_pcp_prepare (1 samples, 0.23%) + + + + + __memcg_kmem_uncharge_page (1 samples, 0.23%) + + + + + obj_cgroup_uncharge_pages (1 samples, 0.23%) + + + + + page_counter_uncharge (1 samples, 0.23%) + + + + + srso_alias_return_thunk (1 samples, 0.23%) + + + + + srso_alias_safe_ret (1 samples, 0.23%) + + + + + crossbeam_channel::select::Select::select (18 samples, 4.10%) + + cros.. + + + crossbeam_channel::select::run_select (18 samples, 4.10%) + + cros.. + + + <crossbeam_channel::flavors::array::Receiver<T> as crossbeam_channel::select::SelectHandle>::try_select (1 samples, 0.23%) + + + + + cfree@GLIBC_2.2.5 (1 samples, 0.23%) + + + + + alloc::collections::btree::remove::<impl alloc::collections::btree::node::Handle<alloc::collections::btree::node::NodeRef<alloc::collections::btree::node::marker::Mut,K,V,alloc::collections::btree::node::marker::LeafOrInternal>,alloc::collections::btree::node::marker::KV>>::remove_kv_tracking (2 samples, 0.46%) + + + + + alloc::collections::btree::map::BTreeMap<K,V,A>::remove (4 samples, 0.91%) + + + + + alloc::collections::btree::map::entry::OccupiedEntry<K,V,A>::remove_entry (4 samples, 0.91%) + + + + + alloc::collections::btree::map::BTreeMap<K,V,A>::insert (1 samples, 0.23%) + + + + + s4::processing_loop (83 samples, 18.91%) + + s4::processing_loop + + + std::rt::lang_start::_{{closure}} (84 samples, 19.13%) + + std::rt::lang_start::_{{closur.. + + + std::sys_common::backtrace::__rust_begin_short_backtrace (84 samples, 19.13%) + + std::sys_common::backtrace::__.. + + + s4::main (84 samples, 19.13%) + + s4::main + + + clap_builder::builder::command::Command::get_matches_from (1 samples, 0.23%) + + + + + clap_builder::builder::command::Command::_do_parse (1 samples, 0.23%) + + + + + clap_builder::builder::command::Command::_build_self (1 samples, 0.23%) + + + + + <alloc::vec::Vec<T> as alloc::vec::spec_from_iter::SpecFromIter<T,I>>::from_iter (1 samples, 0.23%) + + + + + <core::iter::adapters::filter_map::FilterMap<I,F> as core::iter::traits::iterator::Iterator>::next (1 samples, 0.23%) + + + + + <s4lib::readers::journalreader::JournalOutput as clap_builder::derive::ValueEnum>::to_possible_value (1 samples, 0.23%) + + + + + _start (91 samples, 20.73%) + + _start + + + __libc_start_main@@GLIBC_2.34 (85 samples, 19.36%) + + __libc_start_main@@GLIBC_2.34 + + + __libc_start_call_main (85 samples, 19.36%) + + __libc_start_call_main + + + main (85 samples, 19.36%) + + main + + + std::rt::lang_start_internal (85 samples, 19.36%) + + std::rt::lang_start_internal + + + pthread_getattr_np@@GLIBC_2.32 (1 samples, 0.23%) + + + + + realloc (1 samples, 0.23%) + + + + + __memset_avx512_unaligned_erms (1 samples, 0.23%) + + + + + wait_on_page_bit_common (1 samples, 0.23%) + + + + + ext4_mpage_readpages (1 samples, 0.23%) + + + + + bio_add_page (1 samples, 0.23%) + + + + + __bio_add_page (1 samples, 0.23%) + + + + + read_pages (2 samples, 0.46%) + + + + + blk_finish_plug (1 samples, 0.23%) + + + + + blk_mq_flush_plug_list (1 samples, 0.23%) + + + + + blk_mq_sched_insert_requests (1 samples, 0.23%) + + + + + blk_mq_try_issue_list_directly (1 samples, 0.23%) + + + + + __blk_mq_try_issue_directly (1 samples, 0.23%) + + + + + scsi_queue_rq (1 samples, 0.23%) + + + + + sd_init_command (1 samples, 0.23%) + + + + + scsi_alloc_sgtables (1 samples, 0.23%) + + + + + sg_alloc_table_chained (1 samples, 0.23%) + + + + + __sg_alloc_table (1 samples, 0.23%) + + + + + mempool_alloc (1 samples, 0.23%) + + + + + xas_store (1 samples, 0.23%) + + + + + add_to_page_cache_lru (2 samples, 0.46%) + + + + + __add_to_page_cache_locked (2 samples, 0.46%) + + + + + new_sync_read (6 samples, 1.37%) + + + + + filemap_read (6 samples, 1.37%) + + + + + filemap_get_pages (6 samples, 1.37%) + + + + + page_cache_ra_unbounded (5 samples, 1.14%) + + + + + __alloc_pages (1 samples, 0.23%) + + + + + s4 (138 samples, 31.44%) + + s4 + + + [unknown] (8 samples, 1.82%) + + [.. + + + tar::archive::EntriesFields::next_entry_raw (8 samples, 1.82%) + + t.. + + + <std::process::ChildStdout as std::io::Read>::read (7 samples, 1.59%) + + + + + read (7 samples, 1.59%) + + + + + entry_SYSCALL_64_after_hwframe (7 samples, 1.59%) + + + + + do_syscall_64 (7 samples, 1.59%) + + + + + ksys_read (7 samples, 1.59%) + + + + + vfs_read (7 samples, 1.59%) + + + + + __fsnotify_parent (1 samples, 0.23%) + + + + + x86_pmu_enable_all (14 samples, 3.19%) + + x86.. + + + perf-exec (15 samples, 3.42%) + + per.. + + + entry_SYSCALL_64_after_hwframe (15 samples, 3.42%) + + ent.. + + + do_syscall_64 (15 samples, 3.42%) + + do_.. + + + __x64_sys_execve (15 samples, 3.42%) + + __x.. + + + do_execveat_common.isra.0 (15 samples, 3.42%) + + do_.. + + + bprm_execve (15 samples, 3.42%) + + bpr.. + + + load_elf_binary (15 samples, 3.42%) + + loa.. + + + begin_new_exec (15 samples, 3.42%) + + beg.. + + + perf_event_exec (15 samples, 3.42%) + + per.. + + + <regex_automata::meta::strategy::ReverseInner as regex_automata::meta::strategy::Strategy>::create_cache (1 samples, 0.23%) + + + + + regex_automata::hybrid::dfa::Cache::new (1 samples, 0.23%) + + + + + regex_automata::hybrid::dfa::Lazy::init_cache (1 samples, 0.23%) + + + + + alloc::raw_vec::RawVec<T,A>::reserve::do_reserve_and_handle (1 samples, 0.23%) + + + + + alloc::raw_vec::finish_grow (1 samples, 0.23%) + + + + + malloc (1 samples, 0.23%) + + + + + _int_malloc (1 samples, 0.23%) + + + + + regex_automata::nfa::thompson::pikevm::ActiveStates::new (2 samples, 0.46%) + + + + + regex_automata::nfa::thompson::pikevm::ActiveStates::reset (2 samples, 0.46%) + + + + + __memset_avx512_unaligned_erms (1 samples, 0.23%) + + + + + asm_exc_page_fault (1 samples, 0.23%) + + + + + srso_alias_return_thunk (1 samples, 0.23%) + + + + + regex_automata::hybrid::dfa::Lazy::init_cache (1 samples, 0.23%) + + + + + regex_automata::util::pool::inner::Pool<T,F>::get_slow (5 samples, 1.14%) + + + + + regex_automata::meta::regex::Builder::build_many_from_hir::{{closure}} (5 samples, 1.14%) + + + + + <regex_automata::meta::strategy::Core as regex_automata::meta::strategy::Strategy>::create_cache (4 samples, 0.91%) + + + + + regex_automata::hybrid::dfa::Cache::new (2 samples, 0.46%) + + + + + <regex_syntax::hir::translate::TranslatorI as regex_syntax::ast::visitor::Visitor>::visit_pre (2 samples, 0.46%) + + + + + regex_syntax::hir::translate::TranslatorI::push (2 samples, 0.46%) + + + + + regex_syntax::hir::translate::TranslatorI::push (4 samples, 0.91%) + + + + + regex_syntax::hir::Properties::capture (1 samples, 0.23%) + + + + + malloc (1 samples, 0.23%) + + + + + _int_malloc (1 samples, 0.23%) + + + + + malloc (2 samples, 0.46%) + + + + + _int_malloc (2 samples, 0.46%) + + + + + <regex_syntax::hir::Hir as core::ops::drop::Drop>::drop (1 samples, 0.23%) + + + + + regex_syntax::hir::Hir::into_parts (5 samples, 1.14%) + + + + + malloc (1 samples, 0.23%) + + + + + cfree@GLIBC_2.2.5 (2 samples, 0.46%) + + + + + _int_free (2 samples, 0.46%) + + + + + alloc::raw_vec::RawVec<T,A>::reserve_for_push (1 samples, 0.23%) + + + + + alloc::raw_vec::finish_grow (1 samples, 0.23%) + + + + + realloc (1 samples, 0.23%) + + + + + _int_realloc (1 samples, 0.23%) + + + + + _int_malloc (1 samples, 0.23%) + + + + + __memmove_avx512_unaligned_erms (1 samples, 0.23%) + + + + + regex_syntax::hir::Hir::concat (14 samples, 3.19%) + + reg.. + + + regex_syntax::hir::Hir::alternation (1 samples, 0.23%) + + + + + malloc (1 samples, 0.23%) + + + + + core::str::converts::from_utf8 (1 samples, 0.23%) + + + + + alloc::vec::Vec<T,A>::into_boxed_slice (1 samples, 0.23%) + + + + + _int_realloc (1 samples, 0.23%) + + + + + alloc::raw_vec::RawVec<T,A>::reserve_for_push (2 samples, 0.46%) + + + + + alloc::raw_vec::finish_grow (2 samples, 0.46%) + + + + + realloc (2 samples, 0.46%) + + + + + realloc (1 samples, 0.23%) + + + + + alloc::raw_vec::RawVec<T,A>::reserve::do_reserve_and_handle (2 samples, 0.46%) + + + + + alloc::raw_vec::finish_grow (2 samples, 0.46%) + + + + + <regex_syntax::hir::translate::TranslatorI as regex_syntax::ast::visitor::Visitor>::visit_post (31 samples, 7.06%) + + <regex_sy.. + + + <regex_syntax::hir::translate::TranslatorI as regex_syntax::ast::visitor::Visitor>::visit_class_set_item_post (1 samples, 0.23%) + + + + + regex_syntax::hir::translate::TranslatorI::push (1 samples, 0.23%) + + + + + regex_syntax::hir::translate::Translator::translate (35 samples, 7.97%) + + regex_synta.. + + + regex_syntax::ast::visitor::visit (35 samples, 7.97%) + + regex_synta.. + + + regex_syntax::ast::visitor::visit (6 samples, 1.37%) + + + + + <regex_syntax::ast::parse::NestLimiter<P> as regex_syntax::ast::visitor::Visitor>::visit_pre (6 samples, 1.37%) + + + + + regex_syntax::ast::parse::ParserI<P>::parse_capture_name (1 samples, 0.23%) + + + + + regex_syntax::ast::parse::ParserI<P>::bump (1 samples, 0.23%) + + + + + regex_syntax::ast::parse::ParserI<P>::char (1 samples, 0.23%) + + + + + regex_syntax::ast::parse::ParserI<P>::push_group (2 samples, 0.46%) + + + + + regex_syntax::ast::parse::ParserI<P>::parse_group (2 samples, 0.46%) + + + + + sysmalloc (1 samples, 0.23%) + + + + + asm_exc_page_fault (1 samples, 0.23%) + + + + + malloc (2 samples, 0.46%) + + + + + _int_malloc (2 samples, 0.46%) + + + + + regex_syntax::ast::Concat::into_ast (3 samples, 0.68%) + + + + + __rust_alloc (1 samples, 0.23%) + + + + + regex_syntax::ast::parse::ParserI<P>::push_alternate (4 samples, 0.91%) + + + + + regex_syntax::ast::parse::ParserI<P>::parse_set_class (1 samples, 0.23%) + + + + + regex_syntax::ast::parse::ParserI<P>::bump_space (1 samples, 0.23%) + + + + + regex_syntax::ast::parse::ParserI<P>::bump_space (1 samples, 0.23%) + + + + + regex_syntax::ast::parse::ParserI<P>::bump (1 samples, 0.23%) + + + + + regex_syntax::ast::parse::ParserI<P>::char (1 samples, 0.23%) + + + + + unlink_chunk.constprop.0 (1 samples, 0.23%) + + + + + _int_malloc (3 samples, 0.68%) + + + + + malloc (4 samples, 0.91%) + + + + + realloc (1 samples, 0.23%) + + + + + _int_realloc (1 samples, 0.23%) + + + + + _int_malloc (1 samples, 0.23%) + + + + + alloc::raw_vec::RawVec<T,A>::reserve_for_push (2 samples, 0.46%) + + + + + alloc::raw_vec::finish_grow (2 samples, 0.46%) + + + + + malloc (1 samples, 0.23%) + + + + + _int_malloc (1 samples, 0.23%) + + + + + regex_syntax::ast::parse::Parser::parse (29 samples, 6.61%) + + regex_syn.. + + + regex_syntax::ast::parse::ParserI<P>::parse_with_comments (29 samples, 6.61%) + + regex_syn.. + + + __memmove_avx512_unaligned_erms (1 samples, 0.23%) + + + + + unlink_chunk.constprop.0 (1 samples, 0.23%) + + + + + malloc_consolidate (3 samples, 0.68%) + + + + + core::ptr::drop_in_place<regex_syntax::ast::ClassSet> (5 samples, 1.14%) + + + + + <regex_syntax::ast::ClassSet as core::ops::drop::Drop>::drop (5 samples, 1.14%) + + + + + <alloc::vec::Vec<T,A> as alloc::vec::spec_extend::SpecExtend<T,I>>::spec_extend (4 samples, 0.91%) + + + + + alloc::raw_vec::RawVec<T,A>::reserve::do_reserve_and_handle (4 samples, 0.91%) + + + + + alloc::raw_vec::finish_grow (4 samples, 0.91%) + + + + + realloc (4 samples, 0.91%) + + + + + _int_realloc (4 samples, 0.91%) + + + + + _int_malloc (4 samples, 0.91%) + + + + + core::ptr::drop_in_place<regex_syntax::ast::Ast> (1 samples, 0.23%) + + + + + <regex_syntax::ast::Ast as core::ops::drop::Drop>::drop (1 samples, 0.23%) + + + + + cfree@GLIBC_2.2.5 (1 samples, 0.23%) + + + + + _int_free (1 samples, 0.23%) + + + + + core::ptr::drop_in_place<regex_syntax::ast::Ast> (8 samples, 1.82%) + + c.. + + + <regex_syntax::ast::Ast as core::ops::drop::Drop>::drop (1 samples, 0.23%) + + + + + _int_free (3 samples, 0.68%) + + + + + cfree@GLIBC_2.2.5 (5 samples, 1.14%) + + + + + alloc::raw_vec::RawVec<T,A>::reserve::do_reserve_and_handle (1 samples, 0.23%) + + + + + alloc::raw_vec::finish_grow (1 samples, 0.23%) + + + + + realloc (1 samples, 0.23%) + + + + + _int_realloc (1 samples, 0.23%) + + + + + _int_malloc (1 samples, 0.23%) + + + + + malloc_consolidate (1 samples, 0.23%) + + + + + unlink_chunk.constprop.0 (1 samples, 0.23%) + + + + + <alloc::vec::Vec<T,A> as alloc::vec::spec_extend::SpecExtend<T,I>>::spec_extend (2 samples, 0.46%) + + + + + core::ptr::drop_in_place<regex_syntax::ast::Ast> (16 samples, 3.64%) + + core.. + + + <regex_syntax::ast::Ast as core::ops::drop::Drop>::drop (16 samples, 3.64%) + + <reg.. + + + malloc_consolidate (1 samples, 0.23%) + + + + + _int_free (4 samples, 0.91%) + + + + + cfree@GLIBC_2.2.5 (5 samples, 1.14%) + + + + + <regex_syntax::hir::Hir as core::ops::drop::Drop>::drop (2 samples, 0.46%) + + + + + <alloc::vec::Vec<T,A> as core::ops::drop::Drop>::drop (8 samples, 1.82%) + + <.. + + + <regex_syntax::hir::Hir as core::ops::drop::Drop>::drop (8 samples, 1.82%) + + <.. + + + <alloc::vec::Vec<T,A> as alloc::vec::spec_extend::SpecExtend<T,I>>::spec_extend (1 samples, 0.23%) + + + + + s4lib::readers::syslinereader::SyslineReader::find_sysline_in_block_year (94 samples, 21.41%) + + s4lib::readers::syslinereader::Sys.. + + + s4lib::readers::syslinereader::SyslineReader::parse_datetime_in_line_cached (94 samples, 21.41%) + + s4lib::readers::syslinereader::Sys.. + + + s4lib::data::datetime::bytes_to_regex_to_datetime (94 samples, 21.41%) + + s4lib::data::datetime::bytes_to_re.. + + + once_cell::imp::OnceCell<T>::initialize (89 samples, 20.27%) + + once_cell::imp::OnceCell<T>::ini.. + + + once_cell::imp::initialize_or_wait (89 samples, 20.27%) + + once_cell::imp::initialize_or_wa.. + + + once_cell::imp::OnceCell<T>::initialize::_{{closure}} (89 samples, 20.27%) + + once_cell::imp::OnceCell<T>::ini.. + + + regex::regex::bytes::Regex::new (89 samples, 20.27%) + + regex::regex::bytes::Regex::new + + + regex::builders::Builder::build_one_bytes (89 samples, 20.27%) + + regex::builders::Builder::build_.. + + + regex_automata::meta::regex::Builder::build (89 samples, 20.27%) + + regex_automata::meta::regex::Bui.. + + + mark_page_accessed (1 samples, 0.23%) + + + + + up_read (1 samples, 0.23%) + + + + + __mem_cgroup_charge (2 samples, 0.46%) + + + + + get_mem_cgroup_from_mm (2 samples, 0.46%) + + + + + __handle_mm_fault (5 samples, 1.14%) + + + + + __alloc_pages (3 samples, 0.68%) + + + + + get_page_from_freelist (3 samples, 0.68%) + + + + + kernel_init_free_pages.part.0 (3 samples, 0.68%) + + + + + clear_page_erms (3 samples, 0.68%) + + + + + exc_page_fault (7 samples, 1.59%) + + + + + do_user_addr_fault (7 samples, 1.59%) + + + + + handle_mm_fault (6 samples, 1.37%) + + + + + asm_exc_page_fault (9 samples, 2.05%) + + a.. + + + std::io::default_read_exact (11 samples, 2.51%) + + st.. + + + <tar::entry::EntryFields as std::io::Read>::read (11 samples, 2.51%) + + <t.. + + + <std::io::Take<T> as std::io::Read>::read (11 samples, 2.51%) + + <s.. + + + <std::process::ChildStdout as std::io::Read>::read (11 samples, 2.51%) + + <s.. + + + read (11 samples, 2.51%) + + re.. + + + entry_SYSCALL_64_after_hwframe (11 samples, 2.51%) + + en.. + + + do_syscall_64 (11 samples, 2.51%) + + do.. + + + ksys_read (11 samples, 2.51%) + + ks.. + + + vfs_read (11 samples, 2.51%) + + vf.. + + + new_sync_read (11 samples, 2.51%) + + ne.. + + + filemap_read (11 samples, 2.51%) + + fi.. + + + copy_page_to_iter (10 samples, 2.28%) + + c.. + + + copy_user_enhanced_fast_string (10 samples, 2.28%) + + c.. + + + s4lib::readers::syslogprocessor::SyslogProcessor::process_stage1_blockzero_analysis (106 samples, 24.15%) + + s4lib::readers::syslogprocessor::Syslo.. + + + s4lib::readers::blockreader::BlockReader::read_block (12 samples, 2.73%) + + s4.. + + + s4lib::readers::blockreader::BlockReader::read_block_FileTar (12 samples, 2.73%) + + s4.. + + + __libc_calloc (1 samples, 0.23%) + + + + + _int_malloc (1 samples, 0.23%) + + + + + sysmalloc (1 samples, 0.23%) + + + + + asm_exc_page_fault (1 samples, 0.23%) + + + + + exc_page_fault (1 samples, 0.23%) + + + + + do_user_addr_fault (1 samples, 0.23%) + + + + + handle_mm_fault (1 samples, 0.23%) + + + + + __handle_mm_fault (1 samples, 0.23%) + + + + + __cgroup_throttle_swaprate (1 samples, 0.23%) + + + + + cfree@GLIBC_2.2.5 (1 samples, 0.23%) + + + + + _int_free (1 samples, 0.23%) + + + + + __rust_dealloc (1 samples, 0.23%) + + + + + s4lib::readers::linereader::LineReader::drop_lines (4 samples, 0.91%) + + + + + s4lib::readers::linereader::LineReader::drop_line (4 samples, 0.91%) + + + + + s4lib::readers::syslogprocessor::SyslogProcessor::drop_data_try (5 samples, 1.14%) + + + + + s4lib::readers::syslinereader::SyslineReader::drop_data (5 samples, 1.14%) + + + + + s4lib::readers::syslinereader::SyslineReader::drop_sysline (5 samples, 1.14%) + + + + + alloc::collections::btree::map::entry::OccupiedEntry<K,V,A>::remove_entry (1 samples, 0.23%) + + + + + alloc::collections::btree::remove::<impl alloc::collections::btree::node::Handle<alloc::collections::btree::node::NodeRef<alloc::collections::btree::node::marker::Mut,K,V,alloc::collections::btree::node::marker::LeafOrInternal>,alloc::collections::btree::node::marker::KV>>::remove_kv_tracking (1 samples, 0.23%) + + + + + alloc::collections::btree::remove::<impl alloc::collections::btree::node::Handle<alloc::collections::btree::node::NodeRef<alloc::collections::btree::node::marker::Mut,K,V,alloc::collections::btree::node::marker::Leaf>,alloc::collections::btree::node::marker::KV>>::remove_leaf_kv (1 samples, 0.23%) + + + + + chrono::offset::LocalResult<T>::and_then (1 samples, 0.23%) + + + + + <chrono::format::strftime::StrftimeItems as core::iter::traits::iterator::Iterator>::next (1 samples, 0.23%) + + + + + chrono::format::parse::parse_internal (4 samples, 0.91%) + + + + + s4lib::data::datetime::datetime_parse_from_str (6 samples, 1.37%) + + + + + chrono::naive::datetime::NaiveDateTime::parse_from_str (5 samples, 1.14%) + + + + + regex_automata::util::captures::Captures::get_group_by_name (4 samples, 0.91%) + + + + + core::hash::BuildHasher::hash_one (4 samples, 0.91%) + + + + + <core::hash::sip::Hasher<S> as core::hash::Hasher>::write (4 samples, 0.91%) + + + + + regex_automata::meta::strategy::Core::search_slots_nofail (3 samples, 0.68%) + + + + + regex_automata::nfa::thompson::backtrack::BoundedBacktracker::try_search_slots (3 samples, 0.68%) + + + + + regex_automata::nfa::thompson::backtrack::BoundedBacktracker::try_search_slots_imp (3 samples, 0.68%) + + + + + regex_automata::nfa::thompson::backtrack::BoundedBacktracker::search_imp (3 samples, 0.68%) + + + + + <regex_automata::meta::strategy::Core as regex_automata::meta::strategy::Strategy>::search_slots (4 samples, 0.91%) + + + + + regex_automata::hybrid::regex::Regex::try_search (1 samples, 0.23%) + + + + + s4lib::data::datetime::bytes_to_regex_to_datetime (15 samples, 3.42%) + + s4l.. + + + cfree@GLIBC_2.2.5 (1 samples, 0.23%) + + + + + _int_free (1 samples, 0.23%) + + + + + alloc::raw_vec::RawVec<T,A>::reserve::do_reserve_and_handle (1 samples, 0.23%) + + + + + alloc::raw_vec::finish_grow (1 samples, 0.23%) + + + + + malloc (1 samples, 0.23%) + + + + + _int_malloc (1 samples, 0.23%) + + + + + <alloc::vec::Vec<T> as alloc::vec::spec_from_iter::SpecFromIter<T,I>>::from_iter (1 samples, 0.23%) + + + + + malloc (1 samples, 0.23%) + + + + + _int_malloc (1 samples, 0.23%) + + + + + s4lib::readers::syslinereader::SyslineReader::parse_datetime_in_line_cached (20 samples, 4.56%) + + s4lib.. + + + alloc::collections::btree::navigate::<impl alloc::collections::btree::node::NodeRef<alloc::collections::btree::node::marker::Immut,K,V,alloc::collections::btree::node::marker::LeafOrInternal>>::range_search (3 samples, 0.68%) + + + + + rangemap::map::RangeMap<K,V>::insert (4 samples, 0.91%) + + + + + alloc::collections::btree::map::BTreeMap<K,V,A>::insert (1 samples, 0.23%) + + + + + s4lib::readers::syslinereader::SyslineReader::insert_sysline (6 samples, 1.37%) + + + + + alloc::collections::btree::navigate::<impl alloc::collections::btree::node::NodeRef<alloc::collections::btree::node::marker::Immut,K,V,alloc::collections::btree::node::marker::LeafOrInternal>>::range_search (2 samples, 0.46%) + + + + + s4lib::readers::syslinereader::SyslineReader::check_store (3 samples, 0.68%) + + + + + s4lib::readers::blockreader::BlockReader::read_block (2 samples, 0.46%) + + + + + s4lib::data::line::Line::prepend (1 samples, 0.23%) + + + + + s4lib::data::line::Line::fileoffset_end (1 samples, 0.23%) + + + + + malloc (2 samples, 0.46%) + + + + + lru::LruCache<K,V,S>::put (2 samples, 0.46%) + + + + + alloc::collections::btree::navigate::LeafRange<BorrowType,K,V>::perform_next_checked (1 samples, 0.23%) + + + + + alloc::collections::btree::map::BTreeMap<K,V,A>::contains_key (1 samples, 0.23%) + + + + + s4lib::readers::linereader::LineReader::find_line (17 samples, 3.87%) + + s4li.. + + + s4lib::readers::syslinereader::SyslineReader::find_sysline_between_datetime_filters (50 samples, 11.39%) + + s4lib::readers::s.. + + + s4lib::readers::syslinereader::SyslineReader::find_sysline_at_datetime_filter_linear_search (50 samples, 11.39%) + + s4lib::readers::s.. + + + s4lib::readers::syslinereader::SyslineReader::find_sysline_year (50 samples, 11.39%) + + s4lib::readers::s.. + + + lru::LruCache<K,V,S>::put (4 samples, 0.91%) + + + + + std::sys::unix::futex::futex_wake (1 samples, 0.23%) + + + + + syscall (1 samples, 0.23%) + + + + + [[kernel.kallsyms]] (1 samples, 0.23%) + + + + + crossbeam_channel::waker::SyncWaker::notify (2 samples, 0.46%) + + + + + alloc::vec::Vec<T,A>::remove (1 samples, 0.23%) + + + + + std::sys_common::backtrace::__rust_begin_short_backtrace (164 samples, 37.36%) + + std::sys_common::backtrace::__rust_begin_short_backtrace + + + s4::exec_fileprocessor_thread (164 samples, 37.36%) + + s4::exec_fileprocessor_thread + + + crossbeam_channel::channel::Sender<T>::send (3 samples, 0.68%) + + + + + clone3 (165 samples, 37.59%) + + clone3 + + + start_thread (165 samples, 37.59%) + + start_thread + + + std::sys::unix::thread::Thread::new::thread_start (165 samples, 37.59%) + + std::sys::unix::thread::Thread::new::thread_start + + + core::ops::function::FnOnce::call_once{{vtable.shim}} (165 samples, 37.59%) + + core::ops::function::FnOnce::call_once{{vtable.shim}} + + + std::sys::unix::thread::guard::current (1 samples, 0.23%) + + + + + pthread_getattr_np@@GLIBC_2.32 (1 samples, 0.23%) + + + + + pthread_getaffinity_np@GLIBC_2.3.4 (1 samples, 0.23%) + + + + + entry_SYSCALL_64_after_hwframe (1 samples, 0.23%) + + + + + do_syscall_64 (1 samples, 0.23%) + + + + + __x64_sys_sched_getaffinity (1 samples, 0.23%) + + + + + sched_getaffinity (1 samples, 0.23%) + + + + + find_task_by_vpid (1 samples, 0.23%) + + + + + __radix_tree_lookup (1 samples, 0.23%) + + + + + asm_exc_page_fault (1 samples, 0.23%) + + + + + exc_page_fault (1 samples, 0.23%) + + + + + do_user_addr_fault (1 samples, 0.23%) + + + + + handle_mm_fault (1 samples, 0.23%) + + + + + __handle_mm_fault (1 samples, 0.23%) + + + + + __alloc_pages (1 samples, 0.23%) + + + + + get_page_from_freelist (1 samples, 0.23%) + + + + + std::sys_common::backtrace::__rust_begin_short_backtrace (1 samples, 0.23%) + + + + + s4::exec_fileprocessor_thread (1 samples, 0.23%) + + + + + s4lib::readers::syslogprocessor::SyslogProcessor::process_stage1_blockzero_analysis (1 samples, 0.23%) + + + + + s4lib::readers::syslinereader::SyslineReader::find_sysline_in_block_year (1 samples, 0.23%) + + + + + s4lib::readers::syslinereader::SyslineReader::parse_datetime_in_line_cached (1 samples, 0.23%) + + + + + s4lib::data::datetime::bytes_to_regex_to_datetime (1 samples, 0.23%) + + + + + once_cell::imp::OnceCell<T>::initialize (1 samples, 0.23%) + + + + + once_cell::imp::initialize_or_wait (1 samples, 0.23%) + + + + + once_cell::imp::OnceCell<T>::initialize::_{{closure}} (1 samples, 0.23%) + + + + + regex::regex::bytes::Regex::new (1 samples, 0.23%) + + + + + regex::builders::Builder::build_one_bytes (1 samples, 0.23%) + + + + + regex_automata::meta::regex::Builder::build (1 samples, 0.23%) + + + + + regex_syntax::ast::parse::Parser::parse (1 samples, 0.23%) + + + + + regex_syntax::ast::parse::ParserI<P>::parse_with_comments (1 samples, 0.23%) + + + + + regex_syntax::ast::parse::ParserI<P>::parse_set_class (1 samples, 0.23%) + + + + + regex_syntax::ast::parse::ParserI<P>::push_class_open (1 samples, 0.23%) + + + + + alloc::raw_vec::RawVec<T,A>::reserve_for_push (1 samples, 0.23%) + + + + + alloc::raw_vec::finish_grow (1 samples, 0.23%) + + + + + malloc (1 samples, 0.23%) + + + + + _int_malloc (1 samples, 0.23%) + + + + + std::sys::unix::thread::Thread::new::thread_start (1 samples, 0.23%) + + + + + core::ops::function::FnOnce::call_once{{vtable.shim}} (1 samples, 0.23%) + + + + + std::sys_common::backtrace::__rust_begin_short_backtrace (1 samples, 0.23%) + + + + + s4::exec_fileprocessor_thread (1 samples, 0.23%) + + + + + s4lib::readers::syslogprocessor::SyslogProcessor::process_stage1_blockzero_analysis (1 samples, 0.23%) + + + + + s4lib::readers::syslinereader::SyslineReader::find_sysline_in_block_year (1 samples, 0.23%) + + + + + s4lib::readers::syslinereader::SyslineReader::parse_datetime_in_line_cached (1 samples, 0.23%) + + + + + s4lib::data::datetime::bytes_to_regex_to_datetime (1 samples, 0.23%) + + + + + once_cell::imp::OnceCell<T>::initialize (1 samples, 0.23%) + + + + + once_cell::imp::initialize_or_wait (1 samples, 0.23%) + + + + + once_cell::imp::OnceCell<T>::initialize::_{{closure}} (1 samples, 0.23%) + + + + + regex::regex::bytes::Regex::new (1 samples, 0.23%) + + + + + regex::builders::Builder::build_one_bytes (1 samples, 0.23%) + + + + + regex_automata::meta::regex::Builder::build (1 samples, 0.23%) + + + + + regex_syntax::ast::parse::Parser::parse (1 samples, 0.23%) + + + + + regex_syntax::ast::parse::ParserI<P>::parse_with_comments (1 samples, 0.23%) + + + + + regex_syntax::ast::parse::ParserI<P>::parse_set_class (1 samples, 0.23%) + + + + + regex_syntax::ast::parse::ParserI<P>::push_class_open (1 samples, 0.23%) + + + + + malloc (1 samples, 0.23%) + + + + + _int_malloc (1 samples, 0.23%) + + + + + s4lib::readers::syslogprocessor::SyslogProcessor::process_stage1_blockzero_analysis (2 samples, 0.46%) + + + + + s4lib::readers::syslinereader::SyslineReader::find_sysline_in_block_year (2 samples, 0.46%) + + + + + s4lib::readers::syslinereader::SyslineReader::parse_datetime_in_line_cached (2 samples, 0.46%) + + + + + s4lib::data::datetime::bytes_to_regex_to_datetime (2 samples, 0.46%) + + + + + once_cell::imp::OnceCell<T>::initialize (2 samples, 0.46%) + + + + + once_cell::imp::initialize_or_wait (2 samples, 0.46%) + + + + + once_cell::imp::OnceCell<T>::initialize::_{{closure}} (2 samples, 0.46%) + + + + + regex::regex::bytes::Regex::new (2 samples, 0.46%) + + + + + regex::builders::Builder::build_one_bytes (2 samples, 0.46%) + + + + + regex_automata::meta::regex::Builder::build (2 samples, 0.46%) + + + + + regex_automata::meta::strategy::new (2 samples, 0.46%) + + + + + regex_automata::nfa::thompson::compiler::Compiler::build_many_from_hir (2 samples, 0.46%) + + + + + regex_automata::nfa::thompson::builder::Builder::build (2 samples, 0.46%) + + + + + alloc::raw_vec::RawVec<T,A>::reserve_for_push (1 samples, 0.23%) + + + + + alloc::raw_vec::finish_grow (1 samples, 0.23%) + + + + + realloc (1 samples, 0.23%) + + + + + _int_realloc (1 samples, 0.23%) + + + + + _int_malloc (1 samples, 0.23%) + + + + + regex_automata::nfa::thompson::literal_trie::LiteralTrie::add (3 samples, 0.68%) + + + + + regex_automata::nfa::thompson::compiler::Compiler::build_many_from_hir (4 samples, 0.91%) + + + + + <core::iter::adapters::map::Map<I,F> as core::iter::traits::iterator::Iterator>::next (4 samples, 0.91%) + + + + + regex_automata::nfa::thompson::compiler::Compiler::c_cap (4 samples, 0.91%) + + + + + regex_automata::nfa::thompson::compiler::Compiler::c (4 samples, 0.91%) + + + + + regex_automata::nfa::thompson::compiler::Compiler::c_cap (4 samples, 0.91%) + + + + + regex_automata::nfa::thompson::compiler::Compiler::c (4 samples, 0.91%) + + + + + regex_automata::meta::wrappers::OnePass::new (1 samples, 0.23%) + + + + + regex_automata::dfa::onepass::Builder::build_from_nfa (1 samples, 0.23%) + + + + + regex_syntax::hir::literal::Seq::optimize_by_preference (1 samples, 0.23%) + + + + + regex_syntax::hir::literal::PreferenceTrie::minimize (1 samples, 0.23%) + + + + + alloc::vec::Vec<T,A>::retain_mut (1 samples, 0.23%) + + + + + regex_syntax::hir::literal::PreferenceTrie::insert (1 samples, 0.23%) + + + + + s4lib::readers::syslinereader::SyslineReader::parse_datetime_in_line_cached (7 samples, 1.59%) + + + + + s4lib::data::datetime::bytes_to_regex_to_datetime (7 samples, 1.59%) + + + + + once_cell::imp::OnceCell<T>::initialize (7 samples, 1.59%) + + + + + once_cell::imp::initialize_or_wait (7 samples, 1.59%) + + + + + once_cell::imp::OnceCell<T>::initialize::_{{closure}} (7 samples, 1.59%) + + + + + regex::regex::bytes::Regex::new (7 samples, 1.59%) + + + + + regex::builders::Builder::build_one_bytes (7 samples, 1.59%) + + + + + regex_automata::meta::regex::Builder::build (7 samples, 1.59%) + + + + + regex_automata::meta::strategy::new (7 samples, 1.59%) + + + + + regex_automata::meta::reverse_inner::extract (2 samples, 0.46%) + + + + + regex_automata::meta::reverse_inner::flatten (1 samples, 0.23%) + + + + + <alloc::vec::Vec<T> as alloc::vec::spec_from_iter::SpecFromIter<T,I>>::from_iter (1 samples, 0.23%) + + + + + regex_automata::meta::reverse_inner::flatten (1 samples, 0.23%) + + + + + regex_syntax::hir::Properties::literal (1 samples, 0.23%) + + + + + malloc (1 samples, 0.23%) + + + + + _int_malloc (1 samples, 0.23%) + + + + + regex_automata::nfa::thompson::builder::Builder::add (1 samples, 0.23%) + + + + + alloc::raw_vec::finish_grow (1 samples, 0.23%) + + + + + alloc::raw_vec::RawVec<T,A>::reserve_for_push (2 samples, 0.46%) + + + + + regex_automata::nfa::thompson::literal_trie::LiteralTrie::compile (7 samples, 1.59%) + + + + + realloc (1 samples, 0.23%) + + + + + _int_realloc (1 samples, 0.23%) + + + + + asm_exc_page_fault (1 samples, 0.23%) + + + + + exc_page_fault (1 samples, 0.23%) + + + + + do_user_addr_fault (1 samples, 0.23%) + + + + + handle_mm_fault (1 samples, 0.23%) + + + + + __handle_mm_fault (1 samples, 0.23%) + + + + + lru_cache_add (1 samples, 0.23%) + + + + + _int_malloc (1 samples, 0.23%) + + + + + malloc (2 samples, 0.46%) + + + + + alloc::raw_vec::RawVec<T,A>::reserve_for_push (4 samples, 0.91%) + + + + + alloc::raw_vec::finish_grow (4 samples, 0.91%) + + + + + malloc (1 samples, 0.23%) + + + + + alloc::raw_vec::finish_grow (2 samples, 0.46%) + + + + + regex_automata::nfa::thompson::literal_trie::LiteralTrie::add (10 samples, 2.28%) + + r.. + + + alloc::raw_vec::RawVec<T,A>::reserve::do_reserve_and_handle (6 samples, 1.37%) + + + + + malloc_consolidate (1 samples, 0.23%) + + + + + regex_automata::nfa::thompson::compiler::Compiler::build_many_from_hir (20 samples, 4.56%) + + regex.. + + + <core::iter::adapters::map::Map<I,F> as core::iter::traits::iterator::Iterator>::next (20 samples, 4.56%) + + <core.. + + + regex_automata::nfa::thompson::compiler::Compiler::c_cap (20 samples, 4.56%) + + regex.. + + + regex_automata::nfa::thompson::compiler::Compiler::c (20 samples, 4.56%) + + regex.. + + + regex_automata::nfa::thompson::compiler::Compiler::c_cap (20 samples, 4.56%) + + regex.. + + + regex_automata::nfa::thompson::compiler::Compiler::c (20 samples, 4.56%) + + regex.. + + + cfree@GLIBC_2.2.5 (3 samples, 0.68%) + + + + + _int_free (3 samples, 0.68%) + + + + + regex_automata::meta::wrappers::OnePass::new (1 samples, 0.23%) + + + + + regex_automata::dfa::onepass::Builder::build_from_nfa (1 samples, 0.23%) + + + + + alloc::raw_vec::RawVec<T,A>::reserve::do_reserve_and_handle (1 samples, 0.23%) + + + + + alloc::raw_vec::finish_grow (1 samples, 0.23%) + + + + + malloc (1 samples, 0.23%) + + + + + _int_malloc (1 samples, 0.23%) + + + + + s4lib::data::datetime::bytes_to_regex_to_datetime (22 samples, 5.01%) + + s4lib:.. + + + once_cell::imp::OnceCell<T>::initialize (22 samples, 5.01%) + + once_c.. + + + once_cell::imp::initialize_or_wait (22 samples, 5.01%) + + once_c.. + + + once_cell::imp::OnceCell<T>::initialize::_{{closure}} (22 samples, 5.01%) + + once_c.. + + + regex::regex::bytes::Regex::new (22 samples, 5.01%) + + regex:.. + + + regex::builders::Builder::build_one_bytes (22 samples, 5.01%) + + regex:.. + + + regex_automata::meta::regex::Builder::build (22 samples, 5.01%) + + regex_.. + + + regex_automata::meta::strategy::new (22 samples, 5.01%) + + regex_.. + + + regex_automata::meta::reverse_inner::extract (1 samples, 0.23%) + + + + + regex_syntax::hir::literal::Seq::optimize_by_preference (1 samples, 0.23%) + + + + + regex_syntax::hir::literal::PreferenceTrie::minimize (1 samples, 0.23%) + + + + + alloc::vec::Vec<T,A>::retain_mut (1 samples, 0.23%) + + + + + regex_syntax::hir::literal::PreferenceTrie::insert (1 samples, 0.23%) + + + + + alloc::raw_vec::RawVec<T,A>::reserve_for_push (1 samples, 0.23%) + + + + + alloc::raw_vec::finish_grow (1 samples, 0.23%) + + + + + realloc (1 samples, 0.23%) + + + + + _int_realloc (1 samples, 0.23%) + + + + + _int_malloc (1 samples, 0.23%) + + + + + sysmalloc (1 samples, 0.23%) + + + + + asm_exc_page_fault (1 samples, 0.23%) + + + + + exc_page_fault (1 samples, 0.23%) + + + + + do_user_addr_fault (1 samples, 0.23%) + + + + + handle_mm_fault (1 samples, 0.23%) + + + + + __handle_mm_fault (1 samples, 0.23%) + + + + + lru_cache_add (1 samples, 0.23%) + + + + + __pagevec_lru_add (1 samples, 0.23%) + + + + + regex_syntax::ast::parse::ParserI<P>::push_class_open (1 samples, 0.23%) + + + + + alloc::raw_vec::RawVec<T,A>::reserve_for_push (1 samples, 0.23%) + + + + + alloc::raw_vec::finish_grow (1 samples, 0.23%) + + + + + malloc (1 samples, 0.23%) + + + + + _int_malloc (1 samples, 0.23%) + + + + + malloc_consolidate (1 samples, 0.23%) + + + + + regex_syntax::ast::parse::Parser::parse (2 samples, 0.46%) + + + + + regex_syntax::ast::parse::ParserI<P>::parse_with_comments (2 samples, 0.46%) + + + + + regex_syntax::ast::parse::ParserI<P>::parse_set_class (2 samples, 0.46%) + + + + + regex_syntax::ast::parse::ParserI<P>::pop_class (1 samples, 0.23%) + + + + + regex_syntax::ast::parse::ParserI<P>::pop_class_op (1 samples, 0.23%) + + + + + __memmove_avx512_unaligned_erms (1 samples, 0.23%) + + + + + regex_automata::util::prefilter::suffixes (1 samples, 0.23%) + + + + + regex_syntax::hir::literal::Extractor::extract (1 samples, 0.23%) + + + + + regex_syntax::hir::literal::Extractor::extract (1 samples, 0.23%) + + + + + regex_syntax::hir::literal::Extractor::union (1 samples, 0.23%) + + + + + __memcmp_evex_movbe (1 samples, 0.23%) + + + + + regex_syntax::hir::literal::Seq::optimize_by_preference (1 samples, 0.23%) + + + + + regex_syntax::hir::literal::PreferenceTrie::minimize (1 samples, 0.23%) + + + + + alloc::vec::Vec<T,A>::retain_mut (1 samples, 0.23%) + + + + + regex_syntax::hir::literal::PreferenceTrie::insert (1 samples, 0.23%) + + + + + alloc::raw_vec::RawVec<T,A>::reserve::do_reserve_and_handle (1 samples, 0.23%) + + + + + alloc::raw_vec::finish_grow (1 samples, 0.23%) + + + + + realloc (1 samples, 0.23%) + + + + + _int_realloc (1 samples, 0.23%) + + + + + _int_malloc (1 samples, 0.23%) + + + + + regex_syntax::hir::literal::Extractor::extract (1 samples, 0.23%) + + + + + regex_syntax::hir::literal::Extractor::extract (1 samples, 0.23%) + + + + + regex_syntax::hir::literal::Extractor::cross (1 samples, 0.23%) + + + + + malloc (1 samples, 0.23%) + + + + + malloc (1 samples, 0.23%) + + + + + regex_automata::util::prefilter::prefixes (4 samples, 0.91%) + + + + + regex_syntax::hir::literal::Extractor::extract (3 samples, 0.68%) + + + + + regex_syntax::hir::literal::Extractor::cross (2 samples, 0.46%) + + + + + __memmove_avx512_unaligned_erms (1 samples, 0.23%) + + + + + regex_automata::nfa::thompson::compiler::Compiler::c_at_least (1 samples, 0.23%) + + + + + regex_automata::nfa::thompson::nfa::Inner::remap (1 samples, 0.23%) + + + + + regex_automata::nfa::thompson::nfa::Inner::add (2 samples, 0.46%) + + + + + malloc (1 samples, 0.23%) + + + + + regex_automata::nfa::thompson::builder::Builder::build (5 samples, 1.14%) + + + + + __memmove_avx512_unaligned_erms (1 samples, 0.23%) + + + + + regex_automata::nfa::thompson::compiler::Compiler::build_many_from_hir (7 samples, 1.59%) + + + + + <core::iter::adapters::map::Map<I,F> as core::iter::traits::iterator::Iterator>::next (1 samples, 0.23%) + + + + + regex_automata::nfa::thompson::compiler::Compiler::c_cap (1 samples, 0.23%) + + + + + regex_automata::nfa::thompson::builder::Builder::add_capture_start (1 samples, 0.23%) + + + + + alloc::raw_vec::RawVec<T,A>::reserve_for_push (1 samples, 0.23%) + + + + + alloc::raw_vec::finish_grow (1 samples, 0.23%) + + + + + malloc (1 samples, 0.23%) + + + + + cfree@GLIBC_2.2.5 (1 samples, 0.23%) + + + + + _int_free (1 samples, 0.23%) + + + + + malloc_consolidate (1 samples, 0.23%) + + + + + core::ptr::drop_in_place<core::cell::RefCell<regex_automata::nfa::thompson::compiler::Utf8State>> (5 samples, 1.14%) + + + + + unlink_chunk.constprop.0 (1 samples, 0.23%) + + + + + malloc_consolidate (3 samples, 0.68%) + + + + + cfree@GLIBC_2.2.5 (6 samples, 1.37%) + + + + + _int_free (6 samples, 1.37%) + + + + + core::ptr::drop_in_place<regex_automata::nfa::thompson::compiler::Compiler> (12 samples, 2.73%) + + co.. + + + s4::exec_fileprocessor_thread (27 samples, 6.15%) + + s4::exec.. + + + s4lib::readers::syslogprocessor::SyslogProcessor::process_stage1_blockzero_analysis (27 samples, 6.15%) + + s4lib::r.. + + + s4lib::readers::syslinereader::SyslineReader::find_sysline_in_block_year (27 samples, 6.15%) + + s4lib::r.. + + + s4lib::readers::syslinereader::SyslineReader::parse_datetime_in_line_cached (27 samples, 6.15%) + + s4lib::r.. + + + s4lib::data::datetime::bytes_to_regex_to_datetime (27 samples, 6.15%) + + s4lib::d.. + + + once_cell::imp::OnceCell<T>::initialize (27 samples, 6.15%) + + once_cel.. + + + once_cell::imp::initialize_or_wait (27 samples, 6.15%) + + once_cel.. + + + once_cell::imp::OnceCell<T>::initialize::_{{closure}} (27 samples, 6.15%) + + once_cel.. + + + regex::regex::bytes::Regex::new (27 samples, 6.15%) + + regex::r.. + + + regex::builders::Builder::build_one_bytes (27 samples, 6.15%) + + regex::b.. + + + regex_automata::meta::regex::Builder::build (27 samples, 6.15%) + + regex_au.. + + + regex_automata::meta::strategy::new (25 samples, 5.69%) + + regex_a.. + + + aho_corasick::nfa::noncontiguous::Compiler::shuffle (1 samples, 0.23%) + + + + + aho_corasick::util::remapper::Remapper::remap (1 samples, 0.23%) + + + + + <aho_corasick::nfa::noncontiguous::NFA as aho_corasick::util::remapper::Remappable>::remap (1 samples, 0.23%) + + + + + cfree@GLIBC_2.2.5 (1 samples, 0.23%) + + + + + _int_free (1 samples, 0.23%) + + + + + aho_corasick::nfa::noncontiguous::Compiler::fill_failure_transitions (3 samples, 0.68%) + + + + + aho_corasick::nfa::noncontiguous::Compiler::add_dead_state_loop (1 samples, 0.23%) + + + + + aho_corasick::nfa::noncontiguous::NFA::init_full_state (1 samples, 0.23%) + + + + + regex_automata::util::prefilter::teddy::Teddy::new (6 samples, 1.37%) + + + + + aho_corasick::nfa::noncontiguous::Builder::build (6 samples, 1.37%) + + + + + aho_corasick::nfa::noncontiguous::Compiler::init_unanchored_start_state (1 samples, 0.23%) + + + + + aho_corasick::nfa::noncontiguous::NFA::init_full_state (1 samples, 0.23%) + + + + + alloc::raw_vec::RawVec<T,A>::reserve_for_push (1 samples, 0.23%) + + + + + alloc::raw_vec::finish_grow (1 samples, 0.23%) + + + + + realloc (1 samples, 0.23%) + + + + + _int_realloc (1 samples, 0.23%) + + + + + _int_malloc (1 samples, 0.23%) + + + + + malloc_consolidate (1 samples, 0.23%) + + + + + regex_automata::meta::strategy::new (8 samples, 1.82%) + + r.. + + + regex_automata::meta::reverse_inner::extract (8 samples, 1.82%) + + r.. + + + regex_automata::util::prefilter::Choice::new (8 samples, 1.82%) + + r.. + + + regex_automata::util::prefilter::aho_corasick::AhoCorasick::new (2 samples, 0.46%) + + + + + aho_corasick::ahocorasick::AhoCorasickBuilder::build (2 samples, 0.46%) + + + + + aho_corasick::nfa::noncontiguous::Builder::build (2 samples, 0.46%) + + + + + aho_corasick::nfa::noncontiguous::Compiler::densify (1 samples, 0.23%) + + + + + regex_automata::util::prefilter::Prefilter::new (1 samples, 0.23%) + + + + + regex_automata::util::prefilter::Choice::new (1 samples, 0.23%) + + + + + regex_automata::util::prefilter::teddy::Teddy::new (1 samples, 0.23%) + + + + + aho_corasick::dfa::Builder::build_from_noncontiguous (1 samples, 0.23%) + + + + + regex_automata::nfa::thompson::compiler::Utf8Compiler::new (1 samples, 0.23%) + + + + + regex_automata::nfa::thompson::map::Utf8BoundedMap::clear (1 samples, 0.23%) + + + + + <T as alloc::vec::spec_from_elem::SpecFromElem>::from_elem (1 samples, 0.23%) + + + + + malloc (1 samples, 0.23%) + + + + + _int_malloc (1 samples, 0.23%) + + + + + malloc_consolidate (1 samples, 0.23%) + + + + + unlink_chunk.constprop.0 (1 samples, 0.23%) + + + + + regex_automata::nfa::thompson::compiler::Compiler::build_many_from_hir (4 samples, 0.91%) + + + + + <core::iter::adapters::map::Map<I,F> as core::iter::traits::iterator::Iterator>::next (4 samples, 0.91%) + + + + + regex_automata::nfa::thompson::compiler::Compiler::c_cap (4 samples, 0.91%) + + + + + regex_automata::nfa::thompson::compiler::Compiler::c (4 samples, 0.91%) + + + + + regex_automata::nfa::thompson::compiler::Compiler::c_cap (4 samples, 0.91%) + + + + + regex_automata::nfa::thompson::compiler::Compiler::c (4 samples, 0.91%) + + + + + regex_automata::nfa::thompson::compiler::Compiler::c_alt_iter (4 samples, 0.91%) + + + + + regex_automata::nfa::thompson::compiler::Compiler::c (4 samples, 0.91%) + + + + + regex_automata::nfa::thompson::compiler::Compiler::c (3 samples, 0.68%) + + + + + regex_automata::nfa::thompson::compiler::Utf8Compiler::new (3 samples, 0.68%) + + + + + regex_automata::nfa::thompson::map::Utf8BoundedMap::clear (3 samples, 0.68%) + + + + + <T as alloc::vec::spec_from_elem::SpecFromElem>::from_elem (3 samples, 0.68%) + + + + + alloc::vec::Vec<T,A>::extend_with (3 samples, 0.68%) + + + + + aho_corasick::packed::api::Builder::extend (1 samples, 0.23%) + + + + + aho_corasick::packed::pattern::Patterns::add (1 samples, 0.23%) + + + + + aho_corasick::packed::api::Builder::build (1 samples, 0.23%) + + + + + aho_corasick::packed::rabinkarp::RabinKarp::new (1 samples, 0.23%) + + + + + alloc::raw_vec::RawVec<T,A>::reserve_for_push (1 samples, 0.23%) + + + + + alloc::raw_vec::finish_grow (1 samples, 0.23%) + + + + + realloc (1 samples, 0.23%) + + + + + _int_realloc (1 samples, 0.23%) + + + + + _int_malloc (1 samples, 0.23%) + + + + + regex_automata::meta::regex::Builder::build (10 samples, 2.28%) + + r.. + + + regex_automata::meta::strategy::new (10 samples, 2.28%) + + r.. + + + regex_automata::meta::reverse_inner::extract (5 samples, 1.14%) + + + + + regex_automata::util::prefilter::Choice::new (5 samples, 1.14%) + + + + + regex_automata::util::prefilter::teddy::Teddy::new (5 samples, 1.14%) + + + + + aho_corasick::dfa::Builder::build_from_noncontiguous (3 samples, 0.68%) + + + + + aho_corasick::dfa::Builder::finish_build_one_start::{{closure}} (3 samples, 0.68%) + + + + + regex_automata::nfa::thompson::compiler::Compiler::c_cap (1 samples, 0.23%) + + + + + regex_automata::nfa::thompson::compiler::Compiler::c (1 samples, 0.23%) + + + + + regex_automata::nfa::thompson::literal_trie::LiteralTrie::add (1 samples, 0.23%) + + + + + regex_automata::nfa::thompson::builder::Builder::add (3 samples, 0.68%) + + + + + regex::regex::bytes::Regex::new (6 samples, 1.37%) + + + + + regex::builders::Builder::build_one_bytes (6 samples, 1.37%) + + + + + regex_automata::meta::regex::Builder::build (6 samples, 1.37%) + + + + + regex_automata::meta::strategy::new (6 samples, 1.37%) + + + + + regex_automata::nfa::thompson::compiler::Compiler::build_many_from_hir (6 samples, 1.37%) + + + + + <core::iter::adapters::map::Map<I,F> as core::iter::traits::iterator::Iterator>::next (6 samples, 1.37%) + + + + + regex_automata::nfa::thompson::compiler::Compiler::c_cap (6 samples, 1.37%) + + + + + regex_automata::nfa::thompson::compiler::Compiler::c (6 samples, 1.37%) + + + + + regex_automata::nfa::thompson::compiler::Compiler::c_cap (6 samples, 1.37%) + + + + + regex_automata::nfa::thompson::compiler::Compiler::c (6 samples, 1.37%) + + + + + regex_automata::nfa::thompson::compiler::Compiler::c_alt_iter (5 samples, 1.14%) + + + + + regex_automata::nfa::thompson::compiler::Compiler::c (5 samples, 1.14%) + + + + + regex_automata::nfa::thompson::compiler::Compiler::c_cap (3 samples, 0.68%) + + + + + regex_automata::nfa::thompson::compiler::Compiler::c (3 samples, 0.68%) + + + + + regex_automata::nfa::thompson::literal_trie::LiteralTrie::compile (3 samples, 0.68%) + + + + + alloc::raw_vec::RawVec<T,A>::reserve_for_push (3 samples, 0.68%) + + + + + alloc::raw_vec::finish_grow (3 samples, 0.68%) + + + + + malloc (3 samples, 0.68%) + + + + + malloc (1 samples, 0.23%) + + + + + _int_malloc (1 samples, 0.23%) + + + + + sysmalloc (1 samples, 0.23%) + + + + + __mprotect (1 samples, 0.23%) + + + + + entry_SYSCALL_64_after_hwframe (1 samples, 0.23%) + + + + + do_syscall_64 (1 samples, 0.23%) + + + + + __x64_sys_mprotect (1 samples, 0.23%) + + + + + do_mprotect_pkey (1 samples, 0.23%) + + + + + mprotect_fixup (1 samples, 0.23%) + + + + + perf_event_mmap (1 samples, 0.23%) + + + + + perf_iterate_sb (1 samples, 0.23%) + + + + + perf_iterate_ctx (1 samples, 0.23%) + + + + + perf_event_mmap_output (1 samples, 0.23%) + + + + + __perf_event_header__init_id (1 samples, 0.23%) + + + + + irqentry_enter (1 samples, 0.23%) + + + + + srso_alias_return_thunk (1 samples, 0.23%) + + + + + srso_alias_safe_ret (1 samples, 0.23%) + + + + + __handle_mm_fault (4 samples, 0.91%) + + + + + __alloc_pages (4 samples, 0.91%) + + + + + get_page_from_freelist (4 samples, 0.91%) + + + + + kernel_init_free_pages.part.0 (4 samples, 0.91%) + + + + + clear_page_erms (4 samples, 0.91%) + + + + + asm_exc_page_fault (6 samples, 1.37%) + + + + + exc_page_fault (6 samples, 1.37%) + + + + + do_user_addr_fault (5 samples, 1.14%) + + + + + handle_mm_fault (5 samples, 1.14%) + + + + + __memmove_avx512_unaligned_erms (1 samples, 0.23%) + + + + + regex_automata::nfa::thompson::compiler::Utf8Compiler::new (13 samples, 2.96%) + + reg.. + + + regex_automata::nfa::thompson::map::Utf8BoundedMap::clear (13 samples, 2.96%) + + reg.. + + + <T as alloc::vec::spec_from_elem::SpecFromElem>::from_elem (13 samples, 2.96%) + + <T .. + + + alloc::vec::Vec<T,A>::extend_with (12 samples, 2.73%) + + al.. + + + regex_automata::nfa::thompson::builder::Builder::patch (1 samples, 0.23%) + + + + + regex_automata::nfa::thompson::builder::Builder::add (1 samples, 0.23%) + + + + + regex_automata::nfa::thompson::compiler::Compiler::c (3 samples, 0.68%) + + + + + alloc::raw_vec::RawVec<T,A>::allocate_in (1 samples, 0.23%) + + + + + malloc (1 samples, 0.23%) + + + + + _int_malloc (1 samples, 0.23%) + + + + + malloc_consolidate (1 samples, 0.23%) + + + + + unlink_chunk.constprop.0 (1 samples, 0.23%) + + + + + regex_automata::nfa::thompson::compiler::Compiler::c_alt_iter (18 samples, 4.10%) + + rege.. + + + regex_automata::nfa::thompson::compiler::Compiler::c (18 samples, 4.10%) + + rege.. + + + regex_automata::nfa::thompson::builder::Builder::add (2 samples, 0.46%) + + + + + alloc::raw_vec::RawVec<T,A>::reserve_for_push (2 samples, 0.46%) + + + + + alloc::raw_vec::finish_grow (2 samples, 0.46%) + + + + + realloc (2 samples, 0.46%) + + + + + _int_realloc (2 samples, 0.46%) + + + + + _int_free (1 samples, 0.23%) + + + + + lru_cache_add (1 samples, 0.23%) + + + + + __pagevec_lru_add (1 samples, 0.23%) + + + + + page_mapping (1 samples, 0.23%) + + + + + __mem_cgroup_charge (1 samples, 0.23%) + + + + + charge_memcg (1 samples, 0.23%) + + + + + do_user_addr_fault (3 samples, 0.68%) + + + + + handle_mm_fault (3 samples, 0.68%) + + + + + __handle_mm_fault (3 samples, 0.68%) + + + + + __alloc_pages (1 samples, 0.23%) + + + + + get_page_from_freelist (1 samples, 0.23%) + + + + + kernel_init_free_pages.part.0 (1 samples, 0.23%) + + + + + clear_page_erms (1 samples, 0.23%) + + + + + asm_exc_page_fault (5 samples, 1.14%) + + + + + exc_page_fault (5 samples, 1.14%) + + + + + __memmove_avx512_unaligned_erms (1 samples, 0.23%) + + + + + regex_automata::nfa::thompson::compiler::Utf8Compiler::new (10 samples, 2.28%) + + r.. + + + regex_automata::nfa::thompson::map::Utf8BoundedMap::clear (10 samples, 2.28%) + + r.. + + + <T as alloc::vec::spec_from_elem::SpecFromElem>::from_elem (10 samples, 2.28%) + + <.. + + + alloc::vec::Vec<T,A>::extend_with (10 samples, 2.28%) + + a.. + + + regex::builders::Builder::build_one_bytes (32 samples, 7.29%) + + regex::bui.. + + + regex_automata::meta::regex::Builder::build (32 samples, 7.29%) + + regex_auto.. + + + regex_automata::meta::strategy::new (32 samples, 7.29%) + + regex_auto.. + + + regex_automata::nfa::thompson::compiler::Compiler::build_many_from_hir (32 samples, 7.29%) + + regex_auto.. + + + <core::iter::adapters::map::Map<I,F> as core::iter::traits::iterator::Iterator>::next (32 samples, 7.29%) + + <core::ite.. + + + regex_automata::nfa::thompson::compiler::Compiler::c_cap (32 samples, 7.29%) + + regex_auto.. + + + regex_automata::nfa::thompson::compiler::Compiler::c (32 samples, 7.29%) + + regex_auto.. + + + regex_automata::nfa::thompson::compiler::Compiler::c_cap (32 samples, 7.29%) + + regex_auto.. + + + regex_automata::nfa::thompson::compiler::Compiler::c (32 samples, 7.29%) + + regex_auto.. + + + regex_automata::nfa::thompson::compiler::Compiler::c (11 samples, 2.51%) + + re.. + + + regex_automata::nfa::thompson::builder::Builder::add (1 samples, 0.23%) + + + + + alloc::raw_vec::RawVec<T,A>::reserve_for_push (1 samples, 0.23%) + + + + + alloc::raw_vec::finish_grow (1 samples, 0.23%) + + + + + realloc (1 samples, 0.23%) + + + + + _int_realloc (1 samples, 0.23%) + + + + + _int_malloc (1 samples, 0.23%) + + + + + malloc_consolidate (1 samples, 0.23%) + + + + + once_cell::imp::initialize_or_wait (1 samples, 0.23%) + + + + + once_cell::imp::OnceCell<T>::initialize::_{{closure}} (1 samples, 0.23%) + + + + + regex::regex::bytes::Regex::new (1 samples, 0.23%) + + + + + regex::builders::Builder::build_one_bytes (1 samples, 0.23%) + + + + + regex_automata::meta::regex::Builder::build (1 samples, 0.23%) + + + + + regex_automata::meta::strategy::new (1 samples, 0.23%) + + + + + regex_automata::nfa::thompson::compiler::Compiler::build_many_from_hir (1 samples, 0.23%) + + + + + <core::iter::adapters::map::Map<I,F> as core::iter::traits::iterator::Iterator>::next (1 samples, 0.23%) + + + + + regex_automata::nfa::thompson::compiler::Compiler::c_cap (1 samples, 0.23%) + + + + + regex_automata::nfa::thompson::compiler::Compiler::c (1 samples, 0.23%) + + + + + regex_automata::nfa::thompson::compiler::Compiler::c_cap (1 samples, 0.23%) + + + + + regex_automata::nfa::thompson::compiler::Compiler::c (1 samples, 0.23%) + + + + + regex_automata::nfa::thompson::literal_trie::LiteralTrie::compile (1 samples, 0.23%) + + + + + alloc::raw_vec::RawVec<T,A>::reserve_for_push (1 samples, 0.23%) + + + + + alloc::raw_vec::finish_grow (1 samples, 0.23%) + + + + + realloc (1 samples, 0.23%) + + + + + _int_realloc (1 samples, 0.23%) + + + + + __memmove_avx512_unaligned_erms (1 samples, 0.23%) + + + + + regex_automata::nfa::thompson::compiler::Compiler::build_many_from_hir (1 samples, 0.23%) + + + + + <core::iter::adapters::map::Map<I,F> as core::iter::traits::iterator::Iterator>::next (1 samples, 0.23%) + + + + + regex_automata::nfa::thompson::compiler::Compiler::c_cap (1 samples, 0.23%) + + + + + regex_automata::nfa::thompson::compiler::Compiler::c (1 samples, 0.23%) + + + + + regex_automata::nfa::thompson::compiler::Compiler::c_bounded (1 samples, 0.23%) + + + + + regex_automata::nfa::thompson::compiler::Compiler::c_concat (1 samples, 0.23%) + + + + + regex_automata::nfa::thompson::compiler::Compiler::c (1 samples, 0.23%) + + + + + regex_automata::nfa::thompson::builder::Builder::add (1 samples, 0.23%) + + + + + once_cell::imp::OnceCell<T>::initialize (2 samples, 0.46%) + + + + + once_cell::imp::initialize_or_wait (2 samples, 0.46%) + + + + + once_cell::imp::OnceCell<T>::initialize::_{{closure}} (2 samples, 0.46%) + + + + + regex::regex::bytes::Regex::new (2 samples, 0.46%) + + + + + regex::builders::Builder::build_one_bytes (2 samples, 0.46%) + + + + + regex_automata::meta::regex::Builder::build (2 samples, 0.46%) + + + + + regex_automata::meta::strategy::new (2 samples, 0.46%) + + + + + regex_automata::meta::wrappers::OnePass::new (1 samples, 0.23%) + + + + + regex_automata::dfa::onepass::Builder::build_from_nfa (1 samples, 0.23%) + + + + + regex_automata::dfa::onepass::InternalBuilder::compile_transition (1 samples, 0.23%) + + + + + regex_automata::dfa::onepass::InternalBuilder::add_dfa_state_for_nfa_state (1 samples, 0.23%) + + + + + alloc::raw_vec::RawVec<T,A>::reserve::do_reserve_and_handle (1 samples, 0.23%) + + + + + alloc::raw_vec::finish_grow (1 samples, 0.23%) + + + + + realloc (1 samples, 0.23%) + + + + + _int_realloc (1 samples, 0.23%) + + + + + _int_malloc (1 samples, 0.23%) + + + + + all (439 samples, 100%) + + + + + gen-1000-3-foob (286 samples, 65.15%) + + gen-1000-3-foob + + + [unknown] (120 samples, 27.33%) + + [unknown] + + + once_cell::imp::OnceCell<T>::initialize::_{{closure}} (1 samples, 0.23%) + + + + + regex::regex::bytes::Regex::new (1 samples, 0.23%) + + + + + regex::builders::Builder::build_one_bytes (1 samples, 0.23%) + + + + + regex_automata::meta::regex::Builder::build (1 samples, 0.23%) + + + + + regex_automata::meta::strategy::new (1 samples, 0.23%) + + + + + regex_automata::meta::reverse_inner::extract (1 samples, 0.23%) + + + + + regex_syntax::hir::literal::Extractor::extract (1 samples, 0.23%) + + + + + regex_syntax::hir::literal::Extractor::extract (1 samples, 0.23%) + + + + + regex_syntax::hir::literal::Extractor::union (1 samples, 0.23%) + + + + + <alloc::vec::Vec<T,A> as alloc::vec::spec_extend::SpecExtend<T,I>>::spec_extend (1 samples, 0.23%) + + + + + alloc::raw_vec::RawVec<T,A>::reserve::do_reserve_and_handle (1 samples, 0.23%) + + + + + alloc::raw_vec::finish_grow (1 samples, 0.23%) + + + + + realloc (1 samples, 0.23%) + + + + + _int_realloc (1 samples, 0.23%) + + + + + _int_malloc (1 samples, 0.23%) + + + + + malloc_consolidate (1 samples, 0.23%) + + + + + unlink_chunk.constprop.0 (1 samples, 0.23%) + + + + + diff --git a/releases/0.7.75/flamegraph-syslog-xz.svg b/releases/0.7.75/flamegraph-syslog-xz.svg new file mode 100644 index 00000000..fb16d242 --- /dev/null +++ b/releases/0.7.75/flamegraph-syslog-xz.svg @@ -0,0 +1,5467 @@ + + + + + + + + + + + + + + + Flame Graph: super_speedy_syslog_searcher 0.7.75; git: d799548f; -freq 8000; created 20240707T231128-0700; flamegraph-flamegraph 0.6.5; rustc 1.70.0
; command: s4 ./logs/other/tests/gen-1000-3-foobar.log.xz + + Reset Zoom + Search + + + + ret_from_fork (22 samples, 4.81%) + + ret_fr.. + + + schedule_tail (22 samples, 4.81%) + + schedu.. + + + finish_task_switch.isra.0 (22 samples, 4.81%) + + finish.. + + + __perf_event_task_sched_in (22 samples, 4.81%) + + __perf.. + + + __raw_callee_save___pv_queued_spin_unlock (22 samples, 4.81%) + + __raw_.. + + + page_remove_rmap (3 samples, 0.66%) + + + + + __mod_lruvec_page_state (3 samples, 0.66%) + + + + + __mod_memcg_lruvec_state (3 samples, 0.66%) + + + + + unmap_vmas (4 samples, 0.88%) + + + + + unmap_page_range (4 samples, 0.88%) + + + + + __list_del_entry_valid (1 samples, 0.22%) + + + + + free_pcppages_bulk (3 samples, 0.66%) + + + + + __free_one_page (2 samples, 0.44%) + + + + + __x64_sys_exit_group (9 samples, 1.97%) + + _.. + + + do_group_exit (9 samples, 1.97%) + + d.. + + + do_exit (9 samples, 1.97%) + + d.. + + + mmput (9 samples, 1.97%) + + m.. + + + exit_mmap (9 samples, 1.97%) + + e.. + + + tlb_finish_mmu (5 samples, 1.09%) + + + + + release_pages (5 samples, 1.09%) + + + + + free_unref_page_list (5 samples, 1.09%) + + + + + vm_mmap_pgoff (1 samples, 0.22%) + + + + + do_mmap (1 samples, 0.22%) + + + + + mmap_region (1 samples, 0.22%) + + + + + vma_link (1 samples, 0.22%) + + + + + entry_SYSCALL_64_after_hwframe (11 samples, 2.41%) + + en.. + + + do_syscall_64 (11 samples, 2.41%) + + do.. + + + __x64_sys_execve (2 samples, 0.44%) + + + + + do_execveat_common.isra.0 (2 samples, 0.44%) + + + + + bprm_execve (2 samples, 0.44%) + + + + + load_elf_binary (2 samples, 0.44%) + + + + + setup_arg_pages (1 samples, 0.22%) + + + + + shift_arg_pages (1 samples, 0.22%) + + + + + __vma_adjust (1 samples, 0.22%) + + + + + down_write (1 samples, 0.22%) + + + + + std::sys::unix::thread::Thread::new::thread_start (1 samples, 0.22%) + + + + + std::sys::unix::stack_overflow::imp::make_handler (1 samples, 0.22%) + + + + + __mmap (1 samples, 0.22%) + + + + + entry_SYSCALL_64_after_hwframe (1 samples, 0.22%) + + + + + do_syscall_64 (1 samples, 0.22%) + + + + + __x64_sys_mmap (1 samples, 0.22%) + + + + + clone3 (2 samples, 0.44%) + + + + + start_thread (2 samples, 0.44%) + + + + + entry_SYSCALL_64 (1 samples, 0.22%) + + + + + _dl_unload_cache (1 samples, 0.22%) + + + + + munmap (1 samples, 0.22%) + + + + + entry_SYSCALL_64_after_hwframe (1 samples, 0.22%) + + + + + do_syscall_64 (1 samples, 0.22%) + + + + + __x64_sys_munmap (1 samples, 0.22%) + + + + + __vm_munmap (1 samples, 0.22%) + + + + + __do_munmap (1 samples, 0.22%) + + + + + find_vma (1 samples, 0.22%) + + + + + vmacache_update (1 samples, 0.22%) + + + + + _dl_relocate_object (1 samples, 0.22%) + + + + + asm_exc_page_fault (1 samples, 0.22%) + + + + + _dl_start (3 samples, 0.66%) + + + + + _dl_sysdep_start (3 samples, 0.66%) + + + + + dl_main (3 samples, 0.66%) + + + + + _dl_map_object_deps (1 samples, 0.22%) + + + + + _dl_catch_exception (1 samples, 0.22%) + + + + + openaux (1 samples, 0.22%) + + + + + _dl_map_object (1 samples, 0.22%) + + + + + _dl_load_cache_lookup (1 samples, 0.22%) + + + + + asm_exc_page_fault (1 samples, 0.22%) + + + + + srso_alias_return_thunk (1 samples, 0.22%) + + + + + srso_alias_safe_ret (1 samples, 0.22%) + + + + + std::io::buffered::bufwriter::BufWriter<W>::flush_buf (1 samples, 0.22%) + + + + + __memrchr_evex (3 samples, 0.66%) + + + + + __memmove_avx512_unaligned_erms (1 samples, 0.22%) + + + + + fsnotify (1 samples, 0.22%) + + + + + __fsnotify_parent (2 samples, 0.44%) + + + + + vfs_write (3 samples, 0.66%) + + + + + __fdget_pos (1 samples, 0.22%) + + + + + entry_SYSCALL_64_after_hwframe (5 samples, 1.09%) + + + + + do_syscall_64 (5 samples, 1.09%) + + + + + ksys_write (5 samples, 1.09%) + + + + + __GI___libc_write (6 samples, 1.31%) + + + + + <std::io::stdio::StdoutLock as std::io::Write>::write (13 samples, 2.84%) + + <s.. + + + std::io::Write::write_all (14 samples, 3.06%) + + std.. + + + <termcolor::LossyStandardStream<W> as std::io::Write>::write (14 samples, 3.06%) + + <te.. + + + <std::io::stdio::Stdout as std::io::Write>::write (14 samples, 3.06%) + + <st.. + + + <&std::io::stdio::Stdout as std::io::Write>::write (14 samples, 3.06%) + + <&s.. + + + __memmove_avx512_unaligned_erms (3 samples, 0.66%) + + + + + termcolor::Ansi<W>::write_color (2 samples, 0.44%) + + + + + std::io::Write::write_all (2 samples, 0.44%) + + + + + <std::io::stdio::Stdout as std::io::Write>::write (2 samples, 0.44%) + + + + + <&std::io::stdio::Stdout as std::io::Write>::write (2 samples, 0.44%) + + + + + <std::io::stdio::StdoutLock as std::io::Write>::write (2 samples, 0.44%) + + + + + __memrchr_evex (2 samples, 0.44%) + + + + + <termcolor::LossyStandardStream<W> as termcolor::WriteColor>::set_color (3 samples, 0.66%) + + + + + std::io::Write::write_all (1 samples, 0.22%) + + + + + <std::io::stdio::Stdout as std::io::Write>::write (1 samples, 0.22%) + + + + + <&std::io::stdio::Stdout as std::io::Write>::write (1 samples, 0.22%) + + + + + <std::io::stdio::StdoutLock as std::io::Write>::write (1 samples, 0.22%) + + + + + __memmove_avx512_unaligned_erms (1 samples, 0.22%) + + + + + syscall_return_via_sysret (2 samples, 0.44%) + + + + + syscall_exit_to_user_mode (1 samples, 0.22%) + + + + + exit_to_user_mode_prepare (1 samples, 0.22%) + + + + + write_null (1 samples, 0.22%) + + + + + security_file_permission (1 samples, 0.22%) + + + + + fsnotify (1 samples, 0.22%) + + + + + dput (1 samples, 0.22%) + + + + + lockref_put_return (1 samples, 0.22%) + + + + + __fsnotify_parent (4 samples, 0.88%) + + + + + vfs_write (9 samples, 1.97%) + + v.. + + + fput_many (2 samples, 0.44%) + + + + + asm_sysvec_hyperv_stimer0 (1 samples, 0.22%) + + + + + sysvec_hyperv_stimer0 (1 samples, 0.22%) + + + + + irq_exit_rcu (1 samples, 0.22%) + + + + + __softirqentry_text_start (1 samples, 0.22%) + + + + + rcu_core (1 samples, 0.22%) + + + + + tlb_remove_table_rcu (1 samples, 0.22%) + + + + + __put_page (1 samples, 0.22%) + + + + + __mem_cgroup_uncharge (1 samples, 0.22%) + + + + + uncharge_page (1 samples, 0.22%) + + + + + srso_alias_safe_ret (1 samples, 0.22%) + + + + + __fget_light (2 samples, 0.44%) + + + + + __fget_files (1 samples, 0.22%) + + + + + __fdget_pos (3 samples, 0.66%) + + + + + entry_SYSCALL_64_after_hwframe (16 samples, 3.50%) + + ent.. + + + do_syscall_64 (16 samples, 3.50%) + + do_.. + + + ksys_write (15 samples, 3.28%) + + ksy.. + + + entry_SYSCALL_64 (1 samples, 0.22%) + + + + + __x86_indirect_thunk_rax (1 samples, 0.22%) + + + + + __GI___pthread_disable_asynccancel (2 samples, 0.44%) + + + + + std::io::buffered::bufwriter::BufWriter<W>::flush_buf (24 samples, 5.25%) + + std::i.. + + + __GI___libc_write (24 samples, 5.25%) + + __GI__.. + + + <&std::io::stdio::Stdout as std::io::Write>::flush (26 samples, 5.69%) + + <&std::.. + + + <std::io::stdio::Stdout as std::io::Write>::flush (27 samples, 5.91%) + + <std::io.. + + + s4lib::printer::printers::PrinterLogMessage::print_sysline_color (51 samples, 11.16%) + + s4lib::printer::.. + + + hashbrown::set::HashSet<T,S,A>::remove (1 samples, 0.22%) + + + + + hashbrown::raw::RawTable<T,A>::remove_entry (1 samples, 0.22%) + + + + + crossbeam_channel::select::SelectedOperation::recv (1 samples, 0.22%) + + + + + crossbeam_channel::channel::read (1 samples, 0.22%) + + + + + __memmove_avx512_unaligned_erms (1 samples, 0.22%) + + + + + crossbeam_channel::context::Context::wait_until (1 samples, 0.22%) + + + + + __sched_yield (1 samples, 0.22%) + + + + + asm_exc_page_fault (1 samples, 0.22%) + + + + + exc_page_fault (1 samples, 0.22%) + + + + + do_user_addr_fault (1 samples, 0.22%) + + + + + handle_mm_fault (1 samples, 0.22%) + + + + + __handle_mm_fault (1 samples, 0.22%) + + + + + filemap_map_pages (1 samples, 0.22%) + + + + + next_uptodate_page (1 samples, 0.22%) + + + + + crossbeam_channel::select::Select::select (2 samples, 0.44%) + + + + + crossbeam_channel::select::run_select (2 samples, 0.44%) + + + + + crossbeam_channel::context::Context::with::{{closure}} (2 samples, 0.44%) + + + + + <crossbeam_channel::channel::Receiver<T> as crossbeam_channel::select::SelectHandle>::unregister (1 samples, 0.22%) + + + + + crossbeam_channel::waker::SyncWaker::unregister (1 samples, 0.22%) + + + + + crossbeam_channel::select::Select::new (1 samples, 0.22%) + + + + + malloc (1 samples, 0.22%) + + + + + core::ptr::drop_in_place<s4lib::common::FileProcessingResult<std::io::error::Error>> (1 samples, 0.22%) + + + + + alloc::collections::btree::navigate::<impl alloc::collections::btree::node::Handle<alloc::collections::btree::node::NodeRef<alloc::collections::btree::node::marker::ValMut,K,V,alloc::collections::btree::node::marker::Leaf>,alloc::collections::btree::node::marker::Edge>>::next_unchecked (1 samples, 0.22%) + + + + + alloc::collections::btree::map::BTreeMap<K,V,A>::insert (2 samples, 0.44%) + + + + + s4::processing_loop (61 samples, 13.35%) + + s4::processing_loop + + + __memmove_avx512_unaligned_erms (1 samples, 0.22%) + + + + + std::sys_common::backtrace::__rust_begin_short_backtrace (62 samples, 13.57%) + + std::sys_common::bac.. + + + s4::main (62 samples, 13.57%) + + s4::main + + + clap_builder::builder::command::Command::get_matches_from (1 samples, 0.22%) + + + + + clap_builder::builder::command::Command::_do_parse (1 samples, 0.22%) + + + + + clap_builder::parser::parser::Parser::get_matches_with (1 samples, 0.22%) + + + + + clap_builder::parser::validator::Validator::validate (1 samples, 0.22%) + + + + + clap_builder::util::flat_map::FlatMap<K,V>::extend_unchecked (1 samples, 0.22%) + + + + + _start (66 samples, 14.44%) + + _start + + + __libc_start_main@@GLIBC_2.34 (63 samples, 13.79%) + + __libc_start_main@@GL.. + + + __libc_start_call_main (63 samples, 13.79%) + + __libc_start_call_main + + + main (63 samples, 13.79%) + + main + + + std::rt::lang_start_internal (63 samples, 13.79%) + + std::rt::lang_start_i.. + + + std::rt::lang_start::_{{closure}} (63 samples, 13.79%) + + std::rt::lang_start::.. + + + asm_exc_page_fault (1 samples, 0.22%) + + + + + exc_page_fault (1 samples, 0.22%) + + + + + do_user_addr_fault (1 samples, 0.22%) + + + + + handle_mm_fault (1 samples, 0.22%) + + + + + __handle_mm_fault (1 samples, 0.22%) + + + + + filemap_map_pages (1 samples, 0.22%) + + + + + next_uptodate_page (1 samples, 0.22%) + + + + + s4 (102 samples, 22.32%) + + s4 + + + _dl_relocate_object (1 samples, 0.22%) + + + + + _dl_lookup_symbol_x (1 samples, 0.22%) + + + + + perf-exec (11 samples, 2.41%) + + pe.. + + + entry_SYSCALL_64_after_hwframe (11 samples, 2.41%) + + en.. + + + do_syscall_64 (11 samples, 2.41%) + + do.. + + + __x64_sys_execve (11 samples, 2.41%) + + __.. + + + do_execveat_common.isra.0 (11 samples, 2.41%) + + do.. + + + bprm_execve (11 samples, 2.41%) + + bp.. + + + load_elf_binary (11 samples, 2.41%) + + lo.. + + + begin_new_exec (11 samples, 2.41%) + + be.. + + + perf_event_exec (11 samples, 2.41%) + + pe.. + + + __raw_callee_save___pv_queued_spin_unlock (11 samples, 2.41%) + + __.. + + + <regex_automata::meta::strategy::ReverseInner as regex_automata::meta::strategy::Strategy>::create_cache (1 samples, 0.22%) + + + + + regex_automata::nfa::thompson::pikevm::ActiveStates::new (1 samples, 0.22%) + + + + + regex_automata::nfa::thompson::pikevm::ActiveStates::reset (1 samples, 0.22%) + + + + + __memset_avx512_unaligned_erms (1 samples, 0.22%) + + + + + asm_exc_page_fault (1 samples, 0.22%) + + + + + exc_page_fault (1 samples, 0.22%) + + + + + do_user_addr_fault (1 samples, 0.22%) + + + + + handle_mm_fault (1 samples, 0.22%) + + + + + __handle_mm_fault (1 samples, 0.22%) + + + + + __alloc_pages (1 samples, 0.22%) + + + + + get_page_from_freelist (1 samples, 0.22%) + + + + + kernel_init_free_pages.part.0 (1 samples, 0.22%) + + + + + clear_page_erms (1 samples, 0.22%) + + + + + unlink_chunk.constprop.0 (1 samples, 0.22%) + + + + + regex_automata::util::pool::inner::Pool<T,F>::get_slow (3 samples, 0.66%) + + + + + regex_automata::meta::regex::Builder::build_many_from_hir::{{closure}} (3 samples, 0.66%) + + + + + <regex_automata::meta::strategy::Core as regex_automata::meta::strategy::Strategy>::create_cache (2 samples, 0.44%) + + + + + regex_automata::nfa::thompson::pikevm::ActiveStates::new (2 samples, 0.44%) + + + + + regex_automata::nfa::thompson::pikevm::ActiveStates::reset (2 samples, 0.44%) + + + + + alloc::raw_vec::RawVec<T,A>::reserve::do_reserve_and_handle (2 samples, 0.44%) + + + + + alloc::raw_vec::finish_grow (2 samples, 0.44%) + + + + + malloc (2 samples, 0.44%) + + + + + _int_malloc (2 samples, 0.44%) + + + + + malloc_consolidate (2 samples, 0.44%) + + + + + regex_automata::meta::regex::Regex::create_captures (1 samples, 0.22%) + + + + + malloc (1 samples, 0.22%) + + + + + regex_automata::meta::regex::Builder::new (1 samples, 0.22%) + + + + + <regex_syntax::hir::translate::TranslatorBuilder as core::default::Default>::default (1 samples, 0.22%) + + + + + regex_syntax::hir::translate::TranslatorI::push (1 samples, 0.22%) + + + + + <regex_syntax::hir::translate::TranslatorI as regex_syntax::ast::visitor::Visitor>::visit_pre (1 samples, 0.22%) + + + + + regex_syntax::hir::translate::TranslatorI::push (1 samples, 0.22%) + + + + + regex_syntax::unicode::SimpleCaseFolder::overlaps (1 samples, 0.22%) + + + + + regex_syntax::hir::translate::TranslatorI::push (3 samples, 0.66%) + + + + + regex_syntax::hir::Properties::capture (1 samples, 0.22%) + + + + + malloc (1 samples, 0.22%) + + + + + _int_malloc (1 samples, 0.22%) + + + + + regex_syntax::hir::Hir::into_parts (2 samples, 0.44%) + + + + + cfree@GLIBC_2.2.5 (2 samples, 0.44%) + + + + + _int_free (2 samples, 0.44%) + + + + + alloc::raw_vec::RawVec<T,A>::reserve_for_push (1 samples, 0.22%) + + + + + alloc::raw_vec::finish_grow (1 samples, 0.22%) + + + + + malloc (1 samples, 0.22%) + + + + + regex_syntax::hir::Hir::concat (7 samples, 1.53%) + + + + + regex_syntax::hir::Properties::alternation (1 samples, 0.22%) + + + + + regex_syntax::hir::Hir::alternation (2 samples, 0.44%) + + + + + regex_syntax::hir::Hir::into_parts (1 samples, 0.22%) + + + + + regex_syntax::hir::ClassUnicode::new (1 samples, 0.22%) + + + + + core::str::converts::from_utf8 (1 samples, 0.22%) + + + + + core::ptr::drop_in_place<regex_syntax::hir::translate::HirFrame> (1 samples, 0.22%) + + + + + alloc::vec::Vec<T,A>::into_boxed_slice (2 samples, 0.44%) + + + + + realloc (2 samples, 0.44%) + + + + + _int_malloc (2 samples, 0.44%) + + + + + alloc::raw_vec::RawVec<T,A>::reserve_for_push (3 samples, 0.66%) + + + + + alloc::raw_vec::finish_grow (3 samples, 0.66%) + + + + + realloc (3 samples, 0.66%) + + + + + _int_realloc (3 samples, 0.66%) + + + + + __memmove_avx512_unaligned_erms (1 samples, 0.22%) + + + + + asm_exc_page_fault (1 samples, 0.22%) + + + + + exc_page_fault (1 samples, 0.22%) + + + + + alloc::raw_vec::RawVec<T,A>::reserve::do_reserve_and_handle (1 samples, 0.22%) + + + + + alloc::raw_vec::finish_grow (1 samples, 0.22%) + + + + + realloc (1 samples, 0.22%) + + + + + __rust_alloc (1 samples, 0.22%) + + + + + __memmove_avx512_unaligned_erms (1 samples, 0.22%) + + + + + <regex_syntax::hir::translate::TranslatorI as regex_syntax::ast::visitor::Visitor>::visit_post (31 samples, 6.78%) + + <regex_sy.. + + + <regex_syntax::hir::translate::TranslatorI as regex_syntax::ast::visitor::Visitor>::visit_class_set_item_pre (1 samples, 0.22%) + + + + + regex_syntax::hir::interval::IntervalSet<I>::canonicalize (1 samples, 0.22%) + + + + + regex_syntax::hir::translate::Translator::translate (36 samples, 7.88%) + + regex_synta.. + + + regex_syntax::ast::visitor::visit (36 samples, 7.88%) + + regex_synta.. + + + <regex_syntax::hir::translate::TranslatorI as regex_syntax::ast::visitor::Visitor>::visit_class_set_item_post (2 samples, 0.44%) + + + + + <regex_syntax::ast::parse::NestLimiter<P> as regex_syntax::ast::visitor::Visitor>::visit_pre (2 samples, 0.44%) + + + + + <regex_syntax::ast::parse::NestLimiter<P> as regex_syntax::ast::visitor::Visitor>::visit_class_set_item_pre (1 samples, 0.22%) + + + + + regex_syntax::ast::visitor::visit (6 samples, 1.31%) + + + + + regex_syntax::ast::parse::ParserI<P>::char (1 samples, 0.22%) + + + + + regex_syntax::ast::parse::ParserI<P>::bump (1 samples, 0.22%) + + + + + realloc (1 samples, 0.22%) + + + + + _int_realloc (1 samples, 0.22%) + + + + + _int_malloc (1 samples, 0.22%) + + + + + unlink_chunk.constprop.0 (1 samples, 0.22%) + + + + + alloc::raw_vec::RawVec<T,A>::reserve_for_push (2 samples, 0.44%) + + + + + alloc::raw_vec::finish_grow (2 samples, 0.44%) + + + + + regex_syntax::ast::parse::ParserI<P>::push_alternate (8 samples, 1.75%) + + + + + regex_syntax::ast::parse::ParserI<P>::maybe_parse_ascii_class (1 samples, 0.22%) + + + + + regex_syntax::ast::parse::ParserI<P>::char (1 samples, 0.22%) + + + + + regex_syntax::ast::ClassSetUnion::push (1 samples, 0.22%) + + + + + __memmove_avx512_unaligned_erms (1 samples, 0.22%) + + + + + regex_syntax::ast::parse::ParserI<P>::parse_set_class (5 samples, 1.09%) + + + + + regex_syntax::ast::parse::ParserI<P>::parse_counted_repetition (1 samples, 0.22%) + + + + + regex_syntax::ast::parse::ParserI<P>::char (3 samples, 0.66%) + + + + + malloc (5 samples, 1.09%) + + + + + _int_malloc (5 samples, 1.09%) + + + + + asm_exc_page_fault (1 samples, 0.22%) + + + + + exc_page_fault (1 samples, 0.22%) + + + + + do_user_addr_fault (1 samples, 0.22%) + + + + + handle_mm_fault (1 samples, 0.22%) + + + + + __handle_mm_fault (1 samples, 0.22%) + + + + + filemap_map_pages (1 samples, 0.22%) + + + + + next_uptodate_page (1 samples, 0.22%) + + + + + regex_syntax::ast::parse::ParserI<P>::parse_with_comments (33 samples, 7.22%) + + regex_synt.. + + + regex_syntax::ast::parse::Parser::parse (34 samples, 7.44%) + + regex_synt.. + + + malloc (1 samples, 0.22%) + + + + + unlink_chunk.constprop.0 (1 samples, 0.22%) + + + + + malloc_consolidate (2 samples, 0.44%) + + + + + alloc::raw_vec::RawVec<T,A>::reserve::do_reserve_and_handle (3 samples, 0.66%) + + + + + alloc::raw_vec::finish_grow (3 samples, 0.66%) + + + + + realloc (3 samples, 0.66%) + + + + + _int_realloc (3 samples, 0.66%) + + + + + _int_malloc (3 samples, 0.66%) + + + + + core::ptr::drop_in_place<regex_syntax::ast::ClassSet> (4 samples, 0.88%) + + + + + <regex_syntax::ast::ClassSet as core::ops::drop::Drop>::drop (4 samples, 0.88%) + + + + + <alloc::vec::Vec<T,A> as alloc::vec::spec_extend::SpecExtend<T,I>>::spec_extend (4 samples, 0.88%) + + + + + __memmove_avx512_unaligned_erms (1 samples, 0.22%) + + + + + cfree@GLIBC_2.2.5 (2 samples, 0.44%) + + + + + _int_free (2 samples, 0.44%) + + + + + <regex_syntax::ast::Ast as core::ops::drop::Drop>::drop (1 samples, 0.22%) + + + + + core::ptr::drop_in_place<regex_syntax::ast::Ast> (8 samples, 1.75%) + + + + + _int_free (1 samples, 0.22%) + + + + + cfree@GLIBC_2.2.5 (3 samples, 0.66%) + + + + + <alloc::vec::Vec<T,A> as alloc::vec::spec_extend::SpecExtend<T,I>>::spec_extend (2 samples, 0.44%) + + + + + core::ptr::drop_in_place<regex_syntax::ast::Ast> (15 samples, 3.28%) + + cor.. + + + <regex_syntax::ast::Ast as core::ops::drop::Drop>::drop (15 samples, 3.28%) + + <re.. + + + _int_free (1 samples, 0.22%) + + + + + regex::builders::Builder::build_one_bytes (89 samples, 19.47%) + + regex::builders::Builder::build.. + + + regex_automata::meta::regex::Builder::build (88 samples, 19.26%) + + regex_automata::meta::regex::B.. + + + <alloc::vec::Vec<T,A> as core::ops::drop::Drop>::drop (3 samples, 0.66%) + + + + + <regex_syntax::hir::Hir as core::ops::drop::Drop>::drop (3 samples, 0.66%) + + + + + cfree@GLIBC_2.2.5 (3 samples, 0.66%) + + + + + once_cell::imp::OnceCell<T>::initialize::_{{closure}} (91 samples, 19.91%) + + once_cell::imp::OnceCell<T>::in.. + + + regex::regex::bytes::Regex::new (91 samples, 19.91%) + + regex::regex::bytes::Regex::new + + + <alloc::vec::Vec<T,A> as alloc::vec::spec_extend::SpecExtend<T,I>>::spec_extend (2 samples, 0.44%) + + + + + <core::iter::adapters::map::Map<I,F> as core::iter::traits::iterator::Iterator>::fold (2 samples, 0.44%) + + + + + malloc (2 samples, 0.44%) + + + + + _int_malloc (2 samples, 0.44%) + + + + + malloc_consolidate (2 samples, 0.44%) + + + + + s4lib::readers::syslogprocessor::SyslogProcessor::process_stage1_blockzero_analysis (96 samples, 21.01%) + + s4lib::readers::syslogprocessor::.. + + + s4lib::readers::syslinereader::SyslineReader::find_sysline_in_block_year (96 samples, 21.01%) + + s4lib::readers::syslinereader::Sy.. + + + s4lib::readers::syslinereader::SyslineReader::parse_datetime_in_line_cached (96 samples, 21.01%) + + s4lib::readers::syslinereader::Sy.. + + + s4lib::data::datetime::bytes_to_regex_to_datetime (96 samples, 21.01%) + + s4lib::data::datetime::bytes_to_r.. + + + once_cell::imp::OnceCell<T>::initialize (92 samples, 20.13%) + + once_cell::imp::OnceCell<T>::ini.. + + + once_cell::imp::initialize_or_wait (92 samples, 20.13%) + + once_cell::imp::initialize_or_wa.. + + + s4lib::readers::linereader::LineReader::drop_lines (1 samples, 0.22%) + + + + + s4lib::readers::linereader::LineReader::drop_line (1 samples, 0.22%) + + + + + s4lib::readers::syslinereader::SyslineReader::drop_sysline (2 samples, 0.44%) + + + + + cfree@GLIBC_2.2.5 (1 samples, 0.22%) + + + + + _int_free (1 samples, 0.22%) + + + + + <alloc::collections::btree::map::Iter<K,V> as core::iter::traits::iterator::Iterator>::next (1 samples, 0.22%) + + + + + s4lib::readers::syslogprocessor::SyslogProcessor::drop_data_try (4 samples, 0.88%) + + + + + s4lib::readers::syslinereader::SyslineReader::drop_data (4 samples, 0.88%) + + + + + s4lib::data::datetime::datetime_parse_from_str (2 samples, 0.44%) + + + + + chrono::naive::datetime::NaiveDateTime::parse_from_str (2 samples, 0.44%) + + + + + chrono::format::parse::parse_internal (2 samples, 0.44%) + + + + + <core::hash::sip::Hasher<S> as core::hash::Hasher>::write (2 samples, 0.44%) + + + + + core::hash::BuildHasher::hash_one (3 samples, 0.66%) + + + + + regex_automata::util::captures::Captures::get_group_by_name (4 samples, 0.88%) + + + + + regex_automata::meta::regex::RegexInfo::props_union (1 samples, 0.22%) + + + + + regex_automata::meta::regex::Regex::create_captures (1 samples, 0.22%) + + + + + __memset_avx512_unaligned_erms (1 samples, 0.22%) + + + + + regex_automata::nfa::thompson::backtrack::BoundedBacktracker::try_search_slots (3 samples, 0.66%) + + + + + regex_automata::nfa::thompson::backtrack::BoundedBacktracker::try_search_slots_imp (3 samples, 0.66%) + + + + + regex_automata::nfa::thompson::backtrack::BoundedBacktracker::search_imp (3 samples, 0.66%) + + + + + regex_automata::meta::strategy::Core::search_slots_nofail (4 samples, 0.88%) + + + + + regex_automata::hybrid::search::find_fwd (1 samples, 0.22%) + + + + + regex_automata::hybrid::regex::Regex::try_search (2 samples, 0.44%) + + + + + <regex_automata::meta::strategy::Core as regex_automata::meta::strategy::Strategy>::search_slots (7 samples, 1.53%) + + + + + s4lib::data::datetime::bytes_to_regex_to_datetime (18 samples, 3.94%) + + s4li.. + + + hashbrown::map::HashMap<K,V,S,A>::remove (1 samples, 0.22%) + + + + + lru::LruCache<K,V,S>::put (2 samples, 0.44%) + + + + + _int_malloc (1 samples, 0.22%) + + + + + malloc (2 samples, 0.44%) + + + + + <alloc::vec::Vec<T> as alloc::vec::spec_from_iter::SpecFromIter<T,I>>::from_iter (3 samples, 0.66%) + + + + + <alloc::collections::btree::map::Iter<K,V> as core::iter::traits::iterator::Iterator>::next (1 samples, 0.22%) + + + + + s4lib::readers::syslinereader::SyslineReader::parse_datetime_in_line_cached (26 samples, 5.69%) + + s4lib::.. + + + alloc::collections::btree::node::Handle<alloc::collections::btree::node::NodeRef<alloc::collections::btree::node::marker::Mut,K,V,alloc::collections::btree::node::marker::Leaf>,alloc::collections::btree::node::marker::Edge>::insert_recursing (1 samples, 0.22%) + + + + + malloc (1 samples, 0.22%) + + + + + rangemap::map::RangeMap<K,V>::insert (3 samples, 0.66%) + + + + + alloc::collections::btree::map::BTreeMap<K,V,A>::insert (3 samples, 0.66%) + + + + + alloc::collections::btree::node::Handle<alloc::collections::btree::node::NodeRef<alloc::collections::btree::node::marker::Mut,K,V,alloc::collections::btree::node::marker::Leaf>,alloc::collections::btree::node::marker::Edge>::insert_recursing (1 samples, 0.22%) + + + + + s4lib::readers::syslinereader::SyslineReader::insert_sysline (5 samples, 1.09%) + + + + + alloc::collections::btree::map::entry::VacantEntry<K,V,A>::insert (2 samples, 0.44%) + + + + + s4lib::readers::linereader::LineReader::insert_line (1 samples, 0.22%) + + + + + alloc::collections::btree::map::BTreeMap<K,V,A>::insert (1 samples, 0.22%) + + + + + alloc::collections::btree::navigate::<impl alloc::collections::btree::node::NodeRef<alloc::collections::btree::node::marker::Immut,K,V,alloc::collections::btree::node::marker::LeafOrInternal>>::range_search (2 samples, 0.44%) + + + + + s4lib::readers::linereader::LineReader::get_linep (4 samples, 0.88%) + + + + + s4lib::data::line::Line::prepend (1 samples, 0.22%) + + + + + malloc (2 samples, 0.44%) + + + + + s4lib::readers::linereader::LineReader::find_line (20 samples, 4.38%) + + s4lib.. + + + s4lib::readers::syslinereader::SyslineReader::find_sysline_between_datetime_filters (52 samples, 11.38%) + + s4lib::readers::s.. + + + s4lib::readers::syslinereader::SyslineReader::find_sysline_at_datetime_filter_linear_search (52 samples, 11.38%) + + s4lib::readers::s.. + + + s4lib::readers::syslinereader::SyslineReader::find_sysline_year (52 samples, 11.38%) + + s4lib::readers::s.. + + + lru::LruCache<K,V,S>::put (1 samples, 0.22%) + + + + + crossbeam_channel::context::Context::with::{{closure}} (1 samples, 0.22%) + + + + + __sched_yield (1 samples, 0.22%) + + + + + entry_SYSCALL_64_after_hwframe (1 samples, 0.22%) + + + + + do_syscall_64 (1 samples, 0.22%) + + + + + syscall_enter_from_user_mode (1 samples, 0.22%) + + + + + clone3 (157 samples, 34.35%) + + clone3 + + + start_thread (157 samples, 34.35%) + + start_thread + + + std::sys::unix::thread::Thread::new::thread_start (157 samples, 34.35%) + + std::sys::unix::thread::Thread::new::thread_start + + + core::ops::function::FnOnce::call_once{{vtable.shim}} (157 samples, 34.35%) + + core::ops::function::FnOnce::call_once{{vtable.shim}} + + + std::sys_common::backtrace::__rust_begin_short_backtrace (157 samples, 34.35%) + + std::sys_common::backtrace::__rust_begin_short_backtrace + + + s4::exec_fileprocessor_thread (157 samples, 34.35%) + + s4::exec_fileprocessor_thread + + + crossbeam_channel::channel::Sender<T>::send (5 samples, 1.09%) + + + + + __memmove_avx512_unaligned_erms (1 samples, 0.22%) + + + + + std::sys_common::backtrace::__rust_begin_short_backtrace (2 samples, 0.44%) + + + + + s4::exec_fileprocessor_thread (2 samples, 0.44%) + + + + + s4lib::readers::syslogprocessor::SyslogProcessor::process_stage1_blockzero_analysis (2 samples, 0.44%) + + + + + s4lib::readers::syslinereader::SyslineReader::find_sysline_in_block_year (2 samples, 0.44%) + + + + + s4lib::readers::syslinereader::SyslineReader::parse_datetime_in_line_cached (2 samples, 0.44%) + + + + + s4lib::data::datetime::bytes_to_regex_to_datetime (2 samples, 0.44%) + + + + + once_cell::imp::OnceCell<T>::initialize (2 samples, 0.44%) + + + + + once_cell::imp::initialize_or_wait (2 samples, 0.44%) + + + + + once_cell::imp::OnceCell<T>::initialize::_{{closure}} (2 samples, 0.44%) + + + + + regex::regex::bytes::Regex::new (2 samples, 0.44%) + + + + + regex::builders::Builder::build_one_bytes (2 samples, 0.44%) + + + + + regex_automata::meta::regex::Builder::build (2 samples, 0.44%) + + + + + regex_syntax::ast::parse::Parser::parse (2 samples, 0.44%) + + + + + regex_syntax::ast::parse::ParserI<P>::parse_with_comments (2 samples, 0.44%) + + + + + regex_syntax::ast::parse::ParserI<P>::parse_set_class (2 samples, 0.44%) + + + + + regex_syntax::ast::parse::ParserI<P>::pop_class (2 samples, 0.44%) + + + + + std::sys::unix::thread::Thread::new::thread_start (1 samples, 0.22%) + + + + + core::ops::function::FnOnce::call_once{{vtable.shim}} (1 samples, 0.22%) + + + + + std::sys_common::backtrace::__rust_begin_short_backtrace (1 samples, 0.22%) + + + + + s4::exec_fileprocessor_thread (1 samples, 0.22%) + + + + + s4lib::readers::syslogprocessor::SyslogProcessor::process_stage1_blockzero_analysis (1 samples, 0.22%) + + + + + s4lib::readers::syslinereader::SyslineReader::find_sysline_in_block_year (1 samples, 0.22%) + + + + + s4lib::readers::syslinereader::SyslineReader::parse_datetime_in_line_cached (1 samples, 0.22%) + + + + + s4lib::data::datetime::bytes_to_regex_to_datetime (1 samples, 0.22%) + + + + + once_cell::imp::OnceCell<T>::initialize (1 samples, 0.22%) + + + + + once_cell::imp::initialize_or_wait (1 samples, 0.22%) + + + + + once_cell::imp::OnceCell<T>::initialize::_{{closure}} (1 samples, 0.22%) + + + + + regex::regex::bytes::Regex::new (1 samples, 0.22%) + + + + + regex::builders::Builder::build_one_bytes (1 samples, 0.22%) + + + + + regex_automata::meta::regex::Builder::build (1 samples, 0.22%) + + + + + regex_syntax::ast::parse::Parser::parse (1 samples, 0.22%) + + + + + regex_syntax::ast::parse::ParserI<P>::parse_with_comments (1 samples, 0.22%) + + + + + regex_syntax::ast::parse::ParserI<P>::parse_set_class (1 samples, 0.22%) + + + + + regex_syntax::ast::parse::ParserI<P>::parse_set_class_range (1 samples, 0.22%) + + + + + regex_automata::util::captures::GroupInfo::new (1 samples, 0.22%) + + + + + s4lib::readers::syslogprocessor::SyslogProcessor::process_stage1_blockzero_analysis (2 samples, 0.44%) + + + + + s4lib::readers::syslinereader::SyslineReader::find_sysline_in_block_year (2 samples, 0.44%) + + + + + s4lib::readers::syslinereader::SyslineReader::parse_datetime_in_line_cached (2 samples, 0.44%) + + + + + s4lib::data::datetime::bytes_to_regex_to_datetime (2 samples, 0.44%) + + + + + once_cell::imp::OnceCell<T>::initialize (2 samples, 0.44%) + + + + + once_cell::imp::initialize_or_wait (2 samples, 0.44%) + + + + + once_cell::imp::OnceCell<T>::initialize::_{{closure}} (2 samples, 0.44%) + + + + + regex::regex::bytes::Regex::new (2 samples, 0.44%) + + + + + regex::builders::Builder::build_one_bytes (2 samples, 0.44%) + + + + + regex_automata::meta::regex::Builder::build (2 samples, 0.44%) + + + + + regex_automata::meta::strategy::new (2 samples, 0.44%) + + + + + regex_automata::nfa::thompson::compiler::Compiler::build_many_from_hir (2 samples, 0.44%) + + + + + regex_automata::nfa::thompson::builder::Builder::build (2 samples, 0.44%) + + + + + regex_automata::nfa::thompson::nfa::Inner::add (1 samples, 0.22%) + + + + + alloc::raw_vec::RawVec<T,A>::reserve_for_push (1 samples, 0.22%) + + + + + alloc::raw_vec::finish_grow (1 samples, 0.22%) + + + + + realloc (1 samples, 0.22%) + + + + + regex_automata::nfa::thompson::literal_trie::LiteralTrie::add (4 samples, 0.88%) + + + + + regex_automata::nfa::thompson::compiler::Compiler::c_cap (6 samples, 1.31%) + + + + + regex_automata::nfa::thompson::compiler::Compiler::c (6 samples, 1.31%) + + + + + regex_automata::nfa::thompson::compiler::Compiler::c_at_least (1 samples, 0.22%) + + + + + regex_automata::nfa::thompson::compiler::Compiler::c (1 samples, 0.22%) + + + + + regex_automata::nfa::thompson::builder::Builder::add (1 samples, 0.22%) + + + + + regex_syntax::hir::Hir::kind (1 samples, 0.22%) + + + + + regex_automata::nfa::thompson::compiler::Compiler::build_many_from_hir (9 samples, 1.97%) + + r.. + + + <core::iter::adapters::map::Map<I,F> as core::iter::traits::iterator::Iterator>::next (9 samples, 1.97%) + + <.. + + + regex_automata::nfa::thompson::compiler::Compiler::c_cap (9 samples, 1.97%) + + r.. + + + regex_automata::nfa::thompson::compiler::Compiler::c (9 samples, 1.97%) + + r.. + + + regex_automata::nfa::thompson::compiler::Compiler::c (2 samples, 0.44%) + + + + + regex_automata::dfa::onepass::InternalBuilder::compile_transition (1 samples, 0.22%) + + + + + regex_automata::meta::wrappers::OnePass::new (2 samples, 0.44%) + + + + + regex_automata::dfa::onepass::Builder::build_from_nfa (2 samples, 0.44%) + + + + + malloc (1 samples, 0.22%) + + + + + _int_malloc (1 samples, 0.22%) + + + + + regex_syntax::hir::literal::Seq::optimize_by_preference (1 samples, 0.22%) + + + + + regex_syntax::hir::literal::PreferenceTrie::minimize (1 samples, 0.22%) + + + + + alloc::vec::Vec<T,A>::retain_mut (1 samples, 0.22%) + + + + + regex_syntax::hir::literal::PreferenceTrie::insert (1 samples, 0.22%) + + + + + alloc::raw_vec::RawVec<T,A>::reserve::do_reserve_and_handle (1 samples, 0.22%) + + + + + alloc::raw_vec::finish_grow (1 samples, 0.22%) + + + + + malloc (1 samples, 0.22%) + + + + + _int_malloc (1 samples, 0.22%) + + + + + regex_syntax::hir::literal::Extractor::extract (1 samples, 0.22%) + + + + + regex_syntax::hir::literal::Extractor::union (1 samples, 0.22%) + + + + + <alloc::vec::Vec<T,A> as alloc::vec::spec_extend::SpecExtend<T,I>>::spec_extend (1 samples, 0.22%) + + + + + s4lib::readers::syslinereader::SyslineReader::parse_datetime_in_line_cached (14 samples, 3.06%) + + s4l.. + + + s4lib::data::datetime::bytes_to_regex_to_datetime (14 samples, 3.06%) + + s4l.. + + + once_cell::imp::OnceCell<T>::initialize (14 samples, 3.06%) + + onc.. + + + once_cell::imp::initialize_or_wait (14 samples, 3.06%) + + onc.. + + + once_cell::imp::OnceCell<T>::initialize::_{{closure}} (14 samples, 3.06%) + + onc.. + + + regex::regex::bytes::Regex::new (14 samples, 3.06%) + + reg.. + + + regex::builders::Builder::build_one_bytes (14 samples, 3.06%) + + reg.. + + + regex_automata::meta::regex::Builder::build (14 samples, 3.06%) + + reg.. + + + regex_automata::meta::strategy::new (14 samples, 3.06%) + + reg.. + + + regex_automata::meta::reverse_inner::extract (3 samples, 0.66%) + + + + + regex_automata::meta::reverse_inner::flatten (1 samples, 0.22%) + + + + + <alloc::vec::Vec<T> as alloc::vec::spec_from_iter::SpecFromIter<T,I>>::from_iter (1 samples, 0.22%) + + + + + regex_automata::meta::reverse_inner::flatten (1 samples, 0.22%) + + + + + regex_syntax::hir::Properties::literal (1 samples, 0.22%) + + + + + malloc (1 samples, 0.22%) + + + + + regex_automata::nfa::thompson::builder::Builder::build (1 samples, 0.22%) + + + + + regex_automata::util::captures::GroupInfo::new (1 samples, 0.22%) + + + + + core::hash::BuildHasher::hash_one (1 samples, 0.22%) + + + + + s4lib::readers::syslinereader::SyslineReader::find_sysline_in_block_year (2 samples, 0.44%) + + + + + s4lib::readers::syslinereader::SyslineReader::parse_datetime_in_line_cached (2 samples, 0.44%) + + + + + s4lib::data::datetime::bytes_to_regex_to_datetime (2 samples, 0.44%) + + + + + once_cell::imp::OnceCell<T>::initialize (2 samples, 0.44%) + + + + + once_cell::imp::initialize_or_wait (2 samples, 0.44%) + + + + + once_cell::imp::OnceCell<T>::initialize::_{{closure}} (2 samples, 0.44%) + + + + + regex::regex::bytes::Regex::new (2 samples, 0.44%) + + + + + regex::builders::Builder::build_one_bytes (2 samples, 0.44%) + + + + + regex_automata::meta::regex::Builder::build (2 samples, 0.44%) + + + + + regex_automata::meta::strategy::new (2 samples, 0.44%) + + + + + regex_automata::nfa::thompson::compiler::Compiler::build_many_from_hir (2 samples, 0.44%) + + + + + <core::iter::adapters::map::Map<I,F> as core::iter::traits::iterator::Iterator>::next (1 samples, 0.22%) + + + + + regex_automata::nfa::thompson::compiler::Compiler::c_cap (1 samples, 0.22%) + + + + + regex_automata::nfa::thompson::compiler::Compiler::c (1 samples, 0.22%) + + + + + regex_automata::nfa::thompson::compiler::Compiler::c_cap (1 samples, 0.22%) + + + + + regex_automata::nfa::thompson::builder::Builder::add_capture_start (1 samples, 0.22%) + + + + + regex_automata::nfa::thompson::builder::Builder::add (1 samples, 0.22%) + + + + + lzma_rs::decode::xz::validate_block_check (29 samples, 6.35%) + + lzma_rs:.. + + + crc::crc64::<impl crc::Crc<u64>>::checksum (29 samples, 6.35%) + + crc::crc.. + + + lzma_rs::decode::lzma2::Lzma2Decoder::new (1 samples, 0.22%) + + + + + lzma_rs::decode::lzma::DecoderState::new (1 samples, 0.22%) + + + + + asm_exc_page_fault (1 samples, 0.22%) + + + + + exc_page_fault (1 samples, 0.22%) + + + + + do_user_addr_fault (1 samples, 0.22%) + + + + + handle_mm_fault (1 samples, 0.22%) + + + + + __handle_mm_fault (1 samples, 0.22%) + + + + + filemap_map_pages (1 samples, 0.22%) + + + + + next_uptodate_page (1 samples, 0.22%) + + + + + std::io::Read::read_exact (1 samples, 0.22%) + + + + + <std::io::buffered::bufreader::BufReader<R> as std::io::Read>::read (1 samples, 0.22%) + + + + + lzma_rs::decode::rangecoder::RangeDecoder<R>::parse_reverse_bit_tree (2 samples, 0.44%) + + + + + lzma_rs::decode::rangecoder::BitTree::parse (2 samples, 0.44%) + + + + + lzma_rs::decode::rangecoder::LenDecoder::decode (5 samples, 1.09%) + + + + + lzma_rs::decode::rangecoder::BitTree::parse (1 samples, 0.22%) + + + + + std::io::Read::read_exact (1 samples, 0.22%) + + + + + <std::io::buffered::bufreader::BufReader<R> as std::io::Read>::read (1 samples, 0.22%) + + + + + asm_sysvec_hyperv_stimer0 (1 samples, 0.22%) + + + + + sysvec_hyperv_stimer0 (1 samples, 0.22%) + + + + + __sysvec_hyperv_stimer0 (1 samples, 0.22%) + + + + + hrtimer_interrupt (1 samples, 0.22%) + + + + + ktime_get_update_offsets_now (1 samples, 0.22%) + + + + + lru_cache_add (1 samples, 0.22%) + + + + + __pagevec_lru_add (1 samples, 0.22%) + + + + + page_mapping (1 samples, 0.22%) + + + + + __mem_cgroup_charge (2 samples, 0.44%) + + + + + charge_memcg (2 samples, 0.44%) + + + + + mem_cgroup_charge_statistics.constprop.0 (2 samples, 0.44%) + + + + + handle_mm_fault (4 samples, 0.88%) + + + + + __handle_mm_fault (4 samples, 0.88%) + + + + + __alloc_pages (1 samples, 0.22%) + + + + + get_page_from_freelist (1 samples, 0.22%) + + + + + rmqueue_bulk (1 samples, 0.22%) + + + + + __list_del_entry_valid (1 samples, 0.22%) + + + + + do_user_addr_fault (5 samples, 1.09%) + + + + + find_vma (1 samples, 0.22%) + + + + + vmacache_find (1 samples, 0.22%) + + + + + exc_page_fault (6 samples, 1.31%) + + + + + asm_exc_page_fault (7 samples, 1.53%) + + + + + <lzma_rs::decode::lzbuffer::LzAccumBuffer<W> as lzma_rs::decode::lzbuffer::LzBuffer<W>>::append_lz (15 samples, 3.28%) + + <lz.. + + + lzma_rs::decode::lzma::DecoderState::process (24 samples, 5.25%) + + lzma_r.. + + + cfree@GLIBC_2.2.5 (1 samples, 0.22%) + + + + + __munmap (1 samples, 0.22%) + + + + + entry_SYSCALL_64_after_hwframe (1 samples, 0.22%) + + + + + do_syscall_64 (1 samples, 0.22%) + + + + + __x64_sys_munmap (1 samples, 0.22%) + + + + + __vm_munmap (1 samples, 0.22%) + + + + + __do_munmap (1 samples, 0.22%) + + + + + unmap_region (1 samples, 0.22%) + + + + + tlb_finish_mmu (1 samples, 0.22%) + + + + + release_pages (1 samples, 0.22%) + + + + + __mod_zone_page_state (1 samples, 0.22%) + + + + + irqentry_enter (2 samples, 0.44%) + + + + + rmqueue_bulk (1 samples, 0.22%) + + + + + __list_del_entry_valid (1 samples, 0.22%) + + + + + asm_exc_page_fault (4 samples, 0.88%) + + + + + exc_page_fault (4 samples, 0.88%) + + + + + do_user_addr_fault (2 samples, 0.44%) + + + + + handle_mm_fault (2 samples, 0.44%) + + + + + __handle_mm_fault (2 samples, 0.44%) + + + + + __alloc_pages (2 samples, 0.44%) + + + + + get_page_from_freelist (2 samples, 0.44%) + + + + + kernel_init_free_pages.part.0 (1 samples, 0.22%) + + + + + clear_page_erms (1 samples, 0.22%) + + + + + lzma_rs::decode::xz::decode_filter (31 samples, 6.78%) + + lzma_rs::.. + + + lzma_rs::decode::lzma2::Lzma2Decoder::decompress (30 samples, 6.56%) + + lzma_rs::.. + + + __memmove_avx512_unaligned_erms (5 samples, 1.09%) + + + + + __irqentry_text_end (1 samples, 0.22%) + + + + + handle_mm_fault (1 samples, 0.22%) + + + + + __handle_mm_fault (1 samples, 0.22%) + + + + + page_add_new_anon_rmap (1 samples, 0.22%) + + + + + __mod_lruvec_page_state (1 samples, 0.22%) + + + + + exc_page_fault (2 samples, 0.44%) + + + + + do_user_addr_fault (2 samples, 0.44%) + + + + + lzma_rs::decode::xz::decode_stream (64 samples, 14.00%) + + lzma_rs::decode::xz::.. + + + __memmove_avx512_unaligned_erms (4 samples, 0.88%) + + + + + asm_exc_page_fault (4 samples, 0.88%) + + + + + exc_page_fault (2 samples, 0.44%) + + + + + asm_exc_page_fault (3 samples, 0.66%) + + + + + alloc::vec::Vec<T,A>::extend_from_slice (4 samples, 0.88%) + + + + + __memmove_avx512_unaligned_erms (4 samples, 0.88%) + + + + + s4lib::readers::blockreader::BlockReader::new (69 samples, 15.10%) + + s4lib::readers::blockre.. + + + alloc::raw_vec::RawVec<T,A>::allocate_in (1 samples, 0.22%) + + + + + malloc (1 samples, 0.22%) + + + + + _int_malloc (1 samples, 0.22%) + + + + + sysmalloc (1 samples, 0.22%) + + + + + asm_exc_page_fault (1 samples, 0.22%) + + + + + exc_page_fault (1 samples, 0.22%) + + + + + do_user_addr_fault (1 samples, 0.22%) + + + + + malloc (1 samples, 0.22%) + + + + + alloc::raw_vec::finish_grow (2 samples, 0.44%) + + + + + alloc::raw_vec::RawVec<T,A>::reserve_for_push (3 samples, 0.66%) + + + + + regex_automata::nfa::thompson::literal_trie::LiteralTrie::compile (8 samples, 1.75%) + + + + + realloc (1 samples, 0.22%) + + + + + _int_realloc (1 samples, 0.22%) + + + + + __memmove_avx512_unaligned_erms (1 samples, 0.22%) + + + + + alloc::raw_vec::finish_grow (5 samples, 1.09%) + + + + + malloc (4 samples, 0.88%) + + + + + _int_malloc (4 samples, 0.88%) + + + + + alloc::raw_vec::RawVec<T,A>::reserve_for_push (6 samples, 1.31%) + + + + + malloc (1 samples, 0.22%) + + + + + _int_malloc (1 samples, 0.22%) + + + + + regex_automata::nfa::thompson::literal_trie::LiteralTrie::add (8 samples, 1.75%) + + + + + alloc::raw_vec::RawVec<T,A>::reserve::do_reserve_and_handle (2 samples, 0.44%) + + + + + alloc::raw_vec::finish_grow (2 samples, 0.44%) + + + + + regex_automata::nfa::thompson::compiler::Compiler::c_alt_iter (1 samples, 0.22%) + + + + + regex_automata::nfa::thompson::compiler::Compiler::patch (1 samples, 0.22%) + + + + + regex_automata::nfa::thompson::builder::Builder::patch (1 samples, 0.22%) + + + + + malloc_consolidate (1 samples, 0.22%) + + + + + unlink_chunk.constprop.0 (1 samples, 0.22%) + + + + + regex_automata::nfa::thompson::compiler::Compiler::build_many_from_hir (19 samples, 4.16%) + + regex.. + + + <core::iter::adapters::map::Map<I,F> as core::iter::traits::iterator::Iterator>::next (19 samples, 4.16%) + + <core.. + + + regex_automata::nfa::thompson::compiler::Compiler::c_cap (19 samples, 4.16%) + + regex.. + + + regex_automata::nfa::thompson::compiler::Compiler::c (19 samples, 4.16%) + + regex.. + + + regex_automata::nfa::thompson::compiler::Compiler::c_cap (19 samples, 4.16%) + + regex.. + + + regex_automata::nfa::thompson::compiler::Compiler::c (19 samples, 4.16%) + + regex.. + + + cfree@GLIBC_2.2.5 (2 samples, 0.44%) + + + + + _int_free (2 samples, 0.44%) + + + + + regex_syntax::hir::literal::Seq::optimize_by_preference (1 samples, 0.22%) + + + + + regex_syntax::hir::literal::PreferenceTrie::minimize (1 samples, 0.22%) + + + + + alloc::vec::Vec<T,A>::retain_mut (1 samples, 0.22%) + + + + + regex_syntax::hir::literal::PreferenceTrie::insert (1 samples, 0.22%) + + + + + alloc::raw_vec::RawVec<T,A>::reserve_for_push (1 samples, 0.22%) + + + + + alloc::raw_vec::finish_grow (1 samples, 0.22%) + + + + + realloc (1 samples, 0.22%) + + + + + _int_realloc (1 samples, 0.22%) + + + + + _int_malloc (1 samples, 0.22%) + + + + + regex_syntax::hir::literal::Extractor::extract (1 samples, 0.22%) + + + + + regex_syntax::hir::literal::Extractor::extract (1 samples, 0.22%) + + + + + regex_syntax::hir::literal::Extractor::extract (1 samples, 0.22%) + + + + + malloc (1 samples, 0.22%) + + + + + regex_automata::util::prefilter::Choice::new (1 samples, 0.22%) + + + + + __memmove_avx512_unaligned_erms (1 samples, 0.22%) + + + + + s4lib::data::datetime::bytes_to_regex_to_datetime (23 samples, 5.03%) + + s4lib:.. + + + once_cell::imp::OnceCell<T>::initialize (23 samples, 5.03%) + + once_c.. + + + once_cell::imp::initialize_or_wait (23 samples, 5.03%) + + once_c.. + + + once_cell::imp::OnceCell<T>::initialize::_{{closure}} (23 samples, 5.03%) + + once_c.. + + + regex::regex::bytes::Regex::new (23 samples, 5.03%) + + regex:.. + + + regex::builders::Builder::build_one_bytes (23 samples, 5.03%) + + regex:.. + + + regex_automata::meta::regex::Builder::build (23 samples, 5.03%) + + regex_.. + + + regex_automata::meta::strategy::new (23 samples, 5.03%) + + regex_.. + + + regex_automata::meta::reverse_inner::extract (4 samples, 0.88%) + + + + + regex_automata::meta::reverse_inner::flatten (1 samples, 0.22%) + + + + + <alloc::vec::Vec<T> as alloc::vec::spec_from_iter::SpecFromIter<T,I>>::from_iter (1 samples, 0.22%) + + + + + regex_automata::meta::reverse_inner::flatten (1 samples, 0.22%) + + + + + <alloc::vec::Vec<T> as alloc::vec::spec_from_iter::SpecFromIter<T,I>>::from_iter (1 samples, 0.22%) + + + + + regex_automata::meta::reverse_inner::flatten (1 samples, 0.22%) + + + + + regex_automata::meta::reverse_inner::flatten (1 samples, 0.22%) + + + + + regex_syntax::hir::literal::Extractor::union (1 samples, 0.22%) + + + + + regex_automata::util::prefilter::suffixes (2 samples, 0.44%) + + + + + regex_syntax::hir::literal::Extractor::extract (2 samples, 0.44%) + + + + + regex_syntax::hir::literal::Extractor::extract (2 samples, 0.44%) + + + + + regex_syntax::hir::literal::Extractor::cross (1 samples, 0.22%) + + + + + malloc (1 samples, 0.22%) + + + + + _int_malloc (1 samples, 0.22%) + + + + + cfree@GLIBC_2.2.5 (1 samples, 0.22%) + + + + + _int_free (1 samples, 0.22%) + + + + + regex_syntax::hir::literal::Seq::optimize_by_preference (2 samples, 0.44%) + + + + + regex_syntax::hir::literal::PreferenceTrie::minimize (2 samples, 0.44%) + + + + + alloc::vec::Vec<T,A>::retain_mut (1 samples, 0.22%) + + + + + regex_syntax::hir::literal::PreferenceTrie::insert (1 samples, 0.22%) + + + + + alloc::raw_vec::RawVec<T,A>::reserve_for_push (1 samples, 0.22%) + + + + + alloc::raw_vec::finish_grow (1 samples, 0.22%) + + + + + realloc (1 samples, 0.22%) + + + + + regex_automata::util::prefilter::prefixes (3 samples, 0.66%) + + + + + regex_syntax::hir::literal::Extractor::extract (1 samples, 0.22%) + + + + + regex_syntax::hir::literal::Extractor::cross (1 samples, 0.22%) + + + + + malloc (1 samples, 0.22%) + + + + + _int_malloc (1 samples, 0.22%) + + + + + regex_automata::nfa::thompson::nfa::Inner::add (3 samples, 0.66%) + + + + + _int_malloc (1 samples, 0.22%) + + + + + malloc (2 samples, 0.44%) + + + + + regex_automata::nfa::thompson::compiler::Compiler::build_many_from_hir (7 samples, 1.53%) + + + + + regex_automata::nfa::thompson::builder::Builder::build (7 samples, 1.53%) + + + + + cfree@GLIBC_2.2.5 (1 samples, 0.22%) + + + + + core::ptr::drop_in_place<core::cell::RefCell<regex_automata::nfa::thompson::compiler::Utf8State>> (2 samples, 0.44%) + + + + + cfree@GLIBC_2.2.5 (1 samples, 0.22%) + + + + + _int_free (1 samples, 0.22%) + + + + + core::ptr::drop_in_place<regex_automata::nfa::thompson::compiler::Compiler> (4 samples, 0.88%) + + + + + s4lib::readers::syslogprocessor::SyslogProcessor::process_stage1_blockzero_analysis (17 samples, 3.72%) + + s4li.. + + + s4lib::readers::syslinereader::SyslineReader::find_sysline_in_block_year (17 samples, 3.72%) + + s4li.. + + + s4lib::readers::syslinereader::SyslineReader::parse_datetime_in_line_cached (17 samples, 3.72%) + + s4li.. + + + s4lib::data::datetime::bytes_to_regex_to_datetime (17 samples, 3.72%) + + s4li.. + + + once_cell::imp::OnceCell<T>::initialize (17 samples, 3.72%) + + once.. + + + once_cell::imp::initialize_or_wait (17 samples, 3.72%) + + once.. + + + once_cell::imp::OnceCell<T>::initialize::_{{closure}} (17 samples, 3.72%) + + once.. + + + regex::regex::bytes::Regex::new (17 samples, 3.72%) + + rege.. + + + regex::builders::Builder::build_one_bytes (17 samples, 3.72%) + + rege.. + + + regex_automata::meta::regex::Builder::build (17 samples, 3.72%) + + rege.. + + + regex_automata::meta::strategy::new (17 samples, 3.72%) + + rege.. + + + s4::exec_fileprocessor_thread (18 samples, 3.94%) + + s4::.. + + + s4lib::readers::syslogprocessor::SyslogProcessor::new (1 samples, 0.22%) + + + + + s4lib::readers::syslinereader::SyslineReader::new (1 samples, 0.22%) + + + + + s4lib::readers::linereader::LineReader::new (1 samples, 0.22%) + + + + + s4lib::readers::blockreader::BlockReader::new (1 samples, 0.22%) + + + + + asm_exc_page_fault (1 samples, 0.22%) + + + + + exc_page_fault (1 samples, 0.22%) + + + + + do_user_addr_fault (1 samples, 0.22%) + + + + + handle_mm_fault (1 samples, 0.22%) + + + + + __handle_mm_fault (1 samples, 0.22%) + + + + + filemap_map_pages (1 samples, 0.22%) + + + + + next_uptodate_page (1 samples, 0.22%) + + + + + aho_corasick::packed::api::Builder::build (1 samples, 0.22%) + + + + + aho_corasick::packed::teddy::builder::Builder::build (1 samples, 0.22%) + + + + + aho_corasick::packed::teddy::builder::x86_64::SlimAVX2<3_usize>::new (1 samples, 0.22%) + + + + + aho_corasick::packed::teddy::builder::x86_64::SlimAVX2<3_usize>::new_unchecked (1 samples, 0.22%) + + + + + aho_corasick::packed::teddy::generic::Teddy<_>::new (1 samples, 0.22%) + + + + + aho_corasick::packed::pattern::Pattern::low_nybbles (1 samples, 0.22%) + + + + + __libc_calloc (1 samples, 0.22%) + + + + + regex_automata::util::prefilter::Prefilter::new (2 samples, 0.44%) + + + + + regex_automata::util::prefilter::Choice::new (2 samples, 0.44%) + + + + + regex_automata::util::prefilter::teddy::Teddy::new (2 samples, 0.44%) + + + + + aho_corasick::nfa::noncontiguous::Builder::build (1 samples, 0.22%) + + + + + aho_corasick::nfa::noncontiguous::Compiler::fill_failure_transitions (1 samples, 0.22%) + + + + + aho_corasick::packed::api::Builder::build (1 samples, 0.22%) + + + + + aho_corasick::packed::teddy::builder::Builder::build (1 samples, 0.22%) + + + + + aho_corasick::packed::teddy::builder::x86_64::FatAVX2<3_usize>::new (1 samples, 0.22%) + + + + + aho_corasick::packed::teddy::builder::x86_64::FatAVX2<3_usize>::new_unchecked (1 samples, 0.22%) + + + + + aho_corasick::packed::teddy::generic::Teddy<_>::new (1 samples, 0.22%) + + + + + aho_corasick::nfa::noncontiguous::Compiler::fill_failure_transitions (1 samples, 0.22%) + + + + + cfree@GLIBC_2.2.5 (1 samples, 0.22%) + + + + + _int_free (1 samples, 0.22%) + + + + + unlink_chunk.constprop.0 (1 samples, 0.22%) + + + + + aho_corasick::nfa::noncontiguous::Compiler::densify (1 samples, 0.22%) + + + + + alloc::raw_vec::RawVec<T,A>::reserve::do_reserve_and_handle (1 samples, 0.22%) + + + + + alloc::raw_vec::finish_grow (1 samples, 0.22%) + + + + + realloc (1 samples, 0.22%) + + + + + _int_realloc (1 samples, 0.22%) + + + + + _int_malloc (1 samples, 0.22%) + + + + + sysmalloc (1 samples, 0.22%) + + + + + asm_exc_page_fault (1 samples, 0.22%) + + + + + exc_page_fault (1 samples, 0.22%) + + + + + do_user_addr_fault (1 samples, 0.22%) + + + + + regex_automata::util::prefilter::teddy::Teddy::new (4 samples, 0.88%) + + + + + aho_corasick::nfa::noncontiguous::Builder::build (3 samples, 0.66%) + + + + + regex_automata::meta::strategy::new (7 samples, 1.53%) + + + + + regex_automata::meta::reverse_inner::extract (5 samples, 1.09%) + + + + + regex_automata::util::prefilter::Choice::new (5 samples, 1.09%) + + + + + regex_automata::util::prefilter::aho_corasick::AhoCorasick::new (1 samples, 0.22%) + + + + + aho_corasick::ahocorasick::AhoCorasickBuilder::build (1 samples, 0.22%) + + + + + aho_corasick::nfa::noncontiguous::Builder::build (1 samples, 0.22%) + + + + + aho_corasick::nfa::noncontiguous::Compiler::shuffle (1 samples, 0.22%) + + + + + aho_corasick::util::remapper::Remapper::remap (1 samples, 0.22%) + + + + + <aho_corasick::nfa::noncontiguous::NFA as aho_corasick::util::remapper::Remappable>::remap (1 samples, 0.22%) + + + + + malloc (1 samples, 0.22%) + + + + + _int_malloc (1 samples, 0.22%) + + + + + sysmalloc (1 samples, 0.22%) + + + + + asm_exc_page_fault (1 samples, 0.22%) + + + + + exc_page_fault (1 samples, 0.22%) + + + + + do_user_addr_fault (1 samples, 0.22%) + + + + + __handle_mm_fault (1 samples, 0.22%) + + + + + __alloc_pages (1 samples, 0.22%) + + + + + get_page_from_freelist (1 samples, 0.22%) + + + + + kernel_init_free_pages.part.0 (1 samples, 0.22%) + + + + + clear_page_erms (1 samples, 0.22%) + + + + + asm_exc_page_fault (2 samples, 0.44%) + + + + + exc_page_fault (2 samples, 0.44%) + + + + + do_user_addr_fault (2 samples, 0.44%) + + + + + handle_mm_fault (2 samples, 0.44%) + + + + + regex_automata::nfa::thompson::compiler::Utf8Compiler::new (4 samples, 0.88%) + + + + + regex_automata::nfa::thompson::map::Utf8BoundedMap::clear (4 samples, 0.88%) + + + + + <T as alloc::vec::spec_from_elem::SpecFromElem>::from_elem (4 samples, 0.88%) + + + + + alloc::vec::Vec<T,A>::extend_with (3 samples, 0.66%) + + + + + regex_automata::nfa::thompson::compiler::Utf8Compiler::finish (1 samples, 0.22%) + + + + + regex_automata::nfa::thompson::compiler::Utf8Compiler::compile (1 samples, 0.22%) + + + + + malloc (1 samples, 0.22%) + + + + + _int_malloc (1 samples, 0.22%) + + + + + regex_automata::nfa::thompson::compiler::Compiler::build_many_from_hir (6 samples, 1.31%) + + + + + <core::iter::adapters::map::Map<I,F> as core::iter::traits::iterator::Iterator>::next (6 samples, 1.31%) + + + + + regex_automata::nfa::thompson::compiler::Compiler::c_cap (6 samples, 1.31%) + + + + + regex_automata::nfa::thompson::compiler::Compiler::c (6 samples, 1.31%) + + + + + regex_automata::nfa::thompson::compiler::Compiler::c_cap (6 samples, 1.31%) + + + + + regex_automata::nfa::thompson::compiler::Compiler::c (6 samples, 1.31%) + + + + + regex_automata::nfa::thompson::compiler::Compiler::c_alt_iter (6 samples, 1.31%) + + + + + regex_automata::nfa::thompson::compiler::Compiler::c (6 samples, 1.31%) + + + + + regex_automata::nfa::thompson::compiler::Compiler::c (6 samples, 1.31%) + + + + + regex_automata::nfa::thompson::builder::Builder::add (1 samples, 0.22%) + + + + + alloc::raw_vec::RawVec<T,A>::reserve_for_push (1 samples, 0.22%) + + + + + alloc::raw_vec::finish_grow (1 samples, 0.22%) + + + + + realloc (1 samples, 0.22%) + + + + + aho_corasick::packed::api::Builder::extend (1 samples, 0.22%) + + + + + aho_corasick::packed::pattern::Patterns::add (1 samples, 0.22%) + + + + + aho_corasick::dfa::Builder::finish_build_one_start::{{closure}} (1 samples, 0.22%) + + + + + regex_automata::meta::regex::Builder::build (10 samples, 2.19%) + + r.. + + + regex_automata::meta::strategy::new (10 samples, 2.19%) + + r.. + + + regex_automata::meta::reverse_inner::extract (4 samples, 0.88%) + + + + + regex_automata::util::prefilter::Choice::new (4 samples, 0.88%) + + + + + regex_automata::util::prefilter::teddy::Teddy::new (4 samples, 0.88%) + + + + + aho_corasick::dfa::Builder::build_from_noncontiguous (3 samples, 0.66%) + + + + + regex_automata::nfa::thompson::builder::Builder::add (1 samples, 0.22%) + + + + + alloc::raw_vec::RawVec<T,A>::reserve_for_push (1 samples, 0.22%) + + + + + alloc::raw_vec::finish_grow (1 samples, 0.22%) + + + + + realloc (1 samples, 0.22%) + + + + + _int_realloc (1 samples, 0.22%) + + + + + _int_malloc (1 samples, 0.22%) + + + + + sysmalloc (1 samples, 0.22%) + + + + + asm_exc_page_fault (1 samples, 0.22%) + + + + + exc_page_fault (1 samples, 0.22%) + + + + + do_user_addr_fault (1 samples, 0.22%) + + + + + regex_automata::nfa::thompson::literal_trie::LiteralTrie::compile (2 samples, 0.44%) + + + + + alloc::raw_vec::RawVec<T,A>::reserve_for_push (1 samples, 0.22%) + + + + + alloc::raw_vec::finish_grow (1 samples, 0.22%) + + + + + realloc (1 samples, 0.22%) + + + + + _int_realloc (1 samples, 0.22%) + + + + + _int_malloc (1 samples, 0.22%) + + + + + sysmalloc (1 samples, 0.22%) + + + + + __mprotect (1 samples, 0.22%) + + + + + entry_SYSCALL_64_after_hwframe (1 samples, 0.22%) + + + + + do_syscall_64 (1 samples, 0.22%) + + + + + __x64_sys_mprotect (1 samples, 0.22%) + + + + + regex_automata::nfa::thompson::literal_trie::LiteralTrie::add (1 samples, 0.22%) + + + + + regex_automata::nfa::thompson::compiler::Compiler::c_cap (2 samples, 0.44%) + + + + + regex_automata::nfa::thompson::compiler::Compiler::c (2 samples, 0.44%) + + + + + cfree@GLIBC_2.2.5 (1 samples, 0.22%) + + + + + _int_free (1 samples, 0.22%) + + + + + regex::regex::bytes::Regex::new (6 samples, 1.31%) + + + + + regex::builders::Builder::build_one_bytes (6 samples, 1.31%) + + + + + regex_automata::meta::regex::Builder::build (6 samples, 1.31%) + + + + + regex_automata::meta::strategy::new (6 samples, 1.31%) + + + + + regex_automata::nfa::thompson::compiler::Compiler::build_many_from_hir (6 samples, 1.31%) + + + + + <core::iter::adapters::map::Map<I,F> as core::iter::traits::iterator::Iterator>::next (6 samples, 1.31%) + + + + + regex_automata::nfa::thompson::compiler::Compiler::c_cap (6 samples, 1.31%) + + + + + regex_automata::nfa::thompson::compiler::Compiler::c (6 samples, 1.31%) + + + + + regex_automata::nfa::thompson::compiler::Compiler::c_cap (6 samples, 1.31%) + + + + + regex_automata::nfa::thompson::compiler::Compiler::c (6 samples, 1.31%) + + + + + regex_automata::nfa::thompson::compiler::Compiler::c_alt_iter (2 samples, 0.44%) + + + + + regex_automata::nfa::thompson::compiler::Compiler::c (2 samples, 0.44%) + + + + + _int_malloc (1 samples, 0.22%) + + + + + malloc (2 samples, 0.44%) + + + + + regex_automata::nfa::thompson::literal_trie::LiteralTrie::compile (3 samples, 0.66%) + + + + + alloc::raw_vec::RawVec<T,A>::reserve_for_push (3 samples, 0.66%) + + + + + alloc::raw_vec::finish_grow (3 samples, 0.66%) + + + + + _int_malloc (1 samples, 0.22%) + + + + + regex_automata::nfa::thompson::compiler::Compiler::c_cap (5 samples, 1.09%) + + + + + regex_automata::nfa::thompson::compiler::Compiler::c (5 samples, 1.09%) + + + + + regex_automata::nfa::thompson::literal_trie::LiteralTrie::add (2 samples, 0.44%) + + + + + alloc::raw_vec::RawVec<T,A>::reserve_for_push (2 samples, 0.44%) + + + + + alloc::raw_vec::finish_grow (2 samples, 0.44%) + + + + + realloc (2 samples, 0.44%) + + + + + _int_realloc (2 samples, 0.44%) + + + + + malloc (1 samples, 0.22%) + + + + + _int_malloc (1 samples, 0.22%) + + + + + sysmalloc (1 samples, 0.22%) + + + + + asm_exc_page_fault (1 samples, 0.22%) + + + + + exc_page_fault (1 samples, 0.22%) + + + + + do_user_addr_fault (1 samples, 0.22%) + + + + + handle_mm_fault (1 samples, 0.22%) + + + + + __handle_mm_fault (1 samples, 0.22%) + + + + + __page_set_anon_rmap (1 samples, 0.22%) + + + + + irqentry_enter (1 samples, 0.22%) + + + + + lru_cache_add (1 samples, 0.22%) + + + + + rmqueue_bulk (1 samples, 0.22%) + + + + + __list_del_entry_valid (1 samples, 0.22%) + + + + + do_user_addr_fault (6 samples, 1.31%) + + + + + handle_mm_fault (6 samples, 1.31%) + + + + + __handle_mm_fault (6 samples, 1.31%) + + + + + __alloc_pages (5 samples, 1.09%) + + + + + get_page_from_freelist (5 samples, 1.09%) + + + + + kernel_init_free_pages.part.0 (4 samples, 0.88%) + + + + + clear_page_erms (4 samples, 0.88%) + + + + + asm_exc_page_fault (8 samples, 1.75%) + + + + + exc_page_fault (8 samples, 1.75%) + + + + + __memmove_avx512_unaligned_erms (2 samples, 0.44%) + + + + + regex_automata::nfa::thompson::compiler::Utf8Compiler::new (12 samples, 2.63%) + + re.. + + + regex_automata::nfa::thompson::map::Utf8BoundedMap::clear (12 samples, 2.63%) + + re.. + + + <T as alloc::vec::spec_from_elem::SpecFromElem>::from_elem (12 samples, 2.63%) + + <T.. + + + alloc::vec::Vec<T,A>::extend_with (11 samples, 2.41%) + + al.. + + + regex_automata::nfa::thompson::compiler::Compiler::c_alt_iter (14 samples, 3.06%) + + reg.. + + + regex_automata::nfa::thompson::compiler::Compiler::c (14 samples, 3.06%) + + reg.. + + + regex_automata::nfa::thompson::compiler::Compiler::c (2 samples, 0.44%) + + + + + lru_cache_add (1 samples, 0.22%) + + + + + __pagevec_lru_add (1 samples, 0.22%) + + + + + page_mapping (1 samples, 0.22%) + + + + + asm_exc_page_fault (2 samples, 0.44%) + + + + + exc_page_fault (2 samples, 0.44%) + + + + + do_user_addr_fault (2 samples, 0.44%) + + + + + handle_mm_fault (2 samples, 0.44%) + + + + + __handle_mm_fault (2 samples, 0.44%) + + + + + __mem_cgroup_charge (1 samples, 0.22%) + + + + + charge_memcg (1 samples, 0.22%) + + + + + mem_cgroup_charge_statistics.constprop.0 (1 samples, 0.22%) + + + + + __memmove_avx512_unaligned_erms (3 samples, 0.66%) + + + + + regex_automata::nfa::thompson::compiler::Compiler::build_many_from_hir (28 samples, 6.13%) + + regex_au.. + + + <core::iter::adapters::map::Map<I,F> as core::iter::traits::iterator::Iterator>::next (28 samples, 6.13%) + + <core::i.. + + + regex_automata::nfa::thompson::compiler::Compiler::c_cap (28 samples, 6.13%) + + regex_au.. + + + regex_automata::nfa::thompson::compiler::Compiler::c (28 samples, 6.13%) + + regex_au.. + + + regex_automata::nfa::thompson::compiler::Compiler::c_cap (28 samples, 6.13%) + + regex_au.. + + + regex_automata::nfa::thompson::compiler::Compiler::c (28 samples, 6.13%) + + regex_au.. + + + regex_automata::nfa::thompson::compiler::Compiler::c (9 samples, 1.97%) + + r.. + + + regex_automata::nfa::thompson::compiler::Utf8Compiler::new (9 samples, 1.97%) + + r.. + + + regex_automata::nfa::thompson::map::Utf8BoundedMap::clear (9 samples, 1.97%) + + r.. + + + <T as alloc::vec::spec_from_elem::SpecFromElem>::from_elem (9 samples, 1.97%) + + <.. + + + alloc::vec::Vec<T,A>::extend_with (9 samples, 1.97%) + + a.. + + + regex::builders::Builder::build_one_bytes (29 samples, 6.35%) + + regex::b.. + + + regex_automata::meta::regex::Builder::build (29 samples, 6.35%) + + regex_au.. + + + regex_automata::meta::strategy::new (29 samples, 6.35%) + + regex_au.. + + + regex_automata::meta::reverse_inner::extract (1 samples, 0.22%) + + + + + regex_syntax::hir::literal::Extractor::extract (1 samples, 0.22%) + + + + + regex_syntax::hir::literal::Extractor::extract (1 samples, 0.22%) + + + + + regex_syntax::hir::literal::Extractor::extract (1 samples, 0.22%) + + + + + regex_syntax::hir::literal::Extractor::extract (1 samples, 0.22%) + + + + + regex_syntax::hir::literal::Extractor::union (1 samples, 0.22%) + + + + + <alloc::vec::Vec<T,A> as alloc::vec::spec_extend::SpecExtend<T,I>>::spec_extend (1 samples, 0.22%) + + + + + alloc::raw_vec::RawVec<T,A>::reserve::do_reserve_and_handle (1 samples, 0.22%) + + + + + alloc::raw_vec::finish_grow (1 samples, 0.22%) + + + + + realloc (1 samples, 0.22%) + + + + + _int_realloc (1 samples, 0.22%) + + + + + _int_malloc (1 samples, 0.22%) + + + + + once_cell::imp::initialize_or_wait (1 samples, 0.22%) + + + + + once_cell::imp::OnceCell<T>::initialize::_{{closure}} (1 samples, 0.22%) + + + + + regex::regex::bytes::Regex::new (1 samples, 0.22%) + + + + + regex::builders::Builder::build_one_bytes (1 samples, 0.22%) + + + + + regex_automata::meta::regex::Builder::build (1 samples, 0.22%) + + + + + regex_automata::meta::strategy::new (1 samples, 0.22%) + + + + + regex_automata::nfa::thompson::compiler::Compiler::build_many_from_hir (1 samples, 0.22%) + + + + + <core::iter::adapters::map::Map<I,F> as core::iter::traits::iterator::Iterator>::next (1 samples, 0.22%) + + + + + regex_automata::nfa::thompson::compiler::Compiler::c_cap (1 samples, 0.22%) + + + + + regex_automata::nfa::thompson::compiler::Compiler::c (1 samples, 0.22%) + + + + + regex_automata::nfa::thompson::compiler::Compiler::c_cap (1 samples, 0.22%) + + + + + regex_automata::nfa::thompson::compiler::Compiler::c (1 samples, 0.22%) + + + + + regex_automata::nfa::thompson::literal_trie::LiteralTrie::add (1 samples, 0.22%) + + + + + alloc::raw_vec::RawVec<T,A>::reserve_for_push (1 samples, 0.22%) + + + + + alloc::raw_vec::finish_grow (1 samples, 0.22%) + + + + + realloc (1 samples, 0.22%) + + + + + _int_realloc (1 samples, 0.22%) + + + + + _int_malloc (1 samples, 0.22%) + + + + + regex_automata::nfa::thompson::literal_trie::LiteralTrie::compile (1 samples, 0.22%) + + + + + regex_automata::nfa::thompson::builder::Builder::add (1 samples, 0.22%) + + + + + alloc::raw_vec::RawVec<T,A>::reserve_for_push (1 samples, 0.22%) + + + + + alloc::raw_vec::finish_grow (1 samples, 0.22%) + + + + + realloc (1 samples, 0.22%) + + + + + _int_realloc (1 samples, 0.22%) + + + + + __memmove_avx512_unaligned_erms (1 samples, 0.22%) + + + + + asm_exc_page_fault (1 samples, 0.22%) + + + + + exc_page_fault (1 samples, 0.22%) + + + + + do_user_addr_fault (1 samples, 0.22%) + + + + + handle_mm_fault (1 samples, 0.22%) + + + + + __handle_mm_fault (1 samples, 0.22%) + + + + + __alloc_pages (1 samples, 0.22%) + + + + + get_page_from_freelist (1 samples, 0.22%) + + + + + __list_del_entry_valid (1 samples, 0.22%) + + + + + gen-1000-3-foob (343 samples, 75.05%) + + gen-1000-3-foob + + + [unknown] (186 samples, 40.70%) + + [unknown] + + + once_cell::imp::OnceCell<T>::initialize::_{{closure}} (2 samples, 0.44%) + + + + + regex::regex::bytes::Regex::new (2 samples, 0.44%) + + + + + regex::builders::Builder::build_one_bytes (2 samples, 0.44%) + + + + + regex_automata::meta::regex::Builder::build (2 samples, 0.44%) + + + + + regex_automata::meta::strategy::new (2 samples, 0.44%) + + + + + regex_automata::nfa::thompson::compiler::Compiler::build_many_from_hir (2 samples, 0.44%) + + + + + <core::iter::adapters::map::Map<I,F> as core::iter::traits::iterator::Iterator>::next (2 samples, 0.44%) + + + + + regex_automata::nfa::thompson::compiler::Compiler::c_cap (2 samples, 0.44%) + + + + + regex_automata::nfa::thompson::compiler::Compiler::c (2 samples, 0.44%) + + + + + regex_automata::nfa::thompson::compiler::Compiler::c_cap (2 samples, 0.44%) + + + + + regex_automata::nfa::thompson::compiler::Compiler::c (2 samples, 0.44%) + + + + + regex_automata::nfa::thompson::literal_trie::LiteralTrie::add (1 samples, 0.22%) + + + + + alloc::raw_vec::RawVec<T,A>::reserve_for_push (1 samples, 0.22%) + + + + + alloc::raw_vec::finish_grow (1 samples, 0.22%) + + + + + realloc (1 samples, 0.22%) + + + + + _int_realloc (1 samples, 0.22%) + + + + + _int_malloc (1 samples, 0.22%) + + + + + malloc_consolidate (1 samples, 0.22%) + + + + + all (457 samples, 100%) + + + + + ctrl-c (1 samples, 0.22%) + + + + + entry_SYSCALL_64_after_hwframe (1 samples, 0.22%) + + + + + do_syscall_64 (1 samples, 0.22%) + + + + + syscall_exit_to_user_mode (1 samples, 0.22%) + + + + + exit_to_user_mode_prepare (1 samples, 0.22%) + + + + + arch_do_signal_or_restart (1 samples, 0.22%) + + + + + get_signal (1 samples, 0.22%) + + + + + do_group_exit (1 samples, 0.22%) + + + + + do_exit (1 samples, 0.22%) + + + + + acct_process (1 samples, 0.22%) + + + + + do_acct_process (1 samples, 0.22%) + + + + + __kernel_write (1 samples, 0.22%) + + + + + ext4_buffered_write_iter (1 samples, 0.22%) + + + + + file_update_time (1 samples, 0.22%) + + + + + generic_update_time (1 samples, 0.22%) + + + + + __mark_inode_dirty (1 samples, 0.22%) + + + + + ext4_dirty_inode (1 samples, 0.22%) + + + + + __ext4_journal_start_sb (1 samples, 0.22%) + + + + + jbd2__journal_start (1 samples, 0.22%) + + + + + kmem_cache_alloc (1 samples, 0.22%) + + + + + diff --git a/releases/0.7.75/flamegraph-syslog.svg b/releases/0.7.75/flamegraph-syslog.svg new file mode 100644 index 00000000..def6bb6d --- /dev/null +++ b/releases/0.7.75/flamegraph-syslog.svg @@ -0,0 +1,7287 @@ + + + + + + + + + + + + + + + Flame Graph: super_speedy_syslog_searcher 0.7.75; git: d799548f; -freq 8000; created 20240707T231116-0700; flamegraph-flamegraph 0.6.5; rustc 1.70.0
; command: s4 ./logs/other/tests/gen-99999-1-Motley_Crue.log + + Reset Zoom + Search + + + + syscall_return_via_sysret (12 samples, 0.30%) + + + + + ret_from_fork (22 samples, 0.55%) + + + + + schedule_tail (22 samples, 0.55%) + + + + + finish_task_switch.isra.0 (22 samples, 0.55%) + + + + + __perf_event_task_sched_in (22 samples, 0.55%) + + + + + __raw_callee_save___pv_queued_spin_unlock (22 samples, 0.55%) + + + + + entry_SYSCALL_64_safe_stack (2 samples, 0.05%) + + + + + cgroup_rstat_updated (1 samples, 0.02%) + + + + + __mod_memcg_lruvec_state (4 samples, 0.10%) + + + + + srso_alias_return_thunk (1 samples, 0.02%) + + + + + srso_alias_safe_ret (1 samples, 0.02%) + + + + + page_remove_rmap (6 samples, 0.15%) + + + + + __mod_lruvec_page_state (6 samples, 0.15%) + + + + + __mod_lruvec_state (2 samples, 0.05%) + + + + + _raw_spin_lock (1 samples, 0.02%) + + + + + unmap_vmas (8 samples, 0.20%) + + + + + unmap_page_range (8 samples, 0.20%) + + + + + __free_one_page (2 samples, 0.05%) + + + + + free_pcppages_bulk (4 samples, 0.10%) + + + + + free_unref_page_list (5 samples, 0.12%) + + + + + release_pages (6 samples, 0.15%) + + + + + __x64_sys_exit_group (15 samples, 0.37%) + + + + + do_group_exit (15 samples, 0.37%) + + + + + do_exit (15 samples, 0.37%) + + + + + mmput (15 samples, 0.37%) + + + + + exit_mmap (15 samples, 0.37%) + + + + + tlb_finish_mmu (7 samples, 0.17%) + + + + + free_pages_and_swap_cache (1 samples, 0.02%) + + + + + entry_SYSCALL_64_after_hwframe (16 samples, 0.40%) + + + + + do_syscall_64 (16 samples, 0.40%) + + + + + __x64_sys_execve (1 samples, 0.02%) + + + + + do_execveat_common.isra.0 (1 samples, 0.02%) + + + + + bprm_execve (1 samples, 0.02%) + + + + + load_elf_binary (1 samples, 0.02%) + + + + + vm_mmap_pgoff (1 samples, 0.02%) + + + + + do_mmap (1 samples, 0.02%) + + + + + mmap_region (1 samples, 0.02%) + + + + + perf_event_mmap (1 samples, 0.02%) + + + + + perf_iterate_sb (1 samples, 0.02%) + + + + + perf_iterate_ctx (1 samples, 0.02%) + + + + + perf_event_mmap_output (1 samples, 0.02%) + + + + + vma_link (1 samples, 0.02%) + + + + + clone3 (2 samples, 0.05%) + + + + + start_thread (2 samples, 0.05%) + + + + + std::sys::unix::thread::Thread::new::thread_start (2 samples, 0.05%) + + + + + std::sys::unix::stack_overflow::imp::make_handler (2 samples, 0.05%) + + + + + __mmap (2 samples, 0.05%) + + + + + entry_SYSCALL_64_after_hwframe (2 samples, 0.05%) + + + + + do_syscall_64 (2 samples, 0.05%) + + + + + vm_mmap_pgoff (2 samples, 0.05%) + + + + + do_mmap (2 samples, 0.05%) + + + + + mmap_region (2 samples, 0.05%) + + + + + perf_event_mmap (1 samples, 0.02%) + + + + + perf_iterate_sb (1 samples, 0.02%) + + + + + perf_iterate_ctx (1 samples, 0.02%) + + + + + perf_event_mmap_output (1 samples, 0.02%) + + + + + __task_pid_nr_ns (1 samples, 0.02%) + + + + + entry_SYSCALL_64_after_hwframe (1 samples, 0.02%) + + + + + do_syscall_64 (1 samples, 0.02%) + + + + + syscall_exit_to_user_mode (1 samples, 0.02%) + + + + + exit_to_user_mode_prepare (1 samples, 0.02%) + + + + + task_work_run (1 samples, 0.02%) + + + + + __fput (1 samples, 0.02%) + + + + + pipe_release (1 samples, 0.02%) + + + + + kfree (1 samples, 0.02%) + + + + + __slab_free.constprop.0 (1 samples, 0.02%) + + + + + asm_exc_page_fault (1 samples, 0.02%) + + + + + exc_page_fault (1 samples, 0.02%) + + + + + do_user_addr_fault (1 samples, 0.02%) + + + + + handle_mm_fault (1 samples, 0.02%) + + + + + __handle_mm_fault (1 samples, 0.02%) + + + + + __mem_cgroup_charge (1 samples, 0.02%) + + + + + charge_memcg (1 samples, 0.02%) + + + + + memcg_check_events.isra.0 (1 samples, 0.02%) + + + + + _dl_relocate_object (2 samples, 0.05%) + + + + + _dl_receive_error (1 samples, 0.02%) + + + + + version_check_doit (1 samples, 0.02%) + + + + + _dl_check_all_versions (1 samples, 0.02%) + + + + + _dl_check_map_versions (1 samples, 0.02%) + + + + + _dl_map_object_deps (1 samples, 0.02%) + + + + + _dl_catch_exception (1 samples, 0.02%) + + + + + openaux (1 samples, 0.02%) + + + + + _dl_map_object (1 samples, 0.02%) + + + + + _dl_load_cache_lookup (1 samples, 0.02%) + + + + + asm_exc_page_fault (1 samples, 0.02%) + + + + + _dl_start (5 samples, 0.12%) + + + + + _dl_sysdep_start (5 samples, 0.12%) + + + + + dl_main (5 samples, 0.12%) + + + + + __libc_early_init (1 samples, 0.02%) + + + + + __ctype_init (1 samples, 0.02%) + + + + + asm_exc_page_fault (1 samples, 0.02%) + + + + + exc_page_fault (1 samples, 0.02%) + + + + + do_user_addr_fault (1 samples, 0.02%) + + + + + asm_sysvec_hyperv_stimer0 (1 samples, 0.02%) + + + + + sysvec_hyperv_stimer0 (1 samples, 0.02%) + + + + + irq_exit_rcu (1 samples, 0.02%) + + + + + __softirqentry_text_start (1 samples, 0.02%) + + + + + rebalance_domains (1 samples, 0.02%) + + + + + load_balance (1 samples, 0.02%) + + + + + find_busiest_group (1 samples, 0.02%) + + + + + cpumask_next_and (1 samples, 0.02%) + + + + + _find_next_bit (1 samples, 0.02%) + + + + + __memrchr_evex (20 samples, 0.50%) + + + + + __memmove_avx512_unaligned_erms (7 samples, 0.17%) + + + + + write_null (4 samples, 0.10%) + + + + + srso_alias_safe_ret (4 samples, 0.10%) + + + + + syscall_return_via_sysret (4 samples, 0.10%) + + + + + exit_to_user_mode_prepare (4 samples, 0.10%) + + + + + syscall_exit_to_user_mode (12 samples, 0.30%) + + + + + srso_alias_return_thunk (2 samples, 0.05%) + + + + + srso_alias_safe_ret (2 samples, 0.05%) + + + + + write_null (7 samples, 0.17%) + + + + + srso_alias_safe_ret (1 samples, 0.02%) + + + + + security_file_permission (2 samples, 0.05%) + + + + + fsnotify (4 samples, 0.10%) + + + + + lockref_put_return (8 samples, 0.20%) + + + + + dput (10 samples, 0.25%) + + + + + lockref_get_not_zero (1 samples, 0.02%) + + + + + dget_parent (2 samples, 0.05%) + + + + + __fsnotify_parent (19 samples, 0.47%) + + + + + vfs_write (63 samples, 1.57%) + + + + + fput_many (6 samples, 0.15%) + + + + + srso_alias_return_thunk (3 samples, 0.07%) + + + + + srso_alias_safe_ret (3 samples, 0.07%) + + + + + __fget_files (7 samples, 0.17%) + + + + + __fget_light (9 samples, 0.22%) + + + + + __fdget_pos (23 samples, 0.57%) + + + + + ksys_write (99 samples, 2.47%) + + ks.. + + + __x64_sys_write (1 samples, 0.02%) + + + + + do_syscall_64 (121 samples, 3.02%) + + do_.. + + + entry_SYSCALL_64_after_hwframe (124 samples, 3.10%) + + ent.. + + + __GI___pthread_enable_asynccancel (4 samples, 0.10%) + + + + + __GI___pthread_disable_asynccancel (4 samples, 0.10%) + + + + + __GI___libc_write (154 samples, 3.85%) + + __GI.. + + + <std::io::stdio::StdoutLock as std::io::Write>::write (183 samples, 4.57%) + + <std:.. + + + <&std::io::stdio::Stdout as std::io::Write>::write (192 samples, 4.80%) + + <&std:.. + + + <std::io::stdio::Stdout as std::io::Write>::write (195 samples, 4.87%) + + <std::.. + + + <termcolor::LossyStandardStream<W> as std::io::Write>::write (201 samples, 5.02%) + + <termc.. + + + std::io::Write::write_all (203 samples, 5.07%) + + std::i.. + + + __memmove_avx512_unaligned_erms (7 samples, 0.17%) + + + + + __memrchr_evex (25 samples, 0.62%) + + + + + __memmove_avx512_unaligned_erms (6 samples, 0.15%) + + + + + <std::io::stdio::StdoutLock as std::io::Write>::write (68 samples, 1.70%) + + + + + <std::io::stdio::Stdout as std::io::Write>::write (80 samples, 2.00%) + + <.. + + + <&std::io::stdio::Stdout as std::io::Write>::write (80 samples, 2.00%) + + <.. + + + std::io::Write::write_all (83 samples, 2.07%) + + s.. + + + termcolor::Ansi<W>::write_color (92 samples, 2.30%) + + t.. + + + __memrchr_evex (22 samples, 0.55%) + + + + + __memmove_avx512_unaligned_erms (19 samples, 0.47%) + + + + + <std::io::stdio::StdoutLock as std::io::Write>::write (76 samples, 1.90%) + + <.. + + + <&std::io::stdio::Stdout as std::io::Write>::write (113 samples, 2.82%) + + <&.. + + + <std::io::stdio::Stdout as std::io::Write>::write (119 samples, 2.97%) + + <st.. + + + std::io::Write::write_all (133 samples, 3.32%) + + std.. + + + <termcolor::LossyStandardStream<W> as termcolor::WriteColor>::set_color (233 samples, 5.82%) + + <termco.. + + + <termcolor::LossyStandardStream<W> as std::io::Write>::flush (2 samples, 0.05%) + + + + + <termcolor::ColorSpec as core::cmp::PartialEq>::eq (9 samples, 0.22%) + + + + + <termcolor::ColorSpec as core::clone::Clone>::clone (5 samples, 0.12%) + + + + + write_null (4 samples, 0.10%) + + + + + srso_alias_safe_ret (4 samples, 0.10%) + + + + + syscall_return_via_sysret (15 samples, 0.37%) + + + + + srso_alias_return_thunk (2 samples, 0.05%) + + + + + srso_alias_safe_ret (2 samples, 0.05%) + + + + + srso_alias_safe_ret (5 samples, 0.12%) + + + + + srso_alias_return_thunk (3 samples, 0.07%) + + + + + srso_alias_safe_ret (3 samples, 0.07%) + + + + + exit_to_user_mode_prepare (5 samples, 0.12%) + + + + + amd_clear_divider (2 samples, 0.05%) + + + + + syscall_exit_to_user_mode (42 samples, 1.05%) + + + + + srso_alias_return_thunk (5 samples, 0.12%) + + + + + srso_alias_safe_ret (5 samples, 0.12%) + + + + + write_null (49 samples, 1.22%) + + + + + srso_alias_safe_ret (1 samples, 0.02%) + + + + + srso_alias_return_thunk (8 samples, 0.20%) + + + + + srso_alias_safe_ret (8 samples, 0.20%) + + + + + security_file_permission (11 samples, 0.27%) + + + + + rw_verify_area (6 samples, 0.15%) + + + + + fsnotify (18 samples, 0.45%) + + + + + lockref_put_return (48 samples, 1.20%) + + + + + dput (65 samples, 1.62%) + + + + + rcu_read_unlock_strict (1 samples, 0.02%) + + + + + asm_sysvec_hyperv_stimer0 (1 samples, 0.02%) + + + + + sysvec_hyperv_stimer0 (1 samples, 0.02%) + + + + + irq_exit_rcu (1 samples, 0.02%) + + + + + idle_cpu (1 samples, 0.02%) + + + + + lockref_get_not_zero (6 samples, 0.15%) + + + + + dget_parent (9 samples, 0.22%) + + + + + __fsnotify_parent (119 samples, 2.97%) + + __f.. + + + vfs_write (379 samples, 9.47%) + + vfs_write + + + srso_alias_safe_ret (1 samples, 0.02%) + + + + + srso_alias_return_thunk (1 samples, 0.02%) + + + + + srso_alias_safe_ret (1 samples, 0.02%) + + + + + fput_many (26 samples, 0.65%) + + + + + srso_alias_return_thunk (20 samples, 0.50%) + + + + + srso_alias_safe_ret (20 samples, 0.50%) + + + + + srso_alias_return_thunk (1 samples, 0.02%) + + + + + srso_alias_safe_ret (1 samples, 0.02%) + + + + + rcu_read_unlock_strict (1 samples, 0.02%) + + + + + __fget_files (34 samples, 0.85%) + + + + + __fget_light (49 samples, 1.22%) + + + + + __fdget_pos (118 samples, 2.95%) + + __.. + + + ksys_write (563 samples, 14.07%) + + ksys_write + + + __x64_sys_write (5 samples, 0.12%) + + + + + do_syscall_64 (643 samples, 16.07%) + + do_syscall_64 + + + entry_SYSCALL_64_after_hwframe (661 samples, 16.52%) + + entry_SYSCALL_64_after_hw.. + + + entry_SYSCALL_64 (42 samples, 1.05%) + + + + + __x86_indirect_thunk_rax (5 samples, 0.12%) + + + + + __GI___pthread_enable_asynccancel (2 samples, 0.05%) + + + + + __GI___pthread_disable_asynccancel (11 samples, 0.27%) + + + + + __GI___libc_write (791 samples, 19.77%) + + __GI___libc_write + + + std::io::buffered::bufwriter::BufWriter<W>::flush_buf (792 samples, 19.79%) + + std::io::buffered::bufwriter::B.. + + + <&std::io::stdio::Stdout as std::io::Write>::flush (811 samples, 20.26%) + + <&std::io::stdio::Stdout as std:.. + + + <std::io::stdio::Stdout as std::io::Write>::flush (819 samples, 20.46%) + + <std::io::stdio::Stdout as std::.. + + + s4lib::printer::printers::PrinterLogMessage::print_sysline_color (1,405 samples, 35.11%) + + s4lib::printer::printers::PrinterLogMessage::print_syslin.. + + + hashbrown::raw::RawTable<T,A>::remove_entry (13 samples, 0.32%) + + + + + hashbrown::set::HashSet<T,S,A>::remove (14 samples, 0.35%) + + + + + core::hash::BuildHasher::hash_one (1 samples, 0.02%) + + + + + core::hash::BuildHasher::hash_one (1 samples, 0.02%) + + + + + hashbrown::set::HashSet<T,S,A>::insert (2 samples, 0.05%) + + + + + hashbrown::raw::RawTable<T>::with_capacity (1 samples, 0.02%) + + + + + malloc (1 samples, 0.02%) + + + + + _int_malloc (1 samples, 0.02%) + + + + + malloc_consolidate (1 samples, 0.02%) + + + + + unlink_chunk.constprop.0 (1 samples, 0.02%) + + + + + hashbrown::raw::RawTable<T,A>::insert (1 samples, 0.02%) + + + + + hashbrown::map::HashMap<K,V,S,A>::get_mut (3 samples, 0.07%) + + + + + __memmove_avx512_unaligned_erms (47 samples, 1.17%) + + + + + crossbeam_channel::channel::read (49 samples, 1.22%) + + + + + asm_sysvec_hyperv_stimer0 (1 samples, 0.02%) + + + + + sysvec_hyperv_stimer0 (1 samples, 0.02%) + + + + + irq_exit_rcu (1 samples, 0.02%) + + + + + __softirqentry_text_start (1 samples, 0.02%) + + + + + rebalance_domains (1 samples, 0.02%) + + + + + load_balance (1 samples, 0.02%) + + + + + srso_alias_return_thunk (1 samples, 0.02%) + + + + + __memmove_avx512_unaligned_erms (11 samples, 0.27%) + + + + + crossbeam_channel::select::SelectedOperation::recv (61 samples, 1.52%) + + + + + syscall_exit_to_user_mode (1 samples, 0.02%) + + + + + exit_to_user_mode_prepare (1 samples, 0.02%) + + + + + __rseq_handle_notify_resume (1 samples, 0.02%) + + + + + __get_user_8 (1 samples, 0.02%) + + + + + finish_task_switch.isra.0 (1 samples, 0.02%) + + + + + dequeue_task_fair (1 samples, 0.02%) + + + + + dequeue_entity (1 samples, 0.02%) + + + + + update_load_avg (1 samples, 0.02%) + + + + + entry_SYSCALL_64_after_hwframe (9 samples, 0.22%) + + + + + do_syscall_64 (9 samples, 0.22%) + + + + + __x64_sys_futex (8 samples, 0.20%) + + + + + do_futex (8 samples, 0.20%) + + + + + futex_wait (8 samples, 0.20%) + + + + + futex_wait_queue_me (8 samples, 0.20%) + + + + + schedule (8 samples, 0.20%) + + + + + __schedule (8 samples, 0.20%) + + + + + __perf_event_task_sched_out (6 samples, 0.15%) + + + + + amd_pmu_disable_all (6 samples, 0.15%) + + + + + x86_pmu_disable_all (6 samples, 0.15%) + + + + + syscall (10 samples, 0.25%) + + + + + std::sys_common::thread_info::current_thread (1 samples, 0.02%) + + + + + std::thread::park (12 samples, 0.30%) + + + + + update_rq_clock (1 samples, 0.02%) + + + + + sched_clock_cpu (1 samples, 0.02%) + + + + + read_hv_sched_clock_tsc (1 samples, 0.02%) + + + + + read_hv_clock_tsc (1 samples, 0.02%) + + + + + update_curr (1 samples, 0.02%) + + + + + cpuacct_charge (1 samples, 0.02%) + + + + + srso_alias_safe_ret (1 samples, 0.02%) + + + + + pick_next_task_fair (5 samples, 0.12%) + + + + + pick_next_entity (3 samples, 0.07%) + + + + + schedule (8 samples, 0.20%) + + + + + __schedule (8 samples, 0.20%) + + + + + yield_task_fair (1 samples, 0.02%) + + + + + __raw_callee_save___pv_queued_spin_unlock (1 samples, 0.02%) + + + + + do_sched_yield (3 samples, 0.07%) + + + + + __x64_sys_sched_yield (12 samples, 0.30%) + + + + + entry_SYSCALL_64_after_hwframe (14 samples, 0.35%) + + + + + do_syscall_64 (14 samples, 0.35%) + + + + + entry_SYSCALL_64 (2 samples, 0.05%) + + + + + __sched_yield (18 samples, 0.45%) + + + + + crossbeam_channel::context::Context::wait_until (45 samples, 1.12%) + + + + + <crossbeam_channel::flavors::array::Receiver<T> as crossbeam_channel::select::SelectHandle>::try_select (2 samples, 0.05%) + + + + + <crossbeam_channel::channel::Receiver<T> as crossbeam_channel::select::SelectHandle>::unregister (1 samples, 0.02%) + + + + + crossbeam_channel::context::Context::with::{{closure}} (49 samples, 1.22%) + + + + + <crossbeam_channel::channel::Receiver<T> as crossbeam_channel::select::SelectHandle>::accept (1 samples, 0.02%) + + + + + <crossbeam_channel::flavors::array::Receiver<T> as crossbeam_channel::select::SelectHandle>::try_select (21 samples, 0.52%) + + + + + crossbeam_channel::select::run_select (77 samples, 1.92%) + + c.. + + + crossbeam_channel::select::Select::select (79 samples, 1.97%) + + c.. + + + crossbeam_channel::select::Select::new (2 samples, 0.05%) + + + + + malloc (2 samples, 0.05%) + + + + + core::ptr::drop_in_place<s4lib::data::common::LogMessage> (1 samples, 0.02%) + + + + + core::hash::BuildHasher::hash_one (1 samples, 0.02%) + + + + + __memmove_avx512_unaligned_erms (1 samples, 0.02%) + + + + + alloc::collections::btree::remove::<impl alloc::collections::btree::node::Handle<alloc::collections::btree::node::NodeRef<alloc::collections::btree::node::marker::Mut,K,V,alloc::collections::btree::node::marker::Leaf>,alloc::collections::btree::node::marker::KV>>::remove_leaf_kv (16 samples, 0.40%) + + + + + alloc::collections::btree::remove::<impl alloc::collections::btree::node::Handle<alloc::collections::btree::node::NodeRef<alloc::collections::btree::node::marker::Mut,K,V,alloc::collections::btree::node::marker::LeafOrInternal>,alloc::collections::btree::node::marker::KV>>::remove_kv_tracking (31 samples, 0.77%) + + + + + alloc::collections::btree::map::BTreeMap<K,V,A>::remove (57 samples, 1.42%) + + + + + alloc::collections::btree::map::entry::OccupiedEntry<K,V,A>::remove_entry (57 samples, 1.42%) + + + + + alloc::collections::btree::node::Handle<alloc::collections::btree::node::NodeRef<alloc::collections::btree::node::marker::Mut,K,V,alloc::collections::btree::node::marker::Leaf>,alloc::collections::btree::node::marker::Edge>::insert_recursing (3 samples, 0.07%) + + + + + alloc::collections::btree::map::entry::VacantEntry<K,V,A>::insert (5 samples, 0.12%) + + + + + alloc::collections::btree::map::BTreeMap<K,V,A>::insert (14 samples, 0.35%) + + + + + __memmove_avx512_unaligned_erms (27 samples, 0.67%) + + + + + s4::processing_loop (1,743 samples, 43.55%) + + s4::processing_loop + + + std::rt::lang_start::_{{closure}} (1,744 samples, 43.58%) + + std::rt::lang_start::_{{closure}} + + + std::sys_common::backtrace::__rust_begin_short_backtrace (1,744 samples, 43.58%) + + std::sys_common::backtrace::__rust_begin_short_backtrace + + + s4::main (1,744 samples, 43.58%) + + s4::main + + + clap_builder::builder::command::Command::get_matches_from (1 samples, 0.02%) + + + + + clap_lex::RawArgs::cursor (1 samples, 0.02%) + + + + + asm_exc_page_fault (1 samples, 0.02%) + + + + + exc_page_fault (1 samples, 0.02%) + + + + + do_user_addr_fault (1 samples, 0.02%) + + + + + handle_mm_fault (1 samples, 0.02%) + + + + + __handle_mm_fault (1 samples, 0.02%) + + + + + filemap_map_pages (1 samples, 0.02%) + + + + + next_uptodate_page (1 samples, 0.02%) + + + + + _start (1,751 samples, 43.75%) + + _start + + + __libc_start_main@@GLIBC_2.34 (1,745 samples, 43.60%) + + __libc_start_main@@GLIBC_2.34 + + + __libc_start_call_main (1,745 samples, 43.60%) + + __libc_start_call_main + + + main (1,745 samples, 43.60%) + + main + + + std::rt::lang_start_internal (1,745 samples, 43.60%) + + std::rt::lang_start_internal + + + pthread_getattr_np@@GLIBC_2.32 (1 samples, 0.02%) + + + + + __getdelim (1 samples, 0.02%) + + + + + _IO_file_underflow@@GLIBC_2.2.5 (1 samples, 0.02%) + + + + + __read_nocancel (1 samples, 0.02%) + + + + + entry_SYSCALL_64_after_hwframe (1 samples, 0.02%) + + + + + do_syscall_64 (1 samples, 0.02%) + + + + + ksys_read (1 samples, 0.02%) + + + + + vfs_read (1 samples, 0.02%) + + + + + seq_read (1 samples, 0.02%) + + + + + seq_read_iter (1 samples, 0.02%) + + + + + show_map (1 samples, 0.02%) + + + + + show_map_vma (1 samples, 0.02%) + + + + + show_vma_header_prefix (1 samples, 0.02%) + + + + + seq_put_hex_ll (1 samples, 0.02%) + + + + + [unknown] (17 samples, 0.42%) + + + + + <std::io::stdio::StdoutLock as std::io::Write>::write (17 samples, 0.42%) + + + + + __GI___libc_write (17 samples, 0.42%) + + + + + entry_SYSCALL_64 (17 samples, 0.42%) + + + + + s4 (1,852 samples, 46.28%) + + s4 + + + [[heap]] (30 samples, 0.75%) + + + + + __GI___libc_write (30 samples, 0.75%) + + + + + entry_SYSCALL_64 (30 samples, 0.75%) + + + + + x86_pmu_enable_all (14 samples, 0.35%) + + + + + perf-exec (15 samples, 0.37%) + + + + + entry_SYSCALL_64_after_hwframe (15 samples, 0.37%) + + + + + do_syscall_64 (15 samples, 0.37%) + + + + + __x64_sys_execve (15 samples, 0.37%) + + + + + do_execveat_common.isra.0 (15 samples, 0.37%) + + + + + bprm_execve (15 samples, 0.37%) + + + + + load_elf_binary (15 samples, 0.37%) + + + + + begin_new_exec (15 samples, 0.37%) + + + + + perf_event_exec (15 samples, 0.37%) + + + + + error_entry (1 samples, 0.02%) + + + + + srso_alias_return_thunk (1 samples, 0.02%) + + + + + srso_alias_safe_ret (1 samples, 0.02%) + + + + + lru_cache_add (1 samples, 0.02%) + + + + + __pagevec_lru_add (1 samples, 0.02%) + + + + + page_mapping (1 samples, 0.02%) + + + + + asm_exc_page_fault (2 samples, 0.05%) + + + + + exc_page_fault (2 samples, 0.05%) + + + + + do_user_addr_fault (2 samples, 0.05%) + + + + + handle_mm_fault (2 samples, 0.05%) + + + + + __handle_mm_fault (2 samples, 0.05%) + + + + + regex_automata::nfa::thompson::pikevm::ActiveStates::new (3 samples, 0.07%) + + + + + regex_automata::nfa::thompson::pikevm::ActiveStates::reset (3 samples, 0.07%) + + + + + __memset_avx512_unaligned_erms (3 samples, 0.07%) + + + + + <regex_automata::meta::strategy::ReverseInner as regex_automata::meta::strategy::Strategy>::create_cache (4 samples, 0.10%) + + + + + regex_automata::hybrid::dfa::Cache::new (1 samples, 0.02%) + + + + + regex_automata::hybrid::dfa::Lazy::init_cache (1 samples, 0.02%) + + + + + regex_automata::hybrid::dfa::Lazy::set_transition (1 samples, 0.02%) + + + + + alloc::raw_vec::RawVec<T,A>::reserve::do_reserve_and_handle (4 samples, 0.10%) + + + + + alloc::raw_vec::finish_grow (4 samples, 0.10%) + + + + + malloc (4 samples, 0.10%) + + + + + _int_malloc (4 samples, 0.10%) + + + + + malloc_consolidate (4 samples, 0.10%) + + + + + unlink_chunk.constprop.0 (4 samples, 0.10%) + + + + + page_add_new_anon_rmap (1 samples, 0.02%) + + + + + rmqueue_bulk (1 samples, 0.02%) + + + + + __list_del_entry_valid (1 samples, 0.02%) + + + + + do_user_addr_fault (3 samples, 0.07%) + + + + + handle_mm_fault (3 samples, 0.07%) + + + + + __handle_mm_fault (3 samples, 0.07%) + + + + + __alloc_pages (2 samples, 0.05%) + + + + + get_page_from_freelist (2 samples, 0.05%) + + + + + kernel_init_free_pages.part.0 (1 samples, 0.02%) + + + + + clear_page_erms (1 samples, 0.02%) + + + + + asm_exc_page_fault (4 samples, 0.10%) + + + + + exc_page_fault (4 samples, 0.10%) + + + + + regex_automata::util::pool::inner::Pool<T,F>::get_slow (13 samples, 0.32%) + + + + + regex_automata::meta::regex::Builder::build_many_from_hir::{{closure}} (13 samples, 0.32%) + + + + + <regex_automata::meta::strategy::Core as regex_automata::meta::strategy::Strategy>::create_cache (9 samples, 0.22%) + + + + + regex_automata::nfa::thompson::pikevm::ActiveStates::new (9 samples, 0.22%) + + + + + regex_automata::nfa::thompson::pikevm::ActiveStates::reset (9 samples, 0.22%) + + + + + __memset_avx512_unaligned_erms (5 samples, 0.12%) + + + + + regex_syntax::hir::translate::TranslatorI::push (1 samples, 0.02%) + + + + + alloc::raw_vec::RawVec<T,A>::reserve_for_push (1 samples, 0.02%) + + + + + alloc::raw_vec::finish_grow (1 samples, 0.02%) + + + + + realloc (1 samples, 0.02%) + + + + + _int_realloc (1 samples, 0.02%) + + + + + _int_malloc (1 samples, 0.02%) + + + + + <regex_syntax::hir::translate::TranslatorI as regex_syntax::ast::visitor::Visitor>::visit_pre (2 samples, 0.05%) + + + + + regex_syntax::hir::translate::TranslatorI::push (2 samples, 0.05%) + + + + + regex_syntax::unicode::SimpleCaseFolder::overlaps (1 samples, 0.02%) + + + + + regex_syntax::hir::translate::TranslatorI::push (2 samples, 0.05%) + + + + + regex_syntax::hir::Properties::repetition (1 samples, 0.02%) + + + + + malloc (1 samples, 0.02%) + + + + + regex_syntax::hir::Hir::literal (1 samples, 0.02%) + + + + + alloc::vec::Vec<T,A>::into_boxed_slice (1 samples, 0.02%) + + + + + unlink_chunk.constprop.0 (1 samples, 0.02%) + + + + + _int_malloc (2 samples, 0.05%) + + + + + malloc (3 samples, 0.07%) + + + + + regex_syntax::hir::Hir::into_parts (5 samples, 0.12%) + + + + + malloc (3 samples, 0.07%) + + + + + _int_malloc (3 samples, 0.07%) + + + + + cfree@GLIBC_2.2.5 (1 samples, 0.02%) + + + + + _int_free (1 samples, 0.02%) + + + + + alloc::raw_vec::RawVec<T,A>::reserve_for_push (2 samples, 0.05%) + + + + + regex_syntax::hir::Hir::concat (14 samples, 0.35%) + + + + + regex_syntax::hir::Properties::class (1 samples, 0.02%) + + + + + malloc (1 samples, 0.02%) + + + + + _int_malloc (1 samples, 0.02%) + + + + + regex_syntax::hir::Hir::class (2 samples, 0.05%) + + + + + malloc (1 samples, 0.02%) + + + + + _int_malloc (1 samples, 0.02%) + + + + + sysmalloc (1 samples, 0.02%) + + + + + __mprotect (1 samples, 0.02%) + + + + + entry_SYSCALL_64_after_hwframe (1 samples, 0.02%) + + + + + do_syscall_64 (1 samples, 0.02%) + + + + + __x64_sys_mprotect (1 samples, 0.02%) + + + + + do_mprotect_pkey (1 samples, 0.02%) + + + + + mprotect_fixup (1 samples, 0.02%) + + + + + perf_event_mmap (1 samples, 0.02%) + + + + + perf_iterate_sb (1 samples, 0.02%) + + + + + regex_syntax::hir::Properties::alternation (1 samples, 0.02%) + + + + + regex_syntax::hir::Hir::into_parts (1 samples, 0.02%) + + + + + regex_syntax::hir::Hir::alternation (3 samples, 0.07%) + + + + + regex_syntax::hir::ClassUnicode::try_case_fold_simple (1 samples, 0.02%) + + + + + <regex_syntax::hir::ClassUnicodeRange as regex_syntax::hir::interval::Interval>::case_fold_simple (1 samples, 0.02%) + + + + + malloc (1 samples, 0.02%) + + + + + _int_malloc (1 samples, 0.02%) + + + + + unlink_chunk.constprop.0 (1 samples, 0.02%) + + + + + sysmalloc (1 samples, 0.02%) + + + + + asm_exc_page_fault (1 samples, 0.02%) + + + + + _int_malloc (2 samples, 0.05%) + + + + + malloc_consolidate (1 samples, 0.02%) + + + + + do_user_addr_fault (1 samples, 0.02%) + + + + + handle_mm_fault (1 samples, 0.02%) + + + + + __handle_mm_fault (1 samples, 0.02%) + + + + + __alloc_pages (1 samples, 0.02%) + + + + + alloc::raw_vec::finish_grow (4 samples, 0.10%) + + + + + realloc (4 samples, 0.10%) + + + + + _int_realloc (4 samples, 0.10%) + + + + + __memmove_avx512_unaligned_erms (2 samples, 0.05%) + + + + + asm_exc_page_fault (2 samples, 0.05%) + + + + + exc_page_fault (2 samples, 0.05%) + + + + + alloc::raw_vec::RawVec<T,A>::reserve_for_push (5 samples, 0.12%) + + + + + alloc::raw_vec::RawVec<T,A>::reserve::do_reserve_and_handle (1 samples, 0.02%) + + + + + alloc::raw_vec::finish_grow (1 samples, 0.02%) + + + + + __memmove_avx512_unaligned_erms (1 samples, 0.02%) + + + + + <regex_syntax::hir::translate::TranslatorI as regex_syntax::ast::visitor::Visitor>::visit_post (37 samples, 0.92%) + + + + + regex_syntax::hir::translate::Translator::translate (41 samples, 1.02%) + + + + + regex_syntax::ast::visitor::visit (41 samples, 1.02%) + + + + + alloc::raw_vec::RawVec<T,A>::reserve_for_push (1 samples, 0.02%) + + + + + alloc::raw_vec::finish_grow (1 samples, 0.02%) + + + + + realloc (1 samples, 0.02%) + + + + + _int_realloc (1 samples, 0.02%) + + + + + _int_malloc (1 samples, 0.02%) + + + + + <regex_syntax::ast::parse::NestLimiter<P> as regex_syntax::ast::visitor::Visitor>::visit_pre (1 samples, 0.02%) + + + + + regex_syntax::ast::visitor::visit (3 samples, 0.07%) + + + + + malloc (3 samples, 0.07%) + + + + + _int_malloc (3 samples, 0.07%) + + + + + regex_syntax::ast::Concat::into_ast (4 samples, 0.10%) + + + + + regex_syntax::ast::parse::ParserI<P>::push_alternate (10 samples, 0.25%) + + + + + regex_syntax::ast::parse::ParserI<P>::maybe_parse_ascii_class (1 samples, 0.02%) + + + + + regex_syntax::ast::ClassSetUnion::push (1 samples, 0.02%) + + + + + __memmove_avx512_unaligned_erms (1 samples, 0.02%) + + + + + regex_syntax::ast::parse::ParserI<P>::parse_set_class (3 samples, 0.07%) + + + + + _int_malloc (1 samples, 0.02%) + + + + + malloc (2 samples, 0.05%) + + + + + alloc::raw_vec::RawVec<T,A>::reserve_for_push (1 samples, 0.02%) + + + + + alloc::raw_vec::finish_grow (1 samples, 0.02%) + + + + + malloc (1 samples, 0.02%) + + + + + _int_malloc (1 samples, 0.02%) + + + + + regex_syntax::ast::parse::Parser::parse (27 samples, 0.67%) + + + + + regex_syntax::ast::parse::ParserI<P>::parse_with_comments (27 samples, 0.67%) + + + + + core::ptr::drop_in_place<regex_syntax::ast::parse::Parser> (1 samples, 0.02%) + + + + + <alloc::vec::Vec<T,A> as core::ops::drop::Drop>::drop (1 samples, 0.02%) + + + + + asm_exc_page_fault (1 samples, 0.02%) + + + + + exc_page_fault (1 samples, 0.02%) + + + + + do_user_addr_fault (1 samples, 0.02%) + + + + + handle_mm_fault (1 samples, 0.02%) + + + + + __handle_mm_fault (1 samples, 0.02%) + + + + + filemap_map_pages (1 samples, 0.02%) + + + + + next_uptodate_page (1 samples, 0.02%) + + + + + unlink_chunk.constprop.0 (1 samples, 0.02%) + + + + + core::ptr::drop_in_place<regex_syntax::ast::ClassSet> (7 samples, 0.17%) + + + + + <regex_syntax::ast::ClassSet as core::ops::drop::Drop>::drop (7 samples, 0.17%) + + + + + <alloc::vec::Vec<T,A> as alloc::vec::spec_extend::SpecExtend<T,I>>::spec_extend (7 samples, 0.17%) + + + + + alloc::raw_vec::RawVec<T,A>::reserve::do_reserve_and_handle (7 samples, 0.17%) + + + + + alloc::raw_vec::finish_grow (7 samples, 0.17%) + + + + + realloc (7 samples, 0.17%) + + + + + _int_realloc (7 samples, 0.17%) + + + + + _int_malloc (7 samples, 0.17%) + + + + + malloc_consolidate (7 samples, 0.17%) + + + + + core::ptr::drop_in_place<regex_syntax::ast::Ast> (8 samples, 0.20%) + + + + + <regex_syntax::ast::Ast as core::ops::drop::Drop>::drop (1 samples, 0.02%) + + + + + _int_free (6 samples, 0.15%) + + + + + cfree@GLIBC_2.2.5 (11 samples, 0.27%) + + + + + malloc_consolidate (1 samples, 0.02%) + + + + + unlink_chunk.constprop.0 (1 samples, 0.02%) + + + + + _int_malloc (2 samples, 0.05%) + + + + + alloc::raw_vec::RawVec<T,A>::reserve::do_reserve_and_handle (3 samples, 0.07%) + + + + + alloc::raw_vec::finish_grow (3 samples, 0.07%) + + + + + realloc (3 samples, 0.07%) + + + + + _int_realloc (3 samples, 0.07%) + + + + + __memmove_avx512_unaligned_erms (1 samples, 0.02%) + + + + + core::ptr::drop_in_place<regex_syntax::ast::Ast> (23 samples, 0.57%) + + + + + <regex_syntax::ast::Ast as core::ops::drop::Drop>::drop (23 samples, 0.57%) + + + + + <alloc::vec::Vec<T,A> as alloc::vec::spec_extend::SpecExtend<T,I>>::spec_extend (4 samples, 0.10%) + + + + + s4lib::readers::syslinereader::SyslineReader::find_sysline_in_block_year (107 samples, 2.67%) + + s4.. + + + s4lib::readers::syslinereader::SyslineReader::parse_datetime_in_line_cached (107 samples, 2.67%) + + s4.. + + + s4lib::data::datetime::bytes_to_regex_to_datetime (107 samples, 2.67%) + + s4.. + + + once_cell::imp::OnceCell<T>::initialize (94 samples, 2.35%) + + o.. + + + once_cell::imp::initialize_or_wait (94 samples, 2.35%) + + o.. + + + once_cell::imp::OnceCell<T>::initialize::_{{closure}} (94 samples, 2.35%) + + o.. + + + regex::regex::bytes::Regex::new (94 samples, 2.35%) + + r.. + + + regex::builders::Builder::build_one_bytes (94 samples, 2.35%) + + r.. + + + regex_automata::meta::regex::Builder::build (94 samples, 2.35%) + + r.. + + + <alloc::vec::Vec<T,A> as core::ops::drop::Drop>::drop (2 samples, 0.05%) + + + + + <regex_syntax::hir::Hir as core::ops::drop::Drop>::drop (2 samples, 0.05%) + + + + + cfree@GLIBC_2.2.5 (2 samples, 0.05%) + + + + + _int_free (2 samples, 0.05%) + + + + + s4lib::readers::syslogprocessor::SyslogProcessor::process_stage1_blockzero_analysis (108 samples, 2.70%) + + s4.. + + + s4lib::readers::blockreader::BlockReader::read_block (1 samples, 0.02%) + + + + + s4lib::readers::blockreader::BlockReader::read_block_File (1 samples, 0.02%) + + + + + std::io::default_read_exact (1 samples, 0.02%) + + + + + <std::process::ChildStdout as std::io::Read>::read (1 samples, 0.02%) + + + + + read (1 samples, 0.02%) + + + + + entry_SYSCALL_64_after_hwframe (1 samples, 0.02%) + + + + + do_syscall_64 (1 samples, 0.02%) + + + + + syscall_exit_to_user_mode (1 samples, 0.02%) + + + + + exit_to_user_mode_prepare (1 samples, 0.02%) + + + + + __rseq_handle_notify_resume (1 samples, 0.02%) + + + + + s4lib::readers::blockreader::BlockReader::drop_block (1 samples, 0.02%) + + + + + cfree@GLIBC_2.2.5 (1 samples, 0.02%) + + + + + _int_free (1 samples, 0.02%) + + + + + lru::LruCache<K,V,S>::pop (1 samples, 0.02%) + + + + + core::ptr::drop_in_place<core::option::Option<s4lib::common::ResultS3<(u64,alloc::sync::Arc<s4lib::data::line::Line>),std::io::error::Error>>> (1 samples, 0.02%) + + + + + cfree@GLIBC_2.2.5 (3 samples, 0.07%) + + + + + _int_free (3 samples, 0.07%) + + + + + cfree@GLIBC_2.2.5 (2 samples, 0.05%) + + + + + _int_free (2 samples, 0.05%) + + + + + __memmove_avx512_unaligned_erms (2 samples, 0.05%) + + + + + alloc::collections::btree::remove::<impl alloc::collections::btree::node::Handle<alloc::collections::btree::node::NodeRef<alloc::collections::btree::node::marker::Mut,K,V,alloc::collections::btree::node::marker::Leaf>,alloc::collections::btree::node::marker::KV>>::remove_leaf_kv (9 samples, 0.22%) + + + + + alloc::collections::btree::remove::<impl alloc::collections::btree::node::Handle<alloc::collections::btree::node::NodeRef<alloc::collections::btree::node::marker::Mut,K,V,alloc::collections::btree::node::marker::LeafOrInternal>,alloc::collections::btree::node::marker::KV>>::remove_kv_tracking (10 samples, 0.25%) + + + + + alloc::collections::btree::map::entry::OccupiedEntry<K,V,A>::remove_entry (12 samples, 0.30%) + + + + + __rdl_dealloc (1 samples, 0.02%) + + + + + <alloc::vec::into_iter::IntoIter<T,A> as core::ops::drop::Drop>::drop (4 samples, 0.10%) + + + + + s4lib::readers::linereader::LineReader::drop_line (33 samples, 0.82%) + + + + + _int_free (2 samples, 0.05%) + + + + + cfree@GLIBC_2.2.5 (4 samples, 0.10%) + + + + + s4lib::readers::linereader::LineReader::drop_lines (46 samples, 1.15%) + + + + + lru::LruCache<K,V,S>::pop (3 samples, 0.07%) + + + + + cfree@GLIBC_2.2.5 (1 samples, 0.02%) + + + + + _int_free (1 samples, 0.02%) + + + + + cfree@GLIBC_2.2.5 (2 samples, 0.05%) + + + + + _int_free (2 samples, 0.05%) + + + + + __memmove_avx512_unaligned_erms (2 samples, 0.05%) + + + + + alloc::collections::btree::remove::<impl alloc::collections::btree::node::Handle<alloc::collections::btree::node::NodeRef<alloc::collections::btree::node::marker::Mut,K,V,alloc::collections::btree::node::marker::LeafOrInternal>,alloc::collections::btree::node::marker::KV>>::remove_kv_tracking (5 samples, 0.12%) + + + + + alloc::collections::btree::remove::<impl alloc::collections::btree::node::Handle<alloc::collections::btree::node::NodeRef<alloc::collections::btree::node::marker::Mut,K,V,alloc::collections::btree::node::marker::Leaf>,alloc::collections::btree::node::marker::KV>>::remove_leaf_kv (5 samples, 0.12%) + + + + + alloc::collections::btree::map::entry::OccupiedEntry<K,V,A>::remove_entry (9 samples, 0.22%) + + + + + s4lib::readers::syslinereader::SyslineReader::drop_sysline (90 samples, 2.25%) + + s.. + + + asm_exc_page_fault (1 samples, 0.02%) + + + + + exc_page_fault (1 samples, 0.02%) + + + + + do_user_addr_fault (1 samples, 0.02%) + + + + + handle_mm_fault (1 samples, 0.02%) + + + + + __handle_mm_fault (1 samples, 0.02%) + + + + + __cgroup_throttle_swaprate (1 samples, 0.02%) + + + + + srso_alias_return_thunk (1 samples, 0.02%) + + + + + srso_alias_safe_ret (1 samples, 0.02%) + + + + + sysmalloc (2 samples, 0.05%) + + + + + __mprotect (1 samples, 0.02%) + + + + + entry_SYSCALL_64_after_hwframe (1 samples, 0.02%) + + + + + do_syscall_64 (1 samples, 0.02%) + + + + + __x64_sys_mprotect (1 samples, 0.02%) + + + + + do_mprotect_pkey (1 samples, 0.02%) + + + + + mprotect_fixup (1 samples, 0.02%) + + + + + perf_event_mmap (1 samples, 0.02%) + + + + + perf_iterate_sb (1 samples, 0.02%) + + + + + perf_iterate_ctx (1 samples, 0.02%) + + + + + perf_event_mmap_output (1 samples, 0.02%) + + + + + unlink_chunk.constprop.0 (1 samples, 0.02%) + + + + + malloc_consolidate (18 samples, 0.45%) + + + + + malloc (39 samples, 0.97%) + + + + + _int_malloc (39 samples, 0.97%) + + + + + <alloc::collections::btree::map::Iter<K,V> as core::iter::traits::iterator::Iterator>::next (2 samples, 0.05%) + + + + + s4lib::readers::syslinereader::SyslineReader::drop_data (146 samples, 3.65%) + + s4li.. + + + s4lib::readers::syslogprocessor::SyslogProcessor::drop_data_try (163 samples, 4.07%) + + s4li.. + + + _int_malloc (12 samples, 0.30%) + + + + + malloc (14 samples, 0.35%) + + + + + __rdl_alloc (1 samples, 0.02%) + + + + + s4lib::data::line::Line::get_boxptrs (17 samples, 0.42%) + + + + + s4lib::data::datetime::datetime_from_str_workaround_Issue660 (3 samples, 0.07%) + + + + + chrono::naive::datetime::NaiveDateTime::checked_sub_offset (2 samples, 0.05%) + + + + + chrono::offset::LocalResult<T>::and_then (26 samples, 0.65%) + + + + + chrono::naive::date::NaiveDate::num_days_from_ce (1 samples, 0.02%) + + + + + chrono::format::parsed::Parsed::to_naive_date (4 samples, 0.10%) + + + + + chrono::format::parsed::Parsed::to_naive_datetime_with_offset (6 samples, 0.15%) + + + + + core::str::<impl str>::trim_start_matches (2 samples, 0.05%) + + + + + <chrono::format::strftime::StrftimeItems as core::iter::traits::iterator::Iterator>::next (8 samples, 0.20%) + + + + + chrono::format::parse::parse_internal (111 samples, 2.77%) + + ch.. + + + chrono::naive::datetime::NaiveDateTime::parse_from_str (121 samples, 3.02%) + + chr.. + + + <chrono::offset::fixed::FixedOffset as chrono::offset::TimeZone>::offset_from_local_datetime (2 samples, 0.05%) + + + + + s4lib::data::datetime::datetime_parse_from_str (157 samples, 3.92%) + + s4li.. + + + <core::hash::sip::Hasher<S> as core::hash::Hasher>::write (44 samples, 1.10%) + + + + + core::hash::BuildHasher::hash_one (98 samples, 2.45%) + + co.. + + + __memcmp_evex_movbe (7 samples, 0.17%) + + + + + regex_automata::util::captures::Captures::get_group_by_name (156 samples, 3.90%) + + rege.. + + + regex_automata::meta::regex::RegexInfo::props_union (5 samples, 0.12%) + + + + + malloc (4 samples, 0.10%) + + + + + __memset_avx512_unaligned_erms (4 samples, 0.10%) + + + + + regex_automata::meta::regex::Regex::create_captures (17 samples, 0.42%) + + + + + _int_free (7 samples, 0.17%) + + + + + cfree@GLIBC_2.2.5 (14 samples, 0.35%) + + + + + __memmove_avx512_unaligned_erms (6 samples, 0.15%) + + + + + __memset_avx512_unaligned_erms (5 samples, 0.12%) + + + + + regex_automata::nfa::thompson::backtrack::BoundedBacktracker::search_imp (98 samples, 2.45%) + + re.. + + + regex_automata::nfa::thompson::backtrack::BoundedBacktracker::try_search_slots_imp (99 samples, 2.47%) + + re.. + + + regex_automata::nfa::thompson::backtrack::BoundedBacktracker::try_search_slots (113 samples, 2.82%) + + re.. + + + regex_automata::meta::strategy::Core::search_slots_nofail (142 samples, 3.55%) + + rege.. + + + regex_automata::hybrid::search::find_fwd (36 samples, 0.90%) + + + + + regex_automata::hybrid::regex::Regex::try_search (42 samples, 1.05%) + + + + + <regex_automata::meta::strategy::Core as regex_automata::meta::strategy::Strategy>::search_slots (198 samples, 4.95%) + + <regex.. + + + s4lib::data::datetime::bytes_to_regex_to_datetime (595 samples, 14.87%) + + s4lib::data::datetime::.. + + + hashbrown::map::HashMap<K,V,S,A>::remove (1 samples, 0.02%) + + + + + lru::LruCache<K,V,S>::put (22 samples, 0.55%) + + + + + _int_free (1 samples, 0.02%) + + + + + cfree@GLIBC_2.2.5 (3 samples, 0.07%) + + + + + _int_malloc (6 samples, 0.15%) + + + + + malloc (11 samples, 0.27%) + + + + + alloc::raw_vec::RawVec<T,A>::reserve::do_reserve_and_handle (12 samples, 0.30%) + + + + + alloc::raw_vec::finish_grow (12 samples, 0.30%) + + + + + alloc::collections::btree::map::BTreeMap<K,V,A>::get_mut (4 samples, 0.10%) + + + + + _int_malloc (6 samples, 0.15%) + + + + + malloc (21 samples, 0.52%) + + + + + __rdl_alloc (2 samples, 0.05%) + + + + + <alloc::collections::btree::map::Iter<K,V> as core::iter::traits::iterator::Iterator>::next (3 samples, 0.07%) + + + + + <alloc::vec::Vec<T> as alloc::vec::spec_from_iter::SpecFromIter<T,I>>::from_iter (37 samples, 0.92%) + + + + + s4lib::readers::syslinereader::SyslineReader::parse_datetime_in_line_cached (732 samples, 18.29%) + + s4lib::readers::syslinereader.. + + + alloc::collections::btree::navigate::LeafRange<BorrowType,K,V>::perform_next_checked (4 samples, 0.10%) + + + + + alloc::collections::btree::navigate::LeafRange<BorrowType,K,V>::perform_next_back_checked (1 samples, 0.02%) + + + + + alloc::collections::btree::navigate::<impl alloc::collections::btree::node::NodeRef<alloc::collections::btree::node::marker::Immut,K,V,alloc::collections::btree::node::marker::LeafOrInternal>>::range_search (80 samples, 2.00%) + + a.. + + + malloc (5 samples, 0.12%) + + + + + _int_malloc (5 samples, 0.12%) + + + + + alloc::collections::btree::node::Handle<alloc::collections::btree::node::NodeRef<alloc::collections::btree::node::marker::Mut,K,V,alloc::collections::btree::node::marker::Leaf>,alloc::collections::btree::node::marker::Edge>::insert_recursing (12 samples, 0.30%) + + + + + alloc::collections::btree::map::BTreeMap<K,V,A>::insert (40 samples, 1.00%) + + + + + rangemap::map::RangeMap<K,V>::insert (138 samples, 3.45%) + + ran.. + + + malloc (4 samples, 0.10%) + + + + + unlink_chunk.constprop.0 (3 samples, 0.07%) + + + + + malloc (4 samples, 0.10%) + + + + + _int_malloc (4 samples, 0.10%) + + + + + alloc::collections::btree::node::Handle<alloc::collections::btree::node::NodeRef<alloc::collections::btree::node::marker::Mut,K,V,alloc::collections::btree::node::marker::Leaf>,alloc::collections::btree::node::marker::Edge>::insert_recursing (7 samples, 0.17%) + + + + + alloc::collections::btree::map::entry::VacantEntry<K,V,A>::insert (8 samples, 0.20%) + + + + + s4lib::readers::syslinereader::SyslineReader::insert_sysline (154 samples, 3.85%) + + s4li.. + + + alloc::collections::btree::navigate::LeafRange<BorrowType,K,V>::perform_next_back_checked (1 samples, 0.02%) + + + + + alloc::collections::btree::navigate::<impl alloc::collections::btree::node::NodeRef<alloc::collections::btree::node::marker::Immut,K,V,alloc::collections::btree::node::marker::LeafOrInternal>>::range_search (18 samples, 0.45%) + + + + + s4lib::readers::syslinereader::SyslineReader::check_store (50 samples, 1.25%) + + + + + _int_malloc (3 samples, 0.07%) + + + + + malloc (5 samples, 0.12%) + + + + + __memmove_avx512_unaligned_erms (4 samples, 0.10%) + + + + + alloc::collections::btree::node::Handle<alloc::collections::btree::node::NodeRef<alloc::collections::btree::node::marker::Mut,K,V,alloc::collections::btree::node::marker::Leaf>,alloc::collections::btree::node::marker::Edge>::insert_recursing (13 samples, 0.32%) + + + + + alloc::collections::btree::map::entry::VacantEntry<K,V,A>::insert (14 samples, 0.35%) + + + + + __memmove_avx512_unaligned_erms (2 samples, 0.05%) + + + + + alloc::collections::btree::node::Handle<alloc::collections::btree::node::NodeRef<alloc::collections::btree::node::marker::Mut,K,V,alloc::collections::btree::node::marker::Leaf>,alloc::collections::btree::node::marker::Edge>::insert_recursing (7 samples, 0.17%) + + + + + alloc::collections::btree::map::BTreeMap<K,V,A>::insert (30 samples, 0.75%) + + + + + s4lib::readers::linereader::LineReader::insert_line (50 samples, 1.25%) + + + + + alloc::collections::btree::navigate::LeafRange<BorrowType,K,V>::perform_next_checked (1 samples, 0.02%) + + + + + alloc::collections::btree::navigate::<impl alloc::collections::btree::node::NodeRef<alloc::collections::btree::node::marker::Immut,K,V,alloc::collections::btree::node::marker::LeafOrInternal>>::range_search (22 samples, 0.55%) + + + + + s4lib::readers::linereader::LineReader::get_linep (38 samples, 0.95%) + + + + + mark_page_accessed (1 samples, 0.02%) + + + + + xa_load (2 samples, 0.05%) + + + + + xas_load (2 samples, 0.05%) + + + + + submit_bio_noacct (1 samples, 0.02%) + + + + + __submit_bio (1 samples, 0.02%) + + + + + submit_bio_checks (1 samples, 0.02%) + + + + + bio_associate_blkg (1 samples, 0.02%) + + + + + bio_add_page (1 samples, 0.02%) + + + + + __bio_try_merge_page (1 samples, 0.02%) + + + + + ext4_mpage_readpages (4 samples, 0.10%) + + + + + read_pages (5 samples, 0.12%) + + + + + blk_finish_plug (1 samples, 0.02%) + + + + + blk_mq_flush_plug_list (1 samples, 0.02%) + + + + + blk_mq_sched_insert_requests (1 samples, 0.02%) + + + + + blk_mq_try_issue_list_directly (1 samples, 0.02%) + + + + + __blk_mq_try_issue_directly (1 samples, 0.02%) + + + + + scsi_queue_rq (1 samples, 0.02%) + + + + + storvsc_queuecommand (1 samples, 0.02%) + + + + + lock_page_lruvec_irqsave (1 samples, 0.02%) + + + + + _raw_spin_lock_irqsave (1 samples, 0.02%) + + + + + lru_cache_add (3 samples, 0.07%) + + + + + __pagevec_lru_add (3 samples, 0.07%) + + + + + xas_nomem (1 samples, 0.02%) + + + + + xas_find_conflict (1 samples, 0.02%) + + + + + __mod_lruvec_page_state (1 samples, 0.02%) + + + + + cgroup_rstat_updated (1 samples, 0.02%) + + + + + mem_cgroup_charge_statistics.constprop.0 (2 samples, 0.05%) + + + + + __mem_cgroup_charge (3 samples, 0.07%) + + + + + charge_memcg (3 samples, 0.07%) + + + + + add_to_page_cache_lru (10 samples, 0.25%) + + + + + __add_to_page_cache_locked (7 samples, 0.17%) + + + + + __list_del_entry_valid (5 samples, 0.12%) + + + + + rmqueue_bulk (6 samples, 0.15%) + + + + + __alloc_pages (7 samples, 0.17%) + + + + + get_page_from_freelist (7 samples, 0.17%) + + + + + page_cache_ra_unbounded (26 samples, 0.65%) + + + + + xas_load (1 samples, 0.02%) + + + + + xas_start (1 samples, 0.02%) + + + + + filemap_get_pages (28 samples, 0.70%) + + + + + filemap_get_read_batch (2 samples, 0.05%) + + + + + copy_page_to_iter (8 samples, 0.20%) + + + + + copy_user_enhanced_fast_string (8 samples, 0.20%) + + + + + __cond_resched (1 samples, 0.02%) + + + + + new_sync_read (39 samples, 0.97%) + + + + + filemap_read (39 samples, 0.97%) + + + + + entry_SYSCALL_64_after_hwframe (40 samples, 1.00%) + + + + + do_syscall_64 (40 samples, 1.00%) + + + + + ksys_read (40 samples, 1.00%) + + + + + vfs_read (40 samples, 1.00%) + + + + + __fsnotify_parent (1 samples, 0.02%) + + + + + std::io::default_read_exact (41 samples, 1.02%) + + + + + <std::process::ChildStdout as std::io::Read>::read (41 samples, 1.02%) + + + + + read (41 samples, 1.02%) + + + + + __GI___pthread_disable_asynccancel (1 samples, 0.02%) + + + + + malloc (2 samples, 0.05%) + + + + + _int_malloc (2 samples, 0.05%) + + + + + sysmalloc (2 samples, 0.05%) + + + + + __mprotect (2 samples, 0.05%) + + + + + entry_SYSCALL_64_after_hwframe (2 samples, 0.05%) + + + + + do_syscall_64 (2 samples, 0.05%) + + + + + __x64_sys_mprotect (2 samples, 0.05%) + + + + + do_mprotect_pkey (2 samples, 0.05%) + + + + + mprotect_fixup (2 samples, 0.05%) + + + + + perf_event_mmap (2 samples, 0.05%) + + + + + perf_iterate_sb (2 samples, 0.05%) + + + + + perf_iterate_ctx (2 samples, 0.05%) + + + + + alloc::collections::btree::map::BTreeMap<K,V,A>::insert (1 samples, 0.02%) + + + + + alloc::collections::btree::node::Handle<alloc::collections::btree::node::NodeRef<alloc::collections::btree::node::marker::Mut,K,V,alloc::collections::btree::node::marker::Leaf>,alloc::collections::btree::node::marker::Edge>::insert_recursing (1 samples, 0.02%) + + + + + __rdl_alloc (1 samples, 0.02%) + + + + + error_entry (1 samples, 0.02%) + + + + + srso_alias_return_thunk (1 samples, 0.02%) + + + + + srso_alias_safe_ret (1 samples, 0.02%) + + + + + page_add_new_anon_rmap (1 samples, 0.02%) + + + + + __mod_lruvec_page_state (1 samples, 0.02%) + + + + + _raw_spin_lock_irqsave (1 samples, 0.02%) + + + + + lock_page_lruvec_irqsave (2 samples, 0.05%) + + + + + __pagevec_lru_add (3 samples, 0.07%) + + + + + lru_cache_add (5 samples, 0.12%) + + + + + __mem_cgroup_charge (1 samples, 0.02%) + + + + + charge_memcg (1 samples, 0.02%) + + + + + __list_del_entry_valid (1 samples, 0.02%) + + + + + rmqueue_bulk (2 samples, 0.05%) + + + + + kernel_init_free_pages.part.0 (3 samples, 0.07%) + + + + + clear_page_erms (3 samples, 0.07%) + + + + + __alloc_pages (6 samples, 0.15%) + + + + + get_page_from_freelist (6 samples, 0.15%) + + + + + __list_del_entry_valid (1 samples, 0.02%) + + + + + __handle_mm_fault (14 samples, 0.35%) + + + + + do_user_addr_fault (15 samples, 0.37%) + + + + + handle_mm_fault (15 samples, 0.37%) + + + + + asm_exc_page_fault (17 samples, 0.42%) + + + + + exc_page_fault (17 samples, 0.42%) + + + + + __memset_avx512_unaligned_erms (19 samples, 0.47%) + + + + + s4lib::readers::blockreader::BlockReader::read_block_File (65 samples, 1.62%) + + + + + <std::fs::File as std::io::Seek>::seek (1 samples, 0.02%) + + + + + llseek@GLIBC_2.2.5 (1 samples, 0.02%) + + + + + entry_SYSCALL_64_after_hwframe (1 samples, 0.02%) + + + + + do_syscall_64 (1 samples, 0.02%) + + + + + ksys_lseek (1 samples, 0.02%) + + + + + __fdget_pos (1 samples, 0.02%) + + + + + __fget_light (1 samples, 0.02%) + + + + + s4lib::readers::blockreader::BlockReader::filesz (1 samples, 0.02%) + + + + + s4lib::readers::blockreader::BlockReader::read_block (72 samples, 1.80%) + + s.. + + + s4lib::readers::blockreader::BlockReader::filesz (4 samples, 0.10%) + + + + + s4lib::data::line::LinePart::new (4 samples, 0.10%) + + + + + alloc::raw_vec::RawVec<T,A>::reserve::do_reserve_and_handle (1 samples, 0.02%) + + + + + alloc::raw_vec::finish_grow (1 samples, 0.02%) + + + + + s4lib::data::line::Line::prepend (13 samples, 0.32%) + + + + + s4lib::data::line::Line::fileoffset_end (3 samples, 0.07%) + + + + + _int_malloc (4 samples, 0.10%) + + + + + malloc (27 samples, 0.67%) + + + + + lru::LruCache<K,V,S>::put (38 samples, 0.95%) + + + + + alloc::collections::btree::navigate::LeafRange<BorrowType,K,V>::perform_next_checked (2 samples, 0.05%) + + + + + alloc::collections::btree::navigate::<impl alloc::collections::btree::node::NodeRef<alloc::collections::btree::node::marker::Immut,K,V,alloc::collections::btree::node::marker::LeafOrInternal>>::range_search (40 samples, 1.00%) + + + + + alloc::collections::btree::map::BTreeMap<K,V,A>::contains_key (25 samples, 0.62%) + + + + + __rust_alloc (2 samples, 0.05%) + + + + + __rdl_alloc (1 samples, 0.02%) + + + + + s4lib::readers::linereader::LineReader::find_line (493 samples, 12.32%) + + s4lib::readers::li.. + + + malloc (1 samples, 0.02%) + + + + + lru::LruCache<K,V,S>::put (56 samples, 1.40%) + + + + + __rdl_alloc (1 samples, 0.02%) + + + + + s4lib::readers::syslinereader::SyslineReader::find_sysline_year (1,505 samples, 37.61%) + + s4lib::readers::syslinereader::SyslineReader::find_sysline_ye.. + + + s4lib::readers::syslinereader::SyslineReader::find_sysline_at_datetime_filter_binary_search (1,507 samples, 37.66%) + + s4lib::readers::syslinereader::SyslineReader::find_sysline_at.. + + + s4lib::readers::syslinereader::SyslineReader::find_sysline_between_datetime_filters (1,509 samples, 37.71%) + + s4lib::readers::syslinereader::SyslineReader::find_sysline_be.. + + + s4lib::readers::blockreader::BlockReader::is_streamed_file (2 samples, 0.05%) + + + + + send_call_function_single_ipi (3 samples, 0.07%) + + + + + sched_clock_cpu (1 samples, 0.02%) + + + + + read_hv_sched_clock_tsc (1 samples, 0.02%) + + + + + read_hv_clock_tsc (1 samples, 0.02%) + + + + + ttwu_queue_wakelist (5 samples, 0.12%) + + + + + __smp_call_single_queue (1 samples, 0.02%) + + + + + llist_add_batch (1 samples, 0.02%) + + + + + select_task_rq_fair (1 samples, 0.02%) + + + + + _raw_spin_unlock_irqrestore (3 samples, 0.07%) + + + + + wake_up_q (10 samples, 0.25%) + + + + + try_to_wake_up (10 samples, 0.25%) + + + + + _raw_spin_lock_irqsave (1 samples, 0.02%) + + + + + do_syscall_64 (11 samples, 0.27%) + + + + + __x64_sys_futex (11 samples, 0.27%) + + + + + do_futex (11 samples, 0.27%) + + + + + futex_wake (11 samples, 0.27%) + + + + + entry_SYSCALL_64_after_hwframe (12 samples, 0.30%) + + + + + std::sys::unix::futex::futex_wake (13 samples, 0.32%) + + + + + syscall (13 samples, 0.32%) + + + + + [[kernel.kallsyms]] (1 samples, 0.02%) + + + + + crossbeam_channel::waker::SyncWaker::notify (19 samples, 0.47%) + + + + + switch_fpu_return (1 samples, 0.02%) + + + + + __put_user_8 (1 samples, 0.02%) + + + + + __rseq_handle_notify_resume (2 samples, 0.05%) + + + + + syscall_exit_to_user_mode (4 samples, 0.10%) + + + + + exit_to_user_mode_prepare (4 samples, 0.10%) + + + + + futex_wait_setup (3 samples, 0.07%) + + + + + __get_user_nocheck_4 (3 samples, 0.07%) + + + + + pick_next_task_idle (1 samples, 0.02%) + + + + + __update_idle_core (1 samples, 0.02%) + + + + + newidle_balance (1 samples, 0.02%) + + + + + pick_next_task_fair (3 samples, 0.07%) + + + + + finish_task_switch.isra.0 (1 samples, 0.02%) + + + + + __perf_event_task_sched_in (1 samples, 0.02%) + + + + + update_load_avg (1 samples, 0.02%) + + + + + __update_load_avg_cfs_rq (1 samples, 0.02%) + + + + + dequeue_task_fair (2 samples, 0.05%) + + + + + dequeue_entity (2 samples, 0.05%) + + + + + update_curr (1 samples, 0.02%) + + + + + amd_pmu_addr_offset (1 samples, 0.02%) + + + + + __perf_event_task_sched_out (3 samples, 0.07%) + + + + + amd_pmu_disable_all (3 samples, 0.07%) + + + + + x86_pmu_disable_all (3 samples, 0.07%) + + + + + futex_wait_queue_me (12 samples, 0.30%) + + + + + schedule (12 samples, 0.30%) + + + + + __schedule (12 samples, 0.30%) + + + + + futex_wait (16 samples, 0.40%) + + + + + syscall (22 samples, 0.55%) + + + + + entry_SYSCALL_64_after_hwframe (22 samples, 0.55%) + + + + + do_syscall_64 (22 samples, 0.55%) + + + + + __x64_sys_futex (18 samples, 0.45%) + + + + + do_futex (18 samples, 0.45%) + + + + + std::thread::park (23 samples, 0.57%) + + + + + crossbeam_channel::waker::SyncWaker::register (2 samples, 0.05%) + + + + + update_rq_clock (3 samples, 0.07%) + + + + + sched_clock_cpu (3 samples, 0.07%) + + + + + read_hv_sched_clock_tsc (3 samples, 0.07%) + + + + + read_hv_clock_tsc (3 samples, 0.07%) + + + + + pick_next_entity (1 samples, 0.02%) + + + + + pick_next_task_fair (2 samples, 0.05%) + + + + + _raw_spin_lock (2 samples, 0.05%) + + + + + __schedule (8 samples, 0.20%) + + + + + schedule (9 samples, 0.22%) + + + + + yield_task_fair (2 samples, 0.05%) + + + + + srso_alias_return_thunk (1 samples, 0.02%) + + + + + srso_alias_safe_ret (1 samples, 0.02%) + + + + + __x64_sys_sched_yield (16 samples, 0.40%) + + + + + do_sched_yield (7 samples, 0.17%) + + + + + __sched_yield (18 samples, 0.45%) + + + + + entry_SYSCALL_64_after_hwframe (18 samples, 0.45%) + + + + + do_syscall_64 (18 samples, 0.45%) + + + + + crossbeam_channel::context::Context::with::{{closure}} (52 samples, 1.30%) + + + + + syscall_enter_from_user_mode (1 samples, 0.02%) + + + + + update_rq_clock (1 samples, 0.02%) + + + + + sched_clock_cpu (1 samples, 0.02%) + + + + + read_hv_sched_clock_tsc (1 samples, 0.02%) + + + + + read_hv_clock_tsc (1 samples, 0.02%) + + + + + update_min_vruntime (1 samples, 0.02%) + + + + + update_curr (2 samples, 0.05%) + + + + + cpuacct_charge (1 samples, 0.02%) + + + + + pick_next_task_fair (3 samples, 0.07%) + + + + + pick_next_entity (1 samples, 0.02%) + + + + + _raw_spin_lock (1 samples, 0.02%) + + + + + schedule (8 samples, 0.20%) + + + + + __schedule (8 samples, 0.20%) + + + + + __raw_callee_save___pv_queued_spin_unlock (1 samples, 0.02%) + + + + + __x64_sys_sched_yield (13 samples, 0.32%) + + + + + do_sched_yield (5 samples, 0.12%) + + + + + do_syscall_64 (16 samples, 0.40%) + + + + + entry_SYSCALL_64_after_hwframe (17 samples, 0.42%) + + + + + __sched_yield (18 samples, 0.45%) + + + + + entry_SYSCALL_64 (1 samples, 0.02%) + + + + + __memmove_avx512_unaligned_erms (5 samples, 0.12%) + + + + + crossbeam_channel::channel::Sender<T>::send (193 samples, 4.82%) + + crossb.. + + + core::ptr::drop_in_place<s4lib::readers::syslogprocessor::SyslogProcessor> (1 samples, 0.02%) + + + + + <alloc::collections::btree::map::BTreeMap<K,V,A> as core::ops::drop::Drop>::drop (1 samples, 0.02%) + + + + + alloc::collections::btree::navigate::<impl alloc::collections::btree::node::Handle<alloc::collections::btree::node::NodeRef<alloc::collections::btree::node::marker::Dying,K,V,alloc::collections::btree::node::marker::Leaf>,alloc::collections::btree::node::marker::Edge>>::deallocating_next_unchecked (1 samples, 0.02%) + + + + + cfree@GLIBC_2.2.5 (1 samples, 0.02%) + + + + + _int_free (1 samples, 0.02%) + + + + + clone3 (2,004 samples, 50.07%) + + clone3 + + + start_thread (2,004 samples, 50.07%) + + start_thread + + + std::sys::unix::thread::Thread::new::thread_start (2,004 samples, 50.07%) + + std::sys::unix::thread::Thread::new::thread_start + + + core::ops::function::FnOnce::call_once{{vtable.shim}} (2,004 samples, 50.07%) + + core::ops::function::FnOnce::call_once{{vtable.shim}} + + + std::sys_common::backtrace::__rust_begin_short_backtrace (2,004 samples, 50.07%) + + std::sys_common::backtrace::__rust_begin_short_backtrace + + + s4::exec_fileprocessor_thread (2,004 samples, 50.07%) + + s4::exec_fileprocessor_thread + + + regex_automata::util::captures::GroupInfo::new (1 samples, 0.02%) + + + + + hashbrown::map::HashMap<K,V,S,A>::insert (1 samples, 0.02%) + + + + + s4lib::readers::syslogprocessor::SyslogProcessor::process_stage1_blockzero_analysis (2 samples, 0.05%) + + + + + s4lib::readers::syslinereader::SyslineReader::find_sysline_in_block_year (2 samples, 0.05%) + + + + + s4lib::readers::syslinereader::SyslineReader::parse_datetime_in_line_cached (2 samples, 0.05%) + + + + + s4lib::data::datetime::bytes_to_regex_to_datetime (2 samples, 0.05%) + + + + + once_cell::imp::OnceCell<T>::initialize (2 samples, 0.05%) + + + + + once_cell::imp::initialize_or_wait (2 samples, 0.05%) + + + + + once_cell::imp::OnceCell<T>::initialize::_{{closure}} (2 samples, 0.05%) + + + + + regex::regex::bytes::Regex::new (2 samples, 0.05%) + + + + + regex::builders::Builder::build_one_bytes (2 samples, 0.05%) + + + + + regex_automata::meta::regex::Builder::build (2 samples, 0.05%) + + + + + regex_automata::meta::strategy::new (2 samples, 0.05%) + + + + + regex_automata::nfa::thompson::compiler::Compiler::build_many_from_hir (2 samples, 0.05%) + + + + + regex_automata::nfa::thompson::builder::Builder::build (2 samples, 0.05%) + + + + + alloc::raw_vec::RawVec<T,A>::reserve_for_push (1 samples, 0.02%) + + + + + alloc::raw_vec::finish_grow (1 samples, 0.02%) + + + + + realloc (1 samples, 0.02%) + + + + + _int_realloc (1 samples, 0.02%) + + + + + _int_malloc (1 samples, 0.02%) + + + + + regex_automata::nfa::thompson::literal_trie::LiteralTrie::add (3 samples, 0.07%) + + + + + regex_automata::nfa::thompson::compiler::Compiler::build_many_from_hir (4 samples, 0.10%) + + + + + <core::iter::adapters::map::Map<I,F> as core::iter::traits::iterator::Iterator>::next (4 samples, 0.10%) + + + + + regex_automata::nfa::thompson::compiler::Compiler::c_cap (4 samples, 0.10%) + + + + + regex_automata::nfa::thompson::compiler::Compiler::c (4 samples, 0.10%) + + + + + regex_automata::nfa::thompson::compiler::Compiler::c_cap (4 samples, 0.10%) + + + + + regex_automata::nfa::thompson::compiler::Compiler::c (4 samples, 0.10%) + + + + + regex_automata::nfa::thompson::compiler::Compiler::c (1 samples, 0.02%) + + + + + cfree@GLIBC_2.2.5 (1 samples, 0.02%) + + + + + _int_free (1 samples, 0.02%) + + + + + regex_syntax::hir::literal::Seq::optimize_by_preference (3 samples, 0.07%) + + + + + regex_syntax::hir::literal::PreferenceTrie::minimize (3 samples, 0.07%) + + + + + alloc::vec::Vec<T,A>::retain_mut (2 samples, 0.05%) + + + + + regex_syntax::hir::literal::PreferenceTrie::insert (2 samples, 0.05%) + + + + + __memmove_avx512_unaligned_erms (1 samples, 0.02%) + + + + + s4lib::readers::syslinereader::SyslineReader::parse_datetime_in_line_cached (9 samples, 0.22%) + + + + + s4lib::data::datetime::bytes_to_regex_to_datetime (9 samples, 0.22%) + + + + + once_cell::imp::OnceCell<T>::initialize (9 samples, 0.22%) + + + + + once_cell::imp::initialize_or_wait (9 samples, 0.22%) + + + + + once_cell::imp::OnceCell<T>::initialize::_{{closure}} (9 samples, 0.22%) + + + + + regex::regex::bytes::Regex::new (9 samples, 0.22%) + + + + + regex::builders::Builder::build_one_bytes (9 samples, 0.22%) + + + + + regex_automata::meta::regex::Builder::build (9 samples, 0.22%) + + + + + regex_automata::meta::strategy::new (9 samples, 0.22%) + + + + + regex_automata::meta::reverse_inner::extract (5 samples, 0.12%) + + + + + regex_syntax::hir::literal::Extractor::extract (2 samples, 0.05%) + + + + + regex_syntax::hir::literal::Extractor::cross (2 samples, 0.05%) + + + + + regex_automata::util::captures::GroupInfo::new (1 samples, 0.02%) + + + + + regex_automata::util::captures::GroupInfoInner::add_first_group (1 samples, 0.02%) + + + + + malloc (1 samples, 0.02%) + + + + + _int_malloc (1 samples, 0.02%) + + + + + regex_automata::nfa::thompson::nfa::Inner::into_nfa (1 samples, 0.02%) + + + + + regex_automata::nfa::thompson::compiler::Compiler::build_many_from_hir (3 samples, 0.07%) + + + + + regex_automata::nfa::thompson::builder::Builder::build (3 samples, 0.07%) + + + + + regex_automata::nfa::thompson::nfa::Inner::add (1 samples, 0.02%) + + + + + alloc::raw_vec::RawVec<T,A>::reserve_for_push (1 samples, 0.02%) + + + + + alloc::raw_vec::finish_grow (1 samples, 0.02%) + + + + + realloc (1 samples, 0.02%) + + + + + _int_realloc (1 samples, 0.02%) + + + + + _int_malloc (1 samples, 0.02%) + + + + + sysmalloc (1 samples, 0.02%) + + + + + asm_exc_page_fault (1 samples, 0.02%) + + + + + exc_page_fault (1 samples, 0.02%) + + + + + do_user_addr_fault (1 samples, 0.02%) + + + + + handle_mm_fault (1 samples, 0.02%) + + + + + __handle_mm_fault (1 samples, 0.02%) + + + + + regex_automata::meta::reverse_inner::flatten (1 samples, 0.02%) + + + + + alloc::sync::Arc<T>::drop_slow (1 samples, 0.02%) + + + + + alloc::sync::Arc<T>::drop_slow (1 samples, 0.02%) + + + + + core::ptr::drop_in_place<aho_corasick::dfa::DFA> (1 samples, 0.02%) + + + + + cfree@GLIBC_2.2.5 (1 samples, 0.02%) + + + + + s4lib::readers::syslinereader::SyslineReader::find_sysline_in_block_year (6 samples, 0.15%) + + + + + s4lib::readers::syslinereader::SyslineReader::parse_datetime_in_line_cached (6 samples, 0.15%) + + + + + s4lib::data::datetime::bytes_to_regex_to_datetime (6 samples, 0.15%) + + + + + once_cell::imp::OnceCell<T>::initialize (6 samples, 0.15%) + + + + + once_cell::imp::initialize_or_wait (6 samples, 0.15%) + + + + + once_cell::imp::OnceCell<T>::initialize::_{{closure}} (6 samples, 0.15%) + + + + + regex::regex::bytes::Regex::new (6 samples, 0.15%) + + + + + regex::builders::Builder::build_one_bytes (6 samples, 0.15%) + + + + + regex_automata::meta::regex::Builder::build (6 samples, 0.15%) + + + + + regex_automata::meta::strategy::new (6 samples, 0.15%) + + + + + regex_automata::meta::reverse_inner::extract (3 samples, 0.07%) + + + + + <regex_syntax::hir::Hir as core::ops::drop::Drop>::drop (1 samples, 0.02%) + + + + + cfree@GLIBC_2.2.5 (1 samples, 0.02%) + + + + + _int_free (1 samples, 0.02%) + + + + + asm_exc_page_fault (1 samples, 0.02%) + + + + + exc_page_fault (1 samples, 0.02%) + + + + + do_user_addr_fault (1 samples, 0.02%) + + + + + handle_mm_fault (1 samples, 0.02%) + + + + + __handle_mm_fault (1 samples, 0.02%) + + + + + __mem_cgroup_charge (1 samples, 0.02%) + + + + + charge_memcg (1 samples, 0.02%) + + + + + regex_automata::nfa::thompson::builder::Builder::add (6 samples, 0.15%) + + + + + cfree@GLIBC_2.2.5 (1 samples, 0.02%) + + + + + alloc::raw_vec::RawVec<T,A>::reserve_for_push (1 samples, 0.02%) + + + + + alloc::raw_vec::finish_grow (1 samples, 0.02%) + + + + + malloc (1 samples, 0.02%) + + + + + regex_automata::nfa::thompson::literal_trie::LiteralTrie::compile (14 samples, 0.35%) + + + + + _int_malloc (4 samples, 0.10%) + + + + + malloc (7 samples, 0.17%) + + + + + __rdl_alloc (1 samples, 0.02%) + + + + + alloc::raw_vec::RawVec<T,A>::reserve_for_push (9 samples, 0.22%) + + + + + alloc::raw_vec::finish_grow (9 samples, 0.22%) + + + + + _int_malloc (1 samples, 0.02%) + + + + + regex_automata::nfa::thompson::literal_trie::LiteralTrie::add (11 samples, 0.27%) + + + + + alloc::raw_vec::RawVec<T,A>::reserve::do_reserve_and_handle (2 samples, 0.05%) + + + + + alloc::raw_vec::finish_grow (2 samples, 0.05%) + + + + + malloc (2 samples, 0.05%) + + + + + regex_automata::nfa::thompson::compiler::Compiler::c_alt_iter (2 samples, 0.05%) + + + + + malloc_consolidate (1 samples, 0.02%) + + + + + regex_automata::nfa::thompson::compiler::Compiler::build_many_from_hir (29 samples, 0.72%) + + + + + <core::iter::adapters::map::Map<I,F> as core::iter::traits::iterator::Iterator>::next (29 samples, 0.72%) + + + + + regex_automata::nfa::thompson::compiler::Compiler::c_cap (29 samples, 0.72%) + + + + + regex_automata::nfa::thompson::compiler::Compiler::c (29 samples, 0.72%) + + + + + regex_automata::nfa::thompson::compiler::Compiler::c_cap (29 samples, 0.72%) + + + + + regex_automata::nfa::thompson::compiler::Compiler::c (29 samples, 0.72%) + + + + + cfree@GLIBC_2.2.5 (2 samples, 0.05%) + + + + + _int_free (2 samples, 0.05%) + + + + + alloc::raw_vec::RawVec<T,A>::reserve_for_push (1 samples, 0.02%) + + + + + alloc::raw_vec::finish_grow (1 samples, 0.02%) + + + + + realloc (1 samples, 0.02%) + + + + + _int_realloc (1 samples, 0.02%) + + + + + _int_malloc (1 samples, 0.02%) + + + + + malloc_consolidate (1 samples, 0.02%) + + + + + unlink_chunk.constprop.0 (1 samples, 0.02%) + + + + + s4lib::data::datetime::bytes_to_regex_to_datetime (31 samples, 0.77%) + + + + + once_cell::imp::OnceCell<T>::initialize (31 samples, 0.77%) + + + + + once_cell::imp::initialize_or_wait (31 samples, 0.77%) + + + + + once_cell::imp::OnceCell<T>::initialize::_{{closure}} (31 samples, 0.77%) + + + + + regex::regex::bytes::Regex::new (31 samples, 0.77%) + + + + + regex::builders::Builder::build_one_bytes (31 samples, 0.77%) + + + + + regex_automata::meta::regex::Builder::build (31 samples, 0.77%) + + + + + regex_automata::meta::strategy::new (31 samples, 0.77%) + + + + + regex_automata::meta::reverse_inner::extract (2 samples, 0.05%) + + + + + regex_syntax::hir::literal::Seq::optimize_by_preference (2 samples, 0.05%) + + + + + regex_syntax::hir::literal::PreferenceTrie::minimize (2 samples, 0.05%) + + + + + alloc::vec::Vec<T,A>::retain_mut (2 samples, 0.05%) + + + + + regex_syntax::hir::literal::PreferenceTrie::insert (2 samples, 0.05%) + + + + + alloc::raw_vec::RawVec<T,A>::reserve::do_reserve_and_handle (1 samples, 0.02%) + + + + + alloc::raw_vec::finish_grow (1 samples, 0.02%) + + + + + malloc (1 samples, 0.02%) + + + + + _int_malloc (1 samples, 0.02%) + + + + + sysmalloc (1 samples, 0.02%) + + + + + __mprotect (1 samples, 0.02%) + + + + + entry_SYSCALL_64_after_hwframe (1 samples, 0.02%) + + + + + do_syscall_64 (1 samples, 0.02%) + + + + + __x64_sys_mprotect (1 samples, 0.02%) + + + + + do_mprotect_pkey (1 samples, 0.02%) + + + + + mprotect_fixup (1 samples, 0.02%) + + + + + vma_merge (1 samples, 0.02%) + + + + + __vma_adjust (1 samples, 0.02%) + + + + + regex_syntax::ast::parse::Parser::parse (1 samples, 0.02%) + + + + + regex_syntax::ast::parse::ParserI<P>::parse_with_comments (1 samples, 0.02%) + + + + + regex_syntax::ast::parse::ParserI<P>::parse_set_class (1 samples, 0.02%) + + + + + regex_syntax::ast::parse::ParserI<P>::parse_set_class_range (1 samples, 0.02%) + + + + + regex_syntax::ast::parse::ParserI<P>::parse_escape (1 samples, 0.02%) + + + + + regex_syntax::hir::literal::Extractor::union (1 samples, 0.02%) + + + + + <alloc::vec::Vec<T,A> as alloc::vec::spec_extend::SpecExtend<T,I>>::spec_extend (1 samples, 0.02%) + + + + + regex_automata::util::prefilter::suffixes (2 samples, 0.05%) + + + + + regex_syntax::hir::literal::Extractor::extract (2 samples, 0.05%) + + + + + regex_syntax::hir::literal::Extractor::extract (2 samples, 0.05%) + + + + + regex_syntax::hir::literal::Extractor::extract (1 samples, 0.02%) + + + + + regex_syntax::hir::literal::Extractor::cross (1 samples, 0.02%) + + + + + cfree@GLIBC_2.2.5 (1 samples, 0.02%) + + + + + alloc::raw_vec::RawVec<T,A>::reserve::do_reserve_and_handle (1 samples, 0.02%) + + + + + alloc::raw_vec::finish_grow (1 samples, 0.02%) + + + + + regex_syntax::hir::literal::PreferenceTrie::minimize (4 samples, 0.10%) + + + + + alloc::vec::Vec<T,A>::retain_mut (4 samples, 0.10%) + + + + + regex_syntax::hir::literal::PreferenceTrie::insert (4 samples, 0.10%) + + + + + regex_syntax::hir::literal::Seq::optimize_by_preference (5 samples, 0.12%) + + + + + regex_automata::util::prefilter::prefixes (6 samples, 0.15%) + + + + + regex_syntax::hir::literal::Extractor::extract (1 samples, 0.02%) + + + + + regex_syntax::hir::literal::Extractor::cross (1 samples, 0.02%) + + + + + malloc (1 samples, 0.02%) + + + + + _int_malloc (1 samples, 0.02%) + + + + + regex_automata::nfa::thompson::compiler::Compiler::c_at_least (1 samples, 0.02%) + + + + + regex_automata::nfa::thompson::builder::Builder::add (1 samples, 0.02%) + + + + + alloc::raw_vec::RawVec<T,A>::reserve_for_push (1 samples, 0.02%) + + + + + regex_automata::nfa::thompson::compiler::Compiler::build_many_from_hir (7 samples, 0.17%) + + + + + regex_automata::nfa::thompson::builder::Builder::build (6 samples, 0.15%) + + + + + regex_automata::nfa::thompson::nfa::Inner::add (6 samples, 0.15%) + + + + + core::ptr::drop_in_place<core::cell::RefCell<regex_automata::nfa::thompson::compiler::Utf8State>> (1 samples, 0.02%) + + + + + malloc_consolidate (1 samples, 0.02%) + + + + + unlink_chunk.constprop.0 (1 samples, 0.02%) + + + + + s4::exec_fileprocessor_thread (20 samples, 0.50%) + + + + + s4lib::readers::syslogprocessor::SyslogProcessor::process_stage1_blockzero_analysis (20 samples, 0.50%) + + + + + s4lib::readers::syslinereader::SyslineReader::find_sysline_in_block_year (20 samples, 0.50%) + + + + + s4lib::readers::syslinereader::SyslineReader::parse_datetime_in_line_cached (20 samples, 0.50%) + + + + + s4lib::data::datetime::bytes_to_regex_to_datetime (20 samples, 0.50%) + + + + + once_cell::imp::OnceCell<T>::initialize (20 samples, 0.50%) + + + + + once_cell::imp::initialize_or_wait (20 samples, 0.50%) + + + + + once_cell::imp::OnceCell<T>::initialize::_{{closure}} (20 samples, 0.50%) + + + + + regex::regex::bytes::Regex::new (20 samples, 0.50%) + + + + + regex::builders::Builder::build_one_bytes (20 samples, 0.50%) + + + + + regex_automata::meta::regex::Builder::build (20 samples, 0.50%) + + + + + regex_automata::meta::strategy::new (19 samples, 0.47%) + + + + + core::ptr::drop_in_place<regex_automata::nfa::thompson::compiler::Compiler> (4 samples, 0.10%) + + + + + cfree@GLIBC_2.2.5 (3 samples, 0.07%) + + + + + _int_free (3 samples, 0.07%) + + + + + regex_automata::util::prefilter::Prefilter::new (1 samples, 0.02%) + + + + + regex_automata::util::prefilter::Choice::new (1 samples, 0.02%) + + + + + regex_automata::util::prefilter::teddy::Teddy::new (1 samples, 0.02%) + + + + + aho_corasick::nfa::noncontiguous::Builder::build (1 samples, 0.02%) + + + + + aho_corasick::nfa::noncontiguous::Compiler::shuffle (1 samples, 0.02%) + + + + + aho_corasick::util::remapper::Remapper::remap (1 samples, 0.02%) + + + + + <aho_corasick::nfa::noncontiguous::NFA as aho_corasick::util::remapper::Remappable>::remap (1 samples, 0.02%) + + + + + regex_automata::meta::wrappers::Hybrid::new (1 samples, 0.02%) + + + + + regex_automata::hybrid::dfa::Builder::build_from_nfa (1 samples, 0.02%) + + + + + regex_automata::util::determinize::state::State::dead (1 samples, 0.02%) + + + + + alloc::raw_vec::RawVec<T,A>::reserve::do_reserve_and_handle (1 samples, 0.02%) + + + + + aho_corasick::packed::api::Builder::build (1 samples, 0.02%) + + + + + aho_corasick::packed::teddy::builder::Builder::build (1 samples, 0.02%) + + + + + aho_corasick::packed::teddy::builder::x86_64::FatAVX2<3_usize>::new (1 samples, 0.02%) + + + + + aho_corasick::packed::teddy::builder::x86_64::FatAVX2<3_usize>::new_unchecked (1 samples, 0.02%) + + + + + aho_corasick::packed::teddy::generic::Teddy<_>::new (1 samples, 0.02%) + + + + + aho_corasick::packed::pattern::Pattern::low_nybbles (1 samples, 0.02%) + + + + + __libc_calloc (1 samples, 0.02%) + + + + + aho_corasick::nfa::noncontiguous::Compiler::shuffle (2 samples, 0.05%) + + + + + aho_corasick::util::remapper::Remapper::remap (2 samples, 0.05%) + + + + + <aho_corasick::nfa::noncontiguous::NFA as aho_corasick::util::remapper::Remappable>::remap (2 samples, 0.05%) + + + + + regex_automata::meta::strategy::new (6 samples, 0.15%) + + + + + regex_automata::meta::reverse_inner::extract (4 samples, 0.10%) + + + + + regex_automata::util::prefilter::Choice::new (4 samples, 0.10%) + + + + + regex_automata::util::prefilter::teddy::Teddy::new (4 samples, 0.10%) + + + + + aho_corasick::nfa::noncontiguous::Builder::build (3 samples, 0.07%) + + + + + aho_corasick::nfa::noncontiguous::Compiler::densify (1 samples, 0.02%) + + + + + lru_cache_add (1 samples, 0.02%) + + + + + __pagevec_lru_add (1 samples, 0.02%) + + + + + page_mapping (1 samples, 0.02%) + + + + + __mem_cgroup_charge (1 samples, 0.02%) + + + + + charge_memcg (1 samples, 0.02%) + + + + + rmqueue_bulk (1 samples, 0.02%) + + + + + __list_del_entry_valid (1 samples, 0.02%) + + + + + asm_exc_page_fault (6 samples, 0.15%) + + + + + exc_page_fault (6 samples, 0.15%) + + + + + do_user_addr_fault (6 samples, 0.15%) + + + + + handle_mm_fault (6 samples, 0.15%) + + + + + __handle_mm_fault (6 samples, 0.15%) + + + + + __alloc_pages (4 samples, 0.10%) + + + + + get_page_from_freelist (4 samples, 0.10%) + + + + + kernel_init_free_pages.part.0 (3 samples, 0.07%) + + + + + clear_page_erms (3 samples, 0.07%) + + + + + regex_automata::nfa::thompson::compiler::Utf8Compiler::new (8 samples, 0.20%) + + + + + regex_automata::nfa::thompson::map::Utf8BoundedMap::clear (8 samples, 0.20%) + + + + + <T as alloc::vec::spec_from_elem::SpecFromElem>::from_elem (8 samples, 0.20%) + + + + + alloc::vec::Vec<T,A>::extend_with (8 samples, 0.20%) + + + + + regex_automata::nfa::thompson::builder::Builder::patch (1 samples, 0.02%) + + + + + alloc::raw_vec::RawVec<T,A>::reserve_for_push (1 samples, 0.02%) + + + + + alloc::raw_vec::finish_grow (1 samples, 0.02%) + + + + + malloc (1 samples, 0.02%) + + + + + _int_malloc (1 samples, 0.02%) + + + + + regex_automata::nfa::thompson::compiler::Compiler::build_many_from_hir (10 samples, 0.25%) + + + + + <core::iter::adapters::map::Map<I,F> as core::iter::traits::iterator::Iterator>::next (10 samples, 0.25%) + + + + + regex_automata::nfa::thompson::compiler::Compiler::c_cap (10 samples, 0.25%) + + + + + regex_automata::nfa::thompson::compiler::Compiler::c (10 samples, 0.25%) + + + + + regex_automata::nfa::thompson::compiler::Compiler::c_cap (10 samples, 0.25%) + + + + + regex_automata::nfa::thompson::compiler::Compiler::c (10 samples, 0.25%) + + + + + regex_automata::nfa::thompson::compiler::Compiler::c_alt_iter (10 samples, 0.25%) + + + + + regex_automata::nfa::thompson::compiler::Compiler::c (10 samples, 0.25%) + + + + + regex_automata::nfa::thompson::compiler::Compiler::c (10 samples, 0.25%) + + + + + regex_automata::nfa::thompson::builder::Builder::add (1 samples, 0.02%) + + + + + alloc::raw_vec::RawVec<T,A>::reserve_for_push (1 samples, 0.02%) + + + + + alloc::raw_vec::finish_grow (1 samples, 0.02%) + + + + + realloc (1 samples, 0.02%) + + + + + _int_realloc (1 samples, 0.02%) + + + + + _int_malloc (1 samples, 0.02%) + + + + + asm_exc_page_fault (1 samples, 0.02%) + + + + + exc_page_fault (1 samples, 0.02%) + + + + + do_user_addr_fault (1 samples, 0.02%) + + + + + handle_mm_fault (1 samples, 0.02%) + + + + + __handle_mm_fault (1 samples, 0.02%) + + + + + __alloc_pages (1 samples, 0.02%) + + + + + get_page_from_freelist (1 samples, 0.02%) + + + + + rmqueue_bulk (1 samples, 0.02%) + + + + + __list_del_entry_valid (1 samples, 0.02%) + + + + + realloc (1 samples, 0.02%) + + + + + _int_realloc (1 samples, 0.02%) + + + + + _int_free (1 samples, 0.02%) + + + + + aho_corasick::packed::api::Builder::extend (2 samples, 0.05%) + + + + + aho_corasick::packed::pattern::Patterns::add (2 samples, 0.05%) + + + + + alloc::raw_vec::RawVec<T,A>::reserve_for_push (2 samples, 0.05%) + + + + + alloc::raw_vec::finish_grow (2 samples, 0.05%) + + + + + __rust_realloc (1 samples, 0.02%) + + + + + regex_automata::util::prefilter::teddy::Teddy::new (3 samples, 0.07%) + + + + + aho_corasick::dfa::Builder::build_from_noncontiguous (1 samples, 0.02%) + + + + + regex_automata::meta::regex::Builder::build (14 samples, 0.35%) + + + + + regex_automata::meta::strategy::new (14 samples, 0.35%) + + + + + regex_automata::meta::reverse_inner::extract (4 samples, 0.10%) + + + + + regex_automata::util::prefilter::Choice::new (4 samples, 0.10%) + + + + + regex_automata::util::prefilter::aho_corasick::AhoCorasick::new (1 samples, 0.02%) + + + + + aho_corasick::ahocorasick::AhoCorasickBuilder::build (1 samples, 0.02%) + + + + + aho_corasick::dfa::Builder::build_from_noncontiguous (1 samples, 0.02%) + + + + + aho_corasick::dfa::DFA::set_matches (1 samples, 0.02%) + + + + + alloc::raw_vec::RawVec<T,A>::reserve_for_push (1 samples, 0.02%) + + + + + alloc::raw_vec::finish_grow (1 samples, 0.02%) + + + + + malloc (1 samples, 0.02%) + + + + + _int_malloc (1 samples, 0.02%) + + + + + regex_automata::nfa::thompson::builder::Builder::add (1 samples, 0.02%) + + + + + alloc::raw_vec::RawVec<T,A>::reserve_for_push (1 samples, 0.02%) + + + + + alloc::raw_vec::finish_grow (1 samples, 0.02%) + + + + + realloc (1 samples, 0.02%) + + + + + _int_realloc (1 samples, 0.02%) + + + + + _int_malloc (1 samples, 0.02%) + + + + + malloc_consolidate (1 samples, 0.02%) + + + + + regex_automata::nfa::thompson::literal_trie::LiteralTrie::compile (2 samples, 0.05%) + + + + + alloc::raw_vec::RawVec<T,A>::reserve_for_push (1 samples, 0.02%) + + + + + alloc::raw_vec::finish_grow (1 samples, 0.02%) + + + + + malloc (1 samples, 0.02%) + + + + + _int_malloc (1 samples, 0.02%) + + + + + sysmalloc (1 samples, 0.02%) + + + + + __mprotect (1 samples, 0.02%) + + + + + entry_SYSCALL_64_after_hwframe (1 samples, 0.02%) + + + + + do_syscall_64 (1 samples, 0.02%) + + + + + __x64_sys_mprotect (1 samples, 0.02%) + + + + + do_mprotect_pkey (1 samples, 0.02%) + + + + + mprotect_fixup (1 samples, 0.02%) + + + + + regex_automata::nfa::thompson::compiler::Compiler::c_cap (1 samples, 0.02%) + + + + + regex_automata::nfa::thompson::compiler::Compiler::c (1 samples, 0.02%) + + + + + regex_automata::nfa::thompson::literal_trie::LiteralTrie::add (1 samples, 0.02%) + + + + + regex::regex::bytes::Regex::new (6 samples, 0.15%) + + + + + regex::builders::Builder::build_one_bytes (6 samples, 0.15%) + + + + + regex_automata::meta::regex::Builder::build (6 samples, 0.15%) + + + + + regex_automata::meta::strategy::new (6 samples, 0.15%) + + + + + regex_automata::nfa::thompson::compiler::Compiler::build_many_from_hir (6 samples, 0.15%) + + + + + <core::iter::adapters::map::Map<I,F> as core::iter::traits::iterator::Iterator>::next (6 samples, 0.15%) + + + + + regex_automata::nfa::thompson::compiler::Compiler::c_cap (6 samples, 0.15%) + + + + + regex_automata::nfa::thompson::compiler::Compiler::c (6 samples, 0.15%) + + + + + regex_automata::nfa::thompson::compiler::Compiler::c_cap (6 samples, 0.15%) + + + + + regex_automata::nfa::thompson::compiler::Compiler::c (6 samples, 0.15%) + + + + + regex_automata::nfa::thompson::compiler::Compiler::c_alt_iter (3 samples, 0.07%) + + + + + regex_automata::nfa::thompson::compiler::Compiler::c (3 samples, 0.07%) + + + + + regex_automata::nfa::thompson::builder::Builder::add (3 samples, 0.07%) + + + + + regex_automata::nfa::thompson::compiler::Compiler::c_cap (1 samples, 0.02%) + + + + + regex_automata::nfa::thompson::compiler::Compiler::c (1 samples, 0.02%) + + + + + regex_automata::nfa::thompson::literal_trie::LiteralTrie::compile (1 samples, 0.02%) + + + + + regex_automata::nfa::thompson::builder::Builder::add (1 samples, 0.02%) + + + + + alloc::raw_vec::RawVec<T,A>::reserve_for_push (1 samples, 0.02%) + + + + + alloc::raw_vec::finish_grow (1 samples, 0.02%) + + + + + realloc (1 samples, 0.02%) + + + + + _int_realloc (1 samples, 0.02%) + + + + + _int_malloc (1 samples, 0.02%) + + + + + malloc (1 samples, 0.02%) + + + + + _int_malloc (1 samples, 0.02%) + + + + + malloc_consolidate (1 samples, 0.02%) + + + + + rcu_read_unlock_strict (1 samples, 0.02%) + + + + + page_add_new_anon_rmap (1 samples, 0.02%) + + + + + get_mem_cgroup_from_mm (1 samples, 0.02%) + + + + + __mem_cgroup_charge (2 samples, 0.05%) + + + + + charge_memcg (1 samples, 0.02%) + + + + + rmqueue_bulk (2 samples, 0.05%) + + + + + __list_del_entry_valid (2 samples, 0.05%) + + + + + __alloc_pages (3 samples, 0.07%) + + + + + get_page_from_freelist (3 samples, 0.07%) + + + + + kernel_init_free_pages.part.0 (1 samples, 0.02%) + + + + + clear_page_erms (1 samples, 0.02%) + + + + + asm_exc_page_fault (8 samples, 0.20%) + + + + + exc_page_fault (8 samples, 0.20%) + + + + + do_user_addr_fault (8 samples, 0.20%) + + + + + handle_mm_fault (8 samples, 0.20%) + + + + + __handle_mm_fault (7 samples, 0.17%) + + + + + __memmove_avx512_unaligned_erms (3 samples, 0.07%) + + + + + alloc::vec::Vec<T,A>::extend_with (14 samples, 0.35%) + + + + + regex_automata::nfa::thompson::compiler::Utf8Compiler::new (16 samples, 0.40%) + + + + + regex_automata::nfa::thompson::map::Utf8BoundedMap::clear (16 samples, 0.40%) + + + + + <T as alloc::vec::spec_from_elem::SpecFromElem>::from_elem (16 samples, 0.40%) + + + + + __rdl_alloc (1 samples, 0.02%) + + + + + regex_automata::nfa::thompson::compiler::Utf8Compiler::add (1 samples, 0.02%) + + + + + regex_automata::nfa::thompson::compiler::Utf8Compiler::compile_from (1 samples, 0.02%) + + + + + alloc::raw_vec::RawVec<T,A>::reserve_for_push (1 samples, 0.02%) + + + + + alloc::raw_vec::finish_grow (1 samples, 0.02%) + + + + + malloc (1 samples, 0.02%) + + + + + regex_syntax::hir::ClassUnicode::is_ascii (1 samples, 0.02%) + + + + + regex_automata::nfa::thompson::builder::Builder::patch (1 samples, 0.02%) + + + + + asm_exc_page_fault (1 samples, 0.02%) + + + + + exc_page_fault (1 samples, 0.02%) + + + + + do_user_addr_fault (1 samples, 0.02%) + + + + + handle_mm_fault (1 samples, 0.02%) + + + + + __handle_mm_fault (1 samples, 0.02%) + + + + + __alloc_pages (1 samples, 0.02%) + + + + + get_page_from_freelist (1 samples, 0.02%) + + + + + rmqueue_bulk (1 samples, 0.02%) + + + + + regex_automata::nfa::thompson::compiler::Compiler::c_alt_iter (21 samples, 0.52%) + + + + + regex_automata::nfa::thompson::compiler::Compiler::c (21 samples, 0.52%) + + + + + regex_automata::nfa::thompson::compiler::Compiler::c (4 samples, 0.10%) + + + + + regex_automata::nfa::thompson::builder::Builder::add (2 samples, 0.05%) + + + + + irqentry_enter (1 samples, 0.02%) + + + + + lru_cache_add (1 samples, 0.02%) + + + + + __pagevec_lru_add (1 samples, 0.02%) + + + + + page_mapping (1 samples, 0.02%) + + + + + get_mem_cgroup_from_mm (1 samples, 0.02%) + + + + + __mem_cgroup_charge (2 samples, 0.05%) + + + + + rmqueue_bulk (1 samples, 0.02%) + + + + + __list_del_entry_valid (1 samples, 0.02%) + + + + + asm_exc_page_fault (6 samples, 0.15%) + + + + + exc_page_fault (6 samples, 0.15%) + + + + + do_user_addr_fault (5 samples, 0.12%) + + + + + handle_mm_fault (5 samples, 0.12%) + + + + + __handle_mm_fault (5 samples, 0.12%) + + + + + __alloc_pages (2 samples, 0.05%) + + + + + get_page_from_freelist (2 samples, 0.05%) + + + + + kernel_init_free_pages.part.0 (1 samples, 0.02%) + + + + + clear_page_erms (1 samples, 0.02%) + + + + + __memmove_avx512_unaligned_erms (1 samples, 0.02%) + + + + + regex::builders::Builder::build_one_bytes (34 samples, 0.85%) + + + + + regex_automata::meta::regex::Builder::build (34 samples, 0.85%) + + + + + regex_automata::meta::strategy::new (34 samples, 0.85%) + + + + + regex_automata::nfa::thompson::compiler::Compiler::build_many_from_hir (34 samples, 0.85%) + + + + + <core::iter::adapters::map::Map<I,F> as core::iter::traits::iterator::Iterator>::next (34 samples, 0.85%) + + + + + regex_automata::nfa::thompson::compiler::Compiler::c_cap (34 samples, 0.85%) + + + + + regex_automata::nfa::thompson::compiler::Compiler::c (34 samples, 0.85%) + + + + + regex_automata::nfa::thompson::compiler::Compiler::c_cap (34 samples, 0.85%) + + + + + regex_automata::nfa::thompson::compiler::Compiler::c (34 samples, 0.85%) + + + + + regex_automata::nfa::thompson::compiler::Compiler::c (12 samples, 0.30%) + + + + + regex_automata::nfa::thompson::compiler::Utf8Compiler::new (12 samples, 0.30%) + + + + + regex_automata::nfa::thompson::map::Utf8BoundedMap::clear (12 samples, 0.30%) + + + + + <T as alloc::vec::spec_from_elem::SpecFromElem>::from_elem (12 samples, 0.30%) + + + + + alloc::vec::Vec<T,A>::extend_with (12 samples, 0.30%) + + + + + gen-99999-1-Mot (2,134 samples, 53.32%) + + gen-99999-1-Mot + + + [unknown] (129 samples, 3.22%) + + [un.. + + + once_cell::imp::initialize_or_wait (1 samples, 0.02%) + + + + + once_cell::imp::OnceCell<T>::initialize::_{{closure}} (1 samples, 0.02%) + + + + + regex::regex::bytes::Regex::new (1 samples, 0.02%) + + + + + regex::builders::Builder::build_one_bytes (1 samples, 0.02%) + + + + + regex_automata::meta::regex::Builder::build (1 samples, 0.02%) + + + + + regex_automata::meta::strategy::new (1 samples, 0.02%) + + + + + regex_automata::nfa::thompson::compiler::Compiler::build_many_from_hir (1 samples, 0.02%) + + + + + <core::iter::adapters::map::Map<I,F> as core::iter::traits::iterator::Iterator>::next (1 samples, 0.02%) + + + + + regex_automata::nfa::thompson::compiler::Compiler::c_cap (1 samples, 0.02%) + + + + + regex_automata::nfa::thompson::compiler::Compiler::c (1 samples, 0.02%) + + + + + regex_automata::nfa::thompson::compiler::Compiler::c_cap (1 samples, 0.02%) + + + + + regex_automata::nfa::thompson::compiler::Compiler::c (1 samples, 0.02%) + + + + + regex_automata::nfa::thompson::literal_trie::LiteralTrie::add (1 samples, 0.02%) + + + + + alloc::raw_vec::RawVec<T,A>::reserve::do_reserve_and_handle (1 samples, 0.02%) + + + + + alloc::raw_vec::finish_grow (1 samples, 0.02%) + + + + + realloc (1 samples, 0.02%) + + + + + _int_realloc (1 samples, 0.02%) + + + + + _int_malloc (1 samples, 0.02%) + + + + + all (4,002 samples, 100%) + + + + + ctrl-c (1 samples, 0.02%) + + + + + entry_SYSCALL_64_after_hwframe (1 samples, 0.02%) + + + + + do_syscall_64 (1 samples, 0.02%) + + + + + syscall_exit_to_user_mode (1 samples, 0.02%) + + + + + exit_to_user_mode_prepare (1 samples, 0.02%) + + + + + arch_do_signal_or_restart (1 samples, 0.02%) + + + + + get_signal (1 samples, 0.02%) + + + + + do_group_exit (1 samples, 0.02%) + + + + + do_exit (1 samples, 0.02%) + + + + + acct_process (1 samples, 0.02%) + + + + + do_acct_process (1 samples, 0.02%) + + + + + tty_devnum (1 samples, 0.02%) + + + + + diff --git a/releases/0.7.75/flamegraph-utmp.svg b/releases/0.7.75/flamegraph-utmp.svg new file mode 100644 index 00000000..e8332858 --- /dev/null +++ b/releases/0.7.75/flamegraph-utmp.svg @@ -0,0 +1,1397 @@ + + + + + + + + + + + + + + + Flame Graph: super_speedy_syslog_searcher 0.7.75; git: d799548f; -freq 8000; created 20240707T231133-0700; flamegraph-flamegraph 0.6.5; rustc 1.70.0
; command: s4 ./logs/CentOS7/x86_64/wtmp + + Reset Zoom + Search + + + + s4lib::readers::fixedstructreader::FixedStructReader::process_entry_at (1 samples, 1.72%) + + + + + s4lib::data::fixedstruct::buffer_to_fixedstructptr (1 samples, 1.72%) + + + + + alloc::alloc::exchange_malloc (1 samples, 1.72%) + + + + + malloc (1 samples, 1.72%) + + + + + s4lib::readers::fixedstructreader::FixedStructReader::new (1 samples, 1.72%) + + + + + s4lib::readers::fixedstructreader::FixedStructReader::score_file (1 samples, 1.72%) + + + + + s4lib::data::fixedstruct::FixedStruct::score_fixedstruct (1 samples, 1.72%) + + + + + asm_exc_page_fault (1 samples, 1.72%) + + + + + srso_alias_return_thunk (1 samples, 1.72%) + + + + + clone3 (3 samples, 5.17%) + + clone3 + + + start_thread (3 samples, 5.17%) + + start_.. + + + std::sys::unix::thread::Thread::new::thread_start (3 samples, 5.17%) + + std::s.. + + + core::ops::function::FnOnce::call_once{{vtable.shim}} (3 samples, 5.17%) + + core::.. + + + std::sys_common::backtrace::__rust_begin_short_backtrace (3 samples, 5.17%) + + std::s.. + + + s4::exec_fileprocessor_thread (3 samples, 5.17%) + + s4::ex.. + + + crossbeam_channel::channel::Sender<T>::send (1 samples, 1.72%) + + + + + wtmp (4 samples, 6.90%) + + wtmp + + + asm_exc_page_fault (1 samples, 1.72%) + + + + + exc_page_fault (1 samples, 1.72%) + + + + + do_user_addr_fault (1 samples, 1.72%) + + + + + handle_mm_fault (1 samples, 1.72%) + + + + + __handle_mm_fault (1 samples, 1.72%) + + + + + __alloc_pages (1 samples, 1.72%) + + + + + get_page_from_freelist (1 samples, 1.72%) + + + + + kernel_init_free_pages.part.0 (1 samples, 1.72%) + + + + + clear_page_erms (1 samples, 1.72%) + + + + + ret_from_fork (22 samples, 37.93%) + + ret_from_fork + + + schedule_tail (22 samples, 37.93%) + + schedule_tail + + + finish_task_switch.isra.0 (22 samples, 37.93%) + + finish_task_switch.isra.0 + + + __perf_event_task_sched_in (22 samples, 37.93%) + + __perf_event_task_sched_in + + + __raw_callee_save___pv_queued_spin_unlock (22 samples, 37.93%) + + __raw_callee_save___pv_queued_spin_unlock + + + mmput (1 samples, 1.72%) + + + + + exit_mmap (1 samples, 1.72%) + + + + + tlb_finish_mmu (1 samples, 1.72%) + + + + + free_pages_and_swap_cache (1 samples, 1.72%) + + + + + free_swap_cache (1 samples, 1.72%) + + + + + __x64_sys_exit_group (2 samples, 3.45%) + + __x.. + + + do_group_exit (2 samples, 3.45%) + + do_.. + + + do_exit (2 samples, 3.45%) + + do_.. + + + mm_update_next_owner (1 samples, 1.72%) + + + + + entry_SYSCALL_64_after_hwframe (3 samples, 5.17%) + + entry_.. + + + do_syscall_64 (3 samples, 5.17%) + + do_sys.. + + + __x64_sys_execve (1 samples, 1.72%) + + + + + do_execveat_common.isra.0 (1 samples, 1.72%) + + + + + bprm_execve (1 samples, 1.72%) + + + + + load_elf_binary (1 samples, 1.72%) + + + + + vm_mmap_pgoff (1 samples, 1.72%) + + + + + do_mmap (1 samples, 1.72%) + + + + + mmap_region (1 samples, 1.72%) + + + + + perf_event_mmap (1 samples, 1.72%) + + + + + perf_iterate_sb (1 samples, 1.72%) + + + + + perf_iterate_ctx (1 samples, 1.72%) + + + + + perf_event_mmap_output (1 samples, 1.72%) + + + + + perf_output_copy (1 samples, 1.72%) + + + + + security_mmap_addr (1 samples, 1.72%) + + + + + cap_mmap_addr (1 samples, 1.72%) + + + + + clone3 (2 samples, 3.45%) + + clo.. + + + start_thread (2 samples, 3.45%) + + sta.. + + + std::sys::unix::thread::Thread::new::thread_start (2 samples, 3.45%) + + std.. + + + std::sys::unix::stack_overflow::imp::make_handler (2 samples, 3.45%) + + std.. + + + __mmap (2 samples, 3.45%) + + __m.. + + + entry_SYSCALL_64_after_hwframe (2 samples, 3.45%) + + ent.. + + + do_syscall_64 (2 samples, 3.45%) + + do_.. + + + vm_mmap_pgoff (2 samples, 3.45%) + + vm_.. + + + do_mmap (2 samples, 3.45%) + + do_.. + + + get_unmapped_area (2 samples, 3.45%) + + get.. + + + arch_get_unmapped_area_topdown (1 samples, 1.72%) + + + + + vm_unmapped_area (1 samples, 1.72%) + + + + + asm_exc_page_fault (1 samples, 1.72%) + + + + + entry_SYSCALL_64_after_hwframe (1 samples, 1.72%) + + + + + do_syscall_64 (1 samples, 1.72%) + + + + + syscall_exit_to_user_mode (1 samples, 1.72%) + + + + + exit_to_user_mode_prepare (1 samples, 1.72%) + + + + + task_work_run (1 samples, 1.72%) + + + + + __fput (1 samples, 1.72%) + + + + + pipe_release (1 samples, 1.72%) + + + + + free_pipe_info (1 samples, 1.72%) + + + + + kfree (1 samples, 1.72%) + + + + + memcg_slab_free_hook (1 samples, 1.72%) + + + + + wp_page_copy (1 samples, 1.72%) + + + + + copy_mc_enhanced_fast_string (1 samples, 1.72%) + + + + + asm_exc_page_fault (2 samples, 3.45%) + + asm.. + + + exc_page_fault (2 samples, 3.45%) + + exc.. + + + do_user_addr_fault (2 samples, 3.45%) + + do_.. + + + handle_mm_fault (2 samples, 3.45%) + + han.. + + + __handle_mm_fault (2 samples, 3.45%) + + __h.. + + + copy_page (1 samples, 1.72%) + + + + + _dl_relocate_object (3 samples, 5.17%) + + _dl_re.. + + + __memrchr_ifunc (1 samples, 1.72%) + + + + + asm_exc_page_fault (1 samples, 1.72%) + + + + + exc_page_fault (1 samples, 1.72%) + + + + + do_user_addr_fault (1 samples, 1.72%) + + + + + handle_mm_fault (1 samples, 1.72%) + + + + + __handle_mm_fault (1 samples, 1.72%) + + + + + _dl_start (4 samples, 6.90%) + + _dl_start + + + _dl_sysdep_start (4 samples, 6.90%) + + _dl_sysde.. + + + dl_main (4 samples, 6.90%) + + dl_main + + + _dl_map_object_deps (1 samples, 1.72%) + + + + + _dl_catch_exception (1 samples, 1.72%) + + + + + openaux (1 samples, 1.72%) + + + + + _dl_map_object (1 samples, 1.72%) + + + + + _dl_map_object_from_fd (1 samples, 1.72%) + + + + + memset (1 samples, 1.72%) + + + + + asm_exc_page_fault (1 samples, 1.72%) + + + + + exc_page_fault (1 samples, 1.72%) + + + + + do_user_addr_fault (1 samples, 1.72%) + + + + + handle_mm_fault (1 samples, 1.72%) + + + + + __handle_mm_fault (1 samples, 1.72%) + + + + + __do_fault (1 samples, 1.72%) + + + + + filemap_fault (1 samples, 1.72%) + + + + + pagecache_get_page (1 samples, 1.72%) + + + + + srso_alias_return_thunk (1 samples, 1.72%) + + + + + srso_alias_safe_ret (1 samples, 1.72%) + + + + + s4lib::readers::filepreprocessor::process_path (1 samples, 1.72%) + + + + + std::path::Path::is_file (1 samples, 1.72%) + + + + + std::sys::unix::fs::stat (1 samples, 1.72%) + + + + + core::ffi::c_str::CStr::from_bytes_with_nul (1 samples, 1.72%) + + + + + core::slice::memchr::memchr_aligned (1 samples, 1.72%) + + + + + s4lib::printer::printers::PrinterLogMessage::print_fixedstruct_color (1 samples, 1.72%) + + + + + asm_exc_page_fault (1 samples, 1.72%) + + + + + exc_page_fault (1 samples, 1.72%) + + + + + do_user_addr_fault (1 samples, 1.72%) + + + + + handle_mm_fault (1 samples, 1.72%) + + + + + __handle_mm_fault (1 samples, 1.72%) + + + + + filemap_map_pages (1 samples, 1.72%) + + + + + next_uptodate_page (1 samples, 1.72%) + + + + + s4::processing_loop (2 samples, 3.45%) + + s4:.. + + + hashbrown::set::HashSet<T,S,A>::remove (1 samples, 1.72%) + + + + + hashbrown::raw::RawTable<T,A>::remove_entry (1 samples, 1.72%) + + + + + std::rt::lang_start::_{{closure}} (4 samples, 6.90%) + + std::rt::.. + + + std::sys_common::backtrace::__rust_begin_short_backtrace (4 samples, 6.90%) + + std::sys_.. + + + s4::main (4 samples, 6.90%) + + s4::main + + + <s4::CLI_Args as clap_builder::derive::Args>::augment_args (1 samples, 1.72%) + + + + + once_cell::imp::OnceCell<T>::initialize (1 samples, 1.72%) + + + + + once_cell::imp::initialize_or_wait (1 samples, 1.72%) + + + + + asm_exc_page_fault (1 samples, 1.72%) + + + + + exc_page_fault (1 samples, 1.72%) + + + + + do_user_addr_fault (1 samples, 1.72%) + + + + + handle_mm_fault (1 samples, 1.72%) + + + + + __handle_mm_fault (1 samples, 1.72%) + + + + + filemap_map_pages (1 samples, 1.72%) + + + + + unlock_page (1 samples, 1.72%) + + + + + s4 (38 samples, 65.52%) + + s4 + + + _start (10 samples, 17.24%) + + _start + + + __libc_start_main@@GLIBC_2.34 (5 samples, 8.62%) + + __libc_start.. + + + __libc_start_call_main (5 samples, 8.62%) + + __libc_start.. + + + main (5 samples, 8.62%) + + main + + + std::rt::lang_start_internal (5 samples, 8.62%) + + std::rt::lan.. + + + asm_exc_page_fault (1 samples, 1.72%) + + + + + exc_page_fault (1 samples, 1.72%) + + + + + do_user_addr_fault (1 samples, 1.72%) + + + + + handle_mm_fault (1 samples, 1.72%) + + + + + __handle_mm_fault (1 samples, 1.72%) + + + + + filemap_map_pages (1 samples, 1.72%) + + + + + next_uptodate_page (1 samples, 1.72%) + + + + + strrchr (1 samples, 1.72%) + + + + + perf-exec (15 samples, 25.86%) + + perf-exec + + + entry_SYSCALL_64_after_hwframe (15 samples, 25.86%) + + entry_SYSCALL_64_after_hwframe + + + do_syscall_64 (15 samples, 25.86%) + + do_syscall_64 + + + __x64_sys_execve (15 samples, 25.86%) + + __x64_sys_execve + + + do_execveat_common.isra.0 (15 samples, 25.86%) + + do_execveat_common.isra.0 + + + bprm_execve (15 samples, 25.86%) + + bprm_execve + + + load_elf_binary (15 samples, 25.86%) + + load_elf_binary + + + begin_new_exec (15 samples, 25.86%) + + begin_new_exec + + + perf_event_exec (14 samples, 24.14%) + + perf_event_exec + + + x86_pmu_enable_all (14 samples, 24.14%) + + x86_pmu_enable_all + + + all (58 samples, 100%) + + + + + ctrl-c (1 samples, 1.72%) + + + + + entry_SYSCALL_64_after_hwframe (1 samples, 1.72%) + + + + + do_syscall_64 (1 samples, 1.72%) + + + + + syscall_exit_to_user_mode (1 samples, 1.72%) + + + + + exit_to_user_mode_prepare (1 samples, 1.72%) + + + + + arch_do_signal_or_restart (1 samples, 1.72%) + + + + + get_signal (1 samples, 1.72%) + + + + + do_group_exit (1 samples, 1.72%) + + + + + do_exit (1 samples, 1.72%) + + + + + acct_process (1 samples, 1.72%) + + + + +