Flutter Engine
 
Loading...
Searching...
No Matches
fml::TaskRunner Class Reference

#include <task_runner.h>

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

Public Member Functions

virtual ~TaskRunner ()
 
virtual void PostTask (const fml::closure &task) override
 
virtual void PostTaskForTime (const fml::closure &task, fml::TimePoint target_time)
 
virtual void PostDelayedTask (const fml::closure &task, fml::TimeDelta delay)
 
virtual bool RunsTasksOnCurrentThread ()
 
virtual TaskQueueId GetTaskQueueId ()
 
- 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
 

Static Public Member Functions

static void RunNowOrPostTask (const fml::RefPtr< fml::TaskRunner > &runner, const fml::closure &task)
 
static void RunNowAndFlushMessages (const fml::RefPtr< fml::TaskRunner > &runner, const fml::closure &task)
 

Protected Member Functions

 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

The object for scheduling tasks on a fml::MessageLoop.

Typically there is one TaskRunner associated with each thread. When one wants to execute an operation on that thread they post a task to the TaskRunner.

See also
fml::MessageLoop

Definition at line 34 of file task_runner.h.

Constructor & Destructor Documentation

◆ ~TaskRunner()

fml::TaskRunner::~TaskRunner ( )
virtualdefault

◆ TaskRunner()

fml::TaskRunner::TaskRunner ( fml::RefPtr< MessageLoopImpl loop)
explicitprotected

Definition at line 19 of file task_runner.cc.

20 : loop_(std::move(loop)) {}

Member Function Documentation

◆ GetTaskQueueId()

TaskQueueId fml::TaskRunner::GetTaskQueueId ( )
virtual

◆ PostDelayedTask()

void fml::TaskRunner::PostDelayedTask ( const fml::closure task,
fml::TimeDelta  delay 
)
virtual

Schedules a task to be run on the MessageLoop after the time delay has passed.

Note
There is latency between when the task is schedule and actually executed so that the actual execution time is: now + delay + message_loop_latency, where message_loop_latency is undefined and could be tens of milliseconds.

Reimplemented in flutter_runner::CompatTaskRunner.

Definition at line 33 of file task_runner.cc.

34 {
35 loop_->PostTask(task, fml::TimePoint::Now() + delay);
36}
static TimePoint Now()
Definition time_point.cc:49

References fml::TimePoint::Now().

Referenced by flutter::UnrefQueue< T >::DeleteTexture(), flutter::testing::PendingTests::OnTestBegin(), flutter::testing::TEST_F(), flutter::testing::TEST_F(), and flutter::UnrefQueue< T >::Unref().

◆ PostTask()

void fml::TaskRunner::PostTask ( const fml::closure task)
overridevirtual

Schedules task to be executed on the TaskRunner's associated event loop.

Implements fml::BasicTaskRunner.

Reimplemented in flutter_runner::CompatTaskRunner.

Definition at line 24 of file task_runner.cc.

24 {
25 loop_->PostTask(task, fml::TimePoint::Now());
26}

References fml::TimePoint::Now().

Referenced by flutter::BM_PlatformMessageResponseDartComplete(), flutter::ScriptCompletionTaskObserver::DidProcessTask(), flutter::testing::ShellTest::DispatchPointerData(), flutter::Rasterizer::Draw(), flutter::EncodeImage(), flutter::VsyncWaiter::FireCallback(), flutter::PlatformViewEmbedder::EmbedderPlatformMessageHandler::HandlePlatformMessage(), flutter::ImageDecoderImpeller::ImageDecoderImpeller(), flutter::FragmentProgram::initFromAsset(), fml::Thread::Join(), flutter::testing::ShellTest::NotifyIdle(), flutter::GTestActivity::OnNativeWindowCreated(), flutter::testing::ShellTest::PumpOneFrame(), flutter::PersistentCache::Purge(), flutter::Engine::Run(), flutter::testing::ShellTest::SetViewportMetrics(), flutter::testing::SkiaGpuObjectTest::SkiaGpuObjectTest(), flutter::AndroidExternalViewEmbedder2::SubmitFlutterView(), flutter::testing::TEST(), flutter::testing::TEST(), flutter::testing::TEST(), fml::testing::TEST(), fml::testing::TEST(), fml::testing::TEST(), fml::testing::TEST(), TEST(), TEST(), flutter_runner::TEST(), flutter::testing::TEST_F(), flutter::testing::TEST_F(), flutter::testing::TEST_F(), flutter::testing::TEST_F(), flutter::testing::TEST_F(), flutter::testing::TEST_F(), flutter::testing::TEST_F(), flutter::testing::TEST_F(), flutter::testing::TEST_F(), flutter::testing::TEST_F(), flutter::testing::TEST_F(), flutter::testing::TEST_F(), flutter::testing::TEST_F(), flutter::testing::TEST_F(), flutter::testing::TEST_F(), flutter::testing::TEST_F(), flutter::testing::TEST_F(), flutter::testing::TestSimulatedInputEvents(), flutter::PlatformMessageResponseDart::~PlatformMessageResponseDart(), and flutter::testing::TestTimeoutListener::~TestTimeoutListener().

