blob: 1846f8c9d46bc07fd1318a8464948f040e6e6b9e [file] [log] [blame]
// 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();
}