• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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 #ifndef FLUTTER_SHELL_PLATFORM_EMBEDDER_EMBEDDER_TASK_RUNNER_H_
6 #define FLUTTER_SHELL_PLATFORM_EMBEDDER_EMBEDDER_TASK_RUNNER_H_
7 
8 #include <mutex>
9 #include <unordered_map>
10 
11 #include "flutter/fml/macros.h"
12 #include "flutter/fml/synchronization/thread_annotations.h"
13 #include "flutter/fml/task_runner.h"
14 
15 namespace flutter {
16 
17 class EmbedderTaskRunner final : public fml::TaskRunner {
18  public:
19   struct DispatchTable {
20     std::function<void(EmbedderTaskRunner* task_runner,
21                        uint64_t task_baton,
22                        fml::TimePoint target_time)>
23         post_task_callback;
24     std::function<bool(void)> runs_task_on_current_thread_callback;
25   };
26 
27   EmbedderTaskRunner(DispatchTable table);
28 
29   ~EmbedderTaskRunner() override;
30 
31   bool PostTask(uint64_t baton);
32 
33   // |fml::TaskRunner|
34   void PostTask(fml::closure task) override;
35 
36   // |fml::TaskRunner|
37   void PostTaskForTime(fml::closure task, fml::TimePoint target_time) override;
38 
39   // |fml::TaskRunner|
40   void PostDelayedTask(fml::closure task, fml::TimeDelta delay) override;
41 
42   // |fml::TaskRunner|
43   bool RunsTasksOnCurrentThread() override;
44 
45  private:
46   DispatchTable dispatch_table_;
47   std::mutex tasks_mutex_;
48   uint64_t last_baton_ FML_GUARDED_BY(tasks_mutex_);
49   std::unordered_map<uint64_t, fml::closure> pending_tasks_
50       FML_GUARDED_BY(tasks_mutex_);
51 
52   FML_DISALLOW_COPY_AND_ASSIGN(EmbedderTaskRunner);
53 };
54 
55 }  // namespace flutter
56 
57 #endif  // FLUTTER_SHELL_PLATFORM_EMBEDDER_EMBEDDER_TASK_RUNNER_H_
58