OLD | NEW |
---|---|
1 // Copyright 2015 The Chromium Authors. All rights reserved. | 1 // Copyright 2015 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 "base/bind.h" | 9 #include "base/bind.h" |
10 #include "base/memory/ptr_util.h" | 10 #include "base/memory/ptr_util.h" |
11 #include "base/threading/thread.h" | 11 #include "base/threading/thread.h" |
12 #include "base/time/default_tick_clock.h" | 12 #include "base/time/default_tick_clock.h" |
13 #include "components/scheduler/base/task_queue_impl.h" | 13 #include "components/scheduler/base/task_queue_impl.h" |
14 #include "components/scheduler/base/task_queue_manager_delegate_for_test.h" | 14 #include "components/scheduler/base/task_queue_manager_delegate_for_test.h" |
15 #include "components/scheduler/base/task_queue_selector.h" | 15 #include "components/scheduler/base/task_queue_selector.h" |
16 #include "components/scheduler/base/task_time_tracker.h" | |
16 #include "components/scheduler/base/work_queue_sets.h" | 17 #include "components/scheduler/base/work_queue_sets.h" |
17 #include "testing/gtest/include/gtest/gtest.h" | 18 #include "testing/gtest/include/gtest/gtest.h" |
18 #include "testing/perf/perf_test.h" | 19 #include "testing/perf/perf_test.h" |
19 | 20 |
20 namespace scheduler { | 21 namespace scheduler { |
21 | 22 |
22 class TaskQueueManagerPerfTest : public testing::Test { | 23 class TaskQueueManagerPerfTest : public testing::Test { |
23 public: | 24 public: |
24 TaskQueueManagerPerfTest() | 25 TaskQueueManagerPerfTest() |
25 : num_queues_(0), | 26 : num_queues_(0), |
26 max_tasks_in_flight_(0), | 27 max_tasks_in_flight_(0), |
27 num_tasks_in_flight_(0), | 28 num_tasks_in_flight_(0), |
28 num_tasks_to_post_(0), | 29 num_tasks_to_post_(0), |
29 num_tasks_to_run_(0) {} | 30 num_tasks_to_run_(0), |
31 task_time_tracker_(nullptr) {} | |
30 | 32 |
31 void SetUp() override { | 33 void SetUp() override { |
32 if (base::ThreadTicks::IsSupported()) | 34 if (base::ThreadTicks::IsSupported()) |
33 base::ThreadTicks::WaitUntilInitialized(); | 35 base::ThreadTicks::WaitUntilInitialized(); |
34 } | 36 } |
35 | 37 |
36 void Initialize(size_t num_queues) { | 38 void Initialize(size_t num_queues) { |
37 num_queues_ = num_queues; | 39 num_queues_ = num_queues; |
38 message_loop_.reset(new base::MessageLoop()); | 40 message_loop_.reset(new base::MessageLoop()); |
39 manager_ = base::WrapUnique(new TaskQueueManager( | 41 manager_ = base::WrapUnique(new TaskQueueManager( |
40 TaskQueueManagerDelegateForTest::Create( | 42 TaskQueueManagerDelegateForTest::Create( |
41 message_loop_->task_runner(), | 43 message_loop_->task_runner(), |
42 base::WrapUnique(new base::DefaultTickClock())), | 44 base::WrapUnique(new base::DefaultTickClock())), |
43 "fake.category", "fake.category", "fake.category.debug")); | 45 "fake.category", "fake.category", "fake.category.debug")); |
46 manager_->SetTaskTimeTracker(&task_time_tracker_); | |
44 for (size_t i = 0; i < num_queues; i++) | 47 for (size_t i = 0; i < num_queues; i++) |
45 queues_.push_back(manager_->NewTaskQueue(TaskQueue::Spec("test"))); | 48 queues_.push_back(manager_->NewTaskQueue(TaskQueue::Spec("test"))); |
46 } | 49 } |
47 | 50 |
48 void TestDelayedTask() { | 51 void TestDelayedTask() { |
49 if (--num_tasks_to_run_ == 0) { | 52 if (--num_tasks_to_run_ == 0) { |
50 message_loop_->QuitWhenIdle(); | 53 message_loop_->QuitWhenIdle(); |
51 } | 54 } |
52 | 55 |
53 num_tasks_in_flight_--; | 56 num_tasks_in_flight_--; |
(...skipping 50 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
104 } | 107 } |
105 | 108 |
106 size_t num_queues_; | 109 size_t num_queues_; |
107 unsigned int max_tasks_in_flight_; | 110 unsigned int max_tasks_in_flight_; |
108 unsigned int num_tasks_in_flight_; | 111 unsigned int num_tasks_in_flight_; |
109 unsigned int num_tasks_to_post_; | 112 unsigned int num_tasks_to_post_; |
110 unsigned int num_tasks_to_run_; | 113 unsigned int num_tasks_to_run_; |
111 std::unique_ptr<TaskQueueManager> manager_; | 114 std::unique_ptr<TaskQueueManager> manager_; |
112 std::unique_ptr<base::MessageLoop> message_loop_; | 115 std::unique_ptr<base::MessageLoop> message_loop_; |
113 std::vector<scoped_refptr<base::SingleThreadTaskRunner>> queues_; | 116 std::vector<scoped_refptr<base::SingleThreadTaskRunner>> queues_; |
117 TaskTimeTracker task_time_tracker_; | |
alex clarke (OOO till 29th)
2016/07/06 09:51:39
Can you add a TODO(alexclarke): parameterize so we
tdresser
2016/07/06 13:25:34
Done.
| |
114 }; | 118 }; |
115 | 119 |
116 TEST_F(TaskQueueManagerPerfTest, RunTenThousandDelayedTasks_OneQueue) { | 120 TEST_F(TaskQueueManagerPerfTest, RunTenThousandDelayedTasks_OneQueue) { |
117 if (!base::ThreadTicks::IsSupported()) | 121 if (!base::ThreadTicks::IsSupported()) |
118 return; | 122 return; |
119 Initialize(1u); | 123 Initialize(1u); |
120 | 124 |
121 max_tasks_in_flight_ = 200; | 125 max_tasks_in_flight_ = 200; |
122 Benchmark("run 10000 delayed tasks with one queue", | 126 Benchmark("run 10000 delayed tasks with one queue", |
123 base::Bind(&TaskQueueManagerPerfTest::ResetAndCallTestDelayedTask, | 127 base::Bind(&TaskQueueManagerPerfTest::ResetAndCallTestDelayedTask, |
(...skipping 30 matching lines...) Expand all Loading... | |
154 max_tasks_in_flight_ = 200; | 158 max_tasks_in_flight_ = 200; |
155 Benchmark("run 10000 delayed tasks with eight queues", | 159 Benchmark("run 10000 delayed tasks with eight queues", |
156 base::Bind(&TaskQueueManagerPerfTest::ResetAndCallTestDelayedTask, | 160 base::Bind(&TaskQueueManagerPerfTest::ResetAndCallTestDelayedTask, |
157 base::Unretained(this), 10000)); | 161 base::Unretained(this), 10000)); |
158 } | 162 } |
159 | 163 |
160 // TODO(alexclarke): Add additional tests with different mixes of non-delayed vs | 164 // TODO(alexclarke): Add additional tests with different mixes of non-delayed vs |
161 // delayed tasks. | 165 // delayed tasks. |
162 | 166 |
163 } // namespace scheduler | 167 } // namespace scheduler |
OLD | NEW |