X-Git-Url: https://gerrit.simantics.org/r/gitweb?a=blobdiff_plain;f=bundles%2Forg.simantics.nativemem%2Fsrc%2Forg%2Fsimantics%2Fnativemem%2Finternal%2Fwin%2FPsapi64.java;fp=bundles%2Forg.simantics.nativemem%2Fsrc%2Forg%2Fsimantics%2Fnativemem%2Finternal%2Fwin%2FPsapi64.java;h=9eb145f66d870a1ce9f846e34f685fdaed25d1d9;hb=99f23679ed1b7c4a47cd841fa75be142225eb7aa;hp=0000000000000000000000000000000000000000;hpb=dec69b85e6e2a6d89e7ff0ef9561178924ae4b5b;p=simantics%2Fplatform.git diff --git a/bundles/org.simantics.nativemem/src/org/simantics/nativemem/internal/win/Psapi64.java b/bundles/org.simantics.nativemem/src/org/simantics/nativemem/internal/win/Psapi64.java new file mode 100644 index 000000000..9eb145f66 --- /dev/null +++ b/bundles/org.simantics.nativemem/src/org/simantics/nativemem/internal/win/Psapi64.java @@ -0,0 +1,74 @@ +/******************************************************************************* + * 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 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); + +} \ No newline at end of file