| // 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 | |
| #include "flutter/fml/message_loop_impl.h" | |
| #include "flutter/fml/time/time_delta.h" | |
| #include "flutter/fml/time/time_point.h" | |
| #include "gtest/gtest.h" | |
| #define TIMESENSITIVE(x) TimeSensitiveTest_##x | |
| TEST(MessageLoopImpl, TIMESENSITIVE(WakeUpTimersAreSingletons)) { | |
| auto loop_impl = fml::MessageLoopImpl::Create(); | |
| const auto t1 = fml::TimeDelta::FromMilliseconds(10); | |
| const auto t2 = fml::TimeDelta::FromMilliseconds(30); | |
| const auto begin = fml::TimePoint::Now(); | |
| // Register a task scheduled in the future. This schedules a WakeUp call on | |
| // the MessageLoopImpl with that fml::TimePoint. | |
| loop_impl->PostTask( | |
| [&]() { | |
| auto delta = fml::TimePoint::Now() - begin; | |
| auto ms = delta.ToMillisecondsF(); | |
| ASSERT_GE(ms, 20); | |
| ASSERT_LE(ms, 40); | |
| loop_impl->Terminate(); | |
| }, | |
| begin + t1); | |
| // Call WakeUp manually to change the WakeUp time further in the future. If | |
| // the timer is correctly set up to be rearmed instead of a task being | |
| // scheduled for each WakeUp, the above task will be executed at t2 instead of | |
| // t1 now. | |
| loop_impl->WakeUp(begin + t2); | |
| loop_impl->Run(); | |
| } |