Index: cc/layers/render_surface_impl_unittest.cc |
diff --git a/cc/layers/render_surface_impl_unittest.cc b/cc/layers/render_surface_impl_unittest.cc |
index 7733240c36ccb1e6a83f95486ab276e9d9ab7744..c6280385e16939d3f75dc039ca4d874970331c9e 100644 |
--- a/cc/layers/render_surface_impl_unittest.cc |
+++ b/cc/layers/render_surface_impl_unittest.cc |
@@ -4,7 +4,11 @@ |
#include "cc/layers/render_surface_impl.h" |
+#include "cc/layers/append_quads_data.h" |
+#include "cc/layers/content_layer.h" |
#include "cc/test/layer_test_common.h" |
+#include "cc/test/layer_tree_pixel_test.h" |
+#include "cc/test/solid_color_content_layer_client.h" |
#include "testing/gtest/include/gtest/gtest.h" |
namespace cc { |
@@ -63,5 +67,97 @@ TEST(RenderSurfaceLayerImplTest, Occlusion) { |
} |
} |
+class RenderSurfaceImplHiDpiTest : public LayerTreePixelTest { |
+ protected: |
+ RenderSurfaceImplHiDpiTest() |
+ : device_scale_factor_(1.f), |
+ content_size_(100), |
+ background_client_(SK_ColorWHITE), |
+ green_client_(SK_ColorGREEN), |
+ blue_client_(SK_ColorBLUE) {} |
+ |
+ virtual void InitializeSettings(LayerTreeSettings* settings) OVERRIDE { |
+ // Required so that device scale is inherited by content scale. |
+ settings->layer_transforms_should_scale_layer_contents = true; |
+ } |
+ |
+ virtual void SetupTree() OVERRIDE { |
+ layer_tree_host()->SetDeviceScaleFactor(device_scale_factor_); |
+ LayerTreePixelTest::SetupTree(); |
+ } |
+ |
+ virtual void DrawLayersOnThread(LayerTreeHostImpl* host_impl) OVERRIDE { |
+ LayerImpl* root_impl = host_impl->active_tree()->root_layer(); |
+ |
+ LayerImpl* layer_impl = root_impl->children()[0]; |
+ layer_impl->CreateRenderSurface(); |
+ layer_impl->draw_properties().render_target = layer_impl; |
+ |
+ RenderSurfaceImpl* render_surface = layer_impl->render_surface(); |
+ render_surface->SetContentRect(layer_impl->visible_content_rect()); |
+ render_surface->SetClipRect(layer_impl->clip_rect()); |
+ render_surface->SetDrawOpacity(1.f); |
+ |
+ MockOcclusionTracker<LayerImpl> occlusion_tracker; |
+ scoped_ptr<RenderPass> render_pass = RenderPass::Create(); |
+ AppendQuadsData append_quads_data; |
+ render_surface->AppendQuads(render_pass.get(), |
+ occlusion_tracker, |
+ &append_quads_data, |
+ false, |
+ RenderPass::Id(2, 0)); |
+ |
+ ASSERT_EQ(1u, render_pass->shared_quad_state_list.size()); |
+ SharedQuadState* quad_state = render_pass->shared_quad_state_list[0]; |
+ |
+ int expected_size = content_size_ * device_scale_factor_; |
+ ASSERT_EQ(expected_size, quad_state->content_bounds.width()); |
+ ASSERT_EQ(expected_size, quad_state->content_bounds.height()); |
+ } |
+ |
+ void RunDpiTest(int content_size, float device_scale_factor) { |
+ content_size_ = content_size; |
+ int half_content = content_size / 2; |
+ |
+ scoped_refptr<ContentLayer> background = |
+ ContentLayer::Create(&background_client_); |
+ background->SetBounds(gfx::Size(content_size, content_size)); |
+ background->SetIsDrawable(true); |
+ |
+ scoped_refptr<ContentLayer> green = ContentLayer::Create(&green_client_); |
+ green->SetBounds(gfx::Size(content_size, content_size)); |
+ green->SetIsDrawable(true); |
+ background->AddChild(green); |
+ |
+ scoped_refptr<ContentLayer> blue = ContentLayer::Create(&blue_client_); |
+ blue->SetBounds(gfx::Size(half_content, half_content)); |
+ blue->SetPosition(gfx::Point(half_content, half_content)); |
+ blue->SetIsDrawable(true); |
+ green->AddChild(blue); |
+ |
+ device_scale_factor_ = device_scale_factor; |
+ |
+ this->impl_side_painting_ = false; |
+ RunPixelTest( |
+ SOFTWARE_WITH_DEFAULT, |
+ background, |
+ base::FilePath(FILE_PATH_LITERAL("green_small_with_blue_corner.png"))); |
+ } |
+ |
+ float device_scale_factor_; |
+ int content_size_; |
+ SolidColorContentLayerClient background_client_; |
+ SolidColorContentLayerClient green_client_; |
+ SolidColorContentLayerClient blue_client_; |
+}; |
+ |
+TEST_F(RenderSurfaceImplHiDpiTest, TestStandardDpi) { |
+ RunDpiTest(100, 1.f); |
+} |
+ |
+TEST_F(RenderSurfaceImplHiDpiTest, TestHiDpi) { |
+ RunDpiTest(50, 2.f); |
+} |
+ |
} // namespace |
} // namespace cc |