From 3e056562b360c937b883725f14f3427d5401b6fe Mon Sep 17 00:00:00 2001 From: Serhiy Mytrovtsiy Date: Fri, 10 Jan 2025 22:45:08 +0100 Subject: [PATCH] feat: added CPU frequency for m4 (#2285) --- Kit/helpers.swift | 9 ++- Kit/plugins/SystemKit.swift | 115 ++++++++++++++-------------- Stats/Supporting Files/Info.plist | 2 +- Widgets/Supporting Files/Info.plist | 2 +- 4 files changed, 65 insertions(+), 63 deletions(-) diff --git a/Kit/helpers.swift b/Kit/helpers.swift index cbc829b8..1d3653c5 100644 --- a/Kit/helpers.swift +++ b/Kit/helpers.swift @@ -663,16 +663,21 @@ internal func getIOName(_ entry: io_registry_entry_t) -> String? { return String(cString: UnsafeRawPointer(pointer).assumingMemoryBound(to: CChar.self)) } -internal func convertCFDataToArr(_ data: CFData) -> [Int32] { +internal func convertCFDataToArr(_ data: CFData, _ isM4: Bool = false) -> [Int32] { let length = CFDataGetLength(data) var bytes = [UInt8](repeating: 0, count: length) CFDataGetBytes(data, CFRange(location: 0, length: length), &bytes) + var multiplier: UInt32 = 1000 * 1000 + if isM4 { + multiplier = 1000 + } + var arr: [Int32] = [] var chunks = stride(from: 0, to: bytes.count, by: 8).map { Array(bytes[$0.. String? { @@ -322,7 +277,7 @@ public class SystemKit { cpu.pCores = cores.1 cpu.cores = cores.2 } - if let freq = getFrequencies() { + if let freq = getFrequencies(cpuName: cpu.name ?? "") { cpu.eCoreFrequencies = freq.0 cpu.pCoreFrequencies = freq.1 } @@ -422,10 +377,6 @@ public class SystemKit { gpu.vram = vram } - if let freq = getFrequencies() { - gpu.frequencies = freq.2 - } - list.append(gpu) } } @@ -438,34 +389,31 @@ public class SystemKit { return list } - private func getFrequencies() -> ([Int32], [Int32], [Int32])? { + private func getFrequencies(cpuName: String) -> ([Int32], [Int32])? { var iterator = io_iterator_t() let result = IOServiceGetMatchingServices(kIOMasterPortDefault, IOServiceMatching("AppleARMIODevice"), &iterator) if result != kIOReturnSuccess { print("Error find AppleARMIODevice: " + (String(cString: mach_error_string(result), encoding: String.Encoding.ascii) ?? "unknown error")) return nil } + let isM4: Bool = cpuName.lowercased().contains("m4") var eFreq: [Int32] = [] var pFreq: [Int32] = [] - var gpuFreq: [Int32] = [] while case let child = IOIteratorNext(iterator), child != 0 { defer { IOObjectRelease(child) } guard let name = getIOName(child), name == "pmgr", let props = getIOProperties(child) else { continue } if let data = props.value(forKey: "voltage-states1-sram") { - eFreq = convertCFDataToArr(data as! CFData) + eFreq = convertCFDataToArr(data as! CFData, isM4) } if let data = props.value(forKey: "voltage-states5-sram") { - pFreq = convertCFDataToArr(data as! CFData) - } - if let data = props.value(forKey: "voltage-states9-sram") { - gpuFreq = convertCFDataToArr(data as! CFData) + pFreq = convertCFDataToArr(data as! CFData, isM4) } } - return (eFreq, pFreq, gpuFreq) + return (eFreq, pFreq) } public func getRamInfo() -> ram_s? { @@ -584,6 +532,55 @@ public class SystemKit { return nil } + + private func getPlatform() -> Platform? { + if let name = self.device.info.cpu?.name?.lowercased() { + if name.contains("intel") { + return .intel + } else if name.contains("m1") { + if name.contains("pro") { + return .m1Pro + } else if name.contains("max") { + return .m1Max + } else if name.contains("ultra") { + return .m1Ultra + } else { + return .m1 + } + } else if name.contains("m2") { + if name.contains("pro") { + return .m2Pro + } else if name.contains("max") { + return .m2Max + } else if name.contains("ultra") { + return .m2Ultra + } else { + return .m2 + } + } else if name.contains("m3") { + if name.contains("pro") { + return .m3Pro + } else if name.contains("max") { + return .m3Max + } else if name.contains("ultra") { + return .m3Ultra + } else { + return .m3 + } + } else if name.contains("m4") { + if name.contains("pro") { + return .m4Pro + } else if name.contains("max") { + return .m4Max + } else if name.contains("ultra") { + return .m4Ultra + } else { + return .m4 + } + } + } + return nil + } } let deviceDict: [String: model_s] = [ diff --git a/Stats/Supporting Files/Info.plist b/Stats/Supporting Files/Info.plist index 6d217883..f6bb4bdb 100755 --- a/Stats/Supporting Files/Info.plist +++ b/Stats/Supporting Files/Info.plist @@ -17,7 +17,7 @@ CFBundleShortVersionString $(MARKETING_VERSION) CFBundleVersion - 651 + 656 Description Simple macOS system monitor in your menu bar LSApplicationCategoryType diff --git a/Widgets/Supporting Files/Info.plist b/Widgets/Supporting Files/Info.plist index b29a5fd3..872f3ef4 100644 --- a/Widgets/Supporting Files/Info.plist +++ b/Widgets/Supporting Files/Info.plist @@ -13,7 +13,7 @@ CFBundleShortVersionString 2.11.23 CFBundleVersion - 651 + 656 NSExtension NSExtensionPointIdentifier