From a8ea749afb2991b84756f36067d7bf1bd91d8b1b Mon Sep 17 00:00:00 2001 From: Serhiy Mytrovtsiy Date: Fri, 3 Sep 2021 20:02:00 +0200 Subject: [PATCH] feat: added average values for the CPU/GPU/SOC sensors (Apple Silicon) --- Modules/Sensors/readers.swift | 72 +++++++++++++++++++++++++------ Stats/Supporting Files/Info.plist | 2 +- 2 files changed, 60 insertions(+), 14 deletions(-) diff --git a/Modules/Sensors/readers.swift b/Modules/Sensors/readers.swift index f0c67a1c..0b7253a6 100644 --- a/Modules/Sensors/readers.swift +++ b/Modules/Sensors/readers.swift @@ -132,15 +132,17 @@ internal class AppleSilicon_SensorsReader: SensorsReader { return s.value < 100 && s.value >= 0 default: return true } - }) + }).sorted { $0.key.lowercased() < $1.key.lowercased() } - self.list = self.list.sorted { $0.name.lowercased() < $1.name.lowercased() } + self.calculateAverage() } public override func read() { for type in types { self.fetch(type: type) } + + self.calculateAverage() self.callback(self.list) } @@ -182,17 +184,7 @@ internal class AppleSilicon_SensorsReader: SensorsReader { if let list = AppleSiliconSensors(page, usage, eventType) { list.forEach { (key, value) in if let name = key as? String, let value = value as? Double { - if let idx = self.list.firstIndex(where: { $0.name == name }) { - self.list[idx].value = value - } else { - self.list.append(Sensor( - key: name, - name: name, - value: value, - group: .system, - type: type - )) - } + self.upsert(key: name, value: value, type: type) } } } @@ -208,4 +200,58 @@ internal class AppleSilicon_SensorsReader: SensorsReader { return dict.mutableCopy() as! NSMutableDictionary } + + private func upsert(key: String, value: Double, type: SensorType, group: SensorGroup = .system, prepend: Bool = false) { + if let idx = self.list.firstIndex(where: { $0.name == key }) { + self.list[idx].value = value + } else { + let s = Sensor( + key: key, + name: key, + value: value, + group: group, + type: type + ) + + if prepend { + self.list.insert(s, at: 0) + } else { + self.list.append(s) + } + } + } + + private func calculateAverage() { + let cpuSensors = self.list.filter({ $0.key.hasPrefix("pACC MTR Temp") || $0.key.hasPrefix("eACC MTR Temp") }).map{ $0.value } + let gpuSensors = self.list.filter({ $0.key.hasPrefix("GPU MTR Temp") }).map{ $0.value } + let socSensors = self.list.filter({ $0.key.hasPrefix("SOC MTR Temp") }).map{ $0.value } + + if !socSensors.isEmpty { + self.upsert( + key: "Average SOC", + value: socSensors.reduce(0, +) / Double(socSensors.count), + type: .temperature, + group: .system, + prepend: true + ) + } + if !gpuSensors.isEmpty { + self.upsert( + key: "Average GPU", + value: gpuSensors.reduce(0, +) / Double(gpuSensors.count), + type: .temperature, + group: .GPU, + prepend: true + ) + } + if !cpuSensors.isEmpty { + self.upsert( + key: "Average CPU", + value: cpuSensors.reduce(0, +) / Double(cpuSensors.count), + type: .temperature, + group: .CPU, + prepend: true + ) + } + } } diff --git a/Stats/Supporting Files/Info.plist b/Stats/Supporting Files/Info.plist index 32ec4ebe..93271f46 100755 --- a/Stats/Supporting Files/Info.plist +++ b/Stats/Supporting Files/Info.plist @@ -17,7 +17,7 @@ CFBundleShortVersionString $(MARKETING_VERSION) CFBundleVersion - 300 + 303 Description Simple macOS system monitor in your menu bar LSApplicationCategoryType