diff --git a/Cargo.lock b/Cargo.lock index a6bfb1e..2bad28e 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -405,22 +405,6 @@ dependencies = [ "tracing-subscriber", ] -[[package]] -name = "core-foundation" -version = "0.9.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "91e195e091a93c46f7102ec7818a2aa394e1e1771c3ab4825963fa03e45afb8f" -dependencies = [ - "core-foundation-sys", - "libc", -] - -[[package]] -name = "core-foundation-sys" -version = "0.8.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "06ea2b9bc92be3c2baa9334a323ebca2d6f074ff852cd1d7b11064035cd3868f" - [[package]] name = "cpufeatures" version = "0.2.12" @@ -594,16 +578,6 @@ version = "1.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "5443807d6dff69373d433ab9ef5378ad8df50ca6298caf15de6e52e24aaf54d5" -[[package]] -name = "errno" -version = "0.3.9" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "534c5cf6194dfab3db3242765c03bbe257cf92f22b38f6bc0c58d59108a820ba" -dependencies = [ - "libc", - "windows-sys 0.52.0", -] - [[package]] name = "event-listener" version = "5.3.1" @@ -615,12 +589,6 @@ dependencies = [ "pin-project-lite", ] -[[package]] -name = "fastrand" -version = "2.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9fc0510504f03c51ada170672ac806f1f105a88aa97a5281117e1ddc3368e51a" - [[package]] name = "fastwebsockets" version = "0.8.0" @@ -668,21 +636,6 @@ version = "1.0.7" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "3f9eec918d3f24069decb9af1554cad7c880e2da24a9afd88aca000531ab82c1" -[[package]] -name = "foreign-types" -version = "0.3.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f6f339eb8adc052cd2ca78910fda869aefa38d22d5cb648e6485e4d3fc06f3b1" -dependencies = [ - "foreign-types-shared", -] - -[[package]] -name = "foreign-types-shared" -version = "0.1.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "00b0228411908ca8685dba7fc2cdd70ec9990a6e753e89b6ac91a84c40fbaf4b" - [[package]] name = "futures" version = "0.3.30" @@ -1133,12 +1086,6 @@ version = "0.2.155" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "97b3888a4aecf77e811145cadf6eef5901f4782c53886191b2f693f24761847c" -[[package]] -name = "linux-raw-sys" -version = "0.4.14" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "78b3ae25bc7c8c38cec158d1f2757ee79e9b3740fbc7ccf0e59e4b08d793fa89" - [[package]] name = "lock_api" version = "0.4.12" @@ -1220,23 +1167,6 @@ dependencies = [ "getrandom", ] -[[package]] -name = "native-tls" -version = "0.2.12" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a8614eb2c83d59d1c8cc974dd3f920198647674a0a035e1af1fa58707e317466" -dependencies = [ - "libc", - "log", - "openssl", - "openssl-probe", - "openssl-sys", - "schannel", - "security-framework", - "security-framework-sys", - "tempfile", -] - [[package]] name = "nom" version = "7.1.3" @@ -1281,50 +1211,6 @@ version = "1.19.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "3fdb12b2476b595f9358c5161aa467c2438859caa136dec86c26fdd2efe17b92" -[[package]] -name = "openssl" -version = "0.10.66" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9529f4786b70a3e8c61e11179af17ab6188ad8d0ded78c5529441ed39d4bd9c1" -dependencies = [ - "bitflags 2.6.0", - "cfg-if", - "foreign-types", - "libc", - "once_cell", - "openssl-macros", - "openssl-sys", -] - -[[package]] -name = "openssl-macros" -version = "0.1.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a948666b637a0f465e8564c73e89d4dde00d72d4d473cc972f390fc3dcee7d9c" -dependencies = [ - "proc-macro2", - "quote", - "syn", -] - -[[package]] -name = "openssl-probe" -version = "0.1.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ff011a302c396a5197692431fc1948019154afc178baf7d8e37367442a4601cf" - -[[package]] -name = "openssl-sys" -version = "0.9.103" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7f9e8deee91df40a943c71b917e5874b951d32a802526c85721ce3b776c929d6" -dependencies = [ - "cc", - "libc", - "pkg-config", - "vcpkg", -] - [[package]] name = "parking" version = "2.2.0" @@ -1392,12 +1278,6 @@ version = "0.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "8b870d8c151b6f2fb93e84a13146138f05d02ed11c7e7c54f8826aaaf7c9f184" -[[package]] -name = "pkg-config" -version = "0.3.30" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d231b230927b5e4ad203db57bbcbee2802f6bce620b1e4a9024a07d94e2907ec" - [[package]] name = "ppv-lite86" version = "0.2.17" @@ -1558,19 +1438,6 @@ version = "0.1.24" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "719b953e2095829ee67db738b3bfa9fa368c94900df327b3f07fe6e794d2fe1f" -[[package]] -name = "rustix" -version = "0.38.34" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "70dc5ec042f7a43c4a73241207cecc9873a06d45debb38b329f8541d85c2730f" -dependencies = [ - "bitflags 2.6.0", - "errno", - "libc", - "linux-raw-sys", - "windows-sys 0.52.0", -] - [[package]] name = "rustls" version = "0.23.11" @@ -1617,44 +1484,12 @@ version = "1.0.18" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "f3cb5ba0dc43242ce17de99c180e96db90b235b8a9fdc9543c96d2209116bd9f" -[[package]] -name = "schannel" -version = "0.1.23" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fbc91545643bcf3a0bbb6569265615222618bdf33ce4ffbbd13c4bbd4c093534" -dependencies = [ - "windows-sys 0.52.0", -] - [[package]] name = "scopeguard" version = "1.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "94143f37725109f92c262ed2cf5e59bce7498c01bcc1502d7b9afe439a4e9f49" -[[package]] -name = "security-framework" -version = "2.11.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "897b2245f0b511c87893af39b033e5ca9cce68824c4d7e7630b5a1d339658d02" -dependencies = [ - "bitflags 2.6.0", - "core-foundation", - "core-foundation-sys", - "libc", - "security-framework-sys", -] - -[[package]] -name = "security-framework-sys" -version = "2.11.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "75da29fe9b9b08fe9d6b22b5b4bcbc75d8db3aa31e639aa56bb62e9d46bfceaf" -dependencies = [ - "core-foundation-sys", - "libc", -] - [[package]] name = "send_wrapper" version = "0.4.0" @@ -1749,10 +1584,9 @@ dependencies = [ "http-body-util", "humantime", "hyper 1.4.1", + "hyper-util", "simple_moving_average", "tokio", - "tokio-native-tls", - "tokio-util", "wisp-mux", ] @@ -1828,18 +1662,6 @@ version = "0.1.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "2047c6ded9c721764247e62cd3b03c09ffc529b2ba5b10ec482ae507a4a70160" -[[package]] -name = "tempfile" -version = "3.10.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "85b77fafb263dd9d05cbeac119526425676db3784113aa9295c88498cbf8bff1" -dependencies = [ - "cfg-if", - "fastrand", - "rustix", - "windows-sys 0.52.0", -] - [[package]] name = "thiserror" version = "1.0.63" @@ -1911,16 +1733,6 @@ dependencies = [ "syn", ] -[[package]] -name = "tokio-native-tls" -version = "0.3.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bbae76ab933c85776efabc971569dd6119c580d8f5d448769dec1764bf796ef2" -dependencies = [ - "native-tls", - "tokio", -] - [[package]] name = "tokio-stream" version = "0.1.15" @@ -2137,12 +1949,6 @@ version = "0.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "830b7e5d4d90034032940e4ace0d9a9a057e7a45cd94e6c007832e39edb82f6d" -[[package]] -name = "vcpkg" -version = "0.2.15" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "accd4ea62f7bb7a82fe23066fb0957d48ef677f6eeb8215f372f52e48bb32426" - [[package]] name = "version_check" version = "0.9.4" diff --git a/server/src/handle/wisp.rs b/server/src/handle/wisp.rs index 71a4ab4..b31e60e 100644 --- a/server/src/handle/wisp.rs +++ b/server/src/handle/wisp.rs @@ -1,9 +1,11 @@ +use std::io::Cursor; + use anyhow::Context; use fastwebsockets::upgrade::UpgradeFut; use futures_util::FutureExt; use hyper_util::rt::TokioIo; use tokio::{ - io::{AsyncBufReadExt, AsyncWriteExt, BufReader}, + io::{AsyncBufReadExt, AsyncReadExt, AsyncWriteExt, BufReader}, net::tcp::{OwnedReadHalf, OwnedWriteHalf}, select, task::JoinSet, @@ -162,8 +164,8 @@ pub async fn handle_wisp(fut: UpgradeFut, id: String) -> anyhow::Result<()> { let (read, write) = ws.split(|x| { let parts = x.into_inner().downcast::>().unwrap(); - assert_eq!(parts.read_buf.len(), 0); - parts.io.into_inner().split() + let (r, w) = parts.io.into_inner().split(); + (Cursor::new(parts.read_buf).chain(r), w) }); let (extensions, buffer_size) = CONFIG.wisp.to_opts(); diff --git a/simple-wisp-client/Cargo.toml b/simple-wisp-client/Cargo.toml index 13041a4..6649765 100644 --- a/simple-wisp-client/Cargo.toml +++ b/simple-wisp-client/Cargo.toml @@ -13,10 +13,9 @@ futures = "0.3.30" http-body-util = "0.1.0" humantime = "2.1.0" hyper = { version = "1.1.0", features = ["http1", "client"] } +hyper-util = { version = "0.1.6", features = ["tokio"] } simple_moving_average = "1.0.2" tokio = { version = "1.36.0", features = ["full"] } -tokio-native-tls = "0.3.1" -tokio-util = "0.7.10" wisp-mux = { path = "../wisp", features = ["fastwebsockets"]} [features] diff --git a/simple-wisp-client/flamegraph.svg b/simple-wisp-client/flamegraph.svg new file mode 100644 index 0000000..b98e6f6 --- /dev/null +++ b/simple-wisp-client/flamegraph.svg @@ -0,0 +1,491 @@ +Flame Graph Reset ZoomSearch [ld-linux-x86-64.so.2] (5 samples, 0.01%)[libc.so.6] (5 samples, 0.01%)[libc.so.6] (21 samples, 0.04%)[libc.so.6] (19 samples, 0.04%)std::sys::pal::unix::thread::Thread::new::thread_start (9 samples, 0.02%)std::sys::pal::unix::stack_overflow::Handler::new (9 samples, 0.02%)std::sys::pal::unix::stack_overflow::imp::make_handler (9 samples, 0.02%)pthread_getattr_np (9 samples, 0.02%)malloc (9 samples, 0.02%)[libc.so.6] (9 samples, 0.02%)[libc.so.6] (9 samples, 0.02%)[libc.so.6] (8 samples, 0.02%)[unknown] (6 samples, 0.01%)simple-wisp-cli (41 samples, 0.08%)<flume::async::AsyncSignal as flume::signal::Signal>::fire (7 samples, 0.01%)<core::pin::Pin<P> as core::future::future::Future>::poll (6 samples, 0.01%)core::ptr::drop_in_place<core::pin::Pin<alloc::boxed::Box<dyn core::future::future::Future+Output = core::result::Result<(wisp_mux::ws::Frame,core::option::Option<wisp_mux::ws::Frame>),wisp_mux::WispError>+core::marker::Send>>> (13 samples, 0.03%)core::ptr::drop_in_place<alloc::boxed::Box<dyn core::future::future::Future+Output = core::result::Result<(wisp_mux::ws::Frame,core::option::Option<wisp_mux::ws::Frame>),wisp_mux::WispError>+core::marker::Send>> (13 samples, 0.03%)<alloc::boxed::Box<T,A> as core::ops::drop::Drop>::drop (11 samples, 0.02%)<alloc::alloc::Global as core::alloc::Allocator>::deallocate (11 samples, 0.02%)alloc::alloc::dealloc (11 samples, 0.02%)__rdl_dealloc (11 samples, 0.02%)std::sys::pal::unix::alloc::<impl core::alloc::global::GlobalAlloc for std::alloc::System>::dealloc (11 samples, 0.02%)<wisp_mux::ws::AppendingWebSocketRead<R> as wisp_mux::ws::WebSocketRead>::wisp_read_split::_{{closure}} (43 samples, 0.09%)<wisp_mux::ws::Payload as bytes::buf::buf_impl::Buf>::advance (6 samples, 0.01%)<core::hash::sip::Hasher<S> as core::hash::Hasher>::write (11 samples, 0.02%)<event_listener::EventListener<T> as core::future::future::Future>::poll (41 samples, 0.08%)event_listener::InnerListener<T,B>::poll_internal (6 samples, 0.01%)event_listener::sys::<impl event_listener::Inner<T>>::register (6 samples, 0.01%)event_listener::TaskRef::into_task (6 samples, 0.01%)<core::task::wake::Waker as core::clone::Clone>::clone (6 samples, 0.01%)<futures_util::lock::mutex::MutexLockFuture<T> as core::future::future::Future>::poll (18 samples, 0.04%)<wisp_mux::ws::Payload as bytes::buf::buf_impl::Buf>::advance (25 samples, 0.05%)bytes::bytes_mut::shared_v_drop (25 samples, 0.05%)<core::sync::atomic::AtomicPtr<T> as bytes::loom::sync::atomic::AtomicMut<T>>::with_mut (25 samples, 0.05%)bytes::bytes_mut::shared_v_drop::_{{closure}} (25 samples, 0.05%)bytes::bytes_mut::release_shared (11 samples, 0.02%)core::mem::drop (11 samples, 0.02%)core::ptr::drop_in_place<alloc::boxed::Box<bytes::bytes_mut::Shared>> (11 samples, 0.02%)core::ptr::drop_in_place<bytes::bytes_mut::Shared> (11 samples, 0.02%)core::ptr::drop_in_place<alloc::vec::Vec<u8>> (11 samples, 0.02%)core::ptr::drop_in_place<alloc::raw_vec::RawVec<u8>> (11 samples, 0.02%)<alloc::raw_vec::RawVec<T,A> as core::ops::drop::Drop>::drop (11 samples, 0.02%)<alloc::alloc::Global as core::alloc::Allocator>::deallocate (11 samples, 0.02%)alloc::alloc::dealloc (11 samples, 0.02%)__rdl_dealloc (11 samples, 0.02%)std::sys::pal::unix::alloc::<impl core::alloc::global::GlobalAlloc for std::alloc::System>::dealloc (11 samples, 0.02%)cfree (7 samples, 0.01%)core::ptr::drop_in_place<<wisp_mux::ws::AppendingWebSocketRead<fastwebsockets::WebSocketRead<tokio::net::tcp::split_owned::OwnedReadHalf>> as wisp_mux::ws::WebSocketRead>::wisp_read_frame::{{closure}}> (121 samples, 0.24%)core::ptr::drop_in_place<core::option::Option<event_listener::State<()>>> (6 samples, 0.01%)core::ptr::drop_in_place<event_listener::State<()>> (6 samples, 0.01%)core::ptr::drop_in_place<event_listener::Task> (6 samples, 0.01%)core::ptr::drop_in_place<core::task::wake::Waker> (6 samples, 0.01%)<core::task::wake::Waker as core::ops::drop::Drop>::drop (6 samples, 0.01%)core::ptr::drop_in_place<event_listener::EventListener> (21 samples, 0.04%)core::ptr::drop_in_place<core::pin::Pin<alloc::boxed::Box<event_listener::InnerListener<(),alloc::sync::Arc<event_listener::Inner<()>>>>>> (7 samples, 0.01%)core::ptr::drop_in_place<alloc::boxed::Box<event_listener::InnerListener<(),alloc::sync::Arc<event_listener::Inner<()>>>>> (7 samples, 0.01%)core::ptr::drop_in_place<event_listener::InnerListener<(),alloc::sync::Arc<event_listener::Inner<()>>>> (7 samples, 0.01%)event_listener::_::<impl core::ops::drop::Drop for event_listener::InnerListener<T,B>>::drop (7 samples, 0.01%)event_listener::_::<impl core::ops::drop::Drop for event_listener::InnerListener<T,B>>::drop::__drop_inner (7 samples, 0.01%)core::ptr::drop_in_place<flume::async::RecvFut<bytes::bytes::Bytes>> (20 samples, 0.04%)<flume::async::RecvFut<T> as core::ops::drop::Drop>::drop (8 samples, 0.02%)flume::async::RecvFut<T>::reset_hook (8 samples, 0.02%)<dyn core::any::Any>::downcast_ref (8 samples, 0.02%)<dyn core::any::Any>::is (8 samples, 0.02%)core::ptr::drop_in_place<futures_util::lock::mutex::MutexGuard<alloc::boxed::Box<dyn wisp_mux::ws::WebSocketWrite+core::marker::Send>>> (5 samples, 0.01%)core::ptr::drop_in_place<wisp_mux::fastwebsockets::<impl wisp_mux::ws::WebSocketWrite for fastwebsockets::WebSocketWrite<tokio::net::tcp::split_owned::OwnedWriteHalf>>::wisp_write_split::{{closure}}> (8 samples, 0.02%)core::ptr::drop_in_place<wisp_mux::stream::MuxStreamWrite::write_payload_internal::{{closure}}> (7 samples, 0.01%)core::ptr::drop_in_place<wisp_mux::ws::LockedWebSocketWrite::write_split::{{closure}}> (7 samples, 0.01%)dashmap::DashMap<K,V,S>::get (10 samples, 0.02%)event_listener::Event<T>::listen (13 samples, 0.03%)event_listener::Event<T>::inner (10 samples, 0.02%)core::sync::atomic::AtomicPtr<T>::load (10 samples, 0.02%)core::sync::atomic::atomic_load (10 samples, 0.02%)event_listener::sys::Inner<T>::remove (7 samples, 0.01%)core::option::Option<T>::as_pin_mut (7 samples, 0.01%)core::option::Option<T>::as_mut (7 samples, 0.01%)<tokio::io::util::write_all::WriteAll<W> as core::future::future::Future>::poll (6 samples, 0.01%)<&mut T as tokio::io::async_write::AsyncWrite>::poll_write (6 samples, 0.01%)<tokio::net::tcp::split_owned::OwnedWriteHalf as tokio::io::async_write::AsyncWrite>::poll_write (6 samples, 0.01%)core::ptr::drop_in_place<fastwebsockets::frame::Frame> (21 samples, 0.04%)core::ptr::drop_in_place<fastwebsockets::frame::Payload> (21 samples, 0.04%)fastwebsockets::WebSocketWrite<S>::write_frame::_{{closure}} (49 samples, 0.10%)fastwebsockets::WriteHalf::write_frame::_{{closure}} (30 samples, 0.06%)flume::Chan<T>::pull_pending (10 samples, 0.02%)flume::Shared<T>::recv (11 samples, 0.02%)futures_util::lock::mutex::Mutex<T>::remove_waker (5 samples, 0.01%)tokio::runtime::task::raw::poll (26 samples, 0.05%)wisp_mux::fastwebsockets::<impl wisp_mux::ws::WebSocketWrite for fastwebsockets::WebSocketWrite<S>>::wisp_write_split (11 samples, 0.02%)wisp_mux::fastwebsockets::_<impl wisp_mux::ws::WebSocketWrite for fastwebsockets::WebSocketWrite<S>>::wisp_write_split::_{{closure}} (50 samples, 0.10%)<wisp_mux::packet::Packet as wisp_mux::packet::Encode>::encode (5 samples, 0.01%)<wisp_mux::packet::PacketType as wisp_mux::packet::Encode>::encode (5 samples, 0.01%)bytes::bytes_mut::BytesMut::extend_from_slice (5 samples, 0.01%)core::intrinsics::copy_nonoverlapping (5 samples, 0.01%)wisp_mux::packet::<impl core::convert::From<wisp_mux::packet::Packet> for wisp_mux::ws::Frame>::from (41 samples, 0.08%)wisp_mux::packet::<impl core::convert::From<wisp_mux::packet::Packet> for bytes::bytes_mut::BytesMut>::from (8 samples, 0.02%)[[heap]] (621 samples, 1.25%)wisp_mux::stream::MuxStreamRead::read::_{{closure}}::_{{closure}}::_{{closure}} (30 samples, 0.06%)<wisp_mux::ws::Payload as bytes::buf::buf_impl::Buf>::advance (6 samples, 0.01%)[libc.so.6] (117 samples, 0.23%)__floattidf (14 samples, 0.03%)__lll_lock_wake_private (20 samples, 0.04%)__vdso_clock_gettime (20 samples, 0.04%)bytes::bytes_mut::BytesMut::advance_unchecked (9 samples, 0.02%)alloc::vec::Vec<T,A>::extend_from_slice (14 samples, 0.03%)<alloc::vec::Vec<T,A> as alloc::vec::spec_extend::SpecExtend<&T,core::slice::iter::Iter<T>>>::spec_extend (14 samples, 0.03%)alloc::vec::Vec<T,A>::append_elements (14 samples, 0.03%)core::intrinsics::copy_nonoverlapping (14 samples, 0.03%)bytes::bytes_mut::BytesMut::reserve_inner (30 samples, 0.06%)bytes::bytes_mut::BytesMut::shallow_clone (10 samples, 0.02%)bytes::bytes_mut::BytesMut::promote_to_shared (10 samples, 0.02%)alloc::boxed::Box<T>::new (10 samples, 0.02%)alloc::alloc::exchange_malloc (10 samples, 0.02%)<alloc::alloc::Global as core::alloc::Allocator>::allocate (10 samples, 0.02%)alloc::alloc::Global::alloc_impl (10 samples, 0.02%)alloc::alloc::alloc (10 samples, 0.02%)__rdl_alloc (10 samples, 0.02%)std::sys::pal::unix::alloc::<impl core::alloc::global::GlobalAlloc for std::alloc::System>::alloc (10 samples, 0.02%)bytes::bytes_mut::BytesMut::split_to (41 samples, 0.08%)core::fmt::Arguments::new_v1 (26 samples, 0.05%)cfree (24 samples, 0.05%)core::ptr::drop_in_place<event_listener::EventListener> (7 samples, 0.01%)core::ptr::drop_in_place<core::pin::Pin<alloc::boxed::Box<event_listener::InnerListener<(),alloc::sync::Arc<event_listener::Inner<()>>>>>> (7 samples, 0.01%)core::ptr::drop_in_place<alloc::boxed::Box<event_listener::InnerListener<(),alloc::sync::Arc<event_listener::Inner<()>>>>> (7 samples, 0.01%)<alloc::boxed::Box<T,A> as core::ops::drop::Drop>::drop (7 samples, 0.01%)<alloc::alloc::Global as core::alloc::Allocator>::deallocate (7 samples, 0.01%)alloc::alloc::dealloc (7 samples, 0.01%)__rdl_dealloc (7 samples, 0.01%)std::sys::pal::unix::alloc::<impl core::alloc::global::GlobalAlloc for std::alloc::System>::dealloc (7 samples, 0.01%)core::ptr::drop_in_place<fastwebsockets::WebSocketRead<tokio::net::tcp::split_owned::OwnedReadHalf>::read_frame<wisp_mux::fastwebsockets::<impl wisp_mux::ws::WebSocketRead for fastwebsockets::WebSocketRead<tokio::net::tcp::split_owned::OwnedReadHalf>>::wisp_read_frame::{{closure}}::{{closure}}::{{closure}},wisp_mux::WispError,wisp_mux::fastwebsockets::<impl wisp_mux::ws::WebSocketRead for fastwebsockets::WebSocketRead<tokio::net::tcp::split_owned::OwnedReadHalf>>::wisp_read_frame::{{closure}}::{{closure}}>::{{closure}}> (20 samples, 0.04%)core::ptr::drop_in_place<fastwebsockets::WriteHalf::write_frame<tokio::net::tcp::split_owned::OwnedWriteHalf>::{{closure}}> (12 samples, 0.02%)core::ptr::drop_in_place<flume::async::RecvFut<bytes::bytes::Bytes>> (17 samples, 0.03%)core::ptr::drop_in_place<wisp_mux::fastwebsockets::<impl wisp_mux::ws::WebSocketRead for fastwebsockets::WebSocketRead<tokio::net::tcp::split_owned::OwnedReadHalf>>::wisp_read_split::{{closure}}> (105 samples, 0.21%)dashmap::DashMap<K,V,S>::hash_usize (8 samples, 0.02%)event_listener::Event<T>::listen (9 samples, 0.02%)fastwebsockets::ReadHalf::read_frame_inner::_{{closure}} (28 samples, 0.06%)fastwebsockets::ReadHalf::parse_frame_header::_{{closure}} (5 samples, 0.01%)fastwebsockets::frame::<impl core::convert::From<fastwebsockets::frame::Payload> for bytes::bytes_mut::BytesMut>::from (11 samples, 0.02%)flume::Chan<T>::pull_pending (9 samples, 0.02%)malloc (6 samples, 0.01%)syscall (34 samples, 0.07%)tokio::net::tcp::stream::TcpStream::poll_read_priv (24 samples, 0.05%)tokio::io::poll_evented::PollEvented<E>::poll_read (6 samples, 0.01%)tokio::net::tcp::stream::TcpStream::poll_write_priv (20 samples, 0.04%)tokio::net::tcp::stream::TcpStream::poll_write_vectored_priv (31 samples, 0.06%)tokio::runtime::driver::IoHandle::unpark (6 samples, 0.01%)tokio::runtime::coop::poll_proceed (5 samples, 0.01%)tokio::runtime::context::budget (5 samples, 0.01%)std::thread::local::LocalKey<T>::try_with (5 samples, 0.01%)tokio::runtime::context::budget::_{{closure}} (5 samples, 0.01%)tokio::runtime::coop::poll_proceed::_{{closure}} (5 samples, 0.01%)core::task::wake::Waker::wake_by_ref (5 samples, 0.01%)tokio::runtime::io::registration::Registration::poll_ready (23 samples, 0.05%)tokio::runtime::scheduler::multi_thread::worker::<impl tokio::runtime::scheduler::multi_thread::handle::Handle>::schedule_task (5 samples, 0.01%)tokio::runtime::scheduler::multi_thread::worker::Context::park_timeout (5 samples, 0.01%)tokio::runtime::scheduler::multi_thread::worker::Context::run_task (23 samples, 0.05%)tokio::runtime::coop::budget (20 samples, 0.04%)tokio::runtime::coop::with_budget (20 samples, 0.04%)tokio::runtime::scheduler::multi_thread::worker::Context::run_task::_{{closure}} (20 samples, 0.04%)tokio::runtime::task::LocalNotified<S>::run (20 samples, 0.04%)tokio::runtime::task::raw::RawTask::poll (20 samples, 0.04%)tokio::runtime::task::waker::wake_by_val (8 samples, 0.02%)tokio::runtime::task::harness::<impl tokio::runtime::task::raw::RawTask>::wake_by_val (8 samples, 0.02%)tokio::runtime::task::state::State::transition_to_notified_by_val (7 samples, 0.01%)tokio::runtime::task::state::State::fetch_update_action (7 samples, 0.01%)tokio::runtime::task::state::State::load (7 samples, 0.01%)core::sync::atomic::AtomicUsize::load (7 samples, 0.01%)core::sync::atomic::atomic_load (7 samples, 0.01%)tokio::runtime::time::Driver::park_internal (5 samples, 0.01%)tokio::runtime::time::_<impl tokio::runtime::time::handle::Handle>::process_at_time::_{{closure}} (36 samples, 0.07%)tokio::runtime::time::wheel::Wheel::next_expiration (29 samples, 0.06%)[anon] (895 samples, 1.79%)[..wisp_mux::stream::MuxStreamRead::read::_{{closure}}::_{{closure}}::_{{closure}} (91 samples, 0.18%)tokio::loom::std::parking_lot::Mutex<T>::lock (16 samples, 0.03%)lock_api::mutex::Mutex<R,T>::lock (16 samples, 0.03%)<parking_lot::raw_mutex::RawMutex as lock_api::mutex::RawMutex>::lock (16 samples, 0.03%)parking_lot::raw_mutex::RawMutex::lock_slow (15 samples, 0.03%)parking_lot_core::parking_lot::park (15 samples, 0.03%)parking_lot_core::parking_lot::with_thread_data (15 samples, 0.03%)parking_lot_core::parking_lot::park::_{{closure}} (15 samples, 0.03%)__floattidf (6 samples, 0.01%)compiler_builtins::float::conv::__floattidf (6 samples, 0.01%)compiler_builtins::float::conv::int_to_float::u128_to_f64_bits (6 samples, 0.01%)std::f64::<impl f64>::powf (102 samples, 0.20%)pow (101 samples, 0.20%)[libm.so.6] (71 samples, 0.14%)clock_gettime (33 samples, 0.07%)__vdso_clock_gettime (16 samples, 0.03%)tokio::runtime::scheduler::multi_thread::stats::Stats::end_processing_scheduled_tasks (162 samples, 0.32%)std::sys::pal::unix::time::Timespec::now (36 samples, 0.07%)clock_gettime (67 samples, 0.13%)__vdso_clock_gettime (41 samples, 0.08%)tokio::runtime::scheduler::multi_thread::stats::Stats::start_processing_scheduled_tasks (75 samples, 0.15%)std::sys::pal::unix::time::Timespec::now (74 samples, 0.15%)tokio::runtime::time::Driver::park_internal (9 samples, 0.02%)tokio::runtime::scheduler::multi_thread::worker::Context::maintenance (25 samples, 0.05%)tokio::runtime::scheduler::multi_thread::worker::Context::park_timeout (11 samples, 0.02%)tokio::runtime::scheduler::multi_thread::park::Parker::park_timeout (11 samples, 0.02%)<alloc::sync::Arc<T,A> as core::ops::deref::Deref>::deref (14 samples, 0.03%)alloc::sync::Arc<T,A>::inner (14 samples, 0.03%)core::ptr::non_null::NonNull<T>::as_ref (14 samples, 0.03%)core::option::Option<T>::take (6 samples, 0.01%)core::mem::replace (6 samples, 0.01%)core::cell::RefCell<T>::borrow_mut (6 samples, 0.01%)core::cell::RefCell<T>::try_borrow_mut (6 samples, 0.01%)core::cell::BorrowRefMut::new (6 samples, 0.01%)tokio::runtime::scheduler::defer::Defer::wake (10 samples, 0.02%)core::sync::atomic::AtomicUsize::compare_exchange (34 samples, 0.07%)core::sync::atomic::atomic_compare_exchange (34 samples, 0.07%)core::ptr::drop_in_place<tokio::loom::std::parking_lot::MutexGuard<()>> (8 samples, 0.02%)core::ptr::drop_in_place<lock_api::mutex::MutexGuard<parking_lot::raw_mutex::RawMutex,()>> (8 samples, 0.02%)<lock_api::mutex::MutexGuard<R,T> as core::ops::drop::Drop>::drop (8 samples, 0.02%)<parking_lot::raw_mutex::RawMutex as lock_api::mutex::RawMutex>::unlock (8 samples, 0.02%)core::sync::atomic::AtomicU8::compare_exchange (8 samples, 0.02%)core::sync::atomic::atomic_compare_exchange (8 samples, 0.02%)core::sync::atomic::AtomicUsize::compare_exchange (23 samples, 0.05%)core::sync::atomic::atomic_compare_exchange (23 samples, 0.05%)<parking_lot::raw_mutex::RawMutex as lock_api::mutex::RawMutex>::lock (36 samples, 0.07%)core::sync::atomic::AtomicU8::compare_exchange_weak (36 samples, 0.07%)core::sync::atomic::atomic_compare_exchange_weak (36 samples, 0.07%)core::sync::atomic::AtomicI32::load (75 samples, 0.15%)core::sync::atomic::atomic_load (75 samples, 0.15%)<parking_lot_core::thread_parker::imp::ThreadParker as parking_lot_core::thread_parker::ThreadParkerT>::park (128 samples, 0.26%)parking_lot_core::thread_parker::imp::ThreadParker::futex_wait (32 samples, 0.06%)syscall (32 samples, 0.06%)core::ops::function::FnOnce::call_once (5 samples, 0.01%)parking_lot::condvar::Condvar::wait_until_internal::_{{closure}} (5 samples, 0.01%)<parking_lot::raw_mutex::RawMutex as lock_api::mutex::RawMutex>::unlock (5 samples, 0.01%)core::sync::atomic::AtomicU8::compare_exchange (5 samples, 0.01%)core::sync::atomic::atomic_compare_exchange (5 samples, 0.01%)parking_lot_core::parking_lot::hash (8 samples, 0.02%)parking_lot_core::parking_lot::lock_bucket (34 samples, 0.07%)parking_lot_core::word_lock::WordLock::lock (26 samples, 0.05%)core::sync::atomic::AtomicUsize::compare_exchange_weak (25 samples, 0.05%)core::sync::atomic::atomic_compare_exchange_weak (25 samples, 0.05%)parking_lot_core::parking_lot::park::_{{closure}} (173 samples, 0.35%)tokio::loom::std::parking_lot::Condvar::wait (222 samples, 0.45%)parking_lot::condvar::Condvar::wait (222 samples, 0.45%)parking_lot::condvar::Condvar::wait_until_internal (222 samples, 0.45%)parking_lot_core::parking_lot::park (186 samples, 0.37%)parking_lot_core::parking_lot::with_thread_data (186 samples, 0.37%)tokio::runtime::scheduler::multi_thread::park::Inner::park_condvar (260 samples, 0.52%)tokio::loom::std::parking_lot::Mutex<T>::lock (7 samples, 0.01%)lock_api::mutex::Mutex<R,T>::lock (6 samples, 0.01%)<parking_lot::raw_mutex::RawMutex as lock_api::mutex::RawMutex>::lock (6 samples, 0.01%)core::sync::atomic::AtomicU8::compare_exchange_weak (6 samples, 0.01%)core::sync::atomic::atomic_compare_exchange_weak (6 samples, 0.01%)core::sync::atomic::AtomicUsize::compare_exchange (24 samples, 0.05%)core::sync::atomic::atomic_compare_exchange (24 samples, 0.05%)core::sync::atomic::AtomicUsize::swap (83 samples, 0.17%)core::sync::atomic::atomic_swap (83 samples, 0.17%)tokio::runtime::driver::Driver::park (15 samples, 0.03%)tokio::runtime::driver::TimeDriver::park (15 samples, 0.03%)tokio::runtime::time::Driver::park (5 samples, 0.01%)core::iter::traits::iterator::Iterator::for_each::call::_{{closure}} (7 samples, 0.01%)alloc::vec::Vec<T,A>::extend_trusted::_{{closure}} (7 samples, 0.01%)core::ptr::write (7 samples, 0.01%)tokio::runtime::driver::Handle::time (8 samples, 0.02%)core::option::Option<T>::as_ref (8 samples, 0.02%)core::slice::<impl [T]>::get_unchecked (5 samples, 0.01%)<usize as core::slice::index::SliceIndex<[T]>>::get_unchecked (5 samples, 0.01%)core::slice::index::get_noubcheck (5 samples, 0.01%)core::result::Result<T,E>::is_err (5 samples, 0.01%)core::result::Result<T,E>::is_ok (5 samples, 0.01%)core::iter::adapters::map::map_fold::_{{closure}} (475 samples, 0.95%)tokio::runtime::time::Driver::park_internal::_{{closure}} (468 samples, 0.94%)tokio::runtime::time::Inner::lock_sharded_wheel (460 samples, 0.92%)tokio::loom::std::parking_lot::Mutex<T>::lock (392 samples, 0.79%)lock_api::mutex::Mutex<R,T>::lock (392 samples, 0.79%)<parking_lot::raw_mutex::RawMutex as lock_api::mutex::RawMutex>::lock (392 samples, 0.79%)core::sync::atomic::AtomicU8::compare_exchange_weak (387 samples, 0.78%)core::sync::atomic::atomic_compare_exchange_weak (387 samples, 0.78%)<alloc::vec::Vec<T,A> as alloc::vec::spec_extend::SpecExtend<T,I>>::spec_extend (489 samples, 0.98%)alloc::vec::Vec<T,A>::extend_trusted (489 samples, 0.98%)core::iter::traits::iterator::Iterator::for_each (489 samples, 0.98%)<core::iter::adapters::map::Map<I,F> as core::iter::traits::iterator::Iterator>::fold (489 samples, 0.98%)core::iter::traits::iterator::Iterator::fold (489 samples, 0.98%)core::iter::range::<impl core::iter::traits::iterator::Iterator for core::ops::range::Range<A>>::next (14 samples, 0.03%)<core::ops::range::Range<T> as core::iter::range::RangeIteratorImpl>::spec_next (14 samples, 0.03%)core::cmp::impls::<impl core::cmp::PartialOrd for u32>::lt (8 samples, 0.02%)__rdl_alloc (160 samples, 0.32%)std::sys::pal::unix::alloc::<impl core::alloc::global::GlobalAlloc for std::alloc::System>::alloc (160 samples, 0.32%)malloc (160 samples, 0.32%)core::iter::traits::iterator::Iterator::collect (665 samples, 1.33%)<alloc::vec::Vec<T> as core::iter::traits::collect::FromIterator<T>>::from_iter (665 samples, 1.33%)<alloc::vec::Vec<T> as alloc::vec::spec_from_iter::SpecFromIter<T,I>>::from_iter (665 samples, 1.33%)<alloc::vec::Vec<T> as alloc::vec::spec_from_iter_nested::SpecFromIterNested<T,I>>::from_iter (665 samples, 1.33%)alloc::vec::Vec<T>::with_capacity (170 samples, 0.34%)alloc::vec::Vec<T,A>::with_capacity_in (170 samples, 0.34%)alloc::raw_vec::RawVec<T,A>::with_capacity_in (170 samples, 0.34%)alloc::raw_vec::RawVec<T,A>::try_allocate_in (170 samples, 0.34%)<alloc::alloc::Global as core::alloc::Allocator>::allocate (163 samples, 0.33%)alloc::alloc::Global::alloc_impl (163 samples, 0.33%)alloc::alloc::alloc (163 samples, 0.33%)core::option::Option<T>::map (10 samples, 0.02%)<core::iter::adapters::enumerate::Enumerate<I> as core::iter::traits::iterator::Iterator>::next (45 samples, 0.09%)<core::slice::iter::Iter<T> as core::iter::traits::iterator::Iterator>::next (45 samples, 0.09%)<core::ptr::non_null::NonNull<T> as core::cmp::PartialEq>::eq (28 samples, 0.06%)tokio::runtime::time::wheel::level::Level::next_expiration (108 samples, 0.22%)tokio::runtime::time::wheel::level::Level::next_occupied_slot (95 samples, 0.19%)tokio::runtime::time::wheel::level::slot_range (8 samples, 0.02%)core::num::<impl usize>::pow (8 samples, 0.02%)core::option::Option<T>::is_none (12 samples, 0.02%)core::option::Option<T>::is_some (12 samples, 0.02%)core::iter::adapters::filter_map::filter_map_fold::_{{closure}} (411 samples, 0.82%)tokio::runtime::time::Driver::park_internal::_{{closure}} (397 samples, 0.80%)tokio::runtime::time::wheel::Wheel::next_expiration_time (393 samples, 0.79%)tokio::runtime::time::wheel::Wheel::next_expiration (380 samples, 0.76%)tokio::util::linked_list::LinkedList<L,<L as tokio::util::linked_list::Link>::Target>::is_empty (16 samples, 0.03%)<core::iter::adapters::filter_map::FilterMap<I,F> as core::iter::traits::iterator::Iterator>::fold (440 samples, 0.88%)<core::slice::iter::Iter<T> as core::iter::traits::iterator::Iterator>::fold (440 samples, 0.88%)core::num::<impl usize>::unchecked_add (7 samples, 0.01%)tokio::runtime::time::wheel::level::Level::next_occupied_slot (8 samples, 0.02%)tokio::runtime::time::wheel::level::level_range (6 samples, 0.01%)tokio::runtime::time::wheel::level::slot_range (6 samples, 0.01%)core::num::<impl usize>::pow (6 samples, 0.01%)core::iter::traits::iterator::Iterator::min (481 samples, 0.96%)core::iter::traits::iterator::Iterator::min_by (481 samples, 0.96%)core::iter::traits::iterator::Iterator::reduce (481 samples, 0.96%)<core::iter::adapters::filter_map::FilterMap<I,F> as core::iter::traits::iterator::Iterator>::next (40 samples, 0.08%)<core::slice::iter::Iter<T> as core::iter::traits::iterator::Iterator>::find_map (40 samples, 0.08%)core::ops::function::impls::<impl core::ops::function::FnMut<A> for &mut F>::call_mut (37 samples, 0.07%)tokio::runtime::time::Driver::park_internal::_{{closure}} (37 samples, 0.07%)tokio::runtime::time::wheel::Wheel::next_expiration_time (37 samples, 0.07%)tokio::runtime::time::wheel::Wheel::next_expiration (36 samples, 0.07%)tokio::runtime::time::wheel::level::Level::next_expiration (24 samples, 0.05%)tokio::runtime::time::wheel::level::slot_range (7 samples, 0.01%)core::num::<impl usize>::pow (7 samples, 0.01%)core::result::Result<T,E>::is_ok (9 samples, 0.02%)<alloc::vec::Vec<T,A> as core::ops::drop::Drop>::drop (417 samples, 0.84%)core::ptr::drop_in_place<[tokio::loom::std::parking_lot::MutexGuard<tokio::runtime::time::wheel::Wheel>]> (417 samples, 0.84%)core::ptr::drop_in_place<tokio::loom::std::parking_lot::MutexGuard<tokio::runtime::time::wheel::Wheel>> (387 samples, 0.78%)core::ptr::drop_in_place<lock_api::mutex::MutexGuard<parking_lot::raw_mutex::RawMutex,tokio::runtime::time::wheel::Wheel>> (387 samples, 0.78%)<lock_api::mutex::MutexGuard<R,T> as core::ops::drop::Drop>::drop (387 samples, 0.78%)<parking_lot::raw_mutex::RawMutex as lock_api::mutex::RawMutex>::unlock (387 samples, 0.78%)core::sync::atomic::AtomicU8::compare_exchange (378 samples, 0.76%)core::sync::atomic::atomic_compare_exchange (378 samples, 0.76%)core::mem::drop (459 samples, 0.92%)core::ptr::drop_in_place<alloc::vec::Vec<tokio::loom::std::parking_lot::MutexGuard<tokio::runtime::time::wheel::Wheel>>> (459 samples, 0.92%)core::ptr::drop_in_place<alloc::raw_vec::RawVec<tokio::loom::std::parking_lot::MutexGuard<tokio::runtime::time::wheel::Wheel>>> (42 samples, 0.08%)<alloc::raw_vec::RawVec<T,A> as core::ops::drop::Drop>::drop (42 samples, 0.08%)<alloc::alloc::Global as core::alloc::Allocator>::deallocate (42 samples, 0.08%)alloc::alloc::dealloc (42 samples, 0.08%)__rdl_dealloc (42 samples, 0.08%)std::sys::pal::unix::alloc::<impl core::alloc::global::GlobalAlloc for std::alloc::System>::dealloc (42 samples, 0.08%)cfree (42 samples, 0.08%)[libc.so.6] (13 samples, 0.03%)core::ptr::drop_in_place<tokio::loom::std::parking_lot::MutexGuard<alloc::vec::Vec<std::process::Child>>> (21 samples, 0.04%)core::ptr::drop_in_place<lock_api::mutex::MutexGuard<parking_lot::raw_mutex::RawMutex,alloc::vec::Vec<std::process::Child>>> (21 samples, 0.04%)<lock_api::mutex::MutexGuard<R,T> as core::ops::drop::Drop>::drop (21 samples, 0.04%)<parking_lot::raw_mutex::RawMutex as lock_api::mutex::RawMutex>::unlock (21 samples, 0.04%)core::sync::atomic::AtomicU8::compare_exchange (21 samples, 0.04%)core::sync::atomic::atomic_compare_exchange (21 samples, 0.04%)core::ptr::drop_in_place<tokio::loom::std::parking_lot::MutexGuard<core::option::Option<tokio::sync::watch::Receiver<()>>>> (23 samples, 0.05%)core::ptr::drop_in_place<lock_api::mutex::MutexGuard<parking_lot::raw_mutex::RawMutex,core::option::Option<tokio::sync::watch::Receiver<()>>>> (23 samples, 0.05%)<lock_api::mutex::MutexGuard<R,T> as core::ops::drop::Drop>::drop (23 samples, 0.05%)<parking_lot::raw_mutex::RawMutex as lock_api::mutex::RawMutex>::unlock (23 samples, 0.05%)core::sync::atomic::AtomicU8::compare_exchange (23 samples, 0.05%)core::sync::atomic::atomic_compare_exchange (23 samples, 0.05%)tokio::loom::std::parking_lot::Mutex<T>::lock (26 samples, 0.05%)lock_api::mutex::Mutex<R,T>::lock (26 samples, 0.05%)<parking_lot::raw_mutex::RawMutex as lock_api::mutex::RawMutex>::lock (26 samples, 0.05%)core::sync::atomic::AtomicU8::compare_exchange_weak (26 samples, 0.05%)core::sync::atomic::atomic_compare_exchange_weak (26 samples, 0.05%)core::sync::atomic::AtomicU8::compare_exchange_weak (26 samples, 0.05%)core::sync::atomic::atomic_compare_exchange_weak (26 samples, 0.05%)tokio::process::imp::GlobalOrphanQueue::reap_orphans (123 samples, 0.25%)tokio::process::imp::orphan::OrphanQueueImpl<T>::reap_orphans (123 samples, 0.25%)tokio::loom::std::parking_lot::Mutex<T>::try_lock (48 samples, 0.10%)lock_api::mutex::Mutex<R,T>::try_lock (48 samples, 0.10%)<parking_lot::raw_mutex::RawMutex as lock_api::mutex::RawMutex>::try_lock (48 samples, 0.10%)core::sync::atomic::AtomicU8::load (20 samples, 0.04%)core::sync::atomic::atomic_load (20 samples, 0.04%)tokio::runtime::driver::Handle::time (12 samples, 0.02%)core::option::Option<T>::as_ref (12 samples, 0.02%)<mio::event::events::Iter as core::iter::traits::iterator::Iterator>::next (23 samples, 0.05%)core::slice::<impl [T]>::get (22 samples, 0.04%)<usize as core::slice::index::SliceIndex<[T]>>::get (22 samples, 0.04%)mio::event::event::Event::token (11 samples, 0.02%)mio::sys::unix::selector::epoll::event::token (11 samples, 0.02%)core::time::Duration::as_millis (5 samples, 0.01%)core::option::Option<T>::map (13 samples, 0.03%)mio::sys::unix::selector::epoll::Selector::select::_{{closure}} (13 samples, 0.03%)core::result::Result<T,E>::map (11 samples, 0.02%)mio::sys::unix::selector::epoll::Selector::select::_{{closure}} (11 samples, 0.02%)alloc::vec::Vec<T,A>::set_len (10 samples, 0.02%)[libc.so.6] (101 samples, 0.20%)mio::poll::Poll::poll (386 samples, 0.77%)mio::sys::unix::selector::epoll::Selector::select (383 samples, 0.77%)epoll_wait (251 samples, 0.50%)[unknown] (27 samples, 0.05%)mio::event::event::Event::is_read_closed (5 samples, 0.01%)mio::sys::unix::selector::epoll::event::is_read_closed (5 samples, 0.01%)tokio::io::ready::Ready::from_mio (16 samples, 0.03%)core::sync::atomic::AtomicUsize::compare_exchange (160 samples, 0.32%)core::sync::atomic::atomic_compare_exchange (160 samples, 0.32%)core::sync::atomic::AtomicUsize::load (120 samples, 0.24%)core::sync::atomic::atomic_load (120 samples, 0.24%)tokio::runtime::io::scheduled_io::ScheduledIo::set_readiness (291 samples, 0.58%)core::mem::drop (139 samples, 0.28%)core::ptr::drop_in_place<tokio::loom::std::parking_lot::MutexGuard<tokio::runtime::io::scheduled_io::Waiters>> (139 samples, 0.28%)core::ptr::drop_in_place<lock_api::mutex::MutexGuard<parking_lot::raw_mutex::RawMutex,tokio::runtime::io::scheduled_io::Waiters>> (139 samples, 0.28%)<lock_api::mutex::MutexGuard<R,T> as core::ops::drop::Drop>::drop (139 samples, 0.28%)<parking_lot::raw_mutex::RawMutex as lock_api::mutex::RawMutex>::unlock (139 samples, 0.28%)core::sync::atomic::AtomicU8::compare_exchange (136 samples, 0.27%)core::sync::atomic::atomic_compare_exchange (136 samples, 0.27%)tokio::loom::std::parking_lot::Mutex<T>::lock (52 samples, 0.10%)lock_api::mutex::Mutex<R,T>::lock (52 samples, 0.10%)<parking_lot::raw_mutex::RawMutex as lock_api::mutex::RawMutex>::lock (52 samples, 0.10%)core::sync::atomic::AtomicU8::compare_exchange_weak (52 samples, 0.10%)core::sync::atomic::atomic_compare_exchange_weak (52 samples, 0.10%)tokio::runtime::scheduler::multi_thread::worker::<impl tokio::runtime::scheduler::multi_thread::handle::Handle>::schedule_task (7 samples, 0.01%)tokio::runtime::scheduler::multi_thread::worker::with_current (7 samples, 0.01%)tokio::runtime::context::with_scheduler (7 samples, 0.01%)tokio::runtime::scheduler::multi_thread::worker::_<impl tokio::runtime::scheduler::multi_thread::handle::Handle>::schedule_task::_{{closure}} (6 samples, 0.01%)tokio::runtime::task::raw::RawTask::schedule (10 samples, 0.02%)tokio::runtime::io::driver::Driver::turn (962 samples, 1.93%)t..tokio::runtime::io::scheduled_io::ScheduledIo::wake (219 samples, 0.44%)tokio::util::wake_list::WakeList::wake_all (14 samples, 0.03%)core::task::wake::Waker::wake (13 samples, 0.03%)tokio::runtime::task::waker::wake_by_val (13 samples, 0.03%)tokio::runtime::task::harness::<impl tokio::runtime::task::raw::RawTask>::wake_by_val (13 samples, 0.03%)tokio::runtime::context::thread_rng_n (10 samples, 0.02%)std::thread::local::LocalKey<T>::with (10 samples, 0.02%)std::thread::local::LocalKey<T>::try_with (10 samples, 0.02%)tokio::runtime::context::thread_rng_n::_{{closure}} (6 samples, 0.01%)core::mem::drop (254 samples, 0.51%)core::ptr::drop_in_place<tokio::loom::std::parking_lot::MutexGuard<tokio::runtime::time::wheel::Wheel>> (254 samples, 0.51%)core::ptr::drop_in_place<lock_api::mutex::MutexGuard<parking_lot::raw_mutex::RawMutex,tokio::runtime::time::wheel::Wheel>> (254 samples, 0.51%)<lock_api::mutex::MutexGuard<R,T> as core::ops::drop::Drop>::drop (254 samples, 0.51%)<parking_lot::raw_mutex::RawMutex as lock_api::mutex::RawMutex>::unlock (254 samples, 0.51%)core::sync::atomic::AtomicU8::compare_exchange (250 samples, 0.50%)core::sync::atomic::atomic_compare_exchange (250 samples, 0.50%)core::slice::<impl [T]>::get_unchecked (19 samples, 0.04%)<usize as core::slice::index::SliceIndex<[T]>>::get_unchecked (19 samples, 0.04%)core::slice::index::get_noubcheck (19 samples, 0.04%)tokio::runtime::time::Inner::lock_sharded_wheel (283 samples, 0.57%)tokio::loom::std::parking_lot::Mutex<T>::lock (230 samples, 0.46%)lock_api::mutex::Mutex<R,T>::lock (230 samples, 0.46%)<parking_lot::raw_mutex::RawMutex as lock_api::mutex::RawMutex>::lock (230 samples, 0.46%)core::sync::atomic::AtomicU8::compare_exchange_weak (226 samples, 0.45%)core::sync::atomic::atomic_compare_exchange_weak (226 samples, 0.45%)<core::iter::adapters::enumerate::Enumerate<I> as core::iter::traits::iterator::Iterator>::next (36 samples, 0.07%)<core::slice::iter::Iter<T> as core::iter::traits::iterator::Iterator>::next (36 samples, 0.07%)<core::ptr::non_null::NonNull<T> as core::cmp::PartialEq>::eq (16 samples, 0.03%)tokio::runtime::time::wheel::level::Level::next_occupied_slot (62 samples, 0.12%)tokio::runtime::time::wheel::level::slot_range (6 samples, 0.01%)core::num::<impl usize>::pow (6 samples, 0.01%)tokio::runtime::time::wheel::level::Level::next_expiration (70 samples, 0.14%)tokio::runtime::time::wheel::Wheel::next_expiration (308 samples, 0.62%)tokio::util::linked_list::LinkedList<L,<L as tokio::util::linked_list::Link>::Target>::is_empty (11 samples, 0.02%)core::option::Option<T>::is_some (11 samples, 0.02%)tokio::runtime::time::wheel::Wheel::poll (328 samples, 0.66%)tokio::util::linked_list::LinkedList<L,<L as tokio::util::linked_list::Link>::Target>::pop_back (14 samples, 0.03%)<core::option::Option<T> as core::ops::try_trait::Try>::branch (7 samples, 0.01%)core::option::Option<T>::map (13 samples, 0.03%)<core::iter::adapters::enumerate::Enumerate<I> as core::iter::traits::iterator::Iterator>::next (31 samples, 0.06%)<core::slice::iter::Iter<T> as core::iter::traits::iterator::Iterator>::next (31 samples, 0.06%)<core::ptr::non_null::NonNull<T> as core::cmp::PartialEq>::eq (13 samples, 0.03%)tokio::runtime::time::wheel::level::Level::next_occupied_slot (71 samples, 0.14%)tokio::runtime::time::wheel::level::Level::next_expiration (89 samples, 0.18%)tokio::runtime::time::wheel::level::slot_range (9 samples, 0.02%)core::num::<impl usize>::pow (9 samples, 0.02%)tokio::runtime::time::wheel::Wheel::poll_at (222 samples, 0.45%)tokio::runtime::time::wheel::Wheel::next_expiration (209 samples, 0.42%)tokio::util::linked_list::LinkedList<L,<L as tokio::util::linked_list::Link>::Target>::is_empty (7 samples, 0.01%)core::iter::adapters::filter_map::filter_map_fold::_{{closure}} (1,201 samples, 2.41%)co..tokio::runtime::time::_<impl tokio::runtime::time::handle::Handle>::process_at_time::_{{closure}} (1,169 samples, 2.34%)t..tokio::runtime::time::<impl tokio::runtime::time::handle::Handle>::process_at_sharded_time (1,160 samples, 2.33%)t..tokio::util::wake_list::WakeList::wake_all (18 samples, 0.04%)<u32 as core::iter::range::Step>::forward_unchecked (5 samples, 0.01%)core::num::<impl u32>::unchecked_add (5 samples, 0.01%)<core::iter::adapters::filter_map::FilterMap<I,F> as core::iter::traits::iterator::Iterator>::fold (1,215 samples, 2.44%)<c..core::iter::traits::iterator::Iterator::fold (1,215 samples, 2.44%)co..core::iter::range::<impl core::iter::traits::iterator::Iterator for core::ops::range::Range<A>>::next (14 samples, 0.03%)<core::ops::range::Range<T> as core::iter::range::RangeIteratorImpl>::spec_next (14 samples, 0.03%)core::iter::range::<impl core::iter::traits::iterator::Iterator for core::ops::range::Range<A>>::next (8 samples, 0.02%)<core::ops::range::Range<T> as core::iter::range::RangeIteratorImpl>::spec_next (8 samples, 0.02%)core::mem::drop (128 samples, 0.26%)core::ptr::drop_in_place<tokio::loom::std::parking_lot::MutexGuard<tokio::runtime::time::wheel::Wheel>> (128 samples, 0.26%)core::ptr::drop_in_place<lock_api::mutex::MutexGuard<parking_lot::raw_mutex::RawMutex,tokio::runtime::time::wheel::Wheel>> (128 samples, 0.26%)<lock_api::mutex::MutexGuard<R,T> as core::ops::drop::Drop>::drop (128 samples, 0.26%)<parking_lot::raw_mutex::RawMutex as lock_api::mutex::RawMutex>::unlock (128 samples, 0.26%)core::sync::atomic::AtomicU8::compare_exchange (125 samples, 0.25%)core::sync::atomic::atomic_compare_exchange (125 samples, 0.25%)core::slice::<impl [T]>::get_unchecked (6 samples, 0.01%)<usize as core::slice::index::SliceIndex<[T]>>::get_unchecked (6 samples, 0.01%)core::slice::index::get_noubcheck (6 samples, 0.01%)tokio::runtime::time::Inner::lock_sharded_wheel (203 samples, 0.41%)tokio::loom::std::parking_lot::Mutex<T>::lock (175 samples, 0.35%)lock_api::mutex::Mutex<R,T>::lock (175 samples, 0.35%)<parking_lot::raw_mutex::RawMutex as lock_api::mutex::RawMutex>::lock (175 samples, 0.35%)core::sync::atomic::AtomicU8::compare_exchange_weak (175 samples, 0.35%)core::sync::atomic::atomic_compare_exchange_weak (175 samples, 0.35%)tokio::runtime::time::wheel::Wheel::elapsed (6 samples, 0.01%)<core::iter::adapters::enumerate::Enumerate<I> as core::iter::traits::iterator::Iterator>::next (19 samples, 0.04%)<core::slice::iter::Iter<T> as core::iter::traits::iterator::Iterator>::next (19 samples, 0.04%)<core::ptr::non_null::NonNull<T> as core::cmp::PartialEq>::eq (16 samples, 0.03%)tokio::runtime::time::wheel::level::Level::next_occupied_slot (41 samples, 0.08%)tokio::runtime::time::wheel::level::slot_range (6 samples, 0.01%)core::num::<impl usize>::pow (6 samples, 0.01%)tokio::runtime::time::wheel::Wheel::next_expiration (194 samples, 0.39%)tokio::runtime::time::wheel::level::Level::next_expiration (50 samples, 0.10%)tokio::runtime::time::wheel::level::slot_range (6 samples, 0.01%)core::num::<impl usize>::pow (6 samples, 0.01%)tokio::runtime::time::wheel::Wheel::set_elapsed (10 samples, 0.02%)tokio::runtime::time::wheel::Wheel::poll (223 samples, 0.45%)tokio::util::linked_list::LinkedList<L,<L as tokio::util::linked_list::Link>::Target>::pop_back (11 samples, 0.02%)<core::option::Option<T> as core::ops::try_trait::Try>::branch (6 samples, 0.01%)<core::iter::adapters::enumerate::Enumerate<I> as core::iter::traits::iterator::Iterator>::next (25 samples, 0.05%)<core::slice::iter::Iter<T> as core::iter::traits::iterator::Iterator>::next (25 samples, 0.05%)<core::ptr::non_null::NonNull<T> as core::cmp::PartialEq>::eq (18 samples, 0.04%)tokio::runtime::time::wheel::level::Level::next_occupied_slot (44 samples, 0.09%)tokio::runtime::time::wheel::level::slot_range (8 samples, 0.02%)core::num::<impl usize>::pow (8 samples, 0.02%)tokio::runtime::time::wheel::level::Level::next_expiration (53 samples, 0.11%)core::option::Option<T>::is_none (6 samples, 0.01%)core::option::Option<T>::is_some (6 samples, 0.01%)tokio::runtime::time::wheel::Wheel::poll_at (141 samples, 0.28%)tokio::runtime::time::wheel::Wheel::next_expiration (137 samples, 0.27%)tokio::util::linked_list::LinkedList<L,<L as tokio::util::linked_list::Link>::Target>::is_empty (7 samples, 0.01%)core::iter::traits::iterator::Iterator::min (1,988 samples, 3.99%)core..core::iter::traits::iterator::Iterator::min_by (1,988 samples, 3.99%)core..core::iter::traits::iterator::Iterator::reduce (1,988 samples, 3.99%)core..<core::iter::adapters::filter_map::FilterMap<I,F> as core::iter::traits::iterator::Iterator>::next (773 samples, 1.55%)core::iter::traits::iterator::Iterator::find_map (773 samples, 1.55%)core::iter::traits::iterator::Iterator::try_fold (773 samples, 1.55%)core::iter::traits::iterator::Iterator::find_map::check::_{{closure}} (751 samples, 1.51%)core::ops::function::impls::<impl core::ops::function::FnMut<A> for &mut F>::call_mut (751 samples, 1.51%)tokio::runtime::time::_<impl tokio::runtime::time::handle::Handle>::process_at_time::_{{closure}} (745 samples, 1.49%)tokio::runtime::time::<impl tokio::runtime::time::handle::Handle>::process_at_sharded_time (738 samples, 1.48%)tokio::util::wake_list::WakeList::wake_all (6 samples, 0.01%)tokio::runtime::time::<impl tokio::runtime::time::handle::Handle>::process_at_time (1,994 samples, 4.00%)toki..core::result::Result<T,E>::unwrap_or (6 samples, 0.01%)core::time::Duration::as_millis (8 samples, 0.02%)tokio::runtime::time::source::TimeSource::instant_to_tick (23 samples, 0.05%)tokio::time::instant::Instant::saturating_duration_since (8 samples, 0.02%)std::time::Instant::duration_since (8 samples, 0.02%)std::time::Instant::checked_duration_since (7 samples, 0.01%)std::sys::pal::unix::time::Instant::checked_sub_instant (7 samples, 0.01%)std::sys::pal::unix::time::Timespec::sub_timespec (7 samples, 0.01%)clock_gettime (264 samples, 0.53%)__vdso_clock_gettime (140 samples, 0.28%)tokio::runtime::time::<impl tokio::runtime::time::handle::Handle>::process (2,315 samples, 4.64%)tokio..tokio::runtime::time::source::TimeSource::now (297 samples, 0.60%)tokio::time::clock::Clock::now (274 samples, 0.55%)tokio::time::clock::now (274 samples, 0.55%)std::sys::pal::unix::time::Timespec::now (274 samples, 0.55%)tokio::runtime::time::Driver::park_thread_timeout (7 samples, 0.01%)tokio::runtime::driver::IoStack::park_timeout (7 samples, 0.01%)tokio::runtime::process::Driver::park_timeout (5 samples, 0.01%)tokio::runtime::signal::Driver::park_timeout (5 samples, 0.01%)tokio::runtime::io::driver::Driver::park_timeout (5 samples, 0.01%)core::time::Duration::as_millis (8 samples, 0.02%)tokio::runtime::time::source::TimeSource::instant_to_tick (21 samples, 0.04%)tokio::time::instant::Instant::saturating_duration_since (11 samples, 0.02%)std::time::Instant::duration_since (11 samples, 0.02%)std::time::Instant::checked_duration_since (10 samples, 0.02%)std::sys::pal::unix::time::Instant::checked_sub_instant (10 samples, 0.02%)std::sys::pal::unix::time::Timespec::sub_timespec (9 samples, 0.02%)clock_gettime (86 samples, 0.17%)__vdso_clock_gettime (80 samples, 0.16%)tokio::runtime::time::source::TimeSource::now (117 samples, 0.23%)tokio::time::clock::Clock::now (96 samples, 0.19%)tokio::time::clock::now (96 samples, 0.19%)std::sys::pal::unix::time::Timespec::now (95 samples, 0.19%)tokio::runtime::scheduler::multi_thread::park::Inner::park_driver (5,368 samples, 10.76%)tokio::runtime::..tokio::runtime::time::Driver::park_internal (5,193 samples, 10.41%)tokio::runtime:..tokio::runtime::time::source::TimeSource::tick_to_duration (11 samples, 0.02%)core::time::Duration::from_millis (11 samples, 0.02%)tokio::runtime::scheduler::multi_thread::park::Parker::park (5,700 samples, 11.43%)tokio::runtime::s..tokio::runtime::scheduler::multi_thread::park::Inner::park (5,700 samples, 11.43%)tokio::runtime::s..tokio::util::try_lock::TryLock<T>::try_lock (33 samples, 0.07%)core::sync::atomic::AtomicBool::compare_exchange (33 samples, 0.07%)core::sync::atomic::atomic_compare_exchange (33 samples, 0.07%)tokio::runtime::scheduler::multi_thread::worker::Context::park_timeout (5,830 samples, 11.69%)tokio::runtime::s..tokio::runtime::scheduler::multi_thread::worker::Core::should_notify_others (34 samples, 0.07%)tokio::runtime::scheduler::multi_thread::queue::Local<T>::len (19 samples, 0.04%)tokio::runtime::scheduler::multi_thread::queue::Inner<T>::len (17 samples, 0.03%)core::sync::atomic::AtomicU64::load (13 samples, 0.03%)core::sync::atomic::atomic_load (13 samples, 0.03%)core::ptr::drop_in_place<tokio::loom::std::parking_lot::MutexGuard<tokio::runtime::scheduler::multi_thread::worker::Synced>> (46 samples, 0.09%)core::ptr::drop_in_place<lock_api::mutex::MutexGuard<parking_lot::raw_mutex::RawMutex,tokio::runtime::scheduler::multi_thread::worker::Synced>> (46 samples, 0.09%)<lock_api::mutex::MutexGuard<R,T> as core::ops::drop::Drop>::drop (46 samples, 0.09%)<parking_lot::raw_mutex::RawMutex as lock_api::mutex::RawMutex>::unlock (46 samples, 0.09%)core::sync::atomic::AtomicU8::compare_exchange (46 samples, 0.09%)core::sync::atomic::atomic_compare_exchange (46 samples, 0.09%)tokio::loom::std::parking_lot::Mutex<T>::lock (38 samples, 0.08%)lock_api::mutex::Mutex<R,T>::lock (38 samples, 0.08%)<parking_lot::raw_mutex::RawMutex as lock_api::mutex::RawMutex>::lock (38 samples, 0.08%)core::sync::atomic::AtomicU8::compare_exchange_weak (38 samples, 0.08%)core::sync::atomic::atomic_compare_exchange_weak (38 samples, 0.08%)tokio::runtime::scheduler::multi_thread::worker::Core::maintenance (187 samples, 0.37%)tokio::runtime::scheduler::inject::shared::Shared<T>::is_closed (11 samples, 0.02%)core::ptr::drop_in_place<tokio::loom::std::parking_lot::MutexGuard<tokio::runtime::scheduler::multi_thread::worker::Synced>> (26 samples, 0.05%)core::ptr::drop_in_place<lock_api::mutex::MutexGuard<parking_lot::raw_mutex::RawMutex,tokio::runtime::scheduler::multi_thread::worker::Synced>> (26 samples, 0.05%)<lock_api::mutex::MutexGuard<R,T> as core::ops::drop::Drop>::drop (26 samples, 0.05%)<parking_lot::raw_mutex::RawMutex as lock_api::mutex::RawMutex>::unlock (26 samples, 0.05%)core::sync::atomic::AtomicU8::compare_exchange (25 samples, 0.05%)core::sync::atomic::atomic_compare_exchange (25 samples, 0.05%)<T as core::slice::cmp::SliceContains>::slice_contains::_{{closure}} (26 samples, 0.05%)core::cmp::impls::<impl core::cmp::PartialEq for usize>::eq (26 samples, 0.05%)core::slice::<impl [T]>::contains (46 samples, 0.09%)<T as core::slice::cmp::SliceContains>::slice_contains (46 samples, 0.09%)<core::slice::iter::Iter<T> as core::iter::traits::iterator::Iterator>::any (46 samples, 0.09%)<core::slice::iter::Iter<T> as core::iter::traits::iterator::Iterator>::next (10 samples, 0.02%)<core::ptr::non_null::NonNull<T> as core::cmp::PartialEq>::eq (5 samples, 0.01%)tokio::runtime::scheduler::multi_thread::idle::Idle::is_parked (116 samples, 0.23%)tokio::loom::std::parking_lot::Mutex<T>::lock (44 samples, 0.09%)lock_api::mutex::Mutex<R,T>::lock (44 samples, 0.09%)<parking_lot::raw_mutex::RawMutex as lock_api::mutex::RawMutex>::lock (44 samples, 0.09%)core::sync::atomic::AtomicU8::compare_exchange_weak (42 samples, 0.08%)core::sync::atomic::atomic_compare_exchange_weak (42 samples, 0.08%)tokio::runtime::scheduler::multi_thread::worker::Core::transition_from_parked (128 samples, 0.26%)alloc::vec::Vec<T,A>::push (6 samples, 0.01%)core::ptr::drop_in_place<tokio::loom::std::parking_lot::MutexGuard<tokio::runtime::scheduler::multi_thread::worker::Synced>> (35 samples, 0.07%)core::ptr::drop_in_place<lock_api::mutex::MutexGuard<parking_lot::raw_mutex::RawMutex,tokio::runtime::scheduler::multi_thread::worker::Synced>> (35 samples, 0.07%)<lock_api::mutex::MutexGuard<R,T> as core::ops::drop::Drop>::drop (35 samples, 0.07%)<parking_lot::raw_mutex::RawMutex as lock_api::mutex::RawMutex>::unlock (35 samples, 0.07%)core::sync::atomic::AtomicU8::compare_exchange (35 samples, 0.07%)core::sync::atomic::atomic_compare_exchange (35 samples, 0.07%)tokio::loom::std::parking_lot::Mutex<T>::lock (5 samples, 0.01%)lock_api::mutex::Mutex<R,T>::lock (5 samples, 0.01%)<parking_lot::raw_mutex::RawMutex as lock_api::mutex::RawMutex>::lock (5 samples, 0.01%)tokio::runtime::scheduler::multi_thread::idle::Idle::transition_worker_to_parked (49 samples, 0.10%)<core::slice::iter::Iter<T> as core::iter::traits::iterator::Iterator>::next (6 samples, 0.01%)tokio::runtime::scheduler::multi_thread::worker::<impl tokio::runtime::scheduler::multi_thread::handle::Handle>::notify_if_work_pending (17 samples, 0.03%)tokio::runtime::scheduler::multi_thread::worker::Context::park (6,312 samples, 12.66%)tokio::runtime::sch..tokio::runtime::scheduler::multi_thread::worker::Core::transition_to_parked (68 samples, 0.14%)core::ops::function::FnOnce::call_once (10 samples, 0.02%)tokio::runtime::context::CONTEXT::_{{constant}}::_{{closure}} (10 samples, 0.02%)std::sys::thread_local::native::eager::Storage<T>::get (10 samples, 0.02%)core::cell::Cell<T>::get (9 samples, 0.02%)tokio::runtime::context::budget (13 samples, 0.03%)std::thread::local::LocalKey<T>::try_with (13 samples, 0.03%)core::cell::RefCell<T>::borrow_mut (11 samples, 0.02%)core::cell::RefCell<T>::try_borrow_mut (11 samples, 0.02%)core::cell::BorrowRefMut::new (11 samples, 0.02%)core::option::Option<T>::take (13 samples, 0.03%)core::mem::replace (13 samples, 0.03%)core::ptr::read (13 samples, 0.03%)tokio::runtime::scheduler::multi_thread::worker::Context::reset_lifo_enabled (8 samples, 0.02%)<alloc::sync::Arc<T,A> as core::ops::deref::Deref>::deref (5 samples, 0.01%)alloc::sync::Arc<T,A>::inner (5 samples, 0.01%)core::ptr::non_null::NonNull<T>::as_ref (5 samples, 0.01%)std::thread::local::LocalKey<T>::try_with (5 samples, 0.01%)tokio::runtime::context::with_scheduler::_{{closure}} (5 samples, 0.01%)<alloc::sync::Arc<T,A> as core::ops::deref::Deref>::deref (13 samples, 0.03%)alloc::sync::Arc<T,A>::inner (13 samples, 0.03%)core::ptr::non_null::NonNull<T>::as_ref (13 samples, 0.03%)core::sync::atomic::AtomicUsize::load (10 samples, 0.02%)core::sync::atomic::atomic_load (10 samples, 0.02%)parking_lot_core::parking_lot::FairTimeout::should_timeout (27 samples, 0.05%)std::sys::pal::unix::time::Timespec::now (26 samples, 0.05%)clock_gettime (26 samples, 0.05%)__vdso_clock_gettime (12 samples, 0.02%)parking_lot_core::parking_lot::lock_bucket_pair (13 samples, 0.03%)parking_lot_core::word_lock::WordLock::lock (8 samples, 0.02%)core::sync::atomic::AtomicUsize::compare_exchange_weak (8 samples, 0.02%)core::sync::atomic::atomic_compare_exchange_weak (8 samples, 0.02%)parking_lot::condvar::Condvar::notify_one_slow (55 samples, 0.11%)parking_lot_core::parking_lot::unpark_requeue (55 samples, 0.11%)syscall (7 samples, 0.01%)core::sync::atomic::AtomicUsize::swap (10 samples, 0.02%)core::sync::atomic::atomic_swap (10 samples, 0.02%)tokio::runtime::scheduler::multi_thread::park::Unparker::unpark (19 samples, 0.04%)tokio::runtime::scheduler::multi_thread::park::Inner::unpark (19 samples, 0.04%)tokio::runtime::scheduler::multi_thread::queue::Local<T>::push_back_or_overflow (9 samples, 0.02%)alloc::vec::Vec<T,A>::pop (5 samples, 0.01%)core::ptr::read (5 samples, 0.01%)tokio::runtime::scheduler::multi_thread::idle::Idle::notify_should_wakeup (11 samples, 0.02%)core::sync::atomic::AtomicUsize::fetch_add (11 samples, 0.02%)core::sync::atomic::atomic_add (11 samples, 0.02%)tokio::runtime::scheduler::multi_thread::worker::<impl tokio::runtime::task::Schedule for alloc::sync::Arc<tokio::runtime::scheduler::multi_thread::handle::Handle>>::yield_now (144 samples, 0.29%)tokio::runtime::scheduler::multi_thread::worker::<impl tokio::runtime::scheduler::multi_thread::handle::Handle>::schedule_task (144 samples, 0.29%)tokio::runtime::scheduler::multi_thread::worker::with_current (144 samples, 0.29%)tokio::runtime::context::with_scheduler (144 samples, 0.29%)tokio::runtime::scheduler::multi_thread::worker::_<impl tokio::runtime::scheduler::multi_thread::handle::Handle>::schedule_task::_{{closure}} (139 samples, 0.28%)tokio::runtime::scheduler::multi_thread::worker::<impl tokio::runtime::scheduler::multi_thread::handle::Handle>::schedule_local (119 samples, 0.24%)tokio::runtime::scheduler::multi_thread::worker::<impl tokio::runtime::scheduler::multi_thread::handle::Handle>::notify_parked_local (26 samples, 0.05%)tokio::runtime::scheduler::multi_thread::idle::Idle::worker_to_notify (20 samples, 0.04%)core::ops::function::FnOnce::call_once (21 samples, 0.04%)tokio::runtime::context::CONTEXT::_{{constant}}::_{{closure}} (21 samples, 0.04%)std::sys::thread_local::native::eager::Storage<T>::get (21 samples, 0.04%)core::cell::Cell<T>::get (19 samples, 0.04%)core::ptr::drop_in_place<tokio::runtime::task::core::TaskIdGuard> (26 samples, 0.05%)<tokio::runtime::task::core::TaskIdGuard as core::ops::drop::Drop>::drop (26 samples, 0.05%)tokio::runtime::context::set_current_task_id (26 samples, 0.05%)std::thread::local::LocalKey<T>::try_with (26 samples, 0.05%)<atomic_counter::RelaxedCounter as atomic_counter::AtomicCounter>::inc (94 samples, 0.19%)<atomic_counter::RelaxedCounter as atomic_counter::AtomicCounter>::add (94 samples, 0.19%)core::sync::atomic::AtomicUsize::fetch_add (94 samples, 0.19%)core::sync::atomic::atomic_add (94 samples, 0.19%)<alloc::boxed::Box<T,A> as core::ops::drop::Drop>::drop (19 samples, 0.04%)<alloc::alloc::Global as core::alloc::Allocator>::deallocate (19 samples, 0.04%)alloc::alloc::dealloc (19 samples, 0.04%)__rdl_dealloc (19 samples, 0.04%)std::sys::pal::unix::alloc::<impl core::alloc::global::GlobalAlloc for std::alloc::System>::dealloc (19 samples, 0.04%)[libc.so.6] (2,100 samples, 4.21%)[libc..[libc.so.6] (114 samples, 0.23%)[libc.so.6] (2,558 samples, 5.13%)[libc...__madvise (7 samples, 0.01%)[libc.so.6] (3,183 samples, 6.38%)[libc.so..__lll_lock_wait_private (152 samples, 0.30%)[unknown] (13 samples, 0.03%)<alloc::alloc::Global as core::alloc::Allocator>::deallocate (3,408 samples, 6.83%)<alloc::a..alloc::alloc::dealloc (3,408 samples, 6.83%)alloc::al..__rdl_dealloc (3,408 samples, 6.83%)__rdl_dea..std::sys::pal::unix::alloc::<impl core::alloc::global::GlobalAlloc for std::alloc::System>::dealloc (3,408 samples, 6.83%)std::sys:..cfree (3,407 samples, 6.83%)cfree__lll_lock_wake_private (49 samples, 0.10%)[unknown] (22 samples, 0.04%)core::mem::drop (3,442 samples, 6.90%)core::mem..core::ptr::drop_in_place<alloc::boxed::Box<bytes::bytes_mut::Shared>> (3,442 samples, 6.90%)core::ptr..core::ptr::drop_in_place<bytes::bytes_mut::Shared> (3,421 samples, 6.86%)core::ptr..core::ptr::drop_in_place<alloc::vec::Vec<u8>> (3,421 samples, 6.86%)core::ptr..core::ptr::drop_in_place<alloc::raw_vec::RawVec<u8>> (3,421 samples, 6.86%)core::ptr..<alloc::raw_vec::RawVec<T,A> as core::ops::drop::Drop>::drop (3,421 samples, 6.86%)<alloc::r..alloc::raw_vec::RawVec<T,A>::current_memory (13 samples, 0.03%)core::sync::atomic::AtomicUsize::fetch_sub (295 samples, 0.59%)core::sync::atomic::atomic_sub (295 samples, 0.59%)bytes::bytes_mut::shared_v_drop (3,763 samples, 7.55%)bytes::byt..<core::sync::atomic::AtomicPtr<T> as bytes::loom::sync::atomic::AtomicMut<T>>::with_mut (3,763 samples, 7.55%)<core::syn..bytes::bytes_mut::shared_v_drop::_{{closure}} (3,763 samples, 7.55%)bytes::byt..bytes::bytes_mut::release_shared (3,763 samples, 7.55%)bytes::byt..core::sync::atomic::AtomicUsize::load (17 samples, 0.03%)core::sync::atomic::atomic_load (17 samples, 0.03%)core::ptr::drop_in_place<core::option::Option<bytes::bytes::Bytes>> (4,332 samples, 8.69%)core::ptr::d..core::ptr::drop_in_place<bytes::bytes::Bytes> (4,331 samples, 8.68%)core::ptr::d..<bytes::bytes::Bytes as core::ops::drop::Drop>::drop (4,331 samples, 8.68%)<bytes::byte..cfree (548 samples, 1.10%)[libc.so.6] (379 samples, 0.76%)<flume::async::RecvFut<T> as futures_core::future::FusedFuture>::is_terminated (20 samples, 0.04%)flume::Shared<T>::is_disconnected (12 samples, 0.02%)core::sync::atomic::AtomicBool::load (12 samples, 0.02%)core::sync::atomic::atomic_load (12 samples, 0.02%)<core::pin::Pin<P> as futures_core::future::FusedFuture>::is_terminated (21 samples, 0.04%)core::task::poll::Poll<T>::map (82 samples, 0.16%)core::task::poll::Poll<T>::map (13 samples, 0.03%)flume::async::RecvFut<T>::poll_inner::_{{closure}} (13 samples, 0.03%)core::result::Result<T,E>::map_err (13 samples, 0.03%)<std::sync::mutex::MutexGuard<T> as core::ops::deref::DerefMut>::deref_mut (5 samples, 0.01%)core::cell::UnsafeCell<T>::get (5 samples, 0.01%)alloc::collections::vec_deque::VecDeque<T,A>::buffer_read (23 samples, 0.05%)core::ptr::read (21 samples, 0.04%)alloc::collections::vec_deque::wrap_index (10 samples, 0.02%)alloc::collections::vec_deque::VecDeque<T,A>::pop_front (53 samples, 0.11%)alloc::collections::vec_deque::VecDeque<T,A>::to_physical_idx (14 samples, 0.03%)alloc::collections::vec_deque::VecDeque<T,A>::wrap_add (14 samples, 0.03%)std::sync::poison::Flag::done (14 samples, 0.03%)std::thread::panicking (10 samples, 0.02%)std::panicking::panicking (10 samples, 0.02%)std::panicking::panic_count::count_is_zero (10 samples, 0.02%)core::mem::drop (160 samples, 0.32%)core::ptr::drop_in_place<std::sync::mutex::MutexGuard<flume::Chan<bytes::bytes::Bytes>>> (160 samples, 0.32%)<std::sync::mutex::MutexGuard<T> as core::ops::drop::Drop>::drop (160 samples, 0.32%)std::sys::sync::mutex::futex::Mutex::unlock (142 samples, 0.28%)core::sync::atomic::AtomicU32::swap (139 samples, 0.28%)core::sync::atomic::atomic_swap (139 samples, 0.28%)flume::Chan<T>::pull_pending (19 samples, 0.04%)flume::Hook<T,S>::trigger (10 samples, 0.02%)alloc::sync::Arc<T>::new (10 samples, 0.02%)alloc::boxed::Box<T>::new (10 samples, 0.02%)alloc::alloc::exchange_malloc (8 samples, 0.02%)<alloc::alloc::Global as core::alloc::Allocator>::allocate (8 samples, 0.02%)alloc::alloc::Global::alloc_impl (8 samples, 0.02%)alloc::alloc::alloc (8 samples, 0.02%)__rdl_alloc (8 samples, 0.02%)std::sys::pal::unix::alloc::<impl core::alloc::global::GlobalAlloc for std::alloc::System>::alloc (8 samples, 0.02%)malloc (8 samples, 0.02%)flume::async::RecvFut<T>::poll_inner::_{{closure}} (15 samples, 0.03%)std::sync::mutex::MutexGuard<T>::new (8 samples, 0.02%)std::sync::poison::Flag::guard (8 samples, 0.02%)core::sync::atomic::AtomicU32::compare_exchange (188 samples, 0.38%)core::sync::atomic::atomic_compare_exchange (188 samples, 0.38%)flume::Shared<T>::recv (479 samples, 0.96%)flume::wait_lock (205 samples, 0.41%)std::sync::mutex::Mutex<T>::lock (204 samples, 0.41%)std::sys::sync::mutex::futex::Mutex::lock (196 samples, 0.39%)std::sys::sync::mutex::futex::Mutex::lock_contended (7 samples, 0.01%)std::sys::sync::mutex::futex::Mutex::spin (6 samples, 0.01%)core::sync::atomic::AtomicU32::load (5 samples, 0.01%)core::sync::atomic::atomic_load (5 samples, 0.01%)alloc::collections::vec_deque::VecDeque<T,A>::buffer_read (20 samples, 0.04%)core::ptr::read (20 samples, 0.04%)alloc::collections::vec_deque::VecDeque<T,A>::pop_front (22 samples, 0.04%)<flume::async::RecvFut<T> as core::future::future::Future>::poll (541 samples, 1.08%)flume::async::RecvFut<T>::poll_inner (541 samples, 1.08%)flume::Shared<T>::recv_sync (34 samples, 0.07%)flume::Shared<T>::recv (34 samples, 0.07%)flume::wait_lock (6 samples, 0.01%)std::sync::mutex::Mutex<T>::lock (6 samples, 0.01%)std::sys::sync::mutex::futex::Mutex::lock (5 samples, 0.01%)core::sync::atomic::AtomicU32::compare_exchange (5 samples, 0.01%)core::sync::atomic::atomic_compare_exchange (5 samples, 0.01%)core::cell::Cell<T>::replace (5 samples, 0.01%)core::mem::replace (5 samples, 0.01%)core::ptr::read (5 samples, 0.01%)core::cell::Cell<T>::replace (7 samples, 0.01%)core::mem::replace (7 samples, 0.01%)core::ptr::write (7 samples, 0.01%)core::cell::Cell<T>::set (8 samples, 0.02%)<event_listener::sys::ListLock<T> as core::ops::drop::Drop>::drop (8 samples, 0.02%)core::ptr::drop_in_place<event_listener::sys::ListLock<()>> (91 samples, 0.18%)core::ptr::drop_in_place<std::sync::mutex::MutexGuard<event_listener::sys::Inner<()>>> (83 samples, 0.17%)<std::sync::mutex::MutexGuard<T> as core::ops::drop::Drop>::drop (83 samples, 0.17%)std::sys::sync::mutex::futex::Mutex::unlock (82 samples, 0.16%)core::sync::atomic::AtomicU32::swap (81 samples, 0.16%)core::sync::atomic::atomic_swap (81 samples, 0.16%)event_listener::TaskRef::into_task (81 samples, 0.16%)<core::task::wake::Waker as core::clone::Clone>::clone (81 samples, 0.16%)tokio::runtime::task::waker::clone_waker (76 samples, 0.15%)tokio::runtime::task::state::State::ref_inc (62 samples, 0.12%)core::sync::atomic::AtomicUsize::fetch_add (61 samples, 0.12%)core::sync::atomic::atomic_add (61 samples, 0.12%)std::sync::mutex::MutexGuard<T>::new (10 samples, 0.02%)std::sync::poison::Flag::guard (10 samples, 0.02%)std::thread::panicking (7 samples, 0.01%)std::panicking::panicking (7 samples, 0.01%)std::panicking::panic_count::count_is_zero (7 samples, 0.01%)<event_listener::EventListener<T> as core::future::future::Future>::poll (302 samples, 0.61%)event_listener::InnerListener<T,B>::poll_internal (300 samples, 0.60%)event_listener::sys::<impl event_listener::Inner<T>>::register (289 samples, 0.58%)event_listener::sys::<impl event_listener::Inner<T>>::lock (90 samples, 0.18%)std::sync::mutex::Mutex<T>::lock (90 samples, 0.18%)std::sys::sync::mutex::futex::Mutex::lock (80 samples, 0.16%)core::sync::atomic::AtomicU32::compare_exchange (79 samples, 0.16%)core::sync::atomic::atomic_compare_exchange (79 samples, 0.16%)core::ops::function::impls::<impl core::ops::function::FnMut<A> for &mut F>::call_mut (1,027 samples, 2.06%)c..wisp_mux::stream::MuxStreamRead::read::_{{closure}}::_{{closure}}::_{{closure}} (1,023 samples, 2.05%)w..futures_util::future::future::FutureExt::poll_unpin (844 samples, 1.69%)<core::pin::Pin<P> as core::future::future::Future>::poll (844 samples, 1.69%)<futures_util::future::future::fuse::Fuse<Fut> as core::future::future::Future>::poll (303 samples, 0.61%)core::slice::<impl [T]>::swap (130 samples, 0.26%)core::ptr::swap (128 samples, 0.26%)core::intrinsics::copy_nonoverlapping (127 samples, 0.25%)<core::num::wrapping::Wrapping<u64> as core::ops::bit::BitXorAssign>::bitxor_assign (5 samples, 0.01%)<core::num::wrapping::Wrapping<u64> as core::ops::bit::BitXor>::bitxor (5 samples, 0.01%)<core::num::wrapping::Wrapping<u64> as core::ops::bit::Shr<usize>>::shr (6 samples, 0.01%)core::num::<impl u64>::wrapping_shr (6 samples, 0.01%)core::num::<impl u64>::unchecked_shr (6 samples, 0.01%)<futures_util::future::poll_fn::PollFn<F> as core::future::future::Future>::poll (1,276 samples, 2.56%)<f..wisp_mux::stream::MuxStreamRead::read::_{{closure}}::_{{closure}} (1,276 samples, 2.56%)wi..futures_util::async_await::random::shuffle (152 samples, 0.30%)futures_util::async_await::random::gen_index (22 samples, 0.04%)futures_util::async_await::random::random (21 samples, 0.04%)std::thread::local::LocalKey<T>::with (21 samples, 0.04%)std::thread::local::LocalKey<T>::try_with (21 samples, 0.04%)futures_util::async_await::random::random::_{{closure}} (19 samples, 0.04%)<dyn core::any::Any>::downcast_ref (22 samples, 0.04%)<dyn core::any::Any>::is (22 samples, 0.04%)<T as core::any::Any>::type_id (22 samples, 0.04%)<flume::async::AsyncSignal as flume::signal::Signal>::as_any (9 samples, 0.02%)alloc::sync::Arc<T,A>::drop_slow (11 samples, 0.02%)core::ptr::drop_in_place<flume::Hook<bytes::bytes::Bytes,dyn flume::signal::Signal>> (7 samples, 0.01%)cfree (14 samples, 0.03%)core::ptr::drop_in_place<alloc::sync::Arc<flume::Hook<bytes::bytes::Bytes,dyn flume::signal::Signal>>> (31 samples, 0.06%)<alloc::sync::Arc<T,A> as core::ops::drop::Drop>::drop (31 samples, 0.06%)core::sync::atomic::AtomicUsize::fetch_sub (6 samples, 0.01%)core::sync::atomic::atomic_sub (6 samples, 0.01%)core::sync::atomic::AtomicBool::load (14 samples, 0.03%)core::sync::atomic::atomic_load (14 samples, 0.03%)<flume::async::RecvFut<T> as core::ops::drop::Drop>::drop (94 samples, 0.19%)flume::async::RecvFut<T>::reset_hook (94 samples, 0.19%)core::ptr::drop_in_place<core::option::Option<alloc::sync::Arc<flume::Hook<bytes::bytes::Bytes,flume::async::AsyncSignal>>>> (10 samples, 0.02%)core::ptr::drop_in_place<flume::async::RecvFut<bytes::bytes::Bytes>> (109 samples, 0.22%)cfree (193 samples, 0.39%)[libc.so.6] (90 samples, 0.18%)<alloc::boxed::Box<T,A> as core::ops::drop::Drop>::drop (5 samples, 0.01%)<alloc::alloc::Global as core::alloc::Allocator>::deallocate (5 samples, 0.01%)alloc::alloc::dealloc (5 samples, 0.01%)__rdl_dealloc (5 samples, 0.01%)std::sys::pal::unix::alloc::<impl core::alloc::global::GlobalAlloc for std::alloc::System>::dealloc (5 samples, 0.01%)core::ptr::drop_in_place<alloc::sync::Arc<event_listener::Inner<()>>> (113 samples, 0.23%)<alloc::sync::Arc<T,A> as core::ops::drop::Drop>::drop (113 samples, 0.23%)core::sync::atomic::AtomicUsize::fetch_sub (108 samples, 0.22%)core::sync::atomic::atomic_sub (108 samples, 0.22%)core::ptr::drop_in_place<core::option::Option<event_listener::sys::Listener<()>>> (9 samples, 0.02%)core::ptr::drop_in_place<core::option::Option<event_listener::State<()>>> (100 samples, 0.20%)core::ptr::drop_in_place<event_listener::State<()>> (94 samples, 0.19%)core::ptr::drop_in_place<event_listener::Task> (91 samples, 0.18%)core::ptr::drop_in_place<core::task::wake::Waker> (86 samples, 0.17%)<core::task::wake::Waker as core::ops::drop::Drop>::drop (86 samples, 0.17%)tokio::runtime::task::waker::drop_waker (86 samples, 0.17%)tokio::runtime::task::harness::<impl tokio::runtime::task::raw::RawTask>::drop_reference (79 samples, 0.16%)tokio::runtime::task::state::State::ref_dec (79 samples, 0.16%)core::sync::atomic::AtomicUsize::fetch_sub (76 samples, 0.15%)core::sync::atomic::atomic_sub (76 samples, 0.15%)<event_listener::sys::ListLock<T> as core::ops::drop::Drop>::drop (6 samples, 0.01%)std::sync::poison::Flag::done (16 samples, 0.03%)std::thread::panicking (8 samples, 0.02%)std::panicking::panicking (8 samples, 0.02%)std::panicking::panic_count::count_is_zero (8 samples, 0.02%)core::ptr::drop_in_place<event_listener::sys::ListLock<()>> (160 samples, 0.32%)core::ptr::drop_in_place<std::sync::mutex::MutexGuard<event_listener::sys::Inner<()>>> (154 samples, 0.31%)<std::sync::mutex::MutexGuard<T> as core::ops::drop::Drop>::drop (154 samples, 0.31%)std::sys::sync::mutex::futex::Mutex::unlock (134 samples, 0.27%)core::sync::atomic::AtomicU32::swap (128 samples, 0.26%)core::sync::atomic::atomic_swap (128 samples, 0.26%)std::sync::mutex::MutexGuard<T>::new (8 samples, 0.02%)std::sync::poison::Flag::guard (8 samples, 0.02%)std::thread::panicking (6 samples, 0.01%)std::panicking::panicking (6 samples, 0.01%)std::panicking::panic_count::count_is_zero (6 samples, 0.01%)event_listener::sys::<impl event_listener::Inner<T>>::lock (150 samples, 0.30%)std::sync::mutex::Mutex<T>::lock (150 samples, 0.30%)std::sys::sync::mutex::futex::Mutex::lock (142 samples, 0.28%)core::sync::atomic::AtomicU32::compare_exchange (142 samples, 0.28%)core::sync::atomic::atomic_compare_exchange (142 samples, 0.28%)core::cell::Cell<T>::get (5 samples, 0.01%)core::option::Option<T>::unwrap (10 samples, 0.02%)core::ptr::drop_in_place<futures_util::future::future::fuse::Fuse<event_listener::EventListener>> (832 samples, 1.67%)core::ptr::drop_in_place<core::option::Option<event_listener::EventListener>> (832 samples, 1.67%)core::ptr::drop_in_place<event_listener::EventListener> (635 samples, 1.27%)core::ptr::drop_in_place<core::pin::Pin<alloc::boxed::Box<event_listener::InnerListener<(),alloc::sync::Arc<event_listener::Inner<()>>>>>> (635 samples, 1.27%)core::ptr::drop_in_place<alloc::boxed::Box<event_listener::InnerListener<(),alloc::sync::Arc<event_listener::Inner<()>>>>> (635 samples, 1.27%)core::ptr::drop_in_place<event_listener::InnerListener<(),alloc::sync::Arc<event_listener::Inner<()>>>> (630 samples, 1.26%)event_listener::_::<impl core::ops::drop::Drop for event_listener::InnerListener<T,B>>::drop (508 samples, 1.02%)event_listener::_::<impl core::ops::drop::Drop for event_listener::InnerListener<T,B>>::drop::__drop_inner (508 samples, 1.02%)event_listener::sys::<impl event_listener::Inner<T>>::remove (396 samples, 0.79%)event_listener::sys::Inner<T>::remove (79 samples, 0.16%)core::sync::atomic::AtomicBool::load (16 samples, 0.03%)core::sync::atomic::atomic_load (15 samples, 0.03%)<alloc::sync::Arc<T,A> as core::clone::Clone>::clone (108 samples, 0.22%)core::sync::atomic::AtomicUsize::fetch_add (107 samples, 0.21%)core::sync::atomic::atomic_add (107 samples, 0.21%)__rdl_alloc (75 samples, 0.15%)std::sys::pal::unix::alloc::<impl core::alloc::global::GlobalAlloc for std::alloc::System>::alloc (75 samples, 0.15%)malloc (70 samples, 0.14%)alloc::boxed::Box<T>::pin (97 samples, 0.19%)alloc::boxed::Box<T>::new (97 samples, 0.19%)alloc::alloc::exchange_malloc (78 samples, 0.16%)<alloc::alloc::Global as core::alloc::Allocator>::allocate (76 samples, 0.15%)alloc::alloc::Global::alloc_impl (76 samples, 0.15%)alloc::alloc::alloc (76 samples, 0.15%)event_listener::Event<T>::inner (8 samples, 0.02%)core::mem::replace (6 samples, 0.01%)core::ptr::write (5 samples, 0.01%)core::pin::Pin<Ptr>::set (21 samples, 0.04%)std::sync::poison::Flag::done (9 samples, 0.02%)core::ptr::drop_in_place<event_listener::sys::ListLock<()>> (147 samples, 0.29%)core::ptr::drop_in_place<std::sync::mutex::MutexGuard<event_listener::sys::Inner<()>>> (146 samples, 0.29%)<std::sync::mutex::MutexGuard<T> as core::ops::drop::Drop>::drop (146 samples, 0.29%)std::sys::sync::mutex::futex::Mutex::unlock (135 samples, 0.27%)core::sync::atomic::AtomicU32::swap (133 samples, 0.27%)core::sync::atomic::atomic_swap (133 samples, 0.27%)std::sync::mutex::MutexGuard<T>::new (12 samples, 0.02%)std::sync::poison::Flag::guard (12 samples, 0.02%)std::thread::panicking (9 samples, 0.02%)std::panicking::panicking (9 samples, 0.02%)std::panicking::panic_count::count_is_zero (9 samples, 0.02%)event_listener::Event<T>::listen (573 samples, 1.15%)event_listener::InnerListener<T,B>::listen (356 samples, 0.71%)event_listener::sys::<impl event_listener::Inner<T>>::insert (356 samples, 0.71%)event_listener::sys::<impl event_listener::Inner<T>>::lock (162 samples, 0.32%)std::sync::mutex::Mutex<T>::lock (162 samples, 0.32%)std::sys::sync::mutex::futex::Mutex::lock (150 samples, 0.30%)core::sync::atomic::AtomicU32::compare_exchange (147 samples, 0.29%)core::sync::atomic::atomic_compare_exchange (147 samples, 0.29%)wisp_mux::stream::MuxStreamRead::read::_{{closure}} (2,883 samples, 5.78%)wisp_mu..<wisp_mux::ws::Payload as core::ops::deref::Deref>::deref (9 samples, 0.02%)<bytes::bytes_mut::BytesMut as bytes::buf::buf_mut::BufMut>::advance_mut (12 samples, 0.02%)bytes::bytes_mut::BytesMut::extend_from_slice (140 samples, 0.28%)core::intrinsics::copy_nonoverlapping (126 samples, 0.25%)[libc.so.6] (126 samples, 0.25%)bytes::bytes_mut::BytesMut::get_vec_pos (15 samples, 0.03%)<wisp_mux::packet::PacketType as wisp_mux::packet::Encode>::encode (171 samples, 0.34%)core::ptr::drop_in_place<wisp_mux::ws::Payload> (20 samples, 0.04%)core::ptr::drop_in_place<bytes::bytes_mut::BytesMut> (19 samples, 0.04%)<bytes::bytes_mut::BytesMut as core::ops::drop::Drop>::drop (19 samples, 0.04%)bytes::buf::buf_mut::BufMut::put_u32_le (5 samples, 0.01%)<bytes::bytes_mut::BytesMut as bytes::buf::buf_mut::BufMut>::put_slice (5 samples, 0.01%)bytes::bytes_mut::BytesMut::extend_from_slice (5 samples, 0.01%)<wisp_mux::packet::Packet as wisp_mux::packet::Encode>::encode (180 samples, 0.36%)__rdl_alloc (73 samples, 0.15%)std::sys::pal::unix::alloc::<impl core::alloc::global::GlobalAlloc for std::alloc::System>::alloc (73 samples, 0.15%)malloc (73 samples, 0.15%)alloc::vec::Vec<T>::with_capacity (76 samples, 0.15%)alloc::vec::Vec<T,A>::with_capacity_in (76 samples, 0.15%)alloc::raw_vec::RawVec<T,A>::with_capacity_in (76 samples, 0.15%)alloc::raw_vec::RawVec<T,A>::try_allocate_in (76 samples, 0.15%)<alloc::alloc::Global as core::alloc::Allocator>::allocate (75 samples, 0.15%)alloc::alloc::Global::alloc_impl (75 samples, 0.15%)alloc::alloc::alloc (75 samples, 0.15%)bytes::bytes_mut::BytesMut::with_capacity (84 samples, 0.17%)bytes::bytes_mut::BytesMut::from_vec (8 samples, 0.02%)bytes::bytes_mut::original_capacity_to_repr (5 samples, 0.01%)wisp_mux::packet::<impl core::convert::From<wisp_mux::packet::Packet> for bytes::bytes_mut::BytesMut>::from (306 samples, 0.61%)wisp_mux::packet::PacketType::get_packet_size (19 samples, 0.04%)wisp_mux::packet::<impl core::convert::From<wisp_mux::packet::Packet> for wisp_mux::ws::Frame>::from (315 samples, 0.63%)wisp_mux::ws::Frame::binary (9 samples, 0.02%)<event_listener::EventListener<T> as core::future::future::Future>::poll (17 samples, 0.03%)event_listener::InnerListener<T,B>::poll_internal (17 samples, 0.03%)event_listener::sys::<impl event_listener::Inner<T>>::register (16 samples, 0.03%)<wisp_mux::Role as core::cmp::PartialEq>::eq (17 samples, 0.03%)<wisp_mux::packet::StreamType as core::cmp::PartialEq>::eq (7 samples, 0.01%)cfree (13 samples, 0.03%)core::ptr::drop_in_place<wisp_mux::ws::LockedWebSocketWrite::write_split::{{closure}}> (6 samples, 0.01%)core::sync::atomic::AtomicBool::load (16 samples, 0.03%)core::sync::atomic::atomic_load (15 samples, 0.03%)core::sync::atomic::AtomicU32::load (62 samples, 0.12%)core::sync::atomic::atomic_load (62 samples, 0.12%)event_listener::Event<T>::inner (7 samples, 0.01%)core::sync::atomic::AtomicPtr<T>::load (7 samples, 0.01%)core::sync::atomic::atomic_load (7 samples, 0.01%)event_listener::Event<T>::listen (14 samples, 0.03%)<core::result::Result<T,E> as core::ops::try_trait::Try>::branch (7 samples, 0.01%)core::ptr::drop_in_place<fastwebsockets::WebSocketWrite<tokio::net::tcp::split_owned::OwnedWriteHalf>::write_frame::{{closure}}> (8 samples, 0.02%)core::ptr::drop_in_place<fastwebsockets::WriteHalf::write_frame<tokio::net::tcp::split_owned::OwnedWriteHalf>::{{closure}}> (10 samples, 0.02%)<fastwebsockets::Role as core::cmp::PartialEq>::eq (19 samples, 0.04%)<fastwebsockets::frame::OpCode as core::cmp::PartialEq>::eq (43 samples, 0.09%)<fastwebsockets::frame::Payload as core::ops::deref::Deref>::deref (9 samples, 0.02%)[libc.so.6] (97 samples, 0.19%)__send (340 samples, 0.68%)[unknown] (30 samples, 0.06%)<&mio::net::tcp::stream::TcpStream as std::io::Write>::write (354 samples, 0.71%)mio::io_source::IoSource<T>::do_io (354 samples, 0.71%)mio::sys::unix::stateless_io_source::IoSourceState::do_io (354 samples, 0.71%)<&mio::net::tcp::stream::TcpStream as std::io::Write>::write::_{{closure}} (354 samples, 0.71%)<&std::net::tcp::TcpStream as std::io::Write>::write (354 samples, 0.71%)std::sys_common::net::TcpStream::write (354 samples, 0.71%)std::sys::pal::unix::cvt (9 samples, 0.02%)<isize as std::sys::pal::unix::IsMinusOne>::is_minus_one (9 samples, 0.02%)core::ops::function::FnOnce::call_once (6 samples, 0.01%)tokio::runtime::context::CONTEXT::_{{constant}}::_{{closure}} (6 samples, 0.01%)std::sys::thread_local::native::eager::Storage<T>::get (6 samples, 0.01%)core::cell::Cell<T>::get (5 samples, 0.01%)tokio::runtime::coop::poll_proceed (19 samples, 0.04%)tokio::runtime::context::budget (19 samples, 0.04%)std::thread::local::LocalKey<T>::try_with (19 samples, 0.04%)tokio::runtime::context::budget::_{{closure}} (13 samples, 0.03%)tokio::runtime::coop::poll_proceed::_{{closure}} (13 samples, 0.03%)tokio::runtime::coop::Budget::decrement (5 samples, 0.01%)core::sync::atomic::AtomicUsize::load (55 samples, 0.11%)core::sync::atomic::atomic_load (55 samples, 0.11%)<&mut T as tokio::io::async_write::AsyncWrite>::poll_write (498 samples, 1.00%)<tokio::net::tcp::split_owned::OwnedWriteHalf as tokio::io::async_write::AsyncWrite>::poll_write (497 samples, 1.00%)tokio::net::tcp::stream::TcpStream::poll_write_priv (494 samples, 0.99%)tokio::io::poll_evented::PollEvented<E>::poll_write (463 samples, 0.93%)tokio::runtime::io::registration::Registration::poll_write_ready (95 samples, 0.19%)tokio::runtime::io::registration::Registration::poll_ready (95 samples, 0.19%)tokio::runtime::io::scheduled_io::ScheduledIo::poll_readiness (66 samples, 0.13%)core::ptr::read (10 samples, 0.02%)core::mem::take (15 samples, 0.03%)core::mem::replace (15 samples, 0.03%)core::ptr::write (5 samples, 0.01%)<tokio::io::util::write_all::WriteAll<W> as core::future::future::Future>::poll (532 samples, 1.07%)cfree (826 samples, 1.66%)[libc.so.6] (394 samples, 0.79%)[libc.so.6] (194 samples, 0.39%)[libc.so.6] (60 samples, 0.12%)[libc.so.6] (15 samples, 0.03%)core::ptr::drop_in_place<alloc::vec::Vec<u8>> (9 samples, 0.02%)core::ptr::drop_in_place<alloc::raw_vec::RawVec<u8>> (9 samples, 0.02%)<alloc::raw_vec::RawVec<T,A> as core::ops::drop::Drop>::drop (9 samples, 0.02%)alloc::raw_vec::RawVec<T,A>::current_memory (9 samples, 0.02%)bytes::bytes_mut::BytesMut::kind (12 samples, 0.02%)core::ptr::drop_in_place<fastwebsockets::frame::Frame> (909 samples, 1.82%)c..core::ptr::drop_in_place<fastwebsockets::frame::Payload> (909 samples, 1.82%)c..core::ptr::drop_in_place<bytes::bytes_mut::BytesMut> (21 samples, 0.04%)<bytes::bytes_mut::BytesMut as core::ops::drop::Drop>::drop (21 samples, 0.04%)__rdl_alloc (360 samples, 0.72%)std::sys::pal::unix::alloc::<impl core::alloc::global::GlobalAlloc for std::alloc::System>::alloc (360 samples, 0.72%)malloc (360 samples, 0.72%)[libc.so.6] (223 samples, 0.45%)[libc.so.6] (30 samples, 0.06%)alloc::vec::Vec<T,A>::with_capacity_in (375 samples, 0.75%)alloc::raw_vec::RawVec<T,A>::with_capacity_in (375 samples, 0.75%)alloc::raw_vec::RawVec<T,A>::try_allocate_in (375 samples, 0.75%)<alloc::alloc::Global as core::alloc::Allocator>::allocate (370 samples, 0.74%)alloc::alloc::Global::alloc_impl (370 samples, 0.74%)alloc::alloc::alloc (370 samples, 0.74%)core::ptr::read_volatile (10 samples, 0.02%)fastwebsockets::frame::Payload::to_mut (8,123 samples, 16.29%)fastwebsockets::frame::Pa..alloc::slice::<impl alloc::borrow::ToOwned for [T]>::to_owned (8,069 samples, 16.18%)alloc::slice::<impl alloc..alloc::slice::<impl [T]>::to_vec (8,069 samples, 16.18%)alloc::slice::<impl [T]>:..alloc::slice::<impl [T]>::to_vec_in (8,069 samples, 16.18%)alloc::slice::<impl [T]>:..alloc::slice::hack::to_vec (8,069 samples, 16.18%)alloc::slice::hack::to_vec<T as alloc::slice::hack::ConvertVec>::to_vec (8,069 samples, 16.18%)<T as alloc::slice::hack:..core::ptr::const_ptr::<impl *const T>::copy_to_nonoverlapping (7,694 samples, 15.43%)core::ptr::const_ptr::<i..core::intrinsics::copy_nonoverlapping (7,694 samples, 15.43%)core::intrinsics::copy_n..[libc.so.6] (7,694 samples, 15.43%)[libc.so.6]<core::slice::iter::IterMut<T> as core::iter::traits::iterator::Iterator>::next (17 samples, 0.03%)core::slice::<impl [T]>::align_to_offsets (10 samples, 0.02%)core::slice::<impl [T]>::align_to_mut (21 samples, 0.04%)fastwebsockets::mask::unmask (3,576 samples, 7.17%)fastwebsoc..fastwebsockets::mask::unmask_fallback (3,576 samples, 7.17%)fastwebsoc..<ppv_lite86::x86_64::sse2::u32x4_sse2<S3,S4,NI> as ppv_lite86::types::StoreBytes>::write_le (6 samples, 0.01%)core::core_arch::x86::sse2::_mm_storeu_si128 (6 samples, 0.01%)core::ptr::mut_ptr::<impl *mut T>::write_unaligned (6 samples, 0.01%)core::ptr::write_unaligned (6 samples, 0.01%)core::intrinsics::copy_nonoverlapping (6 samples, 0.01%)ppv_lite86::x86_64::sse2::avx2::_<impl ppv_lite86::types::MultiLane<[ppv_lite86::x86_64::sse2::u32x4_sse2<ppv_lite86::x86_64::YesS3,ppv_lite86::x86_64::YesS4,NI>: 4]> for ppv_lite86::soft::x2<ppv_lite86::x86_64::sse2::avx2::u32x4x2_avx2<NI>,ppv_lite86::x86_64::sse2::G0>>::from_lanes (10 samples, 0.02%)<ppv_lite86::x86_64::sse2::avx2::u32x4x2_avx2<NI> as ppv_lite86::types::MultiLane<[ppv_lite86::x86_64::sse2::u32x4_sse2<ppv_lite86::x86_64::YesS3,ppv_lite86::x86_64::YesS4,NI>: 2]>>::from_lanes (10 samples, 0.02%)core::core_arch::x86::avx::_mm256_setr_m128i (10 samples, 0.02%)core::core_arch::x86::avx::_mm256_set_m128i (10 samples, 0.02%)core::core_arch::x86::avx::_mm256_set_m128 (10 samples, 0.02%)<ppv_lite86::soft::x2<W,G> as core::ops::arith::AddAssign>::add_assign (14 samples, 0.03%)<ppv_lite86::x86_64::sse2::avx2::u32x4x2_avx2<NI> as core::ops::arith::AddAssign>::add_assign (14 samples, 0.03%)<ppv_lite86::x86_64::sse2::avx2::u32x4x2_avx2<NI> as core::ops::arith::Add>::add (14 samples, 0.03%)core::core_arch::x86::avx2::_mm256_add_epi32 (14 samples, 0.03%)<ppv_lite86::soft::x2<W,G> as core::ops::bit::BitXor>::bitxor (5 samples, 0.01%)<ppv_lite86::x86_64::sse2::avx2::u32x4x2_avx2<NI> as core::ops::bit::BitXor>::bitxor (5 samples, 0.01%)core::core_arch::x86::avx2::_mm256_xor_si256 (5 samples, 0.01%)<ppv_lite86::soft::x2<W,G> as ppv_lite86::types::RotateEachWord32>::rotate_each_word_right16 (8 samples, 0.02%)<ppv_lite86::x86_64::sse2::avx2::u32x4x2_avx2<NI> as ppv_lite86::types::RotateEachWord32>::rotate_each_word_right16 (8 samples, 0.02%)core::core_arch::x86::avx2::_mm256_shuffle_epi8 (8 samples, 0.02%)core::core_arch::x86::avx2::_mm256_or_si256 (23 samples, 0.05%)<ppv_lite86::soft::x2<W,G> as ppv_lite86::types::RotateEachWord32>::rotate_each_word_right20 (24 samples, 0.05%)<ppv_lite86::x86_64::sse2::avx2::u32x4x2_avx2<NI> as ppv_lite86::types::RotateEachWord32>::rotate_each_word_right20 (24 samples, 0.05%)<ppv_lite86::soft::x2<W,G> as ppv_lite86::types::RotateEachWord32>::rotate_each_word_right24 (10 samples, 0.02%)<ppv_lite86::x86_64::sse2::avx2::u32x4x2_avx2<NI> as ppv_lite86::types::RotateEachWord32>::rotate_each_word_right24 (10 samples, 0.02%)core::core_arch::x86::avx2::_mm256_shuffle_epi8 (10 samples, 0.02%)rand_chacha::guts::round (77 samples, 0.15%)<ppv_lite86::soft::x2<W,G> as ppv_lite86::types::RotateEachWord32>::rotate_each_word_right25 (16 samples, 0.03%)<ppv_lite86::x86_64::sse2::avx2::u32x4x2_avx2<NI> as ppv_lite86::types::RotateEachWord32>::rotate_each_word_right25 (16 samples, 0.03%)core::core_arch::x86::avx2::_mm256_or_si256 (16 samples, 0.03%)<rand_chacha::chacha::ChaCha12Core as rand_core::block::BlockRngCore>::generate (107 samples, 0.21%)rand_chacha::guts::ChaCha::refill4 (107 samples, 0.21%)rand_chacha::guts::refill_wide (107 samples, 0.21%)rand_chacha::guts::refill_wide::impl_avx2 (107 samples, 0.21%)rand_chacha::guts::refill_wide::fn_impl (107 samples, 0.21%)rand_chacha::guts::refill_wide_impl (107 samples, 0.21%)rand::rng::Rng::gen (181 samples, 0.36%)rand::distributions::other::_<impl rand::distributions::distribution::Distribution<[T: _]> for rand::distributions::Standard>::sample (181 samples, 0.36%)rand::rng::Rng::gen (181 samples, 0.36%)rand::distributions::integer::<impl rand::distributions::distribution::Distribution<u8> for rand::distributions::Standard>::sample (181 samples, 0.36%)<rand::rngs::thread::ThreadRng as rand_core::RngCore>::next_u32 (181 samples, 0.36%)<rand::rngs::adapter::reseeding::ReseedingRng<R,Rsdr> as rand_core::RngCore>::next_u32 (181 samples, 0.36%)<rand_core::block::BlockRng<R> as rand_core::RngCore>::next_u32 (181 samples, 0.36%)rand_core::block::BlockRng<R>::generate_and_set (117 samples, 0.23%)<rand::rngs::adapter::reseeding::ReseedingCore<R,Rsdr> as rand_core::block::BlockRngCore>::generate (117 samples, 0.23%)rand::rngs::adapter::reseeding::fork::get_fork_counter (7 samples, 0.01%)core::sync::atomic::AtomicUsize::load (7 samples, 0.01%)core::sync::atomic::atomic_load (7 samples, 0.01%)core::ops::function::FnOnce::call_once (11 samples, 0.02%)rand::rngs::thread::THREAD_RNG_KEY::_{{constant}}::_{{closure}} (11 samples, 0.02%)std::sys::thread_local::native::lazy::Storage<T,D>::get_or_init (11 samples, 0.02%)fastwebsockets::frame::Frame::mask (12,017 samples, 24.10%)fastwebsockets::frame::Frame::maskrand::random (213 samples, 0.43%)rand::rngs::thread::thread_rng (31 samples, 0.06%)std::thread::local::LocalKey<T>::with (31 samples, 0.06%)std::thread::local::LocalKey<T>::try_with (31 samples, 0.06%)rand::rngs::thread::thread_rng::_{{closure}} (18 samples, 0.04%)<alloc::rc::Rc<T,A> as core::clone::Clone>::clone (18 samples, 0.04%)alloc::rc::RcInnerPtr::inc_strong (18 samples, 0.04%)core::cell::Cell<T>::set (12 samples, 0.02%)core::cell::Cell<T>::replace (12 samples, 0.02%)core::mem::replace (12 samples, 0.02%)core::ptr::write (12 samples, 0.02%)core::slice::<impl [T]>::copy_from_slice (9 samples, 0.02%)core::intrinsics::copy_nonoverlapping (9 samples, 0.02%)[libc.so.6] (6 samples, 0.01%)fastwebsockets::frame::Frame::write (39 samples, 0.08%)fastwebsockets::frame::Frame::fmt_head (22 samples, 0.04%)core::slice::<impl [T]>::copy_from_slice (6 samples, 0.01%)core::intrinsics::copy_nonoverlapping (6 samples, 0.01%)<fastwebsockets::frame::Payload as core::ops::deref::Deref>::deref (12 samples, 0.02%)std::sys::pal::unix::cvt (80 samples, 0.16%)<isize as std::sys::pal::unix::IsMinusOne>::is_minus_one (80 samples, 0.16%)[libc.so.6] (263 samples, 0.53%)<&mio::net::tcp::stream::TcpStream as std::io::Write>::write_vectored (548 samples, 1.10%)mio::io_source::IoSource<T>::do_io (548 samples, 1.10%)mio::sys::unix::stateless_io_source::IoSourceState::do_io (548 samples, 1.10%)<&mio::net::tcp::stream::TcpStream as std::io::Write>::write_vectored::_{{closure}} (548 samples, 1.10%)<&std::fs::File as std::io::Write>::write_vectored (548 samples, 1.10%)std::sys::pal::unix::fs::File::write_vectored (548 samples, 1.10%)std::sys::pal::unix::fd::FileDesc::write_vectored (548 samples, 1.10%)writev (466 samples, 0.93%)[unknown] (27 samples, 0.05%)tokio::io::poll_evented::PollEvented<E>::poll_write_vectored::_{{closure}} (549 samples, 1.10%)core::ops::function::FnOnce::call_once (9 samples, 0.02%)tokio::runtime::context::CONTEXT::_{{constant}}::_{{closure}} (9 samples, 0.02%)std::sys::thread_local::native::eager::Storage<T>::get (9 samples, 0.02%)core::cell::Cell<T>::get (8 samples, 0.02%)tokio::runtime::coop::poll_proceed (18 samples, 0.04%)tokio::runtime::context::budget (18 samples, 0.04%)std::thread::local::LocalKey<T>::try_with (18 samples, 0.04%)tokio::runtime::context::budget::_{{closure}} (9 samples, 0.02%)tokio::runtime::coop::poll_proceed::_{{closure}} (9 samples, 0.02%)tokio::runtime::coop::Budget::decrement (5 samples, 0.01%)core::sync::atomic::AtomicUsize::load (64 samples, 0.13%)core::sync::atomic::atomic_load (64 samples, 0.13%)<tokio::io::util::write_vectored::WriteVectored<W> as core::future::future::Future>::poll (701 samples, 1.41%)<&mut T as tokio::io::async_write::AsyncWrite>::poll_write_vectored (701 samples, 1.41%)<tokio::net::tcp::split_owned::OwnedWriteHalf as tokio::io::async_write::AsyncWrite>::poll_write_vectored (701 samples, 1.41%)tokio::net::tcp::stream::TcpStream::poll_write_vectored_priv (699 samples, 1.40%)tokio::io::poll_evented::PollEvented<E>::poll_write_vectored (665 samples, 1.33%)tokio::runtime::io::registration::Registration::poll_write_io (665 samples, 1.33%)tokio::runtime::io::registration::Registration::poll_io (665 samples, 1.33%)tokio::runtime::io::registration::Registration::poll_ready (105 samples, 0.21%)tokio::runtime::io::scheduled_io::ScheduledIo::poll_readiness (76 samples, 0.15%)<fastwebsockets::frame::Payload as core::ops::deref::Deref>::deref (5 samples, 0.01%)fastwebsockets::WebSocketWrite<S>::write_frame::_{{closure}} (14,633 samples, 29.34%)fastwebsockets::WebSocketWrite<S>::write_frame:..fastwebsockets::WriteHalf::write_frame::_{{closure}} (14,545 samples, 29.16%)fastwebsockets::WriteHalf::write_frame::_{{clos..fastwebsockets::frame::Frame::writev::_{{closure}} (874 samples, 1.75%)fastwebsockets::frame::Frame::fmt_head (30 samples, 0.06%)core::slice::<impl [T]>::copy_from_slice (7 samples, 0.01%)core::intrinsics::copy_nonoverlapping (7 samples, 0.01%)<core::pin::Pin<P> as core::future::future::Future>::poll (14,896 samples, 29.87%)<core::pin::Pin<P> as core::future::future::Futu..wisp_mux::fastwebsockets::_<impl wisp_mux::ws::WebSocketWrite for fastwebsockets::WebSocketWrite<S>>::wisp_write_split::_{{closure}} (14,896 samples, 29.87%)wisp_mux::fastwebsockets::_<impl wisp_mux::ws::W..wisp_mux::fastwebsockets::<impl core::convert::From<wisp_mux::ws::Frame> for fastwebsockets::frame::Frame>::from (14 samples, 0.03%)wisp_mux::fastwebsockets::match_payload_reverse (8 samples, 0.02%)futures_util::lock::mutex::Mutex<T>::try_lock (47 samples, 0.09%)core::sync::atomic::AtomicUsize::fetch_or (47 samples, 0.09%)core::sync::atomic::atomic_or (47 samples, 0.09%)<futures_util::lock::mutex::MutexLockFuture<T> as core::future::future::Future>::poll (66 samples, 0.13%)<alloc::boxed::Box<T,A> as core::ops::drop::Drop>::drop (134 samples, 0.27%)<alloc::alloc::Global as core::alloc::Allocator>::deallocate (130 samples, 0.26%)alloc::alloc::dealloc (130 samples, 0.26%)__rdl_dealloc (130 samples, 0.26%)std::sys::pal::unix::alloc::<impl core::alloc::global::GlobalAlloc for std::alloc::System>::dealloc (130 samples, 0.26%)cfree (130 samples, 0.26%)[libc.so.6] (31 samples, 0.06%)core::ptr::drop_in_place<core::pin::Pin<alloc::boxed::Box<dyn core::future::future::Future+Output = core::result::Result<(),wisp_mux::WispError>+core::marker::Send>>> (211 samples, 0.42%)core::ptr::drop_in_place<alloc::boxed::Box<dyn core::future::future::Future+Output = core::result::Result<(),wisp_mux::WispError>+core::marker::Send>> (211 samples, 0.42%)core::ptr::drop_in_place<wisp_mux::fastwebsockets::<impl wisp_mux::ws::WebSocketWrite for fastwebsockets::WebSocketWrite<tokio::net::tcp::split_owned::OwnedWriteHalf>>::wisp_write_split::{{closure}}> (9 samples, 0.02%)<slab::IterMut<T> as core::iter::traits::iterator::Iterator>::next (8 samples, 0.02%)core::ptr::drop_in_place<std::sync::mutex::MutexGuard<slab::Slab<futures_util::lock::mutex::Waiter>>> (16 samples, 0.03%)<std::sync::mutex::MutexGuard<T> as core::ops::drop::Drop>::drop (16 samples, 0.03%)std::sys::sync::mutex::futex::Mutex::unlock (16 samples, 0.03%)core::sync::atomic::AtomicU32::swap (16 samples, 0.03%)core::sync::atomic::atomic_swap (16 samples, 0.03%)core::sync::atomic::AtomicUsize::fetch_and (82 samples, 0.16%)core::sync::atomic::atomic_and (82 samples, 0.16%)tokio::runtime::scheduler::multi_thread::worker::<impl tokio::runtime::scheduler::multi_thread::handle::Handle>::schedule_task (5 samples, 0.01%)tokio::runtime::scheduler::multi_thread::worker::with_current (5 samples, 0.01%)tokio::runtime::context::with_scheduler (5 samples, 0.01%)tokio::runtime::scheduler::multi_thread::worker::_<impl tokio::runtime::scheduler::multi_thread::handle::Handle>::schedule_task::_{{closure}} (5 samples, 0.01%)tokio::runtime::task::raw::RawTask::schedule (7 samples, 0.01%)tokio::runtime::task::state::State::load (7 samples, 0.01%)core::sync::atomic::AtomicUsize::load (7 samples, 0.01%)core::sync::atomic::atomic_load (7 samples, 0.01%)futures_util::lock::mutex::Waiter::wake (21 samples, 0.04%)core::task::wake::Waker::wake (19 samples, 0.04%)tokio::runtime::task::waker::wake_by_val (19 samples, 0.04%)tokio::runtime::task::harness::<impl tokio::runtime::task::raw::RawTask>::wake_by_val (19 samples, 0.04%)tokio::runtime::task::state::State::transition_to_notified_by_val (9 samples, 0.02%)tokio::runtime::task::state::State::fetch_update_action (9 samples, 0.02%)core::ptr::drop_in_place<futures_util::lock::mutex::MutexGuard<alloc::boxed::Box<dyn wisp_mux::ws::WebSocketWrite+core::marker::Send>>> (143 samples, 0.29%)<futures_util::lock::mutex::MutexGuard<T> as core::ops::drop::Drop>::drop (143 samples, 0.29%)futures_util::lock::mutex::Mutex<T>::unlock (143 samples, 0.29%)std::sync::mutex::Mutex<T>::lock (15 samples, 0.03%)std::sys::sync::mutex::futex::Mutex::lock (13 samples, 0.03%)core::sync::atomic::AtomicU32::compare_exchange (13 samples, 0.03%)core::sync::atomic::atomic_compare_exchange (13 samples, 0.03%)simple_wisp_client::main::_{{closure}}::_{{closure}} (23,607 samples, 47.34%)simple_wisp_client::main::_{{closure}}::_{{closure}}wisp_mux::stream::MuxStreamWrite::write::_{{closure}} (16,237 samples, 32.56%)wisp_mux::stream::MuxStreamWrite::write::_{{closure}}wisp_mux::stream::MuxStreamWrite::write_payload::_{{closure}} (16,223 samples, 32.53%)wisp_mux::stream::MuxStreamWrite::write_payload::_{{c..wisp_mux::stream::MuxStreamWrite::write_payload_internal::_{{closure}} (15,866 samples, 31.81%)wisp_mux::stream::MuxStreamWrite::write_payload_int..wisp_mux::ws::LockedWebSocketWrite::write_split::_{{closure}} (15,578 samples, 31.24%)wisp_mux::ws::LockedWebSocketWrite::write_split::_..wisp_mux::fastwebsockets::<impl wisp_mux::ws::WebSocketWrite for fastwebsockets::WebSocketWrite<S>>::wisp_write_split (43 samples, 0.09%)alloc::boxed::Box<T>::pin (40 samples, 0.08%)alloc::boxed::Box<T>::new (40 samples, 0.08%)alloc::alloc::exchange_malloc (30 samples, 0.06%)<alloc::alloc::Global as core::alloc::Allocator>::allocate (30 samples, 0.06%)alloc::alloc::Global::alloc_impl (30 samples, 0.06%)alloc::alloc::alloc (30 samples, 0.06%)__rdl_alloc (30 samples, 0.06%)std::sys::pal::unix::alloc::<impl core::alloc::global::GlobalAlloc for std::alloc::System>::alloc (30 samples, 0.06%)malloc (30 samples, 0.06%)<T as core::convert::Into<U>>::into (13 samples, 0.03%)wisp_mux::fastwebsockets::<impl core::convert::From<fastwebsockets::frame::OpCode> for wisp_mux::ws::OpCode>::from (13 samples, 0.03%)<fastwebsockets::frame::OpCode as core::cmp::PartialEq>::eq (31 samples, 0.06%)core::cmp::PartialEq::ne (50 samples, 0.10%)<fastwebsockets::frame::OpCode as core::cmp::PartialEq>::eq (50 samples, 0.10%)<core::result::Result<T,E> as core::ops::try_trait::Try>::branch (7 samples, 0.01%)bytes::bytes_mut::BytesMut::advance_unchecked (21 samples, 0.04%)<bytes::bytes_mut::BytesMut as bytes::buf::buf_impl::Buf>::advance (32 samples, 0.06%)<&mut T as bytes::buf::buf_mut::BufMut>::advance_mut (78 samples, 0.16%)<bytes::bytes_mut::BytesMut as bytes::buf::buf_mut::BufMut>::advance_mut (46 samples, 0.09%)bytes::bytes_mut::BytesMut::len (38 samples, 0.08%)[libc.so.6] (270 samples, 0.54%)recv (680 samples, 1.36%)[unknown] (72 samples, 0.14%)<&mio::net::tcp::stream::TcpStream as std::io::Read>::read (732 samples, 1.47%)mio::io_source::IoSource<T>::do_io (732 samples, 1.47%)mio::sys::unix::stateless_io_source::IoSourceState::do_io (732 samples, 1.47%)<&mio::net::tcp::stream::TcpStream as std::io::Read>::read::_{{closure}} (732 samples, 1.47%)<&std::net::tcp::TcpStream as std::io::Read>::read (732 samples, 1.47%)std::sys_common::net::TcpStream::read (732 samples, 1.47%)std::sys::pal::unix::net::Socket::read (732 samples, 1.47%)std::sys::pal::unix::net::Socket::recv_with_flags (732 samples, 1.47%)std::sys::pal::unix::cvt (50 samples, 0.10%)<isize as std::sys::pal::unix::IsMinusOne>::is_minus_one (48 samples, 0.10%)tokio::io::read_buf::ReadBuf::assume_init (26 samples, 0.05%)tokio::io::read_buf::ReadBuf::unfilled_mut (11 samples, 0.02%)core::slice::index::<impl core::ops::index::IndexMut<I> for [T]>::index_mut (8 samples, 0.02%)<core::ops::range::RangeFrom<usize> as core::slice::index::SliceIndex<[T]>>::index_mut (8 samples, 0.02%)core::task::wake::Waker::wake_by_ref (7 samples, 0.01%)tokio::runtime::task::waker::wake_by_ref (6 samples, 0.01%)tokio::runtime::task::harness::<impl tokio::runtime::task::raw::RawTask>::wake_by_ref (6 samples, 0.01%)tokio::runtime::task::state::State::transition_to_notified_by_ref (6 samples, 0.01%)tokio::runtime::task::state::State::fetch_update_action (6 samples, 0.01%)tokio::runtime::coop::poll_proceed (21 samples, 0.04%)tokio::runtime::context::budget (21 samples, 0.04%)std::thread::local::LocalKey<T>::try_with (21 samples, 0.04%)tokio::runtime::context::budget::_{{closure}} (19 samples, 0.04%)tokio::runtime::coop::poll_proceed::_{{closure}} (19 samples, 0.04%)tokio::runtime::coop::Budget::decrement (5 samples, 0.01%)core::sync::atomic::AtomicUsize::load (60 samples, 0.12%)core::sync::atomic::atomic_load (60 samples, 0.12%)<&mut T as tokio::io::async_read::AsyncRead>::poll_read (982 samples, 1.97%)<..<tokio::net::tcp::split_owned::OwnedReadHalf as tokio::io::async_read::AsyncRead>::poll_read (981 samples, 1.97%)<..tokio::net::tcp::stream::TcpStream::poll_read_priv (941 samples, 1.89%)t..tokio::io::poll_evented::PollEvented<E>::poll_read (923 samples, 1.85%)t..tokio::runtime::io::registration::Registration::poll_read_ready (120 samples, 0.24%)tokio::runtime::io::registration::Registration::poll_ready (117 samples, 0.23%)tokio::runtime::io::scheduled_io::ScheduledIo::poll_readiness (81 samples, 0.16%)core::slice::<impl [T]>::as_ptr (11 samples, 0.02%)tokio::io::read_buf::ReadBuf::filled (15 samples, 0.03%)<tokio::io::util::read_buf::ReadBuf<R,B> as core::future::future::Future>::poll (1,104 samples, 2.21%)<..tokio::io::read_buf::ReadBuf::uninit (6 samples, 0.01%)bytes::buf::buf_impl::Buf::get_u16 (11 samples, 0.02%)<bytes::bytes_mut::BytesMut as bytes::buf::buf_impl::Buf>::advance (9 samples, 0.02%)bytes::bytes_mut::BytesMut::advance_unchecked (9 samples, 0.02%)<&mut T as core::convert::AsRef<U>>::as_ref (5 samples, 0.01%)<bytes::bytes_mut::BytesMut as core::convert::AsRef<[u8]>>::as_ref (5 samples, 0.01%)bytes::bytes_mut::BytesMut::as_slice (5 samples, 0.01%)core::intrinsics::copy_nonoverlapping (3,099 samples, 6.21%)core::in..[libc.so.6] (3,097 samples, 6.21%)[libc.so..alloc::vec::Vec<T,A>::extend_from_slice (3,111 samples, 6.24%)alloc::v..<alloc::vec::Vec<T,A> as alloc::vec::spec_extend::SpecExtend<&T,core::slice::iter::Iter<T>>>::spec_extend (3,111 samples, 6.24%)<alloc::..alloc::vec::Vec<T,A>::append_elements (3,111 samples, 6.24%)alloc::v..[libc.so.6] (1,261 samples, 2.53%)[l..[libc.so.6] (600 samples, 1.20%)[libc.so.6] (10 samples, 0.02%)__lll_lock_wait_private (29 samples, 0.06%)__rdl_alloc (1,958 samples, 3.93%)__rd..std::sys::pal::unix::alloc::<impl core::alloc::global::GlobalAlloc for std::alloc::System>::alloc (1,958 samples, 3.93%)std:..malloc (1,954 samples, 3.92%)mall..__lll_lock_wake_private (12 samples, 0.02%)[unknown] (5 samples, 0.01%)alloc::vec::Vec<T>::with_capacity (1,972 samples, 3.95%)allo..alloc::vec::Vec<T,A>::with_capacity_in (1,972 samples, 3.95%)allo..alloc::raw_vec::RawVec<T,A>::with_capacity_in (1,972 samples, 3.95%)allo..alloc::raw_vec::RawVec<T,A>::try_allocate_in (1,972 samples, 3.95%)allo..<alloc::alloc::Global as core::alloc::Allocator>::allocate (1,961 samples, 3.93%)<all..alloc::alloc::Global::alloc_impl (1,961 samples, 3.93%)allo..alloc::alloc::alloc (1,961 samples, 3.93%)allo..bytes::bytes_mut::Shared::is_unique (14 samples, 0.03%)core::sync::atomic::AtomicUsize::load (9 samples, 0.02%)core::sync::atomic::atomic_load (9 samples, 0.02%)bytes::bytes_mut::original_capacity_from_repr (6 samples, 0.01%)bytes::bytes_mut::release_shared (407 samples, 0.82%)core::sync::atomic::AtomicUsize::fetch_sub (404 samples, 0.81%)core::sync::atomic::atomic_sub (404 samples, 0.81%)core::cmp::max (5 samples, 0.01%)core::cmp::Ord::max (5 samples, 0.01%)core::cmp::max_by (5 samples, 0.01%)core::intrinsics::copy_nonoverlapping (18 samples, 0.04%)[libc.so.6] (18 samples, 0.04%)core::mem::manually_drop::ManuallyDrop<T>::new (7 samples, 0.01%)bytes::bytes_mut::BytesMut::reserve (5,604 samples, 11.24%)bytes::bytes_mut:..bytes::bytes_mut::BytesMut::reserve_inner (5,593 samples, 11.21%)bytes::bytes_mut:..core::num::<impl usize>::checked_add (5 samples, 0.01%)bytes::bytes_mut::BytesMut::advance_unchecked (11 samples, 0.02%)[libc.so.6] (565 samples, 1.13%)[libc.so.6] (77 samples, 0.15%)__lll_lock_wait_private (20 samples, 0.04%)__rdl_alloc (1,216 samples, 2.44%)__..std::sys::pal::unix::alloc::<impl core::alloc::global::GlobalAlloc for std::alloc::System>::alloc (1,216 samples, 2.44%)st..malloc (1,211 samples, 2.43%)ma..alloc::boxed::Box<T>::new (1,259 samples, 2.52%)al..alloc::alloc::exchange_malloc (1,250 samples, 2.51%)al..<alloc::alloc::Global as core::alloc::Allocator>::allocate (1,243 samples, 2.49%)<a..alloc::alloc::Global::alloc_impl (1,243 samples, 2.49%)al..alloc::alloc::alloc (1,243 samples, 2.49%)al..core::ptr::read_volatile (27 samples, 0.05%)bytes::bytes_mut::BytesMut::promote_to_shared (1,287 samples, 2.58%)by..bytes::bytes_mut::rebuild_vec (20 samples, 0.04%)core::ptr::mut_ptr::<impl *mut T>::sub (6 samples, 0.01%)core::ptr::mut_ptr::<impl *mut T>::offset (6 samples, 0.01%)bytes::bytes_mut::BytesMut::shallow_clone (1,302 samples, 2.61%)by..bytes::bytes_mut::BytesMut::split_to (1,330 samples, 2.67%)by..fastwebsockets::WebSocketRead<S>::read_frame::_{{closure}} (9,242 samples, 18.53%)fastwebsockets::WebSocketRead..fastwebsockets::ReadHalf::read_frame_inner::_{{closure}} (8,856 samples, 17.76%)fastwebsockets::ReadHalf::re..fastwebsockets::ReadHalf::parse_frame_header::_{{closure}} (8,502 samples, 17.05%)fastwebsockets::ReadHalf::..<core::pin::Pin<P> as core::future::future::Future>::poll (9,735 samples, 19.52%)<core::pin::Pin<P> as core::fut..wisp_mux::fastwebsockets::_<impl wisp_mux::ws::WebSocketRead for fastwebsockets::WebSocketRead<S>>::wisp_read_split::_{{closure}} (9,735 samples, 19.52%)wisp_mux::fastwebsockets::_<imp..fastwebsockets::frame::<impl core::convert::From<fastwebsockets::frame::Payload> for bytes::bytes_mut::BytesMut>::from (108 samples, 0.22%)<alloc::boxed::Box<T,A> as core::ops::drop::Drop>::drop (201 samples, 0.40%)<alloc::alloc::Global as core::alloc::Allocator>::deallocate (201 samples, 0.40%)alloc::alloc::dealloc (201 samples, 0.40%)__rdl_dealloc (201 samples, 0.40%)std::sys::pal::unix::alloc::<impl core::alloc::global::GlobalAlloc for std::alloc::System>::dealloc (201 samples, 0.40%)cfree (198 samples, 0.40%)[libc.so.6] (65 samples, 0.13%)core::ptr::drop_in_place<core::pin::Pin<alloc::boxed::Box<dyn core::future::future::Future+Output = core::result::Result<(wisp_mux::ws::Frame,core::option::Option<wisp_mux::ws::Frame>),wisp_mux::WispError>+core::marker::Send>>> (242 samples, 0.49%)core::ptr::drop_in_place<alloc::boxed::Box<dyn core::future::future::Future+Output = core::result::Result<(wisp_mux::ws::Frame,core::option::Option<wisp_mux::ws::Frame>),wisp_mux::WispError>+core::marker::Send>> (242 samples, 0.49%)core::ptr::drop_in_place<wisp_mux::fastwebsockets::<impl wisp_mux::ws::WebSocketRead for fastwebsockets::WebSocketRead<tokio::net::tcp::split_owned::OwnedReadHalf>>::wisp_read_split::{{closure}}> (6 samples, 0.01%)__rdl_alloc (53 samples, 0.11%)std::sys::pal::unix::alloc::<impl core::alloc::global::GlobalAlloc for std::alloc::System>::alloc (53 samples, 0.11%)malloc (53 samples, 0.11%)<core::pin::Pin<P> as core::future::future::Future>::poll (10,191 samples, 20.43%)<core::pin::Pin<P> as core::futu..<wisp_mux::ws::AppendingWebSocketRead<R> as wisp_mux::ws::WebSocketRead>::wisp_read_split::_{{closure}} (10,189 samples, 20.43%)<wisp_mux::ws::AppendingWebSocke..wisp_mux::fastwebsockets::<impl wisp_mux::ws::WebSocketRead for fastwebsockets::WebSocketRead<S>>::wisp_read_split (55 samples, 0.11%)alloc::boxed::Box<T>::pin (55 samples, 0.11%)alloc::boxed::Box<T>::new (55 samples, 0.11%)alloc::alloc::exchange_malloc (54 samples, 0.11%)<alloc::alloc::Global as core::alloc::Allocator>::allocate (54 samples, 0.11%)alloc::alloc::Global::alloc_impl (54 samples, 0.11%)alloc::alloc::alloc (54 samples, 0.11%)<core::result::Result<T,E> as core::ops::try_trait::Try>::branch (51 samples, 0.10%)parking_lot::condvar::Condvar::notify_one_slow (7 samples, 0.01%)parking_lot_core::parking_lot::unpark_requeue (7 samples, 0.01%)tokio::runtime::scheduler::multi_thread::park::Unparker::unpark (7 samples, 0.01%)tokio::runtime::scheduler::multi_thread::park::Inner::unpark (7 samples, 0.01%)tokio::runtime::scheduler::multi_thread::worker::<impl tokio::runtime::scheduler::multi_thread::handle::Handle>::schedule_task (34 samples, 0.07%)tokio::runtime::scheduler::multi_thread::worker::with_current (33 samples, 0.07%)tokio::runtime::context::with_scheduler (33 samples, 0.07%)tokio::runtime::scheduler::multi_thread::worker::_<impl tokio::runtime::scheduler::multi_thread::handle::Handle>::schedule_task::_{{closure}} (30 samples, 0.06%)tokio::runtime::scheduler::multi_thread::worker::<impl tokio::runtime::scheduler::multi_thread::handle::Handle>::schedule_local (25 samples, 0.05%)tokio::runtime::task::raw::schedule (10 samples, 0.02%)tokio::runtime::task::raw::RawTask::schedule (5 samples, 0.01%)tokio::runtime::task::state::State::load (11 samples, 0.02%)core::sync::atomic::AtomicUsize::load (11 samples, 0.02%)core::sync::atomic::atomic_load (11 samples, 0.02%)core::task::wake::Waker::wake_by_ref (61 samples, 0.12%)tokio::runtime::task::waker::wake_by_ref (17 samples, 0.03%)tokio::runtime::task::harness::<impl tokio::runtime::task::raw::RawTask>::wake_by_ref (17 samples, 0.03%)tokio::runtime::task::state::State::transition_to_notified_by_ref (12 samples, 0.02%)tokio::runtime::task::state::State::fetch_update_action (12 samples, 0.02%)<flume::async::AsyncSignal as flume::signal::Signal>::fire (67 samples, 0.13%)alloc::collections::vec_deque::VecDeque<T,A>::is_empty (11 samples, 0.02%)alloc::collections::vec_deque::VecDeque<T,A>::pop_front (14 samples, 0.03%)alloc::collections::vec_deque::VecDeque<T,A>::buffer_read (14 samples, 0.03%)core::ptr::read (14 samples, 0.03%)alloc::collections::vec_deque::VecDeque<T,A>::buffer_write (12 samples, 0.02%)core::ptr::write (7 samples, 0.01%)alloc::collections::vec_deque::VecDeque<T,A>::is_full (5 samples, 0.01%)alloc::collections::vec_deque::VecDeque<T,A>::capacity (5 samples, 0.01%)alloc::raw_vec::RawVec<T,A>::capacity (5 samples, 0.01%)alloc::collections::vec_deque::wrap_index (5 samples, 0.01%)alloc::collections::vec_deque::VecDeque<T,A>::push_back (29 samples, 0.06%)alloc::collections::vec_deque::VecDeque<T,A>::to_physical_idx (6 samples, 0.01%)alloc::collections::vec_deque::VecDeque<T,A>::wrap_add (6 samples, 0.01%)core::mem::drop (5 samples, 0.01%)core::ptr::drop_in_place<std::sync::mutex::MutexGuard<flume::Chan<bytes::bytes::Bytes>>> (5 samples, 0.01%)<std::sync::mutex::MutexGuard<T> as core::ops::drop::Drop>::drop (5 samples, 0.01%)std::sys::sync::mutex::futex::Mutex::unlock (5 samples, 0.01%)core::sync::atomic::AtomicU32::swap (5 samples, 0.01%)core::sync::atomic::atomic_swap (5 samples, 0.01%)core::option::Option<T>::map (15 samples, 0.03%)flume::Shared<T>::send::_{{closure}} (14 samples, 0.03%)flume::Hook<T,S>::fire_send (8 samples, 0.02%)flume::Hook<T,S>::lock (7 samples, 0.01%)core::option::Option<T>::as_ref (7 samples, 0.01%)std::sync::poison::Flag::done (6 samples, 0.01%)core::ptr::drop_in_place<std::sync::mutex::MutexGuard<flume::Chan<bytes::bytes::Bytes>>> (101 samples, 0.20%)<std::sync::mutex::MutexGuard<T> as core::ops::drop::Drop>::drop (101 samples, 0.20%)std::sys::sync::mutex::futex::Mutex::unlock (92 samples, 0.18%)core::sync::atomic::AtomicU32::swap (90 samples, 0.18%)core::sync::atomic::atomic_swap (90 samples, 0.18%)std::sync::mutex::MutexGuard<T>::new (10 samples, 0.02%)std::sync::poison::Flag::guard (10 samples, 0.02%)std::thread::panicking (10 samples, 0.02%)std::panicking::panicking (10 samples, 0.02%)std::panicking::panic_count::count_is_zero (10 samples, 0.02%)core::sync::atomic::AtomicUsize::load (7 samples, 0.01%)core::sync::atomic::atomic_load (7 samples, 0.01%)core::sync::atomic::AtomicU32::compare_exchange (122 samples, 0.24%)core::sync::atomic::atomic_compare_exchange (122 samples, 0.24%)<flume::async::SendFut<T> as core::future::future::Future>::poll (487 samples, 0.98%)flume::Shared<T>::send (404 samples, 0.81%)flume::wait_lock (137 samples, 0.27%)std::sync::mutex::Mutex<T>::lock (135 samples, 0.27%)std::sys::sync::mutex::futex::Mutex::lock (125 samples, 0.25%)__rdl_alloc (42 samples, 0.08%)std::sys::pal::unix::alloc::<impl core::alloc::global::GlobalAlloc for std::alloc::System>::alloc (42 samples, 0.08%)malloc (41 samples, 0.08%)<wisp_mux::ws::AppendingWebSocketRead<R> as wisp_mux::ws::WebSocketRead>::wisp_read_split (51 samples, 0.10%)alloc::boxed::Box<T>::pin (51 samples, 0.10%)alloc::boxed::Box<T>::new (51 samples, 0.10%)alloc::alloc::exchange_malloc (47 samples, 0.09%)<alloc::alloc::Global as core::alloc::Allocator>::allocate (46 samples, 0.09%)alloc::alloc::Global::alloc_impl (46 samples, 0.09%)alloc::alloc::alloc (46 samples, 0.09%)<wisp_mux::ws::Payload as core::ops::deref::Deref>::deref (6 samples, 0.01%)[libc.so.6] (159 samples, 0.32%)[libc.so.6] (87 samples, 0.17%)[libc.so.6] (10 samples, 0.02%)[libc.so.6] (388 samples, 0.78%)__lll_lock_wait_private (20 samples, 0.04%)<alloc::alloc::Global as core::alloc::Allocator>::deallocate (432 samples, 0.87%)alloc::alloc::dealloc (432 samples, 0.87%)__rdl_dealloc (432 samples, 0.87%)std::sys::pal::unix::alloc::<impl core::alloc::global::GlobalAlloc for std::alloc::System>::dealloc (432 samples, 0.87%)cfree (431 samples, 0.86%)__lll_lock_wake_private (6 samples, 0.01%)core::mem::drop (434 samples, 0.87%)core::ptr::drop_in_place<alloc::boxed::Box<bytes::bytes_mut::Shared>> (434 samples, 0.87%)core::ptr::drop_in_place<bytes::bytes_mut::Shared> (434 samples, 0.87%)core::ptr::drop_in_place<alloc::vec::Vec<u8>> (434 samples, 0.87%)core::ptr::drop_in_place<alloc::raw_vec::RawVec<u8>> (434 samples, 0.87%)<alloc::raw_vec::RawVec<T,A> as core::ops::drop::Drop>::drop (434 samples, 0.87%)core::sync::atomic::AtomicUsize::fetch_sub (59 samples, 0.12%)core::sync::atomic::atomic_sub (59 samples, 0.12%)bytes::bytes_mut::release_shared (496 samples, 0.99%)core::ptr::drop_in_place<bytes::bytes_mut::BytesMut> (591 samples, 1.19%)<bytes::bytes_mut::BytesMut as core::ops::drop::Drop>::drop (591 samples, 1.19%)cfree (88 samples, 0.18%)[libc.so.6] (39 samples, 0.08%)<alloc::boxed::Box<T,A> as core::ops::drop::Drop>::drop (118 samples, 0.24%)<alloc::alloc::Global as core::alloc::Allocator>::deallocate (115 samples, 0.23%)alloc::alloc::dealloc (115 samples, 0.23%)__rdl_dealloc (115 samples, 0.23%)std::sys::pal::unix::alloc::<impl core::alloc::global::GlobalAlloc for std::alloc::System>::dealloc (115 samples, 0.23%)cfree (115 samples, 0.23%)[libc.so.6] (45 samples, 0.09%)core::ptr::drop_in_place<core::pin::Pin<alloc::boxed::Box<dyn core::future::future::Future+Output = core::result::Result<(wisp_mux::ws::Frame,core::option::Option<wisp_mux::ws::Frame>),wisp_mux::WispError>+core::marker::Send>>> (171 samples, 0.34%)core::ptr::drop_in_place<alloc::boxed::Box<dyn core::future::future::Future+Output = core::result::Result<(wisp_mux::ws::Frame,core::option::Option<wisp_mux::ws::Frame>),wisp_mux::WispError>+core::marker::Send>> (171 samples, 0.34%)core::ptr::drop_in_place<<wisp_mux::ws::AppendingWebSocketRead<fastwebsockets::WebSocketRead<tokio::net::tcp::split_owned::OwnedReadHalf>> as wisp_mux::ws::WebSocketRead>::wisp_read_frame::{{closure}}> (5 samples, 0.01%)core::ptr::drop_in_place<dashmap::mapref::one::Ref<u32,wisp_mux::MuxMapValue>> (70 samples, 0.14%)core::ptr::drop_in_place<lock_api::rwlock::RwLockReadGuard<dashmap::lock::RawRwLock,hashbrown::map::HashMap<u32,dashmap::util::SharedValue<wisp_mux::MuxMapValue>,std::hash::random::RandomState>>> (70 samples, 0.14%)<lock_api::rwlock::RwLockReadGuard<R,T> as core::ops::drop::Drop>::drop (70 samples, 0.14%)<dashmap::lock::RawRwLock as lock_api::rwlock::RawRwLock>::unlock_shared (70 samples, 0.14%)core::sync::atomic::AtomicUsize::fetch_sub (68 samples, 0.14%)core::sync::atomic::atomic_sub (68 samples, 0.14%)core::option::Option<T>::take (5 samples, 0.01%)core::mem::replace (5 samples, 0.01%)core::ptr::read (5 samples, 0.01%)<flume::async::SendFut<T> as core::ops::drop::Drop>::drop (23 samples, 0.05%)flume::async::SendFut<T>::reset_hook (23 samples, 0.05%)core::ptr::drop_in_place<flume::async::SendFut<bytes::bytes::Bytes>> (34 samples, 0.07%)core::ptr::drop_in_place<wisp_mux::packet::PacketType> (17 samples, 0.03%)core::ptr::drop_in_place<wisp_mux::ws::Payload> (10 samples, 0.02%)core::slice::<impl [T]>::get_unchecked (10 samples, 0.02%)<usize as core::slice::index::SliceIndex<[T]>>::get_unchecked (10 samples, 0.02%)core::slice::index::get_noubcheck (10 samples, 0.02%)core::num::<impl usize>::checked_add (6 samples, 0.01%)core::sync::atomic::AtomicUsize::compare_exchange_weak (65 samples, 0.13%)core::sync::atomic::atomic_compare_exchange_weak (65 samples, 0.13%)<dashmap::DashMap<K,V,S> as dashmap::t::Map<K,V,S>>::_yield_read_shard (159 samples, 0.32%)lock_api::rwlock::RwLock<R,T>::read (146 samples, 0.29%)<dashmap::lock::RawRwLock as lock_api::rwlock::RawRwLock>::lock_shared (146 samples, 0.29%)dashmap::lock::RawRwLock::try_lock_shared_fast (146 samples, 0.29%)core::sync::atomic::AtomicUsize::load (75 samples, 0.15%)core::sync::atomic::atomic_load (75 samples, 0.15%)core::num::<impl u64>::rotate_left (18 samples, 0.04%)<core::hash::sip::Sip13Rounds as core::hash::sip::Sip>::c_rounds (30 samples, 0.06%)core::num::<impl u64>::wrapping_add (8 samples, 0.02%)core::num::<impl u64>::rotate_left (14 samples, 0.03%)<std::hash::random::DefaultHasher as core::hash::Hasher>::finish (86 samples, 0.17%)<core::hash::sip::SipHasher13 as core::hash::Hasher>::finish (86 samples, 0.17%)<core::hash::sip::Hasher<S> as core::hash::Hasher>::finish (86 samples, 0.17%)<core::hash::sip::Sip13Rounds as core::hash::sip::Sip>::d_rounds (39 samples, 0.08%)core::num::<impl u64>::wrapping_add (17 samples, 0.03%)<std::hash::random::RandomState as core::hash::BuildHasher>::build_hasher (33 samples, 0.07%)core::hash::sip::SipHasher13::new_with_keys (22 samples, 0.04%)core::hash::sip::Hasher<S>::new_with_keys (22 samples, 0.04%)core::hash::sip::Hasher<S>::reset (22 samples, 0.04%)<std::hash::random::DefaultHasher as core::hash::Hasher>::write (37 samples, 0.07%)<core::hash::sip::SipHasher13 as core::hash::Hasher>::write (37 samples, 0.07%)<core::hash::sip::Hasher<S> as core::hash::Hasher>::write (36 samples, 0.07%)core::hash::sip::u8to64_le (15 samples, 0.03%)dashmap::DashMap<K,V,S>::hash_usize (160 samples, 0.32%)core::hash::impls::<impl core::hash::Hash for &T>::hash (41 samples, 0.08%)core::hash::impls::<impl core::hash::Hash for u32>::hash (41 samples, 0.08%)core::hash::Hasher::write_u32 (41 samples, 0.08%)<core::hash::sip::Sip13Rounds as core::hash::sip::Sip>::c_rounds (10 samples, 0.02%)core::num::<impl u64>::rotate_left (8 samples, 0.02%)core::num::<impl u64>::rotate_left (12 samples, 0.02%)<std::hash::random::DefaultHasher as core::hash::Hasher>::finish (57 samples, 0.11%)<core::hash::sip::SipHasher13 as core::hash::Hasher>::finish (57 samples, 0.11%)<core::hash::sip::Hasher<S> as core::hash::Hasher>::finish (57 samples, 0.11%)<core::hash::sip::Sip13Rounds as core::hash::sip::Sip>::d_rounds (31 samples, 0.06%)core::num::<impl u64>::wrapping_add (13 samples, 0.03%)<std::hash::random::RandomState as core::hash::BuildHasher>::build_hasher (9 samples, 0.02%)<std::hash::random::DefaultHasher as core::hash::Hasher>::write (20 samples, 0.04%)<core::hash::sip::SipHasher13 as core::hash::Hasher>::write (20 samples, 0.04%)<core::hash::sip::Hasher<S> as core::hash::Hasher>::write (18 samples, 0.04%)core::hash::sip::u8to64_le (14 samples, 0.03%)hashbrown::map::make_hash (88 samples, 0.18%)core::hash::impls::<impl core::hash::Hash for u32>::hash (22 samples, 0.04%)core::hash::Hasher::write_u32 (22 samples, 0.04%)<hashbrown::raw::bitmask::BitMaskIter as core::iter::traits::iterator::Iterator>::next (12 samples, 0.02%)hashbrown::raw::bitmask::BitMask::lowest_set_bit (12 samples, 0.02%)hashbrown::map::equivalent_key::_{{closure}} (60 samples, 0.12%)<Q as hashbrown::Equivalent<K>>::equivalent (60 samples, 0.12%)core::cmp::impls::<impl core::cmp::PartialEq<&B> for &A>::eq (60 samples, 0.12%)core::cmp::impls::<impl core::cmp::PartialEq for u32>::eq (60 samples, 0.12%)hashbrown::raw::Bucket<T>::as_ref (10 samples, 0.02%)hashbrown::raw::Bucket<T>::as_ptr (10 samples, 0.02%)core::ptr::mut_ptr::<impl *mut T>::sub (10 samples, 0.02%)core::ptr::mut_ptr::<impl *mut T>::offset (10 samples, 0.02%)hashbrown::raw::RawTable<T,A>::find::_{{closure}} (73 samples, 0.15%)hashbrown::raw::RawTableInner::probe_seq (8 samples, 0.02%)hashbrown::raw::h2 (5 samples, 0.01%)hashbrown::raw::sse2::Group::load (67 samples, 0.13%)core::core_arch::x86::sse2::_mm_loadu_si128 (67 samples, 0.13%)core::intrinsics::copy_nonoverlapping (67 samples, 0.13%)dashmap::DashMap<K,V,S>::get (640 samples, 1.28%)<dashmap::DashMap<K,V,S> as dashmap::t::Map<K,V,S>>::_get (639 samples, 1.28%)hashbrown::map::HashMap<K,V,S,A>::get_key_value (300 samples, 0.60%)hashbrown::map::HashMap<K,V,S,A>::get_inner (298 samples, 0.60%)hashbrown::raw::RawTable<T,A>::get (203 samples, 0.41%)hashbrown::raw::RawTable<T,A>::find (202 samples, 0.41%)hashbrown::raw::RawTableInner::find_inner (202 samples, 0.41%)hashbrown::raw::sse2::Group::match_byte (24 samples, 0.05%)core::core_arch::x86::sse2::_mm_movemask_epi8 (24 samples, 0.05%)parking_lot::condvar::Condvar::notify_one_slow (9 samples, 0.02%)parking_lot_core::parking_lot::unpark_requeue (9 samples, 0.02%)parking_lot_core::parking_lot::FairTimeout::should_timeout (5 samples, 0.01%)std::sys::pal::unix::time::Timespec::now (5 samples, 0.01%)clock_gettime (5 samples, 0.01%)tokio::runtime::task::raw::RawTask::schedule (15 samples, 0.03%)tokio::runtime::scheduler::multi_thread::worker::<impl tokio::runtime::scheduler::multi_thread::handle::Handle>::schedule_task (15 samples, 0.03%)tokio::runtime::scheduler::multi_thread::worker::with_current (15 samples, 0.03%)tokio::runtime::context::with_scheduler (15 samples, 0.03%)tokio::runtime::scheduler::multi_thread::worker::_<impl tokio::runtime::scheduler::multi_thread::handle::Handle>::schedule_task::_{{closure}} (15 samples, 0.03%)tokio::runtime::scheduler::multi_thread::worker::<impl tokio::runtime::scheduler::multi_thread::handle::Handle>::schedule_local (15 samples, 0.03%)event_listener::Event<T>::notify (29 samples, 0.06%)event_listener::sys::<impl event_listener::Inner<T>>::notify (25 samples, 0.05%)event_listener::sys::Inner<T>::notify (22 samples, 0.04%)tokio::runtime::task::waker::wake_by_val (19 samples, 0.04%)tokio::runtime::task::harness::<impl tokio::runtime::task::raw::RawTask>::wake_by_val (19 samples, 0.04%)<wisp_mux::ws::Payload as bytes::buf::buf_impl::Buf>::remaining (10 samples, 0.02%)<&mut T as bytes::buf::buf_impl::Buf>::chunk (7 samples, 0.01%)<wisp_mux::ws::Payload as bytes::buf::buf_impl::Buf>::chunk (7 samples, 0.01%)<&mut T as bytes::buf::buf_impl::Buf>::remaining (11 samples, 0.02%)<wisp_mux::ws::Payload as bytes::buf::buf_impl::Buf>::remaining (11 samples, 0.02%)bytes::bytes_mut::BytesMut::advance_unchecked (9 samples, 0.02%)<wisp_mux::ws::Payload as bytes::buf::buf_impl::Buf>::advance (17 samples, 0.03%)<bytes::bytes_mut::BytesMut as bytes::buf::buf_impl::Buf>::advance (14 samples, 0.03%)bytes::buf::buf_impl::Buf::get_u32_le (41 samples, 0.08%)<&mut T as bytes::buf::buf_impl::Buf>::chunk (5 samples, 0.01%)<wisp_mux::ws::Payload as bytes::buf::buf_impl::Buf>::chunk (5 samples, 0.01%)bytes::bytes_mut::BytesMut::advance_unchecked (13 samples, 0.03%)wisp_mux::packet::Packet::maybe_handle_extension::_{{closure}} (242 samples, 0.49%)bytes::buf::buf_impl::Buf::get_u8 (33 samples, 0.07%)<wisp_mux::ws::Payload as bytes::buf::buf_impl::Buf>::advance (21 samples, 0.04%)<bytes::bytes_mut::BytesMut as bytes::buf::buf_impl::Buf>::advance (19 samples, 0.04%)wisp_mux::MuxInner::client_loop::_{{closure}} (13,181 samples, 26.43%)wisp_mux::MuxInner::client_loop::_{{closur..wisp_mux::ws::<impl core::convert::From<wisp_mux::ws::Payload> for bytes::bytes_mut::BytesMut>::from (13 samples, 0.03%)core::option::Option<T>::map (7 samples, 0.01%)core::ops::function::FnOnce::call_once (7 samples, 0.01%)<alloc::sync::Arc<T,A> as core::clone::Clone>::clone (7 samples, 0.01%)core::sync::atomic::AtomicUsize::fetch_add (7 samples, 0.01%)core::sync::atomic::atomic_add (7 samples, 0.01%)flume::Shared<T>::recv_sync (18 samples, 0.04%)flume::Shared<T>::recv (18 samples, 0.04%)flume::wait_lock (9 samples, 0.02%)std::sync::mutex::Mutex<T>::lock (9 samples, 0.02%)std::sys::sync::mutex::futex::Mutex::lock (9 samples, 0.02%)core::sync::atomic::AtomicU32::compare_exchange (9 samples, 0.02%)core::sync::atomic::atomic_compare_exchange (9 samples, 0.02%)<flume::async::RecvFut<T> as core::future::future::Future>::poll (34 samples, 0.07%)flume::async::RecvFut<T>::poll_inner (34 samples, 0.07%)core::ops::function::impls::<impl core::ops::function::FnMut<A> for &mut F>::call_mut (13,239 samples, 26.55%)core::ops::function::impls::<impl core::op..wisp_mux::MuxInner::as_future::_{{closure}}::_{{closure}}::_{{closure}} (13,239 samples, 26.55%)wisp_mux::MuxInner::as_future::_{{closure}..futures_util::future::future::FutureExt::poll_unpin (13,230 samples, 26.53%)futures_util::future::future::FutureExt::p..<core::pin::Pin<P> as core::future::future::Future>::poll (13,230 samples, 26.53%)<core::pin::Pin<P> as core::future::future..<futures_util::future::future::fuse::Fuse<Fut> as core::future::future::Future>::poll (13,230 samples, 26.53%)<futures_util::future::future::fuse::Fuse<..wisp_mux::MuxInner::stream_loop::_{{closure}} (49 samples, 0.10%)<core::panic::unwind_safe::AssertUnwindSafe<F> as core::ops::function::FnOnce<()>>::call_once (36,910 samples, 74.01%)<core::panic::unwind_safe::AssertUnwindSafe<F> as core::ops::function::FnOnce<()>>::call_oncetokio::runtime::task::harness::poll_future::_{{closure}} (36,910 samples, 74.01%)tokio::runtime::task::harness::poll_future::_{{closure}}tokio::runtime::task::core::Core<T,S>::poll (36,910 samples, 74.01%)tokio::runtime::task::core::Core<T,S>::polltokio::loom::std::unsafe_cell::UnsafeCell<T>::with_mut (36,909 samples, 74.01%)tokio::loom::std::unsafe_cell::UnsafeCell<T>::with_muttokio::runtime::task::core::Core<T,S>::poll::_{{closure}} (36,909 samples, 74.01%)tokio::runtime::task::core::Core<T,S>::poll::_{{closure}}wisp_mux::MuxInner::client_into_future::_{{closure}} (13,270 samples, 26.61%)wisp_mux::MuxInner::client_into_future::_{{..wisp_mux::MuxInner::as_future::_{{closure}} (13,262 samples, 26.59%)wisp_mux::MuxInner::as_future::_{{closure}}<futures_util::future::poll_fn::PollFn<F> as core::future::future::Future>::poll (13,253 samples, 26.57%)<futures_util::future::poll_fn::PollFn<F> a..wisp_mux::MuxInner::as_future::_{{closure}}::_{{closure}} (13,253 samples, 26.57%)wisp_mux::MuxInner::as_future::_{{closure}}..tokio::runtime::task::harness::poll_future (36,912 samples, 74.01%)tokio::runtime::task::harness::poll_futurestd::panic::catch_unwind (36,912 samples, 74.01%)std::panic::catch_unwindstd::panicking::try (36,912 samples, 74.01%)std::panicking::trystd::panicking::try::do_call (36,912 samples, 74.01%)std::panicking::try::do_callcore::sync::atomic::AtomicUsize::compare_exchange (6 samples, 0.01%)core::sync::atomic::atomic_compare_exchange (6 samples, 0.01%)tokio::runtime::task::state::State::transition_to_idle (17 samples, 0.03%)tokio::runtime::task::state::State::fetch_update_action (17 samples, 0.03%)tokio::runtime::task::state::State::transition_to_idle::_{{closure}} (10 samples, 0.02%)tokio::runtime::task::state::Snapshot::ref_inc (5 samples, 0.01%)core::sync::atomic::AtomicUsize::compare_exchange (7 samples, 0.01%)core::sync::atomic::atomic_compare_exchange (7 samples, 0.01%)tokio::runtime::task::state::Snapshot::is_notified (8 samples, 0.02%)tokio::runtime::task::state::State::transition_to_running (19 samples, 0.04%)tokio::runtime::task::state::State::fetch_update_action (19 samples, 0.04%)tokio::runtime::task::state::State::transition_to_running::_{{closure}} (12 samples, 0.02%)tokio::runtime::coop::budget (37,182 samples, 74.55%)tokio::runtime::coop::budgettokio::runtime::coop::with_budget (37,182 samples, 74.55%)tokio::runtime::coop::with_budgettokio::runtime::scheduler::multi_thread::worker::Context::run_task::_{{closure}} (37,166 samples, 74.52%)tokio::runtime::scheduler::multi_thread::worker::Context::run_task::_{{closure}}tokio::runtime::task::LocalNotified<S>::run (37,131 samples, 74.45%)tokio::runtime::task::LocalNotified<S>::runtokio::runtime::task::raw::RawTask::poll (37,131 samples, 74.45%)tokio::runtime::task::raw::RawTask::polltokio::runtime::task::raw::poll (37,120 samples, 74.43%)tokio::runtime::task::raw::polltokio::runtime::task::harness::Harness<T,S>::poll (37,120 samples, 74.43%)tokio::runtime::task::harness::Harness<T,S>::polltokio::runtime::task::harness::Harness<T,S>::poll_inner (36,975 samples, 74.14%)tokio::runtime::task::harness::Harness<T,S>::poll_innercore::sync::atomic::AtomicUsize::load (16 samples, 0.03%)core::sync::atomic::atomic_load (16 samples, 0.03%)std::sys::pal::unix::time::Timespec::now (5 samples, 0.01%)clock_gettime (5 samples, 0.01%)__vdso_clock_gettime (5 samples, 0.01%)parking_lot_core::parking_lot::FairTimeout::should_timeout (8 samples, 0.02%)parking_lot_core::parking_lot::lock_bucket_pair (27 samples, 0.05%)parking_lot_core::word_lock::WordLock::lock (23 samples, 0.05%)core::sync::atomic::AtomicUsize::compare_exchange_weak (23 samples, 0.05%)core::sync::atomic::atomic_compare_exchange_weak (23 samples, 0.05%)parking_lot::condvar::Condvar::notify_one_slow (64 samples, 0.13%)parking_lot_core::parking_lot::unpark_requeue (64 samples, 0.13%)parking_lot_core::parking_lot::unlock_bucket_pair (8 samples, 0.02%)parking_lot_core::word_lock::WordLock::unlock (8 samples, 0.02%)core::sync::atomic::AtomicUsize::fetch_sub (8 samples, 0.02%)core::sync::atomic::atomic_sub (8 samples, 0.02%)syscall (10 samples, 0.02%)tokio::runtime::driver::IoHandle::unpark (15 samples, 0.03%)tokio::runtime::io::driver::Handle::unpark (15 samples, 0.03%)mio::waker::Waker::wake (15 samples, 0.03%)mio::sys::unix::waker::fdbased::Waker::wake (15 samples, 0.03%)mio::sys::unix::waker::eventfd::WakerInternal::wake (15 samples, 0.03%)<&std::fs::File as std::io::Write>::write (15 samples, 0.03%)std::sys::pal::unix::fs::File::write (15 samples, 0.03%)std::sys::pal::unix::fd::FileDesc::write (15 samples, 0.03%)write (14 samples, 0.03%)core::sync::atomic::AtomicUsize::swap (6 samples, 0.01%)core::sync::atomic::atomic_swap (6 samples, 0.01%)tokio::runtime::scheduler::multi_thread::park::Unparker::unpark (15 samples, 0.03%)tokio::runtime::scheduler::multi_thread::park::Inner::unpark (15 samples, 0.03%)core::ptr::drop_in_place<tokio::loom::std::parking_lot::MutexGuard<tokio::runtime::scheduler::multi_thread::worker::Synced>> (5 samples, 0.01%)core::ptr::drop_in_place<lock_api::mutex::MutexGuard<parking_lot::raw_mutex::RawMutex,tokio::runtime::scheduler::multi_thread::worker::Synced>> (5 samples, 0.01%)<lock_api::mutex::MutexGuard<R,T> as core::ops::drop::Drop>::drop (5 samples, 0.01%)<parking_lot::raw_mutex::RawMutex as lock_api::mutex::RawMutex>::unlock (5 samples, 0.01%)core::sync::atomic::AtomicU8::compare_exchange (5 samples, 0.01%)core::sync::atomic::atomic_compare_exchange (5 samples, 0.01%)core::sync::atomic::AtomicUsize::fetch_add (6 samples, 0.01%)core::sync::atomic::atomic_add (6 samples, 0.01%)tokio::runtime::scheduler::multi_thread::idle::Idle::notify_should_wakeup (8 samples, 0.02%)tokio::runtime::scheduler::multi_thread::worker::Context::run_task (37,307 samples, 74.81%)tokio::runtime::scheduler::multi_thread::worker::Context::run_tasktokio::runtime::scheduler::multi_thread::worker::Core::transition_from_searching (122 samples, 0.24%)tokio::runtime::scheduler::multi_thread::worker::<impl tokio::runtime::scheduler::multi_thread::handle::Handle>::transition_worker_from_searching (122 samples, 0.24%)tokio::runtime::scheduler::multi_thread::worker::<impl tokio::runtime::scheduler::multi_thread::handle::Handle>::notify_parked_local (15 samples, 0.03%)tokio::runtime::scheduler::multi_thread::idle::Idle::worker_to_notify (15 samples, 0.03%)tokio::runtime::scheduler::multi_thread::worker::Core::next_local_task (5 samples, 0.01%)tokio::runtime::scheduler::multi_thread::stats::Stats::tuned_global_queue_interval (19 samples, 0.04%)tokio::runtime::scheduler::multi_thread::worker::Core::next_task (45 samples, 0.09%)tokio::runtime::scheduler::multi_thread::worker::Core::tune_global_queue_interval (22 samples, 0.04%)<alloc::sync::Arc<T,A> as core::ops::deref::Deref>::deref (16 samples, 0.03%)alloc::sync::Arc<T,A>::inner (16 samples, 0.03%)core::ptr::non_null::NonNull<T>::as_ref (16 samples, 0.03%)core::sync::atomic::AtomicU32::load (31 samples, 0.06%)core::sync::atomic::atomic_load (31 samples, 0.06%)core::sync::atomic::AtomicU64::compare_exchange (9 samples, 0.02%)core::sync::atomic::atomic_compare_exchange (9 samples, 0.02%)core::sync::atomic::AtomicU64::load (85 samples, 0.17%)core::sync::atomic::atomic_load (85 samples, 0.17%)tokio::loom::std::unsafe_cell::UnsafeCell<T>::with (9 samples, 0.02%)tokio::runtime::scheduler::multi_thread::queue::Steal<T>::steal_into2::_{{closure}} (9 samples, 0.02%)core::ptr::read (9 samples, 0.02%)tokio::runtime::scheduler::multi_thread::queue::Steal<T>::steal_into2 (170 samples, 0.34%)tokio::runtime::scheduler::multi_thread::queue::Steal<T>::steal_into (184 samples, 0.37%)tokio::runtime::scheduler::multi_thread::worker::Core::steal_work (232 samples, 0.47%)[libc.so.6] (44,214 samples, 88.65%)[libc.so.6][libc.so.6] (44,211 samples, 88.65%)[libc.so.6]std::sys::pal::unix::thread::Thread::new::thread_start (44,208 samples, 88.64%)std::sys::pal::unix::thread::Thread::new::thread_start<alloc::boxed::Box<F,A> as core::ops::function::FnOnce<Args>>::call_once (44,208 samples, 88.64%)<alloc::boxed::Box<F,A> as core::ops::function::FnOnce<Args>>::call_once<alloc::boxed::Box<F,A> as core::ops::function::FnOnce<Args>>::call_once (44,208 samples, 88.64%)<alloc::boxed::Box<F,A> as core::ops::function::FnOnce<Args>>::call_oncecore::ops::function::FnOnce::call_once{{vtable.shim}} (44,208 samples, 88.64%)core::ops::function::FnOnce::call_once{{vtable.shim}}std::thread::Builder::spawn_unchecked_::_{{closure}} (44,208 samples, 88.64%)std::thread::Builder::spawn_unchecked_::_{{closure}}std::panic::catch_unwind (44,208 samples, 88.64%)std::panic::catch_unwindstd::panicking::try (44,208 samples, 88.64%)std::panicking::trystd::panicking::try::do_call (44,208 samples, 88.64%)std::panicking::try::do_call<core::panic::unwind_safe::AssertUnwindSafe<F> as core::ops::function::FnOnce<()>>::call_once (44,208 samples, 88.64%)<core::panic::unwind_safe::AssertUnwindSafe<F> as core::ops::function::FnOnce<()>>::call_oncestd::thread::Builder::spawn_unchecked_::_{{closure}}::_{{closure}} (44,208 samples, 88.64%)std::thread::Builder::spawn_unchecked_::_{{closure}}::_{{closure}}std::sys::backtrace::__rust_begin_short_backtrace (44,208 samples, 88.64%)std::sys::backtrace::__rust_begin_short_backtracetokio::runtime::blocking::pool::Spawner::spawn_thread::_{{closure}} (44,208 samples, 88.64%)tokio::runtime::blocking::pool::Spawner::spawn_thread::_{{closure}}tokio::runtime::blocking::pool::Inner::run (44,208 samples, 88.64%)tokio::runtime::blocking::pool::Inner::runtokio::runtime::blocking::pool::Task::run (44,190 samples, 88.61%)tokio::runtime::blocking::pool::Task::runtokio::runtime::task::UnownedTask<S>::run (44,190 samples, 88.61%)tokio::runtime::task::UnownedTask<S>::runtokio::runtime::task::raw::RawTask::poll (44,190 samples, 88.61%)tokio::runtime::task::raw::RawTask::polltokio::runtime::task::raw::poll (44,189 samples, 88.60%)tokio::runtime::task::raw::polltokio::runtime::task::harness::Harness<T,S>::poll (44,189 samples, 88.60%)tokio::runtime::task::harness::Harness<T,S>::polltokio::runtime::task::harness::Harness<T,S>::poll_inner (44,189 samples, 88.60%)tokio::runtime::task::harness::Harness<T,S>::poll_innertokio::runtime::task::harness::poll_future (44,189 samples, 88.60%)tokio::runtime::task::harness::poll_futurestd::panic::catch_unwind (44,189 samples, 88.60%)std::panic::catch_unwindstd::panicking::try (44,189 samples, 88.60%)std::panicking::trystd::panicking::try::do_call (44,189 samples, 88.60%)std::panicking::try::do_call<core::panic::unwind_safe::AssertUnwindSafe<F> as core::ops::function::FnOnce<()>>::call_once (44,189 samples, 88.60%)<core::panic::unwind_safe::AssertUnwindSafe<F> as core::ops::function::FnOnce<()>>::call_oncetokio::runtime::task::harness::poll_future::_{{closure}} (44,189 samples, 88.60%)tokio::runtime::task::harness::poll_future::_{{closure}}tokio::runtime::task::core::Core<T,S>::poll (44,189 samples, 88.60%)tokio::runtime::task::core::Core<T,S>::polltokio::loom::std::unsafe_cell::UnsafeCell<T>::with_mut (44,189 samples, 88.60%)tokio::loom::std::unsafe_cell::UnsafeCell<T>::with_muttokio::runtime::task::core::Core<T,S>::poll::_{{closure}} (44,189 samples, 88.60%)tokio::runtime::task::core::Core<T,S>::poll::_{{closure}}<tokio::runtime::blocking::task::BlockingTask<T> as core::future::future::Future>::poll (44,189 samples, 88.60%)<tokio::runtime::blocking::task::BlockingTask<T> as core::future::future::Future>::polltokio::runtime::scheduler::multi_thread::worker::Launch::launch::_{{closure}} (44,188 samples, 88.60%)tokio::runtime::scheduler::multi_thread::worker::Launch::launch::_{{closure}}tokio::runtime::scheduler::multi_thread::worker::run (44,188 samples, 88.60%)tokio::runtime::scheduler::multi_thread::worker::runtokio::runtime::context::runtime::enter_runtime (44,188 samples, 88.60%)tokio::runtime::context::runtime::enter_runtimetokio::runtime::scheduler::multi_thread::worker::run::_{{closure}} (44,188 samples, 88.60%)tokio::runtime::scheduler::multi_thread::worker::run::_{{closure}}tokio::runtime::context::set_scheduler (44,188 samples, 88.60%)tokio::runtime::context::set_schedulerstd::thread::local::LocalKey<T>::with (44,188 samples, 88.60%)std::thread::local::LocalKey<T>::withstd::thread::local::LocalKey<T>::try_with (44,188 samples, 88.60%)std::thread::local::LocalKey<T>::try_withtokio::runtime::context::set_scheduler::_{{closure}} (44,188 samples, 88.60%)tokio::runtime::context::set_scheduler::_{{closure}}tokio::runtime::context::scoped::Scoped<T>::set (44,188 samples, 88.60%)tokio::runtime::context::scoped::Scoped<T>::settokio::runtime::scheduler::multi_thread::worker::run::_{{closure}}::_{{closure}} (44,188 samples, 88.60%)tokio::runtime::scheduler::multi_thread::worker::run::_{{closure}}::_{{closure}}tokio::runtime::scheduler::multi_thread::worker::Context::run (44,188 samples, 88.60%)tokio::runtime::scheduler::multi_thread::worker::Context::runtokio::runtime::scheduler::multi_thread::worker::Core::tick (11 samples, 0.02%)syscall (5 samples, 0.01%)[simple-wisp-client] (20 samples, 0.04%)tokio::runtime::task::raw::poll (5 samples, 0.01%)<wisp_mux::ws::AppendingWebSocketRead<R> as wisp_mux::ws::WebSocketRead>::wisp_read_split::_{{closure}} (10 samples, 0.02%)<wisp_mux::ws::Payload as bytes::buf::buf_impl::Buf>::advance (5 samples, 0.01%)[libc.so.6] (23 samples, 0.05%)__madvise (8 samples, 0.02%)__send (7 samples, 0.01%)bytes::bytes_mut::BytesMut::advance_unchecked (5 samples, 0.01%)bytes::bytes_mut::BytesMut::reserve_inner (10 samples, 0.02%)bytes::bytes_mut::BytesMut::split_to (12 samples, 0.02%)core::ptr::drop_in_place<<wisp_mux::ws::AppendingWebSocketRead<fastwebsockets::WebSocketRead<tokio::net::tcp::split_owned::OwnedReadHalf>> as wisp_mux::ws::WebSocketRead>::wisp_read_frame::{{closure}}> (5 samples, 0.01%)core::ptr::drop_in_place<flume::async::SendFut<bytes::bytes::Bytes>> (6 samples, 0.01%)core::ptr::drop_in_place<wisp_mux::fastwebsockets::<impl wisp_mux::ws::WebSocketRead for fastwebsockets::WebSocketRead<tokio::net::tcp::split_owned::OwnedReadHalf>>::wisp_read_split::{{closure}}> (10 samples, 0.02%)core::ptr::drop_in_place<wisp_mux::fastwebsockets::<impl wisp_mux::ws::WebSocketWrite for fastwebsockets::WebSocketWrite<tokio::net::tcp::split_owned::OwnedWriteHalf>>::wisp_write_split::{{closure}}> (100 samples, 0.20%)core::ptr::drop_in_place<wisp_mux::packet::PacketType> (8 samples, 0.02%)core::ptr::drop_in_place<wisp_mux::stream::MuxStreamWrite::write_payload_internal::{{closure}}> (9 samples, 0.02%)dashmap::DashMap<K,V,S>::get (5 samples, 0.01%)event_listener::sys::Inner<T>::remove (11 samples, 0.02%)core::ptr::drop_in_place<fastwebsockets::frame::Frame> (45 samples, 0.09%)core::ptr::drop_in_place<fastwebsockets::frame::Payload> (45 samples, 0.09%)fastwebsockets::WebSocketWrite<S>::write_frame::_{{closure}} (77 samples, 0.15%)fastwebsockets::WriteHalf::write_frame::_{{closure}} (47 samples, 0.09%)fastwebsockets::frame::<impl core::convert::From<fastwebsockets::frame::Payload> for bytes::bytes_mut::BytesMut>::from (14 samples, 0.03%)flume::Chan<T>::pull_pending (5 samples, 0.01%)malloc (30 samples, 0.06%)recv (22 samples, 0.04%)std::sys::pal::unix::time::Timespec::sub_timespec (5 samples, 0.01%)tokio::runtime::io::driver::Driver::turn (6 samples, 0.01%)tokio::runtime::io::registration::Registration::poll_ready (23 samples, 0.05%)tokio::runtime::coop::poll_proceed (7 samples, 0.01%)tokio::runtime::context::budget (7 samples, 0.01%)std::thread::local::LocalKey<T>::try_with (7 samples, 0.01%)tokio::runtime::context::budget::_{{closure}} (7 samples, 0.01%)tokio::runtime::coop::poll_proceed::_{{closure}} (7 samples, 0.01%)core::task::wake::Waker::wake_by_ref (7 samples, 0.01%)tokio::runtime::io::scheduled_io::ScheduledIo::wake (11 samples, 0.02%)tokio::runtime::signal::Driver::process (6 samples, 0.01%)tokio::runtime::io::driver::signal::<impl tokio::runtime::io::driver::Driver>::consume_signal_ready (6 samples, 0.01%)tokio::runtime::task::raw::poll (5 samples, 0.01%)tokio::runtime::task::state::State::transition_to_idle (11 samples, 0.02%)tokio::runtime::time::Driver::park_internal (29 samples, 0.06%)tokio::runtime::time::_<impl tokio::runtime::time::handle::Handle>::process_at_time::_{{closure}} (36 samples, 0.07%)tokio::runtime::time::<impl tokio::runtime::time::handle::Handle>::process_at_sharded_time (6 samples, 0.01%)tokio::runtime::time::wheel::Wheel::poll_at (6 samples, 0.01%)tokio::runtime::time::wheel::Wheel::next_expiration (112 samples, 0.22%)tokio::util::linked_list::LinkedList<L,<L as tokio::util::linked_list::Link>::Target>::is_empty (71 samples, 0.14%)core::option::Option<T>::is_some (71 samples, 0.14%)wisp_mux::fastwebsockets::_<impl wisp_mux::ws::WebSocketRead for fastwebsockets::WebSocketRead<S>>::wisp_read_split::_{{closure}} (17 samples, 0.03%)wisp_mux::ws::<impl core::convert::From<wisp_mux::ws::Payload> for bytes::bytes_mut::BytesMut>::from (5 samples, 0.01%)[unknown] (3,675 samples, 7.37%)[unknown]alloc::sync::Arc<T,A>::drop_slow (6 samples, 0.01%)cfree (9 samples, 0.02%)core::ptr::drop_in_place<flume::async::SendFut<bytes::bytes::Bytes>> (14 samples, 0.03%)core::ptr::drop_in_place<wisp_mux::packet::PacketType> (14 samples, 0.03%)dashmap::DashMap<K,V,S>::get (5 samples, 0.01%)flume::Chan<T>::pull_pending (13 samples, 0.03%)malloc (12 samples, 0.02%)core::ptr::drop_in_place<core::option::Option<bytes::bytes::Bytes>> (18 samples, 0.04%)core::ptr::drop_in_place<bytes::bytes::Bytes> (18 samples, 0.04%)<bytes::bytes::Bytes as core::ops::drop::Drop>::drop (18 samples, 0.04%)<futures_util::future::poll_fn::PollFn<F> as core::future::future::Future>::poll (20 samples, 0.04%)wisp_mux::stream::MuxStreamRead::read::_{{closure}}::_{{closure}} (20 samples, 0.04%)core::ops::function::impls::<impl core::ops::function::FnMut<A> for &mut F>::call_mut (20 samples, 0.04%)wisp_mux::stream::MuxStreamRead::read::_{{closure}} (26 samples, 0.05%)simple_wisp_client::main::_{{closure}}::_{{closure}} (98 samples, 0.20%)wisp_mux::stream::MuxStreamWrite::write::_{{closure}} (39 samples, 0.08%)wisp_mux::stream::MuxStreamWrite::write_payload::_{{closure}} (39 samples, 0.08%)wisp_mux::stream::MuxStreamWrite::write_payload_internal::_{{closure}} (38 samples, 0.08%)wisp_mux::ws::LockedWebSocketWrite::write_split::_{{closure}} (37 samples, 0.07%)core::ptr::drop_in_place<core::pin::Pin<alloc::boxed::Box<dyn core::future::future::Future+Output = core::result::Result<(),wisp_mux::WispError>+core::marker::Send>>> (10 samples, 0.02%)core::ptr::drop_in_place<alloc::boxed::Box<dyn core::future::future::Future+Output = core::result::Result<(),wisp_mux::WispError>+core::marker::Send>> (10 samples, 0.02%)<alloc::boxed::Box<T,A> as core::ops::drop::Drop>::drop (10 samples, 0.02%)<alloc::alloc::Global as core::alloc::Allocator>::deallocate (10 samples, 0.02%)alloc::alloc::dealloc (10 samples, 0.02%)__rdl_dealloc (10 samples, 0.02%)std::sys::pal::unix::alloc::<impl core::alloc::global::GlobalAlloc for std::alloc::System>::dealloc (10 samples, 0.02%)syscall (7 samples, 0.01%)tokio::runtime::task::raw::poll (12 samples, 0.02%)<core::pin::Pin<P> as core::future::future::Future>::poll (5 samples, 0.01%)core::ptr::drop_in_place<bytes::bytes_mut::BytesMut> (11 samples, 0.02%)<bytes::bytes_mut::BytesMut as core::ops::drop::Drop>::drop (11 samples, 0.02%)bytes::bytes_mut::release_shared (7 samples, 0.01%)core::mem::drop (7 samples, 0.01%)core::ptr::drop_in_place<alloc::boxed::Box<bytes::bytes_mut::Shared>> (7 samples, 0.01%)core::ptr::drop_in_place<bytes::bytes_mut::Shared> (7 samples, 0.01%)core::ptr::drop_in_place<alloc::vec::Vec<u8>> (7 samples, 0.01%)core::ptr::drop_in_place<alloc::raw_vec::RawVec<u8>> (7 samples, 0.01%)<alloc::raw_vec::RawVec<T,A> as core::ops::drop::Drop>::drop (7 samples, 0.01%)<alloc::alloc::Global as core::alloc::Allocator>::deallocate (7 samples, 0.01%)alloc::alloc::dealloc (7 samples, 0.01%)__rdl_dealloc (7 samples, 0.01%)std::sys::pal::unix::alloc::<impl core::alloc::global::GlobalAlloc for std::alloc::System>::dealloc (7 samples, 0.01%)wisp_mux::MuxInner::as_future::_{{closure}}::_{{closure}}::_{{closure}} (93 samples, 0.19%)futures_util::future::future::FutureExt::poll_unpin (77 samples, 0.15%)<core::pin::Pin<P> as core::future::future::Future>::poll (77 samples, 0.15%)<futures_util::future::future::fuse::Fuse<Fut> as core::future::future::Future>::poll (77 samples, 0.15%)wisp_mux::MuxInner::client_loop::_{{closure}} (77 samples, 0.15%)core::ptr::drop_in_place<core::pin::Pin<alloc::boxed::Box<dyn core::future::future::Future+Output = core::result::Result<(wisp_mux::ws::Frame,core::option::Option<wisp_mux::ws::Frame>),wisp_mux::WispError>+core::marker::Send>>> (51 samples, 0.10%)core::ptr::drop_in_place<alloc::boxed::Box<dyn core::future::future::Future+Output = core::result::Result<(wisp_mux::ws::Frame,core::option::Option<wisp_mux::ws::Frame>),wisp_mux::WispError>+core::marker::Send>> (51 samples, 0.10%)<alloc::boxed::Box<T,A> as core::ops::drop::Drop>::drop (51 samples, 0.10%)<alloc::alloc::Global as core::alloc::Allocator>::deallocate (51 samples, 0.10%)alloc::alloc::dealloc (51 samples, 0.10%)__rdl_dealloc (51 samples, 0.10%)std::sys::pal::unix::alloc::<impl core::alloc::global::GlobalAlloc for std::alloc::System>::dealloc (51 samples, 0.10%)wisp_mux::MuxInner::client_into_future::_{{closure}} (10 samples, 0.02%)wisp_mux::MuxInner::as_future::_{{closure}} (8 samples, 0.02%)<futures_util::future::poll_fn::PollFn<F> as core::future::future::Future>::poll (8 samples, 0.02%)wisp_mux::MuxInner::as_future::_{{closure}}::_{{closure}} (8 samples, 0.02%)core::ops::function::impls::<impl core::ops::function::FnMut<A> for &mut F>::call_mut (8 samples, 0.02%)wisp_mux::fastwebsockets::_<impl wisp_mux::ws::WebSocketRead for fastwebsockets::WebSocketRead<S>>::wisp_read_split::_{{closure}} (6 samples, 0.01%)wisp_mux::ws::<impl core::convert::From<wisp_mux::ws::Payload> for bytes::bytes_mut::BytesMut>::from (9 samples, 0.02%)all (49,872 samples, 100%)tokio-runtime-w (49,831 samples, 99.92%)tokio-runtime-w \ No newline at end of file diff --git a/simple-wisp-client/src/main.rs b/simple-wisp-client/src/main.rs index 9a146c1..14bfba1 100644 --- a/simple-wisp-client/src/main.rs +++ b/simple-wisp-client/src/main.rs @@ -1,7 +1,7 @@ use atomic_counter::{AtomicCounter, RelaxedCounter}; use bytes::Bytes; use clap::Parser; -use fastwebsockets::{handshake, FragmentCollectorRead}; +use fastwebsockets::handshake; use futures::future::select_all; use http_body_util::Empty; use humantime::format_duration; @@ -9,24 +9,24 @@ use hyper::{ header::{CONNECTION, UPGRADE}, Request, Uri, }; +use hyper_util::rt::TokioIo; use simple_moving_average::{SingleSumSMA, SMA}; use std::{ error::Error, future::Future, - io::{stdout, IsTerminal, Write}, + io::{stdout, Cursor, IsTerminal, Write}, net::SocketAddr, - process::exit, + process::{abort, exit}, sync::Arc, time::{Duration, Instant}, }; use tokio::{ + io::AsyncReadExt, net::TcpStream, select, signal::unix::{signal, SignalKind}, time::{interval, sleep}, }; -use tokio_native_tls::{native_tls, TlsConnector}; -use tokio_util::either::Either; use wisp_mux::{ extensions::{ password::{PasswordProtocolExtension, PasswordProtocolExtensionBuilder}, @@ -103,17 +103,12 @@ async fn main() -> Result<(), Box> { console_subscriber::init(); let opts = Cli::parse(); - let tls = match opts - .wisp - .scheme_str() - .ok_or(WispClientError::InvalidUriScheme)? - { - "wss" => Ok(true), - "ws" => Ok(false), - _ => Err(WispClientError::InvalidUriScheme), - }?; + if opts.wisp.scheme_str().unwrap_or_default() != "ws" { + Err(Box::new(WispClientError::InvalidUriScheme))?; + } + let addr = opts.wisp.host().ok_or(WispClientError::UriHasNoHost)?; - let addr_port = opts.wisp.port_u16().unwrap_or(if tls { 443 } else { 80 }); + let addr_port = opts.wisp.port_u16().unwrap_or(80); let addr_path = opts.wisp.path(); let addr_dest = opts.tcp.ip().to_string(); let addr_dest_port = opts.tcp.port(); @@ -131,12 +126,6 @@ async fn main() -> Result<(), Box> { ); let socket = TcpStream::connect(format!("{}:{}", &addr, addr_port)).await?; - let socket = if tls { - let cx = TlsConnector::from(native_tls::TlsConnector::builder().build()?); - Either::Left(cx.connect(addr, socket).await?) - } else { - Either::Right(socket) - }; let req = Request::builder() .method("GET") .uri(addr_path) @@ -152,8 +141,11 @@ async fn main() -> Result<(), Box> { let (ws, _) = handshake::client(&SpawnExecutor, req, socket).await?; - let (rx, tx) = ws.split(tokio::io::split); - let rx = FragmentCollectorRead::new(rx); + let (rx, tx) = ws.split(|x| { + let parts = x.into_inner().downcast::>().unwrap(); + let (r, w) = parts.io.into_inner().into_split(); + (Cursor::new(parts.read_buf).chain(r), w) + }); let mut extensions: Vec> = Vec::new(); let mut extension_ids: Vec = Vec::new(); @@ -182,12 +174,11 @@ async fn main() -> Result<(), Box> { mux.downgraded, mux.supported_extension_ids ); - let mut threads = Vec::with_capacity(opts.streams + 4); - let mut reads = Vec::with_capacity(opts.streams); + let mut threads = Vec::with_capacity((opts.streams * 2) + 3); threads.push(tokio::spawn(fut)); - let payload = Bytes::from(vec![0; 1024 * opts.packet_size]); + let payload = vec![0; 1024 * opts.packet_size]; let cnt = Arc::new(RelaxedCounter::new(0)); @@ -201,21 +192,19 @@ async fn main() -> Result<(), Box> { let payload = payload.clone(); threads.push(tokio::spawn(async move { loop { - cw.write(payload.clone()).await?; + cw.write(&payload).await?; cnt.inc(); } #[allow(unreachable_code)] Ok::<(), WispError>(()) })); - reads.push(cr); + threads.push(tokio::spawn(async move { + loop { + cr.read().await; + } + })); } - threads.push(tokio::spawn(async move { - loop { - select_all(reads.iter().map(|x| Box::pin(x.read()))).await; - } - })); - let cnt_avg = cnt.clone(); threads.push(tokio::spawn(async move { let mut interval = interval(Duration::from_millis(100)); @@ -289,5 +278,6 @@ async fn main() -> Result<(), Box> { ); } - Ok(()) + // force everything to die + abort() }