Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(18)

Side by Side Diff: base/synchronization/waitable_event_unittest.cc

Issue 2032603002: Migrate WaitableEvent to enum-based constructor in base/ (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@WEvent_enums
Patch Set: undo incorrect template change Created 4 years, 6 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "base/synchronization/waitable_event.h" 5 #include "base/synchronization/waitable_event.h"
6 6
7 #include <stddef.h> 7 #include <stddef.h>
8 8
9 #include "base/compiler_specific.h" 9 #include "base/compiler_specific.h"
10 #include "base/threading/platform_thread.h" 10 #include "base/threading/platform_thread.h"
11 #include "base/time/time.h" 11 #include "base/time/time.h"
12 #include "build/build_config.h" 12 #include "build/build_config.h"
13 #include "testing/gtest/include/gtest/gtest.h" 13 #include "testing/gtest/include/gtest/gtest.h"
14 14
15 namespace base { 15 namespace base {
16 16
17 TEST(WaitableEventTest, ManualBasics) { 17 TEST(WaitableEventTest, ManualBasics) {
18 WaitableEvent event(true, false); 18 WaitableEvent event(WaitableEvent::ResetPolicy::MANUAL,
19 WaitableEvent::InitialState::NOT_SIGNALED);
19 20
20 EXPECT_FALSE(event.IsSignaled()); 21 EXPECT_FALSE(event.IsSignaled());
21 22
22 event.Signal(); 23 event.Signal();
23 EXPECT_TRUE(event.IsSignaled()); 24 EXPECT_TRUE(event.IsSignaled());
24 EXPECT_TRUE(event.IsSignaled()); 25 EXPECT_TRUE(event.IsSignaled());
25 26
26 event.Reset(); 27 event.Reset();
27 EXPECT_FALSE(event.IsSignaled()); 28 EXPECT_FALSE(event.IsSignaled());
28 EXPECT_FALSE(event.TimedWait(TimeDelta::FromMilliseconds(10))); 29 EXPECT_FALSE(event.TimedWait(TimeDelta::FromMilliseconds(10)));
29 30
30 event.Signal(); 31 event.Signal();
31 event.Wait(); 32 event.Wait();
32 EXPECT_TRUE(event.TimedWait(TimeDelta::FromMilliseconds(10))); 33 EXPECT_TRUE(event.TimedWait(TimeDelta::FromMilliseconds(10)));
33 } 34 }
34 35
35 TEST(WaitableEventTest, AutoBasics) { 36 TEST(WaitableEventTest, AutoBasics) {
36 WaitableEvent event(false, false); 37 WaitableEvent event(WaitableEvent::ResetPolicy::AUTOMATIC,
38 WaitableEvent::InitialState::NOT_SIGNALED);
37 39
38 EXPECT_FALSE(event.IsSignaled()); 40 EXPECT_FALSE(event.IsSignaled());
39 41
40 event.Signal(); 42 event.Signal();
41 EXPECT_TRUE(event.IsSignaled()); 43 EXPECT_TRUE(event.IsSignaled());
42 EXPECT_FALSE(event.IsSignaled()); 44 EXPECT_FALSE(event.IsSignaled());
43 45
44 event.Reset(); 46 event.Reset();
45 EXPECT_FALSE(event.IsSignaled()); 47 EXPECT_FALSE(event.IsSignaled());
46 EXPECT_FALSE(event.TimedWait(TimeDelta::FromMilliseconds(10))); 48 EXPECT_FALSE(event.TimedWait(TimeDelta::FromMilliseconds(10)));
47 49
48 event.Signal(); 50 event.Signal();
49 event.Wait(); 51 event.Wait();
50 EXPECT_FALSE(event.TimedWait(TimeDelta::FromMilliseconds(10))); 52 EXPECT_FALSE(event.TimedWait(TimeDelta::FromMilliseconds(10)));
51 53
52 event.Signal(); 54 event.Signal();
53 EXPECT_TRUE(event.TimedWait(TimeDelta::FromMilliseconds(10))); 55 EXPECT_TRUE(event.TimedWait(TimeDelta::FromMilliseconds(10)));
54 } 56 }
55 57
56 TEST(WaitableEventTest, WaitManyShortcut) { 58 TEST(WaitableEventTest, WaitManyShortcut) {
57 WaitableEvent* ev[5]; 59 WaitableEvent* ev[5];
58 for (unsigned i = 0; i < 5; ++i) 60 for (unsigned i = 0; i < 5; ++i) {
59 ev[i] = new WaitableEvent(false, false); 61 ev[i] = new WaitableEvent(WaitableEvent::ResetPolicy::AUTOMATIC,
62 WaitableEvent::InitialState::NOT_SIGNALED);
63 }
60 64
61 ev[3]->Signal(); 65 ev[3]->Signal();
62 EXPECT_EQ(WaitableEvent::WaitMany(ev, 5), 3u); 66 EXPECT_EQ(WaitableEvent::WaitMany(ev, 5), 3u);
63 67
64 ev[3]->Signal(); 68 ev[3]->Signal();
65 EXPECT_EQ(WaitableEvent::WaitMany(ev, 5), 3u); 69 EXPECT_EQ(WaitableEvent::WaitMany(ev, 5), 3u);
66 70
67 ev[4]->Signal(); 71 ev[4]->Signal();
68 EXPECT_EQ(WaitableEvent::WaitMany(ev, 5), 4u); 72 EXPECT_EQ(WaitableEvent::WaitMany(ev, 5), 4u);
69 73
(...skipping 17 matching lines...) Expand all
87 } 91 }
88 92
89 private: 93 private:
90 const TimeDelta delay_; 94 const TimeDelta delay_;
91 WaitableEvent* event_; 95 WaitableEvent* event_;
92 }; 96 };
93 97
94 // Tests that a WaitableEvent can be safely deleted when |Wait| is done without 98 // Tests that a WaitableEvent can be safely deleted when |Wait| is done without
95 // additional synchronization. 99 // additional synchronization.
96 TEST(WaitableEventTest, WaitAndDelete) { 100 TEST(WaitableEventTest, WaitAndDelete) {
97 WaitableEvent* ev = new WaitableEvent(false, false); 101 WaitableEvent* ev =
102 new WaitableEvent(WaitableEvent::ResetPolicy::AUTOMATIC,
103 WaitableEvent::InitialState::NOT_SIGNALED);
98 104
99 WaitableEventSignaler signaler(TimeDelta::FromMilliseconds(10), ev); 105 WaitableEventSignaler signaler(TimeDelta::FromMilliseconds(10), ev);
100 PlatformThreadHandle thread; 106 PlatformThreadHandle thread;
101 PlatformThread::Create(0, &signaler, &thread); 107 PlatformThread::Create(0, &signaler, &thread);
102 108
103 ev->Wait(); 109 ev->Wait();
104 delete ev; 110 delete ev;
105 111
106 PlatformThread::Join(thread); 112 PlatformThread::Join(thread);
107 } 113 }
108 114
109 // Tests that a WaitableEvent can be safely deleted when |WaitMany| is done 115 // Tests that a WaitableEvent can be safely deleted when |WaitMany| is done
110 // without additional synchronization. 116 // without additional synchronization.
111 TEST(WaitableEventTest, WaitMany) { 117 TEST(WaitableEventTest, WaitMany) {
112 WaitableEvent* ev[5]; 118 WaitableEvent* ev[5];
113 for (unsigned i = 0; i < 5; ++i) 119 for (unsigned i = 0; i < 5; ++i) {
114 ev[i] = new WaitableEvent(false, false); 120 ev[i] = new WaitableEvent(WaitableEvent::ResetPolicy::AUTOMATIC,
121 WaitableEvent::InitialState::NOT_SIGNALED);
122 }
115 123
116 WaitableEventSignaler signaler(TimeDelta::FromMilliseconds(10), ev[2]); 124 WaitableEventSignaler signaler(TimeDelta::FromMilliseconds(10), ev[2]);
117 PlatformThreadHandle thread; 125 PlatformThreadHandle thread;
118 PlatformThread::Create(0, &signaler, &thread); 126 PlatformThread::Create(0, &signaler, &thread);
119 127
120 size_t index = WaitableEvent::WaitMany(ev, 5); 128 size_t index = WaitableEvent::WaitMany(ev, 5);
121 129
122 for (unsigned i = 0; i < 5; ++i) 130 for (unsigned i = 0; i < 5; ++i)
123 delete ev[i]; 131 delete ev[i];
124 132
125 PlatformThread::Join(thread); 133 PlatformThread::Join(thread);
126 EXPECT_EQ(2u, index); 134 EXPECT_EQ(2u, index);
127 } 135 }
128 136
129 // Tests that using TimeDelta::Max() on TimedWait() is not the same as passing 137 // Tests that using TimeDelta::Max() on TimedWait() is not the same as passing
130 // a timeout of 0. (crbug.com/465948) 138 // a timeout of 0. (crbug.com/465948)
131 #if defined(OS_POSIX) 139 #if defined(OS_POSIX)
132 // crbug.com/465948 not fixed yet. 140 // crbug.com/465948 not fixed yet.
133 #define MAYBE_TimedWait DISABLED_TimedWait 141 #define MAYBE_TimedWait DISABLED_TimedWait
134 #else 142 #else
135 #define MAYBE_TimedWait TimedWait 143 #define MAYBE_TimedWait TimedWait
136 #endif 144 #endif
137 TEST(WaitableEventTest, MAYBE_TimedWait) { 145 TEST(WaitableEventTest, MAYBE_TimedWait) {
138 WaitableEvent* ev = new WaitableEvent(false, false); 146 WaitableEvent* ev =
147 new WaitableEvent(WaitableEvent::ResetPolicy::AUTOMATIC,
148 WaitableEvent::InitialState::NOT_SIGNALED);
139 149
140 TimeDelta thread_delay = TimeDelta::FromMilliseconds(10); 150 TimeDelta thread_delay = TimeDelta::FromMilliseconds(10);
141 WaitableEventSignaler signaler(thread_delay, ev); 151 WaitableEventSignaler signaler(thread_delay, ev);
142 PlatformThreadHandle thread; 152 PlatformThreadHandle thread;
143 TimeTicks start = TimeTicks::Now(); 153 TimeTicks start = TimeTicks::Now();
144 PlatformThread::Create(0, &signaler, &thread); 154 PlatformThread::Create(0, &signaler, &thread);
145 155
146 ev->TimedWait(TimeDelta::Max()); 156 ev->TimedWait(TimeDelta::Max());
147 EXPECT_GE(TimeTicks::Now() - start, thread_delay); 157 EXPECT_GE(TimeTicks::Now() - start, thread_delay);
148 delete ev; 158 delete ev;
149 159
150 PlatformThread::Join(thread); 160 PlatformThread::Join(thread);
151 } 161 }
152 162
153 } // namespace base 163 } // namespace base
OLDNEW
« no previous file with comments | « base/profiler/stack_sampling_profiler_unittest.cc ('k') | base/synchronization/waitable_event_watcher_unittest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698