You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
133 lines
3.7 KiB
C
133 lines
3.7 KiB
C
3 weeks ago
|
/*=========================================================================
|
||
|
|
||
|
Program: Visualization Toolkit
|
||
|
Module: vtkAppendFilter.h
|
||
|
|
||
|
Copyright (c) Ken Martin, Will Schroeder, Bill Lorensen
|
||
|
All rights reserved.
|
||
|
See Copyright.txt or http://www.kitware.com/Copyright.htm for details.
|
||
|
|
||
|
This software is distributed WITHOUT ANY WARRANTY; without even
|
||
|
the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
|
||
|
PURPOSE. See the above copyright notice for more information.
|
||
|
|
||
|
=========================================================================*/
|
||
|
|
||
|
/**
|
||
|
* @class vtkExecutionTimer
|
||
|
* @brief Time filter execution
|
||
|
*
|
||
|
*
|
||
|
*
|
||
|
* This object monitors a single filter for StartEvent and EndEvent.
|
||
|
* Each time it hears StartEvent it records the time. Each time it
|
||
|
* hears EndEvent it measures the elapsed time (both CPU and
|
||
|
* wall-clock) since the most recent StartEvent. Internally we use
|
||
|
* vtkTimerLog for measurements.
|
||
|
*
|
||
|
* By default we simply store the elapsed time. You are welcome to
|
||
|
* subclass and override TimerFinished() to do anything you want.
|
||
|
*/
|
||
|
|
||
|
#ifndef vtkExecutionTimer_h
|
||
|
#define vtkExecutionTimer_h
|
||
|
|
||
|
#include "vtkFiltersCoreModule.h" // For export macro
|
||
|
#include "vtkObject.h"
|
||
|
|
||
|
class vtkAlgorithm;
|
||
|
class vtkCallbackCommand;
|
||
|
|
||
|
class VTKFILTERSCORE_EXPORT vtkExecutionTimer : public vtkObject
|
||
|
{
|
||
|
public:
|
||
|
vtkTypeMacro(vtkExecutionTimer, vtkObject);
|
||
|
void PrintSelf(ostream& os, vtkIndent indent) override;
|
||
|
|
||
|
/**
|
||
|
* Construct a new timer with no attached filter. Use SetFilter()
|
||
|
* to specify the vtkAlgorithm whose execution you want to time.
|
||
|
*/
|
||
|
static vtkExecutionTimer* New();
|
||
|
|
||
|
//@{
|
||
|
/**
|
||
|
* Set/get the filter to be monitored. The only real constraint
|
||
|
* here is that the vtkExecutive associated with the filter must
|
||
|
* fire StartEvent and EndEvent before and after the filter is
|
||
|
* executed. All VTK executives should do this.
|
||
|
*/
|
||
|
void SetFilter(vtkAlgorithm* filter);
|
||
|
vtkGetObjectMacro(Filter, vtkAlgorithm);
|
||
|
//@}
|
||
|
|
||
|
//@{
|
||
|
/**
|
||
|
* Get the total CPU time (in seconds) that elapsed between
|
||
|
* StartEvent and EndEvent. This is undefined before the filter has
|
||
|
* finished executing.
|
||
|
*/
|
||
|
vtkGetMacro(ElapsedCPUTime, double);
|
||
|
//@}
|
||
|
|
||
|
//@{
|
||
|
/**
|
||
|
* Get the total wall clock time (in seconds) that elapsed between
|
||
|
* StartEvent and EndEvent. This is undefined before the filter has
|
||
|
* finished executing.
|
||
|
*/
|
||
|
vtkGetMacro(ElapsedWallClockTime, double);
|
||
|
//@}
|
||
|
|
||
|
protected:
|
||
|
vtkExecutionTimer();
|
||
|
~vtkExecutionTimer() override;
|
||
|
|
||
|
// This is the observer that will catch StartEvent and hand off to
|
||
|
// EventRelay
|
||
|
vtkCallbackCommand* Callback;
|
||
|
|
||
|
// This is the filter that will be timed
|
||
|
vtkAlgorithm* Filter;
|
||
|
|
||
|
// These are where we keep track of the timestamps for start/end
|
||
|
double CPUStartTime;
|
||
|
double CPUEndTime;
|
||
|
|
||
|
double WallClockStartTime;
|
||
|
double WallClockEndTime;
|
||
|
|
||
|
double ElapsedCPUTime;
|
||
|
double ElapsedWallClockTime;
|
||
|
|
||
|
//@{
|
||
|
/**
|
||
|
* Convenience functions -- StartTimer clears out the elapsed times
|
||
|
* and records start times; StopTimer records end times and computes
|
||
|
* the elapsed time
|
||
|
*/
|
||
|
void StartTimer();
|
||
|
void StopTimer();
|
||
|
//@}
|
||
|
|
||
|
/**
|
||
|
* This is where you can do anything you want with the progress
|
||
|
* event. By default this does nothing.
|
||
|
*/
|
||
|
virtual void TimerFinished();
|
||
|
|
||
|
/**
|
||
|
* This is the callback that VTK will invoke when it sees StartEvent
|
||
|
* and EndEvent. Its responsibility is to pass the event on to an
|
||
|
* instance of this observer class.
|
||
|
*/
|
||
|
static void EventRelay(
|
||
|
vtkObject* caller, unsigned long eventId, void* clientData, void* callData);
|
||
|
|
||
|
private:
|
||
|
vtkExecutionTimer(const vtkExecutionTimer&) = delete;
|
||
|
void operator=(const vtkExecutionTimer&) = delete;
|
||
|
};
|
||
|
|
||
|
#endif
|