From 2f5af6c9721a125f3308b55f5a8059d62e5d2ec7 Mon Sep 17 00:00:00 2001 From: xEgoist Date: Thu, 23 Mar 2023 06:13:26 -0500 Subject: [PATCH] Refactored GetProcessMemoryInfo to return `VM_COUNTERS` This change allows the function to return the process memory info directly instead of copying the result of the underlying Nt function. --- lib/std/child_process.zig | 6 ++---- lib/std/os/windows.zig | 17 ++--------------- 2 files changed, 4 insertions(+), 19 deletions(-) diff --git a/lib/std/child_process.zig b/lib/std/child_process.zig index 13fd40d982c223e0e7c19797838569586b8fa2a6..ca447b068df7528a5366c125f55118e34ce37dcf 100644 --- a/lib/std/child_process.zig +++ b/lib/std/child_process.zig @@ -112,7 +112,7 @@ pub const ChildProcess = struct { const rusage_init = switch (builtin.os.tag) { .linux => @as(?std.os.rusage, null), - .windows => @as(?windows.PROCESS_MEMORY_COUNTERS, null), + .windows => @as(?windows.VM_COUNTERS, null), else => {}, }; }; @@ -374,9 +374,7 @@ pub const ChildProcess = struct { }); if (self.request_resource_usage_statistics) { - var pmc: windows.PROCESS_MEMORY_COUNTERS = undefined; - try windows.GetProcessMemoryInfo(self.id, &pmc); - self.resource_usage_statistics.rusage = pmc; + self.resource_usage_statistics.rusage = try windows.GetProcessMemoryInfo(self.id); } os.close(self.id); diff --git a/lib/std/os/windows.zig b/lib/std/os/windows.zig index 27f2ddb316066cd605bca1a7dfa6631800c87e42..fe0a68a13a064b744814d6a83f264d9c81cf8c16 100644 --- a/lib/std/os/windows.zig +++ b/lib/std/os/windows.zig @@ -3994,24 +3994,11 @@ pub const GetProcessMemoryInfoError = error{ Unexpected, }; -pub fn GetProcessMemoryInfo(hProcess: HANDLE, out: *PROCESS_MEMORY_COUNTERS) GetProcessMemoryInfoError!void { +pub fn GetProcessMemoryInfo(hProcess: HANDLE) GetProcessMemoryInfoError!VM_COUNTERS { var vmc: VM_COUNTERS = undefined; const rc = ntdll.NtQueryInformationProcess(hProcess, .ProcessVmCounters, &vmc, @sizeOf(VM_COUNTERS), null); switch (rc) { - .SUCCESS => { - out.* = PROCESS_MEMORY_COUNTERS{ - .cb = @sizeOf(PROCESS_MEMORY_COUNTERS), - .PageFaultCount = vmc.PageFaultCount, - .PeakWorkingSetSize = vmc.PeakWorkingSetSize, - .WorkingSetSize = vmc.WorkingSetSize, - .QuotaPeakPagedPoolUsage = vmc.QuotaPeakPagedPoolUsage, - .QuotaPagedPoolUsage = vmc.QuotaPagedPoolUsage, - .QuotaPeakNonPagedPoolUsage = vmc.QuotaPeakNonPagedPoolUsage, - .QuotaNonPagedPoolUsage = vmc.QuotaNonPagedPoolUsage, - .PagefileUsage = vmc.PagefileUsage, - .PeakPagefileUsage = vmc.PeakPagefileUsage, - }; - }, + .SUCCESS => return vmc, .ACCESS_DENIED => return error.AccessDenied, .INVALID_HANDLE => return error.InvalidHandle, .INVALID_PARAMETER => unreachable, -- 2.54.0