| 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 | 4 |
| 5 #include "cc/scheduler.h" | 5 #include "cc/scheduler.h" |
| 6 | 6 |
| 7 #include "base/logging.h" | 7 #include "base/logging.h" |
| 8 #include "cc/layer_tree_settings.h" |
| 8 #include "cc/test/scheduler_test_common.h" | 9 #include "cc/test/scheduler_test_common.h" |
| 9 #include "testing/gmock/include/gmock/gmock.h" | 10 #include "testing/gmock/include/gmock/gmock.h" |
| 10 #include "testing/gtest/include/gtest/gtest.h" | 11 #include "testing/gtest/include/gtest/gtest.h" |
| 11 | 12 |
| 12 namespace cc { | 13 namespace cc { |
| 13 namespace { | 14 namespace { |
| 14 | 15 |
| 15 class FakeSchedulerClient : public SchedulerClient { | 16 class FakeSchedulerClient : public SchedulerClient { |
| 16 public: | 17 public: |
| 17 FakeSchedulerClient() { reset(); } | 18 FakeSchedulerClient() { reset(); } |
| (...skipping 44 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 62 bool m_drawWillHappen; | 63 bool m_drawWillHappen; |
| 63 bool m_swapWillHappenIfDrawHappens; | 64 bool m_swapWillHappenIfDrawHappens; |
| 64 int m_numDraws; | 65 int m_numDraws; |
| 65 std::vector<const char*> m_actions; | 66 std::vector<const char*> m_actions; |
| 66 }; | 67 }; |
| 67 | 68 |
| 68 TEST(SchedulerTest, RequestCommit) | 69 TEST(SchedulerTest, RequestCommit) |
| 69 { | 70 { |
| 70 FakeSchedulerClient client; | 71 FakeSchedulerClient client; |
| 71 scoped_refptr<FakeTimeSource> timeSource(new FakeTimeSource()); | 72 scoped_refptr<FakeTimeSource> timeSource(new FakeTimeSource()); |
| 72 scoped_ptr<Scheduler> scheduler = Scheduler::create(&client, make_scoped_ptr
(new FrameRateController(timeSource))); | 73 LayerTreeSettings defaultLayerTreeSettings; |
| 74 scoped_ptr<Scheduler> scheduler = Scheduler::create(&client, make_scoped_ptr
(new FrameRateController(timeSource)), defaultLayerTreeSettings); |
| 73 scheduler->setCanBeginFrame(true); | 75 scheduler->setCanBeginFrame(true); |
| 74 scheduler->setVisible(true); | 76 scheduler->setVisible(true); |
| 75 scheduler->setCanDraw(true); | 77 scheduler->setCanDraw(true); |
| 76 | 78 |
| 77 // SetNeedsCommit should begin the frame. | 79 // SetNeedsCommit should begin the frame. |
| 78 scheduler->setNeedsCommit(); | 80 scheduler->setNeedsCommit(); |
| 79 EXPECT_EQ(1, client.numActions()); | 81 EXPECT_EQ(1, client.numActions()); |
| 80 EXPECT_STREQ("scheduledActionBeginFrame", client.action(0)); | 82 EXPECT_STREQ("scheduledActionBeginFrame", client.action(0)); |
| 81 EXPECT_FALSE(timeSource->active()); | 83 EXPECT_FALSE(timeSource->active()); |
| 82 client.reset(); | 84 client.reset(); |
| (...skipping 13 matching lines...) Expand all Loading... |
| 96 client.reset(); | 98 client.reset(); |
| 97 | 99 |
| 98 // Timer should be off. | 100 // Timer should be off. |
| 99 EXPECT_FALSE(timeSource->active()); | 101 EXPECT_FALSE(timeSource->active()); |
| 100 } | 102 } |
| 101 | 103 |
| 102 TEST(SchedulerTest, RequestCommitAfterBeginFrame) | 104 TEST(SchedulerTest, RequestCommitAfterBeginFrame) |
| 103 { | 105 { |
| 104 FakeSchedulerClient client; | 106 FakeSchedulerClient client; |
| 105 scoped_refptr<FakeTimeSource> timeSource(new FakeTimeSource()); | 107 scoped_refptr<FakeTimeSource> timeSource(new FakeTimeSource()); |
| 106 scoped_ptr<Scheduler> scheduler = Scheduler::create(&client, make_scoped_ptr
(new FrameRateController(timeSource))); | 108 LayerTreeSettings defaultLayerTreeSettings; |
| 109 scoped_ptr<Scheduler> scheduler = Scheduler::create(&client, make_scoped_ptr
(new FrameRateController(timeSource)), defaultLayerTreeSettings); |
| 107 scheduler->setCanBeginFrame(true); | 110 scheduler->setCanBeginFrame(true); |
| 108 scheduler->setVisible(true); | 111 scheduler->setVisible(true); |
| 109 scheduler->setCanDraw(true); | 112 scheduler->setCanDraw(true); |
| 110 | 113 |
| 111 // SetNedsCommit should begin the frame. | 114 // SetNedsCommit should begin the frame. |
| 112 scheduler->setNeedsCommit(); | 115 scheduler->setNeedsCommit(); |
| 113 EXPECT_EQ(1, client.numActions()); | 116 EXPECT_EQ(1, client.numActions()); |
| 114 EXPECT_STREQ("scheduledActionBeginFrame", client.action(0)); | 117 EXPECT_STREQ("scheduledActionBeginFrame", client.action(0)); |
| 115 client.reset(); | 118 client.reset(); |
| 116 | 119 |
| (...skipping 13 matching lines...) Expand all Loading... |
| 130 EXPECT_EQ(2, client.numActions()); | 133 EXPECT_EQ(2, client.numActions()); |
| 131 EXPECT_STREQ("scheduledActionDrawAndSwapIfPossible", client.action(0)); | 134 EXPECT_STREQ("scheduledActionDrawAndSwapIfPossible", client.action(0)); |
| 132 EXPECT_STREQ("scheduledActionBeginFrame", client.action(1)); | 135 EXPECT_STREQ("scheduledActionBeginFrame", client.action(1)); |
| 133 client.reset(); | 136 client.reset(); |
| 134 } | 137 } |
| 135 | 138 |
| 136 TEST(SchedulerTest, TextureAcquisitionCollision) | 139 TEST(SchedulerTest, TextureAcquisitionCollision) |
| 137 { | 140 { |
| 138 FakeSchedulerClient client; | 141 FakeSchedulerClient client; |
| 139 scoped_refptr<FakeTimeSource> timeSource(new FakeTimeSource()); | 142 scoped_refptr<FakeTimeSource> timeSource(new FakeTimeSource()); |
| 140 scoped_ptr<Scheduler> scheduler = Scheduler::create(&client, make_scoped_ptr
(new FrameRateController(timeSource))); | 143 LayerTreeSettings defaultLayerTreeSettings; |
| 144 scoped_ptr<Scheduler> scheduler = Scheduler::create(&client, make_scoped_ptr
(new FrameRateController(timeSource)), defaultLayerTreeSettings); |
| 141 scheduler->setCanBeginFrame(true); | 145 scheduler->setCanBeginFrame(true); |
| 142 scheduler->setVisible(true); | 146 scheduler->setVisible(true); |
| 143 scheduler->setCanDraw(true); | 147 scheduler->setCanDraw(true); |
| 144 | 148 |
| 145 scheduler->setNeedsCommit(); | 149 scheduler->setNeedsCommit(); |
| 146 scheduler->setMainThreadNeedsLayerTextures(); | 150 scheduler->setMainThreadNeedsLayerTextures(); |
| 147 EXPECT_EQ(2, client.numActions()); | 151 EXPECT_EQ(2, client.numActions()); |
| 148 EXPECT_STREQ("scheduledActionBeginFrame", client.action(0)); | 152 EXPECT_STREQ("scheduledActionBeginFrame", client.action(0)); |
| 149 EXPECT_STREQ("scheduledActionAcquireLayerTexturesForMainThread", client.acti
on(1)); | 153 EXPECT_STREQ("scheduledActionAcquireLayerTexturesForMainThread", client.acti
on(1)); |
| 150 client.reset(); | 154 client.reset(); |
| (...skipping 18 matching lines...) Expand all Loading... |
| 169 EXPECT_STREQ("scheduledActionDrawAndSwapIfPossible", client.action(0)); | 173 EXPECT_STREQ("scheduledActionDrawAndSwapIfPossible", client.action(0)); |
| 170 EXPECT_STREQ("scheduledActionAcquireLayerTexturesForMainThread", client.acti
on(1)); | 174 EXPECT_STREQ("scheduledActionAcquireLayerTexturesForMainThread", client.acti
on(1)); |
| 171 EXPECT_STREQ("scheduledActionBeginFrame", client.action(2)); | 175 EXPECT_STREQ("scheduledActionBeginFrame", client.action(2)); |
| 172 client.reset(); | 176 client.reset(); |
| 173 } | 177 } |
| 174 | 178 |
| 175 TEST(SchedulerTest, VisibilitySwitchWithTextureAcquisition) | 179 TEST(SchedulerTest, VisibilitySwitchWithTextureAcquisition) |
| 176 { | 180 { |
| 177 FakeSchedulerClient client; | 181 FakeSchedulerClient client; |
| 178 scoped_refptr<FakeTimeSource> timeSource(new FakeTimeSource()); | 182 scoped_refptr<FakeTimeSource> timeSource(new FakeTimeSource()); |
| 179 scoped_ptr<Scheduler> scheduler = Scheduler::create(&client, make_scoped_ptr
(new FrameRateController(timeSource))); | 183 LayerTreeSettings defaultLayerTreeSettings; |
| 184 scoped_ptr<Scheduler> scheduler = Scheduler::create(&client, make_scoped_ptr
(new FrameRateController(timeSource)), defaultLayerTreeSettings); |
| 180 scheduler->setCanBeginFrame(true); | 185 scheduler->setCanBeginFrame(true); |
| 181 scheduler->setVisible(true); | 186 scheduler->setVisible(true); |
| 182 scheduler->setCanDraw(true); | 187 scheduler->setCanDraw(true); |
| 183 | 188 |
| 184 scheduler->setNeedsCommit(); | 189 scheduler->setNeedsCommit(); |
| 185 scheduler->beginFrameComplete(); | 190 scheduler->beginFrameComplete(); |
| 186 scheduler->setMainThreadNeedsLayerTextures(); | 191 scheduler->setMainThreadNeedsLayerTextures(); |
| 187 client.reset(); | 192 client.reset(); |
| 188 // Verify that pending texture acquisition fires when visibility | 193 // Verify that pending texture acquisition fires when visibility |
| 189 // is lost in order to avoid a deadlock. | 194 // is lost in order to avoid a deadlock. |
| (...skipping 42 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 232 }; | 237 }; |
| 233 | 238 |
| 234 // Tests for two different situations: | 239 // Tests for two different situations: |
| 235 // 1. the scheduler dropping setNeedsRedraw requests that happen inside | 240 // 1. the scheduler dropping setNeedsRedraw requests that happen inside |
| 236 // a scheduledActionDrawAndSwap | 241 // a scheduledActionDrawAndSwap |
| 237 // 2. the scheduler drawing twice inside a single tick | 242 // 2. the scheduler drawing twice inside a single tick |
| 238 TEST(SchedulerTest, RequestRedrawInsideDraw) | 243 TEST(SchedulerTest, RequestRedrawInsideDraw) |
| 239 { | 244 { |
| 240 SchedulerClientThatSetNeedsDrawInsideDraw client; | 245 SchedulerClientThatSetNeedsDrawInsideDraw client; |
| 241 scoped_refptr<FakeTimeSource> timeSource(new FakeTimeSource()); | 246 scoped_refptr<FakeTimeSource> timeSource(new FakeTimeSource()); |
| 242 scoped_ptr<Scheduler> scheduler = Scheduler::create(&client, make_scoped_ptr
(new FrameRateController(timeSource))); | 247 LayerTreeSettings defaultLayerTreeSettings; |
| 248 scoped_ptr<Scheduler> scheduler = Scheduler::create(&client, make_scoped_ptr
(new FrameRateController(timeSource)), defaultLayerTreeSettings); |
| 243 client.setScheduler(scheduler.get()); | 249 client.setScheduler(scheduler.get()); |
| 244 scheduler->setCanBeginFrame(true); | 250 scheduler->setCanBeginFrame(true); |
| 245 scheduler->setVisible(true); | 251 scheduler->setVisible(true); |
| 246 scheduler->setCanDraw(true); | 252 scheduler->setCanDraw(true); |
| 247 | 253 |
| 248 scheduler->setNeedsRedraw(); | 254 scheduler->setNeedsRedraw(); |
| 249 EXPECT_TRUE(scheduler->redrawPending()); | 255 EXPECT_TRUE(scheduler->redrawPending()); |
| 250 EXPECT_TRUE(timeSource->active()); | 256 EXPECT_TRUE(timeSource->active()); |
| 251 EXPECT_EQ(0, client.numDraws()); | 257 EXPECT_EQ(0, client.numDraws()); |
| 252 | 258 |
| 253 timeSource->tick(); | 259 timeSource->tick(); |
| 254 EXPECT_EQ(1, client.numDraws()); | 260 EXPECT_EQ(1, client.numDraws()); |
| 255 EXPECT_TRUE(scheduler->redrawPending()); | 261 EXPECT_TRUE(scheduler->redrawPending()); |
| 256 EXPECT_TRUE(timeSource->active()); | 262 EXPECT_TRUE(timeSource->active()); |
| 257 | 263 |
| 258 timeSource->tick(); | 264 timeSource->tick(); |
| 259 EXPECT_EQ(2, client.numDraws()); | 265 EXPECT_EQ(2, client.numDraws()); |
| 260 EXPECT_FALSE(scheduler->redrawPending()); | 266 EXPECT_FALSE(scheduler->redrawPending()); |
| 261 EXPECT_FALSE(timeSource->active()); | 267 EXPECT_FALSE(timeSource->active()); |
| 262 } | 268 } |
| 263 | 269 |
| 264 // Test that requesting redraw inside a failed draw doesn't lose the request. | 270 // Test that requesting redraw inside a failed draw doesn't lose the request. |
| 265 TEST(SchedulerTest, RequestRedrawInsideFailedDraw) | 271 TEST(SchedulerTest, RequestRedrawInsideFailedDraw) |
| 266 { | 272 { |
| 267 SchedulerClientThatSetNeedsDrawInsideDraw client; | 273 SchedulerClientThatSetNeedsDrawInsideDraw client; |
| 268 scoped_refptr<FakeTimeSource> timeSource(new FakeTimeSource()); | 274 scoped_refptr<FakeTimeSource> timeSource(new FakeTimeSource()); |
| 269 scoped_ptr<Scheduler> scheduler = Scheduler::create(&client, make_scoped_ptr
(new FrameRateController(timeSource))); | 275 LayerTreeSettings defaultLayerTreeSettings; |
| 276 scoped_ptr<Scheduler> scheduler = Scheduler::create(&client, make_scoped_ptr
(new FrameRateController(timeSource)), defaultLayerTreeSettings); |
| 270 client.setScheduler(scheduler.get()); | 277 client.setScheduler(scheduler.get()); |
| 271 scheduler->setCanBeginFrame(true); | 278 scheduler->setCanBeginFrame(true); |
| 272 scheduler->setVisible(true); | 279 scheduler->setVisible(true); |
| 273 scheduler->setCanDraw(true); | 280 scheduler->setCanDraw(true); |
| 274 client.setDrawWillHappen(false); | 281 client.setDrawWillHappen(false); |
| 275 | 282 |
| 276 scheduler->setNeedsRedraw(); | 283 scheduler->setNeedsRedraw(); |
| 277 EXPECT_TRUE(scheduler->redrawPending()); | 284 EXPECT_TRUE(scheduler->redrawPending()); |
| 278 EXPECT_TRUE(timeSource->active()); | 285 EXPECT_TRUE(timeSource->active()); |
| 279 EXPECT_EQ(0, client.numDraws()); | 286 EXPECT_EQ(0, client.numDraws()); |
| (...skipping 52 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 332 protected: | 339 protected: |
| 333 Scheduler* m_scheduler; | 340 Scheduler* m_scheduler; |
| 334 }; | 341 }; |
| 335 | 342 |
| 336 // Tests for the scheduler infinite-looping on setNeedsCommit requests that | 343 // Tests for the scheduler infinite-looping on setNeedsCommit requests that |
| 337 // happen inside a scheduledActionDrawAndSwap | 344 // happen inside a scheduledActionDrawAndSwap |
| 338 TEST(SchedulerTest, RequestCommitInsideDraw) | 345 TEST(SchedulerTest, RequestCommitInsideDraw) |
| 339 { | 346 { |
| 340 SchedulerClientThatSetNeedsCommitInsideDraw client; | 347 SchedulerClientThatSetNeedsCommitInsideDraw client; |
| 341 scoped_refptr<FakeTimeSource> timeSource(new FakeTimeSource()); | 348 scoped_refptr<FakeTimeSource> timeSource(new FakeTimeSource()); |
| 342 scoped_ptr<Scheduler> scheduler = Scheduler::create(&client, make_scoped_ptr
(new FrameRateController(timeSource))); | 349 LayerTreeSettings defaultLayerTreeSettings; |
| 350 scoped_ptr<Scheduler> scheduler = Scheduler::create(&client, make_scoped_ptr
(new FrameRateController(timeSource)), defaultLayerTreeSettings); |
| 343 client.setScheduler(scheduler.get()); | 351 client.setScheduler(scheduler.get()); |
| 344 scheduler->setCanBeginFrame(true); | 352 scheduler->setCanBeginFrame(true); |
| 345 scheduler->setVisible(true); | 353 scheduler->setVisible(true); |
| 346 scheduler->setCanDraw(true); | 354 scheduler->setCanDraw(true); |
| 347 | 355 |
| 348 scheduler->setNeedsRedraw(); | 356 scheduler->setNeedsRedraw(); |
| 349 EXPECT_TRUE(scheduler->redrawPending()); | 357 EXPECT_TRUE(scheduler->redrawPending()); |
| 350 EXPECT_EQ(0, client.numDraws()); | 358 EXPECT_EQ(0, client.numDraws()); |
| 351 EXPECT_TRUE(timeSource->active()); | 359 EXPECT_TRUE(timeSource->active()); |
| 352 | 360 |
| 353 timeSource->tick(); | 361 timeSource->tick(); |
| 354 EXPECT_FALSE(timeSource->active()); | 362 EXPECT_FALSE(timeSource->active()); |
| 355 EXPECT_EQ(1, client.numDraws()); | 363 EXPECT_EQ(1, client.numDraws()); |
| 356 EXPECT_TRUE(scheduler->commitPending()); | 364 EXPECT_TRUE(scheduler->commitPending()); |
| 357 scheduler->beginFrameComplete(); | 365 scheduler->beginFrameComplete(); |
| 358 | 366 |
| 359 timeSource->tick(); | 367 timeSource->tick(); |
| 360 EXPECT_EQ(2, client.numDraws()); | 368 EXPECT_EQ(2, client.numDraws()); |
| 361 EXPECT_FALSE(timeSource->active()); | 369 EXPECT_FALSE(timeSource->active()); |
| 362 EXPECT_FALSE(scheduler->redrawPending()); | 370 EXPECT_FALSE(scheduler->redrawPending()); |
| 363 } | 371 } |
| 364 | 372 |
| 365 // Tests that when a draw fails then the pending commit should not be dropped. | 373 // Tests that when a draw fails then the pending commit should not be dropped. |
| 366 TEST(SchedulerTest, RequestCommitInsideFailedDraw) | 374 TEST(SchedulerTest, RequestCommitInsideFailedDraw) |
| 367 { | 375 { |
| 368 SchedulerClientThatSetNeedsDrawInsideDraw client; | 376 SchedulerClientThatSetNeedsDrawInsideDraw client; |
| 369 scoped_refptr<FakeTimeSource> timeSource(new FakeTimeSource()); | 377 scoped_refptr<FakeTimeSource> timeSource(new FakeTimeSource()); |
| 370 scoped_ptr<Scheduler> scheduler = Scheduler::create(&client, make_scoped_ptr
(new FrameRateController(timeSource))); | 378 LayerTreeSettings defaultLayerTreeSettings; |
| 379 scoped_ptr<Scheduler> scheduler = Scheduler::create(&client, make_scoped_ptr
(new FrameRateController(timeSource)), defaultLayerTreeSettings); |
| 371 client.setScheduler(scheduler.get()); | 380 client.setScheduler(scheduler.get()); |
| 372 scheduler->setCanBeginFrame(true); | 381 scheduler->setCanBeginFrame(true); |
| 373 scheduler->setVisible(true); | 382 scheduler->setVisible(true); |
| 374 scheduler->setCanDraw(true); | 383 scheduler->setCanDraw(true); |
| 375 client.setDrawWillHappen(false); | 384 client.setDrawWillHappen(false); |
| 376 | 385 |
| 377 scheduler->setNeedsRedraw(); | 386 scheduler->setNeedsRedraw(); |
| 378 EXPECT_TRUE(scheduler->redrawPending()); | 387 EXPECT_TRUE(scheduler->redrawPending()); |
| 379 EXPECT_TRUE(timeSource->active()); | 388 EXPECT_TRUE(timeSource->active()); |
| 380 EXPECT_EQ(0, client.numDraws()); | 389 EXPECT_EQ(0, client.numDraws()); |
| (...skipping 22 matching lines...) Expand all Loading... |
| 403 EXPECT_FALSE(scheduler->redrawPending()); | 412 EXPECT_FALSE(scheduler->redrawPending()); |
| 404 EXPECT_FALSE(timeSource->active()); | 413 EXPECT_FALSE(timeSource->active()); |
| 405 } | 414 } |
| 406 | 415 |
| 407 TEST(SchedulerTest, NoBeginFrameWhenDrawFails) | 416 TEST(SchedulerTest, NoBeginFrameWhenDrawFails) |
| 408 { | 417 { |
| 409 scoped_refptr<FakeTimeSource> timeSource(new FakeTimeSource()); | 418 scoped_refptr<FakeTimeSource> timeSource(new FakeTimeSource()); |
| 410 SchedulerClientThatSetNeedsCommitInsideDraw client; | 419 SchedulerClientThatSetNeedsCommitInsideDraw client; |
| 411 scoped_ptr<FakeFrameRateController> controller(new FakeFrameRateController(t
imeSource)); | 420 scoped_ptr<FakeFrameRateController> controller(new FakeFrameRateController(t
imeSource)); |
| 412 FakeFrameRateController* controllerPtr = controller.get(); | 421 FakeFrameRateController* controllerPtr = controller.get(); |
| 413 scoped_ptr<Scheduler> scheduler = Scheduler::create(&client, controller.Pass
As<FrameRateController>()); | 422 LayerTreeSettings defaultLayerTreeSettings; |
| 423 scoped_ptr<Scheduler> scheduler = Scheduler::create(&client, controller.Pass
As<FrameRateController>(), defaultLayerTreeSettings); |
| 414 client.setScheduler(scheduler.get()); | 424 client.setScheduler(scheduler.get()); |
| 415 scheduler->setCanBeginFrame(true); | 425 scheduler->setCanBeginFrame(true); |
| 416 scheduler->setVisible(true); | 426 scheduler->setVisible(true); |
| 417 scheduler->setCanDraw(true); | 427 scheduler->setCanDraw(true); |
| 418 | 428 |
| 419 EXPECT_EQ(0, controllerPtr->numFramesPending()); | 429 EXPECT_EQ(0, controllerPtr->numFramesPending()); |
| 420 | 430 |
| 421 scheduler->setNeedsRedraw(); | 431 scheduler->setNeedsRedraw(); |
| 422 EXPECT_TRUE(scheduler->redrawPending()); | 432 EXPECT_TRUE(scheduler->redrawPending()); |
| 423 EXPECT_TRUE(timeSource->active()); | 433 EXPECT_TRUE(timeSource->active()); |
| (...skipping 16 matching lines...) Expand all Loading... |
| 440 EXPECT_EQ(2, client.numDraws()); | 450 EXPECT_EQ(2, client.numDraws()); |
| 441 EXPECT_EQ(0, controllerPtr->numFramesPending()); | 451 EXPECT_EQ(0, controllerPtr->numFramesPending()); |
| 442 } | 452 } |
| 443 | 453 |
| 444 TEST(SchedulerTest, NoBeginFrameWhenSwapFailsDuringForcedCommit) | 454 TEST(SchedulerTest, NoBeginFrameWhenSwapFailsDuringForcedCommit) |
| 445 { | 455 { |
| 446 scoped_refptr<FakeTimeSource> timeSource(new FakeTimeSource()); | 456 scoped_refptr<FakeTimeSource> timeSource(new FakeTimeSource()); |
| 447 FakeSchedulerClient client; | 457 FakeSchedulerClient client; |
| 448 scoped_ptr<FakeFrameRateController> controller(new FakeFrameRateController(t
imeSource)); | 458 scoped_ptr<FakeFrameRateController> controller(new FakeFrameRateController(t
imeSource)); |
| 449 FakeFrameRateController* controllerPtr = controller.get(); | 459 FakeFrameRateController* controllerPtr = controller.get(); |
| 450 scoped_ptr<Scheduler> scheduler = Scheduler::create(&client, controller.Pass
As<FrameRateController>()); | 460 LayerTreeSettings defaultLayerTreeSettings; |
| 461 scoped_ptr<Scheduler> scheduler = Scheduler::create(&client, controller.Pass
As<FrameRateController>(), defaultLayerTreeSettings); |
| 451 | 462 |
| 452 EXPECT_EQ(0, controllerPtr->numFramesPending()); | 463 EXPECT_EQ(0, controllerPtr->numFramesPending()); |
| 453 | 464 |
| 454 // Tell the client that it will fail to swap. | 465 // Tell the client that it will fail to swap. |
| 455 client.setDrawWillHappen(true); | 466 client.setDrawWillHappen(true); |
| 456 client.setSwapWillHappenIfDrawHappens(false); | 467 client.setSwapWillHappenIfDrawHappens(false); |
| 457 | 468 |
| 458 // Get the compositor to do a scheduledActionDrawAndSwapForced. | 469 // Get the compositor to do a scheduledActionDrawAndSwapForced. |
| 459 scheduler->setNeedsRedraw(); | 470 scheduler->setNeedsRedraw(); |
| 460 scheduler->setNeedsForcedRedraw(); | 471 scheduler->setNeedsForcedRedraw(); |
| 461 EXPECT_TRUE(client.hasAction("scheduledActionDrawAndSwapForced")); | 472 EXPECT_TRUE(client.hasAction("scheduledActionDrawAndSwapForced")); |
| 462 | 473 |
| 463 // We should not have told the frame rate controller that we began a frame. | 474 // We should not have told the frame rate controller that we began a frame. |
| 464 EXPECT_EQ(0, controllerPtr->numFramesPending()); | 475 EXPECT_EQ(0, controllerPtr->numFramesPending()); |
| 465 } | 476 } |
| 466 | 477 |
| 467 } // namespace | 478 } // namespace |
| 468 } // namespace cc | 479 } // namespace cc |
| OLD | NEW |