diff --git a/src/Draw/Draw_BasicCommands.cxx b/src/Draw/Draw_BasicCommands.cxx index 012af7f198..a7355b2284 100755 --- a/src/Draw/Draw_BasicCommands.cxx +++ b/src/Draw/Draw_BasicCommands.cxx @@ -664,6 +664,10 @@ static int dmeminfo (Draw_Interpretor& theDI, { theDI << Standard_Real (aMemInfo.Value (OSD_MemInfo::MemVirtual)) << " "; } + else if (anArg == "heap" || anArg == "h") + { + theDI << Standard_Real (aMemInfo.Value (OSD_MemInfo::MemHeapUsage)) << " "; + } else if (anArg == "wset" || anArg == "w") { theDI << Standard_Real (aMemInfo.Value (OSD_MemInfo::MemWorkingSet)) << " "; @@ -719,7 +723,7 @@ void Draw::BasicCommands(Draw_Interpretor& theCommands) "debug memory allocation/deallocation, w/o args for help", __FILE__, mallochook, g); theCommands.Add ("meminfo", - "meminfo [virt|v] [wset|w] [wsetpeak] [swap] [swappeak] [private]" + "meminfo [virt|v] [heap|h] [wset|w] [wsetpeak] [swap] [swappeak] [private]" " : memory counters for this process", __FILE__, dmeminfo, g); diff --git a/src/OSD/OSD_MemInfo.cxx b/src/OSD/OSD_MemInfo.cxx index f03a037786..09687b023f 100644 --- a/src/OSD/OSD_MemInfo.cxx +++ b/src/OSD/OSD_MemInfo.cxx @@ -21,6 +21,7 @@ #include #include #include + #include #include #ifdef _MSC_VER #pragma comment(lib, "Psapi.lib") @@ -28,8 +29,10 @@ #elif (defined(__APPLE__)) #include #include + #include #else #include + #include #endif #include @@ -83,6 +86,17 @@ void OSD_MemInfo::Update() myCounters[MemSwapUsagePeak] = aProcMemCnts.PeakPagefileUsage; } + _HEAPINFO hinfo; + int heapstatus; + hinfo._pentry = NULL; + + myCounters[MemHeapUsage] = 0; + while((heapstatus = _heapwalk(&hinfo)) == _HEAPOK) + { + if(hinfo._useflag == _USEDENTRY) + myCounters[MemHeapUsage] += hinfo._size; + } + #elif (defined(__linux__) || defined(__linux)) // use procfs on Linux char aBuff[4096]; @@ -129,6 +143,10 @@ void OSD_MemInfo::Update() } } aFile.close(); + + struct mallinfo aMI = mallinfo(); + myCounters[MemHeapUsage] = aMI.uordblks; + #elif (defined(__APPLE__)) struct task_basic_info aTaskInfo; mach_msg_type_number_t aTaskInfoCount = TASK_BASIC_INFO_COUNT; @@ -138,6 +156,12 @@ void OSD_MemInfo::Update() // On Mac OS X, these values in bytes, not pages! myCounters[MemVirtual] = aTaskInfo.virtual_size; myCounters[MemWorkingSet] = aTaskInfo.resident_size; + + //Getting malloc statistics + malloc_statistics_t aStats; + malloc_zone_statistics (NULL, &aStats); + + myCounters[MemHeapUsage] = aStats.size_in_use; } #endif } @@ -175,6 +199,10 @@ TCollection_AsciiString OSD_MemInfo::ToString() const { anInfo += TCollection_AsciiString(" Virtual memory: ") + Standard_Integer (ValueMiB (MemVirtual)) + " MiB\n"; } + if (myCounters[MemHeapUsage] != Standard_Size(-1)) + { + anInfo += TCollection_AsciiString(" Heap memory: ") + Standard_Integer (ValueMiB (MemHeapUsage)) + " MiB\n"; + } return anInfo; } diff --git a/src/OSD/OSD_MemInfo.hxx b/src/OSD/OSD_MemInfo.hxx index 5e2e3c824c..7b3e6f43ad 100644 --- a/src/OSD/OSD_MemInfo.hxx +++ b/src/OSD/OSD_MemInfo.hxx @@ -64,6 +64,7 @@ public: MemWorkingSetPeak, //!< Peak working set size MemSwapUsage, //!< Space allocated for the pagefile MemSwapUsagePeak, //!< Peak space allocated for the pagefile + MemHeapUsage, //!< Total space allocated from the heap MemCounter_NB //!< Indicates total counters number }; diff --git a/tests/bugs/begin b/tests/bugs/begin index 18e568238c..4ebd4de2cc 100755 --- a/tests/bugs/begin +++ b/tests/bugs/begin @@ -234,7 +234,7 @@ proc checktrend {listval delta tolerance message} { # check if deviation is definitely too big if { abs ($mean - $delta) > 2. * $sigma } { puts "Checking trend failed: mean delta per step = $mean, sigma = $sigma, expected delta = $delta" - puts "Error : $message" + error "$message" } # check if deviation is clearly within a range diff --git a/tests/bugs/caf/buc60921 b/tests/bugs/caf/buc60921 index 18579f5d06..6b0c05fcc9 100755 --- a/tests/bugs/caf/buc60921 +++ b/tests/bugs/caf/buc60921 @@ -44,7 +44,7 @@ for {set i 1} {$i <= ${i_max}} {incr i} { Undo D # check memory usage (with tolerance equal to half page size) - lappend listmem [expr [meminfo w] / 1024] + lappend listmem [meminfo h] if { [checktrend $listmem 0 512 "Memory leak detected"] } { puts "No memory leak, $i iterations" break diff --git a/tests/bugs/caf/bug114 b/tests/bugs/caf/bug114 index 9373fe9470..4372783e69 100755 --- a/tests/bugs/caf/bug114 +++ b/tests/bugs/caf/bug114 @@ -19,7 +19,7 @@ for {set i 1} {${i} <= ${i_max}} {incr i} { AbortCommand D # check memory usage (with tolerance equal to half page size) - lappend listmem [expr [meminfo w] / 1024] + lappend listmem [meminfo h] if { [checktrend $listmem 0 1 "Memory leak detected"] } { puts "No memory leak, $i iterations" break diff --git a/tests/bugs/caf/bug23489 b/tests/bugs/caf/bug23489 index 4ca3a4da99..a566ba3db7 100755 --- a/tests/bugs/caf/bug23489 +++ b/tests/bugs/caf/bug23489 @@ -27,7 +27,7 @@ for {set i 1} {$i < 10} {incr i} { vertex a 0 0 0 # check memory usage (with tolerance equal to half page size) - lappend listmem [expr [meminfo w] / 1024] + lappend listmem [meminfo h] if { [checktrend $listmem 0 256 "Memory leak detected"] } { puts "No memory leak, $i iterations" break diff --git a/tests/bugs/fclasses/bug22611 b/tests/bugs/fclasses/bug22611 index 081ebb1e81..518bd2d3d9 100755 --- a/tests/bugs/fclasses/bug22611 +++ b/tests/bugs/fclasses/bug22611 @@ -16,7 +16,7 @@ set listmem {} set i_max 1000000 OCC22611 "0.1214343" ${i_max} -lappend listmem [expr [meminfo w] / 1024] +lappend listmem [meminfo h] if { [checktrend $listmem 0 1 "Memory leak detected"] } { puts "No memory leak" break diff --git a/tests/bugs/fclasses/bug7287_1 b/tests/bugs/fclasses/bug7287_1 index 2fed9a9deb..eb27774205 100755 --- a/tests/bugs/fclasses/bug7287_1 +++ b/tests/bugs/fclasses/bug7287_1 @@ -21,9 +21,9 @@ set listmem {} for {set i 1} {${i} <= ${NCycles}} {incr i } { bopcut r - lappend listmem [expr [meminfo w] / 1024] + lappend listmem [meminfo h] if { [checktrend $listmem 0 1 "Memory leak detected"] } { - puts "No memory leak, $i iterations" - break + puts "No memory leak, $i iterations" + break } } diff --git a/tests/bugs/fclasses/bug7287_2 b/tests/bugs/fclasses/bug7287_2 index 4dc4f3918e..8bbc9ba079 100755 --- a/tests/bugs/fclasses/bug7287_2 +++ b/tests/bugs/fclasses/bug7287_2 @@ -20,9 +20,9 @@ bop b1 b2 set listmem {} for {set i 1} {${i} <= ${NCycles}} {incr i } { bopcut r - lappend listmem [expr [meminfo w] / 1024] + lappend listmem [meminfo h] if { [checktrend $listmem 0 1 "Memory leak detected"] } { - puts "No memory leak, $i iterations" - break + puts "No memory leak, $i iterations" + break } } diff --git a/tests/bugs/fclasses/bug7287_3 b/tests/bugs/fclasses/bug7287_3 index b97a709c0d..b529d24584 100755 --- a/tests/bugs/fclasses/bug7287_3 +++ b/tests/bugs/fclasses/bug7287_3 @@ -22,10 +22,10 @@ set listmem {} for {set i 1} {${i} <= ${NCycles}} {incr i } { boptuc r - lappend listmem [expr [meminfo w] / 1024] + lappend listmem [meminfo h] if { [checktrend $listmem 0 1 "Memory leak detected"] } { - puts "No memory leak, $i iterations" - break + puts "No memory leak, $i iterations" + break } } diff --git a/tests/bugs/fclasses/bug7287_4 b/tests/bugs/fclasses/bug7287_4 index 413e15969f..827dede2b5 100755 --- a/tests/bugs/fclasses/bug7287_4 +++ b/tests/bugs/fclasses/bug7287_4 @@ -21,9 +21,9 @@ set listmem {} for {set i 1} {${i} <= ${NCycles}} {incr i } { bopcommon r - lappend listmem [expr [meminfo w] / 1024] + lappend listmem [meminfo h] if { [checktrend $listmem 0 1 "Memory leak detected"] } { - puts "No memory leak, $i iterations" - break + puts "No memory leak, $i iterations" + break } } diff --git a/tests/bugs/fclasses/bug7287_5 b/tests/bugs/fclasses/bug7287_5 index 61140a4490..c8ec59503a 100755 --- a/tests/bugs/fclasses/bug7287_5 +++ b/tests/bugs/fclasses/bug7287_5 @@ -20,9 +20,9 @@ bop b1 b2 for {set i 1} {${i} <= ${NCycles}} {incr i } { bopfuse r - lappend listmem [expr [meminfo w] / 1024] + lappend listmem [meminfo h] if { [checktrend $listmem 0 1 "Memory leak detected"] } { - puts "No memory leak, $i iterations" - break + puts "No memory leak, $i iterations" + break } } diff --git a/tests/bugs/fclasses/bug7287_6 b/tests/bugs/fclasses/bug7287_6 index 4b409a1fcc..ac32a9c39a 100755 --- a/tests/bugs/fclasses/bug7287_6 +++ b/tests/bugs/fclasses/bug7287_6 @@ -20,10 +20,10 @@ bop b1 b2 for {set i 1} {${i} <= ${NCycles}} {incr i } { bopsection r - lappend listmem [expr [meminfo w] / 1024] + lappend listmem [meminfo h] if { [checktrend $listmem 0 1 "Memory leak detected"] } { - puts "No memory leak, $i iterations" - break + puts "No memory leak, $i iterations" + break } } diff --git a/tests/bugs/moddata_1/bug145 b/tests/bugs/moddata_1/bug145 index 6992d661d9..54af3ca841 100755 --- a/tests/bugs/moddata_1/bug145 +++ b/tests/bugs/moddata_1/bug145 @@ -10,7 +10,7 @@ set listmem {} set i_max 10000 OCC145 [locate_data_file OCC145.brep] ${i_max} -lappend listmem [expr [meminfo w] / 1024] +lappend listmem [meminfo h] if { [checktrend $listmem 0 1 "Memory leak detected"] } { puts "No memory leak, $i iterations" break diff --git a/tests/bugs/moddata_1/bug20627 b/tests/bugs/moddata_1/bug20627 index a4fdba0ec9..edbf38ed32 100755 --- a/tests/bugs/moddata_1/bug20627 +++ b/tests/bugs/moddata_1/bug20627 @@ -16,7 +16,7 @@ set listmem {} set i_max 10000 OCC20627 ${i_max} -lappend listmem [expr [meminfo w] / 1024] +lappend listmem [meminfo h] if { [checktrend $listmem 0 1 "Memory leak detected"] } { puts "No memory leak" break diff --git a/tests/bugs/moddata_2/bug277 b/tests/bugs/moddata_2/bug277 index 5a0aa435ba..c35cdcb4b3 100755 --- a/tests/bugs/moddata_2/bug277 +++ b/tests/bugs/moddata_2/bug277 @@ -12,9 +12,9 @@ set i_max 10 for {set i 1} {${i} <= ${i_max}} {incr i} { OCC277 - lappend listmem [expr [meminfo w] / 1024] + lappend listmem [meminfo h] if { [checktrend $listmem 0 1 "Memory leak detected"] } { - puts "No memory leak, $i iterations" - break + puts "No memory leak, $i iterations" + break } } diff --git a/tests/bugs/moddata_3/bug162 b/tests/bugs/moddata_3/bug162 index 34815905ad..1ef01619ea 100644 --- a/tests/bugs/moddata_3/bug162 +++ b/tests/bugs/moddata_3/bug162 @@ -11,11 +11,11 @@ OCC162 s set i_max 5 for {set i 1} {${i} <= ${i_max}} {incr i} { - OCC162 s - lappend listmem [expr [meminfo w] / 1024] - if { [checktrend $listmem 0 1 "Memory leak detected"] } { - puts "No memory leak, $i iterations" - break - } + OCC162 s + lappend listmem [meminfo h] + if { [checktrend $listmem 0 1 "Memory leak detected"] } { + puts "No memory leak, $i iterations" + break + } } diff --git a/tests/bugs/vis/bug172 b/tests/bugs/vis/bug172 index f9ae2e5983..1fe24310d6 100755 --- a/tests/bugs/vis/bug172 +++ b/tests/bugs/vis/bug172 @@ -16,10 +16,10 @@ for {set i 1} {${i} <= ${i_max}} {incr i} { # deselect shape OCC172 - lappend listmem [expr [meminfo w] / 1024] + lappend listmem [meminfo h] if { [checktrend $listmem 0 1 "Memory leak detected"] } { - puts "No memory leak, $i iterations" - break + puts "No memory leak, $i iterations" + break } } diff --git a/tests/bugs/vis/bug5682 b/tests/bugs/vis/bug5682 index 608a8a001c..b656cce07f 100755 --- a/tests/bugs/vis/bug5682 +++ b/tests/bugs/vis/bug5682 @@ -18,8 +18,8 @@ vfit catch {vselmode 4 1} vclear -lappend listmem [expr [meminfo w] / 1024] +lappend listmem [meminfo h] if { [checktrend $listmem 0 1 "Memory leak detected"] } { - puts "No memory leak" - break + puts "No memory leak" + break } diff --git a/tests/bugs/vis/bug79 b/tests/bugs/vis/bug79 index 0f9520ef70..ced3b00c85 100644 --- a/tests/bugs/vis/bug79 +++ b/tests/bugs/vis/bug79 @@ -12,12 +12,12 @@ vdisplay s set listmem {} set i_max 10 for {set i 1} {${i} <= ${i_max}} {incr i} { - verase s - vdisplay s + verase s + vdisplay s - lappend listmem [expr [meminfo w] / 1024] - if { [checktrend $listmem 0 1 "Memory leak detected"] } { - puts "No memory leak, $i iterations" - break - } + lappend listmem [meminfo h] + if { [checktrend $listmem 0 1 "Memory leak detected"] } { + puts "No memory leak, $i iterations" + break + } }