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