| Index: cc/trees/layer_tree_host_unittest.cc
|
| diff --git a/cc/trees/layer_tree_host_unittest.cc b/cc/trees/layer_tree_host_unittest.cc
|
| index 46874cfde1fdd688498ebfb10d5ce59ff47b6be7..89563d8e871d90c47be1be034493b8816662ea3d 100644
|
| --- a/cc/trees/layer_tree_host_unittest.cc
|
| +++ b/cc/trees/layer_tree_host_unittest.cc
|
| @@ -1737,6 +1737,129 @@ class LayerTreeHostTestDeviceScaleFactorChange : public LayerTreeHostTest {
|
|
|
| SINGLE_AND_MULTI_THREAD_TEST_F(LayerTreeHostTestDeviceScaleFactorChange);
|
|
|
| +class LayerTreeHostTestDeviceColorSpaceChange : public LayerTreeHostTest {
|
| + public:
|
| + void SetupTree() override {
|
| + space1_ = gfx::ColorSpace::CreateXYZD50();
|
| + space2_ = gfx::ColorSpace::CreateSRGB();
|
| +
|
| + root_layer_ = Layer::Create();
|
| + root_layer_->SetBounds(gfx::Size(10, 20));
|
| +
|
| + child_layer_ = FakePictureLayer::Create(&client_);
|
| + child_layer_->SetBounds(gfx::Size(10, 10));
|
| + root_layer_->AddChild(child_layer_);
|
| +
|
| + layer_tree()->SetRootLayer(root_layer_);
|
| + layer_tree()->SetDeviceColorSpace(space1_);
|
| + LayerTreeHostTest::SetupTree();
|
| + client_.set_bounds(root_layer_->bounds());
|
| + }
|
| +
|
| + void BeginTest() override { PostSetNeedsCommitToMainThread(); }
|
| +
|
| + DrawResult PrepareToDrawOnThread(LayerTreeHostImpl* host_impl,
|
| + LayerTreeHostImpl::FrameData* frame_data,
|
| + DrawResult draw_result) override {
|
| + EXPECT_EQ(DRAW_SUCCESS, draw_result);
|
| +
|
| + int source_frame = host_impl->active_tree()->source_frame_number();
|
| + switch (source_frame) {
|
| + case 0:
|
| + // The first frame will have full damage, and should be in the initial
|
| + // color space.
|
| + EXPECT_FALSE(frame_data->has_no_damage);
|
| + EXPECT_TRUE(space1_ == host_impl->active_tree()->device_color_space());
|
| + break;
|
| + case 1:
|
| + // Empty commit.
|
| + EXPECT_TRUE(frame_data->has_no_damage);
|
| + EXPECT_TRUE(space1_ == host_impl->active_tree()->device_color_space());
|
| + break;
|
| + case 2:
|
| + // The change from space1 to space2 should cause full damage.
|
| + EXPECT_FALSE(frame_data->has_no_damage);
|
| + EXPECT_TRUE(space2_ == host_impl->active_tree()->device_color_space());
|
| + break;
|
| + case 3:
|
| + // Empty commit with the color space set to space2 redundantly.
|
| + EXPECT_TRUE(frame_data->has_no_damage);
|
| + EXPECT_TRUE(space2_ == host_impl->active_tree()->device_color_space());
|
| + break;
|
| + case 4:
|
| + // The change from space2 to space1 should cause full damage.
|
| + EXPECT_FALSE(frame_data->has_no_damage);
|
| + EXPECT_TRUE(space1_ == host_impl->active_tree()->device_color_space());
|
| + break;
|
| + case 5:
|
| + // Empty commit.
|
| + EXPECT_TRUE(frame_data->has_no_damage);
|
| + EXPECT_TRUE(space1_ == host_impl->active_tree()->device_color_space());
|
| + EndTest();
|
| + break;
|
| + default:
|
| + NOTREACHED();
|
| + break;
|
| + }
|
| +
|
| + if (!frame_data->has_no_damage) {
|
| + gfx::Rect root_damage_rect =
|
| + frame_data->render_passes.back()->damage_rect;
|
| + EXPECT_EQ(
|
| + gfx::Rect(
|
| + host_impl->active_tree()->root_layer_for_testing()->bounds()),
|
| + root_damage_rect);
|
| + }
|
| +
|
| + return draw_result;
|
| + }
|
| +
|
| + void DidCommit() override {
|
| + switch (layer_tree_host()->SourceFrameNumber()) {
|
| + case 1:
|
| + PostSetNeedsCommitToMainThread();
|
| + break;
|
| + case 2:
|
| + EXPECT_FALSE(child_layer_->NeedsDisplayForTesting());
|
| + layer_tree()->SetDeviceColorSpace(space2_);
|
| + EXPECT_TRUE(child_layer_->NeedsDisplayForTesting());
|
| + break;
|
| + case 3:
|
| + // The redundant SetDeviceColorSpace should cause no commit and no
|
| + // damage. Force a commit for the test to continue.
|
| + layer_tree()->SetDeviceColorSpace(space2_);
|
| + PostSetNeedsCommitToMainThread();
|
| + EXPECT_FALSE(child_layer_->NeedsDisplayForTesting());
|
| + break;
|
| + case 4:
|
| + EXPECT_FALSE(child_layer_->NeedsDisplayForTesting());
|
| + layer_tree()->SetDeviceColorSpace(space1_);
|
| + EXPECT_TRUE(child_layer_->NeedsDisplayForTesting());
|
| + break;
|
| + case 5:
|
| + EXPECT_FALSE(child_layer_->NeedsDisplayForTesting());
|
| + PostSetNeedsCommitToMainThread();
|
| + break;
|
| + case 6:
|
| + break;
|
| + default:
|
| + NOTREACHED();
|
| + break;
|
| + }
|
| + }
|
| +
|
| + void AfterTest() override {}
|
| +
|
| + private:
|
| + gfx::ColorSpace space1_;
|
| + gfx::ColorSpace space2_;
|
| + FakeContentLayerClient client_;
|
| + scoped_refptr<Layer> root_layer_;
|
| + scoped_refptr<Layer> child_layer_;
|
| +};
|
| +
|
| +SINGLE_AND_MULTI_THREAD_TEST_F(LayerTreeHostTestDeviceColorSpaceChange);
|
| +
|
| class LayerTreeHostTestSetNextCommitForcesRedraw : public LayerTreeHostTest {
|
| public:
|
| LayerTreeHostTestSetNextCommitForcesRedraw()
|
|
|