diff options
author | danakj@chromium.org <danakj@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2013-01-29 19:08:33 +0000 |
---|---|---|
committer | danakj@chromium.org <danakj@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2013-01-29 19:08:33 +0000 |
commit | 519747478eda3c08f5a311041d020f28940559d0 (patch) | |
tree | 7a717e77962e49bc25d844cbbc70906ac59fede2 | |
parent | 62e86ba6b589323f70fb435d456d241018db18d3 (diff) | |
download | chromium_src-519747478eda3c08f5a311041d020f28940559d0.zip chromium_src-519747478eda3c08f5a311041d020f28940559d0.tar.gz chromium_src-519747478eda3c08f5a311041d020f28940559d0.tar.bz2 |
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
-rw-r--r-- | cc/picture_layer_tiling_set.cc | 9 | ||||
-rw-r--r-- | 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<size_t>(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<FakeOutputSurface> output_surface = FakeOutputSurface::Create3d(); scoped_ptr<ResourceProvider> 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 |