0024380: OSD_MAllocHook - Improvement of malloc hook to follow maximal peack size
authorpdn <pdn@opencascade.com>
Fri, 22 Nov 2013 09:07:17 +0000 (13:07 +0400)
committerbugmaster <bugmaster@opencascade.com>
Thu, 28 Nov 2013 06:42:40 +0000 (10:42 +0400)
src/OSD/OSD_MAllocHook.cxx
src/OSD/OSD_MAllocHook.hxx

index ab7a7a5..d0f1ecc 100755 (executable)
@@ -470,7 +470,8 @@ OSD_MAllocHook::CollectBySize::CollectBySize()
 : myArray(NULL),
   myTotalLeftSize(0),
   myTotalPeakSize(0),
-  myBreakSize(0)
+  myBreakSize(0),
+  myBreakPeak(0)
 {
   Reset();
 }
@@ -587,7 +588,18 @@ void OSD_MAllocHook::CollectBySize::AllocEvent
     myTotalLeftSize += theSize;
     int nbLeft = myArray[ind].nbAlloc - myArray[ind].nbFree;
     if (nbLeft > myArray[ind].nbLeftPeak)
+    {
       myArray[ind].nbLeftPeak = nbLeft;
+      if (myBreakPeak != 0
+       && (myBreakSize == theSize || myBreakSize == 0))
+      {
+        const Standard_Size aSizePeak = myArray[ind].nbLeftPeak * theSize;
+        if (aSizePeak > myBreakPeak)
+        {
+          place_for_breakpoint();
+        }
+      }
+    }
     if (myTotalLeftSize > (ptrdiff_t)myTotalPeakSize)
       myTotalPeakSize = myTotalLeftSize;
     myMutex.Unlock();
index 58ae303..5484504 100755 (executable)
@@ -148,7 +148,8 @@ public:
     Numbers*       myArray;             //!< indexed from 0 to myMaxAllocSize-1
     ptrdiff_t      myTotalLeftSize;     //!< currently remained allocated size
     size_t         myTotalPeakSize;     //!< maxium cumulative allocated size
-    size_t         myBreakSize;
+    size_t         myBreakSize;         //!< user defined allocation size to debug (see place_for_breakpoint())
+    size_t         myBreakPeak;         //!< user defined peak size limit to debug
   };
 
   //! Set handler of allocation/deallocation events