@@ -1127,7 +1127,7 @@ class SpanParent {
11271127 // Make a SpanParent that causes children not to be reported anywhere.
11281128 SpanParent (decltype (nullptr )) {}
11291129
1130- SpanParent (kj::Maybe<kj::Own< SpanObserver> > observer): observer(kj::mv(observer)) {}
1130+ SpanParent (kj::Rc< SpanObserver> observer): observer(kj::mv(observer)) {}
11311131
11321132 SpanParent (SpanParent&& other) = default ;
11331133 SpanParent& operator =(SpanParent&& other) = default ;
@@ -1143,7 +1143,7 @@ class SpanParent {
11431143
11441144 // Useful to skip unnecessary code when not observed.
11451145 bool isObserved () {
1146- return observer != kj::none ;
1146+ return observer != nullptr ;
11471147 }
11481148
11491149 // Get the underlying SpanObserver representing the parent span.
@@ -1152,7 +1152,8 @@ class SpanParent {
11521152 // trace IDs in a way that is specific to the trace back-end being used. The caller must downcast
11531153 // the `SpanObserver` to the expected observer type in order to extract the trace ID.
11541154 kj::Maybe<SpanObserver&> getObserver () {
1155- return observer;
1155+ if (observer != nullptr ) return *observer;
1156+ return kj::none;
11561157 }
11571158
11581159 // Return the serializable identity of this span for cross-boundary propagation.
@@ -1166,7 +1167,7 @@ class SpanParent {
11661167 static SpanParent fromSpanContext (tracing::SpanContext context);
11671168
11681169 private:
1169- kj::Maybe<kj::Own< SpanObserver> > observer;
1170+ kj::Rc< SpanObserver> observer;
11701171};
11711172
11721173// Whether the span tag is a custom tag added using the user tracing binding, we do not log for
@@ -1188,7 +1189,7 @@ class SpanBuilder {
11881189 //
11891190 // `operationName` should be a string literal with infinite lifetime, or somehow otherwise be
11901191 // attached to the observer observing this span.
1191- explicit SpanBuilder (kj::Maybe<kj::Own< SpanObserver> > observer,
1192+ explicit SpanBuilder (kj::Rc< SpanObserver> observer,
11921193 kj::ConstString operationName,
11931194 kj::Maybe<kj::Date> startTime = kj::none);
11941195
@@ -1208,7 +1209,7 @@ class SpanBuilder {
12081209
12091210 // Useful to skip unnecessary code when not observed.
12101211 bool isObserved () {
1211- return observer != kj::none ;
1212+ return observer != nullptr ;
12121213 }
12131214
12141215 // Get the underlying SpanObserver representing the span.
@@ -1217,7 +1218,8 @@ class SpanBuilder {
12171218 // trace IDs in a way that is specific to the trace back-end being used. The caller must downcast
12181219 // the `SpanObserver` to the expected observer type in order to extract the trace ID.
12191220 kj::Maybe<SpanObserver&> getObserver () {
1220- return observer;
1221+ if (observer != nullptr ) return *observer;
1222+ return kj::none;
12211223 }
12221224
12231225 // Create a new child span.
@@ -1255,7 +1257,7 @@ class SpanBuilder {
12551257 void addLog (kj::Date timestamp, kj::ConstString key, TagValue value);
12561258
12571259 private:
1258- kj::Maybe<kj::Own< SpanObserver> > observer;
1260+ kj::Rc< SpanObserver> observer;
12591261 // The under-construction span, or null if the span has ended.
12601262 kj::Maybe<Span> span;
12611263
@@ -1274,12 +1276,12 @@ class SpanObserver: public kj::Refcounted {
12741276 // Allocate a new child span.
12751277 //
12761278 // Note that children can be created long after a span has completed.
1277- [[nodiscard]] virtual kj::Own <SpanObserver> newChild () = 0;
1279+ [[nodiscard]] virtual kj::Rc <SpanObserver> newChild () = 0;
12781280
12791281 // Allocate a child for a span initiated directly by user JavaScript (via
12801282 // `ctx.tracing.enterSpan`). Allows implementations to apply different policies than for
12811283 // runtime-issued spans (notably, edgeworker bypasses its operation-name allowlist here).
1282- [[nodiscard]] virtual kj::Own <SpanObserver> newChildFromUserCode () {
1284+ [[nodiscard]] virtual kj::Rc <SpanObserver> newChildFromUserCode () {
12831285 return newChild ();
12841286 }
12851287
@@ -1325,7 +1327,7 @@ class NonRecordingSpanObserver final: public SpanObserver {
13251327 public:
13261328 explicit NonRecordingSpanObserver (tracing::SpanContext context): context(kj::mv(context)) {}
13271329
1328- kj::Own <SpanObserver> newChild () override {
1330+ kj::Rc <SpanObserver> newChild () override {
13291331 return {};
13301332 }
13311333 void onOpen (kj::ConstString, kj::Date) override {}
@@ -1339,39 +1341,35 @@ class NonRecordingSpanObserver final: public SpanObserver {
13391341};
13401342
13411343inline kj::Maybe<tracing::SpanContext> SpanParent::toSpanContext () {
1342- KJ_IF_SOME (obs, observer) {
1343- return obs->toSpanContext ();
1344- }
1344+ if (observer != nullptr ) return observer->toSpanContext ();
13451345 return kj::none;
13461346}
13471347
13481348inline tracing::SpanId SpanParent::getSpanId () {
1349- KJ_IF_SOME (obs, observer) {
1350- return obs->getSpanId ();
1351- }
1349+ if (observer != nullptr ) return observer->getSpanId ();
13521350 return tracing::SpanId::nullId;
13531351}
13541352
13551353inline SpanParent SpanParent::fromSpanContext (tracing::SpanContext context) {
1356- return SpanParent (kj::refcounted <NonRecordingSpanObserver>(kj::mv (context)));
1354+ return SpanParent (kj::rc <NonRecordingSpanObserver>(kj::mv (context)));
13571355}
13581356
1359- inline SpanParent::SpanParent (SpanBuilder& builder): observer(mapAddRef( builder.observer)) {}
1357+ inline SpanParent::SpanParent (SpanBuilder& builder): observer(builder.observer.addRef( )) {}
13601358
13611359inline SpanParent SpanParent::addRef () {
1362- return SpanParent (mapAddRef ( observer));
1360+ return SpanParent (observer. addRef ( ));
13631361}
13641362
13651363inline SpanBuilder SpanParent::newChild (
13661364 kj::ConstString operationName, kj::Maybe<kj::Date> startTime) {
1367- return SpanBuilder (observer. map ([](kj::Own<SpanObserver>& obs) { return obs-> newChild (); }),
1368- kj::mv (operationName), startTime);
1365+ if (observer == nullptr ) return nullptr ;
1366+ return SpanBuilder (observer-> newChild (), kj::mv (operationName), startTime);
13691367}
13701368
13711369inline SpanBuilder SpanBuilder::newChild (
13721370 kj::ConstString operationName, kj::Maybe<kj::Date> startTime) {
1373- return SpanBuilder (observer. map ([](kj::Own<SpanObserver>& obs) { return obs-> newChild (); }),
1374- kj::mv (operationName), startTime);
1371+ if (observer == nullptr ) return nullptr ;
1372+ return SpanBuilder (observer-> newChild (), kj::mv (operationName), startTime);
13751373}
13761374
13771375class TraceContext ;
0 commit comments