Skip to content

Commit

Permalink
Remove TracyEventFieldVisitor allocations
Browse files Browse the repository at this point in the history
Signed-off-by: Alex Saveau <saveau.alexandre@gmail.com>
  • Loading branch information
SUPERCILEX committed Dec 25, 2023
1 parent 3bd65e6 commit f6c90de
Show file tree
Hide file tree
Showing 2 changed files with 18 additions and 7 deletions.
15 changes: 12 additions & 3 deletions tracing-tracy/src/lib.rs
Original file line number Diff line number Diff line change
Expand Up @@ -49,6 +49,7 @@
#![doc = include_str!("../FEATURES.mkd")]
#![cfg_attr(tracing_tracy_docs, feature(doc_auto_cfg))]

use std::cell::Cell;
use std::{borrow::Cow, cell::RefCell, collections::VecDeque, fmt::Write};
use tracing_core::{
field::{Field, Visit},
Expand Down Expand Up @@ -177,11 +178,16 @@ where
}

fn on_event(&self, event: &Event, _: Context<'_, S>) {
thread_local! {
static BUF: Cell<String> = Cell::new(String::new());
}

let mut visitor = TracyEventFieldVisitor {
dest: String::with_capacity(64),
dest: BUF.take(),
first: true,
frame_mark: false,
};

event.record(&mut visitor);
if !visitor.first {
self.client.message(
Expand All @@ -197,6 +203,9 @@ where
if visitor.frame_mark {
self.client.frame_mark();
}

visitor.dest.clear();
BUF.set(visitor.dest)
}

fn on_enter(&self, id: &Id, ctx: Context<S>) {
Expand Down Expand Up @@ -277,11 +286,11 @@ impl Visit for TracyEventFieldVisitor {
// FIXME: this is a very crude formatter, but we don’t have
// an easy way to do anything better...
if self.first {
let _ = write!(&mut self.dest, "{} = {:?}", field.name(), value);
self.first = false;
} else {
let _ = write!(&mut self.dest, ", {} = {:?}", field.name(), value);
self.dest.push_str(", ");
}
let _ = write!(&mut self.dest, "{} = {value:?}", field.name());
}
}

Expand Down
10 changes: 6 additions & 4 deletions tracing-tracy/src/tests.rs
Original file line number Diff line number Diff line change
Expand Up @@ -125,7 +125,8 @@ fn benchmark_span(c: &mut Criterion) {
tracing_subscriber::registry().with(super::TracyLayer::new().with_stackdepth(100));
tracing::subscriber::with_default(layer, || {
bencher.iter(|| {
let _span = tracing::error_span!("message").entered();
let _span =
tracing::error_span!("message", field1 = "first", field2 = "second").entered();
});
})
});
Expand All @@ -135,7 +136,8 @@ fn benchmark_span(c: &mut Criterion) {
tracing_subscriber::registry().with(super::TracyLayer::new().with_stackdepth(0));
tracing::subscriber::with_default(layer, || {
bencher.iter(|| {
let _span = tracing::error_span!("message").entered();
let _span =
tracing::error_span!("message", field1 = "first", field2 = "second").entered();
});
})
});
Expand All @@ -147,7 +149,7 @@ fn benchmark_message(c: &mut Criterion) {
tracing_subscriber::registry().with(super::TracyLayer::new().with_stackdepth(100));
tracing::subscriber::with_default(layer, || {
bencher.iter(|| {
tracing::error!("message");
tracing::error!(field1 = "first", field2 = "second", "message");
});
})
});
Expand All @@ -157,7 +159,7 @@ fn benchmark_message(c: &mut Criterion) {
tracing_subscriber::registry().with(super::TracyLayer::new().with_stackdepth(0));
tracing::subscriber::with_default(layer, || {
bencher.iter(|| {
tracing::error!("message");
tracing::error!(field1 = "first", field2 = "second", "message");
});
})
});
Expand Down

0 comments on commit f6c90de

Please sign in to comment.