]> gerrit.simantics Code Review - simantics/platform.git/blobdiff - bundles/org.simantics.nativemem/src/org/simantics/nativemem/NativeMem.java
Tycho compilation changes for SVN version also.
[simantics/platform.git] / bundles / org.simantics.nativemem / src / org / simantics / nativemem / NativeMem.java
diff --git a/bundles/org.simantics.nativemem/src/org/simantics/nativemem/NativeMem.java b/bundles/org.simantics.nativemem/src/org/simantics/nativemem/NativeMem.java
new file mode 100644 (file)
index 0000000..cfccc21
--- /dev/null
@@ -0,0 +1,56 @@
+package org.simantics.nativemem;\r
+\r
+import org.simantics.nativemem.internal.Arch;\r
+import org.simantics.nativemem.internal.OS;\r
+import org.simantics.nativemem.internal.Psapi32;\r
+import org.simantics.nativemem.internal.Psapi64;\r
+\r
+import com.sun.jna.platform.win32.Kernel32;\r
+import com.sun.jna.platform.win32.WinNT.HANDLE;\r
+\r
+\r
+public class NativeMem {\r
+\r
+    /**\r
+     * @param out\r
+     *            the structure to write the result into or <code>null</code> to\r
+     *            create a new structure\r
+     * @return the result structure\r
+     */\r
+    public static ProcessMemoryCounters getMemoryCounters(ProcessMemoryCounters out) {\r
+        if (out == null)\r
+            out = new ProcessMemoryCounters();\r
+\r
+        OS os = OS.calculate();\r
+        Arch arch = Arch.calculate();\r
+        switch (os) {\r
+        case WINDOWS: {\r
+            HANDLE proc = Kernel32.INSTANCE.GetCurrentProcess();\r
+            switch (arch) {\r
+            case X86: {\r
+                Psapi32.PROCESS_MEMORY_COUNTERS_EX pmem = new Psapi32.PROCESS_MEMORY_COUNTERS_EX();\r
+                boolean ok = Psapi32.INSTANCE.GetProcessMemoryInfo(proc, pmem, pmem.size());\r
+                if (ok)\r
+                    pmem.writeTo(out);\r
+                return out;\r
+            }\r
+\r
+            case X86_64: {\r
+                Psapi64.PROCESS_MEMORY_COUNTERS_EX pmem = new Psapi64.PROCESS_MEMORY_COUNTERS_EX();\r
+                boolean ok = Psapi64.INSTANCE.GetProcessMemoryInfo(proc, pmem, pmem.size());\r
+                if (ok)\r
+                    pmem.writeTo(out);\r
+                return out;\r
+            }\r
+\r
+            default:\r
+                throw new UnsupportedOperationException("Architecture " + arch + " not supported on operating system " + os);\r
+            }\r
+        }\r
+\r
+        default:\r
+            throw new UnsupportedOperationException("Operating system " + os + " not supported");\r
+        }\r
+    }\r
+\r
+}
\ No newline at end of file