diff --git a/server/flamegraph.svg b/server/flamegraph.svg new file mode 100644 index 0000000..6a9a174 --- /dev/null +++ b/server/flamegraph.svg @@ -0,0 +1,491 @@ +Flame Graph Reset ZoomSearch epoxy-server (34 samples, 0.02%)<event_listener::EventListener<T> as core::future::future::Future>::poll (36 samples, 0.03%)event_listener::InnerListener<T,B>::poll_internal (27 samples, 0.02%)event_listener::sys::<impl event_listener::Inner<T>>::register (27 samples, 0.02%)event_listener::TaskRef::into_task (27 samples, 0.02%)<core::task::wake::Waker as core::clone::Clone>::clone (27 samples, 0.02%)<tokio::io::util::fill_buf::FillBuf<R> as core::future::future::Future>::poll (25 samples, 0.02%)<tokio_util::compat::Compat<T> as tokio::io::async_buf_read::AsyncBufRead>::poll_fill_buf (25 samples, 0.02%)<wisp_mux::stream::MuxStreamAsyncRead as futures_io::if_std::AsyncBufRead>::poll_fill_buf (25 samples, 0.02%)<futures_util::stream::try_stream::into_async_read::IntoAsyncRead<St> as futures_io::if_std::AsyncBufRead>::poll_fill_buf (25 samples, 0.02%)<S as futures_core::stream::TryStream>::try_poll_next (25 samples, 0.02%)<wisp_mux::stream::MuxStreamIoStream as futures_core::stream::Stream>::poll_next (25 samples, 0.02%)<core::pin::Pin<P> as futures_core::stream::Stream>::poll_next (25 samples, 0.02%)epoxy_server::handle::wisp::copy_read_fast::_{{closure}} (27 samples, 0.02%)<tokio::task::unconstrained::Unconstrained<F> as core::future::future::Future>::poll (219 samples, 0.16%)tokio::runtime::coop::with_unconstrained (50 samples, 0.04%)tokio::runtime::coop::with_budget (50 samples, 0.04%)<tokio::task::unconstrained::Unconstrained<F> as core::future::future::Future>::poll::_{{closure}} (50 samples, 0.04%)epoxy_server::handle::wisp::handle_stream::_{{closure}} (40 samples, 0.03%)epoxy_server::handle::wisp::handle_stream::_{{closure}}::_{{closure}} (40 samples, 0.03%)<tokio::future::poll_fn::PollFn<F> as core::future::future::Future>::poll (40 samples, 0.03%)epoxy_server::handle::wisp::handle_stream::_{{closure}}::_{{closure}}::_{{closure}} (40 samples, 0.03%)<wisp_mux::ws::AppendingWebSocketRead<R> as wisp_mux::ws::WebSocketRead>::wisp_read_split::_{{closure}} (45 samples, 0.03%)tokio::runtime::driver::Driver::park (41 samples, 0.03%)tokio::runtime::driver::IoHandle::unpark (15 samples, 0.01%)tokio::runtime::scheduler::multi_thread::worker::<impl tokio::runtime::scheduler::multi_thread::handle::Handle>::notify_parked_local (18 samples, 0.01%)tokio::runtime::scheduler::multi_thread::idle::Idle::worker_to_notify (18 samples, 0.01%)tokio::runtime::scheduler::multi_thread::idle::Idle::notify_should_wakeup (18 samples, 0.01%)core::sync::atomic::AtomicUsize::fetch_add (18 samples, 0.01%)core::sync::atomic::atomic_add (18 samples, 0.01%)tokio::runtime::time::_<impl tokio::runtime::time::handle::Handle>::process_at_time::_{{closure}} (16 samples, 0.01%)[[heap]] (134 samples, 0.10%)<core::hash::sip::Hasher<S> as core::hash::Hasher>::write (29 samples, 0.02%)<core::task::wake::Waker as core::clone::Clone>::clone (23 samples, 0.02%)<futures_util::lock::mutex::MutexLockFuture<T> as core::future::future::Future>::poll (158 samples, 0.11%)<futures_util::future::poll_fn::PollFn<F> as core::future::future::Future>::poll (59 samples, 0.04%)wisp_mux::stream::MuxStreamRead::read::_{{closure}}::_{{closure}} (59 samples, 0.04%)core::ops::function::impls::<impl core::ops::function::FnMut<A> for &mut F>::call_mut (59 samples, 0.04%)<futures_util::stream::unfold::Unfold<T,F,Fut> as futures_core::stream::Stream>::poll_next (225 samples, 0.16%)wisp_mux::stream::MuxStreamRead::into_inner_stream::_{{closure}}::_{{closure}} (70 samples, 0.05%)wisp_mux::stream::MuxStreamRead::read::_{{closure}} (70 samples, 0.05%)<tokio::io::util::write_all::WriteAll<W> as core::future::future::Future>::poll (181 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>>> (51 samples, 0.04%)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.04%)<alloc::boxed::Box<T,A> as core::ops::drop::Drop>::drop (51 samples, 0.04%)<alloc::alloc::Global as core::alloc::Allocator>::deallocate (51 samples, 0.04%)alloc::alloc::dealloc (51 samples, 0.04%)__rdl_dealloc (51 samples, 0.04%)std::sys::pal::unix::alloc::<impl core::alloc::global::GlobalAlloc for std::alloc::System>::dealloc (51 samples, 0.04%)<wisp_mux::ws::AppendingWebSocketRead<R> as wisp_mux::ws::WebSocketRead>::wisp_read_split::_{{closure}} (97 samples, 0.07%)<wisp_mux::ws::Payload as bytes::buf::buf_impl::Buf>::advance (31 samples, 0.02%)[libc.so.6] (146 samples, 0.10%)__floattidf (177 samples, 0.13%)__vdso_clock_gettime (58 samples, 0.04%)bytes::bytes_mut::BytesMut::advance_unchecked (34 samples, 0.02%)bytes::bytes_mut::BytesMut::reserve_inner (50 samples, 0.04%)bytes::bytes_mut::BytesMut::shallow_clone (27 samples, 0.02%)bytes::bytes_mut::BytesMut::promote_to_shared (27 samples, 0.02%)alloc::boxed::Box<T>::new (27 samples, 0.02%)alloc::alloc::exchange_malloc (27 samples, 0.02%)<alloc::alloc::Global as core::alloc::Allocator>::allocate (27 samples, 0.02%)alloc::alloc::Global::alloc_impl (27 samples, 0.02%)alloc::alloc::alloc (27 samples, 0.02%)__rdl_alloc (27 samples, 0.02%)std::sys::pal::unix::alloc::<impl core::alloc::global::GlobalAlloc for std::alloc::System>::alloc (27 samples, 0.02%)bytes::bytes_mut::BytesMut::split_to (72 samples, 0.05%)core::fmt::Arguments::new_v1 (44 samples, 0.03%)bytes::bytes_mut::shared_v_drop (142 samples, 0.10%)<core::sync::atomic::AtomicPtr<T> as bytes::loom::sync::atomic::AtomicMut<T>>::with_mut (142 samples, 0.10%)bytes::bytes_mut::shared_v_drop::_{{closure}} (142 samples, 0.10%)cfree (53 samples, 0.04%)core::ptr::drop_in_place<<wisp_mux::ws::AppendingWebSocketRead<fastwebsockets::WebSocketRead<tokio_util::either::Either<tokio::net::tcp::split_owned::OwnedReadHalf,tokio::net::unix::split_owned::OwnedReadHalf>>> as wisp_mux::ws::WebSocketRead>::wisp_read_frame::{{closure}}> (49 samples, 0.04%)core::ptr::drop_in_place<event_listener::EventListener> (21 samples, 0.02%)core::ptr::drop_in_place<fastwebsockets::WebSocketRead<tokio_util::either::Either<tokio::net::tcp::split_owned::OwnedReadHalf,tokio::net::unix::split_owned::OwnedReadHalf>>::read_frame<wisp_mux::fastwebsockets::<impl wisp_mux::ws::WebSocketRead for fastwebsockets::WebSocketRead<tokio_util::either::Either<tokio::net::tcp::split_owned::OwnedReadHalf,tokio::net::unix::split_owned::OwnedReadHalf>>>::wisp_read_frame::{{closure}}::{{closure}}::{{closure}},wisp_mux::WispError,wisp_mux::fastwebsockets::<impl wisp_mux::ws::WebSocketRead for fastwebsockets::WebSocketRead<tokio_util::either::Either<tokio::net::tcp::split_owned::OwnedReadHalf,tokio::net::unix::split_owned::OwnedReadHalf>>>::wisp_read_frame::{{closure}}::{{closure}}>::{{closure}}> (90 samples, 0.06%)core::ptr::drop_in_place<fastwebsockets::WriteHalf::write_frame<hyper_util::rt::tokio::TokioIo<hyper::upgrade::Upgraded>>::{{closure}}> (132 samples, 0.09%)core::ptr::drop_in_place<flume::async::RecvFut<bytes::bytes::Bytes>> (15 samples, 0.01%)core::ptr::drop_in_place<futures_util::lock::mutex::MutexGuard<alloc::boxed::Box<dyn wisp_mux::ws::WebSocketWrite+core::marker::Send>>> (47 samples, 0.03%)core::ptr::drop_in_place<wisp_mux::fastwebsockets::<impl wisp_mux::ws::WebSocketRead for fastwebsockets::WebSocketRead<tokio_util::either::Either<tokio::net::tcp::split_owned::OwnedReadHalf,tokio::net::unix::split_owned::OwnedReadHalf>>>::wisp_read_split::{{closure}}> (209 samples, 0.15%)core::ptr::drop_in_place<wisp_mux::fastwebsockets::<impl wisp_mux::ws::WebSocketWrite for fastwebsockets::WebSocketWrite<tokio_util::either::Either<tokio::net::tcp::split_owned::OwnedWriteHalf,tokio::net::unix::split_owned::OwnedWriteHalf>>>::wisp_write_split::{{closure}}> (691 samples, 0.50%)core::ptr::drop_in_place<wisp_mux::packet::PacketType> (32 samples, 0.02%)core::ptr::drop_in_place<wisp_mux::stream::MuxStreamWrite::write_payload_internal::{{closure}}> (88 samples, 0.06%)core::ptr::drop_in_place<wisp_mux::ws::LockedWebSocketWrite::write_split::{{closure}}> (29 samples, 0.02%)event_listener::sys::Inner<T>::remove (42 samples, 0.03%)core::option::Option<T>::as_pin_mut (34 samples, 0.02%)core::option::Option<T>::as_mut (34 samples, 0.02%)fastwebsockets::ReadHalf::read_frame_inner::_{{closure}} (88 samples, 0.06%)fastwebsockets::ReadHalf::parse_frame_header::_{{closure}} (18 samples, 0.01%)fastwebsockets::WebSocketWrite<S>::write_frame::_{{closure}} (186 samples, 0.13%)fastwebsockets::WriteHalf::write_frame::_{{closure}} (132 samples, 0.09%)core::ptr::drop_in_place<fastwebsockets::frame::Frame> (122 samples, 0.09%)core::ptr::drop_in_place<fastwebsockets::frame::Payload> (122 samples, 0.09%)fastwebsockets::frame::<impl core::convert::From<fastwebsockets::frame::Payload> for bytes::bytes_mut::BytesMut>::from (23 samples, 0.02%)<fastwebsockets::frame::Payload as core::ops::deref::Deref>::deref (73 samples, 0.05%)fastwebsockets::frame::Frame::write (139 samples, 0.10%)core::slice::<impl [T]>::copy_from_slice (30 samples, 0.02%)core::intrinsics::copy_nonoverlapping (30 samples, 0.02%)flume::Shared<T>::recv (40 samples, 0.03%)futures_util::lock::mutex::Mutex<T>::remove_waker (71 samples, 0.05%)malloc (41 samples, 0.03%)mio::sys::unix::waker::eventfd::WakerInternal::wake (26 samples, 0.02%)parking_lot::condvar::Condvar::notify_one_slow (17 samples, 0.01%)parking_lot_core::parking_lot::lock_bucket_pair (25 samples, 0.02%)pow (25 samples, 0.02%)std::sys::pal::unix::time::Timespec::now (42 samples, 0.03%)std::time::Instant::now (26 samples, 0.02%)<&mio::net::tcp::stream::TcpStream as std::io::Read>::read (28 samples, 0.02%)mio::io_source::IoSource<T>::do_io (28 samples, 0.02%)mio::sys::unix::stateless_io_source::IoSourceState::do_io (28 samples, 0.02%)<&mio::net::tcp::stream::TcpStream as std::io::Read>::read::_{{closure}} (28 samples, 0.02%)<&std::net::tcp::TcpStream as std::io::Read>::read (28 samples, 0.02%)std::sys_common::net::TcpStream::read (28 samples, 0.02%)std::sys::pal::unix::net::Socket::read (28 samples, 0.02%)std::sys::pal::unix::net::Socket::recv_with_flags (28 samples, 0.02%)tokio::net::tcp::stream::TcpStream::poll_read_priv (192 samples, 0.14%)tokio::io::poll_evented::PollEvented<E>::poll_read (49 samples, 0.04%)tokio::runtime::io::registration::Registration::poll_read_ready (20 samples, 0.01%)<&mio::net::tcp::stream::TcpStream as std::io::Write>::write (34 samples, 0.02%)mio::io_source::IoSource<T>::do_io (34 samples, 0.02%)mio::sys::unix::stateless_io_source::IoSourceState::do_io (34 samples, 0.02%)<&mio::net::tcp::stream::TcpStream as std::io::Write>::write::_{{closure}} (34 samples, 0.02%)<&std::net::tcp::TcpStream as std::io::Write>::write (34 samples, 0.02%)std::sys_common::net::TcpStream::write (34 samples, 0.02%)tokio::net::tcp::stream::TcpStream::poll_write_priv (225 samples, 0.16%)tokio::io::poll_evented::PollEvented<E>::poll_write (41 samples, 0.03%)tokio::runtime::io::registration::Registration::poll_ready (79 samples, 0.06%)tokio::runtime::scheduler::multi_thread::park::Unparker::unpark (14 samples, 0.01%)tokio::runtime::scheduler::multi_thread::queue::Local<T>::push_back_or_overflow (25 samples, 0.02%)tokio::runtime::scheduler::multi_thread::worker::<impl tokio::runtime::scheduler::multi_thread::handle::Handle>::schedule_task (58 samples, 0.04%)core::option::Option<T>::take (17 samples, 0.01%)core::mem::replace (17 samples, 0.01%)core::ptr::read (17 samples, 0.01%)tokio::runtime::scheduler::multi_thread::worker::Context::park_timeout (28 samples, 0.02%)tokio::runtime::coop::budget (123 samples, 0.09%)tokio::runtime::coop::with_budget (123 samples, 0.09%)tokio::runtime::scheduler::multi_thread::worker::Context::run_task::_{{closure}} (123 samples, 0.09%)tokio::runtime::task::LocalNotified<S>::run (123 samples, 0.09%)tokio::runtime::task::raw::RawTask::poll (123 samples, 0.09%)tokio::runtime::scheduler::multi_thread::worker::Context::run_task (142 samples, 0.10%)tokio::runtime::scheduler::multi_thread::stats::Stats::end_processing_scheduled_tasks (27 samples, 0.02%)tokio::runtime::task::raw::poll (46 samples, 0.03%)tokio::runtime::task::harness::Harness<T,S>::poll (45 samples, 0.03%)tokio::runtime::task::harness::Harness<T,S>::poll_inner (45 samples, 0.03%)tokio::runtime::task::harness::poll_future (45 samples, 0.03%)std::panic::catch_unwind (45 samples, 0.03%)std::panicking::try (45 samples, 0.03%)std::panicking::try::do_call (45 samples, 0.03%)<core::panic::unwind_safe::AssertUnwindSafe<F> as core::ops::function::FnOnce<()>>::call_once (45 samples, 0.03%)tokio::runtime::task::harness::poll_future::_{{closure}} (45 samples, 0.03%)tokio::runtime::task::core::Core<T,S>::poll (45 samples, 0.03%)tokio::loom::std::unsafe_cell::UnsafeCell<T>::with_mut (45 samples, 0.03%)tokio::runtime::task::core::Core<T,S>::poll::_{{closure}} (45 samples, 0.03%)<tokio::runtime::blocking::task::BlockingTask<T> as core::future::future::Future>::poll (45 samples, 0.03%)tokio::runtime::scheduler::multi_thread::worker::Launch::launch::_{{closure}} (45 samples, 0.03%)tokio::runtime::scheduler::multi_thread::worker::run (45 samples, 0.03%)tokio::runtime::context::runtime::enter_runtime (45 samples, 0.03%)tokio::runtime::scheduler::multi_thread::worker::run::_{{closure}} (45 samples, 0.03%)tokio::runtime::context::set_scheduler (45 samples, 0.03%)std::thread::local::LocalKey<T>::with (45 samples, 0.03%)std::thread::local::LocalKey<T>::try_with (45 samples, 0.03%)tokio::runtime::context::set_scheduler::_{{closure}} (45 samples, 0.03%)tokio::runtime::context::scoped::Scoped<T>::set (45 samples, 0.03%)tokio::runtime::scheduler::multi_thread::worker::run::_{{closure}}::_{{closure}} (45 samples, 0.03%)tokio::runtime::scheduler::multi_thread::worker::Context::run (45 samples, 0.03%)tokio::runtime::task::raw::RawTask::schedule (56 samples, 0.04%)tokio::runtime::task::waker::wake_by_val (260 samples, 0.19%)tokio::runtime::task::harness::<impl tokio::runtime::task::raw::RawTask>::wake_by_val (257 samples, 0.18%)tokio::runtime::task::state::State::transition_to_notified_by_val (201 samples, 0.14%)tokio::runtime::task::state::State::fetch_update_action (201 samples, 0.14%)tokio::runtime::task::state::State::load (201 samples, 0.14%)core::sync::atomic::AtomicUsize::load (201 samples, 0.14%)core::sync::atomic::atomic_load (201 samples, 0.14%)tokio::runtime::time::Driver::park_internal (16 samples, 0.01%)tokio::runtime::time::_<impl tokio::runtime::time::handle::Handle>::process_at_time::_{{closure}} (94 samples, 0.07%)tokio::runtime::time::wheel::Wheel::next_expiration (122 samples, 0.09%)wisp_mux::fastwebsockets::<impl wisp_mux::ws::WebSocketWrite for fastwebsockets::WebSocketWrite<S>>::wisp_write_frame (18 samples, 0.01%)wisp_mux::fastwebsockets::_<impl wisp_mux::ws::WebSocketWrite for fastwebsockets::WebSocketWrite<S>>::wisp_write_split::_{{closure}} (140 samples, 0.10%)wisp_mux::packet::<impl core::convert::From<wisp_mux::packet::Packet> for bytes::bytes_mut::BytesMut>::from (174 samples, 0.12%)bytes::bytes_mut::BytesMut::with_capacity (30 samples, 0.02%)alloc::vec::Vec<T>::with_capacity (30 samples, 0.02%)alloc::vec::Vec<T,A>::with_capacity_in (30 samples, 0.02%)alloc::raw_vec::RawVec<T,A>::with_capacity_in (30 samples, 0.02%)alloc::raw_vec::RawVec<T,A>::try_allocate_in (30 samples, 0.02%)<alloc::alloc::Global as core::alloc::Allocator>::allocate (30 samples, 0.02%)alloc::alloc::Global::alloc_impl (30 samples, 0.02%)alloc::alloc::alloc (30 samples, 0.02%)__rdl_alloc (30 samples, 0.02%)std::sys::pal::unix::alloc::<impl core::alloc::global::GlobalAlloc for std::alloc::System>::alloc (30 samples, 0.02%)wisp_mux::stream::MuxStreamRead::read::_{{closure}}::_{{closure}}::_{{closure}} (112 samples, 0.08%)<core::pin::Pin<P> as core::future::future::Future>::poll (17 samples, 0.01%)[anon] (5,906 samples, 4.24%)[anon]wisp_mux::stream::MuxStreamWrite::write_payload::_{{closure}} (320 samples, 0.23%)wisp_mux::stream::MuxStreamWrite::write_payload_internal::_{{closure}} (192 samples, 0.14%)wisp_mux::ws::LockedWebSocketWrite::write_split::_{{closure}} (185 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::WispError>+core::marker::Send>>> (86 samples, 0.06%)core::ptr::drop_in_place<alloc::boxed::Box<dyn core::future::future::Future+Output = core::result::Result<(),wisp_mux::WispError>+core::marker::Send>> (86 samples, 0.06%)<alloc::boxed::Box<T,A> as core::ops::drop::Drop>::drop (83 samples, 0.06%)<alloc::alloc::Global as core::alloc::Allocator>::deallocate (83 samples, 0.06%)alloc::alloc::dealloc (83 samples, 0.06%)__rdl_dealloc (83 samples, 0.06%)std::sys::pal::unix::alloc::<impl core::alloc::global::GlobalAlloc for std::alloc::System>::dealloc (83 samples, 0.06%)[epoxy-server] (36 samples, 0.03%)wisp_mux::stream::MuxStreamWrite::write_payload::_{{closure}} (14 samples, 0.01%)parking_lot_core::parking_lot::park (20 samples, 0.01%)parking_lot_core::parking_lot::with_thread_data (20 samples, 0.01%)parking_lot_core::parking_lot::park::_{{closure}} (19 samples, 0.01%)tokio::loom::std::parking_lot::Mutex<T>::lock (23 samples, 0.02%)lock_api::mutex::Mutex<R,T>::lock (23 samples, 0.02%)<parking_lot::raw_mutex::RawMutex as lock_api::mutex::RawMutex>::lock (23 samples, 0.02%)parking_lot::raw_mutex::RawMutex::lock_slow (23 samples, 0.02%)<alloc::sync::Arc<T,A> as core::ops::deref::Deref>::deref (15 samples, 0.01%)alloc::sync::Arc<T,A>::inner (15 samples, 0.01%)core::ptr::non_null::NonNull<T>::as_ref (15 samples, 0.01%)<std::time::Instant as core::ops::arith::Sub>::sub (33 samples, 0.02%)std::time::Instant::duration_since (33 samples, 0.02%)std::time::Instant::checked_duration_since (33 samples, 0.02%)std::sys::pal::unix::time::Instant::checked_sub_instant (33 samples, 0.02%)std::sys::pal::unix::time::Timespec::sub_timespec (23 samples, 0.02%)compiler_builtins::float::conv::int_to_float::u128_to_f64_bits (84 samples, 0.06%)core::num::<impl u128>::wrapping_shl (23 samples, 0.02%)core::num::<impl u128>::unchecked_shl (23 samples, 0.02%)__floattidf (120 samples, 0.09%)compiler_builtins::float::conv::__floattidf (120 samples, 0.09%)core::num::<impl i128>::unsigned_abs (25 samples, 0.02%)core::num::<impl i128>::wrapping_abs (25 samples, 0.02%)std::f64::<impl f64>::powf (1,357 samples, 0.97%)pow (1,354 samples, 0.97%)[libm.so.6] (805 samples, 0.58%)clock_gettime (522 samples, 0.37%)__vdso_clock_gettime (271 samples, 0.19%)std::sys::pal::unix::time::Timespec::now (561 samples, 0.40%)tokio::runtime::scheduler::multi_thread::stats::Stats::end_processing_scheduled_tasks (2,324 samples, 1.67%)clock_gettime (632 samples, 0.45%)__vdso_clock_gettime (385 samples, 0.28%)std::sys::pal::unix::time::Timespec::now (681 samples, 0.49%)tokio::runtime::scheduler::multi_thread::stats::Stats::start_processing_scheduled_tasks (689 samples, 0.49%)std::f64::<impl f64>::powf (28 samples, 0.02%)pow (27 samples, 0.02%)[libm.so.6] (15 samples, 0.01%)tokio::runtime::scheduler::multi_thread::stats::Stats::end_processing_scheduled_tasks (55 samples, 0.04%)core::iter::adapters::map::map_fold::_{{closure}} (33 samples, 0.02%)tokio::runtime::time::Driver::park_internal::_{{closure}} (33 samples, 0.02%)tokio::runtime::time::Inner::lock_sharded_wheel (33 samples, 0.02%)tokio::loom::std::parking_lot::Mutex<T>::lock (30 samples, 0.02%)lock_api::mutex::Mutex<R,T>::lock (30 samples, 0.02%)<parking_lot::raw_mutex::RawMutex as lock_api::mutex::RawMutex>::lock (30 samples, 0.02%)core::sync::atomic::AtomicU8::compare_exchange_weak (30 samples, 0.02%)core::sync::atomic::atomic_compare_exchange_weak (30 samples, 0.02%)<alloc::vec::Vec<T,A> as alloc::vec::spec_extend::SpecExtend<T,I>>::spec_extend (35 samples, 0.03%)alloc::vec::Vec<T,A>::extend_trusted (35 samples, 0.03%)core::iter::traits::iterator::Iterator::for_each (35 samples, 0.03%)<core::iter::adapters::map::Map<I,F> as core::iter::traits::iterator::Iterator>::fold (35 samples, 0.03%)core::iter::traits::iterator::Iterator::fold (35 samples, 0.03%)core::iter::traits::iterator::Iterator::collect (50 samples, 0.04%)<alloc::vec::Vec<T> as core::iter::traits::collect::FromIterator<T>>::from_iter (50 samples, 0.04%)<alloc::vec::Vec<T> as alloc::vec::spec_from_iter::SpecFromIter<T,I>>::from_iter (50 samples, 0.04%)<alloc::vec::Vec<T> as alloc::vec::spec_from_iter_nested::SpecFromIterNested<T,I>>::from_iter (50 samples, 0.04%)alloc::vec::Vec<T>::with_capacity (15 samples, 0.01%)alloc::vec::Vec<T,A>::with_capacity_in (15 samples, 0.01%)alloc::raw_vec::RawVec<T,A>::with_capacity_in (15 samples, 0.01%)alloc::raw_vec::RawVec<T,A>::try_allocate_in (15 samples, 0.01%)<alloc::alloc::Global as core::alloc::Allocator>::allocate (15 samples, 0.01%)alloc::alloc::Global::alloc_impl (15 samples, 0.01%)alloc::alloc::alloc (15 samples, 0.01%)core::iter::traits::iterator::Iterator::min (58 samples, 0.04%)core::iter::traits::iterator::Iterator::min_by (58 samples, 0.04%)core::iter::traits::iterator::Iterator::reduce (58 samples, 0.04%)<core::iter::adapters::filter_map::FilterMap<I,F> as core::iter::traits::iterator::Iterator>::next (58 samples, 0.04%)<core::slice::iter::Iter<T> as core::iter::traits::iterator::Iterator>::find_map (58 samples, 0.04%)core::ops::function::impls::<impl core::ops::function::FnMut<A> for &mut F>::call_mut (57 samples, 0.04%)tokio::runtime::time::Driver::park_internal::_{{closure}} (57 samples, 0.04%)tokio::runtime::time::wheel::Wheel::next_expiration_time (57 samples, 0.04%)tokio::runtime::time::wheel::Wheel::next_expiration (56 samples, 0.04%)<alloc::vec::Vec<T,A> as core::ops::drop::Drop>::drop (22 samples, 0.02%)core::ptr::drop_in_place<[tokio::loom::std::parking_lot::MutexGuard<tokio::runtime::time::wheel::Wheel>]> (22 samples, 0.02%)core::ptr::drop_in_place<tokio::loom::std::parking_lot::MutexGuard<tokio::runtime::time::wheel::Wheel>> (20 samples, 0.01%)core::ptr::drop_in_place<lock_api::mutex::MutexGuard<parking_lot::raw_mutex::RawMutex,tokio::runtime::time::wheel::Wheel>> (20 samples, 0.01%)<lock_api::mutex::MutexGuard<R,T> as core::ops::drop::Drop>::drop (20 samples, 0.01%)<parking_lot::raw_mutex::RawMutex as lock_api::mutex::RawMutex>::unlock (20 samples, 0.01%)core::sync::atomic::AtomicU8::compare_exchange (20 samples, 0.01%)core::sync::atomic::atomic_compare_exchange (20 samples, 0.01%)core::mem::drop (25 samples, 0.02%)core::ptr::drop_in_place<alloc::vec::Vec<tokio::loom::std::parking_lot::MutexGuard<tokio::runtime::time::wheel::Wheel>>> (25 samples, 0.02%)mio::poll::Poll::poll (17 samples, 0.01%)mio::sys::unix::selector::epoll::Selector::select (17 samples, 0.01%)tokio::runtime::io::scheduled_io::ScheduledIo::set_readiness (22 samples, 0.02%)tokio::runtime::io::driver::Driver::turn (76 samples, 0.05%)tokio::runtime::io::scheduled_io::ScheduledIo::wake (33 samples, 0.02%)tokio::util::wake_list::WakeList::wake_all (24 samples, 0.02%)core::task::wake::Waker::wake (24 samples, 0.02%)tokio::runtime::task::waker::wake_by_val (24 samples, 0.02%)tokio::runtime::task::harness::<impl tokio::runtime::task::raw::RawTask>::wake_by_val (24 samples, 0.02%)tokio::runtime::task::state::State::transition_to_notified_by_val (16 samples, 0.01%)tokio::runtime::task::state::State::fetch_update_action (16 samples, 0.01%)tokio::runtime::task::state::State::load (16 samples, 0.01%)core::sync::atomic::AtomicUsize::load (16 samples, 0.01%)core::sync::atomic::atomic_load (16 samples, 0.01%)core::mem::drop (20 samples, 0.01%)core::ptr::drop_in_place<tokio::loom::std::parking_lot::MutexGuard<tokio::runtime::time::wheel::Wheel>> (20 samples, 0.01%)core::ptr::drop_in_place<lock_api::mutex::MutexGuard<parking_lot::raw_mutex::RawMutex,tokio::runtime::time::wheel::Wheel>> (20 samples, 0.01%)<lock_api::mutex::MutexGuard<R,T> as core::ops::drop::Drop>::drop (20 samples, 0.01%)<parking_lot::raw_mutex::RawMutex as lock_api::mutex::RawMutex>::unlock (20 samples, 0.01%)core::sync::atomic::AtomicU8::compare_exchange (20 samples, 0.01%)core::sync::atomic::atomic_compare_exchange (20 samples, 0.01%)tokio::runtime::time::Inner::lock_sharded_wheel (25 samples, 0.02%)tokio::loom::std::parking_lot::Mutex<T>::lock (22 samples, 0.02%)lock_api::mutex::Mutex<R,T>::lock (22 samples, 0.02%)<parking_lot::raw_mutex::RawMutex as lock_api::mutex::RawMutex>::lock (22 samples, 0.02%)core::sync::atomic::AtomicU8::compare_exchange_weak (22 samples, 0.02%)core::sync::atomic::atomic_compare_exchange_weak (22 samples, 0.02%)tokio::runtime::time::wheel::Wheel::next_expiration (14 samples, 0.01%)tokio::runtime::time::wheel::Wheel::poll (16 samples, 0.01%)tokio::runtime::time::<impl tokio::runtime::time::handle::Handle>::process_at_time (80 samples, 0.06%)core::iter::traits::iterator::Iterator::min (80 samples, 0.06%)core::iter::traits::iterator::Iterator::min_by (80 samples, 0.06%)core::iter::traits::iterator::Iterator::reduce (80 samples, 0.06%)<core::iter::adapters::filter_map::FilterMap<I,F> as core::iter::traits::iterator::Iterator>::next (80 samples, 0.06%)core::iter::traits::iterator::Iterator::find_map (80 samples, 0.06%)core::iter::traits::iterator::Iterator::try_fold (80 samples, 0.06%)core::iter::traits::iterator::Iterator::find_map::check::_{{closure}} (78 samples, 0.06%)core::ops::function::impls::<impl core::ops::function::FnMut<A> for &mut F>::call_mut (78 samples, 0.06%)tokio::runtime::time::_<impl tokio::runtime::time::handle::Handle>::process_at_time::_{{closure}} (78 samples, 0.06%)tokio::runtime::time::<impl tokio::runtime::time::handle::Handle>::process_at_sharded_time (78 samples, 0.06%)tokio::runtime::time::<impl tokio::runtime::time::handle::Handle>::process (90 samples, 0.06%)tokio::runtime::time::Driver::park_internal (314 samples, 0.23%)tokio::runtime::scheduler::multi_thread::park::Parker::park_timeout (334 samples, 0.24%)tokio::runtime::scheduler::multi_thread::worker::Context::park_timeout (353 samples, 0.25%)tokio::runtime::scheduler::multi_thread::worker::Context::maintenance (482 samples, 0.35%)<alloc::sync::Arc<T,A> as core::ops::deref::Deref>::deref (45 samples, 0.03%)alloc::sync::Arc<T,A>::inner (45 samples, 0.03%)core::ptr::non_null::NonNull<T>::as_ref (45 samples, 0.03%)core::ptr::drop_in_place<core::option::Option<tokio::runtime::scheduler::multi_thread::park::Parker>> (23 samples, 0.02%)core::sync::atomic::AtomicUsize::load (31 samples, 0.02%)core::sync::atomic::atomic_load (31 samples, 0.02%)parking_lot_core::parking_lot::lock_bucket_pair (25 samples, 0.02%)parking_lot_core::word_lock::WordLock::lock (15 samples, 0.01%)core::sync::atomic::AtomicUsize::compare_exchange_weak (15 samples, 0.01%)core::sync::atomic::atomic_compare_exchange_weak (15 samples, 0.01%)parking_lot::condvar::Condvar::notify_one_slow (63 samples, 0.05%)parking_lot_core::parking_lot::unpark_requeue (63 samples, 0.05%)core::cell::RefCell<T>::borrow_mut (39 samples, 0.03%)core::cell::RefCell<T>::try_borrow_mut (39 samples, 0.03%)core::cell::BorrowRefMut::new (39 samples, 0.03%)tokio::runtime::scheduler::defer::Defer::wake (52 samples, 0.04%)core::sync::atomic::AtomicUsize::compare_exchange (126 samples, 0.09%)core::sync::atomic::atomic_compare_exchange (126 samples, 0.09%)core::ptr::drop_in_place<tokio::loom::std::parking_lot::MutexGuard<()>> (22 samples, 0.02%)core::ptr::drop_in_place<lock_api::mutex::MutexGuard<parking_lot::raw_mutex::RawMutex,()>> (22 samples, 0.02%)<lock_api::mutex::MutexGuard<R,T> as core::ops::drop::Drop>::drop (22 samples, 0.02%)<parking_lot::raw_mutex::RawMutex as lock_api::mutex::RawMutex>::unlock (22 samples, 0.02%)core::sync::atomic::AtomicU8::compare_exchange (22 samples, 0.02%)core::sync::atomic::atomic_compare_exchange (22 samples, 0.02%)core::sync::atomic::AtomicUsize::compare_exchange (180 samples, 0.13%)core::sync::atomic::atomic_compare_exchange (180 samples, 0.13%)<parking_lot::raw_mutex::RawMutex as lock_api::mutex::RawMutex>::lock (323 samples, 0.23%)core::sync::atomic::AtomicU8::compare_exchange_weak (322 samples, 0.23%)core::sync::atomic::atomic_compare_exchange_weak (322 samples, 0.23%)core::sync::atomic::AtomicI32::load (507 samples, 0.36%)core::sync::atomic::atomic_load (507 samples, 0.36%)<parking_lot_core::thread_parker::imp::ThreadParker as parking_lot_core::thread_parker::ThreadParkerT>::park (676 samples, 0.49%)parking_lot_core::thread_parker::imp::ThreadParker::futex_wait (141 samples, 0.10%)syscall (140 samples, 0.10%)[unknown] (24 samples, 0.02%)<parking_lot::raw_mutex::RawMutex as lock_api::mutex::RawMutex>::unlock (24 samples, 0.02%)core::sync::atomic::AtomicU8::compare_exchange (24 samples, 0.02%)core::sync::atomic::atomic_compare_exchange (24 samples, 0.02%)core::ops::function::FnOnce::call_once (26 samples, 0.02%)parking_lot::condvar::Condvar::wait_until_internal::_{{closure}} (26 samples, 0.02%)parking_lot_core::parking_lot::get_hashtable (31 samples, 0.02%)core::sync::atomic::AtomicPtr<T>::load (31 samples, 0.02%)core::sync::atomic::atomic_load (31 samples, 0.02%)parking_lot_core::parking_lot::hash (73 samples, 0.05%)parking_lot_core::parking_lot::lock_bucket (340 samples, 0.24%)parking_lot_core::word_lock::WordLock::lock (225 samples, 0.16%)core::sync::atomic::AtomicUsize::compare_exchange_weak (225 samples, 0.16%)core::sync::atomic::atomic_compare_exchange_weak (225 samples, 0.16%)parking_lot_core::parking_lot::park::_{{closure}} (1,088 samples, 0.78%)parking_lot_core::word_lock::WordLock::unlock (35 samples, 0.03%)core::sync::atomic::AtomicUsize::fetch_sub (35 samples, 0.03%)core::sync::atomic::atomic_sub (35 samples, 0.03%)tokio::loom::std::parking_lot::Condvar::wait (1,498 samples, 1.08%)parking_lot::condvar::Condvar::wait (1,498 samples, 1.08%)parking_lot::condvar::Condvar::wait_until_internal (1,497 samples, 1.08%)parking_lot_core::parking_lot::park (1,169 samples, 0.84%)parking_lot_core::parking_lot::with_thread_data (1,169 samples, 0.84%)std::thread::local::LocalKey<T>::try_with (31 samples, 0.02%)core::ops::function::FnOnce::call_once (31 samples, 0.02%)parking_lot_core::parking_lot::with_thread_data::THREAD_DATA::_{{constant}}::_{{closure}} (31 samples, 0.02%)std::sys::thread_local::native::lazy::Storage<T,D>::get_or_init (31 samples, 0.02%)tokio::runtime::scheduler::multi_thread::park::Inner::park_condvar (1,756 samples, 1.26%)tokio::loom::std::parking_lot::Mutex<T>::lock (43 samples, 0.03%)lock_api::mutex::Mutex<R,T>::lock (29 samples, 0.02%)<parking_lot::raw_mutex::RawMutex as lock_api::mutex::RawMutex>::lock (29 samples, 0.02%)core::sync::atomic::AtomicU8::compare_exchange_weak (29 samples, 0.02%)core::sync::atomic::atomic_compare_exchange_weak (29 samples, 0.02%)core::sync::atomic::AtomicUsize::compare_exchange (75 samples, 0.05%)core::sync::atomic::atomic_compare_exchange (75 samples, 0.05%)core::sync::atomic::AtomicUsize::swap (428 samples, 0.31%)core::sync::atomic::atomic_swap (428 samples, 0.31%)tokio::runtime::driver::Driver::park (104 samples, 0.07%)tokio::runtime::driver::TimeDriver::park (103 samples, 0.07%)tokio::runtime::time::Driver::park (14 samples, 0.01%)core::iter::traits::iterator::Iterator::for_each::call::_{{closure}} (20 samples, 0.01%)alloc::vec::Vec<T,A>::extend_trusted::_{{closure}} (20 samples, 0.01%)core::ptr::write (20 samples, 0.01%)tokio::runtime::driver::Handle::time (32 samples, 0.02%)core::option::Option<T>::as_ref (32 samples, 0.02%)core::slice::<impl [T]>::get_unchecked (22 samples, 0.02%)<usize as core::slice::index::SliceIndex<[T]>>::get_unchecked (22 samples, 0.02%)core::slice::index::get_noubcheck (22 samples, 0.02%)core::result::Result<T,E>::is_err (16 samples, 0.01%)core::result::Result<T,E>::is_ok (16 samples, 0.01%)core::iter::adapters::map::map_fold::_{{closure}} (1,670 samples, 1.20%)tokio::runtime::time::Driver::park_internal::_{{closure}} (1,650 samples, 1.19%)tokio::runtime::time::Inner::lock_sharded_wheel (1,618 samples, 1.16%)tokio::loom::std::parking_lot::Mutex<T>::lock (1,456 samples, 1.05%)lock_api::mutex::Mutex<R,T>::lock (1,456 samples, 1.05%)<parking_lot::raw_mutex::RawMutex as lock_api::mutex::RawMutex>::lock (1,456 samples, 1.05%)core::sync::atomic::AtomicU8::compare_exchange_weak (1,440 samples, 1.03%)core::sync::atomic::atomic_compare_exchange_weak (1,440 samples, 1.03%)<alloc::vec::Vec<T,A> as alloc::vec::spec_extend::SpecExtend<T,I>>::spec_extend (1,692 samples, 1.22%)alloc::vec::Vec<T,A>::extend_trusted (1,692 samples, 1.22%)core::iter::traits::iterator::Iterator::for_each (1,692 samples, 1.22%)<core::iter::adapters::map::Map<I,F> as core::iter::traits::iterator::Iterator>::fold (1,692 samples, 1.22%)core::iter::traits::iterator::Iterator::fold (1,692 samples, 1.22%)core::iter::range::<impl core::iter::traits::iterator::Iterator for core::ops::range::Range<A>>::next (22 samples, 0.02%)<core::ops::range::Range<T> as core::iter::range::RangeIteratorImpl>::spec_next (22 samples, 0.02%)__rdl_alloc (499 samples, 0.36%)std::sys::pal::unix::alloc::<impl core::alloc::global::GlobalAlloc for std::alloc::System>::alloc (499 samples, 0.36%)malloc (499 samples, 0.36%)<alloc::alloc::Global as core::alloc::Allocator>::allocate (523 samples, 0.38%)alloc::alloc::Global::alloc_impl (523 samples, 0.38%)alloc::alloc::alloc (523 samples, 0.38%)core::ptr::read_volatile (24 samples, 0.02%)core::iter::traits::iterator::Iterator::collect (2,244 samples, 1.61%)<alloc::vec::Vec<T> as core::iter::traits::collect::FromIterator<T>>::from_iter (2,244 samples, 1.61%)<alloc::vec::Vec<T> as alloc::vec::spec_from_iter::SpecFromIter<T,I>>::from_iter (2,244 samples, 1.61%)<alloc::vec::Vec<T> as alloc::vec::spec_from_iter_nested::SpecFromIterNested<T,I>>::from_iter (2,244 samples, 1.61%)alloc::vec::Vec<T>::with_capacity (535 samples, 0.38%)alloc::vec::Vec<T,A>::with_capacity_in (535 samples, 0.38%)alloc::raw_vec::RawVec<T,A>::with_capacity_in (535 samples, 0.38%)alloc::raw_vec::RawVec<T,A>::try_allocate_in (535 samples, 0.38%)<core::slice::iter::Iter<T> as core::iter::traits::iterator::Iterator>::next (36 samples, 0.03%)<tokio::loom::std::parking_lot::MutexGuard<T> as core::ops::deref::Deref>::deref (15 samples, 0.01%)<lock_api::mutex::MutexGuard<R,T> as core::ops::deref::Deref>::deref (15 samples, 0.01%)core::cell::UnsafeCell<T>::get (15 samples, 0.01%)<core::iter::adapters::enumerate::Enumerate<I> as core::iter::traits::iterator::Iterator>::next (186 samples, 0.13%)<core::slice::iter::Iter<T> as core::iter::traits::iterator::Iterator>::next (186 samples, 0.13%)<core::ptr::non_null::NonNull<T> as core::cmp::PartialEq>::eq (95 samples, 0.07%)tokio::runtime::time::wheel::level::Level::next_expiration (276 samples, 0.20%)tokio::runtime::time::wheel::level::Level::next_occupied_slot (276 samples, 0.20%)core::option::Option<T>::is_none (39 samples, 0.03%)core::option::Option<T>::is_some (39 samples, 0.03%)core::iter::traits::iterator::Iterator::min (2,342 samples, 1.68%)core::iter::traits::iterator::Iterator::min_by (2,342 samples, 1.68%)core::iter::traits::iterator::Iterator::reduce (2,342 samples, 1.68%)<core::iter::adapters::filter_map::FilterMap<I,F> as core::iter::traits::iterator::Iterator>::next (2,342 samples, 1.68%)<core::slice::iter::Iter<T> as core::iter::traits::iterator::Iterator>::find_map (2,342 samples, 1.68%)core::ops::function::impls::<impl core::ops::function::FnMut<A> for &mut F>::call_mut (2,244 samples, 1.61%)tokio::runtime::time::Driver::park_internal::_{{closure}} (2,244 samples, 1.61%)tokio::runtime::time::wheel::Wheel::next_expiration_time (2,229 samples, 1.60%)tokio::runtime::time::wheel::Wheel::next_expiration (2,196 samples, 1.58%)tokio::util::linked_list::LinkedList<L,<L as tokio::util::linked_list::Link>::Target>::is_empty (74 samples, 0.05%)core::option::Option<T>::is_some (35 samples, 0.03%)<alloc::vec::Vec<T,A> as core::ops::drop::Drop>::drop (1,198 samples, 0.86%)core::ptr::drop_in_place<[tokio::loom::std::parking_lot::MutexGuard<tokio::runtime::time::wheel::Wheel>]> (1,198 samples, 0.86%)core::ptr::drop_in_place<tokio::loom::std::parking_lot::MutexGuard<tokio::runtime::time::wheel::Wheel>> (1,136 samples, 0.82%)core::ptr::drop_in_place<lock_api::mutex::MutexGuard<parking_lot::raw_mutex::RawMutex,tokio::runtime::time::wheel::Wheel>> (1,136 samples, 0.82%)<lock_api::mutex::MutexGuard<R,T> as core::ops::drop::Drop>::drop (1,136 samples, 0.82%)<parking_lot::raw_mutex::RawMutex as lock_api::mutex::RawMutex>::unlock (1,136 samples, 0.82%)core::sync::atomic::AtomicU8::compare_exchange (1,127 samples, 0.81%)core::sync::atomic::atomic_compare_exchange (1,127 samples, 0.81%)core::mem::drop (1,367 samples, 0.98%)core::ptr::drop_in_place<alloc::vec::Vec<tokio::loom::std::parking_lot::MutexGuard<tokio::runtime::time::wheel::Wheel>>> (1,367 samples, 0.98%)core::ptr::drop_in_place<alloc::raw_vec::RawVec<tokio::loom::std::parking_lot::MutexGuard<tokio::runtime::time::wheel::Wheel>>> (169 samples, 0.12%)<alloc::raw_vec::RawVec<T,A> as core::ops::drop::Drop>::drop (169 samples, 0.12%)<alloc::alloc::Global as core::alloc::Allocator>::deallocate (169 samples, 0.12%)alloc::alloc::dealloc (169 samples, 0.12%)__rdl_dealloc (169 samples, 0.12%)std::sys::pal::unix::alloc::<impl core::alloc::global::GlobalAlloc for std::alloc::System>::dealloc (169 samples, 0.12%)cfree (167 samples, 0.12%)[libc.so.6] (50 samples, 0.04%)core::ptr::drop_in_place<tokio::loom::std::parking_lot::MutexGuard<alloc::vec::Vec<std::process::Child>>> (60 samples, 0.04%)core::ptr::drop_in_place<lock_api::mutex::MutexGuard<parking_lot::raw_mutex::RawMutex,alloc::vec::Vec<std::process::Child>>> (60 samples, 0.04%)<lock_api::mutex::MutexGuard<R,T> as core::ops::drop::Drop>::drop (60 samples, 0.04%)<parking_lot::raw_mutex::RawMutex as lock_api::mutex::RawMutex>::unlock (60 samples, 0.04%)core::sync::atomic::AtomicU8::compare_exchange (59 samples, 0.04%)core::sync::atomic::atomic_compare_exchange (59 samples, 0.04%)core::ptr::drop_in_place<tokio::loom::std::parking_lot::MutexGuard<core::option::Option<tokio::sync::watch::Receiver<()>>>> (60 samples, 0.04%)core::ptr::drop_in_place<lock_api::mutex::MutexGuard<parking_lot::raw_mutex::RawMutex,core::option::Option<tokio::sync::watch::Receiver<()>>>> (60 samples, 0.04%)<lock_api::mutex::MutexGuard<R,T> as core::ops::drop::Drop>::drop (60 samples, 0.04%)<parking_lot::raw_mutex::RawMutex as lock_api::mutex::RawMutex>::unlock (60 samples, 0.04%)core::sync::atomic::AtomicU8::compare_exchange (60 samples, 0.04%)core::sync::atomic::atomic_compare_exchange (60 samples, 0.04%)tokio::loom::std::parking_lot::Mutex<T>::lock (130 samples, 0.09%)lock_api::mutex::Mutex<R,T>::lock (130 samples, 0.09%)<parking_lot::raw_mutex::RawMutex as lock_api::mutex::RawMutex>::lock (130 samples, 0.09%)core::sync::atomic::AtomicU8::compare_exchange_weak (130 samples, 0.09%)core::sync::atomic::atomic_compare_exchange_weak (130 samples, 0.09%)core::sync::atomic::AtomicU8::compare_exchange_weak (96 samples, 0.07%)core::sync::atomic::atomic_compare_exchange_weak (96 samples, 0.07%)tokio::process::imp::GlobalOrphanQueue::reap_orphans (506 samples, 0.36%)tokio::process::imp::orphan::OrphanQueueImpl<T>::reap_orphans (506 samples, 0.36%)tokio::loom::std::parking_lot::Mutex<T>::try_lock (246 samples, 0.18%)lock_api::mutex::Mutex<R,T>::try_lock (246 samples, 0.18%)<parking_lot::raw_mutex::RawMutex as lock_api::mutex::RawMutex>::try_lock (246 samples, 0.18%)core::sync::atomic::AtomicU8::load (142 samples, 0.10%)core::sync::atomic::atomic_load (142 samples, 0.10%)tokio::runtime::driver::Handle::time (53 samples, 0.04%)core::option::Option<T>::as_ref (53 samples, 0.04%)tokio::runtime::driver::IoStack::park (30 samples, 0.02%)tokio::runtime::process::Driver::park (24 samples, 0.02%)tokio::runtime::signal::Driver::park (24 samples, 0.02%)tokio::runtime::io::driver::Driver::park (24 samples, 0.02%)tokio::runtime::driver::Handle::io (21 samples, 0.02%)tokio::runtime::driver::IoHandle::as_ref (21 samples, 0.02%)<mio::event::events::Iter as core::iter::traits::iterator::Iterator>::next (139 samples, 0.10%)core::slice::<impl [T]>::get (132 samples, 0.09%)<usize as core::slice::index::SliceIndex<[T]>>::get (132 samples, 0.09%)mio::event::event::Event::token (16 samples, 0.01%)mio::sys::unix::selector::epoll::event::token (16 samples, 0.01%)[libc.so.6] (261 samples, 0.19%)mio::poll::Poll::poll (935 samples, 0.67%)mio::sys::unix::selector::epoll::Selector::select (911 samples, 0.65%)epoll_wait (674 samples, 0.48%)[unknown] (56 samples, 0.04%)tokio::io::ready::Ready::from_mio (46 samples, 0.03%)core::sync::atomic::AtomicUsize::compare_exchange (481 samples, 0.35%)core::sync::atomic::atomic_compare_exchange (481 samples, 0.35%)core::sync::atomic::AtomicUsize::load (1,114 samples, 0.80%)core::sync::atomic::atomic_load (1,114 samples, 0.80%)tokio::util::bit::Pack::pack (21 samples, 0.02%)tokio::runtime::io::scheduled_io::ScheduledIo::set_readiness (1,632 samples, 1.17%)core::mem::drop (492 samples, 0.35%)core::ptr::drop_in_place<tokio::loom::std::parking_lot::MutexGuard<tokio::runtime::io::scheduled_io::Waiters>> (492 samples, 0.35%)core::ptr::drop_in_place<lock_api::mutex::MutexGuard<parking_lot::raw_mutex::RawMutex,tokio::runtime::io::scheduled_io::Waiters>> (492 samples, 0.35%)<lock_api::mutex::MutexGuard<R,T> as core::ops::drop::Drop>::drop (492 samples, 0.35%)<parking_lot::raw_mutex::RawMutex as lock_api::mutex::RawMutex>::unlock (492 samples, 0.35%)core::sync::atomic::AtomicU8::compare_exchange (489 samples, 0.35%)core::sync::atomic::atomic_compare_exchange (489 samples, 0.35%)core::ptr::read (17 samples, 0.01%)core::option::Option<T>::take (19 samples, 0.01%)core::mem::replace (19 samples, 0.01%)tokio::loom::std::parking_lot::Mutex<T>::lock (136 samples, 0.10%)lock_api::mutex::Mutex<R,T>::lock (136 samples, 0.10%)<parking_lot::raw_mutex::RawMutex as lock_api::mutex::RawMutex>::lock (136 samples, 0.10%)core::sync::atomic::AtomicU8::compare_exchange_weak (132 samples, 0.09%)core::sync::atomic::atomic_compare_exchange_weak (132 samples, 0.09%)tokio::runtime::task::harness::<impl tokio::runtime::task::raw::RawTask>::drop_reference (140 samples, 0.10%)tokio::runtime::task::state::State::ref_dec (139 samples, 0.10%)core::sync::atomic::AtomicUsize::fetch_sub (136 samples, 0.10%)core::sync::atomic::atomic_sub (136 samples, 0.10%)core::ops::function::FnOnce::call_once (27 samples, 0.02%)tokio::runtime::context::CONTEXT::_{{constant}}::_{{closure}} (27 samples, 0.02%)std::sys::thread_local::native::eager::Storage<T>::get (27 samples, 0.02%)core::cell::Cell<T>::get (27 samples, 0.02%)std::thread::local::LocalKey<T>::try_with (63 samples, 0.05%)tokio::runtime::context::with_scheduler::_{{closure}} (36 samples, 0.03%)tokio::runtime::context::scoped::Scoped<T>::with (26 samples, 0.02%)tokio::runtime::scheduler::multi_thread::worker::with_current::_{{closure}} (25 samples, 0.02%)<alloc::sync::Arc<T,A> as core::ops::deref::Deref>::deref (30 samples, 0.02%)alloc::sync::Arc<T,A>::inner (30 samples, 0.02%)core::ptr::non_null::NonNull<T>::as_ref (30 samples, 0.02%)core::ptr::read (23 samples, 0.02%)core::option::Option<T>::take (24 samples, 0.02%)core::mem::replace (24 samples, 0.02%)tokio::runtime::scheduler::multi_thread::worker::<impl tokio::runtime::scheduler::multi_thread::handle::Handle>::schedule_task (257 samples, 0.18%)tokio::runtime::scheduler::multi_thread::worker::with_current (255 samples, 0.18%)tokio::runtime::context::with_scheduler (255 samples, 0.18%)tokio::runtime::scheduler::multi_thread::worker::_<impl tokio::runtime::scheduler::multi_thread::handle::Handle>::schedule_task::_{{closure}} (192 samples, 0.14%)tokio::runtime::scheduler::multi_thread::worker::<impl tokio::runtime::scheduler::multi_thread::handle::Handle>::schedule_local (118 samples, 0.08%)tokio::runtime::task::raw::RawTask::schedule (419 samples, 0.30%)tokio::runtime::task::raw::schedule (154 samples, 0.11%)core::sync::atomic::AtomicUsize::compare_exchange (82 samples, 0.06%)core::sync::atomic::atomic_compare_exchange (82 samples, 0.06%)tokio::runtime::task::state::State::load (559 samples, 0.40%)core::sync::atomic::AtomicUsize::load (559 samples, 0.40%)core::sync::atomic::atomic_load (559 samples, 0.40%)tokio::runtime::io::driver::Driver::turn (4,784 samples, 3.44%)tok..tokio::runtime::io::scheduled_io::ScheduledIo::wake (1,975 samples, 1.42%)tokio::util::wake_list::WakeList::wake_all (1,235 samples, 0.89%)core::task::wake::Waker::wake (1,223 samples, 0.88%)tokio::runtime::task::waker::wake_by_val (1,222 samples, 0.88%)tokio::runtime::task::harness::<impl tokio::runtime::task::raw::RawTask>::wake_by_val (1,222 samples, 0.88%)tokio::runtime::task::state::State::transition_to_notified_by_val (662 samples, 0.48%)tokio::runtime::task::state::State::fetch_update_action (662 samples, 0.48%)tokio::runtime::task::state::State::transition_to_notified_by_val::_{{closure}} (18 samples, 0.01%)tokio::runtime::context::thread_rng_n (35 samples, 0.03%)std::thread::local::LocalKey<T>::with (35 samples, 0.03%)std::thread::local::LocalKey<T>::try_with (35 samples, 0.03%)tokio::runtime::context::thread_rng_n::_{{closure}} (22 samples, 0.02%)<u32 as core::iter::range::Step>::forward_unchecked (46 samples, 0.03%)core::num::<impl u32>::unchecked_add (46 samples, 0.03%)core::iter::range::<impl core::iter::traits::iterator::Iterator for core::ops::range::Range<A>>::next (73 samples, 0.05%)<core::ops::range::Range<T> as core::iter::range::RangeIteratorImpl>::spec_next (73 samples, 0.05%)core::mem::drop (972 samples, 0.70%)core::ptr::drop_in_place<tokio::loom::std::parking_lot::MutexGuard<tokio::runtime::time::wheel::Wheel>> (972 samples, 0.70%)core::ptr::drop_in_place<lock_api::mutex::MutexGuard<parking_lot::raw_mutex::RawMutex,tokio::runtime::time::wheel::Wheel>> (972 samples, 0.70%)<lock_api::mutex::MutexGuard<R,T> as core::ops::drop::Drop>::drop (972 samples, 0.70%)<parking_lot::raw_mutex::RawMutex as lock_api::mutex::RawMutex>::unlock (972 samples, 0.70%)core::sync::atomic::AtomicU8::compare_exchange (963 samples, 0.69%)core::sync::atomic::atomic_compare_exchange (963 samples, 0.69%)core::slice::<impl [T]>::get_unchecked (36 samples, 0.03%)<usize as core::slice::index::SliceIndex<[T]>>::get_unchecked (36 samples, 0.03%)core::slice::index::get_noubcheck (36 samples, 0.03%)core::result::Result<T,E>::is_err (18 samples, 0.01%)core::result::Result<T,E>::is_ok (18 samples, 0.01%)tokio::runtime::time::Inner::lock_sharded_wheel (1,582 samples, 1.14%)tokio::loom::std::parking_lot::Mutex<T>::lock (1,343 samples, 0.96%)lock_api::mutex::Mutex<R,T>::lock (1,343 samples, 0.96%)<parking_lot::raw_mutex::RawMutex as lock_api::mutex::RawMutex>::lock (1,343 samples, 0.96%)core::sync::atomic::AtomicU8::compare_exchange_weak (1,325 samples, 0.95%)core::sync::atomic::atomic_compare_exchange_weak (1,325 samples, 0.95%)tokio::runtime::time::wheel::Wheel::elapsed (39 samples, 0.03%)<core::iter::adapters::enumerate::Enumerate<I> as core::iter::traits::iterator::Iterator>::next (129 samples, 0.09%)<core::slice::iter::Iter<T> as core::iter::traits::iterator::Iterator>::next (129 samples, 0.09%)<core::ptr::non_null::NonNull<T> as core::cmp::PartialEq>::eq (65 samples, 0.05%)tokio::runtime::time::wheel::level::Level::next_expiration (250 samples, 0.18%)tokio::runtime::time::wheel::level::Level::next_occupied_slot (250 samples, 0.18%)tokio::runtime::time::wheel::Wheel::next_expiration (1,056 samples, 0.76%)tokio::util::linked_list::LinkedList<L,<L as tokio::util::linked_list::Link>::Target>::is_empty (27 samples, 0.02%)core::option::Option<T>::is_some (27 samples, 0.02%)tokio::runtime::time::wheel::Wheel::set_elapsed (36 samples, 0.03%)tokio::runtime::time::wheel::Wheel::poll (1,155 samples, 0.83%)tokio::util::linked_list::LinkedList<L,<L as tokio::util::linked_list::Link>::Target>::pop_back (63 samples, 0.05%)<core::option::Option<T> as core::ops::try_trait::Try>::branch (26 samples, 0.02%)core::option::Option<T>::map (45 samples, 0.03%)<core::iter::adapters::enumerate::Enumerate<I> as core::iter::traits::iterator::Iterator>::next (154 samples, 0.11%)<core::slice::iter::Iter<T> as core::iter::traits::iterator::Iterator>::next (154 samples, 0.11%)<core::ptr::non_null::NonNull<T> as core::cmp::PartialEq>::eq (63 samples, 0.05%)tokio::runtime::time::wheel::level::Level::next_expiration (232 samples, 0.17%)tokio::runtime::time::wheel::level::Level::next_occupied_slot (232 samples, 0.17%)core::option::Option<T>::is_none (32 samples, 0.02%)core::option::Option<T>::is_some (32 samples, 0.02%)tokio::runtime::time::wheel::Wheel::poll_at (864 samples, 0.62%)tokio::runtime::time::wheel::Wheel::next_expiration (819 samples, 0.59%)tokio::util::linked_list::LinkedList<L,<L as tokio::util::linked_list::Link>::Target>::is_empty (56 samples, 0.04%)core::option::Option<T>::is_some (24 samples, 0.02%)core::iter::traits::iterator::Iterator::min (5,121 samples, 3.68%)core..core::iter::traits::iterator::Iterator::min_by (5,121 samples, 3.68%)core..core::iter::traits::iterator::Iterator::reduce (5,121 samples, 3.68%)core..<core::iter::adapters::filter_map::FilterMap<I,F> as core::iter::traits::iterator::Iterator>::next (5,121 samples, 3.68%)<cor..core::iter::traits::iterator::Iterator::find_map (5,121 samples, 3.68%)core..core::iter::traits::iterator::Iterator::try_fold (5,121 samples, 3.68%)core..core::iter::traits::iterator::Iterator::find_map::check::_{{closure}} (4,994 samples, 3.59%)core..core::ops::function::impls::<impl core::ops::function::FnMut<A> for &mut F>::call_mut (4,994 samples, 3.59%)core..tokio::runtime::time::_<impl tokio::runtime::time::handle::Handle>::process_at_time::_{{closure}} (4,962 samples, 3.56%)toki..tokio::runtime::time::<impl tokio::runtime::time::handle::Handle>::process_at_sharded_time (4,917 samples, 3.53%)tok..tokio::util::wake_list::WakeList::wake_all (49 samples, 0.04%)tokio::runtime::time::<impl tokio::runtime::time::handle::Handle>::process_at_time (5,148 samples, 3.70%)toki..tokio::runtime::time::next_wake_time (15 samples, 0.01%)core::option::Option<T>::and_then (15 samples, 0.01%)core::time::Duration::as_millis (34 samples, 0.02%)tokio::runtime::time::source::TimeSource::instant_to_tick (99 samples, 0.07%)tokio::time::instant::Instant::saturating_duration_since (51 samples, 0.04%)std::time::Instant::duration_since (51 samples, 0.04%)std::time::Instant::checked_duration_since (49 samples, 0.04%)std::sys::pal::unix::time::Instant::checked_sub_instant (49 samples, 0.04%)std::sys::pal::unix::time::Timespec::sub_timespec (39 samples, 0.03%)clock_gettime (586 samples, 0.42%)__vdso_clock_gettime (366 samples, 0.26%)std::sys::pal::unix::time::Timespec::now (610 samples, 0.44%)tokio::runtime::time::<impl tokio::runtime::time::handle::Handle>::process (5,958 samples, 4.28%)tokio..tokio::runtime::time::source::TimeSource::now (712 samples, 0.51%)tokio::time::clock::Clock::now (613 samples, 0.44%)tokio::time::clock::now (613 samples, 0.44%)tokio::runtime::scheduler::multi_thread::park::Inner::park_driver (18,077 samples, 12.98%)tokio::runtime::sche..tokio::runtime::time::Driver::park_internal (17,389 samples, 12.49%)tokio::runtime::tim..tokio::runtime::scheduler::multi_thread::park::Parker::park (20,501 samples, 14.73%)tokio::runtime::schedu..tokio::runtime::scheduler::multi_thread::park::Inner::park (20,501 samples, 14.73%)tokio::runtime::schedu..tokio::util::try_lock::TryLock<T>::try_lock (526 samples, 0.38%)core::sync::atomic::AtomicBool::compare_exchange (526 samples, 0.38%)core::sync::atomic::atomic_compare_exchange (526 samples, 0.38%)core::sync::atomic::AtomicUsize::swap (25 samples, 0.02%)core::sync::atomic::atomic_swap (25 samples, 0.02%)tokio::runtime::scheduler::multi_thread::park::Unparker::unpark (55 samples, 0.04%)tokio::runtime::scheduler::multi_thread::park::Inner::unpark (55 samples, 0.04%)alloc::vec::Vec<T,A>::pop (22 samples, 0.02%)core::ptr::read (18 samples, 0.01%)core::sync::atomic::AtomicUsize::fetch_add (38 samples, 0.03%)core::sync::atomic::atomic_add (38 samples, 0.03%)tokio::runtime::scheduler::multi_thread::idle::Idle::notify_should_wakeup (42 samples, 0.03%)tokio::runtime::scheduler::multi_thread::worker::<impl tokio::runtime::scheduler::multi_thread::handle::Handle>::notify_parked_local (81 samples, 0.06%)tokio::runtime::scheduler::multi_thread::idle::Idle::worker_to_notify (80 samples, 0.06%)tokio::runtime::scheduler::multi_thread::worker::Context::park_timeout (21,192 samples, 15.22%)tokio::runtime::schedul..tokio::runtime::scheduler::multi_thread::worker::Core::should_notify_others (175 samples, 0.13%)tokio::runtime::scheduler::multi_thread::queue::Local<T>::len (75 samples, 0.05%)tokio::runtime::scheduler::multi_thread::queue::Inner<T>::len (70 samples, 0.05%)core::sync::atomic::AtomicU64::load (64 samples, 0.05%)core::sync::atomic::atomic_load (64 samples, 0.05%)core::ptr::drop_in_place<tokio::loom::std::parking_lot::MutexGuard<tokio::runtime::scheduler::multi_thread::worker::Synced>> (298 samples, 0.21%)core::ptr::drop_in_place<lock_api::mutex::MutexGuard<parking_lot::raw_mutex::RawMutex,tokio::runtime::scheduler::multi_thread::worker::Synced>> (298 samples, 0.21%)<lock_api::mutex::MutexGuard<R,T> as core::ops::drop::Drop>::drop (298 samples, 0.21%)<parking_lot::raw_mutex::RawMutex as lock_api::mutex::RawMutex>::unlock (298 samples, 0.21%)core::sync::atomic::AtomicU8::compare_exchange (293 samples, 0.21%)core::sync::atomic::atomic_compare_exchange (293 samples, 0.21%)core::sync::atomic::AtomicU8::compare_exchange_weak (177 samples, 0.13%)core::sync::atomic::atomic_compare_exchange_weak (177 samples, 0.13%)tokio::loom::std::parking_lot::Mutex<T>::lock (206 samples, 0.15%)lock_api::mutex::Mutex<R,T>::lock (206 samples, 0.15%)<parking_lot::raw_mutex::RawMutex as lock_api::mutex::RawMutex>::lock (206 samples, 0.15%)parking_lot::raw_mutex::RawMutex::lock_slow (28 samples, 0.02%)tokio::runtime::scheduler::multi_thread::worker::Core::maintenance (1,130 samples, 0.81%)tokio::runtime::scheduler::inject::shared::Shared<T>::is_closed (23 samples, 0.02%)core::ptr::drop_in_place<tokio::loom::std::parking_lot::MutexGuard<tokio::runtime::scheduler::multi_thread::worker::Synced>> (81 samples, 0.06%)core::ptr::drop_in_place<lock_api::mutex::MutexGuard<parking_lot::raw_mutex::RawMutex,tokio::runtime::scheduler::multi_thread::worker::Synced>> (81 samples, 0.06%)<lock_api::mutex::MutexGuard<R,T> as core::ops::drop::Drop>::drop (81 samples, 0.06%)<parking_lot::raw_mutex::RawMutex as lock_api::mutex::RawMutex>::unlock (81 samples, 0.06%)core::sync::atomic::AtomicU8::compare_exchange (79 samples, 0.06%)core::sync::atomic::atomic_compare_exchange (79 samples, 0.06%)<T as core::slice::cmp::SliceContains>::slice_contains::_{{closure}} (194 samples, 0.14%)core::cmp::impls::<impl core::cmp::PartialEq for usize>::eq (194 samples, 0.14%)core::slice::<impl [T]>::contains (248 samples, 0.18%)<T as core::slice::cmp::SliceContains>::slice_contains (248 samples, 0.18%)<core::slice::iter::Iter<T> as core::iter::traits::iterator::Iterator>::any (248 samples, 0.18%)<core::slice::iter::Iter<T> as core::iter::traits::iterator::Iterator>::next (14 samples, 0.01%)core::sync::atomic::AtomicU8::compare_exchange_weak (60 samples, 0.04%)core::sync::atomic::atomic_compare_exchange_weak (60 samples, 0.04%)tokio::runtime::scheduler::multi_thread::idle::Idle::is_parked (399 samples, 0.29%)tokio::loom::std::parking_lot::Mutex<T>::lock (65 samples, 0.05%)lock_api::mutex::Mutex<R,T>::lock (65 samples, 0.05%)<parking_lot::raw_mutex::RawMutex as lock_api::mutex::RawMutex>::lock (65 samples, 0.05%)core::iter::range::<impl core::iter::traits::iterator::Iterator for core::ops::range::Range<A>>::next (17 samples, 0.01%)<core::ops::range::Range<T> as core::iter::range::RangeIteratorImpl>::spec_next (17 samples, 0.01%)core::ptr::drop_in_place<tokio::loom::std::parking_lot::MutexGuard<tokio::runtime::scheduler::multi_thread::worker::Synced>> (29 samples, 0.02%)core::ptr::drop_in_place<lock_api::mutex::MutexGuard<parking_lot::raw_mutex::RawMutex,tokio::runtime::scheduler::multi_thread::worker::Synced>> (29 samples, 0.02%)<lock_api::mutex::MutexGuard<R,T> as core::ops::drop::Drop>::drop (29 samples, 0.02%)<parking_lot::raw_mutex::RawMutex as lock_api::mutex::RawMutex>::unlock (29 samples, 0.02%)core::sync::atomic::AtomicU8::compare_exchange (29 samples, 0.02%)core::sync::atomic::atomic_compare_exchange (29 samples, 0.02%)core::sync::atomic::AtomicU8::compare_exchange_weak (25 samples, 0.02%)core::sync::atomic::atomic_compare_exchange_weak (25 samples, 0.02%)tokio::loom::std::parking_lot::Mutex<T>::lock (26 samples, 0.02%)lock_api::mutex::Mutex<R,T>::lock (26 samples, 0.02%)<parking_lot::raw_mutex::RawMutex as lock_api::mutex::RawMutex>::lock (26 samples, 0.02%)tokio::runtime::scheduler::multi_thread::idle::Idle::unpark_worker_by_id (216 samples, 0.16%)tokio::runtime::scheduler::multi_thread::idle::State::unpark_one (49 samples, 0.04%)core::sync::atomic::AtomicUsize::fetch_add (49 samples, 0.04%)core::sync::atomic::atomic_add (49 samples, 0.04%)tokio::runtime::scheduler::multi_thread::worker::Core::transition_from_parked (643 samples, 0.46%)alloc::vec::Vec<T,A>::push (68 samples, 0.05%)core::ptr::drop_in_place<tokio::loom::std::parking_lot::MutexGuard<tokio::runtime::scheduler::multi_thread::worker::Synced>> (372 samples, 0.27%)core::ptr::drop_in_place<lock_api::mutex::MutexGuard<parking_lot::raw_mutex::RawMutex,tokio::runtime::scheduler::multi_thread::worker::Synced>> (372 samples, 0.27%)<lock_api::mutex::MutexGuard<R,T> as core::ops::drop::Drop>::drop (372 samples, 0.27%)<parking_lot::raw_mutex::RawMutex as lock_api::mutex::RawMutex>::unlock (372 samples, 0.27%)core::sync::atomic::AtomicU8::compare_exchange (371 samples, 0.27%)core::sync::atomic::atomic_compare_exchange (371 samples, 0.27%)core::sync::atomic::AtomicU8::compare_exchange_weak (80 samples, 0.06%)core::sync::atomic::atomic_compare_exchange_weak (80 samples, 0.06%)core::sync::atomic::AtomicU8::load (20 samples, 0.01%)core::sync::atomic::atomic_load (20 samples, 0.01%)tokio::loom::std::parking_lot::Mutex<T>::lock (109 samples, 0.08%)lock_api::mutex::Mutex<R,T>::lock (109 samples, 0.08%)<parking_lot::raw_mutex::RawMutex as lock_api::mutex::RawMutex>::lock (109 samples, 0.08%)parking_lot::raw_mutex::RawMutex::lock_slow (27 samples, 0.02%)tokio::runtime::scheduler::multi_thread::idle::Idle::transition_worker_to_parked (607 samples, 0.44%)tokio::runtime::scheduler::multi_thread::idle::State::dec_num_unparked (58 samples, 0.04%)core::sync::atomic::AtomicUsize::fetch_sub (53 samples, 0.04%)core::sync::atomic::atomic_sub (53 samples, 0.04%)<core::slice::iter::Iter<T> as core::iter::traits::iterator::Iterator>::next (14 samples, 0.01%)core::sync::atomic::AtomicU32::load (19 samples, 0.01%)core::sync::atomic::atomic_load (19 samples, 0.01%)tokio::runtime::scheduler::multi_thread::queue::Steal<T>::is_empty (41 samples, 0.03%)tokio::runtime::scheduler::multi_thread::queue::Inner<T>::is_empty (35 samples, 0.03%)tokio::runtime::scheduler::multi_thread::queue::Inner<T>::len (35 samples, 0.03%)core::sync::atomic::AtomicU64::load (16 samples, 0.01%)core::sync::atomic::atomic_load (16 samples, 0.01%)tokio::runtime::scheduler::multi_thread::worker::<impl tokio::runtime::scheduler::multi_thread::handle::Handle>::notify_if_work_pending (78 samples, 0.06%)tokio::runtime::scheduler::multi_thread::worker::Context::park (24,038 samples, 17.27%)tokio::runtime::scheduler::..tokio::runtime::scheduler::multi_thread::worker::Core::transition_to_parked (731 samples, 0.53%)tokio::runtime::scheduler::multi_thread::worker::Core::has_tasks (14 samples, 0.01%)core::ptr::drop_in_place<core::result::Result<tokio::runtime::coop::with_budget::ResetGuard,std::thread::local::AccessError>> (14 samples, 0.01%)core::ops::function::FnOnce::call_once (20 samples, 0.01%)tokio::runtime::context::CONTEXT::_{{constant}}::_{{closure}} (20 samples, 0.01%)std::sys::thread_local::native::eager::Storage<T>::get (20 samples, 0.01%)core::cell::Cell<T>::get (14 samples, 0.01%)tokio::runtime::context::budget (36 samples, 0.03%)std::thread::local::LocalKey<T>::try_with (36 samples, 0.03%)tokio::runtime::context::budget::_{{closure}} (16 samples, 0.01%)tokio::runtime::coop::with_budget::_{{closure}} (16 samples, 0.01%)core::cell::RefCell<T>::borrow_mut (101 samples, 0.07%)core::cell::RefCell<T>::try_borrow_mut (101 samples, 0.07%)core::cell::BorrowRefMut::new (101 samples, 0.07%)core::ptr::read (245 samples, 0.18%)core::option::Option<T>::take (248 samples, 0.18%)core::mem::replace (248 samples, 0.18%)core::ops::function::FnOnce::call_once (14 samples, 0.01%)tokio::runtime::context::CONTEXT::_{{constant}}::_{{closure}} (14 samples, 0.01%)std::sys::thread_local::native::eager::Storage<T>::get (14 samples, 0.01%)tokio::runtime::coop::has_budget_remaining (38 samples, 0.03%)tokio::runtime::context::budget (36 samples, 0.03%)std::thread::local::LocalKey<T>::try_with (36 samples, 0.03%)tokio::runtime::context::budget::_{{closure}} (22 samples, 0.02%)tokio::runtime::coop::has_budget_remaining::_{{closure}} (22 samples, 0.02%)core::cell::Cell<T>::get (22 samples, 0.02%)tokio::runtime::scheduler::multi_thread::worker::Context::reset_lifo_enabled (111 samples, 0.08%)<alloc::sync::Arc<T,A> as core::ops::deref::Deref>::deref (34 samples, 0.02%)alloc::sync::Arc<T,A>::inner (34 samples, 0.02%)core::ptr::non_null::NonNull<T>::as_ref (34 samples, 0.02%)parking_lot::condvar::Condvar::notify_one_slow (23 samples, 0.02%)parking_lot_core::parking_lot::unpark_requeue (23 samples, 0.02%)tokio::runtime::scheduler::multi_thread::park::Unparker::unpark (22 samples, 0.02%)tokio::runtime::scheduler::multi_thread::park::Inner::unpark (22 samples, 0.02%)tokio::runtime::scheduler::multi_thread::queue::Local<T>::push_back_or_overflow (15 samples, 0.01%)tokio::runtime::scheduler::multi_thread::worker::<impl tokio::runtime::task::Schedule for alloc::sync::Arc<tokio::runtime::scheduler::multi_thread::handle::Handle>>::yield_now (112 samples, 0.08%)tokio::runtime::scheduler::multi_thread::worker::<impl tokio::runtime::scheduler::multi_thread::handle::Handle>::schedule_task (111 samples, 0.08%)tokio::runtime::scheduler::multi_thread::worker::with_current (111 samples, 0.08%)tokio::runtime::context::with_scheduler (111 samples, 0.08%)tokio::runtime::scheduler::multi_thread::worker::_<impl tokio::runtime::scheduler::multi_thread::handle::Handle>::schedule_task::_{{closure}} (109 samples, 0.08%)tokio::runtime::scheduler::multi_thread::worker::<impl tokio::runtime::scheduler::multi_thread::handle::Handle>::schedule_local (101 samples, 0.07%)tokio::runtime::scheduler::multi_thread::worker::<impl tokio::runtime::scheduler::multi_thread::handle::Handle>::notify_parked_local (34 samples, 0.02%)tokio::runtime::scheduler::multi_thread::idle::Idle::worker_to_notify (29 samples, 0.02%)tokio::runtime::scheduler::multi_thread::idle::Idle::notify_should_wakeup (26 samples, 0.02%)core::sync::atomic::AtomicUsize::fetch_add (26 samples, 0.02%)core::sync::atomic::atomic_add (26 samples, 0.02%)<core::pin::Pin<P> as futures_core::future::FusedFuture>::is_terminated (45 samples, 0.03%)<futures_util::future::future::fuse::Fuse<Fut> as futures_core::future::FusedFuture>::is_terminated (23 samples, 0.02%)core::option::Option<T>::is_none (23 samples, 0.02%)core::option::Option<T>::is_some (23 samples, 0.02%)<T as core::convert::Into<U>>::into (70 samples, 0.05%)wisp_mux::fastwebsockets::<impl core::convert::From<fastwebsockets::frame::OpCode> for wisp_mux::ws::OpCode>::from (70 samples, 0.05%)<fastwebsockets::frame::OpCode as core::cmp::PartialEq>::eq (37 samples, 0.03%)core::cmp::PartialEq::ne (77 samples, 0.06%)<fastwebsockets::frame::OpCode as core::cmp::PartialEq>::eq (77 samples, 0.06%)<core::result::Result<T,E> as core::ops::try_trait::Try>::branch (16 samples, 0.01%)bytes::bytes_mut::BytesMut::advance_unchecked (29 samples, 0.02%)<bytes::bytes_mut::BytesMut as bytes::buf::buf_impl::Buf>::advance (39 samples, 0.03%)<&mut T as bytes::buf::buf_mut::BufMut>::advance_mut (213 samples, 0.15%)<bytes::bytes_mut::BytesMut as bytes::buf::buf_mut::BufMut>::advance_mut (123 samples, 0.09%)bytes::bytes_mut::BytesMut::len (107 samples, 0.08%)[libc.so.6] (604 samples, 0.43%)recv (1,148 samples, 0.82%)[unknown] (73 samples, 0.05%)<isize as std::sys::pal::unix::IsMinusOne>::is_minus_one (102 samples, 0.07%)<&mio::net::tcp::stream::TcpStream as std::io::Read>::read (1,255 samples, 0.90%)mio::io_source::IoSource<T>::do_io (1,255 samples, 0.90%)mio::sys::unix::stateless_io_source::IoSourceState::do_io (1,255 samples, 0.90%)<&mio::net::tcp::stream::TcpStream as std::io::Read>::read::_{{closure}} (1,255 samples, 0.90%)<&std::net::tcp::TcpStream as std::io::Read>::read (1,255 samples, 0.90%)std::sys_common::net::TcpStream::read (1,255 samples, 0.90%)std::sys::pal::unix::net::Socket::read (1,255 samples, 0.90%)std::sys::pal::unix::net::Socket::recv_with_flags (1,255 samples, 0.90%)std::sys::pal::unix::cvt (105 samples, 0.08%)tokio::io::read_buf::ReadBuf::assume_init (62 samples, 0.04%)core::sync::atomic::AtomicUsize::compare_exchange (16 samples, 0.01%)core::sync::atomic::atomic_compare_exchange (16 samples, 0.01%)tokio::runtime::io::registration::Registration::clear_readiness (35 samples, 0.03%)tokio::runtime::io::scheduled_io::ScheduledIo::clear_readiness (35 samples, 0.03%)tokio::runtime::io::scheduled_io::ScheduledIo::set_readiness (34 samples, 0.02%)core::sync::atomic::AtomicUsize::load (18 samples, 0.01%)core::sync::atomic::atomic_load (18 samples, 0.01%)core::ops::function::FnOnce::call_once (15 samples, 0.01%)tokio::runtime::context::CONTEXT::_{{constant}}::_{{closure}} (15 samples, 0.01%)std::sys::thread_local::native::eager::Storage<T>::get (15 samples, 0.01%)tokio::runtime::coop::poll_proceed (23 samples, 0.02%)tokio::runtime::context::budget (23 samples, 0.02%)std::thread::local::LocalKey<T>::try_with (23 samples, 0.02%)<core::task::wake::Waker as core::clone::Clone>::clone (27 samples, 0.02%)tokio::runtime::task::waker::clone_waker (27 samples, 0.02%)tokio::runtime::task::state::State::ref_inc (15 samples, 0.01%)core::sync::atomic::AtomicUsize::fetch_add (15 samples, 0.01%)core::sync::atomic::atomic_add (15 samples, 0.01%)core::sync::atomic::AtomicUsize::load (323 samples, 0.23%)core::sync::atomic::atomic_load (323 samples, 0.23%)<&mut T as tokio::io::async_read::AsyncRead>::poll_read (2,023 samples, 1.45%)<tokio_util::either::Either<L,R> as tokio::io::async_read::AsyncRead>::poll_read (2,020 samples, 1.45%)tokio::net::tcp::stream::TcpStream::poll_read_priv (1,899 samples, 1.36%)tokio::io::poll_evented::PollEvented<E>::poll_read (1,840 samples, 1.32%)tokio::runtime::io::registration::Registration::poll_read_ready (419 samples, 0.30%)tokio::runtime::io::registration::Registration::poll_ready (414 samples, 0.30%)tokio::runtime::io::scheduled_io::ScheduledIo::poll_readiness (380 samples, 0.27%)<core::task::poll::Poll<core::result::Result<T,E>> as core::ops::try_trait::Try>::branch (21 samples, 0.02%)<tokio::io::util::read_buf::ReadBuf<R,B> as core::future::future::Future>::poll (2,302 samples, 1.65%)<bytes::bytes_mut::BytesMut as bytes::buf::buf_impl::Buf>::advance (23 samples, 0.02%)bytes::bytes_mut::BytesMut::advance_unchecked (22 samples, 0.02%)bytes::buf::buf_impl::Buf::get_u16 (31 samples, 0.02%)<bytes::bytes_mut::BytesMut as bytes::buf::buf_impl::Buf>::advance (38 samples, 0.03%)bytes::bytes_mut::BytesMut::advance_unchecked (38 samples, 0.03%)core::ptr::mut_ptr::<impl *mut T>::add (17 samples, 0.01%)bytes::buf::buf_impl::Buf::get_u32 (44 samples, 0.03%)core::intrinsics::copy_nonoverlapping (16,920 samples, 12.15%)core::intrinsics::..[libc.so.6] (16,917 samples, 12.15%)[libc.so.6]alloc::vec::Vec<T,A>::extend_from_slice (16,948 samples, 12.17%)alloc::vec::Vec<T,..<alloc::vec::Vec<T,A> as alloc::vec::spec_extend::SpecExtend<&T,core::slice::iter::Iter<T>>>::spec_extend (16,948 samples, 12.17%)<alloc::vec::Vec<T..alloc::vec::Vec<T,A>::append_elements (16,948 samples, 12.17%)alloc::vec::Vec<T,..[libc.so.6] (44 samples, 0.03%)[libc.so.6] (2,578 samples, 1.85%)[..[libc.so.6] (916 samples, 0.66%)__rdl_alloc (3,606 samples, 2.59%)__..std::sys::pal::unix::alloc::<impl core::alloc::global::GlobalAlloc for std::alloc::System>::alloc (3,606 samples, 2.59%)st..malloc (3,600 samples, 2.59%)ma..alloc::vec::Vec<T>::with_capacity (3,646 samples, 2.62%)al..alloc::vec::Vec<T,A>::with_capacity_in (3,646 samples, 2.62%)al..alloc::raw_vec::RawVec<T,A>::with_capacity_in (3,646 samples, 2.62%)al..alloc::raw_vec::RawVec<T,A>::try_allocate_in (3,646 samples, 2.62%)al..<alloc::alloc::Global as core::alloc::Allocator>::allocate (3,614 samples, 2.60%)<a..alloc::alloc::Global::alloc_impl (3,614 samples, 2.60%)al..alloc::alloc::alloc (3,614 samples, 2.60%)al..bytes::bytes_mut::Shared::is_unique (49 samples, 0.04%)core::sync::atomic::AtomicUsize::load (49 samples, 0.04%)core::sync::atomic::atomic_load (49 samples, 0.04%)bytes::bytes_mut::release_shared (998 samples, 0.72%)core::sync::atomic::AtomicUsize::fetch_sub (992 samples, 0.71%)core::sync::atomic::atomic_sub (992 samples, 0.71%)core::intrinsics::copy_nonoverlapping (19 samples, 0.01%)[libc.so.6] (19 samples, 0.01%)bytes::bytes_mut::BytesMut::reserve (21,755 samples, 15.63%)bytes::bytes_mut::BytesM..bytes::bytes_mut::BytesMut::reserve_inner (21,744 samples, 15.62%)bytes::bytes_mut::BytesM..bytes::bytes_mut::BytesMut::advance_unchecked (16 samples, 0.01%)[libc.so.6] (1,056 samples, 0.76%)[libc.so.6] (145 samples, 0.10%)__rdl_alloc (2,333 samples, 1.68%)std::sys::pal::unix::alloc::<impl core::alloc::global::GlobalAlloc for std::alloc::System>::alloc (2,333 samples, 1.68%)malloc (2,331 samples, 1.67%)alloc::boxed::Box<T>::new (2,453 samples, 1.76%)alloc::alloc::exchange_malloc (2,440 samples, 1.75%)<alloc::alloc::Global as core::alloc::Allocator>::allocate (2,437 samples, 1.75%)alloc::alloc::Global::alloc_impl (2,437 samples, 1.75%)alloc::alloc::alloc (2,437 samples, 1.75%)core::ptr::read_volatile (104 samples, 0.07%)bytes::bytes_mut::BytesMut::promote_to_shared (2,483 samples, 1.78%)b..bytes::bytes_mut::BytesMut::shallow_clone (2,515 samples, 1.81%)b..bytes::bytes_mut::BytesMut::split_to (2,551 samples, 1.83%)b..fastwebsockets::ReadHalf::parse_frame_header::_{{closure}} (27,468 samples, 19.73%)fastwebsockets::ReadHalf::parse..fastwebsockets::frame::Payload::to_mut (59 samples, 0.04%)<core::slice::iter::IterMut<T> as core::iter::traits::iterator::Iterator>::next (74 samples, 0.05%)core::slice::<impl [T]>::align_to_mut (32 samples, 0.02%)fastwebsockets::WebSocketRead<S>::read_frame::_{{closure}} (36,735 samples, 26.39%)fastwebsockets::WebSocketRead<S>::read_fra..fastwebsockets::ReadHalf::read_frame_inner::_{{closure}} (35,968 samples, 25.83%)fastwebsockets::ReadHalf::read_frame_inne..fastwebsockets::frame::Frame::unmask (8,103 samples, 5.82%)fastweb..fastwebsockets::mask::unmask (7,933 samples, 5.70%)fastweb..fastwebsockets::mask::unmask_fallback (7,933 samples, 5.70%)fastweb..fastwebsockets::mask::unmask_easy (21 samples, 0.02%)core::iter::traits::iterator::Iterator::for_each (21 samples, 0.02%)<core::iter::adapters::enumerate::Enumerate<I> as core::iter::traits::iterator::Iterator>::fold (21 samples, 0.02%)<core::slice::iter::IterMut<T> as core::iter::traits::iterator::Iterator>::fold (21 samples, 0.02%)<core::pin::Pin<P> as core::future::future::Future>::poll (37,612 samples, 27.02%)<core::pin::Pin<P> as core::future::future:..wisp_mux::fastwebsockets::_<impl wisp_mux::ws::WebSocketRead for fastwebsockets::WebSocketRead<S>>::wisp_read_split::_{{closure}} (37,612 samples, 27.02%)wisp_mux::fastwebsockets::_<impl wisp_mux::..fastwebsockets::frame::<impl core::convert::From<fastwebsockets::frame::Payload> for bytes::bytes_mut::BytesMut>::from (159 samples, 0.11%)<alloc::boxed::Box<T,A> as core::ops::drop::Drop>::drop (404 samples, 0.29%)<alloc::alloc::Global as core::alloc::Allocator>::deallocate (396 samples, 0.28%)alloc::alloc::dealloc (396 samples, 0.28%)__rdl_dealloc (396 samples, 0.28%)std::sys::pal::unix::alloc::<impl core::alloc::global::GlobalAlloc for std::alloc::System>::dealloc (396 samples, 0.28%)cfree (385 samples, 0.28%)[libc.so.6] (74 samples, 0.05%)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>>> (511 samples, 0.37%)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>> (511 samples, 0.37%)__rdl_alloc (34 samples, 0.02%)std::sys::pal::unix::alloc::<impl core::alloc::global::GlobalAlloc for std::alloc::System>::alloc (34 samples, 0.02%)malloc (34 samples, 0.02%)<core::pin::Pin<P> as core::future::future::Future>::poll (38,575 samples, 27.71%)<core::pin::Pin<P> as core::future::future::..<wisp_mux::ws::AppendingWebSocketRead<R> as wisp_mux::ws::WebSocketRead>::wisp_read_split::_{{closure}} (38,569 samples, 27.70%)<wisp_mux::ws::AppendingWebSocketRead<R> as ..wisp_mux::fastwebsockets::<impl wisp_mux::ws::WebSocketRead for fastwebsockets::WebSocketRead<S>>::wisp_read_split (40 samples, 0.03%)alloc::boxed::Box<T>::pin (40 samples, 0.03%)alloc::boxed::Box<T>::new (40 samples, 0.03%)alloc::alloc::exchange_malloc (37 samples, 0.03%)<alloc::alloc::Global as core::alloc::Allocator>::allocate (36 samples, 0.03%)alloc::alloc::Global::alloc_impl (36 samples, 0.03%)alloc::alloc::alloc (36 samples, 0.03%)<core::result::Result<T,E> as core::ops::try_trait::Try>::branch (105 samples, 0.08%)__rdl_alloc (50 samples, 0.04%)std::sys::pal::unix::alloc::<impl core::alloc::global::GlobalAlloc for std::alloc::System>::alloc (50 samples, 0.04%)malloc (48 samples, 0.03%)<wisp_mux::ws::AppendingWebSocketRead<R> as wisp_mux::ws::WebSocketRead>::wisp_read_split (61 samples, 0.04%)alloc::boxed::Box<T>::pin (61 samples, 0.04%)alloc::boxed::Box<T>::new (61 samples, 0.04%)alloc::alloc::exchange_malloc (59 samples, 0.04%)<alloc::alloc::Global as core::alloc::Allocator>::allocate (57 samples, 0.04%)alloc::alloc::Global::alloc_impl (57 samples, 0.04%)alloc::alloc::alloc (57 samples, 0.04%)[libc.so.6] (276 samples, 0.20%)[libc.so.6] (148 samples, 0.11%)[libc.so.6] (36 samples, 0.03%)[libc.so.6] (576 samples, 0.41%)<alloc::alloc::Global as core::alloc::Allocator>::deallocate (628 samples, 0.45%)alloc::alloc::dealloc (628 samples, 0.45%)__rdl_dealloc (628 samples, 0.45%)std::sys::pal::unix::alloc::<impl core::alloc::global::GlobalAlloc for std::alloc::System>::dealloc (628 samples, 0.45%)cfree (626 samples, 0.45%)core::mem::drop (634 samples, 0.46%)core::ptr::drop_in_place<alloc::boxed::Box<bytes::bytes_mut::Shared>> (634 samples, 0.46%)core::ptr::drop_in_place<bytes::bytes_mut::Shared> (632 samples, 0.45%)core::ptr::drop_in_place<alloc::vec::Vec<u8>> (632 samples, 0.45%)core::ptr::drop_in_place<alloc::raw_vec::RawVec<u8>> (632 samples, 0.45%)<alloc::raw_vec::RawVec<T,A> as core::ops::drop::Drop>::drop (632 samples, 0.45%)core::sync::atomic::AtomicUsize::fetch_sub (109 samples, 0.08%)core::sync::atomic::atomic_sub (109 samples, 0.08%)bytes::bytes_mut::release_shared (748 samples, 0.54%)core::ptr::drop_in_place<bytes::bytes_mut::BytesMut> (916 samples, 0.66%)<bytes::bytes_mut::BytesMut as core::ops::drop::Drop>::drop (916 samples, 0.66%)cfree (152 samples, 0.11%)[libc.so.6] (49 samples, 0.04%)<alloc::boxed::Box<T,A> as core::ops::drop::Drop>::drop (267 samples, 0.19%)<alloc::alloc::Global as core::alloc::Allocator>::deallocate (261 samples, 0.19%)alloc::alloc::dealloc (261 samples, 0.19%)__rdl_dealloc (261 samples, 0.19%)std::sys::pal::unix::alloc::<impl core::alloc::global::GlobalAlloc for std::alloc::System>::dealloc (261 samples, 0.19%)cfree (260 samples, 0.19%)[libc.so.6] (74 samples, 0.05%)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>>> (318 samples, 0.23%)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>> (318 samples, 0.23%)core::ptr::drop_in_place<dashmap::mapref::one::Ref<u32,wisp_mux::MuxMapValue>> (132 samples, 0.09%)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>>> (132 samples, 0.09%)<lock_api::rwlock::RwLockReadGuard<R,T> as core::ops::drop::Drop>::drop (132 samples, 0.09%)<dashmap::lock::RawRwLock as lock_api::rwlock::RawRwLock>::unlock_shared (132 samples, 0.09%)core::sync::atomic::AtomicUsize::fetch_sub (132 samples, 0.09%)core::sync::atomic::atomic_sub (132 samples, 0.09%)core::ptr::drop_in_place<wisp_mux::packet::PacketType> (21 samples, 0.02%)core::sync::atomic::AtomicU32::load (30 samples, 0.02%)core::sync::atomic::atomic_load (30 samples, 0.02%)core::sync::atomic::AtomicUsize::compare_exchange_weak (62 samples, 0.04%)core::sync::atomic::atomic_compare_exchange_weak (62 samples, 0.04%)<dashmap::DashMap<K,V,S> as dashmap::t::Map<K,V,S>>::_yield_read_shard (225 samples, 0.16%)lock_api::rwlock::RwLock<R,T>::read (215 samples, 0.15%)<dashmap::lock::RawRwLock as lock_api::rwlock::RawRwLock>::lock_shared (215 samples, 0.15%)dashmap::lock::RawRwLock::try_lock_shared_fast (215 samples, 0.15%)core::sync::atomic::AtomicUsize::load (147 samples, 0.11%)core::sync::atomic::atomic_load (147 samples, 0.11%)<core::hash::sip::Sip13Rounds as core::hash::sip::Sip>::c_rounds (36 samples, 0.03%)core::num::<impl u64>::wrapping_add (27 samples, 0.02%)core::num::<impl u64>::rotate_left (30 samples, 0.02%)<std::hash::random::DefaultHasher as core::hash::Hasher>::finish (97 samples, 0.07%)<core::hash::sip::SipHasher13 as core::hash::Hasher>::finish (97 samples, 0.07%)<core::hash::sip::Hasher<S> as core::hash::Hasher>::finish (97 samples, 0.07%)<core::hash::sip::Sip13Rounds as core::hash::sip::Sip>::d_rounds (51 samples, 0.04%)<std::hash::random::RandomState as core::hash::BuildHasher>::build_hasher (94 samples, 0.07%)core::hash::sip::SipHasher13::new_with_keys (89 samples, 0.06%)core::hash::sip::Hasher<S>::new_with_keys (89 samples, 0.06%)core::hash::sip::Hasher<S>::reset (89 samples, 0.06%)<std::hash::random::DefaultHasher as core::hash::Hasher>::write (108 samples, 0.08%)<core::hash::sip::SipHasher13 as core::hash::Hasher>::write (108 samples, 0.08%)<core::hash::sip::Hasher<S> as core::hash::Hasher>::write (107 samples, 0.08%)core::hash::sip::u8to64_le (74 samples, 0.05%)dashmap::DashMap<K,V,S>::hash_usize (307 samples, 0.22%)core::hash::impls::<impl core::hash::Hash for &T>::hash (116 samples, 0.08%)core::hash::impls::<impl core::hash::Hash for u32>::hash (114 samples, 0.08%)core::hash::Hasher::write_u32 (114 samples, 0.08%)<core::hash::sip::Sip13Rounds as core::hash::sip::Sip>::c_rounds (18 samples, 0.01%)core::num::<impl u64>::rotate_left (21 samples, 0.02%)<std::hash::random::DefaultHasher as core::hash::Hasher>::finish (66 samples, 0.05%)<core::hash::sip::SipHasher13 as core::hash::Hasher>::finish (66 samples, 0.05%)<core::hash::sip::Hasher<S> as core::hash::Hasher>::finish (66 samples, 0.05%)<core::hash::sip::Sip13Rounds as core::hash::sip::Sip>::d_rounds (37 samples, 0.03%)<std::hash::random::DefaultHasher as core::hash::Hasher>::write (30 samples, 0.02%)<core::hash::sip::SipHasher13 as core::hash::Hasher>::write (30 samples, 0.02%)<core::hash::sip::Hasher<S> as core::hash::Hasher>::write (27 samples, 0.02%)hashbrown::map::make_hash (108 samples, 0.08%)core::hash::impls::<impl core::hash::Hash for u32>::hash (38 samples, 0.03%)core::hash::Hasher::write_u32 (38 samples, 0.03%)hashbrown::map::equivalent_key::_{{closure}} (141 samples, 0.10%)<Q as hashbrown::Equivalent<K>>::equivalent (141 samples, 0.10%)core::cmp::impls::<impl core::cmp::PartialEq<&B> for &A>::eq (141 samples, 0.10%)core::cmp::impls::<impl core::cmp::PartialEq for u32>::eq (141 samples, 0.10%)hashbrown::raw::inner::RawTable<T,A>::find::_{{closure}} (155 samples, 0.11%)hashbrown::raw::inner::sse2::Group::load (153 samples, 0.11%)core::core_arch::x86::sse2::_mm_loadu_si128 (153 samples, 0.11%)core::intrinsics::copy_nonoverlapping (153 samples, 0.11%)dashmap::DashMap<K,V,S>::get (1,101 samples, 0.79%)<dashmap::DashMap<K,V,S> as dashmap::t::Map<K,V,S>>::_get (1,101 samples, 0.79%)hashbrown::map::HashMap<K,V,S,A>::get_key_value (494 samples, 0.35%)hashbrown::map::HashMap<K,V,S,A>::get_inner (493 samples, 0.35%)hashbrown::raw::inner::RawTable<T,A>::get (369 samples, 0.27%)hashbrown::raw::inner::RawTable<T,A>::find (369 samples, 0.27%)hashbrown::raw::inner::RawTableInner::find_inner (366 samples, 0.26%)hashbrown::raw::inner::sse2::Group::match_byte (27 samples, 0.02%)core::core_arch::x86::sse2::_mm_movemask_epi8 (27 samples, 0.02%)tokio::runtime::scheduler::multi_thread::worker::<impl tokio::runtime::scheduler::multi_thread::handle::Handle>::schedule_task (29 samples, 0.02%)tokio::runtime::scheduler::multi_thread::worker::with_current (29 samples, 0.02%)tokio::runtime::context::with_scheduler (29 samples, 0.02%)tokio::runtime::scheduler::multi_thread::worker::_<impl tokio::runtime::scheduler::multi_thread::handle::Handle>::schedule_task::_{{closure}} (23 samples, 0.02%)tokio::runtime::scheduler::multi_thread::worker::<impl tokio::runtime::scheduler::multi_thread::handle::Handle>::schedule_local (18 samples, 0.01%)core::task::wake::Waker::wake_by_ref (52 samples, 0.04%)tokio::runtime::task::waker::wake_by_ref (17 samples, 0.01%)tokio::runtime::task::harness::<impl tokio::runtime::task::raw::RawTask>::wake_by_ref (17 samples, 0.01%)tokio::runtime::task::state::State::transition_to_notified_by_ref (14 samples, 0.01%)tokio::runtime::task::state::State::fetch_update_action (14 samples, 0.01%)<flume::async::AsyncSignal as flume::signal::Signal>::fire (54 samples, 0.04%)alloc::collections::vec_deque::VecDeque<T,A>::is_empty (16 samples, 0.01%)alloc::collections::vec_deque::VecDeque<T,A>::pop_front (15 samples, 0.01%)alloc::collections::vec_deque::VecDeque<T,A>::buffer_read (15 samples, 0.01%)core::ptr::read (15 samples, 0.01%)core::ptr::mut_ptr::<impl *mut T>::add (18 samples, 0.01%)alloc::collections::vec_deque::VecDeque<T,A>::buffer_write (72 samples, 0.05%)core::ptr::write (54 samples, 0.04%)alloc::collections::vec_deque::VecDeque<T,A>::push_back (96 samples, 0.07%)core::option::Option<T>::as_ref (20 samples, 0.01%)alloc::collections::vec_deque::VecDeque<T,A>::len (29 samples, 0.02%)core::option::Option<T>::map (65 samples, 0.05%)flume::Shared<T>::send::_{{closure}} (62 samples, 0.04%)flume::Hook<T,S>::fire_send (19 samples, 0.01%)flume::Hook<T,S>::lock (18 samples, 0.01%)core::option::Option<T>::as_ref (18 samples, 0.01%)core::ptr::drop_in_place<std::sync::mutex::MutexGuard<flume::Chan<bytes::bytes::Bytes>>> (227 samples, 0.16%)<std::sync::mutex::MutexGuard<T> as core::ops::drop::Drop>::drop (227 samples, 0.16%)std::sys::sync::mutex::futex::Mutex::unlock (212 samples, 0.15%)core::sync::atomic::AtomicU32::swap (210 samples, 0.15%)core::sync::atomic::atomic_swap (210 samples, 0.15%)flume::Shared<T>::is_disconnected (32 samples, 0.02%)core::sync::atomic::AtomicBool::load (32 samples, 0.02%)core::sync::atomic::atomic_load (32 samples, 0.02%)flume::Sender<T>::try_send (742 samples, 0.53%)flume::Shared<T>::send_sync (731 samples, 0.53%)flume::Shared<T>::send (731 samples, 0.53%)flume::wait_lock (165 samples, 0.12%)std::sync::mutex::Mutex<T>::lock (163 samples, 0.12%)std::sys::sync::mutex::futex::Mutex::lock (152 samples, 0.11%)core::sync::atomic::AtomicU32::compare_exchange (152 samples, 0.11%)core::sync::atomic::atomic_compare_exchange (152 samples, 0.11%)<&mut T as bytes::buf::buf_impl::Buf>::remaining (26 samples, 0.02%)<wisp_mux::ws::Payload as bytes::buf::buf_impl::Buf>::remaining (26 samples, 0.02%)<wisp_mux::ws::Payload as bytes::buf::buf_impl::Buf>::advance (22 samples, 0.02%)<bytes::bytes_mut::BytesMut as bytes::buf::buf_impl::Buf>::advance (18 samples, 0.01%)bytes::buf::buf_impl::Buf::get_u32_le (72 samples, 0.05%)bytes::bytes_mut::BytesMut::advance_unchecked (39 samples, 0.03%)core::ptr::mut_ptr::<impl *mut T>::add (17 samples, 0.01%)bytes::buf::buf_impl::Buf::get_u8 (75 samples, 0.05%)<wisp_mux::ws::Payload as bytes::buf::buf_impl::Buf>::advance (53 samples, 0.04%)<bytes::bytes_mut::BytesMut as bytes::buf::buf_impl::Buf>::advance (53 samples, 0.04%)wisp_mux::packet::Packet::maybe_handle_extension::_{{closure}} (448 samples, 0.32%)wisp_mux::MuxInner::server_loop::_{{closure}} (43,551 samples, 31.28%)wisp_mux::MuxInner::server_loop::_{{closure}}core::option::Option<T>::map (65 samples, 0.05%)core::ops::function::FnOnce::call_once (65 samples, 0.05%)<alloc::sync::Arc<T,A> as core::clone::Clone>::clone (65 samples, 0.05%)core::sync::atomic::AtomicUsize::fetch_add (64 samples, 0.05%)core::sync::atomic::atomic_add (64 samples, 0.05%)flume::Chan<T>::pull_pending (19 samples, 0.01%)flume::Shared<T>::recv_sync (76 samples, 0.05%)flume::Shared<T>::recv (76 samples, 0.05%)flume::wait_lock (46 samples, 0.03%)std::sync::mutex::Mutex<T>::lock (46 samples, 0.03%)std::sys::sync::mutex::futex::Mutex::lock (43 samples, 0.03%)core::sync::atomic::AtomicU32::compare_exchange (43 samples, 0.03%)core::sync::atomic::atomic_compare_exchange (43 samples, 0.03%)core::sync::atomic::AtomicBool::load (17 samples, 0.01%)core::sync::atomic::atomic_load (15 samples, 0.01%)core::ops::function::impls::<impl core::ops::function::FnMut<A> for &mut F>::call_mut (43,868 samples, 31.51%)core::ops::function::impls::<impl core::ops::functi..wisp_mux::MuxInner::as_future::_{{closure}}::_{{closure}}::_{{closure}} (43,868 samples, 31.51%)wisp_mux::MuxInner::as_future::_{{closure}}::_{{clo..futures_util::future::future::FutureExt::poll_unpin (43,783 samples, 31.45%)futures_util::future::future::FutureExt::poll_unpin<core::pin::Pin<P> as core::future::future::Future>::poll (43,783 samples, 31.45%)<core::pin::Pin<P> as core::future::future::Future>..<futures_util::future::future::fuse::Fuse<Fut> as core::future::future::Future>::poll (43,783 samples, 31.45%)<futures_util::future::future::fuse::Fuse<Fut> as c..wisp_mux::MuxInner::stream_loop::_{{closure}} (232 samples, 0.17%)<flume::async::RecvFut<T> as core::future::future::Future>::poll (195 samples, 0.14%)flume::async::RecvFut<T>::poll_inner (195 samples, 0.14%)flume::async::<impl flume::Hook<T,flume::async::AsyncSignal>>::update_waker (34 samples, 0.02%)spin::mutex::Mutex<T,R>::lock (16 samples, 0.01%)spin::mutex::spin::SpinMutex<T,R>::lock (16 samples, 0.01%)core::sync::atomic::AtomicBool::compare_exchange_weak (16 samples, 0.01%)core::sync::atomic::atomic_compare_exchange_weak (16 samples, 0.01%)<futures_util::future::future::Map<Fut,F> as core::future::future::Future>::poll (43,976 samples, 31.59%)<futures_util::future::future::Map<Fut,F> as core::..<futures_util::future::future::map::Map<Fut,F> as core::future::future::Future>::poll (43,976 samples, 31.59%)<futures_util::future::future::map::Map<Fut,F> as c..wisp_mux::MuxInner::server_into_future::_{{closure}} (43,976 samples, 31.59%)wisp_mux::MuxInner::server_into_future::_{{closure}}wisp_mux::MuxInner::as_future::_{{closure}} (43,941 samples, 31.56%)wisp_mux::MuxInner::as_future::_{{closure}}<futures_util::future::poll_fn::PollFn<F> as core::future::future::Future>::poll (43,893 samples, 31.53%)<futures_util::future::poll_fn::PollFn<F> as core::..wisp_mux::MuxInner::as_future::_{{closure}}::_{{closure}} (43,893 samples, 31.53%)wisp_mux::MuxInner::as_future::_{{closure}}::_{{clo..core::pin::Pin<Ptr>::set (123 samples, 0.09%)core::ptr::drop_in_place<futures_util::unfold_state::UnfoldState<wisp_mux::stream::MuxStreamRead,wisp_mux::stream::MuxStreamRead::into_inner_stream::{{closure}}::{{closure}}>> (33 samples, 0.02%)futures_util::unfold_state::UnfoldState<T,R>::take_value (187 samples, 0.13%)futures_util::unfold_state::_::<impl futures_util::unfold_state::UnfoldState<T,R>>::project_replace (25 samples, 0.02%)core::ptr::read (24 samples, 0.02%)<T as core::convert::Into<U>>::into (22 samples, 0.02%)wisp_mux::packet::<impl core::convert::From<wisp_mux::packet::Packet> for wisp_mux::ws::Frame>::from (22 samples, 0.02%)wisp_mux::packet::<impl core::convert::From<wisp_mux::packet::Packet> for bytes::bytes_mut::BytesMut>::from (22 samples, 0.02%)<flume::async::RecvFut<T> as futures_core::future::FusedFuture>::is_terminated (115 samples, 0.08%)flume::Shared<T>::is_disconnected (98 samples, 0.07%)core::sync::atomic::AtomicBool::load (98 samples, 0.07%)core::sync::atomic::atomic_load (98 samples, 0.07%)<core::pin::Pin<P> as futures_core::future::FusedFuture>::is_terminated (116 samples, 0.08%)core::task::poll::Poll<T>::map (48 samples, 0.03%)core::option::Option<T>::is_some (17 samples, 0.01%)alloc::collections::vec_deque::VecDeque<T,A>::buffer_read (130 samples, 0.09%)core::ptr::read (125 samples, 0.09%)alloc::collections::vec_deque::VecDeque<T,A>::pop_front (146 samples, 0.10%)core::mem::drop (92 samples, 0.07%)core::ptr::drop_in_place<std::sync::mutex::MutexGuard<flume::Chan<bytes::bytes::Bytes>>> (92 samples, 0.07%)<std::sync::mutex::MutexGuard<T> as core::ops::drop::Drop>::drop (92 samples, 0.07%)std::sys::sync::mutex::futex::Mutex::unlock (82 samples, 0.06%)core::sync::atomic::AtomicU32::swap (80 samples, 0.06%)core::sync::atomic::atomic_swap (80 samples, 0.06%)flume::Chan<T>::pull_pending (26 samples, 0.02%)flume::Hook<T,S>::trigger (20 samples, 0.01%)alloc::sync::Arc<T>::new (20 samples, 0.01%)alloc::boxed::Box<T>::new (20 samples, 0.01%)alloc::alloc::exchange_malloc (20 samples, 0.01%)<alloc::alloc::Global as core::alloc::Allocator>::allocate (20 samples, 0.01%)alloc::alloc::Global::alloc_impl (20 samples, 0.01%)alloc::alloc::alloc (20 samples, 0.01%)__rdl_alloc (20 samples, 0.01%)std::sys::pal::unix::alloc::<impl core::alloc::global::GlobalAlloc for std::alloc::System>::alloc (20 samples, 0.01%)malloc (20 samples, 0.01%)flume::async::RecvFut<T>::poll_inner::_{{closure}} (25 samples, 0.02%)flume::Shared<T>::recv (441 samples, 0.32%)flume::wait_lock (118 samples, 0.08%)std::sync::mutex::Mutex<T>::lock (118 samples, 0.08%)std::sys::sync::mutex::futex::Mutex::lock (111 samples, 0.08%)core::sync::atomic::AtomicU32::compare_exchange (108 samples, 0.08%)core::sync::atomic::atomic_compare_exchange (108 samples, 0.08%)alloc::collections::vec_deque::VecDeque<T,A>::pop_front (14 samples, 0.01%)flume::Shared<T>::recv_sync (50 samples, 0.04%)flume::Shared<T>::recv (50 samples, 0.04%)flume::wait_lock (16 samples, 0.01%)std::sync::mutex::Mutex<T>::lock (16 samples, 0.01%)std::sys::sync::mutex::futex::Mutex::lock (14 samples, 0.01%)core::sync::atomic::AtomicU32::compare_exchange (14 samples, 0.01%)core::sync::atomic::atomic_compare_exchange (14 samples, 0.01%)<flume::async::RecvFut<T> as core::future::future::Future>::poll (555 samples, 0.40%)flume::async::RecvFut<T>::poll_inner (555 samples, 0.40%)<event_listener::sys::ListLock<T> as core::ops::drop::Drop>::drop (19 samples, 0.01%)core::ptr::drop_in_place<event_listener::sys::ListLock<()>> (56 samples, 0.04%)core::ptr::drop_in_place<std::sync::mutex::MutexGuard<event_listener::sys::Inner<()>>> (37 samples, 0.03%)<std::sync::mutex::MutexGuard<T> as core::ops::drop::Drop>::drop (37 samples, 0.03%)std::sys::sync::mutex::futex::Mutex::unlock (32 samples, 0.02%)core::sync::atomic::AtomicU32::swap (30 samples, 0.02%)core::sync::atomic::atomic_swap (30 samples, 0.02%)event_listener::TaskRef::into_task (194 samples, 0.14%)<core::task::wake::Waker as core::clone::Clone>::clone (194 samples, 0.14%)tokio::runtime::task::waker::clone_waker (183 samples, 0.13%)tokio::runtime::task::state::State::ref_inc (118 samples, 0.08%)core::sync::atomic::AtomicUsize::fetch_add (117 samples, 0.08%)core::sync::atomic::atomic_add (117 samples, 0.08%)<event_listener::EventListener<T> as core::future::future::Future>::poll (345 samples, 0.25%)event_listener::InnerListener<T,B>::poll_internal (337 samples, 0.24%)event_listener::sys::<impl event_listener::Inner<T>>::register (321 samples, 0.23%)event_listener::sys::<impl event_listener::Inner<T>>::lock (50 samples, 0.04%)std::sync::mutex::Mutex<T>::lock (50 samples, 0.04%)std::sys::sync::mutex::futex::Mutex::lock (43 samples, 0.03%)core::sync::atomic::AtomicU32::compare_exchange (42 samples, 0.03%)core::sync::atomic::atomic_compare_exchange (42 samples, 0.03%)core::ops::function::impls::<impl core::ops::function::FnMut<A> for &mut F>::call_mut (1,172 samples, 0.84%)wisp_mux::stream::MuxStreamRead::read::_{{closure}}::_{{closure}}::_{{closure}} (1,172 samples, 0.84%)futures_util::future::future::FutureExt::poll_unpin (936 samples, 0.67%)<core::pin::Pin<P> as core::future::future::Future>::poll (902 samples, 0.65%)<futures_util::future::future::fuse::Fuse<Fut> as core::future::future::Future>::poll (347 samples, 0.25%)core::slice::<impl [T]>::swap (65 samples, 0.05%)core::ptr::swap (64 samples, 0.05%)core::intrinsics::copy_nonoverlapping (62 samples, 0.04%)<futures_util::future::poll_fn::PollFn<F> as core::future::future::Future>::poll (1,298 samples, 0.93%)wisp_mux::stream::MuxStreamRead::read::_{{closure}}::_{{closure}} (1,298 samples, 0.93%)futures_util::async_await::random::shuffle (76 samples, 0.05%)alloc::sync::Arc<T,A>::drop_slow (17 samples, 0.01%)core::ptr::drop_in_place<alloc::sync::Arc<flume::Hook<bytes::bytes::Bytes,dyn flume::signal::Signal>>> (31 samples, 0.02%)<alloc::sync::Arc<T,A> as core::ops::drop::Drop>::drop (31 samples, 0.02%)<flume::async::RecvFut<T> as core::ops::drop::Drop>::drop (59 samples, 0.04%)flume::async::RecvFut<T>::reset_hook (59 samples, 0.04%)core::ptr::drop_in_place<flume::async::RecvFut<bytes::bytes::Bytes>> (76 samples, 0.05%)cfree (178 samples, 0.13%)[libc.so.6] (43 samples, 0.03%)core::ptr::drop_in_place<alloc::sync::Arc<event_listener::Inner<()>>> (64 samples, 0.05%)<alloc::sync::Arc<T,A> as core::ops::drop::Drop>::drop (64 samples, 0.05%)core::sync::atomic::AtomicUsize::fetch_sub (61 samples, 0.04%)core::sync::atomic::atomic_sub (61 samples, 0.04%)core::ptr::drop_in_place<core::option::Option<event_listener::State<()>>> (48 samples, 0.03%)core::ptr::drop_in_place<event_listener::State<()>> (43 samples, 0.03%)core::ptr::drop_in_place<event_listener::Task> (40 samples, 0.03%)core::ptr::drop_in_place<core::task::wake::Waker> (35 samples, 0.03%)<core::task::wake::Waker as core::ops::drop::Drop>::drop (35 samples, 0.03%)tokio::runtime::task::waker::drop_waker (32 samples, 0.02%)tokio::runtime::task::harness::<impl tokio::runtime::task::raw::RawTask>::drop_reference (28 samples, 0.02%)tokio::runtime::task::state::State::ref_dec (28 samples, 0.02%)core::sync::atomic::AtomicUsize::fetch_sub (27 samples, 0.02%)core::sync::atomic::atomic_sub (27 samples, 0.02%)core::ptr::drop_in_place<event_listener::sys::ListLock<()>> (89 samples, 0.06%)core::ptr::drop_in_place<std::sync::mutex::MutexGuard<event_listener::sys::Inner<()>>> (84 samples, 0.06%)<std::sync::mutex::MutexGuard<T> as core::ops::drop::Drop>::drop (84 samples, 0.06%)std::sys::sync::mutex::futex::Mutex::unlock (81 samples, 0.06%)core::sync::atomic::AtomicU32::swap (81 samples, 0.06%)core::sync::atomic::atomic_swap (81 samples, 0.06%)event_listener::sys::<impl event_listener::Inner<T>>::lock (72 samples, 0.05%)std::sync::mutex::Mutex<T>::lock (72 samples, 0.05%)std::sys::sync::mutex::futex::Mutex::lock (65 samples, 0.05%)core::sync::atomic::AtomicU32::compare_exchange (64 samples, 0.05%)core::sync::atomic::atomic_compare_exchange (64 samples, 0.05%)core::ptr::drop_in_place<futures_util::future::future::fuse::Fuse<event_listener::EventListener>> (530 samples, 0.38%)core::ptr::drop_in_place<core::option::Option<event_listener::EventListener>> (530 samples, 0.38%)core::ptr::drop_in_place<event_listener::EventListener> (351 samples, 0.25%)core::ptr::drop_in_place<core::pin::Pin<alloc::boxed::Box<event_listener::InnerListener<(),alloc::sync::Arc<event_listener::Inner<()>>>>>> (350 samples, 0.25%)core::ptr::drop_in_place<alloc::boxed::Box<event_listener::InnerListener<(),alloc::sync::Arc<event_listener::Inner<()>>>>> (350 samples, 0.25%)core::ptr::drop_in_place<event_listener::InnerListener<(),alloc::sync::Arc<event_listener::Inner<()>>>> (348 samples, 0.25%)event_listener::_::<impl core::ops::drop::Drop for event_listener::InnerListener<T,B>>::drop (283 samples, 0.20%)event_listener::_::<impl core::ops::drop::Drop for event_listener::InnerListener<T,B>>::drop::__drop_inner (283 samples, 0.20%)event_listener::sys::<impl event_listener::Inner<T>>::remove (222 samples, 0.16%)event_listener::sys::Inner<T>::remove (56 samples, 0.04%)core::sync::atomic::AtomicBool::load (76 samples, 0.05%)core::sync::atomic::atomic_load (73 samples, 0.05%)core::sync::atomic::AtomicU32::fetch_add (69 samples, 0.05%)core::sync::atomic::atomic_add (69 samples, 0.05%)<alloc::sync::Arc<T,A> as core::clone::Clone>::clone (279 samples, 0.20%)core::sync::atomic::AtomicUsize::fetch_add (277 samples, 0.20%)core::sync::atomic::atomic_add (277 samples, 0.20%)__rdl_alloc (91 samples, 0.07%)std::sys::pal::unix::alloc::<impl core::alloc::global::GlobalAlloc for std::alloc::System>::alloc (91 samples, 0.07%)malloc (89 samples, 0.06%)alloc::boxed::Box<T>::pin (122 samples, 0.09%)alloc::boxed::Box<T>::new (122 samples, 0.09%)alloc::alloc::exchange_malloc (105 samples, 0.08%)<alloc::alloc::Global as core::alloc::Allocator>::allocate (105 samples, 0.08%)alloc::alloc::Global::alloc_impl (105 samples, 0.08%)alloc::alloc::alloc (105 samples, 0.08%)core::ptr::read_volatile (14 samples, 0.01%)event_listener::Event<T>::inner (25 samples, 0.02%)core::sync::atomic::AtomicPtr<T>::load (25 samples, 0.02%)core::sync::atomic::atomic_load (25 samples, 0.02%)core::ptr::drop_in_place<event_listener::sys::ListLock<()>> (83 samples, 0.06%)core::ptr::drop_in_place<std::sync::mutex::MutexGuard<event_listener::sys::Inner<()>>> (79 samples, 0.06%)<std::sync::mutex::MutexGuard<T> as core::ops::drop::Drop>::drop (79 samples, 0.06%)std::sys::sync::mutex::futex::Mutex::unlock (76 samples, 0.05%)core::sync::atomic::AtomicU32::swap (75 samples, 0.05%)core::sync::atomic::atomic_swap (75 samples, 0.05%)event_listener::Event<T>::listen (661 samples, 0.47%)event_listener::InnerListener<T,B>::listen (233 samples, 0.17%)event_listener::sys::<impl event_listener::Inner<T>>::insert (233 samples, 0.17%)event_listener::sys::<impl event_listener::Inner<T>>::lock (130 samples, 0.09%)std::sync::mutex::Mutex<T>::lock (130 samples, 0.09%)std::sys::sync::mutex::futex::Mutex::lock (124 samples, 0.09%)core::sync::atomic::AtomicU32::compare_exchange (124 samples, 0.09%)core::sync::atomic::atomic_compare_exchange (124 samples, 0.09%)<tokio::io::util::write_all::WriteAll<W> as core::future::future::Future>::poll (16 samples, 0.01%)<&mut T as tokio::io::async_write::AsyncWrite>::poll_write (16 samples, 0.01%)<tokio_util::either::Either<L,R> as tokio::io::async_write::AsyncWrite>::poll_write (16 samples, 0.01%)<tokio::net::tcp::split_owned::OwnedWriteHalf as tokio::io::async_write::AsyncWrite>::poll_write (16 samples, 0.01%)tokio::net::tcp::stream::TcpStream::poll_write_priv (16 samples, 0.01%)<core::pin::Pin<P> as core::future::future::Future>::poll (53 samples, 0.04%)wisp_mux::fastwebsockets::_<impl wisp_mux::ws::WebSocketWrite for fastwebsockets::WebSocketWrite<S>>::wisp_write_frame::_{{closure}} (53 samples, 0.04%)fastwebsockets::WebSocketWrite<S>::write_frame::_{{closure}} (45 samples, 0.03%)fastwebsockets::WriteHalf::write_frame::_{{closure}} (45 samples, 0.03%)futures_util::lock::mutex::Mutex<T>::try_lock (16 samples, 0.01%)core::sync::atomic::AtomicUsize::fetch_or (16 samples, 0.01%)core::sync::atomic::atomic_or (16 samples, 0.01%)<futures_util::lock::mutex::MutexLockFuture<T> as core::future::future::Future>::poll (53 samples, 0.04%)core::ptr::drop_in_place<futures_util::lock::mutex::MutexGuard<alloc::boxed::Box<dyn wisp_mux::ws::WebSocketWrite+core::marker::Send>>> (21 samples, 0.02%)<futures_util::lock::mutex::MutexGuard<T> as core::ops::drop::Drop>::drop (21 samples, 0.02%)futures_util::lock::mutex::Mutex<T>::unlock (21 samples, 0.02%)__rdl_alloc (25 samples, 0.02%)std::sys::pal::unix::alloc::<impl core::alloc::global::GlobalAlloc for std::alloc::System>::alloc (25 samples, 0.02%)malloc (25 samples, 0.02%)<core::pin::Pin<P> as futures_core::stream::Stream>::poll_next (3,474 samples, 2.50%)<c..<futures_util::stream::unfold::Unfold<T,F,Fut> as futures_core::stream::Stream>::poll_next (3,473 samples, 2.49%)<f..wisp_mux::stream::MuxStreamRead::into_inner_stream::_{{closure}}::_{{closure}} (3,057 samples, 2.20%)w..wisp_mux::stream::MuxStreamRead::read::_{{closure}} (3,002 samples, 2.16%)w..wisp_mux::ws::LockedWebSocketWrite::write_frame::_{{closure}} (162 samples, 0.12%)wisp_mux::fastwebsockets::<impl wisp_mux::ws::WebSocketWrite for fastwebsockets::WebSocketWrite<S>>::wisp_write_frame (27 samples, 0.02%)alloc::boxed::Box<T>::pin (27 samples, 0.02%)alloc::boxed::Box<T>::new (27 samples, 0.02%)alloc::alloc::exchange_malloc (27 samples, 0.02%)<alloc::alloc::Global as core::alloc::Allocator>::allocate (27 samples, 0.02%)alloc::alloc::Global::alloc_impl (27 samples, 0.02%)alloc::alloc::alloc (27 samples, 0.02%)<S as futures_core::stream::TryStream>::try_poll_next (3,486 samples, 2.50%)<S..<wisp_mux::stream::MuxStreamIoStream as futures_core::stream::Stream>::poll_next (3,486 samples, 2.50%)<w..<tokio_util::compat::Compat<T> as tokio::io::async_buf_read::AsyncBufRead>::poll_fill_buf (3,614 samples, 2.60%)<t..<wisp_mux::stream::MuxStreamAsyncRead as futures_io::if_std::AsyncBufRead>::poll_fill_buf (3,614 samples, 2.60%)<w..<futures_util::stream::try_stream::into_async_read::IntoAsyncRead<St> as futures_io::if_std::AsyncBufRead>::poll_fill_buf (3,614 samples, 2.60%)<f..<tokio::io::util::fill_buf::FillBuf<R> as core::future::future::Future>::poll (3,642 samples, 2.62%)<t..<alloc::sync::Arc<T,A> as core::ops::deref::Deref>::deref (232 samples, 0.17%)alloc::sync::Arc<T,A>::inner (232 samples, 0.17%)core::ptr::non_null::NonNull<T>::as_ref (232 samples, 0.17%)[libc.so.6] (345 samples, 0.25%)__send (648 samples, 0.47%)[unknown] (73 samples, 0.05%)<isize as std::sys::pal::unix::IsMinusOne>::is_minus_one (14 samples, 0.01%)<&mio::net::tcp::stream::TcpStream as std::io::Write>::write (673 samples, 0.48%)mio::io_source::IoSource<T>::do_io (673 samples, 0.48%)mio::sys::unix::stateless_io_source::IoSourceState::do_io (673 samples, 0.48%)<&mio::net::tcp::stream::TcpStream as std::io::Write>::write::_{{closure}} (673 samples, 0.48%)<&std::net::tcp::TcpStream as std::io::Write>::write (673 samples, 0.48%)std::sys_common::net::TcpStream::write (673 samples, 0.48%)std::sys::pal::unix::cvt (18 samples, 0.01%)tokio::runtime::coop::poll_proceed (22 samples, 0.02%)tokio::runtime::context::budget (22 samples, 0.02%)std::thread::local::LocalKey<T>::try_with (22 samples, 0.02%)tokio::runtime::context::budget::_{{closure}} (15 samples, 0.01%)tokio::runtime::coop::poll_proceed::_{{closure}} (15 samples, 0.01%)core::ptr::drop_in_place<tokio::loom::std::parking_lot::MutexGuard<tokio::runtime::io::scheduled_io::Waiters>> (67 samples, 0.05%)core::ptr::drop_in_place<lock_api::mutex::MutexGuard<parking_lot::raw_mutex::RawMutex,tokio::runtime::io::scheduled_io::Waiters>> (67 samples, 0.05%)<lock_api::mutex::MutexGuard<R,T> as core::ops::drop::Drop>::drop (67 samples, 0.05%)<parking_lot::raw_mutex::RawMutex as lock_api::mutex::RawMutex>::unlock (67 samples, 0.05%)core::sync::atomic::AtomicU8::compare_exchange (66 samples, 0.05%)core::sync::atomic::atomic_compare_exchange (66 samples, 0.05%)core::sync::atomic::AtomicUsize::load (331 samples, 0.24%)core::sync::atomic::atomic_load (331 samples, 0.24%)tokio::loom::std::parking_lot::Mutex<T>::lock (72 samples, 0.05%)lock_api::mutex::Mutex<R,T>::lock (72 samples, 0.05%)<parking_lot::raw_mutex::RawMutex as lock_api::mutex::RawMutex>::lock (72 samples, 0.05%)core::sync::atomic::AtomicU8::compare_exchange_weak (72 samples, 0.05%)core::sync::atomic::atomic_compare_exchange_weak (72 samples, 0.05%)<tokio::io::util::write::Write<W> as core::future::future::Future>::poll (2,175 samples, 1.56%)<&mut T as tokio::io::async_write::AsyncWrite>::poll_write (2,174 samples, 1.56%)<tokio::net::tcp::split_owned::OwnedWriteHalf as tokio::io::async_write::AsyncWrite>::poll_write (2,157 samples, 1.55%)tokio::net::tcp::stream::TcpStream::poll_write_priv (1,918 samples, 1.38%)tokio::io::poll_evented::PollEvented<E>::poll_write (1,319 samples, 0.95%)tokio::runtime::io::registration::Registration::poll_write_ready (604 samples, 0.43%)tokio::runtime::io::registration::Registration::poll_ready (593 samples, 0.43%)tokio::runtime::io::scheduled_io::ScheduledIo::poll_readiness (542 samples, 0.39%)[libc.so.6] (2,781 samples, 2.00%)[..[libc.so.6] (258 samples, 0.19%)[libc.so.6] (3,190 samples, 2.29%)[..[libc.so.6] (3,788 samples, 2.72%)[l..__lll_lock_wait_private (103 samples, 0.07%)<alloc::alloc::Global as core::alloc::Allocator>::deallocate (4,460 samples, 3.20%)<al..alloc::alloc::dealloc (4,460 samples, 3.20%)all..__rdl_dealloc (4,460 samples, 3.20%)__r..std::sys::pal::unix::alloc::<impl core::alloc::global::GlobalAlloc for std::alloc::System>::dealloc (4,460 samples, 3.20%)std..cfree (4,458 samples, 3.20%)cfr..core::mem::drop (4,504 samples, 3.24%)cor..core::ptr::drop_in_place<alloc::boxed::Box<bytes::bytes_mut::Shared>> (4,504 samples, 3.24%)cor..core::ptr::drop_in_place<bytes::bytes_mut::Shared> (4,494 samples, 3.23%)cor..core::ptr::drop_in_place<alloc::vec::Vec<u8>> (4,494 samples, 3.23%)cor..core::ptr::drop_in_place<alloc::raw_vec::RawVec<u8>> (4,494 samples, 3.23%)cor..<alloc::raw_vec::RawVec<T,A> as core::ops::drop::Drop>::drop (4,494 samples, 3.23%)<al..alloc::raw_vec::RawVec<T,A>::current_memory (34 samples, 0.02%)core::sync::atomic::AtomicUsize::fetch_sub (567 samples, 0.41%)core::sync::atomic::atomic_sub (567 samples, 0.41%)bytes::bytes_mut::shared_v_drop (5,098 samples, 3.66%)byte..<core::sync::atomic::AtomicPtr<T> as bytes::loom::sync::atomic::AtomicMut<T>>::with_mut (5,098 samples, 3.66%)<cor..bytes::bytes_mut::shared_v_drop::_{{closure}} (5,098 samples, 3.66%)byte..bytes::bytes_mut::release_shared (5,097 samples, 3.66%)byte..core::sync::atomic::AtomicUsize::load (18 samples, 0.01%)core::sync::atomic::atomic_load (18 samples, 0.01%)epoxy_server::handle::wisp::copy_read_fast::_{{closure}} (11,693 samples, 8.40%)epoxy_server..tokio::io::util::async_buf_read_ext::AsyncBufReadExt::consume (5,484 samples, 3.94%)toki..<tokio_util::compat::Compat<T> as tokio::io::async_buf_read::AsyncBufRead>::consume (5,484 samples, 3.94%)<tok..<wisp_mux::stream::MuxStreamAsyncRead as futures_io::if_std::AsyncBufRead>::consume (5,481 samples, 3.94%)<wis..<futures_util::stream::try_stream::into_async_read::IntoAsyncRead<St> as futures_io::if_std::AsyncBufRead>::consume (5,481 samples, 3.94%)<fut..core::ptr::drop_in_place<futures_util::stream::try_stream::into_async_read::ReadState<bytes::bytes::Bytes>> (5,390 samples, 3.87%)core..core::ptr::drop_in_place<bytes::bytes::Bytes> (5,390 samples, 3.87%)core..<bytes::bytes::Bytes as core::ops::drop::Drop>::drop (5,390 samples, 3.87%)<byt..cfree (285 samples, 0.20%)[libc.so.6] (222 samples, 0.16%)<core::result::Result<T,E> as core::ops::try_trait::Try>::branch (23 samples, 0.02%)[libc.so.6] (785 samples, 0.56%)recv (2,617 samples, 1.88%)r..[unknown] (250 samples, 0.18%)<&mio::net::tcp::stream::TcpStream as std::io::Read>::read (2,825 samples, 2.03%)<..mio::io_source::IoSource<T>::do_io (2,825 samples, 2.03%)m..mio::sys::unix::stateless_io_source::IoSourceState::do_io (2,825 samples, 2.03%)m..<&mio::net::tcp::stream::TcpStream as std::io::Read>::read::_{{closure}} (2,825 samples, 2.03%)<..<&std::net::tcp::TcpStream as std::io::Read>::read (2,825 samples, 2.03%)<..std::sys_common::net::TcpStream::read (2,825 samples, 2.03%)s..std::sys::pal::unix::net::Socket::read (2,825 samples, 2.03%)s..std::sys::pal::unix::net::Socket::recv_with_flags (2,825 samples, 2.03%)s..std::sys::pal::unix::cvt (206 samples, 0.15%)std::io::error::Error::last_os_error (188 samples, 0.14%)std::sys::pal::unix::os::errno (177 samples, 0.13%)__errno_location (177 samples, 0.13%)std::io::error::repr_bitpacked::Repr::data (202 samples, 0.15%)std::io::error::repr_bitpacked::decode_repr (202 samples, 0.15%)std::io::error::Error::kind (248 samples, 0.18%)std::sys::pal::unix::decode_error_kind (29 samples, 0.02%)core::num::<impl usize>::checked_add (16 samples, 0.01%)tokio::io::read_buf::ReadBuf::advance (31 samples, 0.02%)tokio::io::read_buf::ReadBuf::set_filled (15 samples, 0.01%)tokio::io::read_buf::ReadBuf::assume_init (36 samples, 0.03%)tokio::io::read_buf::ReadBuf::unfilled_mut (37 samples, 0.03%)core::slice::index::<impl core::ops::index::IndexMut<I> for [T]>::index_mut (28 samples, 0.02%)<core::ops::range::RangeFrom<usize> as core::slice::index::SliceIndex<[T]>>::index_mut (28 samples, 0.02%)core::sync::atomic::AtomicUsize::compare_exchange (46 samples, 0.03%)core::sync::atomic::atomic_compare_exchange (46 samples, 0.03%)tokio::runtime::io::registration::Registration::clear_readiness (58 samples, 0.04%)tokio::runtime::io::scheduled_io::ScheduledIo::clear_readiness (58 samples, 0.04%)tokio::runtime::io::scheduled_io::ScheduledIo::set_readiness (56 samples, 0.04%)core::ops::function::FnOnce::call_once (24 samples, 0.02%)tokio::runtime::context::CONTEXT::_{{constant}}::_{{closure}} (24 samples, 0.02%)std::sys::thread_local::native::eager::Storage<T>::get (24 samples, 0.02%)core::cell::Cell<T>::get (15 samples, 0.01%)core::cell::Cell<T>::get (20 samples, 0.01%)tokio::runtime::coop::poll_proceed (54 samples, 0.04%)tokio::runtime::context::budget (54 samples, 0.04%)std::thread::local::LocalKey<T>::try_with (54 samples, 0.04%)tokio::runtime::context::budget::_{{closure}} (30 samples, 0.02%)tokio::runtime::coop::poll_proceed::_{{closure}} (30 samples, 0.02%)<core::task::wake::Waker as core::clone::Clone>::clone (232 samples, 0.17%)tokio::runtime::task::waker::clone_waker (231 samples, 0.17%)tokio::runtime::task::state::State::ref_inc (135 samples, 0.10%)core::sync::atomic::AtomicUsize::fetch_add (133 samples, 0.10%)core::sync::atomic::atomic_add (133 samples, 0.10%)core::ptr::drop_in_place<tokio::loom::std::parking_lot::MutexGuard<tokio::runtime::io::scheduled_io::Waiters>> (35 samples, 0.03%)core::ptr::drop_in_place<lock_api::mutex::MutexGuard<parking_lot::raw_mutex::RawMutex,tokio::runtime::io::scheduled_io::Waiters>> (35 samples, 0.03%)<lock_api::mutex::MutexGuard<R,T> as core::ops::drop::Drop>::drop (35 samples, 0.03%)<parking_lot::raw_mutex::RawMutex as lock_api::mutex::RawMutex>::unlock (35 samples, 0.03%)core::sync::atomic::AtomicU8::compare_exchange (35 samples, 0.03%)core::sync::atomic::atomic_compare_exchange (35 samples, 0.03%)core::sync::atomic::AtomicUsize::load (409 samples, 0.29%)core::sync::atomic::atomic_load (409 samples, 0.29%)tokio::loom::std::parking_lot::Mutex<T>::lock (31 samples, 0.02%)lock_api::mutex::Mutex<R,T>::lock (31 samples, 0.02%)<parking_lot::raw_mutex::RawMutex as lock_api::mutex::RawMutex>::lock (31 samples, 0.02%)core::sync::atomic::AtomicU8::compare_exchange_weak (30 samples, 0.02%)core::sync::atomic::atomic_compare_exchange_weak (30 samples, 0.02%)tokio::runtime::io::driver::Direction::mask (20 samples, 0.01%)<tokio::net::tcp::split_owned::OwnedReadHalf as tokio::io::async_read::AsyncRead>::poll_read (4,823 samples, 3.46%)<to..tokio::net::tcp::stream::TcpStream::poll_read_priv (4,801 samples, 3.45%)tok..tokio::io::poll_evented::PollEvented<E>::poll_read (4,229 samples, 3.04%)tok..tokio::runtime::io::registration::Registration::poll_read_ready (906 samples, 0.65%)tokio::runtime::io::registration::Registration::poll_ready (884 samples, 0.63%)tokio::runtime::io::scheduled_io::ScheduledIo::poll_readiness (772 samples, 0.55%)core::slice::index::<impl core::ops::index::Index<I> for [T]>::index (15 samples, 0.01%)<core::ops::range::Range<usize> as core::slice::index::SliceIndex<[T]>>::index (15 samples, 0.01%)tokio::io::read_buf::ReadBuf::filled (21 samples, 0.02%)<tokio::io::util::buf_reader::BufReader<R> as tokio::io::async_buf_read::AsyncBufRead>::poll_fill_buf (5,325 samples, 3.82%)<tok..tokio::io::read_buf::ReadBuf::new (25 samples, 0.02%)<tokio::io::util::fill_buf::FillBuf<R> as core::future::future::Future>::poll (5,365 samples, 3.85%)<tok..core::option::Option<T>::take (36 samples, 0.03%)core::mem::replace (36 samples, 0.03%)core::ptr::write (32 samples, 0.02%)tokio::io::util::async_buf_read_ext::AsyncBufReadExt::consume (122 samples, 0.09%)<tokio::io::util::buf_reader::BufReader<R> as tokio::io::async_buf_read::AsyncBufRead>::consume (122 samples, 0.09%)core::cmp::min (31 samples, 0.02%)core::cmp::Ord::min (31 samples, 0.02%)core::cmp::min_by (31 samples, 0.02%)<&T as core::convert::AsRef<U>>::as_ref (137 samples, 0.10%)core::ptr::drop_in_place<wisp_mux::stream::MuxStreamWrite::write_payload::{{closure}}> (30 samples, 0.02%)core::ptr::drop_in_place<wisp_mux::stream::MuxStreamWrite::write_payload_internal::{{closure}}> (30 samples, 0.02%)<wisp_mux::ws::Payload as core::ops::deref::Deref>::deref (43 samples, 0.03%)<bytes::bytes_mut::BytesMut as bytes::buf::buf_mut::BufMut>::advance_mut (78 samples, 0.06%)bytes::bytes_mut::BytesMut::reserve (14 samples, 0.01%)bytes::bytes_mut::BytesMut::extend_from_slice (723 samples, 0.52%)core::intrinsics::copy_nonoverlapping (622 samples, 0.45%)[libc.so.6] (616 samples, 0.44%)bytes::bytes_mut::BytesMut::get_vec_pos (88 samples, 0.06%)<wisp_mux::packet::PacketType as wisp_mux::packet::Encode>::encode (946 samples, 0.68%)core::ptr::drop_in_place<wisp_mux::ws::Payload> (144 samples, 0.10%)core::ptr::drop_in_place<bytes::bytes_mut::BytesMut> (142 samples, 0.10%)<bytes::bytes_mut::BytesMut as core::ops::drop::Drop>::drop (142 samples, 0.10%)core::ptr::drop_in_place<alloc::vec::Vec<u8>> (46 samples, 0.03%)core::ptr::drop_in_place<alloc::raw_vec::RawVec<u8>> (46 samples, 0.03%)<alloc::raw_vec::RawVec<T,A> as core::ops::drop::Drop>::drop (46 samples, 0.03%)alloc::raw_vec::RawVec<T,A>::current_memory (46 samples, 0.03%)bytes::bytes_mut::BytesMut::reserve (22 samples, 0.02%)bytes::buf::buf_mut::BufMut::put_u32_le (55 samples, 0.04%)<bytes::bytes_mut::BytesMut as bytes::buf::buf_mut::BufMut>::put_slice (55 samples, 0.04%)bytes::bytes_mut::BytesMut::extend_from_slice (55 samples, 0.04%)bytes::buf::buf_mut::BufMut::put_u8 (21 samples, 0.02%)<bytes::bytes_mut::BytesMut as bytes::buf::buf_mut::BufMut>::put_slice (21 samples, 0.02%)bytes::bytes_mut::BytesMut::extend_from_slice (21 samples, 0.02%)core::intrinsics::copy_nonoverlapping (16 samples, 0.01%)<wisp_mux::packet::Packet as wisp_mux::packet::Encode>::encode (1,030 samples, 0.74%)__rdl_alloc (1,591 samples, 1.14%)std::sys::pal::unix::alloc::<impl core::alloc::global::GlobalAlloc for std::alloc::System>::alloc (1,591 samples, 1.14%)malloc (1,589 samples, 1.14%)[libc.so.6] (265 samples, 0.19%)alloc::vec::Vec<T>::with_capacity (1,677 samples, 1.20%)alloc::vec::Vec<T,A>::with_capacity_in (1,677 samples, 1.20%)alloc::raw_vec::RawVec<T,A>::with_capacity_in (1,677 samples, 1.20%)alloc::raw_vec::RawVec<T,A>::try_allocate_in (1,677 samples, 1.20%)<alloc::alloc::Global as core::alloc::Allocator>::allocate (1,664 samples, 1.20%)alloc::alloc::Global::alloc_impl (1,664 samples, 1.20%)alloc::alloc::alloc (1,664 samples, 1.20%)core::ptr::read_volatile (73 samples, 0.05%)bytes::bytes_mut::BytesMut::with_capacity (1,728 samples, 1.24%)bytes::bytes_mut::BytesMut::from_vec (51 samples, 0.04%)bytes::bytes_mut::original_capacity_to_repr (25 samples, 0.02%)wisp_mux::packet::<impl core::convert::From<wisp_mux::packet::Packet> for bytes::bytes_mut::BytesMut>::from (3,191 samples, 2.29%)w..wisp_mux::packet::PacketType::get_packet_size (246 samples, 0.18%)<wisp_mux::ws::Payload as core::ops::deref::Deref>::deref (19 samples, 0.01%)wisp_mux::packet::<impl core::convert::From<wisp_mux::packet::Packet> for wisp_mux::ws::Frame>::from (3,215 samples, 2.31%)w..wisp_mux::ws::Frame::binary (21 samples, 0.02%)wisp_mux::packet::Packet::new_data (16 samples, 0.01%)<wisp_mux::Role as core::cmp::PartialEq>::eq (111 samples, 0.08%)core::ptr::drop_in_place<wisp_mux::ws::LockedWebSocketWrite::write_split::{{closure}}> (27 samples, 0.02%)core::sync::atomic::AtomicBool::load (1,111 samples, 0.80%)core::sync::atomic::atomic_load (1,101 samples, 0.79%)<core::result::Result<T,E> as core::ops::try_trait::Try>::branch (34 samples, 0.02%)core::ptr::drop_in_place<fastwebsockets::WebSocketWrite<tokio_util::either::Either<tokio::net::tcp::split_owned::OwnedWriteHalf,tokio::net::unix::split_owned::OwnedWriteHalf>>::write_frame::{{closure}}> (59 samples, 0.04%)core::ptr::drop_in_place<fastwebsockets::WriteHalf::write_frame<hyper_util::rt::tokio::TokioIo<hyper::upgrade::Upgraded>>::{{closure}}> (48 samples, 0.03%)<fastwebsockets::Role as core::cmp::PartialEq>::eq (211 samples, 0.15%)<fastwebsockets::frame::OpCode as core::cmp::PartialEq>::eq (272 samples, 0.20%)<fastwebsockets::frame::Payload as core::ops::deref::Deref>::deref (37 samples, 0.03%)[libc.so.6] (698 samples, 0.50%)__send (1,611 samples, 1.16%)[unknown] (234 samples, 0.17%)<&mio::net::tcp::stream::TcpStream as std::io::Write>::write (1,759 samples, 1.26%)mio::io_source::IoSource<T>::do_io (1,759 samples, 1.26%)mio::sys::unix::stateless_io_source::IoSourceState::do_io (1,759 samples, 1.26%)<&mio::net::tcp::stream::TcpStream as std::io::Write>::write::_{{closure}} (1,759 samples, 1.26%)<&std::net::tcp::TcpStream as std::io::Write>::write (1,759 samples, 1.26%)std::sys_common::net::TcpStream::write (1,759 samples, 1.26%)std::sys::pal::unix::cvt (136 samples, 0.10%)<isize as std::sys::pal::unix::IsMinusOne>::is_minus_one (132 samples, 0.09%)tokio::runtime::coop::poll_proceed (38 samples, 0.03%)tokio::runtime::context::budget (38 samples, 0.03%)std::thread::local::LocalKey<T>::try_with (38 samples, 0.03%)tokio::runtime::context::budget::_{{closure}} (25 samples, 0.02%)tokio::runtime::coop::poll_proceed::_{{closure}} (25 samples, 0.02%)core::sync::atomic::AtomicUsize::load (378 samples, 0.27%)core::sync::atomic::atomic_load (378 samples, 0.27%)<&mut T as tokio::io::async_write::AsyncWrite>::poll_write (2,708 samples, 1.95%)<..<tokio_util::either::Either<L,R> as tokio::io::async_write::AsyncWrite>::poll_write (2,696 samples, 1.94%)<..<tokio::net::tcp::split_owned::OwnedWriteHalf as tokio::io::async_write::AsyncWrite>::poll_write (2,649 samples, 1.90%)<..tokio::net::tcp::stream::TcpStream::poll_write_priv (2,639 samples, 1.90%)t..tokio::io::poll_evented::PollEvented<E>::poll_write (2,306 samples, 1.66%)tokio::runtime::io::registration::Registration::poll_write_ready (490 samples, 0.35%)tokio::runtime::io::registration::Registration::poll_ready (475 samples, 0.34%)tokio::runtime::io::scheduled_io::ScheduledIo::poll_readiness (407 samples, 0.29%)core::ptr::read (94 samples, 0.07%)core::mem::take (104 samples, 0.07%)core::mem::replace (104 samples, 0.07%)<tokio::io::util::write_all::WriteAll<W> as core::future::future::Future>::poll (3,011 samples, 2.16%)<..cfree (1,671 samples, 1.20%)[libc.so.6] (358 samples, 0.26%)bytes::bytes_mut::BytesMut::kind (51 samples, 0.04%)core::ptr::drop_in_place<fastwebsockets::frame::Frame> (2,031 samples, 1.46%)core::ptr::drop_in_place<fastwebsockets::frame::Payload> (2,031 samples, 1.46%)core::ptr::drop_in_place<bytes::bytes_mut::BytesMut> (118 samples, 0.08%)<bytes::bytes_mut::BytesMut as core::ops::drop::Drop>::drop (118 samples, 0.08%)core::ptr::drop_in_place<alloc::vec::Vec<u8>> (16 samples, 0.01%)core::ptr::drop_in_place<alloc::raw_vec::RawVec<u8>> (16 samples, 0.01%)<alloc::raw_vec::RawVec<T,A> as core::ops::drop::Drop>::drop (16 samples, 0.01%)alloc::raw_vec::RawVec<T,A>::current_memory (16 samples, 0.01%)<alloc::vec::Vec<T,A> as core::ops::deref::DerefMut>::deref_mut (14 samples, 0.01%)alloc::vec::Vec<T,A>::as_mut_ptr (14 samples, 0.01%)alloc::raw_vec::RawVec<T,A>::ptr (14 samples, 0.01%)<alloc::vec::Vec<T,A> as core::ops::index::IndexMut<I>>::index_mut (15 samples, 0.01%)core::slice::index::<impl core::ops::index::IndexMut<I> for [T]>::index_mut (15 samples, 0.01%)<core::ops::range::Range<usize> as core::slice::index::SliceIndex<[T]>>::index_mut (15 samples, 0.01%)<fastwebsockets::frame::Payload as core::ops::deref::Deref>::deref (17 samples, 0.01%)core::slice::<impl [T]>::copy_from_slice (450 samples, 0.32%)core::intrinsics::copy_nonoverlapping (450 samples, 0.32%)[libc.so.6] (439 samples, 0.32%)fastwebsockets::frame::Frame::fmt_head (220 samples, 0.16%)<fastwebsockets::frame::Payload as core::ops::deref::Deref>::deref (15 samples, 0.01%)fastwebsockets::frame::Frame::write (782 samples, 0.56%)fastwebsockets::frame::Frame::write::reserve_enough (42 samples, 0.03%)alloc::vec::Vec<T,A>::len (35 samples, 0.03%)<fastwebsockets::frame::Payload as core::ops::deref::Deref>::deref (36 samples, 0.03%)<core::slice::iter::Iter<T> as core::iter::traits::iterator::Iterator>::next (32 samples, 0.02%)<core::ptr::non_null::NonNull<T> as core::cmp::PartialEq>::eq (17 samples, 0.01%)<core::slice::iter::Iter<T> as core::iter::traits::iterator::Iterator>::find (86 samples, 0.06%)tokio::io::async_write::AsyncWrite::poll_write_vectored::_{{closure}} (21 samples, 0.02%)[libc.so.6] (1,303 samples, 0.94%)__send (3,186 samples, 2.29%)_..[unknown] (499 samples, 0.36%)<&mio::net::tcp::stream::TcpStream as std::io::Write>::write (3,276 samples, 2.35%)<..mio::io_source::IoSource<T>::do_io (3,276 samples, 2.35%)m..mio::sys::unix::stateless_io_source::IoSourceState::do_io (3,276 samples, 2.35%)m..<&mio::net::tcp::stream::TcpStream as std::io::Write>::write::_{{closure}} (3,276 samples, 2.35%)<..<&std::net::tcp::TcpStream as std::io::Write>::write (3,276 samples, 2.35%)<..std::sys_common::net::TcpStream::write (3,276 samples, 2.35%)s..std::sys::pal::unix::cvt (72 samples, 0.05%)<isize as std::sys::pal::unix::IsMinusOne>::is_minus_one (68 samples, 0.05%)<core::result::Result<T,E> as core::ops::try_trait::Try>::branch (14 samples, 0.01%)core::ops::function::FnOnce::call_once (31 samples, 0.02%)tokio::runtime::context::CONTEXT::_{{constant}}::_{{closure}} (31 samples, 0.02%)std::sys::thread_local::native::eager::Storage<T>::get (31 samples, 0.02%)core::cell::Cell<T>::get (17 samples, 0.01%)core::cell::Cell<T>::get (24 samples, 0.02%)tokio::runtime::coop::poll_proceed (73 samples, 0.05%)tokio::runtime::context::budget (73 samples, 0.05%)std::thread::local::LocalKey<T>::try_with (73 samples, 0.05%)tokio::runtime::context::budget::_{{closure}} (42 samples, 0.03%)tokio::runtime::coop::poll_proceed::_{{closure}} (42 samples, 0.03%)core::sync::atomic::AtomicUsize::load (297 samples, 0.21%)core::sync::atomic::atomic_load (297 samples, 0.21%)tokio::runtime::io::driver::Direction::mask (20 samples, 0.01%)<tokio_util::either::Either<L,R> as tokio::io::async_write::AsyncWrite>::poll_write (4,230 samples, 3.04%)<to..<tokio::net::tcp::split_owned::OwnedWriteHalf as tokio::io::async_write::AsyncWrite>::poll_write (4,149 samples, 2.98%)<to..tokio::net::tcp::stream::TcpStream::poll_write_priv (4,082 samples, 2.93%)to..tokio::io::poll_evented::PollEvented<E>::poll_write (3,932 samples, 2.82%)to..tokio::runtime::io::registration::Registration::poll_write_ready (523 samples, 0.38%)tokio::runtime::io::registration::Registration::poll_ready (496 samples, 0.36%)tokio::runtime::io::scheduled_io::ScheduledIo::poll_readiness (358 samples, 0.26%)<tokio::io::util::write_vectored::WriteVectored<W> as core::future::future::Future>::poll (4,324 samples, 3.11%)<to..<&mut T as tokio::io::async_write::AsyncWrite>::poll_write_vectored (4,324 samples, 3.11%)<&m..tokio::io::async_write::AsyncWrite::poll_write_vectored (4,324 samples, 3.11%)tok..core::num::<impl usize>::checked_sub (21 samples, 0.02%)core::array::_<impl core::ops::index::Index<I> for [T: N]>::index (39 samples, 0.03%)core::slice::index::<impl core::ops::index::Index<I> for [T]>::index (39 samples, 0.03%)<core::ops::range::Range<usize> as core::slice::index::SliceIndex<[T]>>::index (39 samples, 0.03%)fastwebsockets::WebSocketWrite<S>::write_frame::_{{closure}} (12,504 samples, 8.98%)fastwebsocket..fastwebsockets::WriteHalf::write_frame::_{{closure}} (11,961 samples, 8.59%)fastwebsocke..fastwebsockets::frame::Frame::writev::_{{closure}} (4,887 samples, 3.51%)fas..fastwebsockets::frame::Frame::fmt_head (61 samples, 0.04%)<core::pin::Pin<P> as core::future::future::Future>::poll (13,786 samples, 9.90%)<core::pin::Pi..wisp_mux::fastwebsockets::_<impl wisp_mux::ws::WebSocketWrite for fastwebsockets::WebSocketWrite<S>>::wisp_write_split::_{{closure}} (13,786 samples, 9.90%)wisp_mux::fast..wisp_mux::fastwebsockets::<impl core::convert::From<wisp_mux::ws::Frame> for fastwebsockets::frame::Frame>::from (62 samples, 0.04%)wisp_mux::fastwebsockets::match_payload_reverse (50 samples, 0.04%)<core::task::wake::Waker as core::clone::Clone>::clone (99 samples, 0.07%)tokio::runtime::task::waker::clone_waker (98 samples, 0.07%)tokio::runtime::task::state::State::ref_inc (54 samples, 0.04%)core::sync::atomic::AtomicUsize::fetch_add (54 samples, 0.04%)core::sync::atomic::atomic_add (54 samples, 0.04%)<slab::Slab<T> as core::ops::index::IndexMut<usize>>::index_mut (67 samples, 0.05%)core::ptr::drop_in_place<std::sync::mutex::MutexGuard<slab::Slab<futures_util::lock::mutex::Waiter>>> (131 samples, 0.09%)<std::sync::mutex::MutexGuard<T> as core::ops::drop::Drop>::drop (131 samples, 0.09%)std::sys::sync::mutex::futex::Mutex::unlock (122 samples, 0.09%)core::sync::atomic::AtomicU32::swap (122 samples, 0.09%)core::sync::atomic::atomic_swap (122 samples, 0.09%)core::sync::atomic::AtomicUsize::fetch_or (23 samples, 0.02%)core::sync::atomic::atomic_or (23 samples, 0.02%)core::ptr::drop_in_place<std::sync::mutex::MutexGuard<slab::Slab<futures_util::lock::mutex::Waiter>>> (39 samples, 0.03%)<std::sync::mutex::MutexGuard<T> as core::ops::drop::Drop>::drop (39 samples, 0.03%)std::sys::sync::mutex::futex::Mutex::unlock (37 samples, 0.03%)core::sync::atomic::AtomicU32::swap (37 samples, 0.03%)core::sync::atomic::atomic_swap (37 samples, 0.03%)core::ptr::read (42 samples, 0.03%)core::mem::replace (43 samples, 0.03%)slab::Slab<T>::remove (51 samples, 0.04%)slab::Slab<T>::try_remove (51 samples, 0.04%)core::sync::atomic::AtomicU32::compare_exchange (34 samples, 0.02%)core::sync::atomic::atomic_compare_exchange (34 samples, 0.02%)core::hint::spin_loop (34 samples, 0.02%)core::core_arch::x86::sse2::_mm_pause (34 samples, 0.02%)futures_util::lock::mutex::Mutex<T>::remove_waker (209 samples, 0.15%)std::sync::mutex::Mutex<T>::lock (96 samples, 0.07%)std::sys::sync::mutex::futex::Mutex::lock (91 samples, 0.07%)std::sys::sync::mutex::futex::Mutex::lock_contended (54 samples, 0.04%)std::sys::sync::mutex::futex::Mutex::spin (54 samples, 0.04%)core::sync::atomic::AtomicU32::load (19 samples, 0.01%)core::sync::atomic::atomic_load (19 samples, 0.01%)futures_util::lock::mutex::Mutex<T>::try_lock (733 samples, 0.53%)core::sync::atomic::AtomicUsize::fetch_or (733 samples, 0.53%)core::sync::atomic::atomic_or (733 samples, 0.53%)futures_util::lock::mutex::Waiter::register (34 samples, 0.02%)<core::task::wake::Waker as core::clone::Clone>::clone (26 samples, 0.02%)tokio::runtime::task::waker::clone_waker (26 samples, 0.02%)slab::Slab<T>::insert (202 samples, 0.15%)slab::Slab<T>::insert_at (202 samples, 0.15%)core::sync::atomic::AtomicU32::compare_exchange (122 samples, 0.09%)core::sync::atomic::atomic_compare_exchange (122 samples, 0.09%)std::sync::mutex::Mutex<T>::lock (146 samples, 0.10%)std::sys::sync::mutex::futex::Mutex::lock (133 samples, 0.10%)<futures_util::lock::mutex::MutexLockFuture<T> as core::future::future::Future>::poll (1,803 samples, 1.30%)<alloc::boxed::Box<T,A> as core::ops::drop::Drop>::drop (1,242 samples, 0.89%)<alloc::alloc::Global as core::alloc::Allocator>::deallocate (1,230 samples, 0.88%)alloc::alloc::dealloc (1,230 samples, 0.88%)__rdl_dealloc (1,230 samples, 0.88%)std::sys::pal::unix::alloc::<impl core::alloc::global::GlobalAlloc for std::alloc::System>::dealloc (1,230 samples, 0.88%)cfree (1,223 samples, 0.88%)[libc.so.6] (230 samples, 0.17%)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>>> (1,579 samples, 1.13%)core::ptr::drop_in_place<alloc::boxed::Box<dyn core::future::future::Future+Output = core::result::Result<(),wisp_mux::WispError>+core::marker::Send>> (1,579 samples, 1.13%)core::ptr::drop_in_place<wisp_mux::fastwebsockets::<impl wisp_mux::ws::WebSocketWrite for fastwebsockets::WebSocketWrite<tokio_util::either::Either<tokio::net::tcp::split_owned::OwnedWriteHalf,tokio::net::unix::split_owned::OwnedWriteHalf>>>::wisp_write_split::{{closure}}> (56 samples, 0.04%)<slab::IterMut<T> as core::iter::traits::iterator::Iterator>::next (528 samples, 0.38%)<&mut I as core::iter::traits::iterator::Iterator>::next (51 samples, 0.04%)<core::iter::adapters::enumerate::Enumerate<I> as core::iter::traits::iterator::Iterator>::next (51 samples, 0.04%)<core::slice::iter::IterMut<T> as core::iter::traits::iterator::Iterator>::next (51 samples, 0.04%)<core::ptr::non_null::NonNull<T> as core::cmp::PartialEq>::eq (31 samples, 0.02%)std::sync::poison::Flag::done (31 samples, 0.02%)std::thread::panicking (19 samples, 0.01%)std::panicking::panicking (19 samples, 0.01%)std::panicking::panic_count::count_is_zero (19 samples, 0.01%)core::ptr::drop_in_place<std::sync::mutex::MutexGuard<slab::Slab<futures_util::lock::mutex::Waiter>>> (163 samples, 0.12%)<std::sync::mutex::MutexGuard<T> as core::ops::drop::Drop>::drop (163 samples, 0.12%)std::sys::sync::mutex::futex::Mutex::unlock (129 samples, 0.09%)core::sync::atomic::AtomicU32::swap (126 samples, 0.09%)core::sync::atomic::atomic_swap (126 samples, 0.09%)core::sync::atomic::AtomicUsize::fetch_and (653 samples, 0.47%)core::sync::atomic::atomic_and (653 samples, 0.47%)core::ptr::read (36 samples, 0.03%)core::mem::replace (45 samples, 0.03%)tokio::runtime::task::harness::<impl tokio::runtime::task::raw::RawTask>::drop_reference (112 samples, 0.08%)tokio::runtime::task::state::State::ref_dec (111 samples, 0.08%)core::sync::atomic::AtomicUsize::fetch_sub (109 samples, 0.08%)core::sync::atomic::atomic_sub (109 samples, 0.08%)std::thread::local::LocalKey<T>::try_with (85 samples, 0.06%)tokio::runtime::context::with_scheduler::_{{closure}} (74 samples, 0.05%)tokio::runtime::context::scoped::Scoped<T>::with (63 samples, 0.05%)tokio::runtime::scheduler::multi_thread::worker::with_current::_{{closure}} (62 samples, 0.04%)<alloc::sync::Arc<T,A> as core::ops::deref::Deref>::deref (60 samples, 0.04%)alloc::sync::Arc<T,A>::inner (60 samples, 0.04%)core::ptr::non_null::NonNull<T>::as_ref (60 samples, 0.04%)core::option::Option<T>::take (70 samples, 0.05%)core::mem::replace (70 samples, 0.05%)core::ptr::read (70 samples, 0.05%)core::sync::atomic::AtomicUsize::load (60 samples, 0.04%)core::sync::atomic::atomic_load (60 samples, 0.04%)parking_lot_core::parking_lot::FairTimeout::should_timeout (86 samples, 0.06%)std::sys::pal::unix::time::Timespec::now (82 samples, 0.06%)clock_gettime (80 samples, 0.06%)__vdso_clock_gettime (38 samples, 0.03%)parking_lot_core::parking_lot::hash (14 samples, 0.01%)parking_lot_core::parking_lot::lock_bucket_pair (82 samples, 0.06%)parking_lot_core::word_lock::WordLock::lock (57 samples, 0.04%)core::sync::atomic::AtomicUsize::compare_exchange_weak (57 samples, 0.04%)core::sync::atomic::atomic_compare_exchange_weak (57 samples, 0.04%)parking_lot::condvar::Condvar::notify_one_slow (245 samples, 0.18%)parking_lot_core::parking_lot::unpark_requeue (244 samples, 0.18%)syscall (32 samples, 0.02%)tokio::runtime::driver::IoHandle::unpark (77 samples, 0.06%)tokio::runtime::io::driver::Handle::unpark (70 samples, 0.05%)mio::waker::Waker::wake (70 samples, 0.05%)mio::sys::unix::waker::fdbased::Waker::wake (70 samples, 0.05%)mio::sys::unix::waker::eventfd::WakerInternal::wake (70 samples, 0.05%)<&std::fs::File as std::io::Write>::write (69 samples, 0.05%)std::sys::pal::unix::fs::File::write (68 samples, 0.05%)std::sys::pal::unix::fd::FileDesc::write (68 samples, 0.05%)write (68 samples, 0.05%)core::sync::atomic::AtomicUsize::swap (111 samples, 0.08%)core::sync::atomic::atomic_swap (111 samples, 0.08%)tokio::runtime::scheduler::multi_thread::park::Unparker::unpark (143 samples, 0.10%)tokio::runtime::scheduler::multi_thread::park::Inner::unpark (143 samples, 0.10%)core::sync::atomic::AtomicU64::load (31 samples, 0.02%)core::sync::atomic::atomic_load (31 samples, 0.02%)tokio::runtime::scheduler::multi_thread::queue::Local<T>::push_back_or_overflow (62 samples, 0.04%)alloc::vec::Vec<T,A>::pop (97 samples, 0.07%)core::ptr::read (93 samples, 0.07%)core::ptr::drop_in_place<tokio::loom::std::parking_lot::MutexGuard<tokio::runtime::scheduler::multi_thread::worker::Synced>> (15 samples, 0.01%)core::ptr::drop_in_place<lock_api::mutex::MutexGuard<parking_lot::raw_mutex::RawMutex,tokio::runtime::scheduler::multi_thread::worker::Synced>> (15 samples, 0.01%)<lock_api::mutex::MutexGuard<R,T> as core::ops::drop::Drop>::drop (15 samples, 0.01%)<parking_lot::raw_mutex::RawMutex as lock_api::mutex::RawMutex>::unlock (15 samples, 0.01%)core::sync::atomic::AtomicU8::compare_exchange (15 samples, 0.01%)core::sync::atomic::atomic_compare_exchange (15 samples, 0.01%)tokio::loom::std::parking_lot::Mutex<T>::lock (15 samples, 0.01%)lock_api::mutex::Mutex<R,T>::lock (15 samples, 0.01%)<parking_lot::raw_mutex::RawMutex as lock_api::mutex::RawMutex>::lock (15 samples, 0.01%)core::sync::atomic::AtomicUsize::fetch_add (268 samples, 0.19%)core::sync::atomic::atomic_add (268 samples, 0.19%)tokio::runtime::scheduler::multi_thread::idle::Idle::notify_should_wakeup (272 samples, 0.20%)tokio::runtime::scheduler::multi_thread::worker::<impl tokio::runtime::scheduler::multi_thread::handle::Handle>::schedule_task (1,356 samples, 0.97%)tokio::runtime::scheduler::multi_thread::worker::with_current (1,352 samples, 0.97%)tokio::runtime::context::with_scheduler (1,352 samples, 0.97%)tokio::runtime::scheduler::multi_thread::worker::_<impl tokio::runtime::scheduler::multi_thread::handle::Handle>::schedule_task::_{{closure}} (1,266 samples, 0.91%)tokio::runtime::scheduler::multi_thread::worker::<impl tokio::runtime::scheduler::multi_thread::handle::Handle>::schedule_local (1,185 samples, 0.85%)tokio::runtime::scheduler::multi_thread::worker::<impl tokio::runtime::scheduler::multi_thread::handle::Handle>::notify_parked_local (428 samples, 0.31%)tokio::runtime::scheduler::multi_thread::idle::Idle::worker_to_notify (406 samples, 0.29%)tokio::runtime::task::raw::RawTask::schedule (1,482 samples, 1.06%)tokio::runtime::task::raw::schedule (124 samples, 0.09%)tokio::runtime::task::core::Header::get_scheduler (16 samples, 0.01%)core::sync::atomic::AtomicUsize::compare_exchange (21 samples, 0.02%)core::sync::atomic::atomic_compare_exchange (21 samples, 0.02%)tokio::runtime::task::state::State::load (457 samples, 0.33%)core::sync::atomic::AtomicUsize::load (457 samples, 0.33%)core::sync::atomic::atomic_load (457 samples, 0.33%)futures_util::lock::mutex::Waiter::wake (2,134 samples, 1.53%)core::task::wake::Waker::wake (2,083 samples, 1.50%)tokio::runtime::task::waker::wake_by_val (2,083 samples, 1.50%)tokio::runtime::task::harness::<impl tokio::runtime::task::raw::RawTask>::wake_by_val (2,083 samples, 1.50%)tokio::runtime::task::state::State::transition_to_notified_by_val (487 samples, 0.35%)tokio::runtime::task::state::State::fetch_update_action (487 samples, 0.35%)std::sync::mutex::MutexGuard<T>::new (57 samples, 0.04%)std::sync::poison::Flag::guard (57 samples, 0.04%)std::thread::panicking (50 samples, 0.04%)std::panicking::panicking (50 samples, 0.04%)std::panicking::panic_count::count_is_zero (50 samples, 0.04%)core::sync::atomic::AtomicUsize::load (38 samples, 0.03%)core::sync::atomic::atomic_load (38 samples, 0.03%)core::sync::atomic::AtomicU32::compare_exchange (249 samples, 0.18%)core::sync::atomic::atomic_compare_exchange (249 samples, 0.18%)core::ptr::drop_in_place<futures_util::lock::mutex::MutexGuard<alloc::boxed::Box<dyn wisp_mux::ws::WebSocketWrite+core::marker::Send>>> (3,836 samples, 2.76%)co..<futures_util::lock::mutex::MutexGuard<T> as core::ops::drop::Drop>::drop (3,833 samples, 2.75%)<f..futures_util::lock::mutex::Mutex<T>::unlock (3,833 samples, 2.75%)fu..std::sync::mutex::Mutex<T>::lock (320 samples, 0.23%)std::sys::sync::mutex::futex::Mutex::lock (263 samples, 0.19%)__rdl_alloc (533 samples, 0.38%)std::sys::pal::unix::alloc::<impl core::alloc::global::GlobalAlloc for std::alloc::System>::alloc (533 samples, 0.38%)malloc (531 samples, 0.38%)epoxy_server::handle::wisp::copy_write_fast::_{{closure}} (34,777 samples, 24.98%)epoxy_server::handle::wisp::copy_write_f..wisp_mux::stream::MuxStreamWrite::write::_{{closure}} (28,814 samples, 20.70%)wisp_mux::stream::MuxStreamWrite:..wisp_mux::stream::MuxStreamWrite::write_payload::_{{closure}} (28,331 samples, 20.35%)wisp_mux::stream::MuxStreamWrite..wisp_mux::stream::MuxStreamWrite::write_payload_internal::_{{closure}} (24,641 samples, 17.70%)wisp_mux::stream::MuxStream..wisp_mux::ws::LockedWebSocketWrite::write_split::_{{closure}} (22,503 samples, 16.16%)wisp_mux::ws::LockedWebSo..wisp_mux::fastwebsockets::<impl wisp_mux::ws::WebSocketWrite for fastwebsockets::WebSocketWrite<S>>::wisp_write_split (595 samples, 0.43%)alloc::boxed::Box<T>::pin (587 samples, 0.42%)alloc::boxed::Box<T>::new (587 samples, 0.42%)alloc::alloc::exchange_malloc (551 samples, 0.40%)<alloc::alloc::Global as core::alloc::Allocator>::allocate (542 samples, 0.39%)alloc::alloc::Global::alloc_impl (542 samples, 0.39%)alloc::alloc::alloc (542 samples, 0.39%)core::ops::function::FnOnce::call_once (17 samples, 0.01%)tokio::runtime::context::CONTEXT::_{{constant}}::_{{closure}} (17 samples, 0.01%)std::sys::thread_local::native::eager::Storage<T>::get (17 samples, 0.01%)core::cell::Cell<T>::set (35 samples, 0.03%)core::cell::Cell<T>::replace (35 samples, 0.03%)core::mem::replace (35 samples, 0.03%)core::ptr::write (35 samples, 0.03%)core::option::Option<T>::unwrap_or_else (15 samples, 0.01%)epoxy_server::handle::wisp::handle_stream::_{{closure}}::_{{closure}} (47,016 samples, 33.77%)epoxy_server::handle::wisp::handle_stream::_{{closure}}..<tokio::future::poll_fn::PollFn<F> as core::future::future::Future>::poll (46,675 samples, 33.52%)<tokio::future::poll_fn::PollFn<F> as core::future::fu..epoxy_server::handle::wisp::handle_stream::_{{closure}}::_{{closure}}::_{{closure}} (46,675 samples, 33.52%)epoxy_server::handle::wisp::handle_stream::_{{closure}..tokio::macros::support::thread_rng_n (79 samples, 0.06%)tokio::runtime::context::thread_rng_n (79 samples, 0.06%)std::thread::local::LocalKey<T>::with (79 samples, 0.06%)std::thread::local::LocalKey<T>::try_with (79 samples, 0.06%)tokio::runtime::context::thread_rng_n::_{{closure}} (62 samples, 0.04%)<tokio::task::unconstrained::Unconstrained<F> as core::future::future::Future>::poll::_{{closure}} (91,908 samples, 66.01%)<tokio::task::unconstrained::Unconstrained<F> as core::future::future::Future>::poll::_{{closure}}epoxy_server::handle::wisp::handle_stream::_{{closure}} (47,932 samples, 34.43%)epoxy_server::handle::wisp::handle_stream::_{{closure}}core::ptr::drop_in_place<core::result::Result<tokio::runtime::coop::with_budget::ResetGuard,std::thread::local::AccessError>> (22 samples, 0.02%)core::ptr::drop_in_place<tokio::runtime::coop::with_budget::ResetGuard> (18 samples, 0.01%)<tokio::runtime::coop::with_budget::ResetGuard as core::ops::drop::Drop>::drop (18 samples, 0.01%)tokio::runtime::context::budget (18 samples, 0.01%)std::thread::local::LocalKey<T>::try_with (18 samples, 0.01%)core::ops::function::FnOnce::call_once (36 samples, 0.03%)tokio::runtime::context::CONTEXT::_{{constant}}::_{{closure}} (36 samples, 0.03%)std::sys::thread_local::native::eager::Storage<T>::get (36 samples, 0.03%)core::cell::Cell<T>::get (34 samples, 0.02%)core::cell::Cell<T>::get (29 samples, 0.02%)<tokio::task::unconstrained::Unconstrained<F> as core::future::future::Future>::poll (92,028 samples, 66.10%)<tokio::task::unconstrained::Unconstrained<F> as core::future::future::Future>::polltokio::runtime::coop::with_unconstrained (92,002 samples, 66.08%)tokio::runtime::coop::with_unconstrainedtokio::runtime::coop::with_budget (92,002 samples, 66.08%)tokio::runtime::coop::with_budgettokio::runtime::context::budget (72 samples, 0.05%)std::thread::local::LocalKey<T>::try_with (72 samples, 0.05%)tokio::runtime::context::budget::_{{closure}} (36 samples, 0.03%)tokio::runtime::coop::with_budget::_{{closure}} (36 samples, 0.03%)core::ops::function::FnOnce::call_once (88 samples, 0.06%)tokio::runtime::context::CONTEXT::_{{constant}}::_{{closure}} (88 samples, 0.06%)std::sys::thread_local::native::eager::Storage<T>::get (88 samples, 0.06%)core::cell::Cell<T>::get (86 samples, 0.06%)core::ptr::drop_in_place<tokio::runtime::task::core::TaskIdGuard> (116 samples, 0.08%)<tokio::runtime::task::core::TaskIdGuard as core::ops::drop::Drop>::drop (116 samples, 0.08%)tokio::runtime::context::set_current_task_id (116 samples, 0.08%)std::thread::local::LocalKey<T>::try_with (116 samples, 0.08%)<core::panic::unwind_safe::AssertUnwindSafe<F> as core::ops::function::FnOnce<()>>::call_once (92,177 samples, 66.21%)<core::panic::unwind_safe::AssertUnwindSafe<F> as core::ops::function::FnOnce<()>>::call_oncetokio::runtime::task::harness::poll_future::_{{closure}} (92,177 samples, 66.21%)tokio::runtime::task::harness::poll_future::_{{closure}}tokio::runtime::task::core::Core<T,S>::poll (92,177 samples, 66.21%)tokio::runtime::task::core::Core<T,S>::polltokio::loom::std::unsafe_cell::UnsafeCell<T>::with_mut (92,175 samples, 66.21%)tokio::loom::std::unsafe_cell::UnsafeCell<T>::with_muttokio::runtime::task::core::Core<T,S>::poll::_{{closure}} (92,174 samples, 66.21%)tokio::runtime::task::core::Core<T,S>::poll::_{{closure}}tokio::runtime::task::core::TaskIdGuard::enter (28 samples, 0.02%)tokio::runtime::context::set_current_task_id (28 samples, 0.02%)std::thread::local::LocalKey<T>::try_with (28 samples, 0.02%)tokio::runtime::context::set_current_task_id::_{{closure}} (19 samples, 0.01%)core::cell::Cell<T>::replace (19 samples, 0.01%)core::mem::replace (19 samples, 0.01%)tokio::runtime::task::harness::poll_future (92,181 samples, 66.21%)tokio::runtime::task::harness::poll_futurestd::panic::catch_unwind (92,181 samples, 66.21%)std::panic::catch_unwindstd::panicking::try (92,181 samples, 66.21%)std::panicking::trystd::panicking::try::do_call (92,181 samples, 66.21%)std::panicking::try::do_callcore::sync::atomic::AtomicUsize::compare_exchange (92 samples, 0.07%)core::sync::atomic::atomic_compare_exchange (92 samples, 0.07%)tokio::runtime::task::state::State::transition_to_idle (167 samples, 0.12%)tokio::runtime::task::state::State::fetch_update_action (167 samples, 0.12%)tokio::runtime::task::state::State::transition_to_idle::_{{closure}} (63 samples, 0.05%)tokio::runtime::task::state::Snapshot::unset_running (16 samples, 0.01%)core::sync::atomic::AtomicUsize::compare_exchange (141 samples, 0.10%)core::sync::atomic::atomic_compare_exchange (141 samples, 0.10%)tokio::runtime::task::state::State::transition_to_running (159 samples, 0.11%)tokio::runtime::task::state::State::fetch_update_action (159 samples, 0.11%)tokio::runtime::coop::budget (93,651 samples, 67.27%)tokio::runtime::coop::budgettokio::runtime::coop::with_budget (93,651 samples, 67.27%)tokio::runtime::coop::with_budgettokio::runtime::scheduler::multi_thread::worker::Context::run_task::_{{closure}} (93,600 samples, 67.23%)tokio::runtime::scheduler::multi_thread::worker::Context::run_task::_{{closure}}tokio::runtime::task::LocalNotified<S>::run (93,088 samples, 66.86%)tokio::runtime::task::LocalNotified<S>::runtokio::runtime::task::raw::RawTask::poll (93,088 samples, 66.86%)tokio::runtime::task::raw::RawTask::polltokio::runtime::task::raw::poll (92,793 samples, 66.65%)tokio::runtime::task::raw::polltokio::runtime::task::harness::Harness<T,S>::poll (92,776 samples, 66.64%)tokio::runtime::task::harness::Harness<T,S>::polltokio::runtime::task::harness::Harness<T,S>::poll_inner (92,661 samples, 66.55%)tokio::runtime::task::harness::Harness<T,S>::poll_innertokio::runtime::task::waker::waker_ref (16 samples, 0.01%)tokio::runtime::scheduler::multi_thread::stats::Stats::start_poll (24 samples, 0.02%)core::sync::atomic::AtomicUsize::load (298 samples, 0.21%)core::sync::atomic::atomic_load (298 samples, 0.21%)clock_gettime (45 samples, 0.03%)__vdso_clock_gettime (42 samples, 0.03%)std::sys::pal::unix::time::Timespec::now (48 samples, 0.03%)parking_lot_core::parking_lot::FairTimeout::should_timeout (73 samples, 0.05%)parking_lot_core::parking_lot::get_hashtable (18 samples, 0.01%)core::sync::atomic::AtomicPtr<T>::load (17 samples, 0.01%)core::sync::atomic::atomic_load (17 samples, 0.01%)parking_lot_core::parking_lot::hash (65 samples, 0.05%)parking_lot_core::parking_lot::lock_bucket_pair (353 samples, 0.25%)parking_lot_core::word_lock::WordLock::lock (249 samples, 0.18%)core::sync::atomic::AtomicUsize::compare_exchange_weak (248 samples, 0.18%)core::sync::atomic::atomic_compare_exchange_weak (248 samples, 0.18%)parking_lot::condvar::Condvar::notify_one_slow (788 samples, 0.57%)parking_lot_core::parking_lot::unpark_requeue (786 samples, 0.56%)parking_lot_core::parking_lot::unlock_bucket_pair (30 samples, 0.02%)parking_lot_core::word_lock::WordLock::unlock (28 samples, 0.02%)core::sync::atomic::AtomicUsize::fetch_sub (28 samples, 0.02%)core::sync::atomic::atomic_sub (28 samples, 0.02%)syscall (83 samples, 0.06%)[unknown] (25 samples, 0.02%)[libc.so.6] (16 samples, 0.01%)<&std::fs::File as std::io::Write>::write (43 samples, 0.03%)std::sys::pal::unix::fs::File::write (43 samples, 0.03%)std::sys::pal::unix::fd::FileDesc::write (43 samples, 0.03%)write (43 samples, 0.03%)tokio::runtime::driver::IoHandle::unpark (52 samples, 0.04%)tokio::runtime::io::driver::Handle::unpark (44 samples, 0.03%)mio::waker::Waker::wake (44 samples, 0.03%)mio::sys::unix::waker::fdbased::Waker::wake (44 samples, 0.03%)mio::sys::unix::waker::eventfd::WakerInternal::wake (44 samples, 0.03%)tokio::runtime::scheduler::multi_thread::idle::Idle::transition_worker_from_searching (44 samples, 0.03%)tokio::runtime::scheduler::multi_thread::idle::State::dec_num_searching (44 samples, 0.03%)core::sync::atomic::AtomicUsize::fetch_sub (44 samples, 0.03%)core::sync::atomic::atomic_sub (44 samples, 0.03%)core::sync::atomic::AtomicUsize::swap (179 samples, 0.13%)core::sync::atomic::atomic_swap (179 samples, 0.13%)core::mem::drop (15 samples, 0.01%)core::ptr::drop_in_place<tokio::loom::std::parking_lot::MutexGuard<()>> (15 samples, 0.01%)core::ptr::drop_in_place<lock_api::mutex::MutexGuard<parking_lot::raw_mutex::RawMutex,()>> (15 samples, 0.01%)<lock_api::mutex::MutexGuard<R,T> as core::ops::drop::Drop>::drop (15 samples, 0.01%)<parking_lot::raw_mutex::RawMutex as lock_api::mutex::RawMutex>::unlock (15 samples, 0.01%)core::sync::atomic::AtomicU8::compare_exchange (15 samples, 0.01%)core::sync::atomic::atomic_compare_exchange (15 samples, 0.01%)tokio::runtime::scheduler::multi_thread::park::Unparker::unpark (277 samples, 0.20%)tokio::runtime::scheduler::multi_thread::park::Inner::unpark (277 samples, 0.20%)tokio::runtime::scheduler::multi_thread::park::Inner::unpark_condvar (31 samples, 0.02%)tokio::loom::std::parking_lot::Mutex<T>::lock (14 samples, 0.01%)lock_api::mutex::Mutex<R,T>::lock (14 samples, 0.01%)<parking_lot::raw_mutex::RawMutex as lock_api::mutex::RawMutex>::lock (14 samples, 0.01%)core::ptr::drop_in_place<tokio::loom::std::parking_lot::MutexGuard<tokio::runtime::scheduler::multi_thread::worker::Synced>> (45 samples, 0.03%)core::ptr::drop_in_place<lock_api::mutex::MutexGuard<parking_lot::raw_mutex::RawMutex,tokio::runtime::scheduler::multi_thread::worker::Synced>> (45 samples, 0.03%)<lock_api::mutex::MutexGuard<R,T> as core::ops::drop::Drop>::drop (45 samples, 0.03%)<parking_lot::raw_mutex::RawMutex as lock_api::mutex::RawMutex>::unlock (45 samples, 0.03%)core::sync::atomic::AtomicU8::compare_exchange (44 samples, 0.03%)core::sync::atomic::atomic_compare_exchange (44 samples, 0.03%)core::sync::atomic::AtomicU8::compare_exchange_weak (26 samples, 0.02%)core::sync::atomic::atomic_compare_exchange_weak (26 samples, 0.02%)tokio::loom::std::parking_lot::Mutex<T>::lock (31 samples, 0.02%)lock_api::mutex::Mutex<R,T>::lock (31 samples, 0.02%)<parking_lot::raw_mutex::RawMutex as lock_api::mutex::RawMutex>::lock (31 samples, 0.02%)tokio::runtime::scheduler::multi_thread::idle::Idle::notify_should_wakeup (27 samples, 0.02%)core::sync::atomic::AtomicUsize::fetch_add (23 samples, 0.02%)core::sync::atomic::atomic_add (23 samples, 0.02%)tokio::runtime::scheduler::multi_thread::worker::Context::run_task (95,086 samples, 68.30%)tokio::runtime::scheduler::multi_thread::worker::Context::run_tasktokio::runtime::scheduler::multi_thread::worker::Core::transition_from_searching (1,392 samples, 1.00%)tokio::runtime::scheduler::multi_thread::worker::<impl tokio::runtime::scheduler::multi_thread::handle::Handle>::transition_worker_from_searching (1,385 samples, 0.99%)tokio::runtime::scheduler::multi_thread::worker::<impl tokio::runtime::scheduler::multi_thread::handle::Handle>::notify_parked_local (141 samples, 0.10%)tokio::runtime::scheduler::multi_thread::idle::Idle::worker_to_notify (133 samples, 0.10%)tokio::runtime::scheduler::multi_thread::idle::State::unpark_one (18 samples, 0.01%)core::sync::atomic::AtomicUsize::fetch_add (18 samples, 0.01%)core::sync::atomic::atomic_add (18 samples, 0.01%)core::option::Option<T>::or_else (45 samples, 0.03%)tokio::runtime::scheduler::multi_thread::worker::Core::next_local_task::_{{closure}} (40 samples, 0.03%)tokio::runtime::scheduler::multi_thread::queue::Local<T>::pop (40 samples, 0.03%)core::option::Option<T>::or_else (57 samples, 0.04%)tokio::runtime::scheduler::multi_thread::worker::Core::next_task::_{{closure}} (57 samples, 0.04%)tokio::runtime::scheduler::multi_thread::worker::Core::next_local_task (57 samples, 0.04%)tokio::runtime::scheduler::inject::shared::Shared<T>::is_empty (68 samples, 0.05%)tokio::runtime::scheduler::inject::shared::Shared<T>::len (68 samples, 0.05%)core::sync::atomic::AtomicUsize::load (68 samples, 0.05%)core::sync::atomic::atomic_load (68 samples, 0.05%)tokio::runtime::scheduler::multi_thread::worker::<impl tokio::runtime::scheduler::multi_thread::handle::Handle>::next_remote_task (84 samples, 0.06%)tokio::runtime::scheduler::inject::shared::Shared<T>::is_empty (79 samples, 0.06%)tokio::runtime::scheduler::inject::shared::Shared<T>::len (79 samples, 0.06%)core::sync::atomic::AtomicUsize::load (79 samples, 0.06%)core::sync::atomic::atomic_load (79 samples, 0.06%)core::sync::atomic::AtomicU64::load (46 samples, 0.03%)core::sync::atomic::atomic_load (46 samples, 0.03%)tokio::loom::std::atomic_u32::AtomicU32::unsync_load (15 samples, 0.01%)core::sync::atomic::AtomicU32::load (15 samples, 0.01%)core::sync::atomic::atomic_load (15 samples, 0.01%)core::option::Option<T>::or_else (109 samples, 0.08%)tokio::runtime::scheduler::multi_thread::worker::Core::next_local_task::_{{closure}} (90 samples, 0.06%)tokio::runtime::scheduler::multi_thread::queue::Local<T>::pop (90 samples, 0.06%)tokio::runtime::scheduler::multi_thread::worker::Core::next_local_task (132 samples, 0.09%)core::option::Option<T>::take (19 samples, 0.01%)core::mem::replace (19 samples, 0.01%)core::ptr::read (19 samples, 0.01%)tokio::runtime::scheduler::multi_thread::stats::Stats::tuned_global_queue_interval (195 samples, 0.14%)tokio::runtime::scheduler::multi_thread::worker::Core::tune_global_queue_interval (203 samples, 0.15%)tokio::runtime::scheduler::multi_thread::worker::Core::next_task (670 samples, 0.48%)<alloc::sync::Arc<T,A> as core::ops::deref::Deref>::deref (47 samples, 0.03%)alloc::sync::Arc<T,A>::inner (47 samples, 0.03%)core::ptr::non_null::NonNull<T>::as_ref (47 samples, 0.03%)core::iter::range::<impl core::iter::traits::iterator::Iterator for core::ops::range::Range<A>>::next (20 samples, 0.01%)<core::ops::range::Range<T> as core::iter::range::RangeIteratorImpl>::spec_next (20 samples, 0.01%)<alloc::sync::Arc<T,A> as core::ops::deref::Deref>::deref (20 samples, 0.01%)alloc::sync::Arc<T,A>::inner (20 samples, 0.01%)core::ptr::non_null::NonNull<T>::as_ref (20 samples, 0.01%)core::num::<impl u32>::wrapping_sub (14 samples, 0.01%)tokio::loom::std::atomic_u32::AtomicU32::unsync_load (15 samples, 0.01%)core::sync::atomic::AtomicU32::load (15 samples, 0.01%)core::sync::atomic::atomic_load (15 samples, 0.01%)<alloc::sync::Arc<T,A> as core::ops::deref::Deref>::deref (121 samples, 0.09%)alloc::sync::Arc<T,A>::inner (121 samples, 0.09%)core::ptr::non_null::NonNull<T>::as_ref (121 samples, 0.09%)core::sync::atomic::AtomicU32::load (451 samples, 0.32%)core::sync::atomic::atomic_load (451 samples, 0.32%)core::sync::atomic::AtomicU64::compare_exchange (149 samples, 0.11%)core::sync::atomic::atomic_compare_exchange (149 samples, 0.11%)core::sync::atomic::AtomicU64::load (843 samples, 0.61%)core::sync::atomic::atomic_load (843 samples, 0.61%)tokio::loom::std::unsafe_cell::UnsafeCell<T>::with (163 samples, 0.12%)tokio::runtime::scheduler::multi_thread::queue::Steal<T>::steal_into2::_{{closure}} (163 samples, 0.12%)core::ptr::read (163 samples, 0.12%)tokio::runtime::scheduler::multi_thread::queue::pack (25 samples, 0.02%)tokio::runtime::scheduler::multi_thread::queue::Steal<T>::steal_into2 (1,918 samples, 1.38%)tokio::runtime::scheduler::multi_thread::queue::unpack (37 samples, 0.03%)tokio::runtime::scheduler::multi_thread::queue::Steal<T>::steal_into (2,028 samples, 1.46%)tokio::runtime::scheduler::multi_thread::worker::<impl tokio::runtime::scheduler::multi_thread::handle::Handle>::next_remote_task (52 samples, 0.04%)tokio::runtime::scheduler::inject::shared::Shared<T>::is_empty (48 samples, 0.03%)tokio::runtime::scheduler::inject::shared::Shared<T>::len (48 samples, 0.03%)core::sync::atomic::AtomicUsize::load (48 samples, 0.03%)core::sync::atomic::atomic_load (48 samples, 0.03%)tokio::runtime::scheduler::multi_thread::idle::State::inc_num_searching (76 samples, 0.05%)core::sync::atomic::AtomicUsize::fetch_add (76 samples, 0.05%)core::sync::atomic::atomic_add (76 samples, 0.05%)tokio::runtime::scheduler::multi_thread::worker::Core::transition_to_searching (117 samples, 0.08%)tokio::runtime::scheduler::multi_thread::idle::Idle::transition_worker_to_searching (107 samples, 0.08%)tokio::runtime::scheduler::multi_thread::idle::State::load (26 samples, 0.02%)core::sync::atomic::AtomicUsize::load (26 samples, 0.02%)core::sync::atomic::atomic_load (26 samples, 0.02%)tokio::runtime::scheduler::multi_thread::worker::Core::steal_work (2,567 samples, 1.84%)t..tokio::util::rand::FastRand::fastrand_n (26 samples, 0.02%)tokio::util::rand::FastRand::fastrand (26 samples, 0.02%)[libc.so.6] (126,101 samples, 90.57%)[libc.so.6][libc.so.6] (126,100 samples, 90.57%)[libc.so.6]std::sys::pal::unix::thread::Thread::new::thread_start (126,099 samples, 90.57%)std::sys::pal::unix::thread::Thread::new::thread_start<alloc::boxed::Box<F,A> as core::ops::function::FnOnce<Args>>::call_once (126,099 samples, 90.57%)<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 (126,099 samples, 90.57%)<alloc::boxed::Box<F,A> as core::ops::function::FnOnce<Args>>::call_oncecore::ops::function::FnOnce::call_once{{vtable.shim}} (126,099 samples, 90.57%)core::ops::function::FnOnce::call_once{{vtable.shim}}std::thread::Builder::spawn_unchecked_::_{{closure}} (126,099 samples, 90.57%)std::thread::Builder::spawn_unchecked_::_{{closure}}std::panic::catch_unwind (126,099 samples, 90.57%)std::panic::catch_unwindstd::panicking::try (126,099 samples, 90.57%)std::panicking::trystd::panicking::try::do_call (126,099 samples, 90.57%)std::panicking::try::do_call<core::panic::unwind_safe::AssertUnwindSafe<F> as core::ops::function::FnOnce<()>>::call_once (126,099 samples, 90.57%)<core::panic::unwind_safe::AssertUnwindSafe<F> as core::ops::function::FnOnce<()>>::call_oncestd::thread::Builder::spawn_unchecked_::_{{closure}}::_{{closure}} (126,099 samples, 90.57%)std::thread::Builder::spawn_unchecked_::_{{closure}}::_{{closure}}std::sys::backtrace::__rust_begin_short_backtrace (126,099 samples, 90.57%)std::sys::backtrace::__rust_begin_short_backtracetokio::runtime::blocking::pool::Spawner::spawn_thread::_{{closure}} (126,099 samples, 90.57%)tokio::runtime::blocking::pool::Spawner::spawn_thread::_{{closure}}tokio::runtime::blocking::pool::Inner::run (126,098 samples, 90.57%)tokio::runtime::blocking::pool::Inner::runtokio::runtime::blocking::pool::Task::run (126,075 samples, 90.55%)tokio::runtime::blocking::pool::Task::runtokio::runtime::task::UnownedTask<S>::run (126,075 samples, 90.55%)tokio::runtime::task::UnownedTask<S>::runtokio::runtime::task::raw::RawTask::poll (126,075 samples, 90.55%)tokio::runtime::task::raw::RawTask::polltokio::runtime::task::raw::poll (126,075 samples, 90.55%)tokio::runtime::task::raw::polltokio::runtime::task::harness::Harness<T,S>::poll (126,075 samples, 90.55%)tokio::runtime::task::harness::Harness<T,S>::polltokio::runtime::task::harness::Harness<T,S>::poll_inner (126,075 samples, 90.55%)tokio::runtime::task::harness::Harness<T,S>::poll_innertokio::runtime::task::harness::poll_future (126,075 samples, 90.55%)tokio::runtime::task::harness::poll_futurestd::panic::catch_unwind (126,075 samples, 90.55%)std::panic::catch_unwindstd::panicking::try (126,075 samples, 90.55%)std::panicking::trystd::panicking::try::do_call (126,075 samples, 90.55%)std::panicking::try::do_call<core::panic::unwind_safe::AssertUnwindSafe<F> as core::ops::function::FnOnce<()>>::call_once (126,075 samples, 90.55%)<core::panic::unwind_safe::AssertUnwindSafe<F> as core::ops::function::FnOnce<()>>::call_oncetokio::runtime::task::harness::poll_future::_{{closure}} (126,075 samples, 90.55%)tokio::runtime::task::harness::poll_future::_{{closure}}tokio::runtime::task::core::Core<T,S>::poll (126,075 samples, 90.55%)tokio::runtime::task::core::Core<T,S>::polltokio::loom::std::unsafe_cell::UnsafeCell<T>::with_mut (126,075 samples, 90.55%)tokio::loom::std::unsafe_cell::UnsafeCell<T>::with_muttokio::runtime::task::core::Core<T,S>::poll::_{{closure}} (126,075 samples, 90.55%)tokio::runtime::task::core::Core<T,S>::poll::_{{closure}}<tokio::runtime::blocking::task::BlockingTask<T> as core::future::future::Future>::poll (126,075 samples, 90.55%)<tokio::runtime::blocking::task::BlockingTask<T> as core::future::future::Future>::polltokio::runtime::scheduler::multi_thread::worker::Launch::launch::_{{closure}} (126,075 samples, 90.55%)tokio::runtime::scheduler::multi_thread::worker::Launch::launch::_{{closure}}tokio::runtime::scheduler::multi_thread::worker::run (126,075 samples, 90.55%)tokio::runtime::scheduler::multi_thread::worker::runtokio::runtime::context::runtime::enter_runtime (126,075 samples, 90.55%)tokio::runtime::context::runtime::enter_runtimetokio::runtime::scheduler::multi_thread::worker::run::_{{closure}} (126,075 samples, 90.55%)tokio::runtime::scheduler::multi_thread::worker::run::_{{closure}}tokio::runtime::context::set_scheduler (126,075 samples, 90.55%)tokio::runtime::context::set_schedulerstd::thread::local::LocalKey<T>::with (126,075 samples, 90.55%)std::thread::local::LocalKey<T>::withstd::thread::local::LocalKey<T>::try_with (126,075 samples, 90.55%)std::thread::local::LocalKey<T>::try_withtokio::runtime::context::set_scheduler::_{{closure}} (126,075 samples, 90.55%)tokio::runtime::context::set_scheduler::_{{closure}}tokio::runtime::context::scoped::Scoped<T>::set (126,075 samples, 90.55%)tokio::runtime::context::scoped::Scoped<T>::settokio::runtime::scheduler::multi_thread::worker::run::_{{closure}}::_{{closure}} (126,075 samples, 90.55%)tokio::runtime::scheduler::multi_thread::worker::run::_{{closure}}::_{{closure}}tokio::runtime::scheduler::multi_thread::worker::Context::run (126,075 samples, 90.55%)tokio::runtime::scheduler::multi_thread::worker::Context::runtokio::runtime::scheduler::multi_thread::worker::Core::tick (46 samples, 0.03%)<tokio::task::unconstrained::Unconstrained<F> as core::future::future::Future>::poll (14 samples, 0.01%)<wisp_mux::stream::MuxStreamAsyncRead as futures_io::if_std::AsyncBufRead>::consume (93 samples, 0.07%)<futures_util::stream::try_stream::into_async_read::IntoAsyncRead<St> as futures_io::if_std::AsyncBufRead>::consume (93 samples, 0.07%)core::ptr::drop_in_place<futures_util::stream::try_stream::into_async_read::ReadState<bytes::bytes::Bytes>> (93 samples, 0.07%)core::ptr::drop_in_place<bytes::bytes::Bytes> (93 samples, 0.07%)<bytes::bytes::Bytes as core::ops::drop::Drop>::drop (93 samples, 0.07%)<wisp_mux::ws::Payload as bytes::buf::buf_impl::Buf>::advance (34 samples, 0.02%)[libc.so.6] (41 samples, 0.03%)__send (18 samples, 0.01%)bytes::bytes_mut::BytesMut::advance_unchecked (15 samples, 0.01%)bytes::bytes_mut::BytesMut::split_to (16 samples, 0.01%)cfree (35 samples, 0.03%)core::ptr::drop_in_place<futures_util::lock::mutex::MutexGuard<alloc::boxed::Box<dyn wisp_mux::ws::WebSocketWrite+core::marker::Send>>> (69 samples, 0.05%)<futures_util::lock::mutex::MutexGuard<T> as core::ops::drop::Drop>::drop (50 samples, 0.04%)futures_util::lock::mutex::Mutex<T>::unlock (50 samples, 0.04%)futures_util::lock::mutex::Waiter::wake (50 samples, 0.04%)core::task::wake::Waker::wake (50 samples, 0.04%)core::ptr::drop_in_place<wisp_mux::fastwebsockets::<impl wisp_mux::ws::WebSocketRead for fastwebsockets::WebSocketRead<tokio_util::either::Either<tokio::net::tcp::split_owned::OwnedReadHalf,tokio::net::unix::split_owned::OwnedReadHalf>>>::wisp_read_split::{{closure}}> (30 samples, 0.02%)core::ptr::drop_in_place<wisp_mux::ws::LockedWebSocketWrite::write_split::{{closure}}> (49 samples, 0.04%)dashmap::DashMap<K,V,S>::hash_usize (54 samples, 0.04%)fastwebsockets::WebSocketWrite<S>::write_frame::_{{closure}} (143 samples, 0.10%)fastwebsockets::WriteHalf::write_frame::_{{closure}} (18 samples, 0.01%)fastwebsockets::frame::Frame::writev::_{{closure}} (18 samples, 0.01%)<tokio::io::util::write_vectored::WriteVectored<W> as core::future::future::Future>::poll (18 samples, 0.01%)<&mut T as tokio::io::async_write::AsyncWrite>::poll_write_vectored (18 samples, 0.01%)tokio::io::async_write::AsyncWrite::poll_write_vectored (18 samples, 0.01%)<tokio_util::either::Either<L,R> as tokio::io::async_write::AsyncWrite>::poll_write (18 samples, 0.01%)<tokio::net::tcp::split_owned::OwnedWriteHalf as tokio::io::async_write::AsyncWrite>::poll_write (18 samples, 0.01%)fastwebsockets::frame::<impl core::convert::From<fastwebsockets::frame::Payload> for bytes::bytes_mut::BytesMut>::from (51 samples, 0.04%)fastwebsockets::frame::Frame::unmask (117 samples, 0.08%)futures_util::lock::mutex::Mutex<T>::remove_waker (19 samples, 0.01%)malloc (47 samples, 0.03%)parking_lot::condvar::Condvar::wait_until_internal (34 samples, 0.02%)recv (70 samples, 0.05%)std::sys::pal::unix::time::Timespec::now (17 samples, 0.01%)tokio::runtime::io::driver::Driver::turn (52 samples, 0.04%)mio::poll::Poll::poll (21 samples, 0.02%)mio::sys::unix::selector::epoll::Selector::select (21 samples, 0.02%)tokio::runtime::io::registration::Registration::poll_ready (160 samples, 0.11%)tokio::runtime::io::scheduled_io::ScheduledIo::poll_readiness (30 samples, 0.02%)<core::task::wake::Waker as core::clone::Clone>::clone (30 samples, 0.02%)tokio::runtime::io::scheduled_io::ScheduledIo::wake (56 samples, 0.04%)tokio::util::wake_list::WakeList::wake_all (33 samples, 0.02%)core::task::wake::Waker::wake (33 samples, 0.02%)tokio::runtime::scheduler::multi_thread::worker::<impl tokio::runtime::scheduler::multi_thread::handle::Handle>::schedule_task (45 samples, 0.03%)tokio::runtime::scheduler::multi_thread::worker::Context::park_timeout (16 samples, 0.01%)tokio::runtime::scheduler::multi_thread::worker::_<impl tokio::runtime::scheduler::multi_thread::handle::Handle>::schedule_task::_{{closure}} (14 samples, 0.01%)tokio::runtime::signal::Driver::process (22 samples, 0.02%)tokio::runtime::io::driver::signal::<impl tokio::runtime::io::driver::Driver>::consume_signal_ready (22 samples, 0.02%)tokio::runtime::task::raw::poll (59 samples, 0.04%)tokio::runtime::task::state::State::transition_to_idle (57 samples, 0.04%)core::iter::traits::iterator::Iterator::min (23 samples, 0.02%)core::iter::traits::iterator::Iterator::min_by (23 samples, 0.02%)core::iter::traits::iterator::Iterator::reduce (23 samples, 0.02%)<core::iter::adapters::filter_map::FilterMap<I,F> as core::iter::traits::iterator::Iterator>::next (23 samples, 0.02%)<core::slice::iter::Iter<T> as core::iter::traits::iterator::Iterator>::find_map (23 samples, 0.02%)core::ops::function::impls::<impl core::ops::function::FnMut<A> for &mut F>::call_mut (23 samples, 0.02%)tokio::runtime::time::Driver::park_internal::_{{closure}} (23 samples, 0.02%)tokio::runtime::time::wheel::Wheel::next_expiration_time (23 samples, 0.02%)tokio::runtime::driver::Handle::time (17 samples, 0.01%)core::option::Option<T>::as_ref (17 samples, 0.01%)tokio::runtime::time::Driver::park_internal (81 samples, 0.06%)tokio::runtime::time::_<impl tokio::runtime::time::handle::Handle>::process_at_time::_{{closure}} (125 samples, 0.09%)tokio::runtime::time::<impl tokio::runtime::time::handle::Handle>::process_at_sharded_time (15 samples, 0.01%)tokio::runtime::time::wheel::Wheel::poll_at (15 samples, 0.01%)tokio::runtime::time::wheel::Wheel::next_expiration (369 samples, 0.27%)tokio::util::linked_list::LinkedList<L,<L as tokio::util::linked_list::Link>::Target>::is_empty (237 samples, 0.17%)core::option::Option<T>::is_some (237 samples, 0.17%)wisp_mux::fastwebsockets::<impl wisp_mux::ws::WebSocketWrite for fastwebsockets::WebSocketWrite<S>>::wisp_write_split (348 samples, 0.25%)alloc::boxed::Box<T>::pin (26 samples, 0.02%)alloc::boxed::Box<T>::new (26 samples, 0.02%)alloc::alloc::exchange_malloc (26 samples, 0.02%)<alloc::alloc::Global as core::alloc::Allocator>::allocate (26 samples, 0.02%)alloc::alloc::Global::alloc_impl (26 samples, 0.02%)alloc::alloc::alloc (26 samples, 0.02%)__rdl_alloc (26 samples, 0.02%)std::sys::pal::unix::alloc::<impl core::alloc::global::GlobalAlloc for std::alloc::System>::alloc (26 samples, 0.02%)wisp_mux::fastwebsockets::_<impl wisp_mux::ws::WebSocketRead for fastwebsockets::WebSocketRead<S>>::wisp_read_split::_{{closure}} (32 samples, 0.02%)[unknown] (5,489 samples, 3.94%)[unk..__send (17 samples, 0.01%)cfree (15 samples, 0.01%)fastwebsockets::WebSocketWrite<S>::write_frame::_{{closure}} (15 samples, 0.01%)fastwebsockets::frame::Frame::fmt_head (64 samples, 0.05%)flume::Chan<T>::pull_pending (27 samples, 0.02%)mio::sys::unix::waker::eventfd::WakerInternal::wake (22 samples, 0.02%)syscall (242 samples, 0.17%)tokio::net::tcp::stream::TcpStream::poll_write_priv (26 samples, 0.02%)tokio::runtime::scheduler::multi_thread::worker::_<impl tokio::runtime::scheduler::multi_thread::handle::Handle>::schedule_task::_{{closure}} (15 samples, 0.01%)tokio::runtime::task::raw::poll (298 samples, 0.21%)tokio::runtime::task::harness::Harness<T,S>::poll (16 samples, 0.01%)tokio::runtime::task::harness::Harness<T,S>::poll_inner (16 samples, 0.01%)<core::pin::Pin<P> as core::future::future::Future>::poll (14 samples, 0.01%)core::ptr::drop_in_place<bytes::bytes_mut::BytesMut> (27 samples, 0.02%)<bytes::bytes_mut::BytesMut as core::ops::drop::Drop>::drop (27 samples, 0.02%)bytes::bytes_mut::release_shared (18 samples, 0.01%)core::mem::drop (18 samples, 0.01%)core::ptr::drop_in_place<alloc::boxed::Box<bytes::bytes_mut::Shared>> (18 samples, 0.01%)core::ptr::drop_in_place<bytes::bytes_mut::Shared> (18 samples, 0.01%)core::ptr::drop_in_place<alloc::vec::Vec<u8>> (18 samples, 0.01%)core::ptr::drop_in_place<alloc::raw_vec::RawVec<u8>> (18 samples, 0.01%)<alloc::raw_vec::RawVec<T,A> as core::ops::drop::Drop>::drop (18 samples, 0.01%)<alloc::alloc::Global as core::alloc::Allocator>::deallocate (18 samples, 0.01%)alloc::alloc::dealloc (18 samples, 0.01%)__rdl_dealloc (18 samples, 0.01%)std::sys::pal::unix::alloc::<impl core::alloc::global::GlobalAlloc for std::alloc::System>::dealloc (18 samples, 0.01%)wisp_mux::MuxInner::server_loop::_{{closure}} (48 samples, 0.03%)wisp_mux::MuxInner::as_future::_{{closure}}::_{{closure}}::_{{closure}} (111 samples, 0.08%)futures_util::future::future::FutureExt::poll_unpin (49 samples, 0.04%)<core::pin::Pin<P> as core::future::future::Future>::poll (49 samples, 0.04%)<futures_util::future::future::fuse::Fuse<Fut> as core::future::future::Future>::poll (49 samples, 0.04%)wisp_mux::fastwebsockets::_<impl wisp_mux::ws::WebSocketRead for fastwebsockets::WebSocketRead<S>>::wisp_read_split::_{{closure}} (20 samples, 0.01%)wisp_mux::stream::MuxStreamRead::read::_{{closure}}::_{{closure}}::_{{closure}} (174 samples, 0.12%)all (139,225 samples, 100%)tokio-runtime-w (139,191 samples, 99.98%)tokio-runtime-wwisp_mux::stream::MuxStreamWrite::write_payload::_{{closure}} (22 samples, 0.02%) \ No newline at end of file diff --git a/server/src/handle/wisp.rs b/server/src/handle/wisp.rs index b00efb5..71a4ab4 100644 --- a/server/src/handle/wisp.rs +++ b/server/src/handle/wisp.rs @@ -1,5 +1,5 @@ use anyhow::Context; -use fastwebsockets::{upgrade::UpgradeFut, FragmentCollectorRead}; +use fastwebsockets::upgrade::UpgradeFut; use futures_util::FutureExt; use hyper_util::rt::TokioIo; use tokio::{ @@ -165,7 +165,6 @@ pub async fn handle_wisp(fut: UpgradeFut, id: String) -> anyhow::Result<()> { assert_eq!(parts.read_buf.len(), 0); parts.io.into_inner().split() }); - let read = FragmentCollectorRead::new(read); let (extensions, buffer_size) = CONFIG.wisp.to_opts(); diff --git a/wisp/src/fastwebsockets.rs b/wisp/src/fastwebsockets.rs index a7b3e3d..b9529da 100644 --- a/wisp/src/fastwebsockets.rs +++ b/wisp/src/fastwebsockets.rs @@ -3,7 +3,8 @@ use std::ops::Deref; use async_trait::async_trait; use bytes::BytesMut; use fastwebsockets::{ - CloseCode, FragmentCollectorRead, Frame, OpCode, Payload, WebSocketError, WebSocketWrite, + CloseCode, FragmentCollectorRead, Frame, OpCode, Payload, WebSocketError, WebSocketRead, + WebSocketWrite, }; use tokio::io::{AsyncRead, AsyncWrite}; @@ -88,13 +89,114 @@ impl crate::ws::WebSocketRead for FragmentCollector } } +#[async_trait] +impl crate::ws::WebSocketRead for WebSocketRead { + async fn wisp_read_frame( + &mut self, + tx: &LockedWebSocketWrite, + ) -> Result, WispError> { + let mut frame = self + .read_frame(&mut |frame| async { tx.write_frame(frame.into()).await }) + .await?; + + if frame.opcode == OpCode::Continuation { + return Err(WispError::WsImplError(Box::new( + WebSocketError::InvalidContinuationFrame, + ))); + } + + let mut buf = BytesMut::from(frame.payload); + let opcode = frame.opcode; + + while !frame.fin { + frame = self + .read_frame(&mut |frame| async { tx.write_frame(frame.into()).await }) + .await?; + + if frame.opcode != OpCode::Continuation { + return Err(WispError::WsImplError(Box::new( + WebSocketError::InvalidContinuationFrame, + ))); + } + + buf.extend_from_slice(&frame.payload); + } + + Ok(crate::ws::Frame { + opcode: opcode.into(), + payload: crate::ws::Payload::Bytes(buf), + finished: frame.fin, + }) + } + + async fn wisp_read_split( + &mut self, + tx: &LockedWebSocketWrite, + ) -> Result<(crate::ws::Frame<'static>, Option>), WispError> { + let mut frame_cnt = 1; + let mut frame = self + .read_frame(&mut |frame| async { tx.write_frame(frame.into()).await }) + .await?; + let mut extra_frame = None; + + if frame.opcode == OpCode::Continuation { + return Err(WispError::WsImplError(Box::new( + WebSocketError::InvalidContinuationFrame, + ))); + } + + let mut buf = BytesMut::from(frame.payload); + let opcode = frame.opcode; + + while !frame.fin { + frame = self + .read_frame(&mut |frame| async { tx.write_frame(frame.into()).await }) + .await?; + + if frame.opcode != OpCode::Continuation { + return Err(WispError::WsImplError(Box::new( + WebSocketError::InvalidContinuationFrame, + ))); + } + if frame_cnt == 1 { + let payload = BytesMut::from(frame.payload); + extra_frame = Some(crate::ws::Frame { + opcode: opcode.into(), + payload: crate::ws::Payload::Bytes(payload), + finished: true, + }); + } else if frame_cnt == 2 { + let extra_payload = extra_frame.take().unwrap().payload; + buf.extend_from_slice(&extra_payload); + buf.extend_from_slice(&frame.payload); + } else { + buf.extend_from_slice(&frame.payload); + } + frame_cnt += 1; + } + + Ok(( + crate::ws::Frame { + opcode: opcode.into(), + payload: crate::ws::Payload::Bytes(buf), + finished: frame.fin, + }, + extra_frame, + )) + } +} + #[async_trait] impl crate::ws::WebSocketWrite for WebSocketWrite { async fn wisp_write_frame(&mut self, frame: crate::ws::Frame<'_>) -> Result<(), WispError> { self.write_frame(frame.into()).await.map_err(|e| e.into()) } - async fn wisp_write_split(&mut self, header: crate::ws::Frame<'_>, body: crate::ws::Frame<'_>) -> Result<(), WispError> { + async fn wisp_write_split( + &mut self, + header: crate::ws::Frame<'_>, + body: crate::ws::Frame<'_>, + ) -> Result<(), WispError> { let mut header = Frame::from(header); header.fin = false; self.write_frame(header).await?; diff --git a/wisp/src/lib.rs b/wisp/src/lib.rs index d7b71f8..928bfd8 100644 --- a/wisp/src/lib.rs +++ b/wisp/src/lib.rs @@ -29,7 +29,7 @@ use std::{ }, time::Duration, }; -use ws::{AppendingWebSocketRead, LockedWebSocketWrite}; +use ws::{AppendingWebSocketRead, LockedWebSocketWrite, Payload}; /// Wisp version supported by this crate. pub const WISP_VERSION: WispVersion = WispVersion { major: 2, minor: 0 }; @@ -352,10 +352,19 @@ impl MuxInner { let target_buffer_size = ((self.buffer_size as u64 * 90) / 100) as u32; loop { - let frame = rx.wisp_read_frame(&self.tx).await?; + let (mut frame, optional_frame) = rx.wisp_read_split(&self.tx).await?; if frame.opcode == ws::OpCode::Close { break Ok(()); } + + if let Some(ref extra_frame) = optional_frame { + if frame.payload[0] != PacketType::Data(Payload::Bytes(BytesMut::new())).as_u8() { + let mut payload = BytesMut::from(frame.payload); + payload.extend_from_slice(&extra_frame.payload); + frame.payload = Payload::Bytes(payload); + } + } + if let Some(packet) = Packet::maybe_handle_extension(frame, &mut extensions, &mut rx, &self.tx).await? { @@ -380,8 +389,16 @@ impl MuxInner { self.stream_map.insert(packet.stream_id, map_value); } Data(data) => { + let mut data = BytesMut::from(data); if let Some(stream) = self.stream_map.get(&packet.stream_id) { - let _ = stream.stream.try_send(BytesMut::from(data).freeze()); + if let Some(extra_frame) = optional_frame { + if data.is_empty() { + data = extra_frame.payload.into(); + } else { + data.extend_from_slice(&extra_frame.payload); + } + } + let _ = stream.stream.try_send(data.freeze()); if stream.stream_type == StreamType::Tcp { stream.flow_control.store( stream @@ -413,11 +430,19 @@ impl MuxInner { R: ws::WebSocketRead + Send, { loop { - let frame = rx.wisp_read_frame(&self.tx).await?; + let (mut frame, optional_frame) = rx.wisp_read_split(&self.tx).await?; if frame.opcode == ws::OpCode::Close { break Ok(()); } + if let Some(ref extra_frame) = optional_frame { + if frame.payload[0] != PacketType::Data(Payload::Bytes(BytesMut::new())).as_u8() { + let mut payload = BytesMut::from(frame.payload); + payload.extend_from_slice(&extra_frame.payload); + frame.payload = Payload::Bytes(payload); + } + } + if let Some(packet) = Packet::maybe_handle_extension(frame, &mut extensions, &mut rx, &self.tx).await? { @@ -425,11 +450,16 @@ impl MuxInner { match packet.packet_type { Connect(_) | Info(_) => break Err(WispError::InvalidPacketType), Data(data) => { + let mut data = BytesMut::from(data); if let Some(stream) = self.stream_map.get(&packet.stream_id) { - let _ = stream - .stream - .send_async(BytesMut::from(data).freeze()) - .await; + if let Some(extra_frame) = optional_frame { + if data.is_empty() { + data = extra_frame.payload.into(); + } else { + data.extend_from_slice(&extra_frame.payload); + } + } + let _ = stream.stream.send_async(data.freeze()).await; } } Continue(inner_packet) => { diff --git a/wisp/src/ws.rs b/wisp/src/ws.rs index a070395..63f7cb7 100644 --- a/wisp/src/ws.rs +++ b/wisp/src/ws.rs @@ -156,6 +156,14 @@ pub trait WebSocketRead { &mut self, tx: &LockedWebSocketWrite, ) -> Result, WispError>; + + /// Read a split frame from the socket. + async fn wisp_read_split( + &mut self, + tx: &LockedWebSocketWrite, + ) -> Result<(Frame<'static>, Option>), WispError> { + self.wisp_read_frame(tx).await.map(|x| (x, None)) + } } /// Generic WebSocket write trait. @@ -225,6 +233,16 @@ where if let Some(x) = self.0.take() { return Ok(x); } - return self.1.wisp_read_frame(tx).await; + self.1.wisp_read_frame(tx).await + } + + async fn wisp_read_split( + &mut self, + tx: &LockedWebSocketWrite, + ) -> Result<(Frame<'static>, Option>), WispError> { + if let Some(x) = self.0.take() { + return Ok((x, None)); + } + self.1.wisp_read_split(tx).await } }