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
49#ifndef vtkRenderTimerLog_h
50#define vtkRenderTimerLog_h
51
52#include "vtkObject.h"
53#include "vtkRenderingCoreModule.h" // For export macro
54#include "vtkType.h" // For vtkTypeUint64, etc
55#include <sstream> // for std::ostringstream
56#include <string> // for std::string
57#include <vector> // for std::vector
58
63#define VTK_SCOPED_RENDER_EVENT(eventName, timer) VTK_SCOPED_RENDER_EVENT2(eventName, timer, _event)
64
70#define VTK_SCOPED_RENDER_EVENT2(eventName, timer, identifier) \
71 vtkRenderTimerLog::ScopedEventLogger identifier; \
72 do \
73 { \
74 std::ostringstream _eventNameStream; \
75 _eventNameStream << eventName; \
76 identifier = timer->StartScopedEvent(_eventNameStream.str()); \
77 (void)identifier; /* Prevent set-but-not-used var warnings */ \
78 } while (false) /* Do-while loop prevents duplicate semicolon warnings */
79
80class VTKRENDERINGCORE_EXPORT vtkRenderTimerLog : public vtkObject
81{
82public:
83 struct Frame;
84
86 struct VTKRENDERINGCORE_EXPORT Event
87 {
89 std::string Name;
90
92 vtkTypeUInt64 StartTime;
93 vtkTypeUInt64 EndTime;
97 float ElapsedTimeSeconds() const { return this->ElapsedTimeNanoseconds() * 1e-9f; }
98 float ElapsedTimeMilliseconds() const { return this->ElapsedTimeNanoseconds() * 1e-6f; }
99 vtkTypeUInt64 ElapsedTimeNanoseconds() const { return this->EndTime - this->StartTime; }
100
102 std::vector<Event> Events;
103
109 void Print(std::ostream& os, float threshMs = 0.f, vtkIndent indent = vtkIndent())
110 {
111 this->Print(os, 0.f, threshMs, indent);
112 }
113
115
116 protected:
117 void Print(std::ostream& os, float parentTime, float threshMs, vtkIndent indent);
118 };
119
121 struct VTKRENDERINGCORE_EXPORT Frame
122 {
123 std::vector<Event> Events;
124
129 void Print(std::ostream& os, float threshMs = 0.f);
130 };
131
137 struct VTKRENDERINGCORE_EXPORT ScopedEventLogger
138 {
140 : Log(nullptr)
141 {
142 }
145 ~ScopedEventLogger() { this->Stop(); }
146 void Stop();
147 friend class vtkRenderTimerLog;
148
149 protected:
151 : Log(log)
152 {
153 }
154
155 private:
156 void operator=(const ScopedEventLogger&) = delete;
157 ScopedEventLogger(const ScopedEventLogger& other) = delete;
159 };
160
163 void PrintSelf(ostream& os, vtkIndent indent) override;
164
169 virtual bool IsSupported() VTK_FUTURE_CONST;
170
175 virtual void MarkFrame();
176
180 ScopedEventLogger StartScopedEvent(const std::string& name);
181
185 virtual void MarkStartEvent(const std::string& name);
186 virtual void MarkEndEvent();
192 virtual bool FrameReady();
193
198 virtual Frame PopFirstReadyFrame();
199
201 vtkSetMacro(LoggingEnabled, bool);
202 vtkGetMacro(LoggingEnabled, bool);
203 vtkBooleanMacro(LoggingEnabled, bool);
211 vtkSetMacro(FrameLimit, unsigned int);
212 vtkGetMacro(FrameLimit, unsigned int);
218 virtual void ReleaseGraphicsResources();
219
220protected:
222 ~vtkRenderTimerLog() override;
223
224 mutable bool LoggingEnabled;
225 unsigned int FrameLimit;
226
227private:
228 vtkRenderTimerLog(const vtkRenderTimerLog&) = delete;
229 void operator=(const vtkRenderTimerLog&) = delete;
230};
231
232#endif // vtkRenderTimerLog_h
a simple class to control print indentation
Definition vtkIndent.h:34
void Print(ostream &os)
Print an object to an ostream.
abstract base class for most VTK objects
Definition vtkObject.h:57
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