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

Side by Side Diff: third_party/WebKit/Source/platform/scheduler/base/time_domain_unittest.cc

Issue 2583333002: Revert of Dont post delayed DoWork for disabled queues. (Closed)
Patch Set: Created 3 years, 12 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 "platform/scheduler/base/time_domain.h" 5 #include "platform/scheduler/base/time_domain.h"
6 6
7 #include "base/macros.h" 7 #include "base/macros.h"
8 #include "base/memory/ptr_util.h" 8 #include "base/memory/ptr_util.h"
9 #include "base/test/simple_test_tick_clock.h" 9 #include "base/test/simple_test_tick_clock.h"
10 #include "cc/test/ordered_simple_task_runner.h" 10 #include "cc/test/ordered_simple_task_runner.h"
(...skipping 34 matching lines...) Expand 10 before | Expand all | Expand 10 after
45 base::trace_event::TracedValue* state) const override {} 45 base::trace_event::TracedValue* state) const override {}
46 46
47 base::Optional<base::TimeDelta> DelayTillNextTask( 47 base::Optional<base::TimeDelta> DelayTillNextTask(
48 LazyNow* lazy_now) override { 48 LazyNow* lazy_now) override {
49 return base::Optional<base::TimeDelta>(); 49 return base::Optional<base::TimeDelta>();
50 } 50 }
51 const char* GetName() const override { return "Test"; } 51 const char* GetName() const override { return "Test"; }
52 void OnRegisterWithTaskQueueManager( 52 void OnRegisterWithTaskQueueManager(
53 TaskQueueManager* task_queue_manager) override {} 53 TaskQueueManager* task_queue_manager) override {}
54 54
55 MOCK_METHOD2(RequestWakeupAt, 55 MOCK_METHOD2(RequestWakeup, void(base::TimeTicks now, base::TimeDelta delay));
56 void(LazyNow* lazy_now, base::TimeTicks run_time));
57
58 MOCK_METHOD1(CancelWakeupAt, void(base::TimeTicks run_time));
59 56
60 void SetNow(base::TimeTicks now) { now_ = now; } 57 void SetNow(base::TimeTicks now) { now_ = now; }
61 58
62 private: 59 private:
63 base::TimeTicks now_; 60 base::TimeTicks now_;
64 61
65 DISALLOW_COPY_AND_ASSIGN(MockTimeDomain); 62 DISALLOW_COPY_AND_ASSIGN(MockTimeDomain);
66 }; 63 };
67 64
68 class TimeDomainTest : public testing::Test { 65 class TimeDomainTest : public testing::Test {
(...skipping 15 matching lines...) Expand all
84 return new MockTimeDomain(nullptr); 81 return new MockTimeDomain(nullptr);
85 } 82 }
86 83
87 std::unique_ptr<MockTimeDomain> time_domain_; 84 std::unique_ptr<MockTimeDomain> time_domain_;
88 scoped_refptr<internal::TaskQueueImpl> task_queue_; 85 scoped_refptr<internal::TaskQueueImpl> task_queue_;
89 }; 86 };
90 87
91 TEST_F(TimeDomainTest, ScheduleDelayedWork) { 88 TEST_F(TimeDomainTest, ScheduleDelayedWork) {
92 base::TimeDelta delay = base::TimeDelta::FromMilliseconds(10); 89 base::TimeDelta delay = base::TimeDelta::FromMilliseconds(10);
93 base::TimeTicks delayed_runtime = time_domain_->Now() + delay; 90 base::TimeTicks delayed_runtime = time_domain_->Now() + delay;
94 EXPECT_CALL(*time_domain_.get(), RequestWakeupAt(_, delayed_runtime)); 91 EXPECT_CALL(*time_domain_.get(), RequestWakeup(_, delay));
95 LazyNow lazy_now = time_domain_->CreateLazyNow(); 92 base::TimeTicks now = time_domain_->Now();
96 time_domain_->ScheduleDelayedWork(task_queue_.get(), lazy_now.Now() + delay, 93 time_domain_->ScheduleDelayedWork(task_queue_.get(), now + delay, now);
97 &lazy_now);
98 94
99 base::TimeTicks next_scheduled_runtime; 95 base::TimeTicks next_scheduled_runtime;
100 EXPECT_TRUE(time_domain_->NextScheduledRunTime(&next_scheduled_runtime)); 96 EXPECT_TRUE(time_domain_->NextScheduledRunTime(&next_scheduled_runtime));
101 EXPECT_EQ(delayed_runtime, next_scheduled_runtime); 97 EXPECT_EQ(delayed_runtime, next_scheduled_runtime);
102 98
103 TaskQueue* next_task_queue; 99 TaskQueue* next_task_queue;
104 EXPECT_TRUE(time_domain_->NextScheduledTaskQueue(&next_task_queue)); 100 EXPECT_TRUE(time_domain_->NextScheduledTaskQueue(&next_task_queue));
105 EXPECT_EQ(task_queue_.get(), next_task_queue); 101 EXPECT_EQ(task_queue_.get(), next_task_queue);
106 } 102 }
107 103
108 TEST_F(TimeDomainTest, ScheduleDelayedWorkSupersedesPreviousWakeup) { 104 TEST_F(TimeDomainTest, ScheduleDelayedWorkSupersedesPreviousWakeup) {
109 base::TimeDelta delay1 = base::TimeDelta::FromMilliseconds(10); 105 base::TimeDelta delay1 = base::TimeDelta::FromMilliseconds(10);
110 base::TimeDelta delay2 = base::TimeDelta::FromMilliseconds(100); 106 base::TimeDelta delay2 = base::TimeDelta::FromMilliseconds(100);
111 base::TimeTicks delayed_runtime1 = time_domain_->Now() + delay1; 107 base::TimeTicks delayed_runtime1 = time_domain_->Now() + delay1;
112 base::TimeTicks delayed_runtime2 = time_domain_->Now() + delay2; 108 base::TimeTicks delayed_runtime2 = time_domain_->Now() + delay2;
113 EXPECT_CALL(*time_domain_.get(), RequestWakeupAt(_, delayed_runtime1)); 109 EXPECT_CALL(*time_domain_.get(), RequestWakeup(_, delay1));
114 LazyNow lazy_now = time_domain_->CreateLazyNow(); 110 base::TimeTicks now = time_domain_->Now();
115 time_domain_->ScheduleDelayedWork(task_queue_.get(), delayed_runtime1, 111 time_domain_->ScheduleDelayedWork(task_queue_.get(), delayed_runtime1, now);
116 &lazy_now);
117 112
118 base::TimeTicks next_scheduled_runtime; 113 base::TimeTicks next_scheduled_runtime;
119 EXPECT_TRUE(time_domain_->NextScheduledRunTime(&next_scheduled_runtime)); 114 EXPECT_TRUE(time_domain_->NextScheduledRunTime(&next_scheduled_runtime));
120 EXPECT_EQ(delayed_runtime1, next_scheduled_runtime); 115 EXPECT_EQ(delayed_runtime1, next_scheduled_runtime);
121 116
122 Mock::VerifyAndClearExpectations(time_domain_.get()); 117 Mock::VerifyAndClearExpectations(time_domain_.get());
123 118
124 // Now scheduler a later wakeup, which should replace the previously requested 119 // Now scheduler a later wakeup, which should replace the previously requested
125 // one. 120 // one.
126 EXPECT_CALL(*time_domain_.get(), RequestWakeupAt(_, delayed_runtime2)); 121 EXPECT_CALL(*time_domain_.get(), RequestWakeup(_, delay2));
127 time_domain_->ScheduleDelayedWork(task_queue_.get(), delayed_runtime2, 122 time_domain_->ScheduleDelayedWork(task_queue_.get(), delayed_runtime2, now);
128 &lazy_now);
129 123
130 EXPECT_TRUE(time_domain_->NextScheduledRunTime(&next_scheduled_runtime)); 124 EXPECT_TRUE(time_domain_->NextScheduledRunTime(&next_scheduled_runtime));
131 EXPECT_EQ(delayed_runtime2, next_scheduled_runtime); 125 EXPECT_EQ(delayed_runtime2, next_scheduled_runtime);
132 } 126 }
133 127
134 TEST_F(TimeDomainTest, RequestWakeupAt_OnlyCalledForEarlierTasks) { 128 TEST_F(TimeDomainTest, RequestWakeup_OnlyCalledForEarlierTasks) {
135 scoped_refptr<internal::TaskQueueImpl> task_queue2 = make_scoped_refptr( 129 scoped_refptr<internal::TaskQueueImpl> task_queue2 = make_scoped_refptr(
136 new internal::TaskQueueImpl(nullptr, time_domain_.get(), 130 new internal::TaskQueueImpl(nullptr, time_domain_.get(),
137 TaskQueue::Spec(TaskQueue::QueueType::TEST), 131 TaskQueue::Spec(TaskQueue::QueueType::TEST),
138 "test.category", "test.category")); 132 "test.category", "test.category"));
139 133
140 scoped_refptr<internal::TaskQueueImpl> task_queue3 = make_scoped_refptr( 134 scoped_refptr<internal::TaskQueueImpl> task_queue3 = make_scoped_refptr(
141 new internal::TaskQueueImpl(nullptr, time_domain_.get(), 135 new internal::TaskQueueImpl(nullptr, time_domain_.get(),
142 TaskQueue::Spec(TaskQueue::QueueType::TEST), 136 TaskQueue::Spec(TaskQueue::QueueType::TEST),
143 "test.category", "test.category")); 137 "test.category", "test.category"));
144 138
145 scoped_refptr<internal::TaskQueueImpl> task_queue4 = make_scoped_refptr( 139 scoped_refptr<internal::TaskQueueImpl> task_queue4 = make_scoped_refptr(
146 new internal::TaskQueueImpl(nullptr, time_domain_.get(), 140 new internal::TaskQueueImpl(nullptr, time_domain_.get(),
147 TaskQueue::Spec(TaskQueue::QueueType::TEST), 141 TaskQueue::Spec(TaskQueue::QueueType::TEST),
148 "test.category", "test.category")); 142 "test.category", "test.category"));
149 143
150 base::TimeDelta delay1 = base::TimeDelta::FromMilliseconds(10); 144 base::TimeDelta delay1 = base::TimeDelta::FromMilliseconds(10);
151 base::TimeDelta delay2 = base::TimeDelta::FromMilliseconds(20); 145 base::TimeDelta delay2 = base::TimeDelta::FromMilliseconds(20);
152 base::TimeDelta delay3 = base::TimeDelta::FromMilliseconds(30); 146 base::TimeDelta delay3 = base::TimeDelta::FromMilliseconds(30);
153 base::TimeDelta delay4 = base::TimeDelta::FromMilliseconds(1); 147 base::TimeDelta delay4 = base::TimeDelta::FromMilliseconds(1);
154 148
155 // RequestWakeupAt should always be called if there are no other wakeups. 149 // RequestWakeup should always be called if there are no other wakeups.
156 LazyNow lazy_now = time_domain_->CreateLazyNow(); 150 EXPECT_CALL(*time_domain_.get(), RequestWakeup(_, delay1));
157 EXPECT_CALL(*time_domain_.get(), RequestWakeupAt(_, lazy_now.Now() + delay1)); 151 base::TimeTicks now = time_domain_->Now();
158 time_domain_->ScheduleDelayedWork(task_queue_.get(), lazy_now.Now() + delay1, 152 time_domain_->ScheduleDelayedWork(task_queue_.get(), now + delay1, now);
159 &lazy_now);
160 153
161 Mock::VerifyAndClearExpectations(time_domain_.get()); 154 Mock::VerifyAndClearExpectations(time_domain_.get());
162 155
163 // RequestWakeupAt should not be called when scheduling later tasks. 156 // RequestWakeup should not be called when scheduling later tasks.
164 EXPECT_CALL(*time_domain_.get(), RequestWakeupAt(_, _)).Times(0); 157 EXPECT_CALL(*time_domain_.get(), RequestWakeup(_, _)).Times(0);
165 time_domain_->ScheduleDelayedWork(task_queue2.get(), lazy_now.Now() + delay2, 158 time_domain_->ScheduleDelayedWork(task_queue2.get(), now + delay2, now);
166 &lazy_now); 159 time_domain_->ScheduleDelayedWork(task_queue3.get(), now + delay3, now);
167 time_domain_->ScheduleDelayedWork(task_queue3.get(), lazy_now.Now() + delay3,
168 &lazy_now);
169 160
170 // RequestWakeupAt should be called when scheduling earlier tasks. 161 // RequestWakeup should be called when scheduling earlier tasks.
171 Mock::VerifyAndClearExpectations(time_domain_.get()); 162 Mock::VerifyAndClearExpectations(time_domain_.get());
172 EXPECT_CALL(*time_domain_.get(), RequestWakeupAt(_, lazy_now.Now() + delay4)); 163 EXPECT_CALL(*time_domain_.get(), RequestWakeup(_, delay4));
173 time_domain_->ScheduleDelayedWork(task_queue4.get(), lazy_now.Now() + delay4, 164 time_domain_->ScheduleDelayedWork(task_queue4.get(), now + delay4, now);
174 &lazy_now);
175 165
176 task_queue2->UnregisterTaskQueue(); 166 task_queue2->UnregisterTaskQueue();
177 task_queue3->UnregisterTaskQueue(); 167 task_queue3->UnregisterTaskQueue();
178 task_queue4->UnregisterTaskQueue(); 168 task_queue4->UnregisterTaskQueue();
179 } 169 }
180 170
181 TEST_F(TimeDomainTest, UnregisterQueue) { 171 TEST_F(TimeDomainTest, UnregisterQueue) {
182 scoped_refptr<internal::TaskQueueImpl> task_queue2_ = make_scoped_refptr( 172 scoped_refptr<internal::TaskQueueImpl> task_queue2_ = make_scoped_refptr(
183 new internal::TaskQueueImpl(nullptr, time_domain_.get(), 173 new internal::TaskQueueImpl(nullptr, time_domain_.get(),
184 TaskQueue::Spec(TaskQueue::QueueType::TEST), 174 TaskQueue::Spec(TaskQueue::QueueType::TEST),
185 "test.category", "test.category")); 175 "test.category", "test.category"));
186 176
187 EXPECT_CALL(*time_domain_.get(), RequestWakeupAt(_, _)).Times(1); 177 EXPECT_CALL(*time_domain_.get(), RequestWakeup(_, _)).Times(1);
188 LazyNow lazy_now = time_domain_->CreateLazyNow(); 178 base::TimeTicks now = time_domain_->Now();
189 time_domain_->ScheduleDelayedWork( 179 time_domain_->ScheduleDelayedWork(
190 task_queue_.get(), lazy_now.Now() + base::TimeDelta::FromMilliseconds(10), 180 task_queue_.get(), now + base::TimeDelta::FromMilliseconds(10), now);
191 &lazy_now);
192 time_domain_->ScheduleDelayedWork( 181 time_domain_->ScheduleDelayedWork(
193 task_queue2_.get(), 182 task_queue2_.get(), now + base::TimeDelta::FromMilliseconds(100), now);
194 lazy_now.Now() + base::TimeDelta::FromMilliseconds(100), &lazy_now);
195 183
196 TaskQueue* next_task_queue; 184 TaskQueue* next_task_queue;
197 EXPECT_TRUE(time_domain_->NextScheduledTaskQueue(&next_task_queue)); 185 EXPECT_TRUE(time_domain_->NextScheduledTaskQueue(&next_task_queue));
198 EXPECT_EQ(task_queue_.get(), next_task_queue); 186 EXPECT_EQ(task_queue_.get(), next_task_queue);
199 187
200 time_domain_->UnregisterQueue(task_queue_.get()); 188 time_domain_->UnregisterQueue(task_queue_.get());
201 task_queue_ = scoped_refptr<internal::TaskQueueImpl>(); 189 task_queue_ = scoped_refptr<internal::TaskQueueImpl>();
202 EXPECT_TRUE(time_domain_->NextScheduledTaskQueue(&next_task_queue)); 190 EXPECT_TRUE(time_domain_->NextScheduledTaskQueue(&next_task_queue));
203 EXPECT_EQ(task_queue2_.get(), next_task_queue); 191 EXPECT_EQ(task_queue2_.get(), next_task_queue);
204 192
205 time_domain_->UnregisterQueue(task_queue2_.get()); 193 time_domain_->UnregisterQueue(task_queue2_.get());
206 EXPECT_FALSE(time_domain_->NextScheduledTaskQueue(&next_task_queue)); 194 EXPECT_FALSE(time_domain_->NextScheduledTaskQueue(&next_task_queue));
207 } 195 }
208 196
209 TEST_F(TimeDomainTest, WakeupReadyDelayedQueues) { 197 TEST_F(TimeDomainTest, WakeupReadyDelayedQueues) {
210 base::TimeDelta delay = base::TimeDelta::FromMilliseconds(50); 198 base::TimeDelta delay = base::TimeDelta::FromMilliseconds(50);
211 LazyNow lazy_now = time_domain_->CreateLazyNow(); 199 EXPECT_CALL(*time_domain_.get(), RequestWakeup(_, delay));
212 base::TimeTicks delayed_runtime = lazy_now.Now() + delay; 200 base::TimeTicks now = time_domain_->Now();
213 EXPECT_CALL(*time_domain_.get(), RequestWakeupAt(_, delayed_runtime)); 201 base::TimeTicks delayed_runtime = now + delay;
214 time_domain_->ScheduleDelayedWork(task_queue_.get(), delayed_runtime, 202 time_domain_->ScheduleDelayedWork(task_queue_.get(), delayed_runtime, now);
215 &lazy_now);
216 203
217 base::TimeTicks next_run_time; 204 base::TimeTicks next_run_time;
218 ASSERT_TRUE(time_domain_->NextScheduledRunTime(&next_run_time)); 205 ASSERT_TRUE(time_domain_->NextScheduledRunTime(&next_run_time));
219 EXPECT_EQ(delayed_runtime, next_run_time); 206 EXPECT_EQ(delayed_runtime, next_run_time);
220 207
208 LazyNow lazy_now = time_domain_->CreateLazyNow();
221 time_domain_->WakeupReadyDelayedQueues(&lazy_now); 209 time_domain_->WakeupReadyDelayedQueues(&lazy_now);
222 ASSERT_TRUE(time_domain_->NextScheduledRunTime(&next_run_time)); 210 ASSERT_TRUE(time_domain_->NextScheduledRunTime(&next_run_time));
223 EXPECT_EQ(delayed_runtime, next_run_time); 211 EXPECT_EQ(delayed_runtime, next_run_time);
224 212
225 time_domain_->SetNow(delayed_runtime); 213 time_domain_->SetNow(delayed_runtime);
226 lazy_now = time_domain_->CreateLazyNow(); 214 lazy_now = time_domain_->CreateLazyNow();
227 time_domain_->WakeupReadyDelayedQueues(&lazy_now); 215 time_domain_->WakeupReadyDelayedQueues(&lazy_now);
228 ASSERT_FALSE(time_domain_->NextScheduledRunTime(&next_run_time)); 216 ASSERT_FALSE(time_domain_->NextScheduledRunTime(&next_run_time));
229 } 217 }
230 218
(...skipping 17 matching lines...) Expand all
248 std::unique_ptr<MockObserver> observer_; 236 std::unique_ptr<MockObserver> observer_;
249 }; 237 };
250 238
251 TEST_F(TimeDomainWithObserverTest, OnTimeDomainHasImmediateWork) { 239 TEST_F(TimeDomainWithObserverTest, OnTimeDomainHasImmediateWork) {
252 EXPECT_CALL(*observer_, OnTimeDomainHasImmediateWork(task_queue_.get())); 240 EXPECT_CALL(*observer_, OnTimeDomainHasImmediateWork(task_queue_.get()));
253 time_domain_->OnQueueHasImmediateWork(task_queue_.get()); 241 time_domain_->OnQueueHasImmediateWork(task_queue_.get());
254 } 242 }
255 243
256 TEST_F(TimeDomainWithObserverTest, OnTimeDomainHasDelayedWork) { 244 TEST_F(TimeDomainWithObserverTest, OnTimeDomainHasDelayedWork) {
257 EXPECT_CALL(*observer_, OnTimeDomainHasDelayedWork(task_queue_.get())); 245 EXPECT_CALL(*observer_, OnTimeDomainHasDelayedWork(task_queue_.get()));
258 EXPECT_CALL(*time_domain_.get(), RequestWakeupAt(_, _)); 246 EXPECT_CALL(*time_domain_.get(), RequestWakeup(_, _));
259 LazyNow lazy_now = time_domain_->CreateLazyNow(); 247 base::TimeTicks now = time_domain_->Now();
260 time_domain_->ScheduleDelayedWork( 248 time_domain_->ScheduleDelayedWork(
261 task_queue_.get(), lazy_now.Now() + base::TimeDelta::FromMilliseconds(10), 249 task_queue_.get(), now + base::TimeDelta::FromMilliseconds(10), now);
262 &lazy_now);
263 } 250 }
264 251
265 } // namespace scheduler 252 } // namespace scheduler
266 } // namespace blink 253 } // namespace blink
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698