Flutter Engine
flutter::EmbedderTaskRunner Class Referencefinal

#include <embedder_task_runner.h>

Inheritance diagram for flutter::EmbedderTaskRunner:
fml::TaskRunner fml::RefCountedThreadSafe< TaskRunner > fml::internal::RefCountedThreadSafeBase

Classes

struct  DispatchTable
 A. More...
 

Public Member Functions

 EmbedderTaskRunner (DispatchTable table, size_t embedder_identifier)
 Create a task runner with a dispatch table for delegation of task runner responsibility to the embedder. When embedders specify task runner dispatch tables that service tasks on the same thread, they also must ensure that their embedder_idetifiers match. This allows the engine to determine task runner equality without actually posting tasks to the task runner. More...
 
 ~EmbedderTaskRunner () override
 
size_t GetEmbedderIdentifier () const
 The unique identifier provided by the embedder for the task runner. Embedders whose dispatch tables service tasks on the same underlying OS thread must ensure that their identifiers match. This allows the engine to determine task runner equality without posting tasks on the thread. More...
 
bool PostTask (uint64_t baton)
 
- Public Member Functions inherited from fml::TaskRunner
virtual ~TaskRunner ()
 
- Public Member Functions inherited from fml::RefCountedThreadSafe< TaskRunner >
void Release () const
 
- Public Member Functions inherited from fml::internal::RefCountedThreadSafeBase
void AddRef () const
 
bool HasOneRef () const
 
void AssertHasOneRef () const
 

Additional Inherited Members

- Static Public Member Functions inherited from fml::TaskRunner
static void RunNowOrPostTask (fml::RefPtr< fml::TaskRunner > runner, const fml::closure &task)
 
- Protected Member Functions inherited from fml::TaskRunner
 TaskRunner (fml::RefPtr< MessageLoopImpl > loop)
 
- Protected Member Functions inherited from fml::RefCountedThreadSafe< TaskRunner >
 RefCountedThreadSafe ()
 
 ~RefCountedThreadSafe ()
 
- Protected Member Functions inherited from fml::internal::RefCountedThreadSafeBase
 RefCountedThreadSafeBase ()
 
 ~RefCountedThreadSafeBase ()
 
bool Release () const
 
void Adopt ()
 

Detailed Description

A task runner which delegates responsibility of task execution to an embedder. This is done by managing a dispatch table to the embedder.

Definition at line 20 of file embedder_task_runner.h.

Constructor & Destructor Documentation

◆ EmbedderTaskRunner()

flutter::EmbedderTaskRunner::EmbedderTaskRunner ( DispatchTable  table,
size_t  embedder_identifier 
)

Create a task runner with a dispatch table for delegation of task runner responsibility to the embedder. When embedders specify task runner dispatch tables that service tasks on the same thread, they also must ensure that their embedder_idetifiers match. This allows the engine to determine task runner equality without actually posting tasks to the task runner.

Parameters
[in]tableThe task runner dispatch table.
[in]embedder_identifierThe embedder identifier

Definition at line 12 of file embedder_task_runner.cc.

References FML_DCHECK, flutter::EmbedderTaskRunner::DispatchTable::post_task_callback, flutter::EmbedderTaskRunner::DispatchTable::runs_task_on_current_thread_callback, and ~EmbedderTaskRunner().

14  : TaskRunner(nullptr /* loop implemenation*/),
15  embedder_identifier_(embedder_identifier),
16  dispatch_table_(std::move(table)),
17  placeholder_id_(
18  fml::MessageLoopTaskQueues::GetInstance()->CreateTaskQueue()) {
19  FML_DCHECK(dispatch_table_.post_task_callback);
21 }
std::function< bool(void)> runs_task_on_current_thread_callback
#define FML_DCHECK(condition)
Definition: logging.h:86
static fml::RefPtr< MessageLoopTaskQueues > GetInstance()
std::function< void(EmbedderTaskRunner *task_runner, uint64_t task_baton, fml::TimePoint target_time)> post_task_callback
TaskRunner(fml::RefPtr< MessageLoopImpl > loop)
Definition: task_runner.cc:19

◆ ~EmbedderTaskRunner()

flutter::EmbedderTaskRunner::~EmbedderTaskRunner ( )
overridedefault

Referenced by EmbedderTaskRunner().

Member Function Documentation

◆ GetEmbedderIdentifier()

size_t flutter::EmbedderTaskRunner::GetEmbedderIdentifier ( ) const

The unique identifier provided by the embedder for the task runner. Embedders whose dispatch tables service tasks on the same underlying OS thread must ensure that their identifiers match. This allows the engine to determine task runner equality without posting tasks on the thread.

Returns
The embedder identifier.

Definition at line 25 of file embedder_task_runner.cc.

References fml::TimePoint::Now(), flutter::EmbedderTaskRunner::DispatchTable::post_task_callback, PostTask(), and flutter::EmbedderTaskRunner::DispatchTable::runs_task_on_current_thread_callback.

25  {
26  return embedder_identifier_;
27 }

◆ PostTask()

bool flutter::EmbedderTaskRunner::PostTask ( uint64_t  baton)

Definition at line 60 of file embedder_task_runner.cc.

References FML_DCHECK, and FML_LOG.

Referenced by GetEmbedderIdentifier().

60  {
61  fml::closure task;
62 
63  {
64  std::scoped_lock lock(tasks_mutex_);
65  auto found = pending_tasks_.find(baton);
66  if (found == pending_tasks_.end()) {
67  FML_LOG(ERROR) << "Embedder attempted to post an unknown task.";
68  return false;
69  }
70  task = found->second;
71  pending_tasks_.erase(found);
72 
73  // Let go of the tasks mutex befor executing the task.
74  }
75 
76  FML_DCHECK(task);
77  task();
78  return true;
79 }
#define FML_DCHECK(condition)
Definition: logging.h:86
#define FML_LOG(severity)
Definition: logging.h:65
std::function< void()> closure
Definition: closure.h:14

The documentation for this class was generated from the following files: