mirror of
https://github.com/flutter/flutter.git
synced 2026-02-20 02:29:02 +08:00
44 lines
1.3 KiB
C++
44 lines
1.3 KiB
C++
// 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();
|
|
}
|