fix: removed the old way to read the disk capacity because of the very high CPU impact (revert of 0e4df5d)

This commit is contained in:
Serhiy Mytrovtsiy
2023-04-27 17:44:37 +02:00
parent 9403de9bc6
commit d810915e54
2 changed files with 10 additions and 44 deletions

View File

@@ -37,8 +37,8 @@ internal class CapacityReader: Reader<Disks> {
public override func read() {
let keys: [URLResourceKey] = [.volumeNameKey]
let removableState = Store.shared.bool(key: "Disk_removable", defaultValue: false)
let paths = FileManager.default.mountedVolumeURLs(includingResourceValuesForKeys: keys)!
let removableState = Store.shared.bool(key: "Disk_removable", defaultValue: false)
let paths = FileManager.default.mountedVolumeURLs(includingResourceValuesForKeys: keys, options: [.skipHiddenVolumes])!
guard let session = DASessionCreate(kCFAllocatorDefault) else {
error("cannot create main DASessionCreate()", log: self.log)
@@ -61,9 +61,7 @@ internal class CapacityReader: Reader<Disks> {
if let path = d.path {
self.list.updateFreeSize(idx, newValue: self.freeDiskSpaceInBytes(path))
if let smart = self.getSMARTDetails(for: BSDName) {
self.list.updateSMARTData(idx, smart: smart)
}
self.list.updateSMARTData(idx, smart: self.getSMARTDetails(for: BSDName))
}
continue
@@ -74,9 +72,7 @@ internal class CapacityReader: Reader<Disks> {
d.free = self.freeDiskSpaceInBytes(path)
d.size = self.totalDiskSpaceInBytes(path)
}
if let smart = self.getSMARTDetails(for: BSDName) {
d.smart = smart
}
d.smart = self.getSMARTDetails(for: BSDName)
self.list.append(d)
self.list.sort()
}
@@ -95,24 +91,13 @@ internal class CapacityReader: Reader<Disks> {
}
private func freeDiskSpaceInBytes(_ path: URL) -> Int64 {
do {
if let url = URL(string: path.absoluteString) {
let values = try url.resourceValues(forKeys: [.volumeAvailableCapacityForImportantUsageKey])
if let capacity = values.volumeAvailableCapacityForImportantUsage, capacity != 0 {
return capacity
}
}
} catch let err {
error("error retrieving free space #1: \(err.localizedDescription)", log: self.log)
}
do {
let systemAttributes = try FileManager.default.attributesOfFileSystem(forPath: path.path)
if let freeSpace = (systemAttributes[FileAttributeKey.systemFreeSize] as? NSNumber)?.int64Value {
return freeSpace
}
} catch let err {
error("error retrieving free space #2: \(err.localizedDescription)", log: self.log)
error("error retrieving free space: \(err.localizedDescription)", log: self.log)
}
return 0
@@ -125,18 +110,7 @@ internal class CapacityReader: Reader<Disks> {
return totalSpace
}
} catch let err {
error("error retrieving total space #2: \(err.localizedDescription)", log: self.log)
}
do {
if let url = URL(string: path.absoluteString) {
let values = try url.resourceValues(forKeys: [.volumeTotalCapacityKey])
if let space = values.volumeTotalCapacity, space != 0 {
return Int64(space)
}
}
} catch let err {
error("error retrieving total space #1: \(err.localizedDescription)", log: self.log)
error("error retrieving total space: \(err.localizedDescription)", log: self.log)
}
return 0
@@ -207,7 +181,7 @@ internal class ActivityReader: Reader<Disks> {
}
override func setup() {
setInterval(1)
self.setInterval(1)
}
public override func read() {
@@ -390,12 +364,11 @@ public class ProcessReader: Reader<[Disk_process]> {
public override func setup() {
self.popup = true
self.setInterval(1)
}
public override func read() {
guard self.numberOfProcesses != 0 else { return }
guard let output = runProcess(path: "/bin/ps", args: ["-Aceo pid,args", "-r"]) else { return }
guard self.numberOfProcesses != 0, let output = runProcess(path: "/bin/ps", args: ["-Aceo pid,args", "-r"]) else { return }
var processes: [Disk_process] = []
output.enumerateLines { (line, _) -> Void in

View File

@@ -146,14 +146,7 @@ internal class Settings: NSStackView, Settings_v {
}
@objc private func toggleRemovable(_ sender: NSControl) {
var state: NSControl.StateValue? = nil
if #available(OSX 10.15, *) {
state = sender is NSSwitch ? (sender as! NSSwitch).state: nil
} else {
state = sender is NSButton ? (sender as! NSButton).state: nil
}
self.removableState = state! == .on ? true : false
self.removableState = controlState(sender)
Store.shared.set(key: "\(Disk.name)_removable", value: self.removableState)
self.callback()
}