mirror of
https://github.com/morgan9e/macos-stats
synced 2026-04-14 00:04:15 +09:00
fix: fixed wrong RAM stats (#243)
This commit is contained in:
@@ -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)
|
||||
])
|
||||
|
||||
@@ -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)
|
||||
])
|
||||
|
||||
@@ -48,11 +48,14 @@ internal class UsageReader: Reader<RAM_Usage> {
|
||||
|
||||
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<uint>.size
|
||||
@@ -64,15 +67,18 @@ internal class UsageReader: Reader<RAM_Usage> {
|
||||
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,
|
||||
|
||||
|
||||
Reference in New Issue
Block a user