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

Side by Side Diff: content/renderer/scheduler/webthread_impl_for_scheduler_unittest.cc

Issue 922733002: scheduler: Implement task observers (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Missed one. Created 5 years, 10 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
(Empty)
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
3 // found in the LICENSE file.
4
5 #include "content/renderer/scheduler/webthread_impl_for_scheduler.h"
6
7 #include "content/renderer/scheduler/renderer_scheduler_impl.h"
8 #include "testing/gmock/include/gmock/gmock.h"
9 #include "testing/gtest/include/gtest/gtest.h"
10 #include "third_party/WebKit/public/platform/WebTraceLocation.h"
11
12 namespace content {
13 namespace {
14 const int kWorkBatchSize = 2;
rmcilroy 2015/02/19 11:47:49 nit - newline above
Sami 2015/02/19 16:31:09 Done.
15
16 class MockTask : public blink::WebThread::Task {
17 public:
18 MOCK_METHOD0(run, void());
19 };
20
21 class MockTaskObserver : public blink::WebThread::TaskObserver {
22 public:
23 MOCK_METHOD0(willProcessTask, void());
24 MOCK_METHOD0(didProcessTask, void());
25 };
26 } // namespace
27
28 class WebThreadImplForSchedulerTest : public testing::Test {
29 public:
30 WebThreadImplForSchedulerTest()
31 : scheduler_(message_loop_.task_runner()),
32 default_task_runner_(scheduler_.DefaultTaskRunner()),
33 thread_(&scheduler_) {}
34
35 ~WebThreadImplForSchedulerTest() override {}
36
37 protected:
38 void EatDefaultTask(MockTaskObserver* observer) {
39 // The scheduler posts one extra DoWork() task automatically.
40 EXPECT_CALL(*observer, willProcessTask());
41 EXPECT_CALL(*observer, didProcessTask());
42 }
43
44 base::MessageLoop message_loop_;
45 RendererSchedulerImpl scheduler_;
46 scoped_refptr<base::SingleThreadTaskRunner> default_task_runner_;
47 WebThreadImplForScheduler thread_;
48
49 DISALLOW_COPY_AND_ASSIGN(WebThreadImplForSchedulerTest);
50 };
51
52 TEST_F(WebThreadImplForSchedulerTest, TestTaskObserver) {
53 MockTaskObserver observer;
54 thread_.addTaskObserver(&observer);
55 scoped_ptr<MockTask> task(new MockTask());
56
57 {
58 testing::InSequence sequence;
59 EXPECT_CALL(observer, willProcessTask());
60 EXPECT_CALL(*task, run());
61 EXPECT_CALL(observer, didProcessTask());
62
63 EatDefaultTask(&observer);
64 }
65
66 thread_.postTask(blink::WebTraceLocation(), task.release());
67 message_loop_.RunUntilIdle();
68 thread_.removeTaskObserver(&observer);
69 }
70
71 TEST_F(WebThreadImplForSchedulerTest, TestWorkBatchWithOneTask) {
72 MockTaskObserver observer;
73 thread_.addTaskObserver(&observer);
74 scoped_ptr<MockTask> task(new MockTask());
75
76 scheduler_.SetWorkBatchSizeForTesting(kWorkBatchSize);
77 {
78 testing::InSequence sequence;
79 EXPECT_CALL(observer, willProcessTask());
80 EXPECT_CALL(*task, run());
81 EXPECT_CALL(observer, didProcessTask());
82
83 EatDefaultTask(&observer);
84 }
85
86 thread_.postTask(blink::WebTraceLocation(), task.release());
87 message_loop_.RunUntilIdle();
88 thread_.removeTaskObserver(&observer);
89 }
90
91 TEST_F(WebThreadImplForSchedulerTest, TestWorkBatchWithTwoTasks) {
92 MockTaskObserver observer;
93 thread_.addTaskObserver(&observer);
94 scoped_ptr<MockTask> task1(new MockTask());
95 scoped_ptr<MockTask> task2(new MockTask());
96
97 scheduler_.SetWorkBatchSizeForTesting(kWorkBatchSize);
98 {
99 testing::InSequence sequence;
100 EXPECT_CALL(observer, willProcessTask());
101 EXPECT_CALL(*task1, run());
102 EXPECT_CALL(observer, didProcessTask());
103
104 EXPECT_CALL(observer, willProcessTask());
105 EXPECT_CALL(*task2, run());
106 EXPECT_CALL(observer, didProcessTask());
107
108 EatDefaultTask(&observer);
109 }
110
111 thread_.postTask(blink::WebTraceLocation(), task1.release());
112 thread_.postTask(blink::WebTraceLocation(), task2.release());
113 message_loop_.RunUntilIdle();
114 thread_.removeTaskObserver(&observer);
115 }
116
117 TEST_F(WebThreadImplForSchedulerTest, TestWorkBatchWithThreeTasks) {
118 MockTaskObserver observer;
119 thread_.addTaskObserver(&observer);
120 scoped_ptr<MockTask> task1(new MockTask());
121 scoped_ptr<MockTask> task2(new MockTask());
122 scoped_ptr<MockTask> task3(new MockTask());
123
124 scheduler_.SetWorkBatchSizeForTesting(kWorkBatchSize);
125 {
126 testing::InSequence sequence;
127 EXPECT_CALL(observer, willProcessTask());
128 EXPECT_CALL(*task1, run());
129 EXPECT_CALL(observer, didProcessTask());
130
131 EXPECT_CALL(observer, willProcessTask());
132 EXPECT_CALL(*task2, run());
133 EXPECT_CALL(observer, didProcessTask());
134
135 EXPECT_CALL(observer, willProcessTask());
136 EXPECT_CALL(*task3, run());
137 EXPECT_CALL(observer, didProcessTask());
138
139 EatDefaultTask(&observer);
140 }
141
142 thread_.postTask(blink::WebTraceLocation(), task1.release());
143 thread_.postTask(blink::WebTraceLocation(), task2.release());
144 thread_.postTask(blink::WebTraceLocation(), task3.release());
145 message_loop_.RunUntilIdle();
146 thread_.removeTaskObserver(&observer);
147 }
148
149 } // namespace content
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698