feat(macos): add cpu info
This commit is contained in:
@@ -9,6 +9,11 @@ pub const SystemUptime = struct {
|
|||||||
minutes: i8,
|
minutes: i8,
|
||||||
};
|
};
|
||||||
|
|
||||||
|
pub const CpuInfo = struct {
|
||||||
|
cpu_name: []u8,
|
||||||
|
cpu_cores: i32,
|
||||||
|
};
|
||||||
|
|
||||||
/// Returns the current logged-in uesr's username.
|
/// Returns the current logged-in uesr's username.
|
||||||
/// Uses the environment variable `USER`.
|
/// Uses the environment variable `USER`.
|
||||||
/// The caller is responsible for freeing the allocated memory.
|
/// The caller is responsible for freeing the allocated memory.
|
||||||
@@ -82,3 +87,34 @@ pub fn getShell(allocator: std.mem.Allocator) ![]u8 {
|
|||||||
|
|
||||||
return output;
|
return output;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
pub fn getCpuInfo(allocator: std.mem.Allocator) !CpuInfo {
|
||||||
|
var size: usize = 0;
|
||||||
|
|
||||||
|
// First call to sysctlbyname to get the size of the string
|
||||||
|
if (c_sysctl.sysctlbyname("machdep.cpu.brand_string", null, &size, null, 0) != 0) {
|
||||||
|
return error.FailedToGetCpuNameSize;
|
||||||
|
}
|
||||||
|
|
||||||
|
const cpu_name: []u8 = try allocator.alloc(u8, size);
|
||||||
|
|
||||||
|
// Second call to sysctlbyname to get the CPU name
|
||||||
|
if (c_sysctl.sysctlbyname("machdep.cpu.brand_string", cpu_name.ptr, &size, null, 0) != 0) {
|
||||||
|
allocator.free(cpu_name);
|
||||||
|
return error.FailedToGetCpuName;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Call to sysctlbyname to get the cpu cores
|
||||||
|
var n_cpu: i32 = 0;
|
||||||
|
size = @sizeOf(i32);
|
||||||
|
if (c_sysctl.sysctlbyname("hw.ncpu", &n_cpu, &size, null, 0) != 0) {
|
||||||
|
return error.FailedToGetPhysicalCpuInfo;
|
||||||
|
}
|
||||||
|
|
||||||
|
// TODO: add cpu frequency (find a way to get it even on Apple Silicon)
|
||||||
|
|
||||||
|
return CpuInfo{
|
||||||
|
.cpu_name = cpu_name,
|
||||||
|
.cpu_cores = n_cpu,
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user