diff --git a/tracing/src/main/java/com/palantir/tracing/Tracer.java b/tracing/src/main/java/com/palantir/tracing/Tracer.java index 77ead25bb..e66f85b01 100644 --- a/tracing/src/main/java/com/palantir/tracing/Tracer.java +++ b/tracing/src/main/java/com/palantir/tracing/Tracer.java @@ -67,10 +67,19 @@ private Tracer() {} */ private static Trace createTrace(Optional isObservable, String traceId) { Preconditions.checkArgument(traceId != null && !traceId.isEmpty(), "traceId must be non-empty: %s", traceId); - boolean observable = isObservable.orElseGet(sampler::sample); + boolean observable = shouldObserve(isObservable); return new Trace(observable, traceId); } + // Avoid lambda allocation on hot paths + @SuppressWarnings("OptionalIsPresent") + private static boolean shouldObserve(Optional isObservable) { + if (isObservable.isPresent()) { + return Boolean.TRUE.equals(isObservable.get()); + } + return sampler.sample(); + } + /** * Initializes the current thread's trace, erasing any previously accrued open spans. The new trace is {@link * Trace#isObservable observable} iff the given flag is true, or, iff {@code isObservable} is absent, if the {@link