mirror of
https://github.com/apple/sourcekit-lsp.git
synced 2026-03-06 18:24:36 +01:00
When running in debug, or in continuous integration that is not setup for performance testing, default to not collecting performance metrics to avoid failures due to slow or high-variability tests (default max_stddev = 10% in xctest). Instead, run the measured block once and skip the timing code. This has the nice side effect of speeding up test runs in debug builds.
72 lines
2.0 KiB
Swift
72 lines
2.0 KiB
Swift
//===----------------------------------------------------------------------===//
|
|
//
|
|
// This source file is part of the Swift.org open source project
|
|
//
|
|
// Copyright (c) 2014 - 2018 Apple Inc. and the Swift project authors
|
|
// Licensed under Apache License v2.0 with Runtime Library Exception
|
|
//
|
|
// See https://swift.org/LICENSE.txt for license information
|
|
// See https://swift.org/CONTRIBUTORS.txt for the list of Swift project authors
|
|
//
|
|
//===----------------------------------------------------------------------===//
|
|
|
|
import LanguageServerProtocol
|
|
import LanguageServerProtocolJSONRPC
|
|
import SKTestSupport
|
|
import XCTest
|
|
|
|
class ConnectionPerfTests: PerfTestCase {
|
|
|
|
var connection: TestJSONRPCConnection! = nil
|
|
|
|
override func setUp() {
|
|
connection = TestJSONRPCConnection()
|
|
}
|
|
|
|
override func tearDown() {
|
|
connection.close()
|
|
}
|
|
|
|
func testEcho1() {
|
|
let client = connection.client
|
|
self.measureMetrics([.wallClockTime], automaticallyStartMeasuring: false) {
|
|
let expectation = self.expectation(description: "response received")
|
|
self.startMeasuring()
|
|
_ = client.send(EchoRequest(string: "hello!")) { _ in
|
|
self.stopMeasuring()
|
|
expectation.fulfill()
|
|
}
|
|
|
|
waitForExpectations(timeout: 10)
|
|
}
|
|
}
|
|
|
|
func testEcho100Latency() {
|
|
let client = connection.client
|
|
let sema = DispatchSemaphore(value: 0)
|
|
self.measure {
|
|
for _ in 1...100 {
|
|
_ = client.send(EchoRequest(string: "hello!")) { _ in
|
|
sema.signal()
|
|
}
|
|
XCTAssertEqual(sema.wait(timeout: .now() + .seconds(10)), .success)
|
|
}
|
|
}
|
|
}
|
|
|
|
func testEcho100Throughput() {
|
|
let client = connection.client
|
|
let sema = DispatchSemaphore(value: 0)
|
|
self.measure {
|
|
DispatchQueue.concurrentPerform(iterations: 100, execute: { _ in
|
|
_ = client.send(EchoRequest(string: "hello!")) { _ in
|
|
sema.signal()
|
|
}
|
|
})
|
|
for _ in 1...100 {
|
|
XCTAssertEqual(sema.wait(timeout: .now() + .seconds(10)), .success)
|
|
}
|
|
}
|
|
}
|
|
}
|