◆ PostTaskForTime()

void fml::TaskRunner::PostTaskForTime ( const fml::closure task,
fml::TimePoint  target_time 
)
virtual

Reimplemented in flutter_runner::CompatTaskRunner.

Definition at line 28 of file task_runner.cc.

29 {
30 loop_->PostTask(task, target_time);
31}

Referenced by flutter::VsyncWaiterEmbedder::OnEmbedderVsync(), TEST(), and flutter_runner::VsyncWaiter::VsyncWaiter().

◆ RunNowAndFlushMessages()

void fml::TaskRunner::RunNowAndFlushMessages ( const fml::RefPtr< fml::TaskRunner > &  runner,
const fml::closure task 
)
static

Like RunNowOrPostTask, except that if the task can be immediately executed, an empty task will still be posted to the runner afterwards.

This is used to ensure that messages posted to Dart from the platform thread always flush the Dart event loop.

Definition at line 67 of file task_runner.cc.

69 {
70 FML_DCHECK(runner);
71 if (runner->RunsTasksOnCurrentThread()) {
72 task();
73 // Post an empty task to make the UI message loop run its task observers.
74 // The observers will execute any Dart microtasks queued by the platform
75 // message handler.
76 runner->PostTask([] {});
77 } else {
78 runner->PostTask(task);
79 }
80}
virtual void PostTask(const fml::closure &task) override
virtual bool RunsTasksOnCurrentThread()

References FML_DCHECK.

◆ RunNowOrPostTask()

void fml::TaskRunner::RunNowOrPostTask ( const fml::RefPtr< fml::TaskRunner > &  runner,
const fml::closure task 
)
static

Executes the task directly if the TaskRunner runner is the TaskRunner associated with the current executing thread.

Definition at line 56 of file task_runner.cc.

57 {
58 FML_DCHECK(runner);
59 if (runner->RunsTasksOnCurrentThread()) {
60 task();
61 } else {
62 runner->PostTask(task);
63 }
64}

References FML_DCHECK.

