VTK  9.1.0
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();
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
199
201 vtkSetMacro(LoggingEnabled, bool);
202 vtkGetMacro(LoggingEnabled, bool);
203 vtkBooleanMacro(LoggingEnabled, bool);
211 vtkSetMacro(FrameLimit, unsigned int);
212 vtkGetMacro(FrameLimit, unsigned int);
219
220protected:
223
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:113
void Print(ostream &os)
Print an object to an ostream.
abstract base class for most VTK objects
Definition: vtkObject.h:82
Asynchronously measures GPU execution times for a series of events.
virtual void MarkStartEvent(const std::string &name)
Mark the beginning or end of an event.
virtual bool IsSupported()
Returns true if stream timings are implemented for the current graphics backend.
virtual void MarkEndEvent()
Mark the beginning or end of an event.
virtual void MarkFrame()
Call to mark the start of a new frame, or the end of an old one.
ScopedEventLogger StartScopedEvent(const std::string &name)
Create a RAII scoped event.
void PrintSelf(ostream &os, vtkIndent indent) override
Methods invoked by print to print information about the object including superclasses.
virtual void ReleaseGraphicsResources()
Releases any resources allocated on the graphics device.
~vtkRenderTimerLog() override
unsigned int FrameLimit
static vtkRenderTimerLog * New()
virtual Frame PopFirstReadyFrame()
Retrieve the first available frame's timing info.
virtual bool FrameReady()
Returns true if there are any frames ready with complete timing info.
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