RunCatでシステム情報を色々取得してきたので,GPUの状態も取得してみようと思い調べたところ,Objective-Cでやっている先駆者がいたのでSwift化してみました.しかし,自分の開発機のMacBook Proは13インチでGPU積んでないので動作検証できませんでした.
誰か試してみたらコメント欲しいです.
import Cocoa
import IOKit
class ViewController: NSViewController {
override func viewDidLoad() {
super.viewDidLoad()
getGPUPerformance()
}
func getGPUPerformance() {
let dict = IOServiceMatching(kIOAcceleratorClassName)
var iterator = io_iterator_t()
if IOServiceGetMatchingServices(kIOMasterPortDefault, dict, &iterator) == kIOReturnSuccess {
while case let regEntry = IOIteratorNext(iterator), regEntry != 0 {
var services: Unmanaged<CFMutableDictionary>? = nil
if IORegistryEntryCreateCFProperties(regEntry, &services, kCFAllocatorDefault, 0) != kIOReturnSuccess {
IOObjectRelease(regEntry)
continue
}
if
let servicesDict = services?.takeRetainedValue() as? [String : AnyObject],
let ps = servicesDict["PerformanceStatistics"] as? [String : AnyObject],
let gpuCore = ps["GPU Core Utilization"] as? Double,
let freeVram = ps["vramFreeBytes"] as? Double,
let usedVram = ps["vramUsedBytes"] as? Double {
let outpu = String(format: "GPU: %.3f%%, VRAM: %.3f%%",
gpuCore / 10000000.0,
100.0 * (usedVram / (usedVram + freeVram)))
Swift.print(outpu)
}
services?.release()
IOObjectRelease(regEntry)
}
IOObjectRelease(iterator)
}
}
}