# tf::ObserverInterface class
#include <taskflow/core/observer.hpp>

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

Tab / T to search, Esc to close
…

Search for symbols, directories, files, pages or modules. You can omit any prefix from the symbol or file path; adding a `:` or `/` suffix lists all members of given symbol or directory.

Use ↓ / ↑ to navigate through the list, Enter to go. Tab autocompletes common prefix, you can copy a link to the result using ⌘ L while ⌘ M produces a Markdown link.

Sorry, nothing was found.