]> OCCT Git - occt-copy.git/commitdiff
0027871: VIS - Possible memory leak in viewers in virtual windows mode CR27871_2
authorabv <abv@opencascade.com>
Sun, 3 Mar 2019 07:58:41 +0000 (10:58 +0300)
committerabv <abv@opencascade.com>
Sat, 4 May 2019 04:18:06 +0000 (07:18 +0300)
Command checktrend is modified to avoid performing check for lists containing less than 5 items, as estimations based on short lists often lead to false positives.
Disable vtkTimerLog within test checking for memory leaks.

adm/genproj.tcl
src/DrawResources/TestCommands.tcl
src/IVtkDraw/IVtkDraw.cxx
src/TKIVtkDraw/EXTERNLIB
tests/v3d/ivtk/bug27567

index 147f0fb0e23a35e8746b7e1717e5f1a4b77f1d43..0a2b7c261d0317b651a2f823580cfd05b52dbac9 100644 (file)
@@ -1422,7 +1422,7 @@ proc osutils:vtkCsf {{theOS ""}} {
     }
   }
 
-  set aLibArray [list vtkCommonCore vtkCommonDataModel vtkCommonExecutionModel vtkCommonMath vtkCommonTransforms vtkRenderingCore \
+  set aLibArray [list vtkCommonCore vtkCommonSystem vtkCommonDataModel vtkCommonExecutionModel vtkCommonMath vtkCommonTransforms vtkRenderingCore \
                       vtkRenderingOpenGL  vtkFiltersGeneral vtkIOCore vtkIOImage vtkImagingCore vtkInteractionStyle]
 
   # Additional suffices for the libraries
index 1669f17cf4bdc0608aed3c805662fc7f40b22802..78e59fcd33439a8f5450757ecaee34bee88cb81a 100644 (file)
@@ -2765,13 +2765,14 @@ proc _checkpoint {coord_x coord_y rd_ch gr_ch bl_ch} {
 # the check fails and procedure raises error with specified message.
 #
 # Otherwise the procedure returns false meaning that more iterations are needed.
-# Note that false is returned in any case if length of listval is less than 3.
+# Note that analysis is peformed only if listval contains at least 5 values,
+# thus false is returned unconditionally for shorter lists.
 #
 # See example of use to check memory leaks in bugs/caf/bug23489
 #
 proc checktrend {listval delta tolerance message} {
     set nbval [llength $listval]
-    if { $nbval < 3} {
+    if { $nbval < 5} {
         return 0
     }
 
index 9c517db488fa7c4cf2e0c614afb00920cd16ebdf..135d6e96556bab14968d99cabe070e6ea13dc36b 100644 (file)
 #include <IVtkDraw_HighlightAndSelectionPipeline.hxx>
 #include <IVtkDraw_Interactor.hxx>
 
-// prevent disabling some MSVC warning messages by VTK headers 
-#ifdef _MSC_VER
-#pragma warning(push)
-#pragma warning(disable: 4244)
-#endif
+// prevent disabling some MSVC warning messages by VTK headers
+#include <Standard_WarningsDisable.hxx>
 #include <vtkAlgorithmOutput.h>
 #include <vtkAppendPolyData.h>
 #include <vtkBMPWriter.h>
 #include <vtkRenderWindowInteractor.h>
 #include <vtkSmartPointer.h>
 #include <vtkTIFFWriter.h>
+#include <vtkTimerLog.h>
 #include <vtkWindowToImageFilter.h>
 #ifndef _WIN32
 #include <X11/X.h>
 #include <X11/Xutil.h>
 #include <tk.h>
 #endif
-#ifdef _MSC_VER
-#pragma warning(pop)
-#endif
+#include <Standard_WarningsRestore.hxx>
 
 // workaround name conflicts with OCCT methods (in class TopoDS_Shape for example)
 #ifdef Convex
@@ -407,6 +403,37 @@ static Standard_Integer VtkInit (Draw_Interpretor& ,
   return 0;
 }
 
+//================================================================
+// Function : VtkTimerLog
+// Purpose  :
+//================================================================
+static Standard_Integer VtkTimerLog (Draw_Interpretor& ,
+                                    Standard_Integer theNbArgs,
+                                    const char** theArgVec)
+{
+  TCollection_AsciiString aVal;
+  if (theNbArgs == 2)
+  {
+    aVal = theArgVec[1];
+    aVal.LowerCase();
+  }
+  if (aVal == "1"
+   || aVal == "on")
+  {
+    vtkTimerLog::LoggingOn();
+  }
+  else if (aVal == "0"
+        || aVal == "off")
+  {
+    vtkTimerLog::LoggingOff();
+  }
+  else
+  {
+    std::cout << "Syntax error: wrong arguments\n";
+    return 1;
+  }
+  return 0;
+}
 
 //================================================================
 // Function : CreateActor
@@ -1173,6 +1200,11 @@ void IVtkDraw::Commands (Draw_Interpretor& theCommands)
     "\n\t\t: Creates the Vtk window",
     __FILE__, VtkInit, group);
 
+  theCommands.Add("ivtktimerlog",
+    "ivtktimerlog {on|off}\n"
+    "\n\t\t: Enables/disables VTK timer profiler",
+    __FILE__, VtkTimerLog, group);
+
   theCommands.Add("ivtkdisplay",
     "ivtkdisplay usage:\n"
     "ivtkdisplay name1 name2 ..."
@@ -1236,7 +1268,6 @@ void IVtkDraw::Commands (Draw_Interpretor& theCommands)
     __FILE__, VtkBackgroundColor, group);
 }
 
-
 //================================================================
 // Function : Factory
 // Purpose  : 
index bf40a7d8522925c93ec925ce218c616c1ab663fe..8d8f57e78aad22314812a37e6fc80cad4ec30caf 100644 (file)
@@ -22,3 +22,4 @@ vtkImagingCore
 vtkInteractionStyle
 vtkRenderingOpenGL
 vtkRenderingFreeTypeOpenGL
+vtkCommonSystem
index 5d110ad008d250088d0e126a61a472fa7235764e..4f9ff65d4a0fb85573187c73200a752e7e5d65e4 100644 (file)
@@ -1,66 +1,46 @@
-puts "For OCC27871: Possible memory leak in viewers in virtual windows mode"
-puts "For OCC27871: Use 120 kb tolerance for checktrend because of leak on Linux in virtual windows mode"
 puts "============"
-puts "OCC27567"
+puts "0027567: Visualization - possible memory leaks due to use of plain pointers in IVTK"
 puts "============"
 puts ""
-#######################################################################
-# Visualization - possible memory leaks due to use of plain pointers 
-# in IVTK
-#######################################################################
 
-ivtkinit
+psphere s 10 15 80
+box b1 5 5 -5
+box b2 -5 -5 -5
+ptorus t 10 3
+compound s b1 b2 t cc
+unset s
+unset b1
+unset b2
+unset t
+incmesh cc 1
 
-dlog off
-# Create i_max number of shapes
-set i_max 15
+ivtkinit
+ivtktimerlog 0
 
-set listmem {}
-for {set i 1} {${i} <= ${i_max}} {incr i} {
-    
-  psphere s 10 15 80
-  box box1 5 5 -5
-  box box2 -5 -5 -5
-  ptorus t 10 3
+proc doCycle { theI } {
+  # display shaded/wireframe
+  uplevel #0 ivtkdisplay cc
+  uplevel #0 ivtksetdispmode 1
+  uplevel #0 ivtksetdispmode 0
 
-  compound s box1 box2 t b$i
+  # select/unselect
+  uplevel #0 ivtkselect 200 200
+  uplevel #0 ivtkselect 0 0
 
-  unset s
-  unset box1
-  unset box2
-  unset t
-  
+  # highlight/unhighlight
+  uplevel #0 ivtkmoveto 200 200
+  uplevel #0 ivtkmoveto 50 50
 
-  # Display the j-th shape
-  ivtkdisplay b$i
-               
-  # Display shaded
-  ivtksetdispmode 1
-               
-  # Display wired
-  ivtksetdispmode 0
-               
-  # Select the shape
-  ivtkselect 200 200
-               
-  # Deselect the shape
-  ivtkselect 0 0
-               
-  # Highlight the shape 
-  ivtkmoveto 200 200
-                 
-  # Unhighlight the shape 
-  ivtkmoveto 50 50
-                 
-  # Hide the shape
-  ivtkerase b$i
-    
-  # Remove the shape presentation from memory
-  ivtkremove b$i
-  
-  unset b$i
+  # hide and remove
+  uplevel #0 ivtkerase  cc
+  uplevel #0 ivtkremove cc
+}
 
+# Create i_max number of shapes
+set i_max 15
+set listmem {}
+for {set i 1} {${i} <= ${i_max}} {incr i} {
+  doCycle $i
   lappend listmem [meminfo h]
-  checktrend $listmem 0 120000 "Memory leak detected"
+  checktrend $listmem 0 1 "Memory leak detected"
 }
-