Inviwo 0.9.12-pre
Inviwo documentation
Loading...
Searching...
No Matches
inviwo::PoolProcessor Class Reference

#include <poolprocessor.h>

+ Inheritance diagram for inviwo::PoolProcessor:

Public Member Functions

 PoolProcessor (pool::Options options=pool::Options{flags::empty}, const std::string &identifier="", const std::string &displayName="")
 
void stopJobs ()
 
bool hasJobs ()
 
template<typename Job , typename Done >
void dispatchOne (Job &&job, Done &&done)
 
template<typename Job , typename Done >
void dispatchMany (std::vector< Job > jobs, Done &&done)
 
virtual std::string handleError ()
 
const std::optional< std::string > & error () const
 
void newResults ()
 
void newResults (const std::vector< Outport * > &outports)
 
virtual void invalidate (InvalidationLevel invalidationLevel, Property *source=nullptr) override
 
pool::Options getOptions () const
 
bool keepOldJobs () const
 
bool queuedDispatch () const
 
bool delayDispatch () const
 
bool delayInvalidation () const
 
- Public Member Functions inherited from inviwo::Processor
 Processor (std::string_view identifier="", std::string_view displayName="")
 
virtual const ProcessorInfogetProcessorInfo () const =0
 
const std::string & getClassIdentifier () const
 
const std::string & getCategory () const
 
CodeState getCodeState () const
 
const TagsgetTags () const
 
void setIdentifier (std::string_view identifier)
 
virtual const std::string & getIdentifier () const override
 
NameDispatcherHandle onIdentifierChange (std::function< void(std::string_view, std::string_view)> callback)
 
void setDisplayName (std::string_view displayName)
 
const std::string & getDisplayName () const
 
NameDispatcherHandle onDisplayNameChange (std::function< void(std::string_view, std::string_view)> callback)
 
virtual void setProcessorWidget (std::unique_ptr< ProcessorWidget > processorWidget)
 
ProcessorWidgetgetProcessorWidget () const
 
bool hasProcessorWidget () const
 
virtual void setNetwork (ProcessorNetwork *network)
 
ProcessorNetworkgetNetwork () const
 
virtual void initializeResources ()
 
PortgetPort (std::string_view identifier) const
 
InportgetInport (std::string_view identifier) const
 
OutportgetOutport (std::string_view identifier) const
 
const std::vector< Inport * > & getInports () const
 
const std::vector< Outport * > & getOutports () const
 
const std::string & getPortGroup (Port *port) const
 
std::vector< std::string > getPortGroups () const
 
const std::vector< Port * > & getPortsInGroup (std::string_view portGroup) const
 
const std::vector< Port * > & getPortsInSameGroup (Port *port) const
 
bool allInportsConnected () const
 
bool allInportsAreReady () const
 
bool isSource () const
 
bool isSink () const
 
bool isReady () const
 
const ProcessorStatusstatus () const
 
virtual void process ()
 
virtual void doIfNotReady ()
 
virtual void setValid () override
 
void addInteractionHandler (InteractionHandler *interactionHandler)
 
void removeInteractionHandler (InteractionHandler *interactionHandler)
 
bool hasInteractionHandler () const
 
const std::vector< InteractionHandler * > & getInteractionHandlers () const
 
virtual void invokeEvent (Event *event) override
 
virtual void propagateEvent (Event *event, Outport *source) override
 
virtual ProcessorgetProcessor () override
 
virtual const ProcessorgetProcessor () const override
 
virtual const PropertyOwnergetOwner () const override
 
virtual PropertyOwnergetOwner () override
 
virtual InviwoApplicationgetInviwoApplication () override
 
virtual void serialize (Serializer &s) const override
 
virtual void deserialize (Deserializer &d) override
 
template<typename T , typename std::enable_if_t< std::is_base_of< Inport, T >::value, int > = 0>
T & addPort (std::unique_ptr< T > port, std::string_view portGroup="default")
 
template<typename T , typename std::enable_if_t< std::is_base_of< Outport, T >::value, int > = 0>
T & addPort (std::unique_ptr< T > port, std::string_view portGroup="default")
 
template<typename T >
T & addPort (T &port, std::string_view portGroup="default")
 
template<typename... Ts>
void addPorts (Ts &... ports)
 
PortremovePort (std::string_view identifier)
 
InportremovePort (Inport *port)
 
OutportremovePort (Outport *port)
 
virtual bool isConnectionActive (Inport *inport, Outport *outport) const
 
virtual void accept (NetworkVisitor &visitor)
 Accept a NetworkVisitor, the visitor will visit this and then each Property of the Processor in an undefined order. The Visitor will then visit each Properties's properties and so on.
 
- Public Member Functions inherited from inviwo::PropertyOwner
virtual ~PropertyOwner ()
 Removes all properties and notifies its observers of the removal.
 
