diff --git a/.envrc b/.envrc deleted file mode 100644 index 2493a157f..000000000 --- a/.envrc +++ /dev/null @@ -1 +0,0 @@ -use nix; \ No newline at end of file diff --git a/README.md b/README.md index bdae75e66..529e2bdce 100644 --- a/README.md +++ b/README.md @@ -41,6 +41,7 @@ toolkit consists of multiple components: ## extremely cool and amazing demo + [![asciicast](https://asciinema.org/a/412139.svg)](https://asciinema.org/a/412139?t=44) wow! whoa! it's like `top(1)` for tasks! diff --git a/console-subscriber/src/lib.rs b/console-subscriber/src/lib.rs index 80e0f34d0..af503cb3a 100644 --- a/console-subscriber/src/lib.rs +++ b/console-subscriber/src/lib.rs @@ -128,6 +128,7 @@ impl TasksLayer { pub const DEFAULT_EVENT_BUFFER_CAPACITY: usize = 1024 * 10; pub const DEFAULT_CLIENT_BUFFER_CAPACITY: usize = 1024 * 4; pub const DEFAULT_FLUSH_INTERVAL: Duration = Duration::from_secs(1); + #[inline(always)] fn is_spawn(&self, meta: &'static Metadata<'static>) -> bool { ptr::eq(self.task_meta.load(Relaxed), meta as *const _ as *mut _) @@ -163,48 +164,49 @@ where F: for<'writer> FormatFields<'writer> + 'static, { fn register_callsite(&self, meta: &'static Metadata<'static>) -> subscriber::Interest { - if meta.target() == "tokio::task" && meta.name() == "task" { - if meta.fields().iter().any(|f| f.name() == "function") { - let _ = self.blocking_meta.compare_exchange( - ptr::null_mut(), - meta as *const _ as *mut _, - AcqRel, - Acquire, - ); - } else { - let _ = self.task_meta.compare_exchange( - ptr::null_mut(), - meta as *const _ as *mut _, - AcqRel, - Acquire, - ); - } + if meta.fields().iter().any(|f| f.name() == "function") { + let _ = self.blocking_meta.compare_exchange( + ptr::null_mut(), + meta as *const _ as *mut _, + AcqRel, + Acquire, + ); + } else { + let _ = self.task_meta.compare_exchange( + ptr::null_mut(), + meta as *const _ as *mut _, + AcqRel, + Acquire, + ); } - self.try_send(Event::Metadata(meta)); + if meta.target() == "tokio::task" && meta.name() == "task" { + self.try_send(Event::Metadata(meta)); + } subscriber::Interest::always() } fn new_span(&self, attrs: &span::Attributes<'_>, id: &span::Id, cx: Context<'_, S>) { let metadata = attrs.metadata(); - if self.is_spawn(metadata) { - let at = SystemTime::now(); - let span = cx.span(id).expect("newly-created span should exist"); - let mut exts = span.extensions_mut(); - let fields = match exts.get_mut::>() { - Some(fields) => fields.fields.clone(), - None => { - let mut fields = String::new(); - match self.format.format_fields(&mut fields, attrs) { - Ok(()) => exts.insert(FormattedFields::::new(fields.clone())), - Err(_) => { - tracing::warn!(span.id = ?id, span.attrs = ?attrs, "error formatting fields for span") - } + let at = SystemTime::now(); + let span = cx.span(id).expect("newly-created span should exist"); + let mut exts = span.extensions_mut(); + let fields = match exts.get_mut::>() { + Some(fields) => fields.fields.clone(), + None => { + let mut fields = String::new(); + match self.format.format_fields(&mut fields, attrs) { + Ok(()) => exts.insert(FormattedFields::::new(fields.clone())), + Err(_) => { + tracing::warn!(span.id = ?id, span.attrs = ?attrs, "error formatting fields for span") } - fields } - }; + fields + } + }; + + if self.is_spawn(metadata) { self.try_send(Event::Spawn { id: id.clone(), at,