0031467: Foundation Classes, OSD_MemInfo - disable reading /proc/%d/status with Emscr... IR-2020-03-27
authorkgv <kgv@opencascade.com>
Thu, 26 Mar 2020 20:59:02 +0000 (23:59 +0300)
committerbugmaster <bugmaster@opencascade.com>
Fri, 27 Mar 2020 15:03:20 +0000 (18:03 +0300)
OSD_MemInfo::Update() no more uses procfs with Emscripten.
OSD_MemInfo::MemVirtual counter is now set to WebAssembly module heap length.

src/OSD/OSD_MemInfo.cxx

index 17f7ed6..08a939b 100644 (file)
 
 #include <OSD_MemInfo.hxx>
 
+#if defined(__EMSCRIPTEN__)
+  #include <emscripten.h>
+
+  //! Return WebAssembly heap size in bytes.
+  EM_JS(size_t, OSD_MemInfo_getModuleHeapLength, (), {
+    return Module.HEAP8.length;
+  });
+#endif
+
 // =======================================================================
 // function : OSD_MemInfo
 // purpose  :
@@ -146,23 +155,44 @@ void OSD_MemInfo::Update()
     }
   }
 
-#elif (defined(__linux__) || defined(__linux) || defined(__EMSCRIPTEN__))
-  const struct mallinfo aMI = mallinfo();
-  if (IsActive (MemHeapUsage))
+#elif defined(__EMSCRIPTEN__)
+  if (IsActive (MemHeapUsage)
+   || IsActive (MemWorkingSet)
+   || IsActive (MemWorkingSetPeak))
   {
-    myCounters[MemHeapUsage] = aMI.uordblks;
+    // /proc/%d/status is not emulated - get more info from mallinfo()
+    const struct mallinfo aMI = mallinfo();
+    if (IsActive (MemHeapUsage))
+    {
+      myCounters[MemHeapUsage] = aMI.uordblks;
+    }
+    if (IsActive (MemWorkingSet))
+    {
+      myCounters[MemWorkingSet] = aMI.uordblks;
+    }
+    if (IsActive (MemWorkingSetPeak))
+    {
+      myCounters[MemWorkingSetPeak] = aMI.usmblks;
+    }
   }
-#if defined(__EMSCRIPTEN__)
-  // /proc/%d/status is not emulated - get more info from mallinfo()
-  if (IsActive (MemWorkingSet))
+  if (IsActive (MemVirtual))
   {
-    myCounters[MemWorkingSet]     = aMI.uordblks;
+    myCounters[MemVirtual] = OSD_MemInfo_getModuleHeapLength();
   }
-  if (IsActive (MemWorkingSetPeak))
+#elif (defined(__linux__) || defined(__linux))
+  if (IsActive (MemHeapUsage))
   {
-    myCounters[MemWorkingSetPeak] = aMI.usmblks;
+    const struct mallinfo aMI = mallinfo();
+    myCounters[MemHeapUsage] = aMI.uordblks;
+  }
+
+  if (!IsActive (MemVirtual)
+   && !IsActive (MemWorkingSet)
+   && !IsActive (MemWorkingSetPeak)
+   && !IsActive (MemPrivate))
+  {
+    return;
   }
-#endif
 
   // use procfs on Linux
   char aBuff[4096];