Skip to content

Commit 627aaf4

Browse files
committed
perf: skip creating a context in on_close if possible
1 parent eb50246 commit 627aaf4

File tree

1 file changed

+18
-17
lines changed

1 file changed

+18
-17
lines changed

src/layer.rs

Lines changed: 18 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@ use once_cell::unsync;
55
#[cfg(feature = "activate_context")]
66
use opentelemetry::ContextGuard;
77
use opentelemetry::{
8-
trace::{self as otel, noop, SpanBuilder, SpanKind, Status, TraceContextExt},
8+
trace::{self as otel, noop, Span, SpanBuilder, SpanKind, Status, TraceContextExt},
99
Context as OtelContext, Key, KeyValue, StringValue, Value,
1010
};
1111
#[cfg(feature = "activate_context")]
@@ -1314,30 +1314,31 @@ where
13141314
end_time,
13151315
}) = otel_data
13161316
{
1317-
let cx = if let Some(builder) = builder {
1318-
let span = builder.start_with_context(&self.tracer, &parent_cx);
1319-
parent_cx.with_span(span)
1320-
} else {
1321-
parent_cx
1322-
};
1323-
1324-
let span = cx.span();
13251317
// Append busy/idle timings when enabled.
1326-
if let Some(timings) = timings {
1318+
let timings = timings.and_then(|timings| {
13271319
let busy_ns = Key::new("busy_ns");
13281320
let idle_ns = Key::new("idle_ns");
13291321

1330-
span.set_attributes(vec![
1322+
Some(vec![
13311323
KeyValue::new(busy_ns, timings.busy),
13321324
KeyValue::new(idle_ns, timings.idle),
1333-
]);
1334-
}
1325+
])
1326+
});
13351327

1336-
if let Some(end_time) = end_time {
1337-
span.end_with_timestamp(end_time);
1328+
if let Some(builder) = builder {
1329+
// Don't create the context here just to get a SpanRef since it's costly
1330+
let mut span = builder.start_with_context(&self.tracer, &parent_cx);
1331+
timings.map(|timings| span.set_attributes(timings));
1332+
if let Some(end_time) = end_time {
1333+
span.end_with_timestamp(end_time);
1334+
} else {
1335+
span.end();
1336+
}
13381337
} else {
1339-
span.end();
1340-
}
1338+
let span = parent_cx.span();
1339+
timings.map(|timings| span.set_attributes(timings));
1340+
end_time.map_or_else(|| span.end(), |end_time| span.end_with_timestamp(end_time));
1341+
};
13411342
}
13421343
}
13431344

0 commit comments

Comments
 (0)