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)); | 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)); | 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 |
| 121 // Check that setting content scale on the surface works. |
| 122 TEST_F(SurfaceLayerTest, ScaleSurface) { |
| 123 SurfaceSequence blank_change; |
| 124 SurfaceId required_id; |
| 125 std::set<SurfaceSequence> required_seq; |
| 126 scoped_refptr<SurfaceLayer> layer(SurfaceLayer::Create( |
| 127 base::Bind(&SatisfyCallback, &blank_change), |
| 128 base::Bind(&RequireCallback, &required_id, &required_seq))); |
| 129 gfx::Size surface_size(10, 15); |
| 130 layer->SetSurfaceId(SurfaceId(1), 2.f, surface_size); |
| 131 layer->SetBounds(gfx::Size(25, 45)); |
| 132 layer_tree_host_->SetRootLayer(layer); |
| 133 |
| 134 CalcDrawProps(layer_tree_host_.get(), 5.f); |
| 135 EXPECT_EQ(2.f, layer->contents_scale_x()); |
| 136 EXPECT_EQ(2.f, layer->contents_scale_y()); |
| 137 EXPECT_EQ(surface_size.ToString(), layer->content_bounds().ToString()); |
| 138 |
| 139 layer_tree_host_->SetRootLayer(nullptr); |
| 140 layer_tree_host_.reset(); |
| 141 } |
| 142 |
113 // Check that SurfaceSequence is sent through swap promise. | 143 // Check that SurfaceSequence is sent through swap promise. |
114 class SurfaceLayerSwapPromise : public LayerTreeTest { | 144 class SurfaceLayerSwapPromise : public LayerTreeTest { |
115 public: | 145 public: |
116 SurfaceLayerSwapPromise() | 146 SurfaceLayerSwapPromise() |
117 : commit_count_(0), sequence_was_satisfied_(false) {} | 147 : commit_count_(0), sequence_was_satisfied_(false) {} |
118 | 148 |
119 void BeginTest() override { | 149 void BeginTest() override { |
120 layer_tree_host()->set_surface_id_namespace(1); | 150 layer_tree_host()->set_surface_id_namespace(1); |
121 layer_ = SurfaceLayer::Create( | 151 layer_ = SurfaceLayer::Create( |
122 base::Bind(&SatisfyCallback, &satisfied_sequence_), | 152 base::Bind(&SatisfyCallback, &satisfied_sequence_), |
123 base::Bind(&RequireCallback, &required_id_, &required_set_)); | 153 base::Bind(&RequireCallback, &required_id_, &required_set_)); |
124 layer_->SetSurfaceId(SurfaceId(1)); | 154 layer_->SetSurfaceId(SurfaceId(1), 1.f, gfx::Size(1, 1)); |
125 | 155 |
126 // 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. |
127 EXPECT_EQ(0u, required_set_.size()); | 157 EXPECT_EQ(0u, required_set_.size()); |
128 | 158 |
129 layer_tree_host()->SetRootLayer(layer_); | 159 layer_tree_host()->SetRootLayer(layer_); |
130 | 160 |
131 // Should have SurfaceSequence from first tree. | 161 // Should have SurfaceSequence from first tree. |
132 SurfaceSequence expected(1u, 1u); | 162 SurfaceSequence expected(1u, 1u); |
133 EXPECT_TRUE(required_id_ == SurfaceId(1)); | 163 EXPECT_TRUE(required_id_ == SurfaceId(1)); |
134 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... |
197 SurfaceId required_id_; | 227 SurfaceId required_id_; |
198 std::set<SurfaceSequence> required_set_; | 228 std::set<SurfaceSequence> required_set_; |
199 }; | 229 }; |
200 | 230 |
201 // 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 |
202 // fixed. | 232 // fixed. |
203 MULTI_THREAD_TEST_F(SurfaceLayerSwapPromise); | 233 MULTI_THREAD_TEST_F(SurfaceLayerSwapPromise); |
204 | 234 |
205 } // namespace | 235 } // namespace |
206 } // namespace cc | 236 } // namespace cc |
OLD | NEW |