]> gerrit.simantics Code Review - simantics/platform.git/blobdiff - bundles/org.simantics.nativemem/src/org/simantics/nativemem/internal/win/Psapi32.java
Rudimentary Linux and MacOSX support for org.simantics.nativemem
[simantics/platform.git] / bundles / org.simantics.nativemem / src / org / simantics / nativemem / internal / win / Psapi32.java
diff --git a/bundles/org.simantics.nativemem/src/org/simantics/nativemem/internal/win/Psapi32.java b/bundles/org.simantics.nativemem/src/org/simantics/nativemem/internal/win/Psapi32.java
new file mode 100644 (file)
index 0000000..a60b893
--- /dev/null
@@ -0,0 +1,75 @@
+/*******************************************************************************
+ * 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 Psapi32 extends StdCallLibrary {
+
+    Psapi32 INSTANCE = (Psapi32) Native.loadLibrary("Psapi", Psapi32.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 int PeakWorkingSetSize;
+        public int WorkingSetSize;
+        public int QuotaPeakPagedPoolUsage;
+        public int QuotaPagedPoolUsage;
+        public int QuotaPeakNonPagedPoolUsage;
+        public int QuotaNonPagedPoolUsage;
+        public int PagefileUsage;
+        public int PeakPagefileUsage;
+        public int PrivateUsage;
+
+        @Override
+        protected List<String> getFieldOrder() {
+            return PROCESS_MEMORY_COUNTERS_EX_FIELDS;
+        }
+
+        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