Flutter Engine
 
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"
16
17namespace fml {
18
21
22TaskRunner::~TaskRunner() = default;
23
25 loop_->PostTask(task, fml::TimePoint::Now());
26}
27
29 fml::TimePoint target_time) {
30 loop_->PostTask(task, target_time);
31}
32
34 fml::TimeDelta delay) {
35 loop_->PostTask(task, fml::TimePoint::Now() + delay);
36}
37
39 FML_DCHECK(loop_);
40 return loop_->GetTaskQueueId();
41}
42
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}
54
55// static
57 const fml::closure& task) {
58 FML_DCHECK(runner);
59 if (runner->RunsTasksOnCurrentThread()) {
60 task();
61 } else {
62 runner->PostTask(task);
63 }
64}
65
66// static
68 const fml::RefPtr<fml::TaskRunner>& runner,
69 const fml::closure& task) {
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}
81
82} // 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