class TaskRunner
Defined at line 40 of file ../../third_party/perfetto/include/perfetto/base/task_runner.h
A generic interface to allow the library clients to interleave the execution
of the tracing internals in their runtime environment.
The expectation is that all tasks, which are queued either via PostTask() or
AddFileDescriptorWatch(), are executed on the same sequence (either on the
same thread, or on a thread pool that gives sequencing guarantees).
Tasks are never executed synchronously inside PostTask and there is a full
memory barrier between tasks.
All methods of this interface can be called from any thread.
Public Methods
void ~TaskRunner ()
void PostTask (std::function<void ()> )
Schedule a task for immediate execution. Immediate tasks are always
executed in the order they are posted. Can be called from any thread.
void PostDelayedTask (std::function<void ()> , uint32_t delay_ms)
Schedule a task for execution after |delay_ms|. Note that there is no
strict ordering guarantee between immediate and delayed tasks. Can be
called from any thread.
void AddFileDescriptorWatch (PlatformHandle , std::function<void ()> )
Schedule a task to run when the handle becomes readable. The same handle
can only be monitored by one function. Note that this function only needs
to be implemented on platforms where the built-in ipc framework is used.
Can be called from any thread.
TODO(skyostil): Refactor this out of the shared interface.
void RemoveFileDescriptorWatch (PlatformHandle )
Remove a previously scheduled watch for the handle. If this is run on the
target thread of this TaskRunner, guarantees that the task registered to
this handle will not be executed after this function call.
Can be called from any thread.
bool RunsTasksOnCurrentThread ()
Checks if the current thread is the same thread where the TaskRunner's task
run. This allows single threaded task runners (like the ones used in
perfetto) to inform the caller that anything posted will run on the same
thread/sequence. This can allow some callers to skip PostTask and instead
directly execute the code. Can be called from any thread.