OLD | NEW |
1 // Copyright 2012 The Chromium Authors. All rights reserved. | 1 // Copyright 2012 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/trees/layer_tree_host.h" | 5 #include "cc/trees/layer_tree_host.h" |
6 | 6 |
7 #include "base/bind.h" | 7 #include "base/bind.h" |
8 #include "base/callback.h" | 8 #include "base/callback.h" |
9 #include "base/location.h" | 9 #include "base/location.h" |
10 #include "base/message_loop/message_loop_proxy.h" | 10 #include "base/message_loop/message_loop_proxy.h" |
(...skipping 511 matching lines...) Loading... |
522 } | 522 } |
523 } | 523 } |
524 | 524 |
525 void AfterTest() override { EXPECT_EQ(3, did_swaps_); } | 525 void AfterTest() override { EXPECT_EQ(3, did_swaps_); } |
526 | 526 |
527 int did_swaps_; | 527 int did_swaps_; |
528 }; | 528 }; |
529 | 529 |
530 MULTI_THREAD_TEST_F(LayerTreeHostDamageTestScrollbarCommitDoesNoDamage); | 530 MULTI_THREAD_TEST_F(LayerTreeHostDamageTestScrollbarCommitDoesNoDamage); |
531 | 531 |
532 class LayerTreeHostDamageTestVisibleTilesStillTriggerDraws | |
533 : public LayerTreeHostDamageTest { | |
534 void InitializeSettings(LayerTreeSettings* settings) override { | |
535 settings->impl_side_painting = true; | |
536 } | |
537 | |
538 void BeginTest() override { PostSetNeedsCommitToMainThread(); } | |
539 | |
540 void SetupTree() override { | |
541 scoped_refptr<FakePictureLayer> root = FakePictureLayer::Create(&client_); | |
542 root->SetBounds(gfx::Size(500, 500)); | |
543 layer_tree_host()->SetRootLayer(root); | |
544 LayerTreeHostDamageTest::SetupTree(); | |
545 | |
546 swap_count_ = 0; | |
547 prepare_to_draw_count_ = 0; | |
548 update_visible_tile_count_ = 0; | |
549 } | |
550 | |
551 DrawResult PrepareToDrawOnThread(LayerTreeHostImpl* host_impl, | |
552 LayerTreeHostImpl::FrameData* frame_data, | |
553 DrawResult draw_result) override { | |
554 EXPECT_EQ(DRAW_SUCCESS, draw_result); | |
555 prepare_to_draw_count_++; | |
556 switch (prepare_to_draw_count_) { | |
557 case 1: | |
558 // Detect that we have an incomplete tile, during the first frame. | |
559 // The first frame should have damage. | |
560 frame_data->contains_incomplete_tile = true; | |
561 DCHECK(!frame_data->has_no_damage); | |
562 break; | |
563 case 2: | |
564 // Make a no-damage frame. We early out and can't detect | |
565 // incomplete tiles, even if they still exist. | |
566 frame_data->contains_incomplete_tile = false; | |
567 frame_data->has_no_damage = true; | |
568 break; | |
569 case 3: | |
570 // Trigger the last swap for the completed tile. | |
571 frame_data->contains_incomplete_tile = false; | |
572 frame_data->has_no_damage = false; | |
573 EndTest(); | |
574 break; | |
575 default: | |
576 NOTREACHED(); | |
577 break; | |
578 } | |
579 | |
580 return draw_result; | |
581 } | |
582 | |
583 void UpdateVisibleTilesOnThread(LayerTreeHostImpl* host_impl) override { | |
584 // Simulate creating some visible tiles (that trigger prepare-to-draws). | |
585 // The first we make into a no-damage-frame during prepare-to-draw (see | |
586 // above). This is to ensure we still get UpdateVisibleTiles calls after | |
587 // a no-damage or aborted frame. | |
588 update_visible_tile_count_++; | |
589 switch (update_visible_tile_count_) { | |
590 case 3: | |
591 case 6: | |
592 host_impl->DidInitializeVisibleTileForTesting(); | |
593 break; | |
594 case 7: | |
595 NOTREACHED(); | |
596 break; | |
597 } | |
598 } | |
599 | |
600 void SwapBuffersOnThread(LayerTreeHostImpl* host_impl, | |
601 bool didSwap) override { | |
602 if (!didSwap) | |
603 return; | |
604 ++swap_count_; | |
605 } | |
606 | |
607 void AfterTest() override { | |
608 // We should keep getting update-visible-tiles calls | |
609 // until we report there are no more incomplete-tiles. | |
610 EXPECT_EQ(update_visible_tile_count_, 6); | |
611 // First frame, plus two triggered by DidInitializeVisibleTile() | |
612 EXPECT_EQ(prepare_to_draw_count_, 3); | |
613 // First swap, plus final swap (contained damage). | |
614 EXPECT_EQ(swap_count_, 2); | |
615 } | |
616 | |
617 FakeContentLayerClient client_; | |
618 int swap_count_; | |
619 int prepare_to_draw_count_; | |
620 int update_visible_tile_count_; | |
621 }; | |
622 | |
623 MULTI_THREAD_TEST_F(LayerTreeHostDamageTestVisibleTilesStillTriggerDraws); | |
624 | |
625 } // namespace | 532 } // namespace |
626 } // namespace cc | 533 } // namespace cc |
OLD | NEW |