| Index: base/synchronization/waitable_event_unittest.cc
|
| diff --git a/base/synchronization/waitable_event_unittest.cc b/base/synchronization/waitable_event_unittest.cc
|
| index ac5c9f125584da09b4a829cf24f8a250e8f81ab8..c0e280aa9740642058d3d3e9ee109b3a1c5e5e8a 100644
|
| --- a/base/synchronization/waitable_event_unittest.cc
|
| +++ b/base/synchronization/waitable_event_unittest.cc
|
| @@ -136,13 +136,7 @@ TEST(WaitableEventTest, WaitMany) {
|
|
|
| // Tests that using TimeDelta::Max() on TimedWait() is not the same as passing
|
| // a timeout of 0. (crbug.com/465948)
|
| -#if defined(OS_POSIX)
|
| -// crbug.com/465948 not fixed yet.
|
| -#define MAYBE_TimedWait DISABLED_TimedWait
|
| -#else
|
| -#define MAYBE_TimedWait TimedWait
|
| -#endif
|
| -TEST(WaitableEventTest, MAYBE_TimedWait) {
|
| +TEST(WaitableEventTest, TimedWait) {
|
| WaitableEvent* ev =
|
| new WaitableEvent(WaitableEvent::ResetPolicy::AUTOMATIC,
|
| WaitableEvent::InitialState::NOT_SIGNALED);
|
| @@ -153,11 +147,58 @@ TEST(WaitableEventTest, MAYBE_TimedWait) {
|
| TimeTicks start = TimeTicks::Now();
|
| PlatformThread::Create(0, &signaler, &thread);
|
|
|
| - ev->TimedWait(TimeDelta::Max());
|
| + EXPECT_TRUE(ev->TimedWait(TimeDelta::Max()));
|
| EXPECT_GE(TimeTicks::Now() - start, thread_delay);
|
| delete ev;
|
|
|
| PlatformThread::Join(thread);
|
| }
|
|
|
| +// Tests that a sub-ms TimedWait doesn't time out promptly.
|
| +TEST(WaitableEventTest, SubMsTimedWait) {
|
| + WaitableEvent ev(WaitableEvent::ResetPolicy::AUTOMATIC,
|
| + WaitableEvent::InitialState::NOT_SIGNALED);
|
| +
|
| + TimeDelta delay = TimeDelta::FromMicroseconds(900);
|
| + TimeTicks start_time = TimeTicks::Now();
|
| + ev.TimedWait(delay);
|
| + EXPECT_GE(TimeTicks::Now() - start_time, delay);
|
| +}
|
| +
|
| +// Tests that TimedWaitUntil can be safely used with various end_time deadline
|
| +// values.
|
| +TEST(WaitableEventTest, TimedWaitUntil) {
|
| + WaitableEvent ev(WaitableEvent::ResetPolicy::AUTOMATIC,
|
| + WaitableEvent::InitialState::NOT_SIGNALED);
|
| +
|
| + TimeTicks start_time(TimeTicks::Now());
|
| + TimeDelta delay = TimeDelta::FromMilliseconds(10);
|
| +
|
| + // Should be OK to wait for the current time or time in the past.
|
| + // That should end promptly and be equivalent to IsSignalled.
|
| + EXPECT_FALSE(ev.TimedWaitUntil(start_time));
|
| + EXPECT_FALSE(ev.TimedWaitUntil(start_time - delay));
|
| +
|
| + // Should be OK to wait for zero TimeTicks().
|
| + EXPECT_FALSE(ev.TimedWaitUntil(TimeTicks()));
|
| +
|
| + // Waiting for a time in the future shouldn't end before the deadline
|
| + // if the event isn't signalled.
|
| + EXPECT_FALSE(ev.TimedWaitUntil(start_time + delay));
|
| + EXPECT_GE(TimeTicks::Now() - start_time, delay);
|
| +
|
| + // Test that passing TimeTicks::Max to TimedWaitUntil is valid and isn't
|
| + // the same as passing TimeTicks(). Also verifies that signaling event
|
| + // ends the wait promptly.
|
| + WaitableEventSignaler signaler(delay, &ev);
|
| + PlatformThreadHandle thread;
|
| + start_time = TimeTicks::Now();
|
| + PlatformThread::Create(0, &signaler, &thread);
|
| +
|
| + EXPECT_TRUE(ev.TimedWaitUntil(TimeTicks::Max()));
|
| + EXPECT_GE(TimeTicks::Now() - start_time, delay);
|
| +
|
| + PlatformThread::Join(thread);
|
| +}
|
| +
|
| } // namespace base
|
|
|