| OLD | NEW |
| 1 // Copyright 2014 The Chromium Authors. All rights reserved. | 1 // Copyright 2014 The Chromium Authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 | 4 |
| 5 #include "base/message_loop/message_loop_proxy.h" | 5 #include "base/message_loop/message_loop_proxy.h" |
| 6 #include "cc/layers/solid_color_layer.h" | 6 #include "cc/layers/solid_color_layer.h" |
| 7 #include "cc/layers/surface_layer.h" | 7 #include "cc/layers/surface_layer.h" |
| 8 #include "cc/test/fake_impl_proxy.h" | 8 #include "cc/test/fake_impl_proxy.h" |
| 9 #include "cc/test/fake_layer_tree_host.h" | 9 #include "cc/test/fake_layer_tree_host.h" |
| 10 #include "cc/test/fake_layer_tree_host_client.h" | 10 #include "cc/test/fake_layer_tree_host_client.h" |
| (...skipping 47 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 58 // Check that one surface can be referenced by multiple LayerTreeHosts, and | 58 // Check that one surface can be referenced by multiple LayerTreeHosts, and |
| 59 // each will create its own SurfaceSequence that's satisfied on destruction. | 59 // each will create its own SurfaceSequence that's satisfied on destruction. |
| 60 TEST_F(SurfaceLayerTest, MultipleFramesOneSurface) { | 60 TEST_F(SurfaceLayerTest, MultipleFramesOneSurface) { |
| 61 SurfaceSequence blank_change; // Receives sequence if commit doesn't happen. | 61 SurfaceSequence blank_change; // Receives sequence if commit doesn't happen. |
| 62 | 62 |
| 63 SurfaceId required_id; | 63 SurfaceId required_id; |
| 64 std::set<SurfaceSequence> required_seq; | 64 std::set<SurfaceSequence> required_seq; |
| 65 scoped_refptr<SurfaceLayer> layer(SurfaceLayer::Create( | 65 scoped_refptr<SurfaceLayer> layer(SurfaceLayer::Create( |
| 66 base::Bind(&SatisfyCallback, &blank_change), | 66 base::Bind(&SatisfyCallback, &blank_change), |
| 67 base::Bind(&RequireCallback, &required_id, &required_seq))); | 67 base::Bind(&RequireCallback, &required_id, &required_seq))); |
| 68 layer->SetSurfaceId(SurfaceId(1), gfx::Size(1, 1)); | 68 layer->SetSurfaceId(SurfaceId(1), 1.f, gfx::Size(1, 1)); |
| 69 layer_tree_host_->set_surface_id_namespace(1); | 69 layer_tree_host_->set_surface_id_namespace(1); |
| 70 layer_tree_host_->SetRootLayer(layer); | 70 layer_tree_host_->SetRootLayer(layer); |
| 71 | 71 |
| 72 scoped_ptr<FakeLayerTreeHost> layer_tree_host2 = | 72 scoped_ptr<FakeLayerTreeHost> layer_tree_host2 = |
| 73 FakeLayerTreeHost::Create(&fake_client_); | 73 FakeLayerTreeHost::Create(&fake_client_); |
| 74 scoped_refptr<SurfaceLayer> layer2(SurfaceLayer::Create( | 74 scoped_refptr<SurfaceLayer> layer2(SurfaceLayer::Create( |
| 75 base::Bind(&SatisfyCallback, &blank_change), | 75 base::Bind(&SatisfyCallback, &blank_change), |
| 76 base::Bind(&RequireCallback, &required_id, &required_seq))); | 76 base::Bind(&RequireCallback, &required_id, &required_seq))); |
| 77 layer2->SetSurfaceId(SurfaceId(1), gfx::Size(1, 1)); | 77 layer2->SetSurfaceId(SurfaceId(1), 1.f, gfx::Size(1, 1)); |
| 78 layer_tree_host2->set_surface_id_namespace(2); | 78 layer_tree_host2->set_surface_id_namespace(2); |
| 79 layer_tree_host2->SetRootLayer(layer2); | 79 layer_tree_host2->SetRootLayer(layer2); |
| 80 | 80 |
| 81 // Layers haven't been removed, so no sequence should be satisfied. | 81 // Layers haven't been removed, so no sequence should be satisfied. |
| 82 EXPECT_TRUE(blank_change.is_null()); | 82 EXPECT_TRUE(blank_change.is_null()); |
| 83 | 83 |
| 84 SurfaceSequence expected1(1u, 1u); | 84 SurfaceSequence expected1(1u, 1u); |
| 85 SurfaceSequence expected2(2u, 1u); | 85 SurfaceSequence expected2(2u, 1u); |
| 86 | 86 |
| 87 layer_tree_host2->SetRootLayer(nullptr); | 87 layer_tree_host2->SetRootLayer(nullptr); |
| (...skipping 15 matching lines...) Expand all Loading... |
| 103 | 103 |
| 104 // Layer was removed so sequence from first LayerTreeHost should be | 104 // Layer was removed so sequence from first LayerTreeHost should be |
| 105 // satisfied. | 105 // satisfied. |
| 106 EXPECT_TRUE(blank_change == expected1); | 106 EXPECT_TRUE(blank_change == expected1); |
| 107 | 107 |
| 108 // No more SurfaceSequences should have been generated that need to have be | 108 // No more SurfaceSequences should have been generated that need to have be |
| 109 // satisfied. | 109 // satisfied. |
| 110 EXPECT_EQ(2u, required_seq.size()); | 110 EXPECT_EQ(2u, required_seq.size()); |
| 111 } | 111 } |
| 112 | 112 |
| 113 static void CalcDrawProps(FakeLayerTreeHost* host, float device_scale_factor) { |
| 114 RenderSurfaceLayerList render_surface_layer_list; |
| 115 LayerTreeHostCommon::CalcDrawPropsMainInputsForTesting inputs( |
| 116 host->root_layer(), gfx::Size(500, 500), &render_surface_layer_list); |
| 117 inputs.device_scale_factor = device_scale_factor; |
| 118 LayerTreeHostCommon::CalculateDrawProperties(&inputs); |
| 119 } |
| 120 |
| 113 // Check that setting content scale on the surface works. | 121 // Check that setting content scale on the surface works. |
| 114 TEST_F(SurfaceLayerTest, ScaleSurface) { | 122 TEST_F(SurfaceLayerTest, ScaleSurface) { |
| 115 SurfaceSequence blank_change; | 123 SurfaceSequence blank_change; |
| 116 SurfaceId required_id; | 124 SurfaceId required_id; |
| 117 std::set<SurfaceSequence> required_seq; | 125 std::set<SurfaceSequence> required_seq; |
| 118 scoped_refptr<SurfaceLayer> layer(SurfaceLayer::Create( | 126 scoped_refptr<SurfaceLayer> layer(SurfaceLayer::Create( |
| 119 base::Bind(&SatisfyCallback, &blank_change), | 127 base::Bind(&SatisfyCallback, &blank_change), |
| 120 base::Bind(&RequireCallback, &required_id, &required_seq))); | 128 base::Bind(&RequireCallback, &required_id, &required_seq))); |
| 121 gfx::Size surface_size(10, 15); | 129 gfx::Size surface_size(10, 15); |
| 122 layer->SetSurfaceId(SurfaceId(1), surface_size); | 130 layer->SetSurfaceId(SurfaceId(1), 2.f, surface_size); |
| 123 layer->SetBounds(gfx::Size(25, 45)); | 131 layer->SetBounds(gfx::Size(25, 45)); |
| 132 layer_tree_host_->SetRootLayer(layer); |
| 124 | 133 |
| 125 float scale_x; | 134 CalcDrawProps(layer_tree_host_.get(), 5.f); |
| 126 float scale_y; | 135 EXPECT_EQ(2.f, layer->contents_scale_x()); |
| 127 gfx::Size bounds; | 136 EXPECT_EQ(2.f, layer->contents_scale_y()); |
| 128 layer->CalculateContentsScale(2.f, &scale_x, &scale_y, &bounds); | 137 EXPECT_EQ(surface_size.ToString(), layer->content_bounds().ToString()); |
| 129 EXPECT_EQ(10.f / 25.f, scale_x); | |
| 130 EXPECT_EQ(15.f / 45.f, scale_y); | |
| 131 EXPECT_EQ(surface_size.ToString(), bounds.ToString()); | |
| 132 | 138 |
| 133 layer->SetBounds(gfx::Size(0, 0)); | 139 layer_tree_host_->SetRootLayer(nullptr); |
| 134 layer->CalculateContentsScale(2.f, &scale_x, &scale_y, &bounds); | 140 layer_tree_host_.reset(); |
| 135 EXPECT_EQ(1.f, scale_x); | |
| 136 EXPECT_EQ(1.f, scale_y); | |
| 137 EXPECT_EQ(surface_size.ToString(), bounds.ToString()); | |
| 138 } | 141 } |
| 139 | 142 |
| 140 // Check that SurfaceSequence is sent through swap promise. | 143 // Check that SurfaceSequence is sent through swap promise. |
| 141 class SurfaceLayerSwapPromise : public LayerTreeTest { | 144 class SurfaceLayerSwapPromise : public LayerTreeTest { |
| 142 public: | 145 public: |
| 143 SurfaceLayerSwapPromise() | 146 SurfaceLayerSwapPromise() |
| 144 : commit_count_(0), sequence_was_satisfied_(false) {} | 147 : commit_count_(0), sequence_was_satisfied_(false) {} |
| 145 | 148 |
| 146 void BeginTest() override { | 149 void BeginTest() override { |
| 147 layer_tree_host()->set_surface_id_namespace(1); | 150 layer_tree_host()->set_surface_id_namespace(1); |
| 148 layer_ = SurfaceLayer::Create( | 151 layer_ = SurfaceLayer::Create( |
| 149 base::Bind(&SatisfyCallback, &satisfied_sequence_), | 152 base::Bind(&SatisfyCallback, &satisfied_sequence_), |
| 150 base::Bind(&RequireCallback, &required_id_, &required_set_)); | 153 base::Bind(&RequireCallback, &required_id_, &required_set_)); |
| 151 layer_->SetSurfaceId(SurfaceId(1), gfx::Size(1, 1)); | 154 layer_->SetSurfaceId(SurfaceId(1), 1.f, gfx::Size(1, 1)); |
| 152 | 155 |
| 153 // Layer hasn't been added to tree so no SurfaceSequence generated yet. | 156 // Layer hasn't been added to tree so no SurfaceSequence generated yet. |
| 154 EXPECT_EQ(0u, required_set_.size()); | 157 EXPECT_EQ(0u, required_set_.size()); |
| 155 | 158 |
| 156 layer_tree_host()->SetRootLayer(layer_); | 159 layer_tree_host()->SetRootLayer(layer_); |
| 157 | 160 |
| 158 // Should have SurfaceSequence from first tree. | 161 // Should have SurfaceSequence from first tree. |
| 159 SurfaceSequence expected(1u, 1u); | 162 SurfaceSequence expected(1u, 1u); |
| 160 EXPECT_TRUE(required_id_ == SurfaceId(1)); | 163 EXPECT_TRUE(required_id_ == SurfaceId(1)); |
| 161 EXPECT_EQ(1u, required_set_.size()); | 164 EXPECT_EQ(1u, required_set_.size()); |
| (...skipping 62 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 224 SurfaceId required_id_; | 227 SurfaceId required_id_; |
| 225 std::set<SurfaceSequence> required_set_; | 228 std::set<SurfaceSequence> required_set_; |
| 226 }; | 229 }; |
| 227 | 230 |
| 228 // TODO(jbauman): Reenable on single thread once http://crbug.com/421923 is | 231 // TODO(jbauman): Reenable on single thread once http://crbug.com/421923 is |
| 229 // fixed. | 232 // fixed. |
| 230 MULTI_THREAD_TEST_F(SurfaceLayerSwapPromise); | 233 MULTI_THREAD_TEST_F(SurfaceLayerSwapPromise); |
| 231 | 234 |
| 232 } // namespace | 235 } // namespace |
| 233 } // namespace cc | 236 } // namespace cc |
| OLD | NEW |