+/*******************************************************************************
+ * Copyright (c) 2016, 2017 Association for Decentralized Information Management
+ * in Industry THTH ry.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Semantum Oy - initial API and implementation
+ *******************************************************************************/
+package org.simantics.nativemem.internal.win;
+
+import java.util.Arrays;
+import java.util.List;
+
+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;
+
+ @Override
+ protected List<String> getFieldOrder() {
+ return PROCESS_MEMORY_COUNTERS_EX_FIELDS;
+ }
+
+ private static final List<String> 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);
+
+}
\ No newline at end of file