Index: cc/resources/picture_pile_unittest.cc |
diff --git a/cc/resources/picture_pile_unittest.cc b/cc/resources/picture_pile_unittest.cc |
index 31e0a2a32f638eeb77b907142139dacbeb36f6eb..39a32376aebbf364dfcc8aa59db9e2fcd9e0a581 100644 |
--- a/cc/resources/picture_pile_unittest.cc |
+++ b/cc/resources/picture_pile_unittest.cc |
@@ -39,13 +39,16 @@ class TestPicturePile : public PicturePile { |
class PicturePileTest : public testing::Test { |
public: |
PicturePileTest() |
- : pile_(new TestPicturePile()), |
- background_color_(SK_ColorBLUE), |
+ : background_color_(SK_ColorBLUE), |
min_scale_(0.125), |
frame_number_(0), |
- contents_opaque_(false) { |
+ contents_opaque_(false) {} |
+ |
+ virtual void SetUp() OVERRIDE { |
+ pile_ = make_scoped_refptr(new TestPicturePile()); |
pile_->SetTileGridSize(gfx::Size(1000, 1000)); |
pile_->SetMinContentsScale(min_scale_); |
+ client_ = FakeContentLayerClient(); |
SetTilingSize(pile_->tiling().max_texture_size()); |
} |
@@ -1003,5 +1006,51 @@ TEST_F(PicturePileTest, SmallResizePileInsideInterestRect) { |
invalidation.Clear(); |
} |
+TEST_F(PicturePileTest, SolidRectangleIsSolid) { |
+ // If the client has no contents, the solid state will be true |
+ Region invalidation1(tiling_rect()); |
+ UpdateAndExpandInvalidation(&invalidation1, tiling_size(), tiling_rect()); |
+ EXPECT_TRUE(pile_->IsSolidColor()); |
+ EXPECT_EQ(SK_ColorTRANSPARENT, pile_->GetSolidColor()); |
+ |
+ // If there is a single rect that covers the view, the solid |
+ // state will be true |
+ SkPaint paint; |
+ paint.setColor(SK_ColorCYAN); |
+ client_.add_draw_rect(tiling_rect(), paint); |
+ Region invalidation2(tiling_rect()); |
+ UpdateAndExpandInvalidation(&invalidation2, tiling_size(), tiling_rect()); |
+ EXPECT_TRUE(pile_->IsSolidColor()); |
+ EXPECT_EQ(SK_ColorCYAN, pile_->GetSolidColor()); |
+ |
+ // if a second smaller rect is draw that doesn't cover the viewport |
+ // completely, the solid state will be false |
+ gfx::Rect smallRect = tiling_rect(); |
+ smallRect.Inset(10, 10, 10, 10); |
+ client_.add_draw_rect(smallRect, paint); |
+ Region invalidation3(tiling_rect()); |
+ UpdateAndExpandInvalidation(&invalidation3, tiling_size(), tiling_rect()); |
+ EXPECT_FALSE(pile_->IsSolidColor()); |
+ |
+ // if a third rect is drawn over everything, we should be solid again |
+ paint.setColor(SK_ColorRED); |
+ client_.add_draw_rect(tiling_rect(), paint); |
+ Region invalidation4(tiling_rect()); |
+ UpdateAndExpandInvalidation(&invalidation4, tiling_size(), tiling_rect()); |
+ EXPECT_TRUE(pile_->IsSolidColor()); |
+ EXPECT_EQ(SK_ColorRED, pile_->GetSolidColor()); |
+ |
+ // but if we draw too many, we don't bother doing the analysis and we should |
+ // no longer be in a solid state |
+ client_.add_draw_rect(tiling_rect(), paint); |
+ client_.add_draw_rect(tiling_rect(), paint); |
+ client_.add_draw_rect(tiling_rect(), paint); |
+ client_.add_draw_rect(tiling_rect(), paint); |
+ client_.add_draw_rect(tiling_rect(), paint); |
vmpstr
2014/08/20 16:12:00
I only count 8 draw commands, the limit is 10. Did
hendrikw
2014/08/20 20:46:55
I've added a comment.
|
+ Region invalidation5(tiling_rect()); |
+ UpdateAndExpandInvalidation(&invalidation5, tiling_size(), tiling_rect()); |
+ EXPECT_FALSE(pile_->IsSolidColor()); |
+} |
+ |
} // namespace |
} // namespace cc |