mirror of
https://github.com/apple/swift-nio.git
synced 2026-05-20 20:30:36 +00:00
Motivation: As we've largely completed our move to split out our core abstractions, we now have an opportunity to clean up our dependencies and imports. We should arrange for everything to only import NIO if it actually needs it, and to correctly express dependencies on NIOCore and NIOEmbedded where they exist. We aren't yet splitting out tests that only test functionality in NIOCore, that will follow in a separate patch. Modifications: - Fixed up imports - Made sure our protocols only require NIOCore. Result: Better expression of dependencies. Co-authored-by: George Barnett <gbarnett@apple.com>
55 lines
1.6 KiB
Swift
55 lines
1.6 KiB
Swift
//===----------------------------------------------------------------------===//
|
|
//
|
|
// This source file is part of the SwiftNIO open source project
|
|
//
|
|
// Copyright (c) 2021 Apple Inc. and the SwiftNIO project authors
|
|
// Licensed under Apache License v2.0
|
|
//
|
|
// See LICENSE.txt for license information
|
|
// See CONTRIBUTORS.txt for the list of SwiftNIO project authors
|
|
//
|
|
// SPDX-License-Identifier: Apache-2.0
|
|
//
|
|
//===----------------------------------------------------------------------===//
|
|
import NIOCore
|
|
import NIOEmbedded
|
|
|
|
final class ByteToMessageDecoderDecodeManySmallsBenchmark: Benchmark {
|
|
private let iterations: Int
|
|
private let buffer: ByteBuffer
|
|
private let channel: EmbeddedChannel
|
|
|
|
init(iterations: Int, bufferSize: Int) {
|
|
self.iterations = iterations
|
|
self.buffer = ByteBuffer(repeating: 0, count: bufferSize)
|
|
self.channel = EmbeddedChannel(handler: ByteToMessageHandler(Decoder()))
|
|
}
|
|
|
|
func setUp() throws {
|
|
try self.channel.connect(to: .init(ipAddress: "1.2.3.4", port: 5)).wait()
|
|
}
|
|
|
|
func tearDown() {
|
|
precondition(try! self.channel.finish().isClean)
|
|
}
|
|
|
|
func run() -> Int {
|
|
for _ in 1...self.iterations {
|
|
try! self.channel.writeInbound(self.buffer)
|
|
}
|
|
return Int(self.buffer.readableBytes)
|
|
}
|
|
|
|
struct Decoder: ByteToMessageDecoder {
|
|
typealias InboundOut = Never
|
|
|
|
func decode(context: ChannelHandlerContext, buffer: inout ByteBuffer) throws -> DecodingState {
|
|
if buffer.readSlice(length: 16) == nil {
|
|
return .needMoreData
|
|
} else {
|
|
return .continue
|
|
}
|
|
}
|
|
}
|
|
}
|