class to derive an executor observer
The tf::ObserverInterface class allows users to define custom methods to monitor the behaviors of an executor. This is particularly useful when you want to inspect the performance of an executor and visualize when each thread participates in the execution of a task. To prevent users from direct access to the internal threads and tasks, tf::ObserverInterface provides immutable wrappers, tf::WorkerView and tf::TaskView, over workers and tasks.
Please refer to tf::WorkerView and tf::TaskView for details.
Example usage:
MyObserver(const std::string& name) {
std::cout << "constructing observer " << name << '\n';
}
void set_up(
size_t num_workers)
override final {
std::cout << "setting up observer with " << num_workers << " workers\n";
}
std::ostringstream oss;
oss << "worker " << w.id() << " ready to run " << tv.name() << '\n';
std::cout << oss.str();
}
void on_exit(WorkerView w, tf::TaskView tv)
override final {
std::ostringstream oss;
oss << "worker " << w.id() << " finished running " << tv.name() << '\n';
std::cout << oss.str();
}
};
tf::Taskflow taskflow;
tf::Executor executor;
std::shared_ptr<MyObserver> observer = executor.
make_observer<MyObserver>(
"MyObserver");
executor.
run(taskflow).wait();
tf::Future< void > run(Taskflow &taskflow)
runs a taskflow once
std::shared_ptr< Observer > make_observer(ArgsT &&... args)
constructs an observer to inspect the activities of worker threads
class to derive an executor observer
Definition observer.hpp:169
virtual void set_up(size_t num_workers)=0
constructor-like method to call when the executor observer is fully created
virtual void on_entry(WorkerView wv, TaskView task_view)=0
method to call before a worker thread executes a closure
virtual void on_exit(WorkerView wv, TaskView task_view)=0
method to call after a worker thread executed a closure
class to access task information from the observer interface
Definition task.hpp:1235