VTK  9.2.6
vtkRenderTimerLog.h
Go to the documentation of this file.
1/*=========================================================================
2
3 Program: Visualization Toolkit
4 Module: vtkRenderTimerLog.h
5
6 Copyright (c) Ken Martin, Will Schroeder, Bill Lorensen
7 All rights reserved.
8 See Copyright.txt or http://www.kitware.com/Copyright.htm 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=========================================================================*/
15
52#ifndef vtkRenderTimerLog_h
53#define vtkRenderTimerLog_h
54
55#include "vtkObject.h"
56#include "vtkRenderingCoreModule.h" // For export macro
57#include "vtkType.h" // For vtkTypeUint64, etc
58#include <sstream> // for std::ostringstream
59#include <string> // for std::string
60#include <vector> // for std::vector
61
66#define VTK_SCOPED_RENDER_EVENT(eventName, timer) VTK_SCOPED_RENDER_EVENT2(eventName, timer, _event)
67
73#define VTK_SCOPED_RENDER_EVENT2(eventName, timer, identifier) \
74 vtkRenderTimerLog::ScopedEventLogger identifier; \
75 do \
76 { \
77 std::ostringstream _eventNameStream; \
78 _eventNameStream << eventName; \
79 identifier = timer->StartScopedEvent(_eventNameStream.str()); \
80 (void)identifier; /* Prevent set-but-not-used var warnings */ \
81 } while (false) /* Do-while loop prevents duplicate semicolon warnings */
82
83class VTKRENDERINGCORE_EXPORT vtkRenderTimerLog : public vtkObject
84{
85public:
86 struct Frame;
87
89 struct VTKRENDERINGCORE_EXPORT Event
90 {
92 std::string Name;
93
95 vtkTypeUInt64 StartTime;
96 vtkTypeUInt64 EndTime;
100 float ElapsedTimeSeconds() const { return this->ElapsedTimeNanoseconds() * 1e-9f; }
101 float ElapsedTimeMilliseconds() const { return this->ElapsedTimeNanoseconds() * 1e-6f; }
102 vtkTypeUInt64 ElapsedTimeNanoseconds() const { return this->EndTime - this->StartTime; }
103
105 std::vector<Event> Events;
106
112 void Print(std::ostream& os, float threshMs = 0.f, vtkIndent indent = vtkIndent())
113 {
114 this->Print(os, 0.f, threshMs, indent);
115 }
116
118
119 protected:
120 void Print(std::ostream& os, float parentTime, float threshMs, vtkIndent indent);
121 };
122
124 struct VTKRENDERINGCORE_EXPORT Frame
125 {
126 std::vector<Event> Events;
127
132 void Print(std::ostream& os, float threshMs = 0.f);
133 };
134
140 struct VTKRENDERINGCORE_EXPORT ScopedEventLogger
141 {
143 : Log(nullptr)
144 {
145 }
148 ~ScopedEventLogger() { this->Stop(); }
149 void Stop();
150 friend class vtkRenderTimerLog;
151
152 protected:
154 : Log(log)
155 {
156 }
157
158 private:
159 void operator=(const ScopedEventLogger&) = delete;
160 ScopedEventLogger(const ScopedEventLogger& other) = delete;
162 };
163
166 void PrintSelf(ostream& os, vtkIndent indent) override;
167
172 virtual bool IsSupported() VTK_FUTURE_CONST;
173
178 virtual void MarkFrame();
179
183 ScopedEventLogger StartScopedEvent(const std::string& name);
184
188 virtual void MarkStartEvent(const std::string& name);
189 virtual void MarkEndEvent();
195 virtual bool FrameReady();
196
201 virtual Frame PopFirstReadyFrame();
202
204 vtkSetMacro(LoggingEnabled, bool);
205 vtkGetMacro(LoggingEnabled, bool);
206 vtkBooleanMacro(LoggingEnabled, bool);
214 vtkSetMacro(FrameLimit, unsigned int);
215 vtkGetMacro(FrameLimit, unsigned int);
221 virtual void ReleaseGraphicsResources();
222
223protected:
225 ~vtkRenderTimerLog() override;
226
227 mutable bool LoggingEnabled;
228 unsigned int FrameLimit;
229
230private:
231 vtkRenderTimerLog(const vtkRenderTimerLog&) = delete;
232 void operator=(const vtkRenderTimerLog&) = delete;
233};
234
235#endif // vtkRenderTimerLog_h
a simple class to control print indentation
Definition vtkIndent.h:40
void Print(ostream &os)
Print an object to an ostream.
abstract base class for most VTK objects
Definition vtkObject.h:63
Asynchronously measures GPU execution times for a series of events.
void PrintSelf(ostream &os, vtkIndent indent) override
Methods invoked by print to print information about the object including superclasses.
virtual bool IsSupported() VTK_FUTURE_CONST
Returns true if stream timings are implemented for the current graphics backend.
static vtkRenderTimerLog * New()
Container for a single timed event.
vtkTypeUInt64 EndTime
Times are in nanoseconds.
void Print(std::ostream &os, float parentTime, float threshMs, vtkIndent indent)
std::vector< Event > Events
Child events that occurred while this event was running.
float ElapsedTimeMilliseconds() const
void Print(std::ostream &os, float threshMs=0.f, vtkIndent indent=vtkIndent())
Print details of the event to a stream.
vtkTypeUInt64 StartTime
Times are in nanoseconds.
vtkTypeUInt64 ElapsedTimeNanoseconds() const
std::string Name
Event name.
float ElapsedTimeSeconds() const
Convenience methods to compute times.
Container for a frame's events.
std::vector< Event > Events
void Print(std::ostream &os, float threshMs=0.f)
Print details of all events in this frame to a stream.
RAII struct for logging events.
ScopedEventLogger(vtkRenderTimerLog *log)
ScopedEventLogger(ScopedEventLogger &&other) noexcept
ScopedEventLogger & operator=(ScopedEventLogger &&other) noexcept