mirror of
https://github.com/apple/swift-nio-extras.git
synced 2025-05-16 09:52:28 +08:00
Motivation: With NIO 2.32.0 we broke the core NIO module up into modules that split apart the POSIX layer and the core abstractions. As a result, this package no longer needs to express a hard dependency on the POSIX layer. Modifications: - Rewrote imports of NIO to NIOCore. - Added NIOEmbedded and NIOPosix imports where necessary in tests. - Extended soundness script to detect NIO imports. - Note that the main modules still depend on NIO, which is necessary for backwards-compatibility reasons. This dependency is unused. Result: No need to use NIOPosix.
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-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 Dispatch
|
|
import NIOCore
|
|
|
|
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), ") })
|
|
}
|