OLD | NEW |
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 #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/logging.h" | 10 #include "base/logging.h" |
(...skipping 101 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
112 Time run_time; | 112 Time run_time; |
113 | 113 |
114 loop.PostTask(FROM_HERE, Bind(&SubPumpFunc)); | 114 loop.PostTask(FROM_HERE, Bind(&SubPumpFunc)); |
115 | 115 |
116 // This very delayed task should never run. | 116 // This very delayed task should never run. |
117 loop.PostDelayedTask( | 117 loop.PostDelayedTask( |
118 FROM_HERE, | 118 FROM_HERE, |
119 Bind(&RecordRunTimeFunc, &run_time, &num_tasks), | 119 Bind(&RecordRunTimeFunc, &run_time, &num_tasks), |
120 TimeDelta::FromSeconds(1000)); | 120 TimeDelta::FromSeconds(1000)); |
121 | 121 |
122 // This slightly delayed task should run from within SubPumpFunc). | 122 // This slightly delayed task should run from within SubPumpFunc. |
123 loop.PostDelayedTask( | 123 loop.PostDelayedTask( |
124 FROM_HERE, | 124 FROM_HERE, |
125 Bind(&PostQuitMessage, 0), | 125 Bind(&PostQuitMessage, 0), |
126 TimeDelta::FromMilliseconds(10)); | 126 TimeDelta::FromMilliseconds(10)); |
127 | 127 |
128 Time start_time = Time::Now(); | 128 Time start_time = Time::Now(); |
129 | 129 |
130 loop.Run(); | 130 loop.Run(); |
131 EXPECT_EQ(1, num_tasks); | 131 EXPECT_EQ(1, num_tasks); |
132 | 132 |
(...skipping 460 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
593 options.message_loop_type = MessageLoop::TYPE_IO; | 593 options.message_loop_type = MessageLoop::TYPE_IO; |
594 ASSERT_TRUE(thread.StartWithOptions(options)); | 594 ASSERT_TRUE(thread.StartWithOptions(options)); |
595 | 595 |
596 MessageLoop* thread_loop = thread.message_loop(); | 596 MessageLoop* thread_loop = thread.message_loop(); |
597 ASSERT_TRUE(NULL != thread_loop); | 597 ASSERT_TRUE(NULL != thread_loop); |
598 | 598 |
599 TestIOHandler handler1(kPipeName1, callback1_called.Get(), false); | 599 TestIOHandler handler1(kPipeName1, callback1_called.Get(), false); |
600 TestIOHandler handler2(kPipeName2, callback2_called.Get(), true); | 600 TestIOHandler handler2(kPipeName2, callback2_called.Get(), true); |
601 thread_loop->PostTask(FROM_HERE, Bind(&TestIOHandler::Init, | 601 thread_loop->PostTask(FROM_HERE, Bind(&TestIOHandler::Init, |
602 Unretained(&handler1))); | 602 Unretained(&handler1))); |
603 // TODO(ajwong): Do we really need such long Sleeps in ths function? | 603 // TODO(ajwong): Do we really need such long Sleeps in this function? |
604 // Make sure the thread runs and sleeps for lack of work. | 604 // Make sure the thread runs and sleeps for lack of work. |
605 TimeDelta delay = TimeDelta::FromMilliseconds(100); | 605 TimeDelta delay = TimeDelta::FromMilliseconds(100); |
606 PlatformThread::Sleep(delay); | 606 PlatformThread::Sleep(delay); |
607 thread_loop->PostTask(FROM_HERE, Bind(&TestIOHandler::Init, | 607 thread_loop->PostTask(FROM_HERE, Bind(&TestIOHandler::Init, |
608 Unretained(&handler2))); | 608 Unretained(&handler2))); |
609 PlatformThread::Sleep(delay); | 609 PlatformThread::Sleep(delay); |
610 | 610 |
611 // At this time handler1 is waiting to be called, and the thread is waiting | 611 // At this time handler1 is waiting to be called, and the thread is waiting |
612 // on the Init method of handler2, filtering only handler2 callbacks. | 612 // on the Init method of handler2, filtering only handler2 callbacks. |
613 | 613 |
(...skipping 24 matching lines...) Expand all Loading... |
638 | 638 |
639 RUN_MESSAGE_LOOP_TESTS(Default, &TypeDefaultMessagePumpFactory); | 639 RUN_MESSAGE_LOOP_TESTS(Default, &TypeDefaultMessagePumpFactory); |
640 RUN_MESSAGE_LOOP_TESTS(UI, &TypeUIMessagePumpFactory); | 640 RUN_MESSAGE_LOOP_TESTS(UI, &TypeUIMessagePumpFactory); |
641 RUN_MESSAGE_LOOP_TESTS(IO, &TypeIOMessagePumpFactory); | 641 RUN_MESSAGE_LOOP_TESTS(IO, &TypeIOMessagePumpFactory); |
642 | 642 |
643 #if defined(OS_WIN) | 643 #if defined(OS_WIN) |
644 TEST(MessageLoopTest, PostDelayedTask_SharedTimer_SubPump) { | 644 TEST(MessageLoopTest, PostDelayedTask_SharedTimer_SubPump) { |
645 RunTest_PostDelayedTask_SharedTimer_SubPump(); | 645 RunTest_PostDelayedTask_SharedTimer_SubPump(); |
646 } | 646 } |
647 | 647 |
648 // This test occasionally hangs http://crbug.com/44567 | 648 // This test occasionally hangs. See http://crbug.com/44567. |
649 TEST(MessageLoopTest, DISABLED_RecursiveDenial2) { | 649 TEST(MessageLoopTest, DISABLED_RecursiveDenial2) { |
650 RunTest_RecursiveDenial2(MessageLoop::TYPE_DEFAULT); | 650 RunTest_RecursiveDenial2(MessageLoop::TYPE_DEFAULT); |
651 RunTest_RecursiveDenial2(MessageLoop::TYPE_UI); | 651 RunTest_RecursiveDenial2(MessageLoop::TYPE_UI); |
652 RunTest_RecursiveDenial2(MessageLoop::TYPE_IO); | 652 RunTest_RecursiveDenial2(MessageLoop::TYPE_IO); |
653 } | 653 } |
654 | 654 |
655 TEST(MessageLoopTest, RecursiveSupport2) { | 655 TEST(MessageLoopTest, RecursiveSupport2) { |
656 // This test requires a UI loop | 656 // This test requires a UI loop. |
657 RunTest_RecursiveSupport2(MessageLoop::TYPE_UI); | 657 RunTest_RecursiveSupport2(MessageLoop::TYPE_UI); |
658 } | 658 } |
659 #endif // defined(OS_WIN) | 659 #endif // defined(OS_WIN) |
660 | 660 |
661 class DummyTaskObserver : public MessageLoop::TaskObserver { | 661 class DummyTaskObserver : public MessageLoop::TaskObserver { |
662 public: | 662 public: |
663 explicit DummyTaskObserver(int num_tasks) | 663 explicit DummyTaskObserver(int num_tasks) |
664 : num_tasks_started_(0), | 664 : num_tasks_started_(0), |
665 num_tasks_processed_(0), | 665 num_tasks_processed_(0), |
666 num_tasks_(num_tasks) {} | 666 num_tasks_(num_tasks) {} |
(...skipping 361 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1028 loop.SetTaskRunner(new_runner); | 1028 loop.SetTaskRunner(new_runner); |
1029 | 1029 |
1030 scoped_refptr<Foo> foo(new Foo()); | 1030 scoped_refptr<Foo> foo(new Foo()); |
1031 original_runner->PostTask(FROM_HERE, | 1031 original_runner->PostTask(FROM_HERE, |
1032 Bind(&Foo::Test1ConstRef, foo.get(), "a")); | 1032 Bind(&Foo::Test1ConstRef, foo.get(), "a")); |
1033 loop.RunUntilIdle(); | 1033 loop.RunUntilIdle(); |
1034 EXPECT_EQ(1, foo->test_count()); | 1034 EXPECT_EQ(1, foo->test_count()); |
1035 } | 1035 } |
1036 | 1036 |
1037 } // namespace base | 1037 } // namespace base |
OLD | NEW |