From 519747478eda3c08f5a311041d020f28940559d0 Mon Sep 17 00:00:00 2001 From: "danakj@chromium.org" Date: Tue, 29 Jan 2013 19:08:33 +0000 Subject: cc: Fix PictureLayerTilingSetIterator. If all tilings are higher resolution than the ideal scale, the iterator will not find any tiles. This fixes the bug and adds tests. Also add tests to verify the way in which the iterator chooses its first tiling. Tests: PictureLayerTilingSetTestWithResources.NoTilings PictureLayerTilingSetTestWithResources.OneTiling_Smaller PictureLayerTilingSetTestWithResources.OneTiling_Larger PictureLayerTilingSetTestWithResources.TwoTilings_Smaller PictureLayerTilingSetTestWithResources.TwoTilings_SmallerEqual PictureLayerTilingSetTestWithResources.TwoTilings_LargerEqual PictureLayerTilingSetTestWithResources.TwoTilings_Larger PictureLayerTilingSetTestWithResources.ManyTilings_Equal PictureLayerTilingSetTestWithResources.ManyTilings_NotEqual BUG=172889 R=enne NOTRY=true Review URL: https://chromiumcodereview.appspot.com/12094037 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@179377 0039d316-1c4b-4281-b951-d872f2087c98 --- cc/picture_layer_tiling_set.cc | 9 ++---- cc/picture_layer_tiling_set_unittest.cc | 57 ++++++++++++++++++++++++--------- 2 files changed, 45 insertions(+), 21 deletions(-) diff --git a/cc/picture_layer_tiling_set.cc b/cc/picture_layer_tiling_set.cc index be2e25e..9dffe08 100644 --- a/cc/picture_layer_tiling_set.cc +++ b/cc/picture_layer_tiling_set.cc @@ -115,12 +115,6 @@ PictureLayerTilingSet::Iterator::Iterator( current_tiling_(-1) { missing_region_.Union(content_rect); - if (set_->tilings_.size() == 1) { - ideal_tiling_ = 0; - ++(*this); - return; - } - for (ideal_tiling_ = 0; static_cast(ideal_tiling_) < set_->tilings_.size(); ++ideal_tiling_) { @@ -132,6 +126,9 @@ PictureLayerTilingSet::Iterator::Iterator( } } + if (ideal_tiling_ == set_->tilings_.size() && ideal_tiling_ > 0) + ideal_tiling_--; + ++(*this); } diff --git a/cc/picture_layer_tiling_set_unittest.cc b/cc/picture_layer_tiling_set_unittest.cc index c1534fb..707180c 100644 --- a/cc/picture_layer_tiling_set_unittest.cc +++ b/cc/picture_layer_tiling_set_unittest.cc @@ -52,7 +52,12 @@ TEST(PictureLayerTilingSetTest, NoResources) { class PictureLayerTilingSetTestWithResources : public testing::Test { public: - void runTest(int num_tilings, float min_scale, float scale_increment) { + void runTest( + int num_tilings, + float min_scale, + float scale_increment, + float ideal_contents_scale, + float expected_scale) { scoped_ptr output_surface = FakeOutputSurface::Create3d(); scoped_ptr resource_provider = @@ -65,11 +70,6 @@ class PictureLayerTilingSetTestWithResources : public testing::Test { gfx::Size layer_bounds(1000, 800); set.SetLayerBounds(layer_bounds); - float contents_scale = 2.f; - gfx::Size content_bounds( - gfx::ToCeiledSize(gfx::ScaleSize(layer_bounds, contents_scale))); - gfx::Rect content_rect(gfx::Point(), content_bounds); - float scale = min_scale; for (int i = 0; i < num_tilings; ++i, scale += scale_increment) { PictureLayerTiling* tiling = set.AddTiling(scale, default_tile_size); @@ -85,18 +85,26 @@ class PictureLayerTilingSetTestWithResources : public testing::Test { } } + float max_contents_scale = scale; + gfx::Size content_bounds( + gfx::ToCeiledSize(gfx::ScaleSize(layer_bounds, max_contents_scale))); + gfx::Rect content_rect(gfx::Point(), content_bounds); + Region remaining(content_rect); PictureLayerTilingSet::Iterator iter( &set, - contents_scale, + max_contents_scale, content_rect, - contents_scale); + ideal_contents_scale); for (; iter; ++iter) { gfx::Rect geometry_rect = iter.geometry_rect(); EXPECT_TRUE(content_rect.Contains(geometry_rect)); ASSERT_TRUE(remaining.Contains(geometry_rect)); remaining.Subtract(geometry_rect); + float scale = iter.CurrentTiling()->contents_scale(); + EXPECT_EQ(expected_scale, scale); + if (num_tilings) EXPECT_TRUE(*iter); else @@ -107,17 +115,36 @@ class PictureLayerTilingSetTestWithResources : public testing::Test { }; TEST_F(PictureLayerTilingSetTestWithResources, NoTilings) { - runTest(0, 0.f, 0.f); + runTest(0, 0.f, 0.f, 2.f, 0.f); +} +TEST_F(PictureLayerTilingSetTestWithResources, OneTiling_Smaller) { + runTest(1, 1.f, 0.f, 2.f, 1.f); } -TEST_F(PictureLayerTilingSetTestWithResources, OneTiling) { - runTest(1, 1.f, 0.f); +TEST_F(PictureLayerTilingSetTestWithResources, OneTiling_Larger) { + runTest(1, 3.f, 0.f, 2.f, 3.f); } -TEST_F(PictureLayerTilingSetTestWithResources, TwoTilings) { - runTest(2, 1.f, 1.f); +TEST_F(PictureLayerTilingSetTestWithResources, TwoTilings_Smaller) { + runTest(2, 1.f, 1.f, 3.f, 2.f); +} + +TEST_F(PictureLayerTilingSetTestWithResources, TwoTilings_SmallerEqual) { + runTest(2, 1.f, 1.f, 2.f, 2.f); +} + +TEST_F(PictureLayerTilingSetTestWithResources, TwoTilings_LargerEqual) { + runTest(2, 1.f, 1.f, 1.f, 1.f); +} + +TEST_F(PictureLayerTilingSetTestWithResources, TwoTilings_Larger) { + runTest(2, 2.f, 8.f, 1.f, 2.f); +} + +TEST_F(PictureLayerTilingSetTestWithResources, ManyTilings_Equal) { + runTest(10, 1.f, 1.f, 5.f, 5.f); } -TEST_F(PictureLayerTilingSetTestWithResources, ManyTilings) { - runTest(10, 1.f, 1.f); +TEST_F(PictureLayerTilingSetTestWithResources, ManyTilings_NotEqual) { + runTest(10, 1.f, 1.f, 4.5f, 5.f); } } // namespace -- cgit v1.1