summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authordanakj@chromium.org <danakj@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2013-01-29 19:08:33 +0000
committerdanakj@chromium.org <danakj@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2013-01-29 19:08:33 +0000
commit519747478eda3c08f5a311041d020f28940559d0 (patch)
tree7a717e77962e49bc25d844cbbc70906ac59fede2
parent62e86ba6b589323f70fb435d456d241018db18d3 (diff)
downloadchromium_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.cc9
-rw-r--r--cc/picture_layer_tiling_set_unittest.cc57
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