virtual void addProperty (Property *property, bool owner=true)
 
virtual void addProperty (Property &property)
 
virtual PropertyaddProperty (std::unique_ptr< Property > property)
 
template<typename... Ts>
void addProperties (Ts &... properties)
 
virtual void insertProperty (size_t index, Property *property, bool owner=true)
 insert property property at position index If index is not valid, the property is appended.
 
virtual void insertProperty (size_t index, Property &property)
 insert property property at position index If index is not valid, the property is appended.
 
virtual PropertyinsertProperty (size_t index, std::unique_ptr< Property > property)
 insert property property at position index If index is not valid, the property is appended.
 
virtual PropertyremoveProperty (std::string_view identifier)
 
virtual PropertyremoveProperty (Property *property)
 
virtual PropertyremoveProperty (Property &property)
 
virtual PropertyremoveProperty (size_t index)
 remove property referred to by index
 
virtual bool move (Property *property, size_t newIndex)
 
virtual void clear ()
 Remove all properties; Owned properties will be deleted.
 
const std::vector< Property * > & getProperties () const
 
const std::vector< CompositeProperty * > & getCompositeProperties () const
 
std::vector< Property * > getPropertiesRecursive () const
 
std::vector< Property * > & getPropertiesRecursive (std::vector< Property * > &destination) const
 
PropertygetPropertyByIdentifier (std::string_view identifier, bool recursiveSearch=false) const
 
PropertygetPropertyByPath (std::string_view path) const
 
template<class T >
std::vector< T * > getPropertiesByType (bool recursiveSearch=false) const
 
bool empty () const
 
size_t size () const
 
Propertyoperator[] (size_t)
 
const Propertyoperator[] (size_t) const
 
const_iterator find (Property *property) const
 
iterator begin ()
 
iterator end ()
 
const_iterator begin () const
 
const_iterator end () const
 
const_iterator cbegin () const
 
const_iterator cend () const
 
virtual bool isValid () const
 
InvalidationLevel getInvalidationLevel () const
 
virtual void setAllPropertiesCurrentStateAsDefault ()
 
virtual void resetAllProperties ()
 
- Public Member Functions inherited from inviwo::PropertyOwnerObservable
void notifyObserversWillAddProperty (PropertyOwner *owner, Property *property, size_t index)
 
void notifyObserversDidAddProperty (Property *property, size_t index)
 
void notifyObserversWillRemoveProperty (Property *property, size_t index)
 
void notifyObserversDidRemoveProperty (PropertyOwner *owner, Property *property, size_t index)
 
- Public Member Functions inherited from inviwo::Observable< PropertyOwnerObserver >
 Observable (const Observable< PropertyOwnerObserver > &other)
 
 Observable (Observable< PropertyOwnerObserver > &&other) noexcept
 
Observable< PropertyOwnerObserver > & operator= (const Observable< PropertyOwnerObserver > &other)
 
Observable< PropertyOwnerObserver > & operator= (Observable< PropertyOwnerObserver > &&other) noexcept
 
void addObserver (PropertyOwnerObserver *observer)
 
void removeObserver (PropertyOwnerObserver *observer)
 
virtual void startBlockingNotifications () override final
 
virtual void stopBlockingNotifications () override final
 
- Public Member Functions inherited from inviwo::ObservableInterface
- Public Member Functions inherited from inviwo::Serializable
- Public Member Functions inherited from inviwo::EventListener
- Public Member Functions inherited from inviwo::MetaDataOwner
 MetaDataOwner (const MetaDataOwner &rhs)=default
 
 MetaDataOwner (MetaDataOwner &rhs)=default
 
MetaDataOwneroperator= (const MetaDataOwner &rhs)=default
 
MetaDataOwneroperator= (MetaDataOwner &)=default
 
void copyMetaDataFrom (const MetaDataOwner &src)
 
void copyMetaDataTo (MetaDataOwner &dst)
 
template<typename T >
requires std::derived_from<T, MetaData>
T * createMetaData (std::string_view key)
 
template<typename T , typename U >
requires std::derived_from<T, MetaData> && Settable<T, U>
void setMetaData (std::string_view key, U value)
 
template<typename T >
requires std::derived_from<T, MetaData>
bool unsetMetaData (std::string_view key)
 unset, i.e. remove the metadata entry matching the given key and type
 
template<typename T , typename U >
requires std::derived_from<T, MetaData> && Gettable<T, U>
getMetaData (std::string_view key, U val) const
 
template<typename T >
requires std::derived_from<T, MetaData>
T * getMetaData (std::string_view key)
 
template<typename T >
requires std::derived_from<T, MetaData>
const T * getMetaData (std::string_view key) const
 
MetaDataMapgetMetaDataMap ()
 
const MetaDataMapgetMetaDataMap () const
 
