From 21855ea096a7ba99be0f0249ea5f8f4d8d1c0648 Mon Sep 17 00:00:00 2001 From: Cory Benfield Date: Fri, 17 Jan 2025 14:51:11 +0000 Subject: [PATCH 1/2] Fast-path isolated view for EmbeddedEventLoop Motivation: This patch takes advantage of the fast-path for isolated views on EmbeddedEventLoop, reducing overhead when using EmbeddedEL. Modifications: - Implement the new witnesses in EmbeddedEL Result: EmbeddedEL is faster when using isolated views. --- Sources/NIOEmbedded/Embedded.swift | 29 +++++++++++++++++++++++++++++ 1 file changed, 29 insertions(+) diff --git a/Sources/NIOEmbedded/Embedded.swift b/Sources/NIOEmbedded/Embedded.swift index fbbfb4d6729..b12d547d938 100644 --- a/Sources/NIOEmbedded/Embedded.swift +++ b/Sources/NIOEmbedded/Embedded.swift @@ -355,6 +355,35 @@ public final class EmbeddedEventLoop: EventLoop, CustomStringConvertible { return } + public func _executeIsolatedUnsafeUnchecked(_ task: @escaping () -> Void) { + // Because of the way EmbeddedEL works, we can just delegate this directly + // to execute. + self.execute(task) + } + + public func _submitIsolatedUnsafeUnchecked(_ task: @escaping () throws -> T) -> EventLoopFuture { + // Because of the way EmbeddedEL works, we can delegate this directly to schedule. Note that I didn't + // say submit: we don't have an override of submit here. + self.scheduleTask(deadline: self._now, task).futureResult + } + + @discardableResult + public func _scheduleTaskIsolatedUnsafeUnchecked( + deadline: NIODeadline, + _ task: @escaping () throws -> T + ) -> Scheduled { + // Because of the way EmbeddedEL works, we can delegate this directly to schedule. + self.scheduleTask(deadline: deadline, task) + } + + @discardableResult + public func _scheduleTaskIsolatedUnsafeUnchecked( + in delay: TimeAmount, + _ task: @escaping () throws -> T + ) -> Scheduled { + self.scheduleTask(in: delay, task) + } + deinit { self.checkCorrectThread() precondition(scheduledTasks.isEmpty, "Embedded event loop freed with unexecuted scheduled tasks!") From 8d145b7a522764bb3a8ba6932494122e84c2378c Mon Sep 17 00:00:00 2001 From: Cory Benfield Date: Mon, 20 Jan 2025 16:30:19 +0000 Subject: [PATCH 2/2] Equivalent comments --- Sources/NIOEmbedded/Embedded.swift | 1 + 1 file changed, 1 insertion(+) diff --git a/Sources/NIOEmbedded/Embedded.swift b/Sources/NIOEmbedded/Embedded.swift index b12d547d938..e19caf40a22 100644 --- a/Sources/NIOEmbedded/Embedded.swift +++ b/Sources/NIOEmbedded/Embedded.swift @@ -381,6 +381,7 @@ public final class EmbeddedEventLoop: EventLoop, CustomStringConvertible { in delay: TimeAmount, _ task: @escaping () throws -> T ) -> Scheduled { + // Because of the way EmbeddedEL works, we can delegate this directly to schedule. self.scheduleTask(in: delay, task) }