37#ifndef FilterGraphExecutor_h
38#define FilterGraphExecutor_h
40#include <condition_variable>
53 void RunBlocking(
const std::set<FlowGraphNode*>& nodes);
66 void DoExecutorThread(
size_t i);
83 std::vector<std::unique_ptr<std::thread>>
m_threads;
Execution manager / scheduler for the filter graph.
Definition: FilterGraphExecutor.h:48
FlowGraphNode * GetNextRunnableNode()
Returns the next filter available to run, blocking if none are ready.
Definition: FilterGraphExecutor.cpp:123
std::vector< std::unique_ptr< std::thread > > m_threads
Set of thread contexts.
Definition: FilterGraphExecutor.h:83
std::map< FlowGraphNode *, int64_t > m_currentExecutionTime
Performance statistics from current execution.
Definition: FilterGraphExecutor.h:107
std::condition_variable m_completionCvar
Condition variable for waking up main thread when work is complete.
Definition: FilterGraphExecutor.h:92
std::mutex m_perfStatsMutex
Mutex for updating performance statistics.
Definition: FilterGraphExecutor.h:110
std::set< FlowGraphNode * > m_incompleteNodes
Nodes that have not yet been updated.
Definition: FilterGraphExecutor.h:74
std::map< FlowGraphNode *, int64_t > GetRunTimes()
Get the run times of the most recent filter graph evaluation.
Definition: FilterGraphExecutor.h:58
std::map< FlowGraphNode *, int64_t > m_lastExecutionTime
Performance statistics from previous execution.
Definition: FilterGraphExecutor.h:104
void UpdateRunnable()
Searches m_incompleteNodes for any that are unblocked, and adds them to m_runnableNodes.
Definition: FilterGraphExecutor.cpp:160
std::set< FlowGraphNode * > m_runningNodes
Nodes that are actively being run.
Definition: FilterGraphExecutor.h:80
std::mutex m_completionCvarMutex
Mutex for access to m_completionCvar.
Definition: FilterGraphExecutor.h:95
std::mutex m_mutex
Mutex for access to shared state.
Definition: FilterGraphExecutor.h:71
bool m_terminating
Shutdown flag.
Definition: FilterGraphExecutor.h:101
std::mutex m_workerCvarMutex
Mutex for access to m_workerCvar.
Definition: FilterGraphExecutor.h:89
bool m_allWorkersComplete
Indicates that all worker threads have finished executing this pass.
Definition: FilterGraphExecutor.h:98
std::set< FlowGraphNode * > m_runnableNodes
Nodes that have no dependencies and are eligible to run now.
Definition: FilterGraphExecutor.h:77
static void ExecutorThread(FilterGraphExecutor *pThis, size_t i)
Thread function to handle filter graph execution.
Definition: FilterGraphExecutor.cpp:198
std::condition_variable m_workerCvar
Condition variable for waking up worker threads when work arrives.
Definition: FilterGraphExecutor.h:86
void RunBlocking(const std::set< FlowGraphNode * > &nodes)
Evaluates the filter graph, blocking until execution has completed.
Definition: FilterGraphExecutor.cpp:68
Abstract base class for a node in the signal flow graph.
Definition: FlowGraphNode.h:54