| Index: cc/layers/nine_patch_layer_impl_unittest.cc
|
| diff --git a/cc/layers/nine_patch_layer_impl_unittest.cc b/cc/layers/nine_patch_layer_impl_unittest.cc
|
| index 89cf250e666a141e1c3befcf9f6920b20bd06c7e..300461d4aea8b4b137f62599e46979842595cfea 100644
|
| --- a/cc/layers/nine_patch_layer_impl_unittest.cc
|
| +++ b/cc/layers/nine_patch_layer_impl_unittest.cc
|
| @@ -39,8 +39,7 @@ void NinePatchLayerLayoutTest(const gfx::Size& bitmap_size,
|
| size_t expected_quad_size) {
|
| std::unique_ptr<RenderPass> render_pass = RenderPass::Create();
|
| gfx::Rect visible_layer_rect(layer_size);
|
| - gfx::Rect expected_remaining(border.x(),
|
| - border.y(),
|
| + gfx::Rect expected_remaining(border.x(), border.y(),
|
| layer_size.width() - border.width(),
|
| layer_size.height() - border.height());
|
|
|
| @@ -66,7 +65,7 @@ void NinePatchLayerLayoutTest(const gfx::Size& bitmap_size,
|
| host_impl.CreateUIResource(uid, bitmap);
|
| layer->SetUIResourceId(uid);
|
| layer->SetImageBounds(bitmap_size);
|
| - layer->SetLayout(aperture_rect, border, fill_center, false);
|
| + layer->SetLayout(aperture_rect, border, gfx::Rect(), fill_center, false);
|
| AppendQuadsData data;
|
| layer->AppendQuads(render_pass.get(), &data);
|
|
|
| @@ -74,21 +73,21 @@ void NinePatchLayerLayoutTest(const gfx::Size& bitmap_size,
|
| const QuadList& quads = render_pass->quad_list;
|
| EXPECT_EQ(expected_quad_size, quads.size());
|
|
|
| - Region remaining(visible_layer_rect);
|
| + Region layer_remaining(visible_layer_rect);
|
| for (auto iter = quads.cbegin(); iter != quads.cend(); ++iter) {
|
| gfx::Rect quad_rect = iter->rect;
|
|
|
| EXPECT_TRUE(visible_layer_rect.Contains(quad_rect)) << iter.index();
|
| - EXPECT_TRUE(remaining.Contains(quad_rect)) << iter.index();
|
| - remaining.Subtract(Region(quad_rect));
|
| + EXPECT_TRUE(layer_remaining.Contains(quad_rect)) << iter.index();
|
| + layer_remaining.Subtract(Region(quad_rect));
|
| }
|
|
|
| // Check if the left-over quad is the same size as the mapped aperture quad in
|
| // layer space.
|
| if (!fill_center) {
|
| - EXPECT_EQ(expected_remaining, remaining.bounds());
|
| + EXPECT_EQ(expected_remaining, layer_remaining.bounds());
|
| } else {
|
| - EXPECT_TRUE(remaining.bounds().IsEmpty());
|
| + EXPECT_TRUE(layer_remaining.bounds().IsEmpty());
|
| }
|
|
|
| // Verify UV rects
|
| @@ -107,10 +106,106 @@ void NinePatchLayerLayoutTest(const gfx::Size& bitmap_size,
|
| Region aperture_region(aperture_rect);
|
| EXPECT_EQ(aperture_region, tex_remaining);
|
| } else {
|
| - EXPECT_TRUE(remaining.bounds().IsEmpty());
|
| + EXPECT_TRUE(layer_remaining.bounds().IsEmpty());
|
| }
|
| }
|
|
|
| +void NinePatchLayerLayoutTestWithOcclusion(const gfx::Size& bitmap_size,
|
| + const gfx::Rect& aperture_rect,
|
| + const gfx::Size& layer_size,
|
| + const gfx::Rect& border,
|
| + const gfx::Rect& occlusion,
|
| + bool fill_center,
|
| + size_t expected_quad_size) {
|
| + std::unique_ptr<RenderPass> render_pass = RenderPass::Create();
|
| + gfx::Rect visible_layer_rect(layer_size);
|
| + int border_left = std::min(border.x(), occlusion.x()),
|
| + border_top = std::min(border.y(), occlusion.y()),
|
| + border_right = std::min(border.width() - border.x(),
|
| + layer_size.width() - occlusion.right()),
|
| + border_bottom = std::min(border.height() - border.y(),
|
| + layer_size.height() - occlusion.bottom());
|
| + gfx::Rect expected_layer_remaining(
|
| + border_left, border_top, layer_size.width() - border_left - border_right,
|
| + layer_size.height() - border_top - border_bottom);
|
| + float ratio_left = border_left == 0 ? 0 : (aperture_rect.x() / border.x()),
|
| + ratio_top = border_top == 0 ? 0 : (aperture_rect.y() / border.y()),
|
| + ratio_right = border_right == 0
|
| + ? 0
|
| + : ((bitmap_size.width() - aperture_rect.right()) /
|
| + (border.width() - border.x())),
|
| + ratio_bottom = border_bottom == 0
|
| + ? 0
|
| + : ((bitmap_size.height() - aperture_rect.bottom()) /
|
| + (border.height() - border.y()));
|
| + int image_remaining_left = border_left * ratio_left,
|
| + image_remaining_top = border_top * ratio_top,
|
| + image_remaining_right = border_right * ratio_right,
|
| + image_remaining_bottom = border_bottom * ratio_bottom;
|
| + gfx::Rect expected_tex_remaining(
|
| + image_remaining_left, image_remaining_top,
|
| + bitmap_size.width() - image_remaining_right - image_remaining_left,
|
| + bitmap_size.height() - image_remaining_bottom - image_remaining_top);
|
| +
|
| + FakeImplTaskRunnerProvider task_runner_provider;
|
| + TestSharedBitmapManager shared_bitmap_manager;
|
| + TestTaskGraphRunner task_graph_runner;
|
| + std::unique_ptr<OutputSurface> output_surface = FakeOutputSurface::Create3d();
|
| + FakeUIResourceLayerTreeHostImpl host_impl(
|
| + &task_runner_provider, &shared_bitmap_manager, &task_graph_runner);
|
| + host_impl.SetVisible(true);
|
| + host_impl.InitializeRenderer(output_surface.get());
|
| +
|
| + std::unique_ptr<NinePatchLayerImpl> layer =
|
| + NinePatchLayerImpl::Create(host_impl.active_tree(), 1);
|
| + layer->draw_properties().visible_layer_rect = visible_layer_rect;
|
| + layer->SetBounds(layer_size);
|
| + layer->test_properties()->force_render_surface = true;
|
| +
|
| + UIResourceId uid = 1;
|
| + bool is_opaque = false;
|
| + UIResourceBitmap bitmap(bitmap_size, is_opaque);
|
| +
|
| + host_impl.CreateUIResource(uid, bitmap);
|
| + layer->SetUIResourceId(uid);
|
| + layer->SetImageBounds(bitmap_size);
|
| + layer->SetLayout(aperture_rect, border, occlusion, false, false);
|
| + AppendQuadsData data;
|
| + layer->AppendQuads(render_pass.get(), &data);
|
| +
|
| + // Verify quad rects
|
| + const QuadList& quads = render_pass->quad_list;
|
| + EXPECT_EQ(expected_quad_size, quads.size());
|
| +
|
| + Region layer_remaining(visible_layer_rect);
|
| + for (auto iter = quads.cbegin(); iter != quads.cend(); ++iter) {
|
| + gfx::Rect quad_rect = iter->rect;
|
| +
|
| + EXPECT_TRUE(visible_layer_rect.Contains(quad_rect)) << iter.index();
|
| + EXPECT_TRUE(layer_remaining.Contains(quad_rect)) << iter.index();
|
| + layer_remaining.Subtract(Region(quad_rect));
|
| + }
|
| +
|
| + // Check if the left-over quad is the same size as the mapped aperture quad in
|
| + // layer space.
|
| + EXPECT_EQ(expected_layer_remaining, layer_remaining.bounds());
|
| +
|
| + // Verify UV rects
|
| + gfx::Rect bitmap_rect(bitmap_size);
|
| + Region tex_remaining(bitmap_rect);
|
| + for (const auto& quad : quads) {
|
| + const TextureDrawQuad* tex_quad = TextureDrawQuad::MaterialCast(quad);
|
| + gfx::RectF tex_rect =
|
| + gfx::BoundingRect(tex_quad->uv_top_left, tex_quad->uv_bottom_right);
|
| + tex_rect.Scale(bitmap_size.width(), bitmap_size.height());
|
| + tex_remaining.Subtract(Region(ToRoundedIntRect(tex_rect)));
|
| + }
|
| +
|
| + EXPECT_EQ(expected_tex_remaining, tex_remaining.bounds());
|
| + Region aperture_region(expected_tex_remaining);
|
| + EXPECT_EQ(aperture_region, tex_remaining);
|
| +}
|
| +
|
| TEST(NinePatchLayerImplTest, VerifyDrawQuads) {
|
| // Input is a 100x100 bitmap with a 40x50 aperture at x=20, y=30.
|
| // The bounds of the layer are set to 400x400.
|
| @@ -120,12 +215,8 @@ TEST(NinePatchLayerImplTest, VerifyDrawQuads) {
|
| gfx::Rect border(40, 40, 80, 80);
|
| bool fill_center = false;
|
| size_t expected_quad_size = 8;
|
| - NinePatchLayerLayoutTest(bitmap_size,
|
| - aperture_rect,
|
| - layer_size,
|
| - border,
|
| - fill_center,
|
| - expected_quad_size);
|
| + NinePatchLayerLayoutTest(bitmap_size, aperture_rect, layer_size, border,
|
| + fill_center, expected_quad_size);
|
|
|
| // The bounds of the layer are set to less than the bitmap size.
|
| bitmap_size = gfx::Size(100, 100);
|
| @@ -134,12 +225,8 @@ TEST(NinePatchLayerImplTest, VerifyDrawQuads) {
|
| border = gfx::Rect(10, 10, 25, 15);
|
| fill_center = true;
|
| expected_quad_size = 9;
|
| - NinePatchLayerLayoutTest(bitmap_size,
|
| - aperture_rect,
|
| - layer_size,
|
| - border,
|
| - fill_center,
|
| - expected_quad_size);
|
| + NinePatchLayerLayoutTest(bitmap_size, aperture_rect, layer_size, border,
|
| + fill_center, expected_quad_size);
|
|
|
| // Layer and image sizes are equal.
|
| bitmap_size = gfx::Size(100, 100);
|
| @@ -148,12 +235,53 @@ TEST(NinePatchLayerImplTest, VerifyDrawQuads) {
|
| border = gfx::Rect(20, 30, 40, 50);
|
| fill_center = true;
|
| expected_quad_size = 9;
|
| - NinePatchLayerLayoutTest(bitmap_size,
|
| - aperture_rect,
|
| - layer_size,
|
| - border,
|
| - fill_center,
|
| - expected_quad_size);
|
| + NinePatchLayerLayoutTest(bitmap_size, aperture_rect, layer_size, border,
|
| + fill_center, expected_quad_size);
|
| +}
|
| +
|
| +TEST(NinePatchLayerImplTest, VerifyDrawQuadsWithOcclusion) {
|
| + // Occlusion removed part of the border and leaves us with 12 patches.
|
| + gfx::Size bitmap_size(100, 100);
|
| + gfx::Rect aperture_rect(30, 30, 40, 40);
|
| + gfx::Size layer_size(400, 400);
|
| + gfx::Rect occlusion(20, 20, 360, 360);
|
| + gfx::Rect border(30, 30, 60, 60);
|
| + size_t expected_quad_size = 12;
|
| + NinePatchLayerLayoutTestWithOcclusion(bitmap_size, aperture_rect, layer_size,
|
| + border, occlusion, false,
|
| + expected_quad_size);
|
| +
|
| + bitmap_size = gfx::Size(100, 100);
|
| + aperture_rect = gfx::Rect(20, 30, 60, 40);
|
| + layer_size = gfx::Size(400, 400);
|
| + occlusion = gfx::Rect(10, 10, 380, 380);
|
| + border = gfx::Rect(20, 30, 40, 60);
|
| + expected_quad_size = 12;
|
| + NinePatchLayerLayoutTestWithOcclusion(bitmap_size, aperture_rect, layer_size,
|
| + border, occlusion, false,
|
| + expected_quad_size);
|
| +
|
| + // All borders are empty, so nothing should be drawn.
|
| + bitmap_size = gfx::Size(100, 100);
|
| + aperture_rect = gfx::Rect(0, 0, 100, 100);
|
| + layer_size = gfx::Size(400, 400);
|
| + occlusion = gfx::Rect(0, 0, 400, 400);
|
| + border = gfx::Rect(0, 0, 0, 0);
|
| + expected_quad_size = 0;
|
| + NinePatchLayerLayoutTestWithOcclusion(bitmap_size, aperture_rect, layer_size,
|
| + border, occlusion, false,
|
| + expected_quad_size);
|
| +
|
| + // Right border is empty, we should have no quads on the right side.
|
| + bitmap_size = gfx::Size(100, 100);
|
| + aperture_rect = gfx::Rect(20, 30, 80, 40);
|
| + layer_size = gfx::Size(400, 400);
|
| + occlusion = gfx::Rect(10, 10, 390, 380);
|
| + border = gfx::Rect(20, 30, 20, 60);
|
| + expected_quad_size = 7;
|
| + NinePatchLayerLayoutTestWithOcclusion(bitmap_size, aperture_rect, layer_size,
|
| + border, occlusion, false,
|
| + expected_quad_size);
|
| }
|
|
|
| TEST(NinePatchLayerImplTest, VerifyDrawQuadsWithEmptyPatches) {
|
| @@ -165,12 +293,8 @@ TEST(NinePatchLayerImplTest, VerifyDrawQuadsWithEmptyPatches) {
|
| gfx::Rect border(10, 0, 20, 10);
|
| bool fill_center = false;
|
| size_t expected_quad_size = 5;
|
| - NinePatchLayerLayoutTest(bitmap_size,
|
| - aperture_rect,
|
| - layer_size,
|
| - border,
|
| - fill_center,
|
| - expected_quad_size);
|
| + NinePatchLayerLayoutTest(bitmap_size, aperture_rect, layer_size, border,
|
| + fill_center, expected_quad_size);
|
|
|
| // The top and left components of the 9-patch are empty, so there should be no
|
| // quads for the left and top components.
|
| @@ -180,12 +304,8 @@ TEST(NinePatchLayerImplTest, VerifyDrawQuadsWithEmptyPatches) {
|
| border = gfx::Rect(0, 0, 10, 10);
|
| fill_center = false;
|
| expected_quad_size = 3;
|
| - NinePatchLayerLayoutTest(bitmap_size,
|
| - aperture_rect,
|
| - layer_size,
|
| - border,
|
| - fill_center,
|
| - expected_quad_size);
|
| + NinePatchLayerLayoutTest(bitmap_size, aperture_rect, layer_size, border,
|
| + fill_center, expected_quad_size);
|
|
|
| // The aperture is the size of the bitmap and the center doesn't draw.
|
| bitmap_size = gfx::Size(100, 100);
|
| @@ -194,12 +314,8 @@ TEST(NinePatchLayerImplTest, VerifyDrawQuadsWithEmptyPatches) {
|
| border = gfx::Rect(0, 0, 0, 0);
|
| fill_center = false;
|
| expected_quad_size = 0;
|
| - NinePatchLayerLayoutTest(bitmap_size,
|
| - aperture_rect,
|
| - layer_size,
|
| - border,
|
| - fill_center,
|
| - expected_quad_size);
|
| + NinePatchLayerLayoutTest(bitmap_size, aperture_rect, layer_size, border,
|
| + fill_center, expected_quad_size);
|
|
|
| // The aperture is the size of the bitmap and the center does draw.
|
| bitmap_size = gfx::Size(100, 100);
|
| @@ -208,12 +324,8 @@ TEST(NinePatchLayerImplTest, VerifyDrawQuadsWithEmptyPatches) {
|
| border = gfx::Rect(0, 0, 0, 0);
|
| fill_center = true;
|
| expected_quad_size = 1;
|
| - NinePatchLayerLayoutTest(bitmap_size,
|
| - aperture_rect,
|
| - layer_size,
|
| - border,
|
| - fill_center,
|
| - expected_quad_size);
|
| + NinePatchLayerLayoutTest(bitmap_size, aperture_rect, layer_size, border,
|
| + fill_center, expected_quad_size);
|
| }
|
|
|
| TEST(NinePatchLayerImplTest, Occlusion) {
|
| @@ -238,7 +350,7 @@ TEST(NinePatchLayerImplTest, Occlusion) {
|
|
|
| gfx::Rect aperture = gfx::Rect(3, 3, 4, 4);
|
| gfx::Rect border = gfx::Rect(300, 300, 400, 400);
|
| - nine_patch_layer_impl->SetLayout(aperture, border, true, false);
|
| + nine_patch_layer_impl->SetLayout(aperture, border, gfx::Rect(), true, false);
|
|
|
| impl.CalcDrawProps(viewport_size);
|
|
|
| @@ -316,7 +428,8 @@ TEST(NinePatchLayerImplTest, OpaqueRect) {
|
|
|
| gfx::Rect aperture = gfx::Rect(3, 3, 4, 4);
|
| gfx::Rect border = gfx::Rect(300, 300, 400, 400);
|
| - nine_patch_layer_impl->SetLayout(aperture, border, true, false);
|
| + nine_patch_layer_impl->SetLayout(aperture, border, gfx::Rect(), true,
|
| + false);
|
|
|
| impl.AppendQuadsWithOcclusion(nine_patch_layer_impl, gfx::Rect());
|
|
|
|
|