vtkSMTrace.h
Go to the documentation of this file.
1 /*=========================================================================
2 
3  Program: ParaView
4  Module: vtkSMTrace.h
5 
6  Copyright (c) Kitware, Inc.
7  All rights reserved.
8  See Copyright.txt or http://www.paraview.org/HTML/Copyright.html for details.
9 
10  This software is distributed WITHOUT ANY WARRANTY; without even
11  the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
12  PURPOSE. See the above copyright notice for more information.
13 
14 =========================================================================*/
59 #ifndef vtkSMTrace_h
60 #define vtkSMTrace_h
61 
62 #include "vtkRemotingServerManagerModule.h" // needed for exports
63 #include "vtkSMObject.h"
64 #include "vtkSmartPointer.h" // needed for iVar
65 #include "vtkStdString.h" // needed for ivar
66 
67 #include <vector>
68 
69 class vtkSMProxy;
70 class vtkSmartPyObject;
71 
72 class VTKREMOTINGSERVERMANAGER_EXPORT vtkSMTrace : public vtkSMObject
73 {
74 public:
75  static vtkSMTrace* New();
76  vtkTypeMacro(vtkSMTrace, vtkSMObject);
77  void PrintSelf(ostream& os, vtkIndent indent) override;
78 
83  static vtkSMTrace* GetActiveTracer() { return vtkSMTrace::ActiveTracer.GetPointer(); }
84 
95  static vtkSMTrace* StartTrace(const char* preamble = nullptr);
96 
101  static vtkStdString StopTrace();
102 
104 
109  vtkSetMacro(TraceXMLDefaults, bool);
110  vtkGetMacro(TraceXMLDefaults, bool);
112 
114 
118  vtkSetMacro(LogTraceToStdout, bool);
119  vtkGetMacro(LogTraceToStdout, bool);
121 
123 
130  vtkSetMacro(FullyTraceSupplementalProxies, bool);
131  vtkGetMacro(FullyTraceSupplementalProxies, bool);
133 
134  enum
135  {
136  RECORD_ALL_PROPERTIES = 0,
137  RECORD_MODIFIED_PROPERTIES = 1,
138  RECORD_USER_MODIFIED_PROPERTIES = 2
139  };
140 
141  vtkSetClampMacro(
142  PropertiesToTraceOnCreate, int, RECORD_ALL_PROPERTIES, RECORD_USER_MODIFIED_PROPERTIES);
143  vtkGetMacro(PropertiesToTraceOnCreate, int);
144 
148  vtkStdString GetCurrentTrace();
149 
154  static vtkStdString GetState(int propertiesToTraceOnCreate, bool skipHiddenRepresentations);
155 
156  // ************** BEGIN INTERNAL *************************
158 
161  class TraceItem;
162  class VTKREMOTINGSERVERMANAGER_EXPORT TraceItemArgs
163  {
164  public:
165  TraceItemArgs();
166  ~TraceItemArgs();
168 
169  // Overloads for keyword arguments.
170  TraceItemArgs& arg(const char* key, vtkObject* val);
171  TraceItemArgs& arg(const char* key, const char* val);
172  TraceItemArgs& arg(const char* key, int val);
173  TraceItemArgs& arg(const char* key, double val);
174  TraceItemArgs& arg(const char* key, bool val);
175  TraceItemArgs& arg(const char* key, const std::vector<int>& val);
176  TraceItemArgs& arg(const char* key, const std::vector<double>& val);
177 
178  // Overloads for positional arguments.
179  TraceItemArgs& arg(vtkObject* val);
180  TraceItemArgs& arg(const char* val);
181  TraceItemArgs& arg(int val);
182  TraceItemArgs& arg(double val);
183  TraceItemArgs& arg(bool val);
184 
185  private:
187  void operator=(const TraceItemArgs&);
188 
189  friend class TraceItem;
190  class vtkInternals;
191  vtkInternals* Internals;
192  };
193 
194  class VTKREMOTINGSERVERMANAGER_EXPORT TraceItem
195  {
196  public:
197  TraceItem(const char* type);
198  ~TraceItem();
199  void operator=(const TraceItemArgs& arguments);
200 
201  private:
202  TraceItem(const TraceItem&);
203  void operator=(const TraceItem&);
204  const char* Type;
205  class TraceItemInternals;
206  TraceItemInternals* Internals;
207  };
208  // ************** END INTERNAL *************************
209 
210 protected:
211  vtkSMTrace();
212  ~vtkSMTrace() override;
213 
217  bool CheckForError();
218 
223 
224 private:
225  vtkSMTrace(const vtkSMTrace&) = delete;
226  void operator=(const vtkSMTrace&) = delete;
227 
228  static vtkSmartPointer<vtkSMTrace> ActiveTracer;
229  class vtkInternals;
230  vtkInternals* Internals;
231 
232  friend class TraceItem;
233  const vtkSmartPyObject& GetTraceModule() const;
234  const vtkSmartPyObject& GetCreateItemFunction() const;
235 };
236 
237 #define SM_SCOPED_TRACE_0(x, y) x##y
238 #define SM_SCOPED_TRACE_1(x, y) SM_SCOPED_TRACE_0(x, y)
239 #define SM_SCOPED_TRACE(_A_TRACE_TYPE) \
240  vtkSMTrace::TraceItem SM_SCOPED_TRACE_1(_trace_item, __LINE__)(#_A_TRACE_TYPE); \
241  SM_SCOPED_TRACE_1(_trace_item, __LINE__) = vtkSMTrace::TraceItemArgs()
242 #endif
type
vtkSMTrace is used to produce Python trace in the ParaView application.
Definition: vtkSMTrace.h:72
bool FullyTraceSupplementalProxies
Returns true of there's an error.
Definition: vtkSMTrace.h:222
bool TraceXMLDefaults
Returns true of there's an error.
Definition: vtkSMTrace.h:219
superclass for most server manager classes
Definition: vtkSMObject.h:29
static vtkSMTrace * GetActiveTracer()
Provides access to the "active" tracer.
Definition: vtkSMTrace.h:83
static vtkSMObject * New()
proxy for a VTK object(s) on a server
Definition: vtkSMProxy.h:152
T * GetPointer() const
bool LogTraceToStdout
Returns true of there's an error.
Definition: vtkSMTrace.h:220
int PropertiesToTraceOnCreate
Returns true of there's an error.
Definition: vtkSMTrace.h:221
key
void PrintSelf(ostream &os, vtkIndent indent) override