This commit is contained in:
shogo4405 2019-08-18 17:47:52 +09:00
parent 21fb7c249b
commit a55baf422d
4 changed files with 14 additions and 62 deletions

View File

@ -1,35 +0,0 @@
import Foundation
public struct MachTaskBasicInfo {
static let count: natural_t = mach_msg_type_number_t(MemoryLayout<mach_task_basic_info>.size) / 4
public let policy: Int32
public let residentSize: UInt64
public let residentSizeMax: UInt64
public let suspendCount: Int32
public let systemTime: time_value_t
public let userTime: time_value_t
public let virtualSize: UInt64
public static func current() -> MachTaskBasicInfo? {
var count: natural_t = MachTaskBasicInfo.count
var info: mach_task_basic_info = mach_task_basic_info()
let result: kern_return_t = withUnsafeMutablePointer(to: &info) {
$0.withMemoryRebound(to: integer_t.self, capacity: 1) {
task_info(mach_task_self_, task_flavor_t(MACH_TASK_BASIC_INFO), $0, &count)
}
}
guard result == KERN_SUCCESS else {
return nil
}
return MachTaskBasicInfo(
policy: info.policy,
residentSize: info.resident_size,
residentSizeMax: info.resident_size_max,
suspendCount: info.suspend_count,
systemTime: info.system_time,
userTime: info.user_time,
virtualSize: info.virtual_size
)
}
}

View File

