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

Side by Side Diff: cc/scheduler/scheduler_unittest.cc

Issue 723713003: cc: Add SetChildrenNeedBeginFrames() & SendBeginFramesToChildren() (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Created 6 years, 1 month 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 2011 The Chromium Authors. All rights reserved. 1 // Copyright 2011 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 "cc/scheduler/scheduler.h" 5 #include "cc/scheduler/scheduler.h"
6 6
7 #include <string> 7 #include <string>
8 #include <vector> 8 #include <vector>
9 9
10 #include "base/debug/trace_event.h" 10 #include "base/debug/trace_event.h"
(...skipping 72 matching lines...) Expand 10 before | Expand all | Expand 10 after
83 bool IsOnBatteryPowerImpl() override { return on_battery_power_impl_; } 83 bool IsOnBatteryPowerImpl() override { return on_battery_power_impl_; }
84 84
85 private: 85 private:
86 bool on_battery_power_impl_; 86 bool on_battery_power_impl_;
87 }; 87 };
88 88
89 FakeSchedulerClient() 89 FakeSchedulerClient()
90 : automatic_swap_ack_(true), 90 : automatic_swap_ack_(true),
91 swap_contains_incomplete_tile_(false), 91 swap_contains_incomplete_tile_(false),
92 redraw_will_happen_if_update_visible_tiles_happens_(false), 92 redraw_will_happen_if_update_visible_tiles_happens_(false),
93 begin_frame_is_sent_to_children_(false),
93 now_src_(TestNowSource::Create()), 94 now_src_(TestNowSource::Create()),
94 task_runner_(new OrderedSimpleTaskRunner(now_src_, true)), 95 task_runner_(new OrderedSimpleTaskRunner(now_src_, true)),
95 fake_external_begin_frame_source_(nullptr), 96 fake_external_begin_frame_source_(nullptr),
96 fake_power_monitor_source_(new FakePowerMonitorSource), 97 fake_power_monitor_source_(new FakePowerMonitorSource),
97 power_monitor_(make_scoped_ptr<base::PowerMonitorSource>( 98 power_monitor_(make_scoped_ptr<base::PowerMonitorSource>(
98 fake_power_monitor_source_)), 99 fake_power_monitor_source_)),
99 scheduler_(nullptr) { 100 scheduler_(nullptr) {
100 // A bunch of tests require Now() to be > BeginFrameArgs::DefaultInterval() 101 // A bunch of tests require Now() to be > BeginFrameArgs::DefaultInterval()
101 now_src_->AdvanceNow(base::TimeDelta::FromMilliseconds(100)); 102 now_src_->AdvanceNow(base::TimeDelta::FromMilliseconds(100));
102 // Fail if we need to run 100 tasks in a row. 103 // Fail if we need to run 100 tasks in a row.
103 task_runner_->SetRunTaskLimit(100); 104 task_runner_->SetRunTaskLimit(100);
104 Reset(); 105 Reset();
105 } 106 }
106 107
107 void Reset() { 108 void Reset() {
108 actions_.clear(); 109 actions_.clear();
109 states_.clear(); 110 states_.clear();
110 draw_will_happen_ = true; 111 draw_will_happen_ = true;
111 swap_will_happen_if_draw_happens_ = true; 112 swap_will_happen_if_draw_happens_ = true;
112 num_draws_ = 0; 113 num_draws_ = 0;
113 log_anticipated_draw_time_change_ = false; 114 log_anticipated_draw_time_change_ = false;
115 begin_frame_is_sent_to_children_ = false;
114 } 116 }
115 117
116 TestScheduler* CreateScheduler(const SchedulerSettings& settings) { 118 TestScheduler* CreateScheduler(const SchedulerSettings& settings) {
117 scoped_ptr<FakeExternalBeginFrameSource> fake_external_begin_frame_source; 119 scoped_ptr<FakeExternalBeginFrameSource> fake_external_begin_frame_source;
118 if (settings.use_external_begin_frame_source && 120 if (settings.use_external_begin_frame_source &&
119 settings.throttle_frame_production) { 121 settings.throttle_frame_production) {
120 fake_external_begin_frame_source.reset( 122 fake_external_begin_frame_source.reset(
121 new FakeExternalBeginFrameSource(this)); 123 new FakeExternalBeginFrameSource(this));
122 fake_external_begin_frame_source_ = 124 fake_external_begin_frame_source_ =
123 fake_external_begin_frame_source.get(); 125 fake_external_begin_frame_source.get();
(...skipping 156 matching lines...) Expand 10 before | Expand all | Expand 10 after
280 base::TimeDelta DrawDurationEstimate() override { return base::TimeDelta(); } 282 base::TimeDelta DrawDurationEstimate() override { return base::TimeDelta(); }
281 base::TimeDelta BeginMainFrameToCommitDurationEstimate() override { 283 base::TimeDelta BeginMainFrameToCommitDurationEstimate() override {
282 return base::TimeDelta(); 284 return base::TimeDelta();
283 } 285 }
284 base::TimeDelta CommitToActivateDurationEstimate() override { 286 base::TimeDelta CommitToActivateDurationEstimate() override {
285 return base::TimeDelta(); 287 return base::TimeDelta();
286 } 288 }
287 289
288 void DidBeginImplFrameDeadline() override {} 290 void DidBeginImplFrameDeadline() override {}
289 291
292 void SendBeginFramesToChildren(const BeginFrameArgs& args) override {
293 begin_frame_is_sent_to_children_ = true;
294 }
295
290 base::Callback<bool(void)> ImplFrameDeadlinePending(bool state) { 296 base::Callback<bool(void)> ImplFrameDeadlinePending(bool state) {
291 return base::Bind(&FakeSchedulerClient::ImplFrameDeadlinePendingCallback, 297 return base::Bind(&FakeSchedulerClient::ImplFrameDeadlinePendingCallback,
292 base::Unretained(this), 298 base::Unretained(this),
293 state); 299 state);
294 } 300 }
295 301
302 bool begin_frame_is_sent_to_children() const {
303 return begin_frame_is_sent_to_children_;
304 }
305
296 protected: 306 protected:
297 bool ImplFrameDeadlinePendingCallback(bool state) { 307 bool ImplFrameDeadlinePendingCallback(bool state) {
298 return scheduler_->BeginImplFrameDeadlinePending() == state; 308 return scheduler_->BeginImplFrameDeadlinePending() == state;
299 } 309 }
300 310
301 bool draw_will_happen_; 311 bool draw_will_happen_;
302 bool swap_will_happen_if_draw_happens_; 312 bool swap_will_happen_if_draw_happens_;
303 bool automatic_swap_ack_; 313 bool automatic_swap_ack_;
304 int num_draws_; 314 int num_draws_;
305 bool log_anticipated_draw_time_change_; 315 bool log_anticipated_draw_time_change_;
306 bool swap_contains_incomplete_tile_; 316 bool swap_contains_incomplete_tile_;
307 bool redraw_will_happen_if_update_visible_tiles_happens_; 317 bool redraw_will_happen_if_update_visible_tiles_happens_;
318 bool begin_frame_is_sent_to_children_;
308 base::TimeTicks posted_begin_impl_frame_deadline_; 319 base::TimeTicks posted_begin_impl_frame_deadline_;
309 std::vector<const char*> actions_; 320 std::vector<const char*> actions_;
310 std::vector<scoped_refptr<base::debug::ConvertableToTraceFormat>> states_; 321 std::vector<scoped_refptr<base::debug::ConvertableToTraceFormat>> states_;
311 scoped_refptr<TestNowSource> now_src_; 322 scoped_refptr<TestNowSource> now_src_;
312 scoped_refptr<OrderedSimpleTaskRunner> task_runner_; 323 scoped_refptr<OrderedSimpleTaskRunner> task_runner_;
313 FakeExternalBeginFrameSource* fake_external_begin_frame_source_; 324 FakeExternalBeginFrameSource* fake_external_begin_frame_source_;
314 FakePowerMonitorSource* fake_power_monitor_source_; 325 FakePowerMonitorSource* fake_power_monitor_source_;
315 base::PowerMonitor power_monitor_; 326 base::PowerMonitor power_monitor_;
316 scoped_ptr<TestScheduler> scheduler_; 327 scoped_ptr<TestScheduler> scheduler_;
317 }; 328 };
(...skipping 41 matching lines...) Expand 10 before | Expand all | Expand 10 after
359 scheduler->SetCanStart(); 370 scheduler->SetCanStart();
360 scheduler->SetVisible(true); 371 scheduler->SetVisible(true);
361 scheduler->SetCanDraw(true); 372 scheduler->SetCanDraw(true);
362 373
363 EXPECT_SINGLE_ACTION("ScheduledActionBeginOutputSurfaceCreation", client); 374 EXPECT_SINGLE_ACTION("ScheduledActionBeginOutputSurfaceCreation", client);
364 client.Reset(); 375 client.Reset();
365 scheduler->DidCreateAndInitializeOutputSurface(); 376 scheduler->DidCreateAndInitializeOutputSurface();
366 EXPECT_NO_ACTION(client); 377 EXPECT_NO_ACTION(client);
367 } 378 }
368 379
380 TEST(SchedulerTest, SendBeginFramesToChildren) {
381 FakeSchedulerClient client;
382 SchedulerSettings scheduler_settings;
383 scheduler_settings.use_external_begin_frame_source = true;
384 scheduler_settings.forward_begin_frames_to_children = true;
385 TestScheduler* scheduler = client.CreateScheduler(scheduler_settings);
386 scheduler->SetCanStart();
387 scheduler->SetVisible(true);
388 scheduler->SetCanDraw(true);
389
390 EXPECT_SINGLE_ACTION("ScheduledActionBeginOutputSurfaceCreation", client);
391 InitializeOutputSurfaceAndFirstCommit(scheduler, &client);
392
393 client.Reset();
394 EXPECT_FALSE(client.begin_frame_is_sent_to_children());
395 scheduler->SetNeedsCommit();
396 EXPECT_SINGLE_ACTION("SetNeedsBeginFrames(true)", client);
397 client.Reset();
398
399 scheduler->SetChildrenNeedBeginFrames(true);
400
401 client.AdvanceFrame();
402 EXPECT_TRUE(client.begin_frame_is_sent_to_children());
403 EXPECT_TRUE(scheduler->BeginImplFrameDeadlinePending());
404 EXPECT_ACTION("WillBeginImplFrame", client, 0, 2);
405 EXPECT_ACTION("ScheduledActionSendBeginMainFrame", client, 1, 2);
406 EXPECT_TRUE(client.needs_begin_frames());
407 client.Reset();
408 }
409
369 TEST(SchedulerTest, RequestCommit) { 410 TEST(SchedulerTest, RequestCommit) {
370 FakeSchedulerClient client; 411 FakeSchedulerClient client;
371 SchedulerSettings scheduler_settings; 412 SchedulerSettings scheduler_settings;
372 scheduler_settings.use_external_begin_frame_source = true; 413 scheduler_settings.use_external_begin_frame_source = true;
373 TestScheduler* scheduler = client.CreateScheduler(scheduler_settings); 414 TestScheduler* scheduler = client.CreateScheduler(scheduler_settings);
374 scheduler->SetCanStart(); 415 scheduler->SetCanStart();
375 scheduler->SetVisible(true); 416 scheduler->SetVisible(true);
376 scheduler->SetCanDraw(true); 417 scheduler->SetCanDraw(true);
377 418
378 EXPECT_SINGLE_ACTION("ScheduledActionBeginOutputSurfaceCreation", client); 419 EXPECT_SINGLE_ACTION("ScheduledActionBeginOutputSurfaceCreation", client);
(...skipping 1793 matching lines...) Expand 10 before | Expand all | Expand 10 after
2172 2213
2173 // Deadline task is pending 2214 // Deadline task is pending
2174 EXPECT_TRUE(scheduler->BeginImplFrameDeadlinePending()); 2215 EXPECT_TRUE(scheduler->BeginImplFrameDeadlinePending());
2175 client.task_runner().RunPendingTasks(); 2216 client.task_runner().RunPendingTasks();
2176 // Deadline task runs immediately 2217 // Deadline task runs immediately
2177 EXPECT_FALSE(scheduler->BeginImplFrameDeadlinePending()); 2218 EXPECT_FALSE(scheduler->BeginImplFrameDeadlinePending());
2178 } 2219 }
2179 2220
2180 } // namespace 2221 } // namespace
2181 } // namespace cc 2222 } // namespace cc
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698