// 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()>; 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 NextVSync(); private: std::mutex mutex_; std::vector> vsync_promised_; size_t vsync_issued_ = 0; }; class ShellTestVsyncWaiter : public VsyncWaiter { public: ShellTestVsyncWaiter(TaskRunners task_runners, std::shared_ptr clock) : VsyncWaiter(std::move(task_runners)), clock_(clock) {} protected: void AwaitVSync() override; private: std::shared_ptr 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_