From: Damjan Jovanovic Subject: [PATCH 5/7] ntdll: implement vm counters on FreeBSD Message-Id: Date: Sun, 31 Oct 2021 17:49:33 +0200 Signed-off-by: Damjan Jovanovic --- dlls/ntdll/unix/process.c | 39 +++++++++++++++++++++++++++++++++++++++ 1 file changed, 39 insertions(+) diff --git a/dlls/ntdll/unix/process.c b/dlls/ntdll/unix/process.c index 10a88db9291..c834ef85c79 100644 --- a/dlls/ntdll/unix/process.c +++ b/dlls/ntdll/unix/process.c @@ -46,6 +46,21 @@ #ifdef HAVE_SYS_WAIT_H # include #endif +#ifdef HAVE_SYS_SYSCTL_H +# include +#endif +#ifdef HAVE_SYS_PARAM_H +# include +#endif +#ifdef HAVE_SYS_QUEUE_H +# include +#endif +#ifdef HAVE_SYS_USER_H +# include +#endif +#ifdef HAVE_LIBPROCSTAT_H +# include +#endif #include #ifdef HAVE_MACH_MACH_H # include @@ -1002,6 +1017,30 @@ void fill_vm_counters( VM_COUNTERS_EX *pvmi, int unix_pid ) fclose(f); } +#elif defined(HAVE_LIBPROCSTAT) + +void fill_vm_counters( VM_COUNTERS_EX *pvmi, int unix_pid ) +{ + struct procstat *pstat; + struct kinfo_proc *kip; + unsigned int proc_count; + + pstat = procstat_open_sysctl(); + if (pstat) + { + kip = procstat_getprocs( pstat, KERN_PROC_PID, unix_pid == -1 ? getpid() : unix_pid, &proc_count ); + if (kip) + { + pvmi->VirtualSize = kip->ki_size; + pvmi->PeakVirtualSize = kip->ki_size; + pvmi->WorkingSetSize = kip->ki_rssize << PAGE_SHIFT; + pvmi->PeakWorkingSetSize = kip->ki_rusage.ru_maxrss * 1024; + procstat_freeprocs( pstat, kip ); + } + procstat_close( pstat ); + } +} + #else void fill_vm_counters( VM_COUNTERS_EX *pvmi, int unix_pid )