bool hasMetaData (std::string_view key) const
 
template<typename T >
requires std::derived_from<T, MetaData>
bool hasMetaData (std::string_view key) const
 
void serialize (Serializer &s) const
 
void deserialize (Deserializer &d)
 
- Public Member Functions inherited from inviwo::Observable< ProcessorObserver >
 Observable (const Observable< ProcessorObserver > &other)
 
 Observable (Observable< ProcessorObserver > &&other) noexcept
 
Observable< ProcessorObserver > & operator= (const Observable< ProcessorObserver > &other)
 
Observable< ProcessorObserver > & operator= (Observable< ProcessorObserver > &&other) noexcept
 
void addObserver (ProcessorObserver *observer)
 
void removeObserver (ProcessorObserver *observer)
 
virtual void startBlockingNotifications () override final
 
virtual void stopBlockingNotifications () override final
 
- Public Member Functions inherited from inviwo::EventPropagator
- Public Member Functions inherited from inviwo::ProgressBarOwner
ProgressBargetProgressBar ()
 
const ProgressBargetProgressBar () const
 
void updateProgress (float progress)
 

Additional Inherited Members

- Public Types inherited from inviwo::Processor
using NameDispatcher = Dispatcher<void(std::string_view, std::string_view)>
 
using NameDispatcherHandle = typename NameDispatcher::Handle
 
- Public Types inherited from inviwo::PropertyOwner
using iterator = std::vector<Property*>::iterator
 
using const_iterator = std::vector<Property*>::const_iterator
 
- Protected Member Functions inherited from inviwo::Processor
void addPortToGroup (Port *port, std::string_view portGroup)
 
void removePortFromGroups (Port *port)
 
void setInportsChanged (bool changed)
 
- Protected Member Functions inherited from inviwo::PropertyOwner
 PropertyOwner (const PropertyOwner &rhs)
 
PropertyOwneroperator= (const PropertyOwner &that)=delete
 
void forEachProperty (std::function< void(Property &)> callback, bool recursiveSearch=false) const
 
- Protected Member Functions inherited from inviwo::Observable< PropertyOwnerObserver >
void forEachObserver (C callback)
 
- Protected Member Functions inherited from inviwo::ObservableInterface
void addObservationHelper (Observer *observer)
 
void removeObservationHelper (Observer *observer)
 
- Protected Member Functions inherited from inviwo::ProcessorObservable
void notifyObserversAboutPropertyChange (Property *p)
 
void notifyObserversInvalidationBegin (Processor *p)
 
void notifyObserversInvalidationEnd (Processor *p)
 
void notifyObserversProcessorPortAdded (Processor *p, Port *port)
 
void notifyObserversProcessorPortRemoved (Processor *p, Port *port)
 
void notifyObserversAboutToProcess (Processor *p)
 
void notifyObserversFinishedProcess (Processor *p)
 
void notifyObserversSourceChange (Processor *p)
 
void notifyObserversSinkChange (Processor *p)
 
void notifyObserversReadyChange (Processor *p)
 
void notifyObserversActiveConnectionsChange (Processor *p)
 
void notifyObserversStartBackgroundWork (Processor *p, size_t jobs=1)
 
void notifyObserversFinishBackgroundWork (Processor *p, size_t jobs=1)
 
- Protected Member Functions inherited from inviwo::Observable< ProcessorObserver >
void forEachObserver (C callback)
 
- Static Protected Member Functions inherited from inviwo::Processor
static std::function< ProcessorStatus()> getDefaultIsReadyUpdater (Processor *)
 
- Protected Attributes inherited from inviwo::Processor
std::unique_ptr< ProcessorWidgetprocessorWidget_
 
StateCoordinator< ProcessorStatusisReady_
 
StateCoordinator< bool > isSink_
 
StateCoordinator< bool > isSource_
 
- Protected Attributes inherited from inviwo::PropertyOwner
std::vector< Property * > properties_
 
std::vector< EventProperty * > eventProperties_
 
std::vector< CompositeProperty * > compositeProperties_
 
std::vector< std::unique_ptr< Property > > ownedProperties_
 
- Protected Attributes inherited from inviwo::MetaDataOwner
MetaDataMap metaData_
 
- Protected Attributes inherited from inviwo::ProcessorObservable
friend ProcessorNetworkEvaluator
 
friend Property
 
- Protected Attributes inherited from inviwo::ProgressBarOwner
ProgressBar progressBar_
 

Detailed Description

PoolProcessor is a base class to help make processors that dispatch work to the thread pool.

Constructor & Destructor Documentation

◆ PoolProcessor()

inviwo::PoolProcessor::PoolProcessor ( pool::Options options = pool::Options{flags::empty},
const std::string & identifier = "",
const std::string & displayName = "" )

Construct the pool processor with given options.

See also
pool::Option

Member Function Documentation