Referenced by flutter::ImageEncodingImpeller::ConvertImageToRaster(), flutter::testing::ShellTest::DestroyShell(), flutter::ScriptCompletionTaskObserver::DidProcessTask(), flutter::Picture::DoRasterizeToImage(), flutter::Animator::EnqueueTraceFlowId(), flutter::gpu::Context::GetDefaultContext(), flutter_runner::Engine::GetEngineReturnCode(), flutter::testing::GetRasterizerResourceCacheBytesSync(), flutter::HandleMessageOnHandler(), flutter::AndroidImageGenerator::MakeFromData(), flutter::PlatformViewAndroid::NotifyChanged(), flutter::PlatformView::NotifyCreated(), flutter::PlatformViewAndroid::NotifyCreated(), flutter::PlatformViewAndroid::NotifyDestroyed(), flutter::PlatformViewAndroid::NotifySurfaceWindowChanged(), flutter::testing::ShellTest::OnServiceProtocol(), flutter::testing::ShellTest::PlatformViewNotifyCreated(), flutter::testing::ShellTest::PlatformViewNotifyDestroyed(), flutter::testing::PostSync(), flutter::testing::RasterizerIsTornDown(), flutter::testing::ShellTest::RestartEngine(), flutter::testing::RunDartCodeInIsolate(), flutter::testing::ShellTest::RunEngine(), flutter::testing::AutoIsolateShutdown::RunInIsolateScope(), flutter::RunTester(), flutter::testing::ShellTest::SendEnginePlatformMessage(), flutter::testing::AutoIsolateShutdown::Shutdown(), flutter::Spawn(), flutter::StartupAndShutdownShell(), flutter::testing::TEST_F(), flutter::testing::TEST_F(), flutter::testing::TEST_F(), flutter::testing::TEST_F(), flutter::testing::TEST_F(), flutter::testing::TEST_F(), flutter::testing::TEST_F(), flutter::testing::TEST_F(), flutter::testing::TEST_F(), flutter::testing::TEST_F(), flutter::testing::TEST_F(), flutter::testing::TEST_F(), flutter::testing::TEST_F(), flutter::testing::TEST_F(), flutter::testing::TEST_F(), flutter::testing::TEST_F(), flutter::testing::TEST_F(), flutter::testing::TEST_F(), flutter::testing::TEST_F(), flutter::testing::TEST_F(), flutter::testing::TEST_F(), flutter::testing::TEST_F(), flutter::testing::TEST_F(), flutter::testing::TEST_F(), flutter::testing::ValidateShell(), flutter::testing::ShellTest::VSyncFlush(), flutter_runner::VsyncWaiter::VsyncWaiter(), flutter::AndroidContextGLSkia::~AndroidContextGLSkia(), flutter::testing::AutoIsolateShutdown::~AutoIsolateShutdown(), flutter::DlDeferredImageGPUSkia::~DlDeferredImageGPUSkia(), flutter::testing::TestIOManager::~TestIOManager(), and flutter_runner::VsyncWaiter::~VsyncWaiter().

◆ RunsTasksOnCurrentThread()

bool fml::TaskRunner::RunsTasksOnCurrentThread ( )
virtual

Returns true when the current executing thread's TaskRunner matches this instance.

Reimplemented in flutter_runner::CompatTaskRunner.

Definition at line 43 of file task_runner.cc.

43 {
45 return false;
46 }
47
48 const auto current_queue_id = MessageLoop::GetCurrentTaskQueueId();
49 const auto loop_queue_id = loop_->GetTaskQueueId();
50
51 return TaskRunnerChecker::RunsOnTheSameThread(current_queue_id,
52 loop_queue_id);
53}
static bool IsInitializedForCurrentThread()
static TaskQueueId GetCurrentTaskQueueId()
static bool RunsOnTheSameThread(TaskQueueId queue_a, TaskQueueId queue_b)

References fml::MessageLoop::GetCurrentTaskQueueId(), fml::MessageLoop::IsInitializedForCurrentThread(), and fml::TaskRunnerChecker::RunsOnTheSameThread().

Referenced by flutter::testing::ShellTestVsyncWaiter::AwaitVSync(), flutter::testing::ConstantFiringVsyncWaiter::AwaitVSync(), flutter::PlatformViewIOS::CreateRenderingSurface(), flutter::ImageDecoderSkia::Decode(), flutter::Rasterizer::Draw(), flutter::testing::EmbedderTestTaskRunner::EmbedderTestTaskRunner(), flutter::Shell::GetMainDisplayRefreshRate(), flutter::ImageDecoder::ImageDecoder(), flutter::testing::RunDartCodeInIsolateOnUITaskRunner(), flutter::EmbedderEngine::RunTask(), flutter::VsyncWaiter::ScheduleSecondaryCallback(), flutter::PlatformMessageHandlerIos::SetMessageHandler(), flutter::PlatformViewIOS::SetOwnerViewController(), flutter::testing::TEST_F(), flutter::testing::TEST_F(), flutter::testing::TEST_F(), flutter::testing::TEST_F(), flutter::testing::TEST_F(), flutter::testing::TEST_F(), and flutter::AndroidContextGLSkia::~AndroidContextGLSkia().


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