1818#include < workerd/io/compatibility-date.h>
1919#include < workerd/io/features.h>
2020#include < workerd/io/io-context.h>
21+ #include < workerd/io/tracer.h>
2122#include < workerd/jsg/async-context.h>
2223#include < workerd/jsg/ser.h>
2324#include < workerd/jsg/util.h>
@@ -396,7 +397,12 @@ void ServiceWorkerGlobalScope::startScheduled(kj::Date scheduledTime,
396397 KJ_IF_SOME (h, exportedHandler) {
397398 KJ_IF_SOME (f, h.scheduled ) {
398399 auto promise =
399- f (lock, js.alloc <ScheduledController>(event.addRef ()), h.env .addRef (isolate), h.getCtx ());
400+ f (lock, js.alloc <ScheduledController>(event.addRef ()), h.env .addRef (isolate), h.getCtx ())
401+ .then ([&context]() {
402+ KJ_IF_SOME (t, context.getWorkerTracer ()) {
403+ t.setReturn (context.now ());
404+ }
405+ });
400406 event->waitUntil (kj::mv (promise));
401407 } else {
402408 lock.logWarningOnce (
@@ -623,7 +629,9 @@ kj::Promise<void> ServiceWorkerGlobalScope::setHibernatableEventTimeout(
623629 return event;
624630}
625631
626- void ServiceWorkerGlobalScope::sendHibernatableWebSocketMessage (
632+ // TODO(cleanup): the hibernatable websocket handler functions here are largely identical – consider
633+ // folding them.
634+ void ServiceWorkerGlobalScope::sendHibernatableWebSocketMessage (IoContext& context,
627635 kj::OneOf<kj::String, kj::Array<byte>> message,
628636 kj::Maybe<uint32_t > eventTimeoutMs,
629637 kj::String websocketId,
@@ -637,13 +645,19 @@ void ServiceWorkerGlobalScope::sendHibernatableWebSocketMessage(
637645 KJ_IF_SOME (h, exportedHandler) {
638646 KJ_IF_SOME (handler, h.webSocketMessage ) {
639647 event->waitUntil (setHibernatableEventTimeout (
640- handler (lock, kj::mv (websocket), kj::mv (message)), eventTimeoutMs));
648+ handler (lock, kj::mv (websocket), kj::mv (message)), eventTimeoutMs)
649+ .then ([&context]() {
650+ KJ_IF_SOME (t, context.getWorkerTracer ()) {
651+ t.setReturn (context.now ());
652+ }
653+ }));
641654 }
642655 // We want to deliver a message, but if no webSocketMessage handler is exported, we shouldn't fail
643656 }
644657}
645658
646- void ServiceWorkerGlobalScope::sendHibernatableWebSocketClose (HibernatableSocketParams::Close close,
659+ void ServiceWorkerGlobalScope::sendHibernatableWebSocketClose (IoContext& context,
660+ HibernatableSocketParams::Close close,
647661 kj::Maybe<uint32_t > eventTimeoutMs,
648662 kj::String websocketId,
649663 Worker::Lock& lock,
@@ -663,13 +677,19 @@ void ServiceWorkerGlobalScope::sendHibernatableWebSocketClose(HibernatableSocket
663677 KJ_IF_SOME (handler, h.webSocketClose ) {
664678 event->waitUntil (setHibernatableEventTimeout (
665679 handler (lock, kj::mv (websocket), close.code , kj::mv (close.reason ), close.wasClean ),
666- eventTimeoutMs));
680+ eventTimeoutMs)
681+ .then ([&context]() {
682+ KJ_IF_SOME (t, context.getWorkerTracer ()) {
683+ t.setReturn (context.now ());
684+ }
685+ }));
667686 }
668687 // We want to deliver close, but if no webSocketClose handler is exported, we shouldn't fail
669688 }
670689}
671690
672- void ServiceWorkerGlobalScope::sendHibernatableWebSocketError (kj::Exception e,
691+ void ServiceWorkerGlobalScope::sendHibernatableWebSocketError (IoContext& context,
692+ kj::Exception e,
673693 kj::Maybe<uint32_t > eventTimeoutMs,
674694 kj::String websocketId,
675695 Worker::Lock& lock,
@@ -689,7 +709,12 @@ void ServiceWorkerGlobalScope::sendHibernatableWebSocketError(kj::Exception e,
689709 KJ_IF_SOME (h, exportedHandler) {
690710 KJ_IF_SOME (handler, h.webSocketError ) {
691711 event->waitUntil (setHibernatableEventTimeout (
692- handler (js, kj::mv (websocket), js.exceptionToJs (kj::mv (e))), eventTimeoutMs));
712+ handler (js, kj::mv (websocket), js.exceptionToJs (kj::mv (e))), eventTimeoutMs)
713+ .then ([&context]() {
714+ KJ_IF_SOME (t, context.getWorkerTracer ()) {
715+ t.setReturn (context.now ());
716+ }
717+ }));
693718 }
694719 // We want to deliver an error, but if no webSocketError handler is exported, we shouldn't fail
695720 }
0 commit comments