diff --git a/Modules/RAM/main.swift b/Modules/RAM/main.swift index 7fc6d8c5..2d9d4f65 100644 --- a/Modules/RAM/main.swift +++ b/Modules/RAM/main.swift @@ -14,15 +14,18 @@ import StatsKit import ModuleKit public struct RAM_Usage: value_t { + var total: Double + var used: Double + var free: Double + var active: Double var inactive: Double var wired: Double var compressed: Double - var usage: Double - var total: Double - var used: Double - var free: Double + var app: Double + var cache: Double + var pressure: Double var pressureLevel: Int var swap: Swap @@ -32,6 +35,12 @@ public struct RAM_Usage: value_t { return self.usage } } + + public var usage: Double { + get { + return Double((self.total - self.free) / self.total) + } + } } public struct Swap { @@ -114,7 +123,7 @@ public class RAM: Module { if let widget = self.widget as? PieChart { let total: Double = value.total widget.setValue([ - circle_segment(value: value.active/total, color: NSColor.systemBlue), + circle_segment(value: value.app/total, color: NSColor.systemBlue), circle_segment(value: value.wired/total, color: NSColor.systemOrange), circle_segment(value: value.compressed/total, color: NSColor.systemPink) ]) diff --git a/Modules/RAM/popup.swift b/Modules/RAM/popup.swift index bfab6ecd..83b56893 100644 --- a/Modules/RAM/popup.swift +++ b/Modules/RAM/popup.swift @@ -27,7 +27,7 @@ internal class Popup: NSView, Popup_p { private var usedField: NSTextField? = nil private var freeField: NSTextField? = nil - private var activeField: NSTextField? = nil + private var appField: NSTextField? = nil private var inactiveField: NSTextField? = nil private var wiredField: NSTextField? = nil private var compressedField: NSTextField? = nil @@ -160,7 +160,7 @@ internal class Popup: NSView, Popup_p { let container: NSView = NSView(frame: NSRect(x: 0, y: 0, width: self.frame.width, height: separator.frame.origin.y)) self.usedField = PopupRow(container, n: 5, title: "\(LocalizedString("Used")):", value: "").1 - self.activeField = PopupWithColorRow(container, color: NSColor.systemBlue, n: 4, title: "\(LocalizedString("App")):", value: "") + self.appField = PopupWithColorRow(container, color: NSColor.systemBlue, n: 4, title: "\(LocalizedString("App")):", value: "") self.wiredField = PopupWithColorRow(container, color: NSColor.systemOrange, n: 3, title: "\(LocalizedString("Wired")):", value: "") self.compressedField = PopupWithColorRow(container, color: NSColor.systemPink, n: 2, title: "\(LocalizedString("Compressed")):", value: "") self.freeField = PopupWithColorRow(container, color: NSColor.lightGray.withAlphaComponent(0.5), n: 1, title: "\(LocalizedString("Free")):", value: "") @@ -213,18 +213,18 @@ internal class Popup: NSView, Popup_p { public func loadCallback(_ value: RAM_Usage) { DispatchQueue.main.async(execute: { if (self.window?.isVisible ?? false) || !self.initialized { - self.activeField?.stringValue = Units(bytes: Int64(value.active)).getReadableMemory() + self.appField?.stringValue = Units(bytes: Int64(value.app)).getReadableMemory() self.inactiveField?.stringValue = Units(bytes: Int64(value.inactive)).getReadableMemory() self.wiredField?.stringValue = Units(bytes: Int64(value.wired)).getReadableMemory() self.compressedField?.stringValue = Units(bytes: Int64(value.compressed)).getReadableMemory() - self.swapField?.stringValue = Units(bytes: Int64(value.swap.free)).getReadableMemory() + self.swapField?.stringValue = Units(bytes: Int64(value.swap.used)).getReadableMemory() self.usedField?.stringValue = Units(bytes: Int64(value.used)).getReadableMemory() self.freeField?.stringValue = Units(bytes: Int64(value.free)).getReadableMemory() self.circle?.setValue(value.usage) self.circle?.setSegments([ - circle_segment(value: value.active/value.total, color: NSColor.systemBlue), + circle_segment(value: value.app/value.total, color: NSColor.systemBlue), circle_segment(value: value.wired/value.total, color: NSColor.systemOrange), circle_segment(value: value.compressed/value.total, color: NSColor.systemPink) ]) diff --git a/Modules/RAM/readers.swift b/Modules/RAM/readers.swift index e99f24dc..ec3da090 100644 --- a/Modules/RAM/readers.swift +++ b/Modules/RAM/readers.swift @@ -48,11 +48,14 @@ internal class UsageReader: Reader { if result == KERN_SUCCESS { let active = Double(stats.active_count) * Double(vm_page_size) + let speculative = Double(stats.speculative_count) * Double(vm_page_size) let inactive = Double(stats.inactive_count) * Double(vm_page_size) let wired = Double(stats.wire_count) * Double(vm_page_size) let compressed = Double(stats.compressor_page_count) * Double(vm_page_size) + let purgeable = Double(stats.purgeable_count) * Double(vm_page_size) + let external = Double(stats.external_page_count) * Double(vm_page_size) - let used = active + wired + compressed + let used = active + inactive + speculative + wired + compressed - purgeable - external let free = self.totalSize - used var int_size: size_t = MemoryLayout.size @@ -64,15 +67,18 @@ internal class UsageReader: Reader { sysctlbyname("vm.swapusage", &swap, &string_size, nil, 0) self.callback(RAM_Usage( + total: self.totalSize, + used: used, + free: free, + active: active, inactive: inactive, wired: wired, compressed: compressed, - usage: Double((self.totalSize - free) / self.totalSize), - total: Double(self.totalSize), - used: Double(used), - free: Double(free), + app: used - wired - compressed, + cache: purgeable + external, + pressure: 100.0 * (wired + compressed) / self.totalSize, pressureLevel: pressureLevel,