package org.simantics.nativemem.internal; import java.util.Arrays; import java.util.List; import org.simantics.nativemem.ProcessMemoryCounters; import com.sun.jna.Native; import com.sun.jna.Structure; import com.sun.jna.platform.win32.WinNT.HANDLE; import com.sun.jna.win32.StdCallLibrary; public interface Psapi64 extends StdCallLibrary { Psapi64 INSTANCE = (Psapi64) Native.loadLibrary("Psapi", Psapi64.class); /* * https://msdn.microsoft.com/en-us/library/windows/desktop/ms684874%28v=vs.85%29.aspx */ public static class PROCESS_MEMORY_COUNTERS_EX extends Structure { public int cb; public int PageFaultCount; public long PeakWorkingSetSize; public long WorkingSetSize; public long QuotaPeakPagedPoolUsage; public long QuotaPagedPoolUsage; public long QuotaPeakNonPagedPoolUsage; public long QuotaNonPagedPoolUsage; public long PagefileUsage; public long PeakPagefileUsage; public long PrivateUsage; @SuppressWarnings("rawtypes") @Override protected List getFieldOrder() { return PROCESS_MEMORY_COUNTERS_EX_FIELDS; } private static final List PROCESS_MEMORY_COUNTERS_EX_FIELDS = Arrays.asList(new String[] { "cb", "PageFaultCount", "PeakWorkingSetSize", "WorkingSetSize", "QuotaPeakPagedPoolUsage", "QuotaPagedPoolUsage", "QuotaPeakNonPagedPoolUsage", "QuotaNonPagedPoolUsage", "PagefileUsage", "PeakPagefileUsage", "PrivateUsage" }); public void writeTo(ProcessMemoryCounters to) { to.PageFaultCount = PageFaultCount; to.PeakWorkingSetSize = PeakWorkingSetSize; to.WorkingSetSize = WorkingSetSize; to.QuotaPeakPagedPoolUsage = QuotaPeakPagedPoolUsage; to.QuotaPagedPoolUsage = QuotaPagedPoolUsage; to.QuotaPeakNonPagedPoolUsage = QuotaPeakNonPagedPoolUsage; to.QuotaNonPagedPoolUsage = QuotaNonPagedPoolUsage; to.PagefileUsage = PagefileUsage; to.PeakPagefileUsage = PeakPagefileUsage; to.PrivateUsage = PrivateUsage; } } /* * https://msdn.microsoft.com/en-us/library/windows/desktop/ms683219%28v=vs.85%29.aspx */ boolean GetProcessMemoryInfo(HANDLE Process, PROCESS_MEMORY_COUNTERS_EX ppsmemCounters, int cb); }