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

Side by Side Diff: mojo/edk/system/simple_dispatcher_unittest.cc

Issue 2056763003: EDK: Change Awakable::Awake()'s context, etc., to be a uint64_t. (Closed) Base URL: https://github.com/domokit/mojo.git@master
Patch Set: doh 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
« no previous file with comments | « mojo/edk/system/simple_dispatcher.cc ('k') | mojo/edk/system/waiter.h » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright 2013 The Chromium Authors. All rights reserved. 1 // Copyright 2013 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 // NOTE(vtl): Some of these tests are inherently flaky (e.g., if run on a 5 // NOTE(vtl): Some of these tests are inherently flaky (e.g., if run on a
6 // heavily-loaded system). Sorry. |test::EpsilonTimeout()| may be increased to 6 // heavily-loaded system). Sorry. |test::EpsilonTimeout()| may be increased to
7 // increase tolerance and reduce observed flakiness (though doing so reduces the 7 // increase tolerance and reduce observed flakiness (though doing so reduces the
8 // meaningfulness of the test). 8 // meaningfulness of the test).
9 9
10 #include "mojo/edk/system/simple_dispatcher.h" 10 #include "mojo/edk/system/simple_dispatcher.h"
(...skipping 21 matching lines...) Expand all
32 32
33 namespace mojo { 33 namespace mojo {
34 namespace system { 34 namespace system {
35 namespace { 35 namespace {
36 36
37 TEST(SimpleDispatcherTest, Basic) { 37 TEST(SimpleDispatcherTest, Basic) {
38 Stopwatch stopwatch; 38 Stopwatch stopwatch;
39 39
40 auto d = MakeRefCounted<test::MockSimpleDispatcher>(); 40 auto d = MakeRefCounted<test::MockSimpleDispatcher>();
41 Waiter w; 41 Waiter w;
42 uint32_t context = 0; 42 uint64_t context = 0;
43 HandleSignalsState hss; 43 HandleSignalsState hss;
44 44
45 // Try adding a readable waiter when already readable. 45 // Try adding a readable waiter when already readable.
46 w.Init(); 46 w.Init();
47 d->SetSatisfiedSignals(MOJO_HANDLE_SIGNAL_READABLE); 47 d->SetSatisfiedSignals(MOJO_HANDLE_SIGNAL_READABLE);
48 hss = HandleSignalsState(); 48 hss = HandleSignalsState();
49 EXPECT_EQ(MOJO_RESULT_ALREADY_EXISTS, 49 EXPECT_EQ(MOJO_RESULT_ALREADY_EXISTS,
50 d->AddAwakable(&w, MOJO_HANDLE_SIGNAL_READABLE, 0, &hss)); 50 d->AddAwakable(&w, MOJO_HANDLE_SIGNAL_READABLE, 0, &hss));
51 EXPECT_EQ(MOJO_HANDLE_SIGNAL_READABLE, hss.satisfied_signals); 51 EXPECT_EQ(MOJO_HANDLE_SIGNAL_READABLE, hss.satisfied_signals);
52 EXPECT_EQ(MOJO_HANDLE_SIGNAL_READABLE | MOJO_HANDLE_SIGNAL_WRITABLE, 52 EXPECT_EQ(MOJO_HANDLE_SIGNAL_READABLE | MOJO_HANDLE_SIGNAL_WRITABLE,
(...skipping 81 matching lines...) Expand 10 before | Expand all | Expand 10 after
134 hss.satisfiable_signals); 134 hss.satisfiable_signals);
135 135
136 EXPECT_EQ(MOJO_RESULT_OK, d->Close()); 136 EXPECT_EQ(MOJO_RESULT_OK, d->Close());
137 } 137 }
138 138
139 TEST(SimpleDispatcherTest, BasicUnsatisfiable) { 139 TEST(SimpleDispatcherTest, BasicUnsatisfiable) {
140 Stopwatch stopwatch; 140 Stopwatch stopwatch;
141 141
142 auto d = MakeRefCounted<test::MockSimpleDispatcher>(); 142 auto d = MakeRefCounted<test::MockSimpleDispatcher>();
143 Waiter w; 143 Waiter w;
144 uint32_t context = 0; 144 uint64_t context = 0;
145 HandleSignalsState hss; 145 HandleSignalsState hss;
146 146
147 // Try adding a writable waiter when it can never be writable. 147 // Try adding a writable waiter when it can never be writable.
148 w.Init(); 148 w.Init();
149 d->SetSatisfiableSignals(MOJO_HANDLE_SIGNAL_READABLE); 149 d->SetSatisfiableSignals(MOJO_HANDLE_SIGNAL_READABLE);
150 d->SetSatisfiedSignals(0); 150 d->SetSatisfiedSignals(0);
151 hss = HandleSignalsState(); 151 hss = HandleSignalsState();
152 EXPECT_EQ(MOJO_RESULT_FAILED_PRECONDITION, 152 EXPECT_EQ(MOJO_RESULT_FAILED_PRECONDITION,
153 d->AddAwakable(&w, MOJO_HANDLE_SIGNAL_WRITABLE, 1, &hss)); 153 d->AddAwakable(&w, MOJO_HANDLE_SIGNAL_WRITABLE, 1, &hss));
154 EXPECT_EQ(0u, hss.satisfied_signals); 154 EXPECT_EQ(0u, hss.satisfied_signals);
(...skipping 52 matching lines...) Expand 10 before | Expand all | Expand 10 after
207 EXPECT_EQ(MOJO_HANDLE_SIGNAL_READABLE, hss.satisfiable_signals); 207 EXPECT_EQ(MOJO_HANDLE_SIGNAL_READABLE, hss.satisfiable_signals);
208 208
209 EXPECT_EQ(MOJO_RESULT_OK, d->Close()); 209 EXPECT_EQ(MOJO_RESULT_OK, d->Close());
210 } 210 }
211 211
212 TEST(SimpleDispatcherTest, BasicClosed) { 212 TEST(SimpleDispatcherTest, BasicClosed) {
213 Stopwatch stopwatch; 213 Stopwatch stopwatch;
214 214
215 RefPtr<test::MockSimpleDispatcher> d; 215 RefPtr<test::MockSimpleDispatcher> d;
216 Waiter w; 216 Waiter w;
217 uint32_t context = 0; 217 uint64_t context = 0;
218 HandleSignalsState hss; 218 HandleSignalsState hss;
219 219
220 // Try adding a writable waiter when the dispatcher has been closed. 220 // Try adding a writable waiter when the dispatcher has been closed.
221 d = MakeRefCounted<test::MockSimpleDispatcher>(); 221 d = MakeRefCounted<test::MockSimpleDispatcher>();
222 w.Init(); 222 w.Init();
223 EXPECT_EQ(MOJO_RESULT_OK, d->Close()); 223 EXPECT_EQ(MOJO_RESULT_OK, d->Close());
224 hss = HandleSignalsState(); 224 hss = HandleSignalsState();
225 EXPECT_EQ(MOJO_RESULT_INVALID_ARGUMENT, 225 EXPECT_EQ(MOJO_RESULT_INVALID_ARGUMENT,
226 d->AddAwakable(&w, MOJO_HANDLE_SIGNAL_WRITABLE, 1, &hss)); 226 d->AddAwakable(&w, MOJO_HANDLE_SIGNAL_WRITABLE, 1, &hss));
227 EXPECT_EQ(0u, hss.satisfied_signals); 227 EXPECT_EQ(0u, hss.satisfied_signals);
(...skipping 36 matching lines...) Expand 10 before | Expand all | Expand 10 after
264 w.Wait(2 * test::EpsilonTimeout(), &context)); 264 w.Wait(2 * test::EpsilonTimeout(), &context));
265 EXPECT_LT(stopwatch.Elapsed(), test::EpsilonTimeout()); 265 EXPECT_LT(stopwatch.Elapsed(), test::EpsilonTimeout());
266 EXPECT_EQ(4u, context); 266 EXPECT_EQ(4u, context);
267 // Don't need to remove waiters from closed dispatchers. 267 // Don't need to remove waiters from closed dispatchers.
268 } 268 }
269 269
270 TEST(SimpleDispatcherTest, BasicThreaded) { 270 TEST(SimpleDispatcherTest, BasicThreaded) {
271 Stopwatch stopwatch; 271 Stopwatch stopwatch;
272 bool did_wait; 272 bool did_wait;
273 MojoResult result; 273 MojoResult result;
274 uint32_t context; 274 uint64_t context;
275 HandleSignalsState hss; 275 HandleSignalsState hss;
276 276
277 // Wait for readable (already readable). 277 // Wait for readable (already readable).
278 { 278 {
279 auto d = MakeRefCounted<test::MockSimpleDispatcher>(); 279 auto d = MakeRefCounted<test::MockSimpleDispatcher>();
280 { 280 {
281 d->SetSatisfiedSignals(MOJO_HANDLE_SIGNAL_READABLE); 281 d->SetSatisfiedSignals(MOJO_HANDLE_SIGNAL_READABLE);
282 test::WaiterThread thread(d, MOJO_HANDLE_SIGNAL_READABLE, 282 test::WaiterThread thread(d, MOJO_HANDLE_SIGNAL_READABLE,
283 MOJO_DEADLINE_INDEFINITE, 1, &did_wait, &result, 283 MOJO_DEADLINE_INDEFINITE, 1, &did_wait, &result,
284 &context, &hss); 284 &context, &hss);
(...skipping 101 matching lines...) Expand 10 before | Expand all | Expand 10 after
386 EXPECT_EQ(MOJO_HANDLE_SIGNAL_WRITABLE, hss.satisfied_signals); 386 EXPECT_EQ(MOJO_HANDLE_SIGNAL_WRITABLE, hss.satisfied_signals);
387 EXPECT_EQ(MOJO_HANDLE_SIGNAL_READABLE | MOJO_HANDLE_SIGNAL_WRITABLE, 387 EXPECT_EQ(MOJO_HANDLE_SIGNAL_READABLE | MOJO_HANDLE_SIGNAL_WRITABLE,
388 hss.satisfiable_signals); 388 hss.satisfiable_signals);
389 } 389 }
390 390
391 TEST(SimpleDispatcherTest, MultipleWaiters) { 391 TEST(SimpleDispatcherTest, MultipleWaiters) {
392 static const uint32_t kNumWaiters = 20; 392 static const uint32_t kNumWaiters = 20;
393 393
394 bool did_wait[kNumWaiters]; 394 bool did_wait[kNumWaiters];
395 MojoResult result[kNumWaiters]; 395 MojoResult result[kNumWaiters];
396 uint32_t context[kNumWaiters]; 396 uint64_t context[kNumWaiters];
397 HandleSignalsState hss[kNumWaiters]; 397 HandleSignalsState hss[kNumWaiters];
398 398
399 // All wait for readable and becomes readable after some time. 399 // All wait for readable and becomes readable after some time.
400 { 400 {
401 auto d = MakeRefCounted<test::MockSimpleDispatcher>(); 401 auto d = MakeRefCounted<test::MockSimpleDispatcher>();
402 std::vector<std::unique_ptr<test::WaiterThread>> threads; 402 std::vector<std::unique_ptr<test::WaiterThread>> threads;
403 for (uint32_t i = 0; i < kNumWaiters; i++) { 403 for (uint32_t i = 0; i < kNumWaiters; i++) {
404 threads.push_back(MakeUnique<test::WaiterThread>( 404 threads.push_back(MakeUnique<test::WaiterThread>(
405 d, MOJO_HANDLE_SIGNAL_READABLE, MOJO_DEADLINE_INDEFINITE, i, 405 d, MOJO_HANDLE_SIGNAL_READABLE, MOJO_DEADLINE_INDEFINITE, i,
406 &did_wait[i], &result[i], &context[i], &hss[i])); 406 &did_wait[i], &result[i], &context[i], &hss[i]));
(...skipping 121 matching lines...) Expand 10 before | Expand all | Expand 10 after
528 // Since we closed before joining, we can't say much about what each thread 528 // Since we closed before joining, we can't say much about what each thread
529 // saw as the state. 529 // saw as the state.
530 } 530 }
531 } 531 }
532 532
533 // TODO(vtl): Stress test? 533 // TODO(vtl): Stress test?
534 534
535 } // namespace 535 } // namespace
536 } // namespace system 536 } // namespace system
537 } // namespace mojo 537 } // namespace mojo
OLDNEW
« no previous file with comments | « mojo/edk/system/simple_dispatcher.cc ('k') | mojo/edk/system/waiter.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698