mirror of
https://github.com/apple/swift-nio-extras.git
synced 2025-05-17 10:47:43 +08:00
Motivation: It's useful to know the overhead we could be adding by including the PCAP handler. Modifications: Add a new executable based on the NIO performance testing executable. Result: There is a new executable which runs a short test of sending and receiving data through the HTTP/1 handler using multiple eventloops and showing three options. 1) Vanilla 2) With in memory PCAP never written to disk 3) With a disk based PCAP.
40 lines
1.3 KiB
Swift
40 lines
1.3 KiB
Swift
//===----------------------------------------------------------------------===//
|
|
//
|
|
// This source file is part of the SwiftNIO open source project
|
|
//
|
|
// Copyright (c) 2020 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 Dispatch
|
|
import NIO
|
|
|
|
public func measure(_ fn: () throws -> Int) rethrows -> [Double] {
|
|
func measureOne(_ fn: () throws -> Int) rethrows -> Double {
|
|
let start = DispatchTime.now().uptimeNanoseconds
|
|
_ = try fn()
|
|
let end = DispatchTime.now().uptimeNanoseconds
|
|
return Double(end - start) / Double(TimeAmount.seconds(1).nanoseconds)
|
|
}
|
|
|
|
_ = try measureOne(fn) /* pre-heat and throw away */
|
|
var measurements = Array(repeating: 0.0, count: 10)
|
|
for i in 0..<10 {
|
|
measurements[i] = try measureOne(fn)
|
|
}
|
|
|
|
return measurements
|
|
}
|
|
|
|
public func measureAndPrint(desc: String, fn: () throws -> Int) rethrows -> Void {
|
|
print("measuring\(warning): \(desc): ", terminator: "")
|
|
let measurements = try measure(fn)
|
|
print(measurements.reduce(into: "") { $0.append("\($1), ") })
|
|
}
|