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

Side by Side Diff: base/message_loop_unittest.cc

Issue 9055001: Change code in base (primarily unit tests) to use Sleep(TimeDelta). (Closed) Base URL: http://git.chromium.org/chromium/src.git@master
Patch Set: Qualify windows Sleep calls to go through PlatformThread. Created 8 years, 11 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 | « base/lazy_instance_unittest.cc ('k') | base/process_util_posix.cc » ('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 (c) 2011 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2011 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 <vector> 5 #include <vector>
6 6
7 #include "base/bind.h" 7 #include "base/bind.h"
8 #include "base/bind_helpers.h" 8 #include "base/bind_helpers.h"
9 #include "base/compiler_specific.h" 9 #include "base/compiler_specific.h"
10 #include "base/eintr_wrapper.h" 10 #include "base/eintr_wrapper.h"
(...skipping 158 matching lines...) Expand 10 before | Expand all | Expand 10 after
169 // Now kick things off with the SEH block active. 169 // Now kick things off with the SEH block active.
170 MessageLoop::current()->set_exception_restoration(true); 170 MessageLoop::current()->set_exception_restoration(true);
171 MessageLoop::current()->Run(); 171 MessageLoop::current()->Run();
172 MessageLoop::current()->set_exception_restoration(false); 172 MessageLoop::current()->set_exception_restoration(false);
173 173
174 EXPECT_EQ(foo->test_count(), 105); 174 EXPECT_EQ(foo->test_count(), 105);
175 EXPECT_EQ(foo->result(), "abacad"); 175 EXPECT_EQ(foo->result(), "abacad");
176 } 176 }
177 177
178 // This function runs slowly to simulate a large amount of work being done. 178 // This function runs slowly to simulate a large amount of work being done.
179 static void SlowFunc(int pause_ms, int* quit_counter) { 179 static void SlowFunc(TimeDelta pause, int* quit_counter) {
180 PlatformThread::Sleep(pause_ms); 180 PlatformThread::Sleep(pause);
181 if (--(*quit_counter) == 0) 181 if (--(*quit_counter) == 0)
182 MessageLoop::current()->Quit(); 182 MessageLoop::current()->Quit();
183 } 183 }
184 184
185 // This function records the time when Run was called in a Time object, which is 185 // This function records the time when Run was called in a Time object, which is
186 // useful for building a variety of MessageLoop tests. 186 // useful for building a variety of MessageLoop tests.
187 static void RecordRunTimeFunc(Time* run_time, int* quit_counter) { 187 static void RecordRunTimeFunc(Time* run_time, int* quit_counter) {
188 *run_time = Time::Now(); 188 *run_time = Time::Now();
189 189
190 // Cause our Run function to take some time to execute. As a result we can 190 // Cause our Run function to take some time to execute. As a result we can
191 // count on subsequent RecordRunTimeFunc()s running at a future time, 191 // count on subsequent RecordRunTimeFunc()s running at a future time,
192 // without worry about the resolution of our system clock being an issue. 192 // without worry about the resolution of our system clock being an issue.
193 SlowFunc(10, quit_counter); 193 SlowFunc(TimeDelta::FromMilliseconds(10), quit_counter);
194 } 194 }
195 195
196 void RunTest_PostDelayedTask_Basic(MessageLoop::Type message_loop_type) { 196 void RunTest_PostDelayedTask_Basic(MessageLoop::Type message_loop_type) {
197 MessageLoop loop(message_loop_type); 197 MessageLoop loop(message_loop_type);
198 198
199 // Test that PostDelayedTask results in a delayed task. 199 // Test that PostDelayedTask results in a delayed task.
200 200
201 const int kDelayMS = 100; 201 const int kDelayMS = 100;
202 202
203 int num_tasks = 1; 203 int num_tasks = 1;
(...skipping 62 matching lines...) Expand 10 before | Expand all | Expand 10 after
266 EXPECT_TRUE(run_time1 < run_time2); 266 EXPECT_TRUE(run_time1 < run_time2);
267 } 267 }
268 268
269 void RunTest_PostDelayedTask_InPostOrder_2( 269 void RunTest_PostDelayedTask_InPostOrder_2(
270 MessageLoop::Type message_loop_type) { 270 MessageLoop::Type message_loop_type) {
271 MessageLoop loop(message_loop_type); 271 MessageLoop loop(message_loop_type);
272 272
273 // Test that a delayed task still runs after a normal tasks even if the 273 // Test that a delayed task still runs after a normal tasks even if the
274 // normal tasks take a long time to run. 274 // normal tasks take a long time to run.
275 275
276 const int kPauseMS = 50; 276 const TimeDelta kPause = TimeDelta::FromMilliseconds(50);
277 277
278 int num_tasks = 2; 278 int num_tasks = 2;
279 Time run_time; 279 Time run_time;
280 280
281 loop.PostTask(FROM_HERE, base::Bind(&SlowFunc, kPauseMS, &num_tasks)); 281 loop.PostTask(FROM_HERE, base::Bind(&SlowFunc, kPause, &num_tasks));
282 loop.PostDelayedTask( 282 loop.PostDelayedTask(
283 FROM_HERE, base::Bind(&RecordRunTimeFunc, &run_time, &num_tasks), 10); 283 FROM_HERE, base::Bind(&RecordRunTimeFunc, &run_time, &num_tasks), 10);
284 284
285 Time time_before_run = Time::Now(); 285 Time time_before_run = Time::Now();
286 loop.Run(); 286 loop.Run();
287 Time time_after_run = Time::Now(); 287 Time time_after_run = Time::Now();
288 288
289 EXPECT_EQ(0, num_tasks); 289 EXPECT_EQ(0, num_tasks);
290 290
291 EXPECT_LT(kPauseMS, (time_after_run - time_before_run).InMilliseconds()); 291 EXPECT_LT(kPause, time_after_run - time_before_run);
292 } 292 }
293 293
294 void RunTest_PostDelayedTask_InPostOrder_3( 294 void RunTest_PostDelayedTask_InPostOrder_3(
295 MessageLoop::Type message_loop_type) { 295 MessageLoop::Type message_loop_type) {
296 MessageLoop loop(message_loop_type); 296 MessageLoop loop(message_loop_type);
297 297
298 // Test that a delayed task still runs after a pile of normal tasks. The key 298 // Test that a delayed task still runs after a pile of normal tasks. The key
299 // difference between this test and the previous one is that here we return 299 // difference between this test and the previous one is that here we return
300 // the MessageLoop a lot so we give the MessageLoop plenty of opportunities 300 // the MessageLoop a lot so we give the MessageLoop plenty of opportunities
301 // to maybe run the delayed task. It should know not to do so until the 301 // to maybe run the delayed task. It should know not to do so until the
(...skipping 40 matching lines...) Expand 10 before | Expand all | Expand 10 after
342 loop.Run(); 342 loop.Run();
343 EXPECT_EQ(0, num_tasks); 343 EXPECT_EQ(0, num_tasks);
344 344
345 // Ensure that we ran in far less time than the slower timer. 345 // Ensure that we ran in far less time than the slower timer.
346 TimeDelta total_time = Time::Now() - start_time; 346 TimeDelta total_time = Time::Now() - start_time;
347 EXPECT_GT(5000, total_time.InMilliseconds()); 347 EXPECT_GT(5000, total_time.InMilliseconds());
348 348
349 // In case both timers somehow run at nearly the same time, sleep a little 349 // In case both timers somehow run at nearly the same time, sleep a little
350 // and then run all pending to force them both to have run. This is just 350 // and then run all pending to force them both to have run. This is just
351 // encouraging flakiness if there is any. 351 // encouraging flakiness if there is any.
352 PlatformThread::Sleep(100); 352 PlatformThread::Sleep(TimeDelta::FromMilliseconds(100));
353 loop.RunAllPending(); 353 loop.RunAllPending();
354 354
355 EXPECT_TRUE(run_time1.is_null()); 355 EXPECT_TRUE(run_time1.is_null());
356 EXPECT_FALSE(run_time2.is_null()); 356 EXPECT_FALSE(run_time2.is_null());
357 } 357 }
358 358
359 #if defined(OS_WIN) 359 #if defined(OS_WIN)
360 360
361 void SubPumpFunc() { 361 void SubPumpFunc() {
362 MessageLoop::current()->SetNestableTasksAllowed(true); 362 MessageLoop::current()->SetNestableTasksAllowed(true);
(...skipping 32 matching lines...) Expand 10 before | Expand all | Expand 10 after
395 loop.Run(); 395 loop.Run();
396 EXPECT_EQ(1, num_tasks); 396 EXPECT_EQ(1, num_tasks);
397 397
398 // Ensure that we ran in far less time than the slower timer. 398 // Ensure that we ran in far less time than the slower timer.
399 TimeDelta total_time = Time::Now() - start_time; 399 TimeDelta total_time = Time::Now() - start_time;
400 EXPECT_GT(5000, total_time.InMilliseconds()); 400 EXPECT_GT(5000, total_time.InMilliseconds());
401 401
402 // In case both timers somehow run at nearly the same time, sleep a little 402 // In case both timers somehow run at nearly the same time, sleep a little
403 // and then run all pending to force them both to have run. This is just 403 // and then run all pending to force them both to have run. This is just
404 // encouraging flakiness if there is any. 404 // encouraging flakiness if there is any.
405 PlatformThread::Sleep(100); 405 PlatformThread::Sleep(TimeDelta::FromMilliseconds(100));
406 loop.RunAllPending(); 406 loop.RunAllPending();
407 407
408 EXPECT_TRUE(run_time.is_null()); 408 EXPECT_TRUE(run_time.is_null());
409 } 409 }
410 410
411 #endif // defined(OS_WIN) 411 #endif // defined(OS_WIN)
412 412
413 // This is used to inject a test point for recording the destructor calls for 413 // This is used to inject a test point for recording the destructor calls for
414 // Closure objects send to MessageLoop::PostTask(). It is awkward usage since we 414 // Closure objects send to MessageLoop::PostTask(). It is awkward usage since we
415 // are trying to hook the actual destruction, which is not a common operation. 415 // are trying to hook the actual destruction, which is not a common operation.
(...skipping 74 matching lines...) Expand 10 before | Expand all | Expand 10 after
490 // If the right SEH filter is installed, it will fix the error. 490 // If the right SEH filter is installed, it will fix the error.
491 class Crasher : public base::RefCounted<Crasher> { 491 class Crasher : public base::RefCounted<Crasher> {
492 public: 492 public:
493 // Ctor. If trash_SEH_handler is true, the task will override the unhandled 493 // Ctor. If trash_SEH_handler is true, the task will override the unhandled
494 // exception handler with one sure to crash this test. 494 // exception handler with one sure to crash this test.
495 explicit Crasher(bool trash_SEH_handler) 495 explicit Crasher(bool trash_SEH_handler)
496 : trash_SEH_handler_(trash_SEH_handler) { 496 : trash_SEH_handler_(trash_SEH_handler) {
497 } 497 }
498 498
499 void Run() { 499 void Run() {
500 PlatformThread::Sleep(1); 500 PlatformThread::Sleep(TimeDelta::FromMilliseconds(1));
501 if (trash_SEH_handler_) 501 if (trash_SEH_handler_)
502 ::SetUnhandledExceptionFilter(&BadExceptionHandler); 502 ::SetUnhandledExceptionFilter(&BadExceptionHandler);
503 // Generate a SEH fault. We do it in asm to make sure we know how to undo 503 // Generate a SEH fault. We do it in asm to make sure we know how to undo
504 // the damage. 504 // the damage.
505 505
506 #if defined(_M_IX86) 506 #if defined(_M_IX86)
507 507
508 __asm { 508 __asm {
509 mov eax, dword ptr [Crasher::bad_array_] 509 mov eax, dword ptr [Crasher::bad_array_]
510 mov byte ptr [eax], 66 510 mov byte ptr [eax], 66
(...skipping 218 matching lines...) Expand 10 before | Expand all | Expand 10 after
729 MessageLoop::current()->PostTask( 729 MessageLoop::current()->PostTask(
730 FROM_HERE, 730 FROM_HERE,
731 base::Bind(&RecursiveFunc, order, cookie, depth - 1, is_reentrant)); 731 base::Bind(&RecursiveFunc, order, cookie, depth - 1, is_reentrant));
732 } 732 }
733 order->RecordEnd(RECURSIVE, cookie); 733 order->RecordEnd(RECURSIVE, cookie);
734 } 734 }
735 735
736 void RecursiveSlowFunc(TaskList* order, int cookie, int depth, 736 void RecursiveSlowFunc(TaskList* order, int cookie, int depth,
737 bool is_reentrant) { 737 bool is_reentrant) {
738 RecursiveFunc(order, cookie, depth, is_reentrant); 738 RecursiveFunc(order, cookie, depth, is_reentrant);
739 PlatformThread::Sleep(10); // milliseconds 739 PlatformThread::Sleep(TimeDelta::FromMilliseconds(10));
740 } 740 }
741 741
742 void QuitFunc(TaskList* order, int cookie) { 742 void QuitFunc(TaskList* order, int cookie) {
743 order->RecordStart(QUITMESSAGELOOP, cookie); 743 order->RecordStart(QUITMESSAGELOOP, cookie);
744 MessageLoop::current()->Quit(); 744 MessageLoop::current()->Quit();
745 order->RecordEnd(QUITMESSAGELOOP, cookie); 745 order->RecordEnd(QUITMESSAGELOOP, cookie);
746 } 746 }
747 747
748 void SleepFunc(TaskList* order, int cookie, int ms) { 748 void SleepFunc(TaskList* order, int cookie, TimeDelta delay) {
749 order->RecordStart(SLEEP, cookie); 749 order->RecordStart(SLEEP, cookie);
750 PlatformThread::Sleep(ms); 750 PlatformThread::Sleep(delay);
751 order->RecordEnd(SLEEP, cookie); 751 order->RecordEnd(SLEEP, cookie);
752 } 752 }
753 753
754 #if defined(OS_WIN) 754 #if defined(OS_WIN)
755 void RecursiveFuncWin(MessageLoop* target, 755 void RecursiveFuncWin(MessageLoop* target,
756 HANDLE event, 756 HANDLE event,
757 bool expect_window, 757 bool expect_window,
758 TaskList* order, 758 TaskList* order,
759 bool is_reentrant) { 759 bool is_reentrant) {
760 target->PostTask(FROM_HERE, 760 target->PostTask(FROM_HERE,
(...skipping 288 matching lines...) Expand 10 before | Expand all | Expand 10 after
1049 FROM_HERE, 1049 FROM_HERE,
1050 base::Bind(&OrderedFunc, &order, 2), 1050 base::Bind(&OrderedFunc, &order, 2),
1051 1); 1051 1);
1052 } else { 1052 } else {
1053 MessageLoop::current()->PostNonNestableTask( 1053 MessageLoop::current()->PostNonNestableTask(
1054 FROM_HERE, 1054 FROM_HERE,
1055 base::Bind(&OrderedFunc, &order, 2)); 1055 base::Bind(&OrderedFunc, &order, 2));
1056 } 1056 }
1057 MessageLoop::current()->PostTask(FROM_HERE, 1057 MessageLoop::current()->PostTask(FROM_HERE,
1058 base::Bind(&OrderedFunc, &order, 3)); 1058 base::Bind(&OrderedFunc, &order, 3));
1059 MessageLoop::current()->PostTask(FROM_HERE, 1059 MessageLoop::current()->PostTask(
1060 base::Bind(&SleepFunc, &order, 4, 50)); 1060 FROM_HERE,
1061 base::Bind(&SleepFunc, &order, 4, TimeDelta::FromMilliseconds(50)));
1061 MessageLoop::current()->PostTask(FROM_HERE, 1062 MessageLoop::current()->PostTask(FROM_HERE,
1062 base::Bind(&OrderedFunc, &order, 5)); 1063 base::Bind(&OrderedFunc, &order, 5));
1063 if (use_delayed) { 1064 if (use_delayed) {
1064 MessageLoop::current()->PostNonNestableDelayedTask( 1065 MessageLoop::current()->PostNonNestableDelayedTask(
1065 FROM_HERE, 1066 FROM_HERE,
1066 base::Bind(&QuitFunc, &order, 6), 1067 base::Bind(&QuitFunc, &order, 6),
1067 2); 1068 2);
1068 } else { 1069 } else {
1069 MessageLoop::current()->PostNonNestableTask( 1070 MessageLoop::current()->PostNonNestableTask(
1070 FROM_HERE, 1071 FROM_HERE,
(...skipping 142 matching lines...) Expand 10 before | Expand all | Expand 10 after
1213 Thread::Options options; 1214 Thread::Options options;
1214 options.message_loop_type = MessageLoop::TYPE_IO; 1215 options.message_loop_type = MessageLoop::TYPE_IO;
1215 ASSERT_TRUE(thread.StartWithOptions(options)); 1216 ASSERT_TRUE(thread.StartWithOptions(options));
1216 1217
1217 MessageLoop* thread_loop = thread.message_loop(); 1218 MessageLoop* thread_loop = thread.message_loop();
1218 ASSERT_TRUE(NULL != thread_loop); 1219 ASSERT_TRUE(NULL != thread_loop);
1219 1220
1220 TestIOHandler handler(kPipeName, callback_called, false); 1221 TestIOHandler handler(kPipeName, callback_called, false);
1221 thread_loop->PostTask(FROM_HERE, base::Bind(&TestIOHandler::Init, 1222 thread_loop->PostTask(FROM_HERE, base::Bind(&TestIOHandler::Init,
1222 base::Unretained(&handler))); 1223 base::Unretained(&handler)));
1223 Sleep(100); // Make sure the thread runs and sleeps for lack of work. 1224 // Make sure the thread runs and sleeps for lack of work.
1225 base::PlatformThread::Sleep(base::TimeDelta::FromMilliseconds(100));
1224 1226
1225 const char buffer[] = "Hello there!"; 1227 const char buffer[] = "Hello there!";
1226 DWORD written; 1228 DWORD written;
1227 EXPECT_TRUE(WriteFile(server, buffer, sizeof(buffer), &written, NULL)); 1229 EXPECT_TRUE(WriteFile(server, buffer, sizeof(buffer), &written, NULL));
1228 1230
1229 DWORD result = WaitForSingleObject(callback_called, 1000); 1231 DWORD result = WaitForSingleObject(callback_called, 1000);
1230 EXPECT_EQ(WAIT_OBJECT_0, result); 1232 EXPECT_EQ(WAIT_OBJECT_0, result);
1231 1233
1232 thread.Stop(); 1234 thread.Stop();
1233 } 1235 }
(...skipping 21 matching lines...) Expand all
1255 ASSERT_TRUE(thread.StartWithOptions(options)); 1257 ASSERT_TRUE(thread.StartWithOptions(options));
1256 1258
1257 MessageLoop* thread_loop = thread.message_loop(); 1259 MessageLoop* thread_loop = thread.message_loop();
1258 ASSERT_TRUE(NULL != thread_loop); 1260 ASSERT_TRUE(NULL != thread_loop);
1259 1261
1260 TestIOHandler handler1(kPipeName1, callback1_called, false); 1262 TestIOHandler handler1(kPipeName1, callback1_called, false);
1261 TestIOHandler handler2(kPipeName2, callback2_called, true); 1263 TestIOHandler handler2(kPipeName2, callback2_called, true);
1262 thread_loop->PostTask(FROM_HERE, base::Bind(&TestIOHandler::Init, 1264 thread_loop->PostTask(FROM_HERE, base::Bind(&TestIOHandler::Init,
1263 base::Unretained(&handler1))); 1265 base::Unretained(&handler1)));
1264 // TODO(ajwong): Do we really need such long Sleeps in ths function? 1266 // TODO(ajwong): Do we really need such long Sleeps in ths function?
1265 Sleep(100); // Make sure the thread runs and sleeps for lack of work. 1267 // Make sure the thread runs and sleeps for lack of work.
1268 base::TimeDelta delay = base::TimeDelta::FromMilliseconds(100);
1269 base::PlatformThread::Sleep(delay);
1266 thread_loop->PostTask(FROM_HERE, base::Bind(&TestIOHandler::Init, 1270 thread_loop->PostTask(FROM_HERE, base::Bind(&TestIOHandler::Init,
1267 base::Unretained(&handler2))); 1271 base::Unretained(&handler2)));
1268 Sleep(100); 1272 base::PlatformThread::Sleep(delay);
1269 1273
1270 // At this time handler1 is waiting to be called, and the thread is waiting 1274 // At this time handler1 is waiting to be called, and the thread is waiting
1271 // on the Init method of handler2, filtering only handler2 callbacks. 1275 // on the Init method of handler2, filtering only handler2 callbacks.
1272 1276
1273 const char buffer[] = "Hello there!"; 1277 const char buffer[] = "Hello there!";
1274 DWORD written; 1278 DWORD written;
1275 EXPECT_TRUE(WriteFile(server1, buffer, sizeof(buffer), &written, NULL)); 1279 EXPECT_TRUE(WriteFile(server1, buffer, sizeof(buffer), &written, NULL));
1276 Sleep(200); 1280 base::PlatformThread::Sleep(2 * delay);
1277 EXPECT_EQ(WAIT_TIMEOUT, WaitForSingleObject(callback1_called, 0)) << 1281 EXPECT_EQ(WAIT_TIMEOUT, WaitForSingleObject(callback1_called, 0)) <<
1278 "handler1 has not been called"; 1282 "handler1 has not been called";
1279 1283
1280 EXPECT_TRUE(WriteFile(server2, buffer, sizeof(buffer), &written, NULL)); 1284 EXPECT_TRUE(WriteFile(server2, buffer, sizeof(buffer), &written, NULL));
1281 1285
1282 HANDLE objects[2] = { callback1_called.Get(), callback2_called.Get() }; 1286 HANDLE objects[2] = { callback1_called.Get(), callback2_called.Get() };
1283 DWORD result = WaitForMultipleObjects(2, objects, TRUE, 1000); 1287 DWORD result = WaitForMultipleObjects(2, objects, TRUE, 1000);
1284 EXPECT_EQ(WAIT_OBJECT_0, result); 1288 EXPECT_EQ(WAIT_OBJECT_0, result);
1285 1289
1286 thread.Stop(); 1290 thread.Stop();
(...skipping 248 matching lines...) Expand 10 before | Expand all | Expand 10 after
1535 EXPECT_TRUE(loop.high_resolution_timers_enabled()); 1539 EXPECT_TRUE(loop.high_resolution_timers_enabled());
1536 1540
1537 // Post a slow task and verify high resolution timers 1541 // Post a slow task and verify high resolution timers
1538 // are still enabled. 1542 // are still enabled.
1539 loop.PostDelayedTask(FROM_HERE, base::Bind(&PostNTasksThenQuit, 1), 1543 loop.PostDelayedTask(FROM_HERE, base::Bind(&PostNTasksThenQuit, 1),
1540 kSlowTimerMs); 1544 kSlowTimerMs);
1541 loop.Run(); 1545 loop.Run();
1542 EXPECT_TRUE(loop.high_resolution_timers_enabled()); 1546 EXPECT_TRUE(loop.high_resolution_timers_enabled());
1543 1547
1544 // Wait for a while so that high-resolution mode elapses. 1548 // Wait for a while so that high-resolution mode elapses.
1545 Sleep(MessageLoop::kHighResolutionTimerModeLeaseTimeMs); 1549 base::PlatformThread::Sleep(TimeDelta::FromMilliseconds(
1550 MessageLoop::kHighResolutionTimerModeLeaseTimeMs));
1546 1551
1547 // Post a slow task to disable the high resolution timers. 1552 // Post a slow task to disable the high resolution timers.
1548 loop.PostDelayedTask(FROM_HERE, base::Bind(&PostNTasksThenQuit, 1), 1553 loop.PostDelayedTask(FROM_HERE, base::Bind(&PostNTasksThenQuit, 1),
1549 kSlowTimerMs); 1554 kSlowTimerMs);
1550 loop.Run(); 1555 loop.Run();
1551 EXPECT_FALSE(loop.high_resolution_timers_enabled()); 1556 EXPECT_FALSE(loop.high_resolution_timers_enabled());
1552 } 1557 }
1553 1558
1554 #endif // defined(OS_WIN) 1559 #endif // defined(OS_WIN)
1555 1560
(...skipping 132 matching lines...) Expand 10 before | Expand all | Expand 10 after
1688 base::Bind(&DestructionObserverProbe::Run, 1693 base::Bind(&DestructionObserverProbe::Run,
1689 new DestructionObserverProbe(&task_destroyed, 1694 new DestructionObserverProbe(&task_destroyed,
1690 &destruction_observer_called)), 1695 &destruction_observer_called)),
1691 kDelayMS); 1696 kDelayMS);
1692 delete loop; 1697 delete loop;
1693 EXPECT_TRUE(observer.task_destroyed_before_message_loop()); 1698 EXPECT_TRUE(observer.task_destroyed_before_message_loop());
1694 // The task should have been destroyed when we deleted the loop. 1699 // The task should have been destroyed when we deleted the loop.
1695 EXPECT_TRUE(task_destroyed); 1700 EXPECT_TRUE(task_destroyed);
1696 EXPECT_TRUE(destruction_observer_called); 1701 EXPECT_TRUE(destruction_observer_called);
1697 } 1702 }
OLDNEW
« no previous file with comments | « base/lazy_instance_unittest.cc ('k') | base/process_util_posix.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698