| OLD | NEW |
| 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 #include "cc/scheduler/scheduler.h" | 4 #include "cc/scheduler/scheduler.h" |
| 5 | 5 |
| 6 #include <string> | 6 #include <string> |
| 7 #include <vector> | 7 #include <vector> |
| 8 | 8 |
| 9 #include "base/debug/trace_event.h" | 9 #include "base/debug/trace_event.h" |
| 10 #include "base/logging.h" | 10 #include "base/logging.h" |
| (...skipping 37 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 48 class FakeSchedulerClient : public SchedulerClient { | 48 class FakeSchedulerClient : public SchedulerClient { |
| 49 public: | 49 public: |
| 50 struct FakeBeginFrameSourceForFakeSchedulerClient | 50 struct FakeBeginFrameSourceForFakeSchedulerClient |
| 51 : public FakeBeginFrameSource { | 51 : public FakeBeginFrameSource { |
| 52 FakeSchedulerClient* client_; | 52 FakeSchedulerClient* client_; |
| 53 | 53 |
| 54 explicit FakeBeginFrameSourceForFakeSchedulerClient( | 54 explicit FakeBeginFrameSourceForFakeSchedulerClient( |
| 55 FakeSchedulerClient* client) | 55 FakeSchedulerClient* client) |
| 56 : client_(client) {} | 56 : client_(client) {} |
| 57 | 57 |
| 58 virtual void OnNeedsBeginFramesChange(bool needs_begin_frames) override { | 58 void OnNeedsBeginFramesChange(bool needs_begin_frames) override { |
| 59 if (needs_begin_frames) { | 59 if (needs_begin_frames) { |
| 60 client_->actions_.push_back("SetNeedsBeginFrames(true)"); | 60 client_->actions_.push_back("SetNeedsBeginFrames(true)"); |
| 61 } else { | 61 } else { |
| 62 client_->actions_.push_back("SetNeedsBeginFrames(false)"); | 62 client_->actions_.push_back("SetNeedsBeginFrames(false)"); |
| 63 } | 63 } |
| 64 client_->states_.push_back(client_->scheduler_->AsValue()); | 64 client_->states_.push_back(client_->scheduler_->AsValue()); |
| 65 } | 65 } |
| 66 }; | 66 }; |
| 67 | 67 |
| 68 class FakePowerMonitorSource : public base::PowerMonitorSource { | 68 class FakePowerMonitorSource : public base::PowerMonitorSource { |
| 69 public: | 69 public: |
| 70 FakePowerMonitorSource() {} | 70 FakePowerMonitorSource() {} |
| 71 virtual ~FakePowerMonitorSource() {} | 71 ~FakePowerMonitorSource() override {} |
| 72 void GeneratePowerStateEvent(bool on_battery_power) { | 72 void GeneratePowerStateEvent(bool on_battery_power) { |
| 73 on_battery_power_impl_ = on_battery_power; | 73 on_battery_power_impl_ = on_battery_power; |
| 74 ProcessPowerEvent(POWER_STATE_EVENT); | 74 ProcessPowerEvent(POWER_STATE_EVENT); |
| 75 base::MessageLoop::current()->RunUntilIdle(); | 75 base::MessageLoop::current()->RunUntilIdle(); |
| 76 } | 76 } |
| 77 virtual bool IsOnBatteryPowerImpl() override { | 77 bool IsOnBatteryPowerImpl() override { return on_battery_power_impl_; } |
| 78 return on_battery_power_impl_; | |
| 79 } | |
| 80 | 78 |
| 81 private: | 79 private: |
| 82 bool on_battery_power_impl_; | 80 bool on_battery_power_impl_; |
| 83 }; | 81 }; |
| 84 | 82 |
| 85 FakeSchedulerClient() | 83 FakeSchedulerClient() |
| 86 : automatic_swap_ack_(true), | 84 : automatic_swap_ack_(true), |
| 87 swap_contains_incomplete_tile_(false), | 85 swap_contains_incomplete_tile_(false), |
| 88 redraw_will_happen_if_update_visible_tiles_happens_(false), | 86 redraw_will_happen_if_update_visible_tiles_happens_(false), |
| 89 now_src_(TestNowSource::Create()), | 87 now_src_(TestNowSource::Create()), |
| (...skipping 37 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 127 const char* Action(int i) const { return actions_[i]; } | 125 const char* Action(int i) const { return actions_[i]; } |
| 128 std::string StateForAction(int i) const { return states_[i]->ToString(); } | 126 std::string StateForAction(int i) const { return states_[i]->ToString(); } |
| 129 base::TimeTicks posted_begin_impl_frame_deadline() const { | 127 base::TimeTicks posted_begin_impl_frame_deadline() const { |
| 130 return posted_begin_impl_frame_deadline_; | 128 return posted_begin_impl_frame_deadline_; |
| 131 } | 129 } |
| 132 | 130 |
| 133 bool ExternalBeginFrame() { | 131 bool ExternalBeginFrame() { |
| 134 return scheduler_->settings().begin_frame_scheduling_enabled && | 132 return scheduler_->settings().begin_frame_scheduling_enabled && |
| 135 scheduler_->settings().throttle_frame_production; | 133 scheduler_->settings().throttle_frame_production; |
| 136 } | 134 } |
| 137 virtual FakeBeginFrameSource* ExternalBeginFrameSource() override { | 135 FakeBeginFrameSource* ExternalBeginFrameSource() override { |
| 138 return &fake_frame_source_; | 136 return &fake_frame_source_; |
| 139 } | 137 } |
| 140 | 138 |
| 141 base::PowerMonitor* PowerMonitor() { return &power_monitor_; } | 139 base::PowerMonitor* PowerMonitor() { return &power_monitor_; } |
| 142 | 140 |
| 143 FakePowerMonitorSource* PowerMonitorSource() { | 141 FakePowerMonitorSource* PowerMonitorSource() { |
| 144 return fake_power_monitor_source_; | 142 return fake_power_monitor_source_; |
| 145 } | 143 } |
| 146 | 144 |
| 147 void AdvanceFrame() { | 145 void AdvanceFrame() { |
| (...skipping 37 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 185 void SetSwapWillHappenIfDrawHappens(bool swap_will_happen_if_draw_happens) { | 183 void SetSwapWillHappenIfDrawHappens(bool swap_will_happen_if_draw_happens) { |
| 186 swap_will_happen_if_draw_happens_ = swap_will_happen_if_draw_happens; | 184 swap_will_happen_if_draw_happens_ = swap_will_happen_if_draw_happens; |
| 187 } | 185 } |
| 188 void SetAutomaticSwapAck(bool automatic_swap_ack) { | 186 void SetAutomaticSwapAck(bool automatic_swap_ack) { |
| 189 automatic_swap_ack_ = automatic_swap_ack; | 187 automatic_swap_ack_ = automatic_swap_ack; |
| 190 } | 188 } |
| 191 void SetRedrawWillHappenIfUpdateVisibleTilesHappens(bool redraw) { | 189 void SetRedrawWillHappenIfUpdateVisibleTilesHappens(bool redraw) { |
| 192 redraw_will_happen_if_update_visible_tiles_happens_ = redraw; | 190 redraw_will_happen_if_update_visible_tiles_happens_ = redraw; |
| 193 } | 191 } |
| 194 // SchedulerClient implementation. | 192 // SchedulerClient implementation. |
| 195 virtual void WillBeginImplFrame(const BeginFrameArgs& args) override { | 193 void WillBeginImplFrame(const BeginFrameArgs& args) override { |
| 196 actions_.push_back("WillBeginImplFrame"); | 194 actions_.push_back("WillBeginImplFrame"); |
| 197 states_.push_back(scheduler_->AsValue()); | 195 states_.push_back(scheduler_->AsValue()); |
| 198 } | 196 } |
| 199 virtual void ScheduledActionSendBeginMainFrame() override { | 197 void ScheduledActionSendBeginMainFrame() override { |
| 200 actions_.push_back("ScheduledActionSendBeginMainFrame"); | 198 actions_.push_back("ScheduledActionSendBeginMainFrame"); |
| 201 states_.push_back(scheduler_->AsValue()); | 199 states_.push_back(scheduler_->AsValue()); |
| 202 } | 200 } |
| 203 virtual void ScheduledActionAnimate() override { | 201 void ScheduledActionAnimate() override { |
| 204 actions_.push_back("ScheduledActionAnimate"); | 202 actions_.push_back("ScheduledActionAnimate"); |
| 205 states_.push_back(scheduler_->AsValue()); | 203 states_.push_back(scheduler_->AsValue()); |
| 206 } | 204 } |
| 207 virtual DrawResult ScheduledActionDrawAndSwapIfPossible() override { | 205 DrawResult ScheduledActionDrawAndSwapIfPossible() override { |
| 208 actions_.push_back("ScheduledActionDrawAndSwapIfPossible"); | 206 actions_.push_back("ScheduledActionDrawAndSwapIfPossible"); |
| 209 states_.push_back(scheduler_->AsValue()); | 207 states_.push_back(scheduler_->AsValue()); |
| 210 num_draws_++; | 208 num_draws_++; |
| 211 DrawResult result = | 209 DrawResult result = |
| 212 draw_will_happen_ ? DRAW_SUCCESS : DRAW_ABORTED_CHECKERBOARD_ANIMATIONS; | 210 draw_will_happen_ ? DRAW_SUCCESS : DRAW_ABORTED_CHECKERBOARD_ANIMATIONS; |
| 213 bool swap_will_happen = | 211 bool swap_will_happen = |
| 214 draw_will_happen_ && swap_will_happen_if_draw_happens_; | 212 draw_will_happen_ && swap_will_happen_if_draw_happens_; |
| 215 if (swap_will_happen) { | 213 if (swap_will_happen) { |
| 216 scheduler_->DidSwapBuffers(); | 214 scheduler_->DidSwapBuffers(); |
| 217 if (swap_contains_incomplete_tile_) { | 215 if (swap_contains_incomplete_tile_) { |
| 218 scheduler_->SetSwapUsedIncompleteTile(true); | 216 scheduler_->SetSwapUsedIncompleteTile(true); |
| 219 swap_contains_incomplete_tile_ = false; | 217 swap_contains_incomplete_tile_ = false; |
| 220 } else { | 218 } else { |
| 221 scheduler_->SetSwapUsedIncompleteTile(false); | 219 scheduler_->SetSwapUsedIncompleteTile(false); |
| 222 } | 220 } |
| 223 | 221 |
| 224 if (automatic_swap_ack_) | 222 if (automatic_swap_ack_) |
| 225 scheduler_->DidSwapBuffersComplete(); | 223 scheduler_->DidSwapBuffersComplete(); |
| 226 } | 224 } |
| 227 return result; | 225 return result; |
| 228 } | 226 } |
| 229 virtual DrawResult ScheduledActionDrawAndSwapForced() override { | 227 DrawResult ScheduledActionDrawAndSwapForced() override { |
| 230 actions_.push_back("ScheduledActionDrawAndSwapForced"); | 228 actions_.push_back("ScheduledActionDrawAndSwapForced"); |
| 231 states_.push_back(scheduler_->AsValue()); | 229 states_.push_back(scheduler_->AsValue()); |
| 232 return DRAW_SUCCESS; | 230 return DRAW_SUCCESS; |
| 233 } | 231 } |
| 234 virtual void ScheduledActionCommit() override { | 232 void ScheduledActionCommit() override { |
| 235 actions_.push_back("ScheduledActionCommit"); | 233 actions_.push_back("ScheduledActionCommit"); |
| 236 states_.push_back(scheduler_->AsValue()); | 234 states_.push_back(scheduler_->AsValue()); |
| 237 } | 235 } |
| 238 virtual void ScheduledActionUpdateVisibleTiles() override { | 236 void ScheduledActionUpdateVisibleTiles() override { |
| 239 actions_.push_back("ScheduledActionUpdateVisibleTiles"); | 237 actions_.push_back("ScheduledActionUpdateVisibleTiles"); |
| 240 states_.push_back(scheduler_->AsValue()); | 238 states_.push_back(scheduler_->AsValue()); |
| 241 if (redraw_will_happen_if_update_visible_tiles_happens_) | 239 if (redraw_will_happen_if_update_visible_tiles_happens_) |
| 242 scheduler_->SetNeedsRedraw(); | 240 scheduler_->SetNeedsRedraw(); |
| 243 } | 241 } |
| 244 virtual void ScheduledActionActivateSyncTree() override { | 242 void ScheduledActionActivateSyncTree() override { |
| 245 actions_.push_back("ScheduledActionActivateSyncTree"); | 243 actions_.push_back("ScheduledActionActivateSyncTree"); |
| 246 states_.push_back(scheduler_->AsValue()); | 244 states_.push_back(scheduler_->AsValue()); |
| 247 } | 245 } |
| 248 virtual void ScheduledActionBeginOutputSurfaceCreation() override { | 246 void ScheduledActionBeginOutputSurfaceCreation() override { |
| 249 actions_.push_back("ScheduledActionBeginOutputSurfaceCreation"); | 247 actions_.push_back("ScheduledActionBeginOutputSurfaceCreation"); |
| 250 states_.push_back(scheduler_->AsValue()); | 248 states_.push_back(scheduler_->AsValue()); |
| 251 } | 249 } |
| 252 virtual void ScheduledActionManageTiles() override { | 250 void ScheduledActionManageTiles() override { |
| 253 actions_.push_back("ScheduledActionManageTiles"); | 251 actions_.push_back("ScheduledActionManageTiles"); |
| 254 states_.push_back(scheduler_->AsValue()); | 252 states_.push_back(scheduler_->AsValue()); |
| 255 } | 253 } |
| 256 virtual void DidAnticipatedDrawTimeChange(base::TimeTicks) override { | 254 void DidAnticipatedDrawTimeChange(base::TimeTicks) override { |
| 257 if (log_anticipated_draw_time_change_) | 255 if (log_anticipated_draw_time_change_) |
| 258 actions_.push_back("DidAnticipatedDrawTimeChange"); | 256 actions_.push_back("DidAnticipatedDrawTimeChange"); |
| 259 } | 257 } |
| 260 virtual base::TimeDelta DrawDurationEstimate() override { | 258 base::TimeDelta DrawDurationEstimate() override { return base::TimeDelta(); } |
| 259 base::TimeDelta BeginMainFrameToCommitDurationEstimate() override { |
| 261 return base::TimeDelta(); | 260 return base::TimeDelta(); |
| 262 } | 261 } |
| 263 virtual base::TimeDelta BeginMainFrameToCommitDurationEstimate() override { | 262 base::TimeDelta CommitToActivateDurationEstimate() override { |
| 264 return base::TimeDelta(); | |
| 265 } | |
| 266 virtual base::TimeDelta CommitToActivateDurationEstimate() override { | |
| 267 return base::TimeDelta(); | 263 return base::TimeDelta(); |
| 268 } | 264 } |
| 269 | 265 |
| 270 virtual void DidBeginImplFrameDeadline() override {} | 266 void DidBeginImplFrameDeadline() override {} |
| 271 | 267 |
| 272 base::Callback<bool(void)> ImplFrameDeadlinePending(bool state) { | 268 base::Callback<bool(void)> ImplFrameDeadlinePending(bool state) { |
| 273 return base::Bind(&FakeSchedulerClient::ImplFrameDeadlinePendingCallback, | 269 return base::Bind(&FakeSchedulerClient::ImplFrameDeadlinePendingCallback, |
| 274 base::Unretained(this), | 270 base::Unretained(this), |
| 275 state); | 271 state); |
| 276 } | 272 } |
| 277 | 273 |
| 278 protected: | 274 protected: |
| 279 bool ImplFrameDeadlinePendingCallback(bool state) { | 275 bool ImplFrameDeadlinePendingCallback(bool state) { |
| 280 return scheduler_->BeginImplFrameDeadlinePending() == state; | 276 return scheduler_->BeginImplFrameDeadlinePending() == state; |
| (...skipping 203 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 484 // On the next BeginImplFrame, verify we go back to a quiescent state and | 480 // On the next BeginImplFrame, verify we go back to a quiescent state and |
| 485 // no longer request BeginImplFrames. | 481 // no longer request BeginImplFrames. |
| 486 client.AdvanceFrame(); | 482 client.AdvanceFrame(); |
| 487 client.task_runner().RunPendingTasks(); // Run posted deadline. | 483 client.task_runner().RunPendingTasks(); // Run posted deadline. |
| 488 EXPECT_FALSE(client.needs_begin_frames()); | 484 EXPECT_FALSE(client.needs_begin_frames()); |
| 489 client.Reset(); | 485 client.Reset(); |
| 490 } | 486 } |
| 491 | 487 |
| 492 class SchedulerClientThatsetNeedsDrawInsideDraw : public FakeSchedulerClient { | 488 class SchedulerClientThatsetNeedsDrawInsideDraw : public FakeSchedulerClient { |
| 493 public: | 489 public: |
| 494 virtual void ScheduledActionSendBeginMainFrame() override {} | 490 void ScheduledActionSendBeginMainFrame() override {} |
| 495 virtual DrawResult ScheduledActionDrawAndSwapIfPossible() | 491 DrawResult ScheduledActionDrawAndSwapIfPossible() override { |
| 496 override { | |
| 497 // Only SetNeedsRedraw the first time this is called | 492 // Only SetNeedsRedraw the first time this is called |
| 498 if (!num_draws_) | 493 if (!num_draws_) |
| 499 scheduler_->SetNeedsRedraw(); | 494 scheduler_->SetNeedsRedraw(); |
| 500 return FakeSchedulerClient::ScheduledActionDrawAndSwapIfPossible(); | 495 return FakeSchedulerClient::ScheduledActionDrawAndSwapIfPossible(); |
| 501 } | 496 } |
| 502 | 497 |
| 503 virtual DrawResult ScheduledActionDrawAndSwapForced() override { | 498 DrawResult ScheduledActionDrawAndSwapForced() override { |
| 504 NOTREACHED(); | 499 NOTREACHED(); |
| 505 return DRAW_SUCCESS; | 500 return DRAW_SUCCESS; |
| 506 } | 501 } |
| 507 | 502 |
| 508 virtual void ScheduledActionCommit() override {} | 503 void ScheduledActionCommit() override {} |
| 509 virtual void ScheduledActionBeginOutputSurfaceCreation() override {} | 504 void ScheduledActionBeginOutputSurfaceCreation() override {} |
| 510 virtual void DidAnticipatedDrawTimeChange(base::TimeTicks) override {} | 505 void DidAnticipatedDrawTimeChange(base::TimeTicks) override {} |
| 511 }; | 506 }; |
| 512 | 507 |
| 513 // Tests for two different situations: | 508 // Tests for two different situations: |
| 514 // 1. the scheduler dropping SetNeedsRedraw requests that happen inside | 509 // 1. the scheduler dropping SetNeedsRedraw requests that happen inside |
| 515 // a ScheduledActionDrawAndSwap | 510 // a ScheduledActionDrawAndSwap |
| 516 // 2. the scheduler drawing twice inside a single tick | 511 // 2. the scheduler drawing twice inside a single tick |
| 517 TEST(SchedulerTest, RequestRedrawInsideDraw) { | 512 TEST(SchedulerTest, RequestRedrawInsideDraw) { |
| 518 SchedulerClientThatsetNeedsDrawInsideDraw client; | 513 SchedulerClientThatsetNeedsDrawInsideDraw client; |
| 519 SchedulerSettings default_scheduler_settings; | 514 SchedulerSettings default_scheduler_settings; |
| 520 TestScheduler* scheduler = client.CreateScheduler(default_scheduler_settings); | 515 TestScheduler* scheduler = client.CreateScheduler(default_scheduler_settings); |
| (...skipping 74 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 595 EXPECT_TRUE(scheduler->CommitPending()); | 590 EXPECT_TRUE(scheduler->CommitPending()); |
| 596 EXPECT_FALSE(scheduler->RedrawPending()); | 591 EXPECT_FALSE(scheduler->RedrawPending()); |
| 597 EXPECT_TRUE(client.needs_begin_frames()); | 592 EXPECT_TRUE(client.needs_begin_frames()); |
| 598 } | 593 } |
| 599 | 594 |
| 600 class SchedulerClientThatSetNeedsCommitInsideDraw : public FakeSchedulerClient { | 595 class SchedulerClientThatSetNeedsCommitInsideDraw : public FakeSchedulerClient { |
| 601 public: | 596 public: |
| 602 SchedulerClientThatSetNeedsCommitInsideDraw() | 597 SchedulerClientThatSetNeedsCommitInsideDraw() |
| 603 : set_needs_commit_on_next_draw_(false) {} | 598 : set_needs_commit_on_next_draw_(false) {} |
| 604 | 599 |
| 605 virtual void ScheduledActionSendBeginMainFrame() override {} | 600 void ScheduledActionSendBeginMainFrame() override {} |
| 606 virtual DrawResult ScheduledActionDrawAndSwapIfPossible() | 601 DrawResult ScheduledActionDrawAndSwapIfPossible() override { |
| 607 override { | |
| 608 // Only SetNeedsCommit the first time this is called | 602 // Only SetNeedsCommit the first time this is called |
| 609 if (set_needs_commit_on_next_draw_) { | 603 if (set_needs_commit_on_next_draw_) { |
| 610 scheduler_->SetNeedsCommit(); | 604 scheduler_->SetNeedsCommit(); |
| 611 set_needs_commit_on_next_draw_ = false; | 605 set_needs_commit_on_next_draw_ = false; |
| 612 } | 606 } |
| 613 return FakeSchedulerClient::ScheduledActionDrawAndSwapIfPossible(); | 607 return FakeSchedulerClient::ScheduledActionDrawAndSwapIfPossible(); |
| 614 } | 608 } |
| 615 | 609 |
| 616 virtual DrawResult ScheduledActionDrawAndSwapForced() override { | 610 DrawResult ScheduledActionDrawAndSwapForced() override { |
| 617 NOTREACHED(); | 611 NOTREACHED(); |
| 618 return DRAW_SUCCESS; | 612 return DRAW_SUCCESS; |
| 619 } | 613 } |
| 620 | 614 |
| 621 virtual void ScheduledActionCommit() override {} | 615 void ScheduledActionCommit() override {} |
| 622 virtual void ScheduledActionBeginOutputSurfaceCreation() override {} | 616 void ScheduledActionBeginOutputSurfaceCreation() override {} |
| 623 virtual void DidAnticipatedDrawTimeChange(base::TimeTicks) override {} | 617 void DidAnticipatedDrawTimeChange(base::TimeTicks) override {} |
| 624 | 618 |
| 625 void SetNeedsCommitOnNextDraw() { set_needs_commit_on_next_draw_ = true; } | 619 void SetNeedsCommitOnNextDraw() { set_needs_commit_on_next_draw_ = true; } |
| 626 | 620 |
| 627 private: | 621 private: |
| 628 bool set_needs_commit_on_next_draw_; | 622 bool set_needs_commit_on_next_draw_; |
| 629 }; | 623 }; |
| 630 | 624 |
| 631 // Tests for the scheduler infinite-looping on SetNeedsCommit requests that | 625 // Tests for the scheduler infinite-looping on SetNeedsCommit requests that |
| 632 // happen inside a ScheduledActionDrawAndSwap | 626 // happen inside a ScheduledActionDrawAndSwap |
| 633 TEST(SchedulerTest, RequestCommitInsideDraw) { | 627 TEST(SchedulerTest, RequestCommitInsideDraw) { |
| (...skipping 116 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 750 // Fail to draw, this should not start a frame. | 744 // Fail to draw, this should not start a frame. |
| 751 client.SetDrawWillHappen(false); | 745 client.SetDrawWillHappen(false); |
| 752 client.SetNeedsCommitOnNextDraw(); | 746 client.SetNeedsCommitOnNextDraw(); |
| 753 client.AdvanceFrame(); | 747 client.AdvanceFrame(); |
| 754 client.task_runner().RunPendingTasks(); // Run posted deadline. | 748 client.task_runner().RunPendingTasks(); // Run posted deadline. |
| 755 EXPECT_EQ(2, client.num_draws()); | 749 EXPECT_EQ(2, client.num_draws()); |
| 756 } | 750 } |
| 757 | 751 |
| 758 class SchedulerClientNeedsManageTilesInDraw : public FakeSchedulerClient { | 752 class SchedulerClientNeedsManageTilesInDraw : public FakeSchedulerClient { |
| 759 public: | 753 public: |
| 760 virtual DrawResult ScheduledActionDrawAndSwapIfPossible() | 754 DrawResult ScheduledActionDrawAndSwapIfPossible() override { |
| 761 override { | |
| 762 scheduler_->SetNeedsManageTiles(); | 755 scheduler_->SetNeedsManageTiles(); |
| 763 return FakeSchedulerClient::ScheduledActionDrawAndSwapIfPossible(); | 756 return FakeSchedulerClient::ScheduledActionDrawAndSwapIfPossible(); |
| 764 } | 757 } |
| 765 }; | 758 }; |
| 766 | 759 |
| 767 // Test manage tiles is independant of draws. | 760 // Test manage tiles is independant of draws. |
| 768 TEST(SchedulerTest, ManageTiles) { | 761 TEST(SchedulerTest, ManageTiles) { |
| 769 SchedulerClientNeedsManageTilesInDraw client; | 762 SchedulerClientNeedsManageTilesInDraw client; |
| 770 SchedulerSettings default_scheduler_settings; | 763 SchedulerSettings default_scheduler_settings; |
| 771 TestScheduler* scheduler = client.CreateScheduler(default_scheduler_settings); | 764 TestScheduler* scheduler = client.CreateScheduler(default_scheduler_settings); |
| (...skipping 300 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1072 public: | 1065 public: |
| 1073 SchedulerClientWithFixedEstimates( | 1066 SchedulerClientWithFixedEstimates( |
| 1074 base::TimeDelta draw_duration, | 1067 base::TimeDelta draw_duration, |
| 1075 base::TimeDelta begin_main_frame_to_commit_duration, | 1068 base::TimeDelta begin_main_frame_to_commit_duration, |
| 1076 base::TimeDelta commit_to_activate_duration) | 1069 base::TimeDelta commit_to_activate_duration) |
| 1077 : draw_duration_(draw_duration), | 1070 : draw_duration_(draw_duration), |
| 1078 begin_main_frame_to_commit_duration_( | 1071 begin_main_frame_to_commit_duration_( |
| 1079 begin_main_frame_to_commit_duration), | 1072 begin_main_frame_to_commit_duration), |
| 1080 commit_to_activate_duration_(commit_to_activate_duration) {} | 1073 commit_to_activate_duration_(commit_to_activate_duration) {} |
| 1081 | 1074 |
| 1082 virtual base::TimeDelta DrawDurationEstimate() override { | 1075 base::TimeDelta DrawDurationEstimate() override { return draw_duration_; } |
| 1083 return draw_duration_; | 1076 base::TimeDelta BeginMainFrameToCommitDurationEstimate() override { |
| 1084 } | |
| 1085 virtual base::TimeDelta BeginMainFrameToCommitDurationEstimate() override { | |
| 1086 return begin_main_frame_to_commit_duration_; | 1077 return begin_main_frame_to_commit_duration_; |
| 1087 } | 1078 } |
| 1088 virtual base::TimeDelta CommitToActivateDurationEstimate() override { | 1079 base::TimeDelta CommitToActivateDurationEstimate() override { |
| 1089 return commit_to_activate_duration_; | 1080 return commit_to_activate_duration_; |
| 1090 } | 1081 } |
| 1091 | 1082 |
| 1092 private: | 1083 private: |
| 1093 base::TimeDelta draw_duration_; | 1084 base::TimeDelta draw_duration_; |
| 1094 base::TimeDelta begin_main_frame_to_commit_duration_; | 1085 base::TimeDelta begin_main_frame_to_commit_duration_; |
| 1095 base::TimeDelta commit_to_activate_duration_; | 1086 base::TimeDelta commit_to_activate_duration_; |
| 1096 }; | 1087 }; |
| 1097 | 1088 |
| 1098 void MainFrameInHighLatencyMode(int64 begin_main_frame_to_commit_estimate_in_ms, | 1089 void MainFrameInHighLatencyMode(int64 begin_main_frame_to_commit_estimate_in_ms, |
| (...skipping 1046 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2145 | 2136 |
| 2146 // Deadline task is pending | 2137 // Deadline task is pending |
| 2147 EXPECT_TRUE(scheduler->BeginImplFrameDeadlinePending()); | 2138 EXPECT_TRUE(scheduler->BeginImplFrameDeadlinePending()); |
| 2148 client.task_runner().RunPendingTasks(); | 2139 client.task_runner().RunPendingTasks(); |
| 2149 // Deadline task runs immediately | 2140 // Deadline task runs immediately |
| 2150 EXPECT_FALSE(scheduler->BeginImplFrameDeadlinePending()); | 2141 EXPECT_FALSE(scheduler->BeginImplFrameDeadlinePending()); |
| 2151 } | 2142 } |
| 2152 | 2143 |
| 2153 } // namespace | 2144 } // namespace |
| 2154 } // namespace cc | 2145 } // namespace cc |
| OLD | NEW |