tf::ObserverInterface class

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:

struct MyObserver : public tf::ObserverInterface {

  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";
  }

  void on_entry(WorkerView w, tf::TaskView tv) override final {
    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;

// insert tasks into taskflow
// ...
  
// create a custom observer
std::shared_ptr<MyObserver> observer = executor.make_observer<MyObserver>("MyObserver");

// run the taskflow
executor.run(taskflow).wait();

Derived classes

class ChromeObserver
class to create an observer based on Chrome tracing format
class TFProfObserver
class to create an observer based on the built-in taskflow profiler format

Constructors, destructors, conversion operators

~ObserverInterface() defaulted virtual
virtual destructor

Public functions

void set_up(size_t num_workers) pure virtual
constructor-like method to call when the executor observer is fully created
void on_entry(WorkerView wv, TaskView task_view) pure virtual
method to call before a worker thread executes a closure
void on_exit(WorkerView wv, TaskView task_view) pure virtual
method to call after a worker thread executed a closure

Function documentation

void tf::ObserverInterface::set_up(size_t num_workers) pure virtual

constructor-like method to call when the executor observer is fully created

Parameters
num_workers the number of the worker threads in the executor

void tf::ObserverInterface::on_entry(WorkerView wv, TaskView task_view) pure virtual

method to call before a worker thread executes a closure

Parameters
wv an immutable view of this worker thread
task_view a constant wrapper object to the task

void tf::ObserverInterface::on_exit(WorkerView wv, TaskView task_view) pure virtual

method to call after a worker thread executed a closure

Parameters
wv an immutable view of this worker thread
task_view a constant wrapper object to the task