]> gerrit.simantics Code Review - simantics/platform.git/blob - bundles/org.simantics.nativemem/src/org/simantics/nativemem/NativeMem.java
migrated to svn revision 33108
[simantics/platform.git] / bundles / org.simantics.nativemem / src / org / simantics / nativemem / NativeMem.java
1 package org.simantics.nativemem;\r
2 \r
3 import org.simantics.nativemem.internal.Arch;\r
4 import org.simantics.nativemem.internal.OS;\r
5 import org.simantics.nativemem.internal.Psapi32;\r
6 import org.simantics.nativemem.internal.Psapi64;\r
7 \r
8 import com.sun.jna.platform.win32.Kernel32;\r
9 import com.sun.jna.platform.win32.WinNT.HANDLE;\r
10 \r
11 \r
12 public class NativeMem {\r
13 \r
14     /**\r
15      * @param out\r
16      *            the structure to write the result into or <code>null</code> to\r
17      *            create a new structure\r
18      * @return the result structure\r
19      */\r
20     public static ProcessMemoryCounters getMemoryCounters(ProcessMemoryCounters out) {\r
21         if (out == null)\r
22             out = new ProcessMemoryCounters();\r
23 \r
24         OS os = OS.calculate();\r
25         Arch arch = Arch.calculate();\r
26         switch (os) {\r
27         case WINDOWS: {\r
28             HANDLE proc = Kernel32.INSTANCE.GetCurrentProcess();\r
29             switch (arch) {\r
30             case X86: {\r
31                 Psapi32.PROCESS_MEMORY_COUNTERS_EX pmem = new Psapi32.PROCESS_MEMORY_COUNTERS_EX();\r
32                 boolean ok = Psapi32.INSTANCE.GetProcessMemoryInfo(proc, pmem, pmem.size());\r
33                 if (ok)\r
34                     pmem.writeTo(out);\r
35                 return out;\r
36             }\r
37 \r
38             case X86_64: {\r
39                 Psapi64.PROCESS_MEMORY_COUNTERS_EX pmem = new Psapi64.PROCESS_MEMORY_COUNTERS_EX();\r
40                 boolean ok = Psapi64.INSTANCE.GetProcessMemoryInfo(proc, pmem, pmem.size());\r
41                 if (ok)\r
42                     pmem.writeTo(out);\r
43                 return out;\r
44             }\r
45 \r
46             default:\r
47                 throw new UnsupportedOperationException("Architecture " + arch + " not supported on operating system " + os);\r
48             }\r
49         }\r
50 \r
51         default:\r
52             throw new UnsupportedOperationException("Operating system " + os + " not supported");\r
53         }\r
54     }\r
55 \r
56 }