| // Copyright 2013 The Flutter Authors. All rights reserved. | |
| // Use of this source code is governed by a BSD-style license that can be | |
| // found in the LICENSE file. | |
| #ifndef FLUTTER_FML_MESSAGE_LOOP_H_ | |
| #define FLUTTER_FML_MESSAGE_LOOP_H_ | |
| #include "flutter/fml/macros.h" | |
| #include "flutter/fml/task_runner.h" | |
| namespace fml { | |
| class TaskRunner; | |
| class MessageLoopImpl; | |
| /// An event loop associated with a thread. | |
| /// | |
| /// This class is the generic front-end to the MessageLoop, differences in | |
| /// implementation based on the running platform are in the subclasses of | |
| /// flutter::MessageLoopImpl (ex flutter::MessageLoopAndroid). | |
| /// | |
| /// For scheduling events on the message loop see flutter::TaskRunner. | |
| /// | |
| /// \see fml::TaskRunner | |
| /// \see fml::MessageLoopImpl | |
| /// \see fml::MessageLoopTaskQueues | |
| /// \see fml::Wakeable | |
| class MessageLoop { | |
| public: | |
| FML_EMBEDDER_ONLY | |
| static MessageLoop& GetCurrent(); | |
| void Run(); | |
| void Terminate(); | |
| void AddTaskObserver(intptr_t key, const fml::closure& callback); | |
| void RemoveTaskObserver(intptr_t key); | |
| fml::RefPtr<fml::TaskRunner> GetTaskRunner() const; | |
| // Exposed for the embedder shell which allows clients to poll for events | |
| // instead of dedicating a thread to the message loop. | |
| void RunExpiredTasksNow(); | |
| static void EnsureInitializedForCurrentThread(); | |
| /// Returns true if \p EnsureInitializedForCurrentThread has been called on | |
| /// this thread already. | |
| static bool IsInitializedForCurrentThread(); | |
| ~MessageLoop(); | |
| /// Gets the unique identifier for the TaskQueue associated with the current | |
| /// thread. | |
| /// \see fml::MessageLoopTaskQueues | |
| static TaskQueueId GetCurrentTaskQueueId(); | |
| private: | |
| friend class TaskRunner; | |
| friend class MessageLoopImpl; | |
| fml::RefPtr<MessageLoopImpl> loop_; | |
| fml::RefPtr<fml::TaskRunner> task_runner_; | |
| MessageLoop(); | |
| fml::RefPtr<MessageLoopImpl> GetLoopImpl() const; | |
| FML_DISALLOW_COPY_AND_ASSIGN(MessageLoop); | |
| }; | |
| } // namespace fml | |
| #endif // FLUTTER_FML_MESSAGE_LOOP_H_ |