| OLD | NEW |
| 1 // Copyright 2014 The Chromium Authors. All rights reserved. | 1 // Copyright 2014 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 "components/scheduler/base/task_queue_manager.h" | 5 #include "components/scheduler/base/task_queue_manager.h" |
| 6 | 6 |
| 7 #include <stddef.h> | 7 #include <stddef.h> |
| 8 | 8 |
| 9 #include <utility> | 9 #include <utility> |
| 10 | 10 |
| (...skipping 97 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 108 base::SingleThreadTaskRunner* runner, | 108 base::SingleThreadTaskRunner* runner, |
| 109 std::vector<std::pair<base::Closure, bool>>* tasks) { | 109 std::vector<std::pair<base::Closure, bool>>* tasks) { |
| 110 base::MessageLoop::ScopedNestableTaskAllower allow(message_loop); | 110 base::MessageLoop::ScopedNestableTaskAllower allow(message_loop); |
| 111 for (std::pair<base::Closure, bool>& pair : *tasks) { | 111 for (std::pair<base::Closure, bool>& pair : *tasks) { |
| 112 if (pair.second) { | 112 if (pair.second) { |
| 113 runner->PostTask(FROM_HERE, pair.first); | 113 runner->PostTask(FROM_HERE, pair.first); |
| 114 } else { | 114 } else { |
| 115 runner->PostNonNestableTask(FROM_HERE, pair.first); | 115 runner->PostNonNestableTask(FROM_HERE, pair.first); |
| 116 } | 116 } |
| 117 } | 117 } |
| 118 message_loop->RunUntilIdle(); | 118 base::RunLoop().RunUntilIdle(); |
| 119 } | 119 } |
| 120 | 120 |
| 121 void NopTask() {} | 121 void NopTask() {} |
| 122 | 122 |
| 123 TEST_F(TaskQueueManagerTest, NowNotCalledWhenThereAreNoDelayedTasks) { | 123 TEST_F(TaskQueueManagerTest, NowNotCalledWhenThereAreNoDelayedTasks) { |
| 124 message_loop_.reset(new base::MessageLoop()); | 124 message_loop_.reset(new base::MessageLoop()); |
| 125 manager_ = base::WrapUnique(new TaskQueueManager( | 125 manager_ = base::WrapUnique(new TaskQueueManager( |
| 126 MessageLoopTaskRunner::Create( | 126 MessageLoopTaskRunner::Create( |
| 127 base::WrapUnique(new TestAlwaysFailTimeSource())), | 127 base::WrapUnique(new TestAlwaysFailTimeSource())), |
| 128 "test.scheduler", "test.scheduler", "test.scheduler.debug")); | 128 "test.scheduler", "test.scheduler", "test.scheduler.debug")); |
| (...skipping 1216 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1345 void PostTestTasksFromNestedMessageLoop( | 1345 void PostTestTasksFromNestedMessageLoop( |
| 1346 base::MessageLoop* message_loop, | 1346 base::MessageLoop* message_loop, |
| 1347 scoped_refptr<base::SingleThreadTaskRunner> main_runner, | 1347 scoped_refptr<base::SingleThreadTaskRunner> main_runner, |
| 1348 scoped_refptr<base::SingleThreadTaskRunner> wake_up_runner, | 1348 scoped_refptr<base::SingleThreadTaskRunner> wake_up_runner, |
| 1349 std::vector<EnqueueOrder>* run_order) { | 1349 std::vector<EnqueueOrder>* run_order) { |
| 1350 base::MessageLoop::ScopedNestableTaskAllower allow(message_loop); | 1350 base::MessageLoop::ScopedNestableTaskAllower allow(message_loop); |
| 1351 main_runner->PostNonNestableTask(FROM_HERE, | 1351 main_runner->PostNonNestableTask(FROM_HERE, |
| 1352 base::Bind(&TestTask, 1, run_order)); | 1352 base::Bind(&TestTask, 1, run_order)); |
| 1353 // The following should never get executed. | 1353 // The following should never get executed. |
| 1354 wake_up_runner->PostTask(FROM_HERE, base::Bind(&TestTask, 2, run_order)); | 1354 wake_up_runner->PostTask(FROM_HERE, base::Bind(&TestTask, 2, run_order)); |
| 1355 message_loop->RunUntilIdle(); | 1355 base::RunLoop().RunUntilIdle(); |
| 1356 } | 1356 } |
| 1357 | 1357 |
| 1358 TEST_F(TaskQueueManagerTest, DeferredNonNestableTaskDoesNotTriggerWakeUp) { | 1358 TEST_F(TaskQueueManagerTest, DeferredNonNestableTaskDoesNotTriggerWakeUp) { |
| 1359 // This test checks that running (i.e., deferring) a non-nestable task in a | 1359 // This test checks that running (i.e., deferring) a non-nestable task in a |
| 1360 // nested run loop does not trigger the pumping of an on-wakeup queue. | 1360 // nested run loop does not trigger the pumping of an on-wakeup queue. |
| 1361 InitializeWithRealMessageLoop(2u); | 1361 InitializeWithRealMessageLoop(2u); |
| 1362 runners_[1]->SetPumpPolicy(TaskQueue::PumpPolicy::AFTER_WAKEUP); | 1362 runners_[1]->SetPumpPolicy(TaskQueue::PumpPolicy::AFTER_WAKEUP); |
| 1363 | 1363 |
| 1364 std::vector<EnqueueOrder> run_order; | 1364 std::vector<EnqueueOrder> run_order; |
| 1365 runners_[0]->PostTask( | 1365 runners_[0]->PostTask( |
| (...skipping 441 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1807 TaskQueueManager* task_queue_manager, | 1807 TaskQueueManager* task_queue_manager, |
| 1808 std::vector<TaskQueue*>* task_sources, | 1808 std::vector<TaskQueue*>* task_sources, |
| 1809 std::vector<std::pair<base::Closure, TaskQueue*>>* tasks) { | 1809 std::vector<std::pair<base::Closure, TaskQueue*>>* tasks) { |
| 1810 base::MessageLoop::ScopedNestableTaskAllower allow(message_loop); | 1810 base::MessageLoop::ScopedNestableTaskAllower allow(message_loop); |
| 1811 task_sources->push_back(task_queue_manager->currently_executing_task_queue()); | 1811 task_sources->push_back(task_queue_manager->currently_executing_task_queue()); |
| 1812 | 1812 |
| 1813 for (std::pair<base::Closure, TaskQueue*>& pair : *tasks) { | 1813 for (std::pair<base::Closure, TaskQueue*>& pair : *tasks) { |
| 1814 pair.second->PostTask(FROM_HERE, pair.first); | 1814 pair.second->PostTask(FROM_HERE, pair.first); |
| 1815 } | 1815 } |
| 1816 | 1816 |
| 1817 message_loop->RunUntilIdle(); | 1817 base::RunLoop().RunUntilIdle(); |
| 1818 task_sources->push_back(task_queue_manager->currently_executing_task_queue()); | 1818 task_sources->push_back(task_queue_manager->currently_executing_task_queue()); |
| 1819 } | 1819 } |
| 1820 } | 1820 } |
| 1821 | 1821 |
| 1822 TEST_F(TaskQueueManagerTest, CurrentlyExecutingTaskQueue_NestedLoop) { | 1822 TEST_F(TaskQueueManagerTest, CurrentlyExecutingTaskQueue_NestedLoop) { |
| 1823 InitializeWithRealMessageLoop(3u); | 1823 InitializeWithRealMessageLoop(3u); |
| 1824 | 1824 |
| 1825 TaskQueue* queue0 = runners_[0].get(); | 1825 TaskQueue* queue0 = runners_[0].get(); |
| 1826 TaskQueue* queue1 = runners_[1].get(); | 1826 TaskQueue* queue1 = runners_[1].get(); |
| 1827 TaskQueue* queue2 = runners_[2].get(); | 1827 TaskQueue* queue2 = runners_[2].get(); |
| (...skipping 84 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1912 | 1912 |
| 1913 trace_analyzer::TraceEventVector events; | 1913 trace_analyzer::TraceEventVector events; |
| 1914 Query q = Query::EventPhaseIs(TRACE_EVENT_PHASE_ENTER_CONTEXT) || | 1914 Query q = Query::EventPhaseIs(TRACE_EVENT_PHASE_ENTER_CONTEXT) || |
| 1915 Query::EventPhaseIs(TRACE_EVENT_PHASE_LEAVE_CONTEXT); | 1915 Query::EventPhaseIs(TRACE_EVENT_PHASE_LEAVE_CONTEXT); |
| 1916 analyzer->FindEvents(q, &events); | 1916 analyzer->FindEvents(q, &events); |
| 1917 | 1917 |
| 1918 EXPECT_EQ(2u, events.size()); | 1918 EXPECT_EQ(2u, events.size()); |
| 1919 } | 1919 } |
| 1920 | 1920 |
| 1921 } // namespace scheduler | 1921 } // namespace scheduler |
| OLD | NEW |