Flutter Engine Uber Docs
Docs for the entire Flutter Engine repo.
 
Loading...
Searching...
No Matches
task_runner.cc
Go to the documentation of this file.
1// Copyright 2013 The Flutter Authors. All rights reserved.
2// Use of this source code is governed by a BSD-style license that can be
3// found in the LICENSE file.
4
5#define FML_USED_ON_EMBEDDER
6
9
10#include <utility>
11
12#include "flutter/fml/logging.h"
17
18namespace fml {
19
22
23TaskRunner::~TaskRunner() = default;
24
26 loop_->PostTask(task, fml::TimePoint::Now());
27}
28
30 fml::TimePoint target_time) {
31 loop_->PostTask(task, target_time);
32}
33
35 fml::TimeDelta delay) {
36 loop_->PostTask(task, fml::TimePoint::Now() + delay);
37}
38
40 FML_DCHECK(loop_);
41 return loop_->GetTaskQueueId();
42}
43
46 return false;
47 }
48
49 const auto current_queue_id = MessageLoop::GetCurrentTaskQueueId();
50 const auto loop_queue_id = loop_->GetTaskQueueId();
51
52 return TaskRunnerChecker::RunsOnTheSameThread(current_queue_id,
53 loop_queue_id);
54}
55
56// static
58 const fml::closure& task) {
59 FML_DCHECK(runner);
60 if (runner->RunsTasksOnCurrentThread()) {
61 task();
62 } else {
63 runner->PostTask(task);
64 }
65}
66
67// static
69 const fml::RefPtr<fml::TaskRunner>& runner,
70 const fml::closure& task) {
71 FML_DCHECK(runner);
72 if (runner->RunsTasksOnCurrentThread()) {
73 task();
74 // Post an empty task to make the UI message loop run its task observers.
75 // The observers will execute any Dart microtasks queued by the platform
76 // message handler.
77 runner->PostTask([] {});
78 } else {
79 runner->PostTask(task);
80 }
81}
82
83} // namespace fml
static bool IsInitializedForCurrentThread()
static TaskQueueId GetCurrentTaskQueueId()
static bool RunsOnTheSameThread(TaskQueueId queue_a, TaskQueueId queue_b)
static void RunNowOrPostTask(const fml::RefPtr< fml::TaskRunner > &runner, const fml::closure &task)
virtual ~TaskRunner()
static void RunNowAndFlushMessages(const fml::RefPtr< fml::TaskRunner > &runner, const fml::closure &task)
virtual void PostTaskForTime(const fml::closure &task, fml::TimePoint target_time)
virtual void PostTask(const fml::closure &task) override
TaskRunner(fml::RefPtr< MessageLoopImpl > loop)
virtual bool RunsTasksOnCurrentThread()
virtual TaskQueueId GetTaskQueueId()
virtual void PostDelayedTask(const fml::closure &task, fml::TimeDelta delay)
static TimePoint Now()
Definition time_point.cc:49
#define FML_DCHECK(condition)
Definition logging.h:122
std::function< void()> closure
Definition closure.h:14
Definition ref_ptr.h:261