@ -3,6 +3,7 @@ import Foundation
public struct Usage { public struct Usage {
static let machHost = mach_host_self() static let machHost = mach_host_self()
static let hostCPULoadInfoCount = mach_msg_type_number_t(MemoryLayout<host_cpu_load_info>.size / MemoryLayout<integer_t>.size) static let hostCPULoadInfoCount = mach_msg_type_number_t(MemoryLayout<host_cpu_load_info>.size / MemoryLayout<integer_t>.size)
static let machTaskBasicInfoCount = mach_msg_type_number_t(MemoryLayout<mach_task_basic_info>.size) / 4
private static var loadPrevious = host_cpu_load_info() private static var loadPrevious = host_cpu_load_info()
@ -12,7 +13,6 @@ public struct Usage {
case MiB = 1048576 case MiB = 1048576
} }
public static func cpu() -> (system : Double, user: Double, idle: Double, nice: Double) { public static func cpu() -> (system : Double, user: Double, idle: Double, nice: Double) {
let load = Usage.hostCPULoadInfo() let load = Usage.hostCPULoadInfo()
defer { defer {
@ -37,10 +37,19 @@ public struct Usage {
return info return info
} }
public static func memory(unit: Unit = .none) -> UInt64? { public static func machTaskBasicInfo() -> mach_task_basic_info {
guard let info: MachTaskBasicInfo = MachTaskBasicInfo.current() else { var count: natural_t = Usage.machTaskBasicInfoCount
return nil var info: mach_task_basic_info = mach_task_basic_info()
_ = withUnsafeMutablePointer(to: &info) {
$0.withMemoryRebound(to: integer_t.self, capacity: 1) {
task_info(mach_task_self_, task_flavor_t(MACH_TASK_BASIC_INFO), $0, &count)
}
} }
return info.residentSize / unit.rawValue return info
}
public static func memory(unit: Unit = .none) -> UInt64? {
let info = machTaskBasicInfo()
return info.resident_size / unit.rawValue
} }
} }

View File

@ -1,8 +0,0 @@
import XCTest
import Usage
final class MachTaskBasicInfoTest: XCTestCase {
func testExample() {
let info: MachTaskBasicInfo? = MachTaskBasicInfo.current()
}
}

View File

@ -10,7 +10,6 @@
295632FC1FEE47BD007A8FE0 /* Usage.h in Headers */ = {isa = PBXBuildFile; fileRef = 295632F81FEE47AB007A8FE0 /* Usage.h */; settings = {ATTRIBUTES = (Public, ); }; }; 295632FC1FEE47BD007A8FE0 /* Usage.h in Headers */ = {isa = PBXBuildFile; fileRef = 295632F81FEE47AB007A8FE0 /* Usage.h */; settings = {ATTRIBUTES = (Public, ); }; };
295633231FEE536F007A8FE0 /* Usage.h in Headers */ = {isa = PBXBuildFile; fileRef = 295633151FEE536F007A8FE0 /* Usage.h */; settings = {ATTRIBUTES = (Public, ); }; }; 295633231FEE536F007A8FE0 /* Usage.h in Headers */ = {isa = PBXBuildFile; fileRef = 295633151FEE536F007A8FE0 /* Usage.h */; settings = {ATTRIBUTES = (Public, ); }; };
2956333F1FEE5390007A8FE0 /* Usage.h in Headers */ = {isa = PBXBuildFile; fileRef = 295633311FEE538F007A8FE0 /* Usage.h */; settings = {ATTRIBUTES = (Public, ); }; }; 2956333F1FEE5390007A8FE0 /* Usage.h in Headers */ = {isa = PBXBuildFile; fileRef = 295633311FEE538F007A8FE0 /* Usage.h */; settings = {ATTRIBUTES = (Public, ); }; };
295633531FEE54FB007A8FE0 /* MachTaskBasicInfoTest.swift in Sources */ = {isa = PBXBuildFile; fileRef = 295633521FEE54FB007A8FE0 /* MachTaskBasicInfoTest.swift */; };
2956336D1FEE9756007A8FE0 /* Usage.h in Headers */ = {isa = PBXBuildFile; fileRef = 2956336B1FEE9756007A8FE0 /* Usage.h */; settings = {ATTRIBUTES = (Public, ); }; }; 2956336D1FEE9756007A8FE0 /* Usage.h in Headers */ = {isa = PBXBuildFile; fileRef = 2956336B1FEE9756007A8FE0 /* Usage.h */; settings = {ATTRIBUTES = (Public, ); }; };
2956337A1FEEA0B1007A8FE0 /* UsageTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 295633761FEEA0B1007A8FE0 /* UsageTests.swift */; }; 2956337A1FEEA0B1007A8FE0 /* UsageTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 295633761FEEA0B1007A8FE0 /* UsageTests.swift */; };
2956337D1FEEAA6A007A8FE0 /* LICENSE.md in Resources */ = {isa = PBXBuildFile; fileRef = 2956337B1FEEAA6A007A8FE0 /* LICENSE.md */; }; 2956337D1FEEAA6A007A8FE0 /* LICENSE.md in Resources */ = {isa = PBXBuildFile; fileRef = 2956337B1FEEAA6A007A8FE0 /* LICENSE.md */; };
@ -24,15 +23,10 @@
295D0ED42303EDFF00120A70 /* Usage.Monitor.swift in Sources */ = {isa = PBXBuildFile; fileRef = 29FD1B582301AD580095A0BE /* Usage.Monitor.swift */; }; 295D0ED42303EDFF00120A70 /* Usage.Monitor.swift in Sources */ = {isa = PBXBuildFile; fileRef = 29FD1B582301AD580095A0BE /* Usage.Monitor.swift */; };
295D0ED52303EDFF00120A70 /* Usage.Monitor.swift in Sources */ = {isa = PBXBuildFile; fileRef = 29FD1B582301AD580095A0BE /* Usage.Monitor.swift */; }; 295D0ED52303EDFF00120A70 /* Usage.Monitor.swift in Sources */ = {isa = PBXBuildFile; fileRef = 29FD1B582301AD580095A0BE /* Usage.Monitor.swift */; };
295D0ED62303EE0000120A70 /* Usage.Monitor.swift in Sources */ = {isa = PBXBuildFile; fileRef = 29FD1B582301AD580095A0BE /* Usage.Monitor.swift */; }; 295D0ED62303EE0000120A70 /* Usage.Monitor.swift in Sources */ = {isa = PBXBuildFile; fileRef = 29FD1B582301AD580095A0BE /* Usage.Monitor.swift */; };
295D0EDB2303EE0900120A70 /* MachTaskBasicInfo.swift in Sources */ = {isa = PBXBuildFile; fileRef = 295632D01FEE3B5D007A8FE0 /* MachTaskBasicInfo.swift */; };
295D0EDC2303EE0A00120A70 /* MachTaskBasicInfo.swift in Sources */ = {isa = PBXBuildFile; fileRef = 295632D01FEE3B5D007A8FE0 /* MachTaskBasicInfo.swift */; };
295D0EDD2303EE0A00120A70 /* MachTaskBasicInfo.swift in Sources */ = {isa = PBXBuildFile; fileRef = 295632D01FEE3B5D007A8FE0 /* MachTaskBasicInfo.swift */; };
295D0EDE2303EE0B00120A70 /* MachTaskBasicInfo.swift in Sources */ = {isa = PBXBuildFile; fileRef = 295632D01FEE3B5D007A8FE0 /* MachTaskBasicInfo.swift */; };
295D0EE42303EF0000120A70 /* Usage.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 2956332F1FEE538F007A8FE0 /* Usage.framework */; }; 295D0EE42303EF0000120A70 /* Usage.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 2956332F1FEE538F007A8FE0 /* Usage.framework */; };
/* End PBXBuildFile section */ /* End PBXBuildFile section */
/* Begin PBXFileReference section */ /* Begin PBXFileReference section */
295632D01FEE3B5D007A8FE0 /* MachTaskBasicInfo.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; name = MachTaskBasicInfo.swift; path = Sources/MachTaskBasicInfo.swift; sourceTree = SOURCE_ROOT; };
295632DB1FEE461C007A8FE0 /* Usage.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Usage.framework; sourceTree = BUILT_PRODUCTS_DIR; }; 295632DB1FEE461C007A8FE0 /* Usage.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Usage.framework; sourceTree = BUILT_PRODUCTS_DIR; };
295632F81FEE47AB007A8FE0 /* Usage.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = Usage.h; sourceTree = "<group>"; }; 295632F81FEE47AB007A8FE0 /* Usage.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = Usage.h; sourceTree = "<group>"; };
295632F91FEE47AB007A8FE0 /* Info.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = "<group>"; }; 295632F91FEE47AB007A8FE0 /* Info.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = "<group>"; };
@ -43,7 +37,6 @@
295633311FEE538F007A8FE0 /* Usage.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = Usage.h; sourceTree = "<group>"; }; 295633311FEE538F007A8FE0 /* Usage.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = Usage.h; sourceTree = "<group>"; };
295633321FEE538F007A8FE0 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = "<group>"; }; 295633321FEE538F007A8FE0 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = "<group>"; };
295633501FEE54FB007A8FE0 /* Tests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = Tests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; 295633501FEE54FB007A8FE0 /* Tests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = Tests.xctest; sourceTree = BUILT_PRODUCTS_DIR; };
295633521FEE54FB007A8FE0 /* MachTaskBasicInfoTest.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MachTaskBasicInfoTest.swift; sourceTree = "<group>"; };
295633541FEE54FB007A8FE0 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = "<group>"; }; 295633541FEE54FB007A8FE0 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = "<group>"; };
2956335F1FEE92EF007A8FE0 /* Usage.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; name = Usage.swift; path = Sources/Usage.swift; sourceTree = SOURCE_ROOT; }; 2956335F1FEE92EF007A8FE0 /* Usage.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; name = Usage.swift; path = Sources/Usage.swift; sourceTree = SOURCE_ROOT; };
295633691FEE9756007A8FE0 /* Usage.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Usage.framework; sourceTree = BUILT_PRODUCTS_DIR; }; 295633691FEE9756007A8FE0 /* Usage.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Usage.framework; sourceTree = BUILT_PRODUCTS_DIR; };
@ -116,7 +109,6 @@
295632C81FEE39C8007A8FE0 /* Sources */ = { 295632C81FEE39C8007A8FE0 /* Sources */ = {
isa = PBXGroup; isa = PBXGroup;
children = ( children = (
295632D01FEE3B5D007A8FE0 /* MachTaskBasicInfo.swift */,
29FD1B582301AD580095A0BE /* Usage.Monitor.swift */, 29FD1B582301AD580095A0BE /* Usage.Monitor.swift */,
2956335F1FEE92EF007A8FE0 /* Usage.swift */, 2956335F1FEE92EF007A8FE0 /* Usage.swift */,
); );
@ -165,7 +157,6 @@
isa = PBXGroup; isa = PBXGroup;
children = ( children = (
295633541FEE54FB007A8FE0 /* Info.plist */, 295633541FEE54FB007A8FE0 /* Info.plist */,
295633521FEE54FB007A8FE0 /* MachTaskBasicInfoTest.swift */,
295D0ECC2303ECED00120A70 /* Usage.MonitorTests.swift */, 295D0ECC2303ECED00120A70 /* Usage.MonitorTests.swift */,
295633761FEEA0B1007A8FE0 /* UsageTests.swift */, 295633761FEEA0B1007A8FE0 /* UsageTests.swift */,
); );
@ -419,7 +410,6 @@
isa = PBXSourcesBuildPhase; isa = PBXSourcesBuildPhase;
buildActionMask = 2147483647; buildActionMask = 2147483647;
files = ( files = (
295D0EDE2303EE0B00120A70 /* MachTaskBasicInfo.swift in Sources */,
295D0ED22303EDFA00120A70 /* Usage.swift in Sources */, 295D0ED22303EDFA00120A70 /* Usage.swift in Sources */,
295D0ED62303EE0000120A70 /* Usage.Monitor.swift in Sources */, 295D0ED62303EE0000120A70 /* Usage.Monitor.swift in Sources */,
); );
@ -429,7 +419,6 @@
isa = PBXSourcesBuildPhase; isa = PBXSourcesBuildPhase;
buildActionMask = 2147483647; buildActionMask = 2147483647;
files = ( files = (
295D0EDD2303EE0A00120A70 /* MachTaskBasicInfo.swift in Sources */,
295D0ED12303EDF900120A70 /* Usage.swift in Sources */, 295D0ED12303EDF900120A70 /* Usage.swift in Sources */,
295D0ED52303EDFF00120A70 /* Usage.Monitor.swift in Sources */, 295D0ED52303EDFF00120A70 /* Usage.Monitor.swift in Sources */,
); );
@ -439,7 +428,6 @@
isa = PBXSourcesBuildPhase; isa = PBXSourcesBuildPhase;
buildActionMask = 2147483647; buildActionMask = 2147483647;
files = ( files = (
295D0EDC2303EE0A00120A70 /* MachTaskBasicInfo.swift in Sources */,
295D0ED02303EDF800120A70 /* Usage.swift in Sources */, 295D0ED02303EDF800120A70 /* Usage.swift in Sources */,
295D0ED42303EDFF00120A70 /* Usage.Monitor.swift in Sources */, 295D0ED42303EDFF00120A70 /* Usage.Monitor.swift in Sources */,
); );
@ -451,7 +439,6 @@
files = ( files = (
295D0ECD2303ECED00120A70 /* Usage.MonitorTests.swift in Sources */, 295D0ECD2303ECED00120A70 /* Usage.MonitorTests.swift in Sources */,
2956337A1FEEA0B1007A8FE0 /* UsageTests.swift in Sources */, 2956337A1FEEA0B1007A8FE0 /* UsageTests.swift in Sources */,
295633531FEE54FB007A8FE0 /* MachTaskBasicInfoTest.swift in Sources */,
); );
runOnlyForDeploymentPostprocessing = 0; runOnlyForDeploymentPostprocessing = 0;
}; };
@ -459,7 +446,6 @@
isa = PBXSourcesBuildPhase; isa = PBXSourcesBuildPhase;
buildActionMask = 2147483647; buildActionMask = 2147483647;
files = ( files = (
295D0EDB2303EE0900120A70 /* MachTaskBasicInfo.swift in Sources */,
295D0ECF2303EDF700120A70 /* Usage.swift in Sources */, 295D0ECF2303EDF700120A70 /* Usage.swift in Sources */,
295D0ED32303EDFE00120A70 /* Usage.Monitor.swift in Sources */, 295D0ED32303EDFE00120A70 /* Usage.Monitor.swift in Sources */,
); );