# 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
}
#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
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
"\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 ..."
__FILE__, VtkBackgroundColor, group);
}
-
//================================================================
// Function : Factory
// Purpose :
-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"
}
-