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

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

Issue 1025323003: Introduce a SchedulerHelper in content/child/scheduler (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Rebase Created 5 years, 8 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 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 "content/renderer/scheduler/renderer_scheduler_impl.h" 5 #include "content/renderer/scheduler/renderer_scheduler_impl.h"
6 6
7 #include "base/callback.h" 7 #include "base/callback.h"
8 #include "cc/output/begin_frame_args.h" 8 #include "cc/output/begin_frame_args.h"
9 #include "cc/test/ordered_simple_task_runner.h" 9 #include "cc/test/ordered_simple_task_runner.h"
10 #include "content/renderer/scheduler/nestable_task_runner_for_test.h" 10 #include "content/child/scheduler/nestable_task_runner_for_test.h"
11 #include "content/renderer/scheduler/renderer_scheduler_message_loop_delegate.h" 11 #include "content/child/scheduler/scheduler_message_loop_delegate.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 14
15 namespace content { 15 namespace content {
16 16
17 namespace { 17 namespace {
18 class FakeInputEvent : public blink::WebInputEvent { 18 class FakeInputEvent : public blink::WebInputEvent {
19 public: 19 public:
20 explicit FakeInputEvent(blink::WebInputEvent::Type event_type) 20 explicit FakeInputEvent(blink::WebInputEvent::Type event_type)
21 : WebInputEvent(sizeof(FakeInputEvent)) { 21 : WebInputEvent(sizeof(FakeInputEvent)) {
(...skipping 11 matching lines...) Expand all
33 std::string value) { 33 std::string value) {
34 vector->push_back(value); 34 vector->push_back(value);
35 } 35 }
36 36
37 void AppendToVectorIdleTestTask(std::vector<std::string>* vector, 37 void AppendToVectorIdleTestTask(std::vector<std::string>* vector,
38 std::string value, 38 std::string value,
39 base::TimeTicks deadline) { 39 base::TimeTicks deadline) {
40 AppendToVectorTestTask(vector, value); 40 AppendToVectorTestTask(vector, value);
41 } 41 }
42 42
43 void NullTask() {
44 }
45
46 void AppendToVectorReentrantTask(
47 base::SingleThreadTaskRunner* task_runner,
48 std::vector<int>* vector,
49 int* reentrant_count,
50 int max_reentrant_count) {
51 vector->push_back((*reentrant_count)++);
52 if (*reentrant_count < max_reentrant_count) {
53 task_runner->PostTask(
54 FROM_HERE, base::Bind(AppendToVectorReentrantTask,
55 base::Unretained(task_runner), vector,
56 reentrant_count, max_reentrant_count));
57 }
58 }
59
60 void IdleTestTask(int* run_count,
61 base::TimeTicks* deadline_out,
62 base::TimeTicks deadline) {
63 (*run_count)++;
64 *deadline_out = deadline;
65 }
66
67 int max_idle_task_reposts = 2;
68
69 void RepostingIdleTestTask(
70 SingleThreadIdleTaskRunner* idle_task_runner,
71 int* run_count,
72 base::TimeTicks deadline) {
73 if ((*run_count + 1) < max_idle_task_reposts) {
74 idle_task_runner->PostIdleTask(
75 FROM_HERE,
76 base::Bind(&RepostingIdleTestTask, base::Unretained(idle_task_runner),
77 run_count));
78 }
79 (*run_count)++;
80 }
81
82 void UpdateClockToDeadlineIdleTestTask(
83 cc::TestNowSource* clock,
84 base::SingleThreadTaskRunner* task_runner,
85 int* run_count,
86 base::TimeTicks deadline) {
87 clock->SetNow(deadline);
88 // Due to the way in which OrderedSimpleTestRunner orders tasks and the fact
89 // that we updated the time within a task, the delayed pending task to call
90 // EndIdlePeriod will not happen until after a TaskQueueManager DoWork, so
91 // post a normal task here to ensure it runs before the next idle task.
92 task_runner->PostTask(FROM_HERE, base::Bind(NullTask));
93 (*run_count)++;
94 }
95
96 void PostingYieldingTestTask(
97 RendererSchedulerImpl* scheduler,
98 base::SingleThreadTaskRunner* task_runner,
99 bool simulate_input,
100 bool* should_yield_before,
101 bool* should_yield_after) {
102 *should_yield_before = scheduler->ShouldYieldForHighPriorityWork();
103 task_runner->PostTask(FROM_HERE, base::Bind(NullTask));
104 if (simulate_input) {
105 scheduler->DidReceiveInputEventOnCompositorThread(
106 FakeInputEvent(blink::WebInputEvent::GestureFlingStart));
107 }
108 *should_yield_after = scheduler->ShouldYieldForHighPriorityWork();
109 }
110
111 void AnticipationTestTask(RendererSchedulerImpl* scheduler,
112 bool simulate_input,
113 bool* is_anticipated_before,
114 bool* is_anticipated_after) {
115 *is_anticipated_before = scheduler->IsHighPriorityWorkAnticipated();
116 if (simulate_input) {
117 scheduler->DidReceiveInputEventOnCompositorThread(
118 FakeInputEvent(blink::WebInputEvent::GestureFlingStart));
119 }
120 *is_anticipated_after = scheduler->IsHighPriorityWorkAnticipated();
121 }
43 }; // namespace 122 }; // namespace
44 123
45 class RendererSchedulerImplTest : public testing::Test { 124 class RendererSchedulerImplTest : public testing::Test {
46 public: 125 public:
47 using Policy = RendererSchedulerImpl::Policy; 126 using Policy = RendererSchedulerImpl::Policy;
48 127
49 RendererSchedulerImplTest() 128 RendererSchedulerImplTest()
50 : clock_(cc::TestNowSource::Create(5000)), 129 : clock_(cc::TestNowSource::Create(5000)),
51 mock_task_runner_(new cc::OrderedSimpleTaskRunner(clock_, false)), 130 mock_task_runner_(new cc::OrderedSimpleTaskRunner(clock_, false)),
52 nestable_task_runner_( 131 nestable_task_runner_(
53 NestableTaskRunnerForTest::Create(mock_task_runner_)), 132 NestableTaskRunnerForTest::Create(mock_task_runner_)),
54 scheduler_(new RendererSchedulerImpl(nestable_task_runner_)), 133 scheduler_(new RendererSchedulerImpl(nestable_task_runner_)),
55 default_task_runner_(scheduler_->DefaultTaskRunner()), 134 default_task_runner_(scheduler_->DefaultTaskRunner()),
56 compositor_task_runner_(scheduler_->CompositorTaskRunner()), 135 compositor_task_runner_(scheduler_->CompositorTaskRunner()),
57 loading_task_runner_(scheduler_->LoadingTaskRunner()), 136 loading_task_runner_(scheduler_->LoadingTaskRunner()),
58 idle_task_runner_(scheduler_->IdleTaskRunner()) { 137 idle_task_runner_(scheduler_->IdleTaskRunner()) {
59 scheduler_->SetTimeSourceForTesting(clock_); 138 scheduler_->SetTimeSourceForTesting(clock_);
60 } 139 }
61 140
62 RendererSchedulerImplTest(base::MessageLoop* message_loop) 141 RendererSchedulerImplTest(base::MessageLoop* message_loop)
63 : clock_(cc::TestNowSource::Create(5000)), 142 : clock_(cc::TestNowSource::Create(5000)),
64 message_loop_(message_loop), 143 message_loop_(message_loop),
65 nestable_task_runner_( 144 nestable_task_runner_(
66 RendererSchedulerMessageLoopDelegate::Create(message_loop)), 145 SchedulerMessageLoopDelegate::Create(message_loop)),
67 scheduler_(new RendererSchedulerImpl(nestable_task_runner_)), 146 scheduler_(new RendererSchedulerImpl(nestable_task_runner_)),
68 default_task_runner_(scheduler_->DefaultTaskRunner()), 147 default_task_runner_(scheduler_->DefaultTaskRunner()),
69 compositor_task_runner_(scheduler_->CompositorTaskRunner()), 148 compositor_task_runner_(scheduler_->CompositorTaskRunner()),
70 loading_task_runner_(scheduler_->LoadingTaskRunner()), 149 loading_task_runner_(scheduler_->LoadingTaskRunner()),
71 idle_task_runner_(scheduler_->IdleTaskRunner()) { 150 idle_task_runner_(scheduler_->IdleTaskRunner()) {
72 scheduler_->SetTimeSourceForTesting(clock_); 151 scheduler_->SetTimeSourceForTesting(clock_);
73 } 152 }
74 ~RendererSchedulerImplTest() override {} 153 ~RendererSchedulerImplTest() override {}
75 154
76 void TearDown() override { 155 void TearDown() override {
(...skipping 76 matching lines...) Expand 10 before | Expand all | Expand 10 after
153 } 232 }
154 233
155 protected: 234 protected:
156 static base::TimeDelta priority_escalation_after_input_duration() { 235 static base::TimeDelta priority_escalation_after_input_duration() {
157 return base::TimeDelta::FromMilliseconds( 236 return base::TimeDelta::FromMilliseconds(
158 RendererSchedulerImpl::kPriorityEscalationAfterInputMillis); 237 RendererSchedulerImpl::kPriorityEscalationAfterInputMillis);
159 } 238 }
160 239
161 static base::TimeDelta maximum_idle_period_duration() { 240 static base::TimeDelta maximum_idle_period_duration() {
162 return base::TimeDelta::FromMilliseconds( 241 return base::TimeDelta::FromMilliseconds(
163 RendererSchedulerImpl::kMaximumIdlePeriodMillis); 242 SchedulerHelper::kMaximumIdlePeriodMillis);
164 }
165
166 base::TimeTicks CurrentIdleTaskDeadline() {
167 base::TimeTicks deadline;
168 scheduler_->CurrentIdleTaskDeadlineCallback(&deadline);
169 return deadline;
170 } 243 }
171 244
172 scoped_refptr<cc::TestNowSource> clock_; 245 scoped_refptr<cc::TestNowSource> clock_;
173 // Only one of mock_task_runner_ or message_loop_ will be set. 246 // Only one of mock_task_runner_ or message_loop_ will be set.
174 scoped_refptr<cc::OrderedSimpleTaskRunner> mock_task_runner_; 247 scoped_refptr<cc::OrderedSimpleTaskRunner> mock_task_runner_;
175 scoped_ptr<base::MessageLoop> message_loop_; 248 scoped_ptr<base::MessageLoop> message_loop_;
176 249
177 scoped_refptr<NestableSingleThreadTaskRunner> nestable_task_runner_; 250 scoped_refptr<NestableSingleThreadTaskRunner> nestable_task_runner_;
178 scoped_ptr<RendererSchedulerImpl> scheduler_; 251 scoped_ptr<RendererSchedulerImpl> scheduler_;
179 scoped_refptr<base::SingleThreadTaskRunner> default_task_runner_; 252 scoped_refptr<base::SingleThreadTaskRunner> default_task_runner_;
180 scoped_refptr<base::SingleThreadTaskRunner> compositor_task_runner_; 253 scoped_refptr<base::SingleThreadTaskRunner> compositor_task_runner_;
181 scoped_refptr<base::SingleThreadTaskRunner> loading_task_runner_; 254 scoped_refptr<base::SingleThreadTaskRunner> loading_task_runner_;
182 scoped_refptr<SingleThreadIdleTaskRunner> idle_task_runner_; 255 scoped_refptr<SingleThreadIdleTaskRunner> idle_task_runner_;
183 256
184 DISALLOW_COPY_AND_ASSIGN(RendererSchedulerImplTest); 257 DISALLOW_COPY_AND_ASSIGN(RendererSchedulerImplTest);
185 }; 258 };
186 259
187 void NullTask() {
188 }
189
190 void AppendToVectorReentrantTask(
191 scoped_refptr<base::SingleThreadTaskRunner> task_runner,
192 std::vector<int>* vector,
193 int* reentrant_count,
194 int max_reentrant_count) {
195 vector->push_back((*reentrant_count)++);
196 if (*reentrant_count < max_reentrant_count) {
197 task_runner->PostTask(
198 FROM_HERE, base::Bind(AppendToVectorReentrantTask, task_runner, vector,
199 reentrant_count, max_reentrant_count));
200 }
201 }
202
203 void IdleTestTask(int* run_count,
204 base::TimeTicks* deadline_out,
205 base::TimeTicks deadline) {
206 (*run_count)++;
207 *deadline_out = deadline;
208 }
209
210 void RepostingIdleTestTask(
211 scoped_refptr<SingleThreadIdleTaskRunner> idle_task_runner,
212 int* run_count,
213 base::TimeTicks deadline) {
214 if (*run_count == 0) {
215 idle_task_runner->PostIdleTask(
216 FROM_HERE,
217 base::Bind(&RepostingIdleTestTask, idle_task_runner, run_count));
218 }
219 (*run_count)++;
220 }
221
222 void UpdateClockToDeadlineIdleTestTask(
223 scoped_refptr<cc::TestNowSource> clock,
224 scoped_refptr<base::SingleThreadTaskRunner> task_runner,
225 int* run_count,
226 base::TimeTicks deadline) {
227 clock->SetNow(deadline);
228 // Due to the way in which OrderedSimpleTestRunner orders tasks and the fact
229 // that we updated the time within a task, the delayed pending task to call
230 // EndIdlePeriod will not happen until after a TaskQueueManager DoWork, so
231 // post a normal task here to ensure it runs before the next idle task.
232 task_runner->PostTask(FROM_HERE, base::Bind(NullTask));
233 (*run_count)++;
234 }
235
236 void PostingYieldingTestTask(
237 RendererSchedulerImpl* scheduler,
238 scoped_refptr<base::SingleThreadTaskRunner> task_runner,
239 bool simulate_input,
240 bool* should_yield_before,
241 bool* should_yield_after) {
242 *should_yield_before = scheduler->ShouldYieldForHighPriorityWork();
243 task_runner->PostTask(FROM_HERE, base::Bind(NullTask));
244 if (simulate_input) {
245 scheduler->DidReceiveInputEventOnCompositorThread(
246 FakeInputEvent(blink::WebInputEvent::GestureFlingStart));
247 }
248 *should_yield_after = scheduler->ShouldYieldForHighPriorityWork();
249 }
250
251 void AnticipationTestTask(RendererSchedulerImpl* scheduler,
252 bool simulate_input,
253 bool* is_anticipated_before,
254 bool* is_anticipated_after) {
255 *is_anticipated_before = scheduler->IsHighPriorityWorkAnticipated();
256 if (simulate_input) {
257 scheduler->DidReceiveInputEventOnCompositorThread(
258 FakeInputEvent(blink::WebInputEvent::GestureFlingStart));
259 }
260 *is_anticipated_after = scheduler->IsHighPriorityWorkAnticipated();
261 }
262
263 TEST_F(RendererSchedulerImplTest, TestPostDefaultTask) { 260 TEST_F(RendererSchedulerImplTest, TestPostDefaultTask) {
264 std::vector<std::string> run_order; 261 std::vector<std::string> run_order;
265 PostTestTasks(&run_order, "D1 D2 D3 D4"); 262 PostTestTasks(&run_order, "D1 D2 D3 D4");
266 263
267 RunUntilIdle(); 264 RunUntilIdle();
268 EXPECT_THAT(run_order, 265 EXPECT_THAT(run_order,
269 testing::ElementsAre(std::string("D1"), std::string("D2"), 266 testing::ElementsAre(std::string("D1"), std::string("D2"),
270 std::string("D3"), std::string("D4"))); 267 std::string("D3"), std::string("D4")));
271 } 268 }
272 269
(...skipping 46 matching lines...) Expand 10 before | Expand all | Expand 10 after
319 clock_->AdvanceNow(base::TimeDelta::FromMilliseconds(800)); 316 clock_->AdvanceNow(base::TimeDelta::FromMilliseconds(800));
320 scheduler_->DidCommitFrameToCompositor(); 317 scheduler_->DidCommitFrameToCompositor();
321 RunUntilIdle(); 318 RunUntilIdle();
322 EXPECT_EQ(1, run_count); 319 EXPECT_EQ(1, run_count);
323 EXPECT_EQ(expected_deadline, deadline_in_task); 320 EXPECT_EQ(expected_deadline, deadline_in_task);
324 } 321 }
325 322
326 TEST_F(RendererSchedulerImplTest, TestRepostingIdleTask) { 323 TEST_F(RendererSchedulerImplTest, TestRepostingIdleTask) {
327 int run_count = 0; 324 int run_count = 0;
328 325
326 max_idle_task_reposts = 2;
329 idle_task_runner_->PostIdleTask( 327 idle_task_runner_->PostIdleTask(
330 FROM_HERE, 328 FROM_HERE,
331 base::Bind(&RepostingIdleTestTask, idle_task_runner_, &run_count)); 329 base::Bind(&RepostingIdleTestTask, idle_task_runner_, &run_count));
332 EnableIdleTasks(); 330 EnableIdleTasks();
333 RunUntilIdle(); 331 RunUntilIdle();
334 EXPECT_EQ(1, run_count); 332 EXPECT_EQ(1, run_count);
335 333
336 // Reposted tasks shouldn't run until next idle period. 334 // Reposted tasks shouldn't run until next idle period.
337 RunUntilIdle(); 335 RunUntilIdle();
338 EXPECT_EQ(1, run_count); 336 EXPECT_EQ(1, run_count);
(...skipping 816 matching lines...) Expand 10 before | Expand all | Expand 10 after
1155 1153
1156 // After the delayed task has been run we should trigger an idle period. 1154 // After the delayed task has been run we should trigger an idle period.
1157 clock_->AdvanceNow(maximum_idle_period_duration()); 1155 clock_->AdvanceNow(maximum_idle_period_duration());
1158 RunUntilIdle(); 1156 RunUntilIdle();
1159 EXPECT_EQ(1, run_count); 1157 EXPECT_EQ(1, run_count);
1160 } 1158 }
1161 1159
1162 TEST_F(RendererSchedulerImplTest, TestLongIdlePeriodRepeating) { 1160 TEST_F(RendererSchedulerImplTest, TestLongIdlePeriodRepeating) {
1163 int run_count = 0; 1161 int run_count = 0;
1164 1162
1163 max_idle_task_reposts = 3;
1165 idle_task_runner_->PostIdleTask( 1164 idle_task_runner_->PostIdleTask(
1166 FROM_HERE, 1165 FROM_HERE,
1167 base::Bind(&RepostingIdleTestTask, idle_task_runner_, &run_count)); 1166 base::Bind(&RepostingIdleTestTask, idle_task_runner_, &run_count));
1168 1167
1169 scheduler_->BeginFrameNotExpectedSoon(); 1168 scheduler_->BeginFrameNotExpectedSoon();
1170 RunUntilIdle(); 1169 RunUntilIdle();
1171 EXPECT_EQ(1, run_count); // Should only run once per idle period. 1170 EXPECT_EQ(1, run_count); // Should only run once per idle period.
1172 1171
1173 // Advance time to start of next long idle period and check task reposted task 1172 // Advance time to start of next long idle period and check task reposted task
1174 // gets run. 1173 // gets run.
(...skipping 14 matching lines...) Expand all
1189 TEST_F(RendererSchedulerImplTest, TestLongIdlePeriodDoesNotWakeScheduler) { 1188 TEST_F(RendererSchedulerImplTest, TestLongIdlePeriodDoesNotWakeScheduler) {
1190 base::TimeTicks deadline_in_task; 1189 base::TimeTicks deadline_in_task;
1191 int run_count = 0; 1190 int run_count = 0;
1192 1191
1193 // Start a long idle period and get the time it should end. 1192 // Start a long idle period and get the time it should end.
1194 scheduler_->BeginFrameNotExpectedSoon(); 1193 scheduler_->BeginFrameNotExpectedSoon();
1195 // The scheduler should not run the initiate_next_long_idle_period task if 1194 // The scheduler should not run the initiate_next_long_idle_period task if
1196 // there are no idle tasks and no other task woke up the scheduler, thus 1195 // there are no idle tasks and no other task woke up the scheduler, thus
1197 // the idle period deadline shouldn't update at the end of the current long 1196 // the idle period deadline shouldn't update at the end of the current long
1198 // idle period. 1197 // idle period.
1199 base::TimeTicks idle_period_deadline = CurrentIdleTaskDeadline(); 1198 base::TimeTicks idle_period_deadline =
1199 scheduler_->CurrentIdleTaskDeadlineForTesting();
1200 clock_->AdvanceNow(maximum_idle_period_duration()); 1200 clock_->AdvanceNow(maximum_idle_period_duration());
1201 RunUntilIdle(); 1201 RunUntilIdle();
1202 1202
1203 base::TimeTicks new_idle_period_deadline = CurrentIdleTaskDeadline(); 1203 base::TimeTicks new_idle_period_deadline =
1204 scheduler_->CurrentIdleTaskDeadlineForTesting();
1204 EXPECT_EQ(idle_period_deadline, new_idle_period_deadline); 1205 EXPECT_EQ(idle_period_deadline, new_idle_period_deadline);
1205 1206
1206 // Posting a after-wakeup idle task also shouldn't wake the scheduler or 1207 // Posting a after-wakeup idle task also shouldn't wake the scheduler or
1207 // initiate the next long idle period. 1208 // initiate the next long idle period.
1208 idle_task_runner_->PostIdleTaskAfterWakeup( 1209 idle_task_runner_->PostIdleTaskAfterWakeup(
1209 FROM_HERE, 1210 FROM_HERE,
1210 base::Bind(&IdleTestTask, &run_count, &deadline_in_task)); 1211 base::Bind(&IdleTestTask, &run_count, &deadline_in_task));
1211 RunUntilIdle(); 1212 RunUntilIdle();
1212 new_idle_period_deadline = CurrentIdleTaskDeadline(); 1213 new_idle_period_deadline = scheduler_->CurrentIdleTaskDeadlineForTesting();
1213 EXPECT_EQ(idle_period_deadline, new_idle_period_deadline); 1214 EXPECT_EQ(idle_period_deadline, new_idle_period_deadline);
1214 EXPECT_EQ(0, run_count); 1215 EXPECT_EQ(0, run_count);
1215 1216
1216 // Running a normal task should initiate a new long idle period though. 1217 // Running a normal task should initiate a new long idle period though.
1217 default_task_runner_->PostTask(FROM_HERE, base::Bind(&NullTask)); 1218 default_task_runner_->PostTask(FROM_HERE, base::Bind(&NullTask));
1218 RunUntilIdle(); 1219 RunUntilIdle();
1219 new_idle_period_deadline = CurrentIdleTaskDeadline(); 1220 new_idle_period_deadline = scheduler_->CurrentIdleTaskDeadlineForTesting();
1220 EXPECT_EQ(idle_period_deadline + maximum_idle_period_duration(), 1221 EXPECT_EQ(idle_period_deadline + maximum_idle_period_duration(),
1221 new_idle_period_deadline); 1222 new_idle_period_deadline);
1222 1223
1223 EXPECT_EQ(1, run_count); 1224 EXPECT_EQ(1, run_count);
1224 } 1225 }
1225 1226
1226 TEST_F(RendererSchedulerImplTest, TestLongIdlePeriodInTouchStartPolicy) { 1227 TEST_F(RendererSchedulerImplTest, TestLongIdlePeriodInTouchStartPolicy) {
1227 base::TimeTicks deadline_in_task; 1228 base::TimeTicks deadline_in_task;
1228 int run_count = 0; 1229 int run_count = 0;
1229 1230
(...skipping 65 matching lines...) Expand 10 before | Expand all | Expand 10 after
1295 1296
1296 // Next long idle period will be for the maximum time, so 1297 // Next long idle period will be for the maximum time, so
1297 // CanExceedIdleDeadlineIfRequired should return true. 1298 // CanExceedIdleDeadlineIfRequired should return true.
1298 scheduler_->WillBeginFrame(cc::BeginFrameArgs::Create( 1299 scheduler_->WillBeginFrame(cc::BeginFrameArgs::Create(
1299 BEGINFRAME_FROM_HERE, clock_->Now(), base::TimeTicks(), 1300 BEGINFRAME_FROM_HERE, clock_->Now(), base::TimeTicks(),
1300 base::TimeDelta::FromMilliseconds(1000), cc::BeginFrameArgs::NORMAL)); 1301 base::TimeDelta::FromMilliseconds(1000), cc::BeginFrameArgs::NORMAL));
1301 EXPECT_FALSE(scheduler_->CanExceedIdleDeadlineIfRequired()); 1302 EXPECT_FALSE(scheduler_->CanExceedIdleDeadlineIfRequired());
1302 } 1303 }
1303 1304
1304 } // namespace content 1305 } // namespace content
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698