0030901: Visualization - OSD_MemInfo moving memory computation out of the constructor
[occt.git] / src / OSD / OSD_MemInfo.cxx
index 09687b0..277804e 100644 (file)
@@ -1,28 +1,24 @@
 // 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();
@@ -164,6 +183,7 @@ void OSD_MemInfo::Update()
     myCounters[MemHeapUsage] = aStats.size_in_use;
   }
 #endif
+#endif
 }
 
 // =======================================================================
@@ -233,6 +253,20 @@ Standard_Size OSD_MemInfo::ValueMiB (const OSD_MemInfo::Counter theCounter) cons
        ? 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  :