Index: cc/trees/layer_tree_host_pixeltest_readback.cc |
diff --git a/cc/trees/layer_tree_host_pixeltest_readback.cc b/cc/trees/layer_tree_host_pixeltest_readback.cc |
index cd59ed502564fb86f1ff3e6e9ad4dfa6f43e3a72..6c8b094ddf67b37ab865413bd624738db38bb289 100644 |
--- a/cc/trees/layer_tree_host_pixeltest_readback.cc |
+++ b/cc/trees/layer_tree_host_pixeltest_readback.cc |
@@ -3,10 +3,13 @@ |
// found in the LICENSE file. |
#include "build/build_config.h" |
+#include "cc/layers/content_layer.h" |
#include "cc/output/copy_output_request.h" |
#include "cc/output/copy_output_result.h" |
#include "cc/test/layer_tree_pixel_test.h" |
#include "cc/test/paths.h" |
+#include "cc/test/solid_color_content_layer_client.h" |
+#include "cc/trees/layer_tree_impl.h" |
#if !defined(OS_ANDROID) |
@@ -15,24 +18,31 @@ namespace { |
class LayerTreeHostReadbackPixelTest : public LayerTreePixelTest { |
protected: |
- LayerTreeHostReadbackPixelTest() : force_readback_as_bitmap_(false) {} |
- |
virtual scoped_ptr<CopyOutputRequest> CreateCopyOutputRequest() OVERRIDE { |
- if (force_readback_as_bitmap_) { |
- return CopyOutputRequest::CreateBitmapRequest( |
- base::Bind(&LayerTreeHostReadbackPixelTest::ReadbackResultAsBitmap, |
- base::Unretained(this))); |
- } |
- |
- if (!use_gl_) { |
- return CopyOutputRequest::CreateRequest( |
- base::Bind(&LayerTreeHostReadbackPixelTest::ReadbackResultAsBitmap, |
- base::Unretained(this))); |
+ scoped_ptr<CopyOutputRequest> request; |
+ |
+ switch (test_type_) { |
+ case GL_WITH_BITMAP: |
+ case SOFTWARE_WITH_BITMAP: |
+ request = CopyOutputRequest::CreateBitmapRequest( |
+ base::Bind(&LayerTreeHostReadbackPixelTest::ReadbackResultAsBitmap, |
+ base::Unretained(this))); |
+ break; |
+ case SOFTWARE_WITH_DEFAULT: |
+ request = CopyOutputRequest::CreateRequest( |
+ base::Bind(&LayerTreeHostReadbackPixelTest::ReadbackResultAsBitmap, |
+ base::Unretained(this))); |
+ break; |
+ case GL_WITH_DEFAULT: |
+ request = CopyOutputRequest::CreateRequest( |
+ base::Bind(&LayerTreeHostReadbackPixelTest::ReadbackResultAsTexture, |
+ base::Unretained(this))); |
+ break; |
} |
- return CopyOutputRequest::CreateRequest( |
- base::Bind(&LayerTreeHostReadbackPixelTest::ReadbackResultAsTexture, |
- base::Unretained(this))); |
+ if (!copy_subrect_.IsEmpty()) |
+ request->set_area(copy_subrect_); |
+ return request.Pass(); |
} |
void ReadbackResultAsBitmap(scoped_ptr<CopyOutputResult> result) { |
@@ -55,13 +65,10 @@ class LayerTreeHostReadbackPixelTest : public LayerTreePixelTest { |
texture_mailbox->RunReleaseCallback(0, false); |
} |
- bool force_readback_as_bitmap_; |
+ gfx::Rect copy_subrect_; |
}; |
TEST_F(LayerTreeHostReadbackPixelTest, ReadbackRootLayer_Software) { |
- use_gl_ = false; |
- force_readback_as_bitmap_ = false; |
- |
scoped_refptr<SolidColorLayer> background = CreateSolidColorLayer( |
gfx::Rect(200, 200), SK_ColorWHITE); |
@@ -69,15 +76,13 @@ TEST_F(LayerTreeHostReadbackPixelTest, ReadbackRootLayer_Software) { |
gfx::Rect(200, 200), SK_ColorGREEN); |
background->AddChild(green); |
- RunPixelTest(background, |
+ RunPixelTest(SOFTWARE_WITH_DEFAULT, |
+ background, |
base::FilePath(FILE_PATH_LITERAL( |
"green.png"))); |
} |
TEST_F(LayerTreeHostReadbackPixelTest, ReadbackRootLayer_Software_Bitmap) { |
- use_gl_ = false; |
- force_readback_as_bitmap_ = true; |
- |
scoped_refptr<SolidColorLayer> background = CreateSolidColorLayer( |
gfx::Rect(200, 200), SK_ColorWHITE); |
@@ -85,15 +90,13 @@ TEST_F(LayerTreeHostReadbackPixelTest, ReadbackRootLayer_Software_Bitmap) { |
gfx::Rect(200, 200), SK_ColorGREEN); |
background->AddChild(green); |
- RunPixelTest(background, |
+ RunPixelTest(SOFTWARE_WITH_BITMAP, |
+ background, |
base::FilePath(FILE_PATH_LITERAL( |
"green.png"))); |
} |
TEST_F(LayerTreeHostReadbackPixelTest, ReadbackRootLayer_GL_Bitmap) { |
- use_gl_ = true; |
- force_readback_as_bitmap_ = true; |
- |
scoped_refptr<SolidColorLayer> background = CreateSolidColorLayer( |
gfx::Rect(200, 200), SK_ColorWHITE); |
@@ -101,15 +104,13 @@ TEST_F(LayerTreeHostReadbackPixelTest, ReadbackRootLayer_GL_Bitmap) { |
gfx::Rect(200, 200), SK_ColorGREEN); |
background->AddChild(green); |
- RunPixelTest(background, |
+ RunPixelTest(GL_WITH_BITMAP, |
+ background, |
base::FilePath(FILE_PATH_LITERAL( |
"green.png"))); |
} |
TEST_F(LayerTreeHostReadbackPixelTest, ReadbackRootLayer_GL) { |
- use_gl_ = true; |
- force_readback_as_bitmap_ = false; |
- |
scoped_refptr<SolidColorLayer> background = CreateSolidColorLayer( |
gfx::Rect(200, 200), SK_ColorWHITE); |
@@ -117,16 +118,14 @@ TEST_F(LayerTreeHostReadbackPixelTest, ReadbackRootLayer_GL) { |
gfx::Rect(200, 200), SK_ColorGREEN); |
background->AddChild(green); |
- RunPixelTest(background, |
+ RunPixelTest(GL_WITH_DEFAULT, |
+ background, |
base::FilePath(FILE_PATH_LITERAL( |
"green.png"))); |
} |
TEST_F(LayerTreeHostReadbackPixelTest, |
ReadbackRootLayerWithChild_Software) { |
- use_gl_ = false; |
- force_readback_as_bitmap_ = false; |
- |
scoped_refptr<SolidColorLayer> background = CreateSolidColorLayer( |
gfx::Rect(200, 200), SK_ColorWHITE); |
@@ -138,15 +137,13 @@ TEST_F(LayerTreeHostReadbackPixelTest, |
gfx::Rect(150, 150, 50, 50), SK_ColorBLUE); |
green->AddChild(blue); |
- RunPixelTest(background, |
+ RunPixelTest(SOFTWARE_WITH_DEFAULT, |
+ background, |
base::FilePath(FILE_PATH_LITERAL( |
"green_with_blue_corner.png"))); |
} |
TEST_F(LayerTreeHostReadbackPixelTest, ReadbackRootLayerWithChild_GL_Bitmap) { |
- use_gl_ = true; |
- force_readback_as_bitmap_ = true; |
- |
scoped_refptr<SolidColorLayer> background = CreateSolidColorLayer( |
gfx::Rect(200, 200), SK_ColorWHITE); |
@@ -158,15 +155,13 @@ TEST_F(LayerTreeHostReadbackPixelTest, ReadbackRootLayerWithChild_GL_Bitmap) { |
gfx::Rect(150, 150, 50, 50), SK_ColorBLUE); |
green->AddChild(blue); |
- RunPixelTest(background, |
+ RunPixelTest(GL_WITH_BITMAP, |
+ background, |
base::FilePath(FILE_PATH_LITERAL( |
"green_with_blue_corner.png"))); |
} |
TEST_F(LayerTreeHostReadbackPixelTest, ReadbackRootLayerWithChild_GL) { |
- use_gl_ = true; |
- force_readback_as_bitmap_ = false; |
- |
scoped_refptr<SolidColorLayer> background = CreateSolidColorLayer( |
gfx::Rect(200, 200), SK_ColorWHITE); |
@@ -178,15 +173,13 @@ TEST_F(LayerTreeHostReadbackPixelTest, ReadbackRootLayerWithChild_GL) { |
gfx::Rect(150, 150, 50, 50), SK_ColorBLUE); |
green->AddChild(blue); |
- RunPixelTest(background, |
+ RunPixelTest(GL_WITH_DEFAULT, |
+ background, |
base::FilePath(FILE_PATH_LITERAL( |
"green_with_blue_corner.png"))); |
} |
TEST_F(LayerTreeHostReadbackPixelTest, ReadbackNonRootLayer_Software) { |
- use_gl_ = false; |
- force_readback_as_bitmap_ = false; |
- |
scoped_refptr<SolidColorLayer> background = CreateSolidColorLayer( |
gfx::Rect(200, 200), SK_ColorWHITE); |
@@ -194,16 +187,14 @@ TEST_F(LayerTreeHostReadbackPixelTest, ReadbackNonRootLayer_Software) { |
gfx::Rect(200, 200), SK_ColorGREEN); |
background->AddChild(green); |
- RunPixelTestWithReadbackTarget(background, |
+ RunPixelTestWithReadbackTarget(SOFTWARE_WITH_DEFAULT, |
+ background, |
green.get(), |
base::FilePath(FILE_PATH_LITERAL( |
"green.png"))); |
} |
TEST_F(LayerTreeHostReadbackPixelTest, ReadbackNonRootLayer_GL_Bitmap) { |
- use_gl_ = true; |
- force_readback_as_bitmap_ = true; |
- |
scoped_refptr<SolidColorLayer> background = CreateSolidColorLayer( |
gfx::Rect(200, 200), SK_ColorWHITE); |
@@ -211,16 +202,14 @@ TEST_F(LayerTreeHostReadbackPixelTest, ReadbackNonRootLayer_GL_Bitmap) { |
gfx::Rect(200, 200), SK_ColorGREEN); |
background->AddChild(green); |
- RunPixelTestWithReadbackTarget(background, |
+ RunPixelTestWithReadbackTarget(GL_WITH_BITMAP, |
+ background, |
green.get(), |
base::FilePath(FILE_PATH_LITERAL( |
"green.png"))); |
} |
TEST_F(LayerTreeHostReadbackPixelTest, ReadbackNonRootLayer_GL) { |
- use_gl_ = true; |
- force_readback_as_bitmap_ = false; |
- |
scoped_refptr<SolidColorLayer> background = CreateSolidColorLayer( |
gfx::Rect(200, 200), SK_ColorWHITE); |
@@ -228,7 +217,8 @@ TEST_F(LayerTreeHostReadbackPixelTest, ReadbackNonRootLayer_GL) { |
gfx::Rect(200, 200), SK_ColorGREEN); |
background->AddChild(green); |
- RunPixelTestWithReadbackTarget(background, |
+ RunPixelTestWithReadbackTarget(GL_WITH_DEFAULT, |
+ background, |
green.get(), |
base::FilePath(FILE_PATH_LITERAL( |
"green.png"))); |
@@ -236,9 +226,6 @@ TEST_F(LayerTreeHostReadbackPixelTest, ReadbackNonRootLayer_GL) { |
TEST_F(LayerTreeHostReadbackPixelTest, |
ReadbackSmallNonRootLayer_Software) { |
- use_gl_ = false; |
- force_readback_as_bitmap_ = false; |
- |
scoped_refptr<SolidColorLayer> background = CreateSolidColorLayer( |
gfx::Rect(200, 200), SK_ColorWHITE); |
@@ -246,16 +233,14 @@ TEST_F(LayerTreeHostReadbackPixelTest, |
gfx::Rect(100, 100, 100, 100), SK_ColorGREEN); |
background->AddChild(green); |
- RunPixelTestWithReadbackTarget(background, |
+ RunPixelTestWithReadbackTarget(SOFTWARE_WITH_DEFAULT, |
+ background, |
green.get(), |
base::FilePath(FILE_PATH_LITERAL( |
"green_small.png"))); |
} |
TEST_F(LayerTreeHostReadbackPixelTest, ReadbackSmallNonRootLayer_GL_Bitmap) { |
- use_gl_ = true; |
- force_readback_as_bitmap_ = true; |
- |
scoped_refptr<SolidColorLayer> background = CreateSolidColorLayer( |
gfx::Rect(200, 200), SK_ColorWHITE); |
@@ -263,16 +248,14 @@ TEST_F(LayerTreeHostReadbackPixelTest, ReadbackSmallNonRootLayer_GL_Bitmap) { |
gfx::Rect(100, 100, 100, 100), SK_ColorGREEN); |
background->AddChild(green); |
- RunPixelTestWithReadbackTarget(background, |
+ RunPixelTestWithReadbackTarget(GL_WITH_BITMAP, |
+ background, |
green.get(), |
base::FilePath(FILE_PATH_LITERAL( |
"green_small.png"))); |
} |
TEST_F(LayerTreeHostReadbackPixelTest, ReadbackSmallNonRootLayer_GL) { |
- use_gl_ = true; |
- force_readback_as_bitmap_ = false; |
- |
scoped_refptr<SolidColorLayer> background = CreateSolidColorLayer( |
gfx::Rect(200, 200), SK_ColorWHITE); |
@@ -280,7 +263,8 @@ TEST_F(LayerTreeHostReadbackPixelTest, ReadbackSmallNonRootLayer_GL) { |
gfx::Rect(100, 100, 100, 100), SK_ColorGREEN); |
background->AddChild(green); |
- RunPixelTestWithReadbackTarget(background, |
+ RunPixelTestWithReadbackTarget(GL_WITH_DEFAULT, |
+ background, |
green.get(), |
base::FilePath(FILE_PATH_LITERAL( |
"green_small.png"))); |
@@ -288,9 +272,6 @@ TEST_F(LayerTreeHostReadbackPixelTest, ReadbackSmallNonRootLayer_GL) { |
TEST_F(LayerTreeHostReadbackPixelTest, |
ReadbackSmallNonRootLayerWithChild_Software) { |
- use_gl_ = false; |
- force_readback_as_bitmap_ = false; |
- |
scoped_refptr<SolidColorLayer> background = CreateSolidColorLayer( |
gfx::Rect(200, 200), SK_ColorWHITE); |
@@ -302,7 +283,8 @@ TEST_F(LayerTreeHostReadbackPixelTest, |
gfx::Rect(50, 50, 50, 50), SK_ColorBLUE); |
green->AddChild(blue); |
- RunPixelTestWithReadbackTarget(background, |
+ RunPixelTestWithReadbackTarget(SOFTWARE_WITH_DEFAULT, |
+ background, |
green.get(), |
base::FilePath(FILE_PATH_LITERAL( |
"green_small_with_blue_corner.png"))); |
@@ -310,9 +292,6 @@ TEST_F(LayerTreeHostReadbackPixelTest, |
TEST_F(LayerTreeHostReadbackPixelTest, |
ReadbackSmallNonRootLayerWithChild_GL_Bitmap) { |
- use_gl_ = true; |
- force_readback_as_bitmap_ = true; |
- |
scoped_refptr<SolidColorLayer> background = CreateSolidColorLayer( |
gfx::Rect(200, 200), SK_ColorWHITE); |
@@ -324,16 +303,14 @@ TEST_F(LayerTreeHostReadbackPixelTest, |
gfx::Rect(50, 50, 50, 50), SK_ColorBLUE); |
green->AddChild(blue); |
- RunPixelTestWithReadbackTarget(background, |
+ RunPixelTestWithReadbackTarget(GL_WITH_BITMAP, |
+ background, |
green.get(), |
base::FilePath(FILE_PATH_LITERAL( |
"green_small_with_blue_corner.png"))); |
} |
TEST_F(LayerTreeHostReadbackPixelTest, ReadbackSmallNonRootLayerWithChild_GL) { |
- use_gl_ = true; |
- force_readback_as_bitmap_ = false; |
- |
scoped_refptr<SolidColorLayer> background = CreateSolidColorLayer( |
gfx::Rect(200, 200), SK_ColorWHITE); |
@@ -345,7 +322,493 @@ TEST_F(LayerTreeHostReadbackPixelTest, ReadbackSmallNonRootLayerWithChild_GL) { |
gfx::Rect(50, 50, 50, 50), SK_ColorBLUE); |
green->AddChild(blue); |
- RunPixelTestWithReadbackTarget(background, |
+ RunPixelTestWithReadbackTarget(GL_WITH_DEFAULT, |
+ background, |
+ green.get(), |
+ base::FilePath(FILE_PATH_LITERAL( |
+ "green_small_with_blue_corner.png"))); |
+} |
+ |
+TEST_F(LayerTreeHostReadbackPixelTest, ReadbackSubrect_Software) { |
+ scoped_refptr<SolidColorLayer> background = CreateSolidColorLayer( |
+ gfx::Rect(200, 200), SK_ColorWHITE); |
+ |
+ scoped_refptr<SolidColorLayer> green = CreateSolidColorLayer( |
+ gfx::Rect(200, 200), SK_ColorGREEN); |
+ background->AddChild(green); |
+ |
+ scoped_refptr<SolidColorLayer> blue = CreateSolidColorLayer( |
+ gfx::Rect(100, 100, 50, 50), SK_ColorBLUE); |
+ green->AddChild(blue); |
+ |
+ // Grab the middle of the root layer. |
+ copy_subrect_ = gfx::Rect(50, 50, 100, 100); |
+ |
+ RunPixelTest(SOFTWARE_WITH_DEFAULT, |
+ background, |
+ base::FilePath(FILE_PATH_LITERAL( |
+ "green_small_with_blue_corner.png"))); |
+} |
+ |
+TEST_F(LayerTreeHostReadbackPixelTest, ReadbackSubrect_GL_Bitmap) { |
+ scoped_refptr<SolidColorLayer> background = CreateSolidColorLayer( |
+ gfx::Rect(200, 200), SK_ColorWHITE); |
+ |
+ scoped_refptr<SolidColorLayer> green = CreateSolidColorLayer( |
+ gfx::Rect(200, 200), SK_ColorGREEN); |
+ background->AddChild(green); |
+ |
+ scoped_refptr<SolidColorLayer> blue = CreateSolidColorLayer( |
+ gfx::Rect(100, 100, 50, 50), SK_ColorBLUE); |
+ green->AddChild(blue); |
+ |
+ // Grab the middle of the root layer. |
+ copy_subrect_ = gfx::Rect(50, 50, 100, 100); |
+ |
+ RunPixelTest(GL_WITH_BITMAP, |
+ background, |
+ base::FilePath(FILE_PATH_LITERAL( |
+ "green_small_with_blue_corner.png"))); |
+} |
+ |
+TEST_F(LayerTreeHostReadbackPixelTest, ReadbackSubrect_GL) { |
+ scoped_refptr<SolidColorLayer> background = CreateSolidColorLayer( |
+ gfx::Rect(200, 200), SK_ColorWHITE); |
+ |
+ scoped_refptr<SolidColorLayer> green = CreateSolidColorLayer( |
+ gfx::Rect(200, 200), SK_ColorGREEN); |
+ background->AddChild(green); |
+ |
+ scoped_refptr<SolidColorLayer> blue = CreateSolidColorLayer( |
+ gfx::Rect(100, 100, 50, 50), SK_ColorBLUE); |
+ green->AddChild(blue); |
+ |
+ // Grab the middle of the root layer. |
+ copy_subrect_ = gfx::Rect(50, 50, 100, 100); |
+ |
+ RunPixelTest(GL_WITH_DEFAULT, |
+ background, |
+ base::FilePath(FILE_PATH_LITERAL( |
+ "green_small_with_blue_corner.png"))); |
+} |
+ |
+TEST_F(LayerTreeHostReadbackPixelTest, ReadbackNonRootLayerSubrect_Software) { |
+ scoped_refptr<SolidColorLayer> background = CreateSolidColorLayer( |
+ gfx::Rect(200, 200), SK_ColorWHITE); |
+ |
+ scoped_refptr<SolidColorLayer> green = CreateSolidColorLayer( |
+ gfx::Rect(25, 25, 150, 150), SK_ColorGREEN); |
+ background->AddChild(green); |
+ |
+ scoped_refptr<SolidColorLayer> blue = CreateSolidColorLayer( |
+ gfx::Rect(75, 75, 50, 50), SK_ColorBLUE); |
+ green->AddChild(blue); |
+ |
+ // Grab the middle of the green layer. |
+ copy_subrect_ = gfx::Rect(25, 25, 100, 100); |
+ |
+ RunPixelTestWithReadbackTarget(SOFTWARE_WITH_DEFAULT, |
+ background, |
+ green.get(), |
+ base::FilePath(FILE_PATH_LITERAL( |
+ "green_small_with_blue_corner.png"))); |
+} |
+ |
+TEST_F(LayerTreeHostReadbackPixelTest, ReadbackNonRootLayerSubrect_GL_Bitmap) { |
+ scoped_refptr<SolidColorLayer> background = CreateSolidColorLayer( |
+ gfx::Rect(200, 200), SK_ColorWHITE); |
+ |
+ scoped_refptr<SolidColorLayer> green = CreateSolidColorLayer( |
+ gfx::Rect(25, 25, 150, 150), SK_ColorGREEN); |
+ background->AddChild(green); |
+ |
+ scoped_refptr<SolidColorLayer> blue = CreateSolidColorLayer( |
+ gfx::Rect(75, 75, 50, 50), SK_ColorBLUE); |
+ green->AddChild(blue); |
+ |
+ // Grab the middle of the green layer. |
+ copy_subrect_ = gfx::Rect(25, 25, 100, 100); |
+ |
+ RunPixelTestWithReadbackTarget(GL_WITH_BITMAP, |
+ background, |
+ green.get(), |
+ base::FilePath(FILE_PATH_LITERAL( |
+ "green_small_with_blue_corner.png"))); |
+} |
+ |
+TEST_F(LayerTreeHostReadbackPixelTest, ReadbackNonRootLayerSubrect_GL) { |
+ scoped_refptr<SolidColorLayer> background = CreateSolidColorLayer( |
+ gfx::Rect(200, 200), SK_ColorWHITE); |
+ |
+ scoped_refptr<SolidColorLayer> green = CreateSolidColorLayer( |
+ gfx::Rect(25, 25, 150, 150), SK_ColorGREEN); |
+ background->AddChild(green); |
+ |
+ scoped_refptr<SolidColorLayer> blue = CreateSolidColorLayer( |
+ gfx::Rect(75, 75, 50, 50), SK_ColorBLUE); |
+ green->AddChild(blue); |
+ |
+ // Grab the middle of the green layer. |
+ copy_subrect_ = gfx::Rect(25, 25, 100, 100); |
+ |
+ RunPixelTestWithReadbackTarget(GL_WITH_DEFAULT, |
+ background, |
+ green.get(), |
+ base::FilePath(FILE_PATH_LITERAL( |
+ "green_small_with_blue_corner.png"))); |
+} |
+ |
+class LayerTreeHostReadbackDeviceScalePixelTest |
+ : public LayerTreeHostReadbackPixelTest { |
+ protected: |
+ LayerTreeHostReadbackDeviceScalePixelTest() |
+ : device_scale_factor_(1.f), |
+ white_client_(SK_ColorWHITE), |
+ green_client_(SK_ColorGREEN), |
+ blue_client_(SK_ColorBLUE) {} |
+ |
+ virtual void InitializeSettings(LayerTreeSettings* settings) OVERRIDE { |
+ // Cause the device scale factor to be inherited by contents scales. |
+ 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* background_impl = root_impl->children()[0]; |
+ EXPECT_EQ(device_scale_factor_, background_impl->contents_scale_x()); |
+ EXPECT_EQ(device_scale_factor_, background_impl->contents_scale_y()); |
+ |
+ LayerImpl* green_impl = background_impl->children()[0]; |
+ EXPECT_EQ(device_scale_factor_, green_impl->contents_scale_x()); |
+ EXPECT_EQ(device_scale_factor_, green_impl->contents_scale_y()); |
+ |
+ LayerImpl* blue_impl = green_impl->children()[0]; |
+ EXPECT_EQ(device_scale_factor_, blue_impl->contents_scale_x()); |
+ EXPECT_EQ(device_scale_factor_, blue_impl->contents_scale_y()); |
+ } |
+ |
+ float device_scale_factor_; |
+ SolidColorContentLayerClient white_client_; |
+ SolidColorContentLayerClient green_client_; |
+ SolidColorContentLayerClient blue_client_; |
+}; |
+ |
+TEST_F(LayerTreeHostReadbackDeviceScalePixelTest, |
+ ReadbackSubrect_Software) { |
+ scoped_refptr<ContentLayer> background = ContentLayer::Create(&white_client_); |
+ background->SetAnchorPoint(gfx::PointF()); |
+ background->SetBounds(gfx::Size(100, 100)); |
+ background->SetIsDrawable(true); |
+ |
+ scoped_refptr<ContentLayer> green = ContentLayer::Create(&green_client_); |
+ green->SetAnchorPoint(gfx::PointF()); |
+ green->SetBounds(gfx::Size(100, 100)); |
+ green->SetIsDrawable(true); |
+ background->AddChild(green); |
+ |
+ scoped_refptr<ContentLayer> blue = ContentLayer::Create(&blue_client_); |
+ blue->SetAnchorPoint(gfx::PointF()); |
+ blue->SetPosition(gfx::Point(50, 50)); |
+ blue->SetBounds(gfx::Size(25, 25)); |
+ blue->SetIsDrawable(true); |
+ green->AddChild(blue); |
+ |
+ // Grab the middle of the root layer. |
+ copy_subrect_ = gfx::Rect(25, 25, 50, 50); |
+ device_scale_factor_ = 2.f; |
+ |
+ RunPixelTest(SOFTWARE_WITH_DEFAULT, |
+ background, |
+ base::FilePath(FILE_PATH_LITERAL( |
+ "green_small_with_blue_corner.png"))); |
+} |
+ |
+TEST_F(LayerTreeHostReadbackDeviceScalePixelTest, |
+ ReadbackSubrect_GL) { |
+ scoped_refptr<ContentLayer> background = ContentLayer::Create(&white_client_); |
+ background->SetAnchorPoint(gfx::PointF()); |
+ background->SetBounds(gfx::Size(100, 100)); |
+ background->SetIsDrawable(true); |
+ |
+ scoped_refptr<ContentLayer> green = ContentLayer::Create(&green_client_); |
+ green->SetAnchorPoint(gfx::PointF()); |
+ green->SetBounds(gfx::Size(100, 100)); |
+ green->SetIsDrawable(true); |
+ background->AddChild(green); |
+ |
+ scoped_refptr<ContentLayer> blue = ContentLayer::Create(&blue_client_); |
+ blue->SetAnchorPoint(gfx::PointF()); |
+ blue->SetPosition(gfx::Point(50, 50)); |
+ blue->SetBounds(gfx::Size(25, 25)); |
+ blue->SetIsDrawable(true); |
+ green->AddChild(blue); |
+ |
+ // Grab the middle of the root layer. |
+ copy_subrect_ = gfx::Rect(25, 25, 50, 50); |
+ device_scale_factor_ = 2.f; |
+ |
+ RunPixelTest(GL_WITH_DEFAULT, |
+ background, |
+ base::FilePath(FILE_PATH_LITERAL( |
+ "green_small_with_blue_corner.png"))); |
+} |
+ |
+TEST_F(LayerTreeHostReadbackDeviceScalePixelTest, |
+ ReadbackNonRootLayerSubrect_Software) { |
+ scoped_refptr<ContentLayer> background = ContentLayer::Create(&white_client_); |
+ background->SetAnchorPoint(gfx::PointF()); |
+ background->SetBounds(gfx::Size(100, 100)); |
+ background->SetIsDrawable(true); |
+ |
+ scoped_refptr<ContentLayer> green = ContentLayer::Create(&green_client_); |
+ green->SetAnchorPoint(gfx::PointF()); |
+ green->SetPosition(gfx::Point(10, 20)); |
+ green->SetBounds(gfx::Size(90, 80)); |
+ green->SetIsDrawable(true); |
+ background->AddChild(green); |
+ |
+ scoped_refptr<ContentLayer> blue = ContentLayer::Create(&blue_client_); |
+ blue->SetAnchorPoint(gfx::PointF()); |
+ blue->SetPosition(gfx::Point(50, 50)); |
+ blue->SetBounds(gfx::Size(25, 25)); |
+ blue->SetIsDrawable(true); |
+ green->AddChild(blue); |
+ |
+ // Grab the green layer's content with blue in the bottom right. |
+ copy_subrect_ = gfx::Rect(25, 25, 50, 50); |
+ device_scale_factor_ = 2.f; |
+ |
+ RunPixelTestWithReadbackTarget(SOFTWARE_WITH_DEFAULT, |
+ background, |
+ green.get(), |
+ base::FilePath(FILE_PATH_LITERAL( |
+ "green_small_with_blue_corner.png"))); |
+} |
+ |
+TEST_F(LayerTreeHostReadbackDeviceScalePixelTest, |
+ ReadbackNonRootLayerSubrect_GL) { |
+ scoped_refptr<ContentLayer> background = ContentLayer::Create(&white_client_); |
+ background->SetAnchorPoint(gfx::PointF()); |
+ background->SetBounds(gfx::Size(100, 100)); |
+ background->SetIsDrawable(true); |
+ |
+ scoped_refptr<ContentLayer> green = ContentLayer::Create(&green_client_); |
+ green->SetAnchorPoint(gfx::PointF()); |
+ green->SetPosition(gfx::Point(10, 20)); |
+ green->SetBounds(gfx::Size(90, 80)); |
+ green->SetIsDrawable(true); |
+ background->AddChild(green); |
+ |
+ scoped_refptr<ContentLayer> blue = ContentLayer::Create(&blue_client_); |
+ blue->SetAnchorPoint(gfx::PointF()); |
+ blue->SetPosition(gfx::Point(50, 50)); |
+ blue->SetBounds(gfx::Size(25, 25)); |
+ blue->SetIsDrawable(true); |
+ green->AddChild(blue); |
+ |
+ // Grab the green layer's content with blue in the bottom right. |
+ copy_subrect_ = gfx::Rect(25, 25, 50, 50); |
+ device_scale_factor_ = 2.f; |
+ |
+ RunPixelTestWithReadbackTarget(GL_WITH_DEFAULT, |
+ background, |
+ green.get(), |
+ base::FilePath(FILE_PATH_LITERAL( |
+ "green_small_with_blue_corner.png"))); |
+} |
+ |
+class LayerTreeHostReadbackViaCompositeAndReadbackPixelTest |
+ : public LayerTreePixelTest { |
+ protected: |
+ LayerTreeHostReadbackViaCompositeAndReadbackPixelTest() |
+ : device_scale_factor_(1.f), |
+ white_client_(SK_ColorWHITE), |
+ green_client_(SK_ColorGREEN), |
+ blue_client_(SK_ColorBLUE) {} |
+ |
+ virtual void InitializeSettings(LayerTreeSettings* settings) OVERRIDE { |
+ // Cause the device scale factor to be inherited by contents scales. |
+ settings->layer_transforms_should_scale_layer_contents = true; |
+ } |
+ |
+ virtual void SetupTree() OVERRIDE { |
+ layer_tree_host()->SetDeviceScaleFactor(device_scale_factor_); |
+ LayerTreePixelTest::SetupTree(); |
+ } |
+ |
+ virtual void BeginTest() OVERRIDE { |
+ EXPECT_EQ(device_scale_factor_, layer_tree_host()->device_scale_factor()); |
+ if (TestEnded()) |
+ return; |
+ |
+ gfx::Rect device_viewport_copy_rect( |
+ layer_tree_host()->device_viewport_size()); |
+ if (!device_viewport_copy_subrect_.IsEmpty()) |
+ device_viewport_copy_rect.Intersect(device_viewport_copy_subrect_); |
+ |
+ scoped_ptr<SkBitmap> bitmap(new SkBitmap); |
+ bitmap->setConfig(SkBitmap::kARGB_8888_Config, |
+ device_viewport_copy_rect.width(), |
+ device_viewport_copy_rect.height()); |
+ bitmap->allocPixels(); |
+ { |
+ scoped_ptr<SkAutoLockPixels> lock(new SkAutoLockPixels(*bitmap)); |
+ layer_tree_host()->CompositeAndReadback(bitmap->getPixels(), |
+ device_viewport_copy_rect); |
+ } |
+ |
+ result_bitmap_ = bitmap.Pass(); |
+ EndTest(); |
+ } |
+ |
+ virtual void DrawLayersOnThread(LayerTreeHostImpl* host_impl) OVERRIDE { |
+ LayerImpl* root_impl = host_impl->active_tree()->root_layer(); |
+ |
+ LayerImpl* background_impl = root_impl->children()[0]; |
+ EXPECT_EQ(device_scale_factor_, background_impl->contents_scale_x()); |
+ EXPECT_EQ(device_scale_factor_, background_impl->contents_scale_y()); |
+ |
+ LayerImpl* green_impl = background_impl->children()[0]; |
+ EXPECT_EQ(device_scale_factor_, green_impl->contents_scale_x()); |
+ EXPECT_EQ(device_scale_factor_, green_impl->contents_scale_y()); |
+ |
+ LayerImpl* blue_impl = green_impl->children()[0]; |
+ EXPECT_EQ(device_scale_factor_, blue_impl->contents_scale_x()); |
+ EXPECT_EQ(device_scale_factor_, blue_impl->contents_scale_y()); |
+ } |
+ |
+ gfx::Rect device_viewport_copy_subrect_; |
+ float device_scale_factor_; |
+ SolidColorContentLayerClient white_client_; |
+ SolidColorContentLayerClient green_client_; |
+ SolidColorContentLayerClient blue_client_; |
+}; |
+ |
+TEST_F(LayerTreeHostReadbackViaCompositeAndReadbackPixelTest, |
+ CompositeAndReadback_Software_1) { |
+ scoped_refptr<ContentLayer> background = ContentLayer::Create(&white_client_); |
+ background->SetAnchorPoint(gfx::PointF()); |
+ background->SetBounds(gfx::Size(200, 200)); |
+ background->SetIsDrawable(true); |
+ |
+ scoped_refptr<ContentLayer> green = ContentLayer::Create(&green_client_); |
+ green->SetAnchorPoint(gfx::PointF()); |
+ green->SetBounds(gfx::Size(200, 200)); |
+ green->SetIsDrawable(true); |
+ background->AddChild(green); |
+ |
+ scoped_refptr<ContentLayer> blue = ContentLayer::Create(&blue_client_); |
+ blue->SetAnchorPoint(gfx::PointF()); |
+ blue->SetPosition(gfx::Point(100, 100)); |
+ blue->SetBounds(gfx::Size(50, 50)); |
+ blue->SetIsDrawable(true); |
+ green->AddChild(blue); |
+ |
+ // Grab the middle of the device viewport. |
+ device_viewport_copy_subrect_ = gfx::Rect(50, 50, 100, 100); |
+ device_scale_factor_ = 1.f; |
+ |
+ RunPixelTestWithReadbackTarget(SOFTWARE_WITH_DEFAULT, |
+ background, |
+ green.get(), |
+ base::FilePath(FILE_PATH_LITERAL( |
+ "green_small_with_blue_corner.png"))); |
+} |
+ |
+TEST_F(LayerTreeHostReadbackViaCompositeAndReadbackPixelTest, |
+ CompositeAndReadback_Software_2) { |
+ scoped_refptr<ContentLayer> background = ContentLayer::Create(&white_client_); |
+ background->SetAnchorPoint(gfx::PointF()); |
+ background->SetBounds(gfx::Size(100, 100)); |
+ background->SetIsDrawable(true); |
+ |
+ scoped_refptr<ContentLayer> green = ContentLayer::Create(&green_client_); |
+ green->SetAnchorPoint(gfx::PointF()); |
+ green->SetBounds(gfx::Size(100, 100)); |
+ green->SetIsDrawable(true); |
+ background->AddChild(green); |
+ |
+ scoped_refptr<ContentLayer> blue = ContentLayer::Create(&blue_client_); |
+ blue->SetAnchorPoint(gfx::PointF()); |
+ blue->SetPosition(gfx::Point(50, 50)); |
+ blue->SetBounds(gfx::Size(25, 25)); |
+ blue->SetIsDrawable(true); |
+ green->AddChild(blue); |
+ |
+ // Grab the middle of the device viewport. |
+ device_viewport_copy_subrect_ = gfx::Rect(50, 50, 100, 100); |
+ device_scale_factor_ = 2.f; |
+ |
+ RunPixelTestWithReadbackTarget(SOFTWARE_WITH_DEFAULT, |
+ background, |
+ green.get(), |
+ base::FilePath(FILE_PATH_LITERAL( |
+ "green_small_with_blue_corner.png"))); |
+} |
+ |
+TEST_F(LayerTreeHostReadbackViaCompositeAndReadbackPixelTest, |
+ CompositeAndReadback_GL_1) { |
+ scoped_refptr<ContentLayer> background = ContentLayer::Create(&white_client_); |
+ background->SetAnchorPoint(gfx::PointF()); |
+ background->SetBounds(gfx::Size(200, 200)); |
+ background->SetIsDrawable(true); |
+ |
+ scoped_refptr<ContentLayer> green = ContentLayer::Create(&green_client_); |
+ green->SetAnchorPoint(gfx::PointF()); |
+ green->SetBounds(gfx::Size(200, 200)); |
+ green->SetIsDrawable(true); |
+ background->AddChild(green); |
+ |
+ scoped_refptr<ContentLayer> blue = ContentLayer::Create(&blue_client_); |
+ blue->SetAnchorPoint(gfx::PointF()); |
+ blue->SetPosition(gfx::Point(100, 100)); |
+ blue->SetBounds(gfx::Size(50, 50)); |
+ blue->SetIsDrawable(true); |
+ green->AddChild(blue); |
+ |
+ // Grab the middle of the device viewport. |
+ device_viewport_copy_subrect_ = gfx::Rect(50, 50, 100, 100); |
+ device_scale_factor_ = 1.f; |
+ |
+ RunPixelTestWithReadbackTarget(GL_WITH_DEFAULT, |
+ background, |
+ green.get(), |
+ base::FilePath(FILE_PATH_LITERAL( |
+ "green_small_with_blue_corner.png"))); |
+} |
+ |
+TEST_F(LayerTreeHostReadbackViaCompositeAndReadbackPixelTest, |
+ CompositeAndReadback_GL_2) { |
+ scoped_refptr<ContentLayer> background = ContentLayer::Create(&white_client_); |
+ background->SetAnchorPoint(gfx::PointF()); |
+ background->SetBounds(gfx::Size(100, 100)); |
+ background->SetIsDrawable(true); |
+ |
+ scoped_refptr<ContentLayer> green = ContentLayer::Create(&green_client_); |
+ green->SetAnchorPoint(gfx::PointF()); |
+ green->SetBounds(gfx::Size(100, 100)); |
+ green->SetIsDrawable(true); |
+ background->AddChild(green); |
+ |
+ scoped_refptr<ContentLayer> blue = ContentLayer::Create(&blue_client_); |
+ blue->SetAnchorPoint(gfx::PointF()); |
+ blue->SetPosition(gfx::Point(50, 50)); |
+ blue->SetBounds(gfx::Size(25, 25)); |
+ blue->SetIsDrawable(true); |
+ green->AddChild(blue); |
+ |
+ // Grab the middle of the device viewport. |
+ device_viewport_copy_subrect_ = gfx::Rect(50, 50, 100, 100); |
+ device_scale_factor_ = 2.f; |
+ |
+ RunPixelTestWithReadbackTarget(GL_WITH_DEFAULT, |
+ background, |
green.get(), |
base::FilePath(FILE_PATH_LITERAL( |
"green_small_with_blue_corner.png"))); |