Files
element-x-ios/Tools/Sources/Commands/CI/CPUConstraint.swift
T
Mauro 0be5693779 Constrained tests tool implementation + skill (#5873)
* constrained tests tool implementation + skill

* pr suggestions
2026-07-15 12:17:51 +02:00

41 lines
1.3 KiB
Swift
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
import Foundation
/// Saturates the CPU with busy processes for the duration of a test run, approximating
/// a loaded CI runner where timing-sensitive tests are starved of processor time.
final class CPUConstraint {
private var processes = [Process]()
/// 2× the machine's cores is enough to keep the scheduler permanently oversubscribed.
private let taskCount = ProcessInfo.processInfo.processorCount * 2
func start() {
logger.info("\n🐌 Constraining the CPU with \(taskCount) tasks…\n")
for _ in 0..<taskCount {
let process = Process()
process.executableURL = URL(filePath: "/usr/bin/yes")
process.standardOutput = FileHandle.nullDevice
process.standardError = FileHandle.nullDevice
do {
try process.run()
processes.append(process)
} catch {
logger.error("Failed to start a CPU constraining task: \(error)")
}
}
}
func stop() {
guard !processes.isEmpty else { return }
logger.info("\n🐌 Releasing the CPU…\n")
processes.forEach { $0.terminate() }
processes.removeAll()
}
deinit {
stop()
}
}