Chromium Code Reviews| OLD | NEW |
|---|---|
| 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/eintr_wrapper.h" | 7 #include "base/eintr_wrapper.h" |
| 8 #include "base/logging.h" | 8 #include "base/logging.h" |
| 9 #include "base/message_loop.h" | 9 #include "base/message_loop.h" |
| 10 #include "base/ref_counted.h" | 10 #include "base/ref_counted.h" |
| (...skipping 750 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 761 new RecursiveTask(depth_ - 1, order(), cookie(), is_reentrant_)); | 761 new RecursiveTask(depth_ - 1, order(), cookie(), is_reentrant_)); |
| 762 } | 762 } |
| 763 RunEnd(); | 763 RunEnd(); |
| 764 } | 764 } |
| 765 | 765 |
| 766 private: | 766 private: |
| 767 int depth_; | 767 int depth_; |
| 768 bool is_reentrant_; | 768 bool is_reentrant_; |
| 769 }; | 769 }; |
| 770 | 770 |
| 771 class RecursiveSlowTask : public RecursiveTask { | |
| 772 public: | |
| 773 RecursiveSlowTask(int depth, TaskList* order, int cookie, bool is_reentrant) | |
| 774 : RecursiveTask(depth, order, cookie, is_reentrant) { | |
| 775 } | |
| 776 | |
| 777 virtual void Run() { | |
| 778 RecursiveTask::Run(); | |
| 779 PlatformThread::Sleep(10); // milliseconds | |
|
darin (slow to review)
2011/02/16 23:58:02
nit: two spaces before '//' for inline comments
| |
| 780 } | |
| 781 }; | |
| 782 | |
| 771 class QuitTask : public OrderedTasks { | 783 class QuitTask : public OrderedTasks { |
| 772 public: | 784 public: |
| 773 QuitTask(TaskList* order, int cookie) | 785 QuitTask(TaskList* order, int cookie) |
| 774 : OrderedTasks(order, QUITMESSAGELOOP, cookie) { | 786 : OrderedTasks(order, QUITMESSAGELOOP, cookie) { |
| 775 } | 787 } |
| 776 | 788 |
| 777 virtual void Run() { | 789 virtual void Run() { |
| 778 RunStart(); | 790 RunStart(); |
| 779 MessageLoop::current()->Quit(); | 791 MessageLoop::current()->Quit(); |
| 780 RunEnd(); | 792 RunEnd(); |
| (...skipping 105 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 886 EXPECT_EQ(order[ 6], TaskItem(RECURSIVE, 1, true)); | 898 EXPECT_EQ(order[ 6], TaskItem(RECURSIVE, 1, true)); |
| 887 EXPECT_EQ(order[ 7], TaskItem(RECURSIVE, 1, false)); | 899 EXPECT_EQ(order[ 7], TaskItem(RECURSIVE, 1, false)); |
| 888 EXPECT_EQ(order[ 8], TaskItem(RECURSIVE, 2, true)); | 900 EXPECT_EQ(order[ 8], TaskItem(RECURSIVE, 2, true)); |
| 889 EXPECT_EQ(order[ 9], TaskItem(RECURSIVE, 2, false)); | 901 EXPECT_EQ(order[ 9], TaskItem(RECURSIVE, 2, false)); |
| 890 EXPECT_EQ(order[10], TaskItem(RECURSIVE, 1, true)); | 902 EXPECT_EQ(order[10], TaskItem(RECURSIVE, 1, true)); |
| 891 EXPECT_EQ(order[11], TaskItem(RECURSIVE, 1, false)); | 903 EXPECT_EQ(order[11], TaskItem(RECURSIVE, 1, false)); |
| 892 EXPECT_EQ(order[12], TaskItem(RECURSIVE, 2, true)); | 904 EXPECT_EQ(order[12], TaskItem(RECURSIVE, 2, true)); |
| 893 EXPECT_EQ(order[13], TaskItem(RECURSIVE, 2, false)); | 905 EXPECT_EQ(order[13], TaskItem(RECURSIVE, 2, false)); |
| 894 } | 906 } |
| 895 | 907 |
| 908 void RunTest_RecursiveDenial3(MessageLoop::Type message_loop_type) { | |
| 909 MessageLoop loop(message_loop_type); | |
| 910 | |
| 911 EXPECT_TRUE(MessageLoop::current()->NestableTasksAllowed()); | |
| 912 TaskList order; | |
| 913 MessageLoop::current()->PostTask(FROM_HERE, | |
| 914 new RecursiveSlowTask(2, &order, 1, false)); | |
| 915 MessageLoop::current()->PostTask(FROM_HERE, | |
| 916 new RecursiveSlowTask(2, &order, 2, false)); | |
| 917 MessageLoop::current()->PostDelayedTask(FROM_HERE, | |
| 918 new OrderedTasks(&order, 3), 5); | |
| 919 MessageLoop::current()->PostDelayedTask(FROM_HERE, | |
| 920 new QuitTask(&order, 4), 5); | |
| 921 | |
| 922 MessageLoop::current()->Run(); | |
| 923 | |
| 924 for (size_t i=0; i<order.size(); ++i) { | |
| 925 LOG(WARNING) << "item " << i << " is " << order[i]; | |
| 926 } | |
| 927 | |
| 928 LOG(WARNING) << "message type " << message_loop_type; | |
| 929 | |
| 930 // FIFO order. | |
| 931 ASSERT_EQ(16U, order.size()); | |
| 932 EXPECT_EQ(order[ 0], TaskItem(RECURSIVE, 1, true)); | |
| 933 EXPECT_EQ(order[ 1], TaskItem(RECURSIVE, 1, false)); | |
| 934 EXPECT_EQ(order[ 2], TaskItem(RECURSIVE, 2, true)); | |
| 935 EXPECT_EQ(order[ 3], TaskItem(RECURSIVE, 2, false)); | |
| 936 EXPECT_EQ(order[ 4], TaskItem(RECURSIVE, 1, true)); | |
| 937 EXPECT_EQ(order[ 5], TaskItem(RECURSIVE, 1, false)); | |
| 938 EXPECT_EQ(order[ 6], TaskItem(ORDERERD, 3, true)); | |
| 939 EXPECT_EQ(order[ 7], TaskItem(ORDERERD, 3, false)); | |
| 940 EXPECT_EQ(order[ 8], TaskItem(RECURSIVE, 2, true)); | |
| 941 EXPECT_EQ(order[ 9], TaskItem(RECURSIVE, 2, false)); | |
| 942 EXPECT_EQ(order[10], TaskItem(QUITMESSAGELOOP, 4, true)); | |
| 943 EXPECT_EQ(order[11], TaskItem(QUITMESSAGELOOP, 4, false)); | |
| 944 EXPECT_EQ(order[12], TaskItem(RECURSIVE, 1, true)); | |
| 945 EXPECT_EQ(order[13], TaskItem(RECURSIVE, 1, false)); | |
| 946 EXPECT_EQ(order[14], TaskItem(RECURSIVE, 2, true)); | |
| 947 EXPECT_EQ(order[15], TaskItem(RECURSIVE, 2, false)); | |
| 948 } | |
| 949 | |
| 950 | |
| 896 void RunTest_RecursiveSupport1(MessageLoop::Type message_loop_type) { | 951 void RunTest_RecursiveSupport1(MessageLoop::Type message_loop_type) { |
| 897 MessageLoop loop(message_loop_type); | 952 MessageLoop loop(message_loop_type); |
| 898 | 953 |
| 899 TaskList order; | 954 TaskList order; |
| 900 MessageLoop::current()->PostTask(FROM_HERE, | 955 MessageLoop::current()->PostTask(FROM_HERE, |
| 901 new RecursiveTask(2, &order, 1, true)); | 956 new RecursiveTask(2, &order, 1, true)); |
| 902 MessageLoop::current()->PostTask(FROM_HERE, | 957 MessageLoop::current()->PostTask(FROM_HERE, |
| 903 new RecursiveTask(2, &order, 2, true)); | 958 new RecursiveTask(2, &order, 2, true)); |
| 904 MessageLoop::current()->PostTask(FROM_HERE, | 959 MessageLoop::current()->PostTask(FROM_HERE, |
| 905 new QuitTask(&order, 3)); | 960 new QuitTask(&order, 3)); |
| (...skipping 513 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 1419 RunTest_Nesting(MessageLoop::TYPE_UI); | 1474 RunTest_Nesting(MessageLoop::TYPE_UI); |
| 1420 RunTest_Nesting(MessageLoop::TYPE_IO); | 1475 RunTest_Nesting(MessageLoop::TYPE_IO); |
| 1421 } | 1476 } |
| 1422 | 1477 |
| 1423 TEST(MessageLoopTest, RecursiveDenial1) { | 1478 TEST(MessageLoopTest, RecursiveDenial1) { |
| 1424 RunTest_RecursiveDenial1(MessageLoop::TYPE_DEFAULT); | 1479 RunTest_RecursiveDenial1(MessageLoop::TYPE_DEFAULT); |
| 1425 RunTest_RecursiveDenial1(MessageLoop::TYPE_UI); | 1480 RunTest_RecursiveDenial1(MessageLoop::TYPE_UI); |
| 1426 RunTest_RecursiveDenial1(MessageLoop::TYPE_IO); | 1481 RunTest_RecursiveDenial1(MessageLoop::TYPE_IO); |
| 1427 } | 1482 } |
| 1428 | 1483 |
| 1484 TEST(MessageLoopTest, RecursiveDenial3) { | |
| 1485 RunTest_RecursiveDenial3(MessageLoop::TYPE_DEFAULT); | |
| 1486 RunTest_RecursiveDenial3(MessageLoop::TYPE_UI); | |
| 1487 RunTest_RecursiveDenial3(MessageLoop::TYPE_IO); | |
| 1488 } | |
| 1489 | |
| 1429 TEST(MessageLoopTest, RecursiveSupport1) { | 1490 TEST(MessageLoopTest, RecursiveSupport1) { |
| 1430 RunTest_RecursiveSupport1(MessageLoop::TYPE_DEFAULT); | 1491 RunTest_RecursiveSupport1(MessageLoop::TYPE_DEFAULT); |
| 1431 RunTest_RecursiveSupport1(MessageLoop::TYPE_UI); | 1492 RunTest_RecursiveSupport1(MessageLoop::TYPE_UI); |
| 1432 RunTest_RecursiveSupport1(MessageLoop::TYPE_IO); | 1493 RunTest_RecursiveSupport1(MessageLoop::TYPE_IO); |
| 1433 } | 1494 } |
| 1434 | 1495 |
| 1435 #if defined(OS_WIN) | 1496 #if defined(OS_WIN) |
| 1436 // This test occasionally hangs http://crbug.com/44567 | 1497 // This test occasionally hangs http://crbug.com/44567 |
| 1437 TEST(MessageLoopTest, DISABLED_RecursiveDenial2) { | 1498 TEST(MessageLoopTest, DISABLED_RecursiveDenial2) { |
| 1438 RunTest_RecursiveDenial2(MessageLoop::TYPE_DEFAULT); | 1499 RunTest_RecursiveDenial2(MessageLoop::TYPE_DEFAULT); |
| (...skipping 268 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 1707 loop->PostDelayedTask( | 1768 loop->PostDelayedTask( |
| 1708 FROM_HERE, | 1769 FROM_HERE, |
| 1709 new RunAtDestructionTask(&task_destroyed, &destruction_observer_called), | 1770 new RunAtDestructionTask(&task_destroyed, &destruction_observer_called), |
| 1710 kDelayMS); | 1771 kDelayMS); |
| 1711 delete loop; | 1772 delete loop; |
| 1712 EXPECT_TRUE(observer.task_destroyed_before_message_loop()); | 1773 EXPECT_TRUE(observer.task_destroyed_before_message_loop()); |
| 1713 // The task should have been destroyed when we deleted the loop. | 1774 // The task should have been destroyed when we deleted the loop. |
| 1714 EXPECT_TRUE(task_destroyed); | 1775 EXPECT_TRUE(task_destroyed); |
| 1715 EXPECT_TRUE(destruction_observer_called); | 1776 EXPECT_TRUE(destruction_observer_called); |
| 1716 } | 1777 } |
| OLD | NEW |