// Created on: 2011-10-05
// Created by: Kirill GAVRILOV
-// Copyright (c) 2012 OPEN CASCADE SAS
+// Copyright (c) 2013-2014 OPEN CASCADE SAS
//
-// The content of this file is subject to the Open CASCADE Technology Public
-// License Version 6.5 (the "License"). You may not use the content of this file
-// except in compliance with the License. Please obtain a copy of the License
-// at http://www.opencascade.org and read it completely before using this file.
+// This file is part of Open CASCADE Technology software library.
//
-// The Initial Developer of the Original Code is Open CASCADE S.A.S., having its
-// main offices at: 1, place des Freres Montgolfier, 78280 Guyancourt, France.
+// This library is free software; you can redistribute it and/or modify it under
+// the terms of the GNU Lesser General Public License version 2.1 as published
+// by the Free Software Foundation, with special exception defined in the file
+// OCCT_LGPL_EXCEPTION.txt. Consult the file LICENSE_LGPL_21.txt included in OCCT
+// distribution for complete text of the license and disclaimer of any warranty.
//
-// The Original Code and all software distributed under the License is
-// distributed on an "AS IS" basis, without warranty of any kind, and the
-// Initial Developer hereby disclaims all such warranties, including without
-// limitation, any warranties of merchantability, fitness for a particular
-// purpose or non-infringement. Please see the License for the specific terms
-// and conditions governing the rights and limitations under the License.
+// Alternatively, this file may be used under the terms of Open CASCADE
+// commercial license or contractual agreement.
#if (defined(_WIN32) || defined(__WIN32__))
#include <windows.h>
#include <winbase.h>
#include <process.h>
#include <malloc.h>
- #include <Psapi.h>
+ #include <psapi.h>
#ifdef _MSC_VER
#pragma comment(lib, "Psapi.lib")
#endif
// function : OSD_MemInfo
// purpose :
// =======================================================================
-OSD_MemInfo::OSD_MemInfo()
+OSD_MemInfo::OSD_MemInfo (const Standard_Boolean theImmediateUpdate)
{
- Update();
+ if (theImmediateUpdate)
+ {
+ Update();
+ }
+ else
+ {
+ Clear();
+ }
}
+
// =======================================================================
-// function : Update
+// function : Clear
// purpose :
// =======================================================================
-void OSD_MemInfo::Update()
+void OSD_MemInfo::Clear()
{
- // reset values
for (Standard_Integer anIter = 0; anIter < MemCounter_NB; ++anIter)
{
myCounters[anIter] = Standard_Size(-1);
}
+}
-#if (defined(_WIN32) || defined(__WIN32__))
+// =======================================================================
+// function : Update
+// purpose :
+// =======================================================================
+void OSD_MemInfo::Update()
+{
+ Clear();
+#ifndef OCCT_UWP
+#if defined(_WIN32)
+#if (_WIN32_WINNT >= 0x0500)
MEMORYSTATUSEX aStatEx;
aStatEx.dwLength = sizeof(aStatEx);
GlobalMemoryStatusEx (&aStatEx);
myCounters[MemVirtual] = Standard_Size(aStatEx.ullTotalVirtual - aStatEx.ullAvailVirtual);
+#else
+ MEMORYSTATUS aStat;
+ aStat.dwLength = sizeof(aStat);
+ GlobalMemoryStatus (&aStat);
+ myCounters[MemVirtual] = Standard_Size(aStat.dwTotalVirtual - aStat.dwAvailVirtual);
+#endif
// use Psapi library
HANDLE aProcess = GetCurrentProcess();
myCounters[MemHeapUsage] = aStats.size_in_use;
}
#endif
+#endif
}
// =======================================================================
? Standard_Size(-1) : (myCounters[theCounter] / (1024 * 1024));
}
+// =======================================================================
+// function : ValuePreciseMiB
+// purpose :
+// =======================================================================
+Standard_Real OSD_MemInfo::ValuePreciseMiB (const OSD_MemInfo::Counter theCounter) const
+{
+ if (theCounter < 0 || theCounter >= MemCounter_NB)
+ {
+ return -1.0;
+ }
+ return (myCounters[theCounter] == Standard_Size(-1))
+ ? -1.0 : ((Standard_Real )myCounters[theCounter] / (1024.0 * 1024.0));
+}
+
// =======================================================================
// function : ShowInfo
// purpose :