◆ delayDispatch()

bool inviwo::PoolProcessor::delayDispatch ( ) const
inline

◆ delayInvalidation()

bool inviwo::PoolProcessor::delayInvalidation ( ) const
inline

◆ dispatchMany()

template<typename Job , typename Done >
void inviwo::PoolProcessor::dispatchMany ( std::vector< Job > jobs,
Done && done )

Dispatch a vector of background jobs. The jobs will be executed in a background thread in the thread pool. It is important that the jobs captures its state by value, since it might outlive the processor. The jobs can take two optional parameters

  • pool::Stop a stop token to periodically check if the job has been canceled.
  • pool::Progress a callback to report progress of the calculation. The progress is represented as a float in the interval [0.0, 1.0]. The progress is automatically normalized across all the jobs If the jobs takes a progress callback the processor will show a progress bar. The progress from all the jobs will automatically be merged and normalized

The second functor 'done' is called with the results when the background jobs are finished. It will be executed on the main thread, and only if the processor is still valid and the jobs have not been stopped. Hence it is safe to refer to the processor in this functor.

std::vector<std::function<std::shared_ptr<Mesh>(pool::Stop, pool::Progress progress)>> jobs;
for (...) {
jobs.push_back([some state](pool::Stop stop, pool::Progress progress) {
if (stop) return nullptr;
// construct some new Mesh
progress(0.5f);
return newMesh;
});
}
dispatchMany(jobs, [this](std::vector<std::shared_ptr<Mesh>> results) {
outport_.setData(std::make_shared<std::vector<std::shared_ptr<Mesh>>>(results));
});
void dispatchMany(std::vector< Job > jobs, Done &&done)
Definition poolprocessor.h:435
Definition poolprocessor.h:103
Definition poolprocessor.h:77

◆ dispatchOne()

template<typename Job , typename Done >
void inviwo::PoolProcessor::dispatchOne ( Job && job,
Done && done )

Dispatch a single background job. The job will be executed in a background thread in the thread pool. It is important that the job captures its state by value, since it might outlive the processor. The job can take two optional parameters

  • pool::Stop a stop token to periodically check if the job has been canceled.
  • pool::Progress a callback to report progress of the calculation. The progress is represented as a float in the interval [0.0, 1.0]. If the job takes a progress callback the processor will show a progress bar. The second functor done is called with the result when the background job is finished. It will be executed on the main thread, and only if the processor is still valid and the job has not been stopped. Hence it is safe to refer to the processor in this functor.
const auto calc = [image = inport_.getData()]
( pool::Stop stop, pool::Progress progress) -> std::shared_ptr<const Image> {
if (stop) return nullptr;
auto newImage = std::shared_ptr<Image>(image->clone());
progress(0.5f);
// Do some work with the image
return newImage;
};
dispatchOne(calc, [this](std::shared_ptr<const Image> result) {
outport_.setData(result);
newResults(); // Let the network know that the processor has new results on the
// outport.
});
void dispatchOne(Job &&job, Done &&done)
Definition poolprocessor.h:487

◆ error()

const std::optional< std::string > & inviwo::PoolProcessor::error ( ) const

@retuns the last error return by handleError if any. The error is clear at any invalidation.

◆ getOptions()

pool::Options inviwo::PoolProcessor::getOptions ( ) const
inline

Get the current Options

See also
pool::Option

◆ handleError()

virtual std::string inviwo::PoolProcessor::handleError ( )
virtual

handleError is called on the main thread whenever there has be an error in a background calculation this will by default just log the error message, and clear any outports. Deriving classes can overload this and rethrow the caught exception to enable custom error handling if needed.

◆ hasJobs()

bool inviwo::PoolProcessor::hasJobs ( )

Are there any ongoing background jobs

◆ invalidate()

virtual void inviwo::PoolProcessor::invalidate ( InvalidationLevel invalidationLevel,
Property * source = nullptr )
overridevirtual

Overrides Processor::invalidate to customize the invalidation behavior We generally only want to invalidate the dependent processor when we put data on our outports.

Reimplemented from inviwo::Processor.

◆ keepOldJobs()

bool inviwo::PoolProcessor::keepOldJobs ( ) const
inline

◆ newResults() [1/2]

void inviwo::PoolProcessor::newResults ( )

Call newResults to let the network know we have new data on our outports.

◆ newResults() [2/2]

void inviwo::PoolProcessor::newResults ( const std::vector< Outport * > & outports)

Call newResults to let the network know we have new data on our outports. Only invalidate the specified outports. Use this if you only set data to a subset of the outports.

◆ queuedDispatch()

bool inviwo::PoolProcessor::queuedDispatch ( ) const
inline

◆ stopJobs()

void inviwo::PoolProcessor::stopJobs ( )

Cancel all current jobs


The documentation for this class was generated from the following file: