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

Side by Side Diff: components/scheduler/renderer/webthread_impl_for_renderer_scheduler_unittest.cc

Issue 1308183005: Introduce WebTaskRunner Patch 2/5 (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Final tweaks Created 5 years, 3 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
OLDNEW
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/renderer/webthread_impl_for_renderer_scheduler.h" 5 #include "components/scheduler/renderer/webthread_impl_for_renderer_scheduler.h"
6 6
7 #include "base/location.h" 7 #include "base/location.h"
8 #include "base/run_loop.h" 8 #include "base/run_loop.h"
9 #include "base/single_thread_task_runner.h" 9 #include "base/single_thread_task_runner.h"
10 #include "components/scheduler/child/scheduler_task_runner_delegate_impl.h" 10 #include "components/scheduler/child/scheduler_task_runner_delegate_impl.h"
11 #include "components/scheduler/renderer/renderer_scheduler_impl.h" 11 #include "components/scheduler/renderer/renderer_scheduler_impl.h"
12 #include "testing/gmock/include/gmock/gmock.h" 12 #include "testing/gmock/include/gmock/gmock.h"
13 #include "testing/gtest/include/gtest/gtest.h" 13 #include "testing/gtest/include/gtest/gtest.h"
14 #include "third_party/WebKit/public/platform/WebTaskRunner.h"
14 #include "third_party/WebKit/public/platform/WebTraceLocation.h" 15 #include "third_party/WebKit/public/platform/WebTraceLocation.h"
15 16
16 namespace scheduler { 17 namespace scheduler {
17 namespace { 18 namespace {
18 19
19 const int kWorkBatchSize = 2; 20 const int kWorkBatchSize = 2;
20 21
21 class MockTask : public blink::WebThread::Task { 22 class MockTask : public blink::WebTaskRunner::Task {
22 public: 23 public:
23 MOCK_METHOD0(run, void()); 24 MOCK_METHOD0(run, void());
24 }; 25 };
25 26
26 class MockTaskObserver : public blink::WebThread::TaskObserver { 27 class MockTaskObserver : public blink::WebThread::TaskObserver {
27 public: 28 public:
28 MOCK_METHOD0(willProcessTask, void()); 29 MOCK_METHOD0(willProcessTask, void());
29 MOCK_METHOD0(didProcessTask, void()); 30 MOCK_METHOD0(didProcessTask, void());
30 }; 31 };
31 } // namespace 32 } // namespace
(...skipping 28 matching lines...) Expand all
60 thread_.addTaskObserver(&observer); 61 thread_.addTaskObserver(&observer);
61 scoped_ptr<MockTask> task(new MockTask()); 62 scoped_ptr<MockTask> task(new MockTask());
62 63
63 { 64 {
64 testing::InSequence sequence; 65 testing::InSequence sequence;
65 EXPECT_CALL(observer, willProcessTask()); 66 EXPECT_CALL(observer, willProcessTask());
66 EXPECT_CALL(*task, run()); 67 EXPECT_CALL(*task, run());
67 EXPECT_CALL(observer, didProcessTask()); 68 EXPECT_CALL(observer, didProcessTask());
68 } 69 }
69 70
70 thread_.postTask(blink::WebTraceLocation(), task.release()); 71 thread_.taskRunner()->postTask(blink::WebTraceLocation(), task.release());
71 message_loop_.RunUntilIdle(); 72 message_loop_.RunUntilIdle();
72 thread_.removeTaskObserver(&observer); 73 thread_.removeTaskObserver(&observer);
73 } 74 }
74 75
75 TEST_F(WebThreadImplForRendererSchedulerTest, TestWorkBatchWithOneTask) { 76 TEST_F(WebThreadImplForRendererSchedulerTest, TestWorkBatchWithOneTask) {
76 MockTaskObserver observer; 77 MockTaskObserver observer;
77 thread_.addTaskObserver(&observer); 78 thread_.addTaskObserver(&observer);
78 scoped_ptr<MockTask> task(new MockTask()); 79 scoped_ptr<MockTask> task(new MockTask());
79 80
80 SetWorkBatchSizeForTesting(kWorkBatchSize); 81 SetWorkBatchSizeForTesting(kWorkBatchSize);
81 { 82 {
82 testing::InSequence sequence; 83 testing::InSequence sequence;
83 EXPECT_CALL(observer, willProcessTask()); 84 EXPECT_CALL(observer, willProcessTask());
84 EXPECT_CALL(*task, run()); 85 EXPECT_CALL(*task, run());
85 EXPECT_CALL(observer, didProcessTask()); 86 EXPECT_CALL(observer, didProcessTask());
86 } 87 }
87 88
88 thread_.postTask(blink::WebTraceLocation(), task.release()); 89 thread_.taskRunner()->postTask(blink::WebTraceLocation(), task.release());
89 message_loop_.RunUntilIdle(); 90 message_loop_.RunUntilIdle();
90 thread_.removeTaskObserver(&observer); 91 thread_.removeTaskObserver(&observer);
91 } 92 }
92 93
93 TEST_F(WebThreadImplForRendererSchedulerTest, TestWorkBatchWithTwoTasks) { 94 TEST_F(WebThreadImplForRendererSchedulerTest, TestWorkBatchWithTwoTasks) {
94 MockTaskObserver observer; 95 MockTaskObserver observer;
95 thread_.addTaskObserver(&observer); 96 thread_.addTaskObserver(&observer);
96 scoped_ptr<MockTask> task1(new MockTask()); 97 scoped_ptr<MockTask> task1(new MockTask());
97 scoped_ptr<MockTask> task2(new MockTask()); 98 scoped_ptr<MockTask> task2(new MockTask());
98 99
99 SetWorkBatchSizeForTesting(kWorkBatchSize); 100 SetWorkBatchSizeForTesting(kWorkBatchSize);
100 { 101 {
101 testing::InSequence sequence; 102 testing::InSequence sequence;
102 EXPECT_CALL(observer, willProcessTask()); 103 EXPECT_CALL(observer, willProcessTask());
103 EXPECT_CALL(*task1, run()); 104 EXPECT_CALL(*task1, run());
104 EXPECT_CALL(observer, didProcessTask()); 105 EXPECT_CALL(observer, didProcessTask());
105 106
106 EXPECT_CALL(observer, willProcessTask()); 107 EXPECT_CALL(observer, willProcessTask());
107 EXPECT_CALL(*task2, run()); 108 EXPECT_CALL(*task2, run());
108 EXPECT_CALL(observer, didProcessTask()); 109 EXPECT_CALL(observer, didProcessTask());
109 } 110 }
110 111
111 thread_.postTask(blink::WebTraceLocation(), task1.release()); 112 thread_.taskRunner()->postTask(blink::WebTraceLocation(), task1.release());
112 thread_.postTask(blink::WebTraceLocation(), task2.release()); 113 thread_.taskRunner()->postTask(blink::WebTraceLocation(), task2.release());
113 message_loop_.RunUntilIdle(); 114 message_loop_.RunUntilIdle();
114 thread_.removeTaskObserver(&observer); 115 thread_.removeTaskObserver(&observer);
115 } 116 }
116 117
117 TEST_F(WebThreadImplForRendererSchedulerTest, TestWorkBatchWithThreeTasks) { 118 TEST_F(WebThreadImplForRendererSchedulerTest, TestWorkBatchWithThreeTasks) {
118 MockTaskObserver observer; 119 MockTaskObserver observer;
119 thread_.addTaskObserver(&observer); 120 thread_.addTaskObserver(&observer);
120 scoped_ptr<MockTask> task1(new MockTask()); 121 scoped_ptr<MockTask> task1(new MockTask());
121 scoped_ptr<MockTask> task2(new MockTask()); 122 scoped_ptr<MockTask> task2(new MockTask());
122 scoped_ptr<MockTask> task3(new MockTask()); 123 scoped_ptr<MockTask> task3(new MockTask());
123 124
124 SetWorkBatchSizeForTesting(kWorkBatchSize); 125 SetWorkBatchSizeForTesting(kWorkBatchSize);
125 { 126 {
126 testing::InSequence sequence; 127 testing::InSequence sequence;
127 EXPECT_CALL(observer, willProcessTask()); 128 EXPECT_CALL(observer, willProcessTask());
128 EXPECT_CALL(*task1, run()); 129 EXPECT_CALL(*task1, run());
129 EXPECT_CALL(observer, didProcessTask()); 130 EXPECT_CALL(observer, didProcessTask());
130 131
131 EXPECT_CALL(observer, willProcessTask()); 132 EXPECT_CALL(observer, willProcessTask());
132 EXPECT_CALL(*task2, run()); 133 EXPECT_CALL(*task2, run());
133 EXPECT_CALL(observer, didProcessTask()); 134 EXPECT_CALL(observer, didProcessTask());
134 135
135 EXPECT_CALL(observer, willProcessTask()); 136 EXPECT_CALL(observer, willProcessTask());
136 EXPECT_CALL(*task3, run()); 137 EXPECT_CALL(*task3, run());
137 EXPECT_CALL(observer, didProcessTask()); 138 EXPECT_CALL(observer, didProcessTask());
138 } 139 }
139 140
140 thread_.postTask(blink::WebTraceLocation(), task1.release()); 141 thread_.taskRunner()->postTask(blink::WebTraceLocation(), task1.release());
141 thread_.postTask(blink::WebTraceLocation(), task2.release()); 142 thread_.taskRunner()->postTask(blink::WebTraceLocation(), task2.release());
142 thread_.postTask(blink::WebTraceLocation(), task3.release()); 143 thread_.taskRunner()->postTask(blink::WebTraceLocation(), task3.release());
143 message_loop_.RunUntilIdle(); 144 message_loop_.RunUntilIdle();
144 thread_.removeTaskObserver(&observer); 145 thread_.removeTaskObserver(&observer);
145 } 146 }
146 147
147 class ExitRunLoopTask : public blink::WebThread::Task { 148 class ExitRunLoopTask : public blink::WebTaskRunner::Task {
148 public: 149 public:
149 ExitRunLoopTask(base::RunLoop* run_loop) : run_loop_(run_loop) {} 150 ExitRunLoopTask(base::RunLoop* run_loop) : run_loop_(run_loop) {}
150 151
151 virtual void run() { run_loop_->Quit(); } 152 virtual void run() { run_loop_->Quit(); }
152 153
153 private: 154 private:
154 base::RunLoop* run_loop_; 155 base::RunLoop* run_loop_;
155 }; 156 };
156 157
157 void EnterRunLoop(base::MessageLoop* message_loop, blink::WebThread* thread) { 158 void EnterRunLoop(base::MessageLoop* message_loop, blink::WebThread* thread) {
158 // Note: WebThreads do not support nested run loops, which is why we use a 159 // Note: WebThreads do not support nested run loops, which is why we use a
159 // run loop directly. 160 // run loop directly.
160 base::RunLoop run_loop; 161 base::RunLoop run_loop;
161 thread->postTask(blink::WebTraceLocation(), new ExitRunLoopTask(&run_loop)); 162 thread->taskRunner()->postTask(blink::WebTraceLocation(),
163 new ExitRunLoopTask(&run_loop));
162 message_loop->SetNestableTasksAllowed(true); 164 message_loop->SetNestableTasksAllowed(true);
163 run_loop.Run(); 165 run_loop.Run();
164 } 166 }
165 167
166 TEST_F(WebThreadImplForRendererSchedulerTest, TestNestedRunLoop) { 168 TEST_F(WebThreadImplForRendererSchedulerTest, TestNestedRunLoop) {
167 MockTaskObserver observer; 169 MockTaskObserver observer;
168 thread_.addTaskObserver(&observer); 170 thread_.addTaskObserver(&observer);
169 171
170 { 172 {
171 testing::InSequence sequence; 173 testing::InSequence sequence;
(...skipping 10 matching lines...) Expand all
182 } 184 }
183 185
184 message_loop_.task_runner()->PostTask( 186 message_loop_.task_runner()->PostTask(
185 FROM_HERE, base::Bind(&EnterRunLoop, base::Unretained(&message_loop_), 187 FROM_HERE, base::Bind(&EnterRunLoop, base::Unretained(&message_loop_),
186 base::Unretained(&thread_))); 188 base::Unretained(&thread_)));
187 message_loop_.RunUntilIdle(); 189 message_loop_.RunUntilIdle();
188 thread_.removeTaskObserver(&observer); 190 thread_.removeTaskObserver(&observer);
189 } 191 }
190 192
191 } // namespace scheduler 193 } // namespace scheduler
OLDNEW
« no previous file with comments | « components/scheduler/renderer/webthread_impl_for_renderer_scheduler.cc ('k') | components/scheduler/scheduler.gypi » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698