| // 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. |
| |
| #define FML_USED_ON_EMBEDDER |
| |
| #ifndef FLUTTER_SHELL_COMMON_VSYNC_WAITERS_TEST_H_ |
| #define FLUTTER_SHELL_COMMON_VSYNC_WAITERS_TEST_H_ |
| |
| #include "flutter/shell/common/shell.h" |
| |
| namespace flutter { |
| namespace testing { |
| |
| using CreateVsyncWaiter = std::function<std::unique_ptr<VsyncWaiter>()>; |
| |
| class ShellTestVsyncClock { |
| public: |
| /// Simulate that a vsync signal is triggered. |
| void SimulateVSync(); |
| |
| /// A future that will return the index the next vsync signal. |
| std::future<int> NextVSync(); |
| |
| private: |
| std::mutex mutex_; |
| std::vector<std::promise<int>> vsync_promised_; |
| size_t vsync_issued_ = 0; |
| }; |
| |
| class ShellTestVsyncWaiter : public VsyncWaiter { |
| public: |
| ShellTestVsyncWaiter(TaskRunners task_runners, |
| std::shared_ptr<ShellTestVsyncClock> clock) |
| : VsyncWaiter(std::move(task_runners)), clock_(clock) {} |
| |
| protected: |
| void AwaitVSync() override; |
| |
| private: |
| std::shared_ptr<ShellTestVsyncClock> clock_; |
| }; |
| |
| class ConstantFiringVsyncWaiter : public VsyncWaiter { |
| public: |
| // both of these are set in the past so as to fire immediately. |
| static constexpr fml::TimePoint frame_begin_time = |
| fml::TimePoint::FromEpochDelta(fml::TimeDelta::FromSeconds(0)); |
| static constexpr fml::TimePoint frame_target_time = |
| fml::TimePoint::FromEpochDelta(fml::TimeDelta::FromSeconds(100)); |
| |
| ConstantFiringVsyncWaiter(TaskRunners task_runners) |
| : VsyncWaiter(std::move(task_runners)) {} |
| |
| protected: |
| void AwaitVSync() override; |
| }; |
| |
| } // namespace testing |
| } // namespace flutter |
| |
| #endif // FLUTTER_SHELL_COMMON_VSYNC_WAITERS_TEST_H_ |