Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(16)

Unified Diff: cc/trees/layer_tree_host_impl_unittest.cc

Issue 23805002: [cc] Enable specifying a overhang/gutter texture. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Incorporate review feedback Created 7 years, 3 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « cc/trees/layer_tree_host_impl.cc ('k') | content/renderer/gpu/render_widget_compositor.h » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: cc/trees/layer_tree_host_impl_unittest.cc
diff --git a/cc/trees/layer_tree_host_impl_unittest.cc b/cc/trees/layer_tree_host_impl_unittest.cc
index 686efc3695cdabacd36546ffaeb97d6db6c51db5..911b4ea976e917a153e9af834044fa85d213fb52 100644
--- a/cc/trees/layer_tree_host_impl_unittest.cc
+++ b/cc/trees/layer_tree_host_impl_unittest.cc
@@ -2843,6 +2843,11 @@ TEST_F(LayerTreeHostImplTest, BlendingOffWhenDrawingOpaqueLayers) {
class LayerTreeHostImplViewportCoveredTest : public LayerTreeHostImplTest {
public:
+ LayerTreeHostImplViewportCoveredTest() :
+ gutter_quad_material_(DrawQuad::SOLID_COLOR),
+ child_(NULL),
+ did_activate_pending_tree_(false) {}
+
void CreateLayerTreeHostImpl(bool always_draw) {
LayerTreeSettings settings;
settings.minimum_occlusion_tracking_size = gfx::Size();
@@ -2887,15 +2892,11 @@ class LayerTreeHostImplViewportCoveredTest : public LayerTreeHostImplTest {
EXPECT_TRUE(host_impl_->PrepareToDraw(&frame, gfx::Rect()));
ASSERT_EQ(1u, frame.render_passes.size());
- size_t num_gutter_quads = 0;
- for (size_t i = 0; i < frame.render_passes[0]->quad_list.size(); ++i)
- num_gutter_quads += (frame.render_passes[0]->quad_list[i]->material ==
- DrawQuad::SOLID_COLOR) ? 1 : 0;
- EXPECT_EQ(0u, num_gutter_quads);
+ EXPECT_EQ(0u, CountGutterQuads(frame.render_passes[0]->quad_list));
EXPECT_EQ(1u, frame.render_passes[0]->quad_list.size());
+ ValidateTextureDrawQuads(frame.render_passes[0]->quad_list);
- LayerTestCommon::VerifyQuadsExactlyCoverRect(
- frame.render_passes[0]->quad_list, gfx::Rect(viewport_size_));
+ VerifyQuadsExactlyCoverViewport(frame.render_passes[0]->quad_list);
host_impl_->DidDrawAllLayers(frame);
}
@@ -2912,15 +2913,11 @@ class LayerTreeHostImplViewportCoveredTest : public LayerTreeHostImplTest {
EXPECT_TRUE(host_impl_->PrepareToDraw(&frame, gfx::Rect()));
ASSERT_EQ(1u, frame.render_passes.size());
- size_t num_gutter_quads = 0;
- for (size_t i = 0; i < frame.render_passes[0]->quad_list.size(); ++i)
- num_gutter_quads += (frame.render_passes[0]->quad_list[i]->material ==
- DrawQuad::SOLID_COLOR) ? 1 : 0;
- EXPECT_EQ(1u, num_gutter_quads);
+ EXPECT_EQ(1u, CountGutterQuads(frame.render_passes[0]->quad_list));
EXPECT_EQ(1u, frame.render_passes[0]->quad_list.size());
+ ValidateTextureDrawQuads(frame.render_passes[0]->quad_list);
- LayerTestCommon::VerifyQuadsExactlyCoverRect(
- frame.render_passes[0]->quad_list, gfx::Rect(viewport_size_));
+ VerifyQuadsExactlyCoverViewport(frame.render_passes[0]->quad_list);
host_impl_->DidDrawAllLayers(frame);
}
@@ -2937,15 +2934,11 @@ class LayerTreeHostImplViewportCoveredTest : public LayerTreeHostImplTest {
EXPECT_TRUE(host_impl_->PrepareToDraw(&frame, gfx::Rect()));
ASSERT_EQ(1u, frame.render_passes.size());
- size_t num_gutter_quads = 0;
- for (size_t i = 0; i < frame.render_passes[0]->quad_list.size(); ++i)
- num_gutter_quads += (frame.render_passes[0]->quad_list[i]->material ==
- DrawQuad::SOLID_COLOR) ? 1 : 0;
- EXPECT_EQ(4u, num_gutter_quads);
+ EXPECT_EQ(4u, CountGutterQuads(frame.render_passes[0]->quad_list));
EXPECT_EQ(5u, frame.render_passes[0]->quad_list.size());
+ ValidateTextureDrawQuads(frame.render_passes[0]->quad_list);
- LayerTestCommon::VerifyQuadsExactlyCoverRect(
- frame.render_passes[0]->quad_list, gfx::Rect(viewport_size_));
+ VerifyQuadsExactlyCoverViewport(frame.render_passes[0]->quad_list);
host_impl_->DidDrawAllLayers(frame);
}
@@ -2963,12 +2956,9 @@ class LayerTreeHostImplViewportCoveredTest : public LayerTreeHostImplTest {
EXPECT_TRUE(host_impl_->PrepareToDraw(&frame, gfx::Rect()));
ASSERT_EQ(1u, frame.render_passes.size());
- size_t num_gutter_quads = 0;
- for (size_t i = 0; i < frame.render_passes[0]->quad_list.size(); ++i)
- num_gutter_quads += (frame.render_passes[0]->quad_list[i]->material ==
- DrawQuad::SOLID_COLOR) ? 1 : 0;
- EXPECT_EQ(0u, num_gutter_quads);
+ EXPECT_EQ(0u, CountGutterQuads(frame.render_passes[0]->quad_list));
EXPECT_EQ(1u, frame.render_passes[0]->quad_list.size());
+ ValidateTextureDrawQuads(frame.render_passes[0]->quad_list);
host_impl_->DidDrawAllLayers(frame);
}
@@ -2977,7 +2967,54 @@ class LayerTreeHostImplViewportCoveredTest : public LayerTreeHostImplTest {
did_activate_pending_tree_ = true;
}
+ void set_gutter_quad_material(DrawQuad::Material material) {
+ gutter_quad_material_ = material;
+ }
+ void set_gutter_texture_size(gfx::Size gutter_texture_size) {
+ gutter_texture_size_ = gutter_texture_size;
+ }
+
protected:
+ size_t CountGutterQuads(const QuadList& quad_list) {
+ size_t num_gutter_quads = 0;
+ for (size_t i = 0; i < quad_list.size(); ++i) {
+ num_gutter_quads += (quad_list[i]->material ==
+ gutter_quad_material_) ? 1 : 0;
+ }
+ return num_gutter_quads;
+ }
+
+ void VerifyQuadsExactlyCoverViewport(const QuadList& quad_list) {
+ LayerTestCommon::VerifyQuadsExactlyCoverRect(
+ quad_list, gfx::Rect(DipSizeToPixelSize(viewport_size_)));
+ }
+
+ // Make sure that the texture coordinates match their expectations.
+ void ValidateTextureDrawQuads(const QuadList& quad_list) {
+ for (size_t i = 0; i < quad_list.size(); ++i) {
+ if (quad_list[i]->material != DrawQuad::TEXTURE_CONTENT)
+ continue;
+ const TextureDrawQuad* quad = TextureDrawQuad::MaterialCast(quad_list[i]);
+ gfx::SizeF gutter_texture_size_pixels = gfx::ScaleSize(
+ gutter_texture_size_, host_impl_->device_scale_factor());
+ EXPECT_EQ(quad->uv_top_left.x(),
+ quad->rect.x() / gutter_texture_size_pixels.width());
+ EXPECT_EQ(quad->uv_top_left.y(),
+ quad->rect.y() / gutter_texture_size_pixels.height());
+ EXPECT_EQ(quad->uv_bottom_right.x(),
+ quad->rect.right() / gutter_texture_size_pixels.width());
+ EXPECT_EQ(quad->uv_bottom_right.y(),
+ quad->rect.bottom() / gutter_texture_size_pixels.height());
+ }
+ }
+
+ gfx::Size DipSizeToPixelSize(gfx::Size size) {
+ return gfx::ToRoundedSize(
+ gfx::ScaleSize(size, host_impl_->device_scale_factor()));
+ }
+
+ DrawQuad::Material gutter_quad_material_;
+ gfx::Size gutter_texture_size_;
gfx::Size viewport_size_;
BlendStateCheckLayer* child_;
bool did_activate_pending_tree_;
@@ -2987,8 +3024,61 @@ TEST_F(LayerTreeHostImplViewportCoveredTest, ViewportCovered) {
bool always_draw = false;
CreateLayerTreeHostImpl(always_draw);
- host_impl_->SetViewportSize(viewport_size_);
+ host_impl_->SetViewportSize(DipSizeToPixelSize(viewport_size_));
+ SetupActiveTreeLayers();
+ TestLayerCoversFullViewport();
+ TestEmptyLayer();
+ TestLayerInMiddleOfViewport();
+ TestLayerIsLargerThanViewport();
+}
+
+TEST_F(LayerTreeHostImplViewportCoveredTest, ViewportCoveredScaled) {
+ bool always_draw = false;
+ CreateLayerTreeHostImpl(always_draw);
+
+ host_impl_->SetDeviceScaleFactor(2.f);
+ host_impl_->SetViewportSize(DipSizeToPixelSize(viewport_size_));
+ SetupActiveTreeLayers();
+ TestLayerCoversFullViewport();
+ TestEmptyLayer();
+ TestLayerInMiddleOfViewport();
+ TestLayerIsLargerThanViewport();
+}
+
+TEST_F(LayerTreeHostImplViewportCoveredTest, ViewportCoveredOverhangBitmap) {
+ bool always_draw = false;
+ CreateLayerTreeHostImpl(always_draw);
+
+ host_impl_->SetViewportSize(DipSizeToPixelSize(viewport_size_));
SetupActiveTreeLayers();
+
+ // Specify an overhang bitmap to use.
+ scoped_refptr<UIResourceBitmap> ui_resource_bitmap(UIResourceBitmap::Create(
+ new uint8_t[4], UIResourceBitmap::RGBA8, gfx::Size(1, 1)));
+ UIResourceId ui_resource_id = 12345;
+ host_impl_->CreateUIResource(ui_resource_id, ui_resource_bitmap);
+ host_impl_->SetOverhangUIResource(ui_resource_id, gfx::Size(32, 32));
+ set_gutter_quad_material(DrawQuad::TEXTURE_CONTENT);
+ set_gutter_texture_size(gfx::Size(32, 32));
+
+ TestLayerCoversFullViewport();
+ TestEmptyLayer();
+ TestLayerInMiddleOfViewport();
+ TestLayerIsLargerThanViewport();
+
+ // Change the resource size.
+ host_impl_->SetOverhangUIResource(ui_resource_id, gfx::Size(128, 16));
+ set_gutter_texture_size(gfx::Size(128, 16));
+
+ TestLayerCoversFullViewport();
+ TestEmptyLayer();
+ TestLayerInMiddleOfViewport();
+ TestLayerIsLargerThanViewport();
+
+ // Change the device scale factor
+ host_impl_->SetDeviceScaleFactor(2.f);
+ host_impl_->SetViewportSize(DipSizeToPixelSize(viewport_size_));
+
TestLayerCoversFullViewport();
TestEmptyLayer();
TestLayerInMiddleOfViewport();
@@ -3001,7 +3091,7 @@ TEST_F(LayerTreeHostImplViewportCoveredTest, ActiveTreeGrowViewportInvalid) {
// Pending tree to force active_tree size invalid. Not used otherwise.
host_impl_->CreatePendingTree();
- host_impl_->SetViewportSize(viewport_size_);
+ host_impl_->SetViewportSize(DipSizeToPixelSize(viewport_size_));
EXPECT_TRUE(host_impl_->active_tree()->ViewportSizeInvalid());
SetupActiveTreeLayers();
@@ -3018,16 +3108,15 @@ TEST_F(LayerTreeHostImplViewportCoveredTest, ActiveTreeShrinkViewportInvalid) {
host_impl_->CreatePendingTree();
gfx::Size larger_viewport(viewport_size_.width() + 100,
viewport_size_.height() + 100);
- host_impl_->SetViewportSize(larger_viewport);
+ host_impl_->SetViewportSize(DipSizeToPixelSize(larger_viewport));
EXPECT_TRUE(host_impl_->active_tree()->ViewportSizeInvalid());
- did_activate_pending_tree_ = false;
host_impl_->ActivatePendingTree();
EXPECT_TRUE(did_activate_pending_tree_);
EXPECT_FALSE(host_impl_->active_tree()->ViewportSizeInvalid());
// Shrink pending tree viewport without activating.
host_impl_->CreatePendingTree();
- host_impl_->SetViewportSize(viewport_size_);
+ host_impl_->SetViewportSize(DipSizeToPixelSize(viewport_size_));
EXPECT_TRUE(host_impl_->active_tree()->ViewportSizeInvalid());
SetupActiveTreeLayers();
« no previous file with comments | « cc/trees/layer_tree_host_impl.cc ('k') | content/renderer/gpu/render_widget_compositor.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698