| 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 <stdint.h> | 5 #include <stdint.h> |
| 6 | 6 |
| 7 #include <set> | 7 #include <set> |
| 8 #include <vector> | 8 #include <vector> |
| 9 | 9 |
| 10 #include "base/location.h" | 10 #include "base/location.h" |
| (...skipping 82 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 93 base::UnguessableToken::Create(); | 93 base::UnguessableToken::Create(); |
| 94 SurfaceSequence blank_change; // Receives sequence if commit doesn't happen. | 94 SurfaceSequence blank_change; // Receives sequence if commit doesn't happen. |
| 95 | 95 |
| 96 SurfaceId required_id; | 96 SurfaceId required_id; |
| 97 std::set<SurfaceSequence> required_seq; | 97 std::set<SurfaceSequence> required_seq; |
| 98 scoped_refptr<SurfaceReferenceFactory> ref_factory = | 98 scoped_refptr<SurfaceReferenceFactory> ref_factory = |
| 99 new TestSurfaceReferenceFactory(&blank_change, &required_id, | 99 new TestSurfaceReferenceFactory(&blank_change, &required_id, |
| 100 &required_seq); | 100 &required_seq); |
| 101 auto layer = SurfaceLayer::Create(ref_factory); | 101 auto layer = SurfaceLayer::Create(ref_factory); |
| 102 SurfaceInfo info( | 102 SurfaceInfo info( |
| 103 SurfaceId(kArbitraryFrameSinkId, LocalFrameId(1, kArbitraryToken)), 1.f, | 103 SurfaceId(kArbitraryFrameSinkId, LocalSurfaceId(1, kArbitraryToken)), 1.f, |
| 104 gfx::Size(1, 1)); | 104 gfx::Size(1, 1)); |
| 105 layer->SetSurfaceInfo(info); | 105 layer->SetSurfaceInfo(info); |
| 106 layer_tree_host_->GetSurfaceSequenceGenerator()->set_frame_sink_id( | 106 layer_tree_host_->GetSurfaceSequenceGenerator()->set_frame_sink_id( |
| 107 FrameSinkId(1, 1)); | 107 FrameSinkId(1, 1)); |
| 108 layer_tree_->SetRootLayer(layer); | 108 layer_tree_->SetRootLayer(layer); |
| 109 | 109 |
| 110 auto animation_host2 = AnimationHost::CreateForTesting(ThreadInstance::MAIN); | 110 auto animation_host2 = AnimationHost::CreateForTesting(ThreadInstance::MAIN); |
| 111 std::unique_ptr<FakeLayerTreeHost> layer_tree_host2 = | 111 std::unique_ptr<FakeLayerTreeHost> layer_tree_host2 = |
| 112 FakeLayerTreeHost::Create(&fake_client_, &task_graph_runner_, | 112 FakeLayerTreeHost::Create(&fake_client_, &task_graph_runner_, |
| 113 animation_host2.get()); | 113 animation_host2.get()); |
| (...skipping 14 matching lines...) Expand all Loading... |
| 128 animation_host2 = nullptr; | 128 animation_host2 = nullptr; |
| 129 | 129 |
| 130 // Layer was removed so sequence from second LayerTreeHost should be | 130 // Layer was removed so sequence from second LayerTreeHost should be |
| 131 // satisfied. | 131 // satisfied. |
| 132 base::RunLoop().RunUntilIdle(); | 132 base::RunLoop().RunUntilIdle(); |
| 133 EXPECT_TRUE(blank_change == expected2); | 133 EXPECT_TRUE(blank_change == expected2); |
| 134 | 134 |
| 135 // Set of sequences that need to be satisfied should include sequences from | 135 // Set of sequences that need to be satisfied should include sequences from |
| 136 // both trees. | 136 // both trees. |
| 137 EXPECT_TRUE(required_id == SurfaceId(kArbitraryFrameSinkId, | 137 EXPECT_TRUE(required_id == SurfaceId(kArbitraryFrameSinkId, |
| 138 LocalFrameId(1, kArbitraryToken))); | 138 LocalSurfaceId(1, kArbitraryToken))); |
| 139 EXPECT_EQ(2u, required_seq.size()); | 139 EXPECT_EQ(2u, required_seq.size()); |
| 140 EXPECT_TRUE(required_seq.count(expected1)); | 140 EXPECT_TRUE(required_seq.count(expected1)); |
| 141 EXPECT_TRUE(required_seq.count(expected2)); | 141 EXPECT_TRUE(required_seq.count(expected2)); |
| 142 | 142 |
| 143 layer_tree_->SetRootLayer(nullptr); | 143 layer_tree_->SetRootLayer(nullptr); |
| 144 layer_tree_host_.reset(); | 144 layer_tree_host_.reset(); |
| 145 | 145 |
| 146 // Layer was removed so sequence from first LayerTreeHost should be | 146 // Layer was removed so sequence from first LayerTreeHost should be |
| 147 // satisfied. | 147 // satisfied. |
| 148 base::RunLoop().RunUntilIdle(); | 148 base::RunLoop().RunUntilIdle(); |
| 149 EXPECT_TRUE(blank_change == expected1); | 149 EXPECT_TRUE(blank_change == expected1); |
| 150 | 150 |
| 151 // No more SurfaceSequences should have been generated that need to have be | 151 // No more SurfaceSequences should have been generated that need to have be |
| 152 // satisfied. | 152 // satisfied. |
| 153 EXPECT_EQ(2u, required_seq.size()); | 153 EXPECT_EQ(2u, required_seq.size()); |
| 154 } | 154 } |
| 155 | 155 |
| 156 // Check that SurfaceSequence is sent through swap promise. | 156 // Check that SurfaceSequence is sent through swap promise. |
| 157 class SurfaceLayerSwapPromise : public LayerTreeTest { | 157 class SurfaceLayerSwapPromise : public LayerTreeTest { |
| 158 public: | 158 public: |
| 159 SurfaceLayerSwapPromise() | 159 SurfaceLayerSwapPromise() |
| 160 : commit_count_(0), sequence_was_satisfied_(false) {} | 160 : commit_count_(0), sequence_was_satisfied_(false) {} |
| 161 | 161 |
| 162 void BeginTest() override { | 162 void BeginTest() override { |
| 163 layer_tree_host()->GetSurfaceSequenceGenerator()->set_frame_sink_id( | 163 layer_tree_host()->GetSurfaceSequenceGenerator()->set_frame_sink_id( |
| 164 FrameSinkId(1, 1)); | 164 FrameSinkId(1, 1)); |
| 165 layer_ = SurfaceLayer::Create(new TestSurfaceReferenceFactory( | 165 layer_ = SurfaceLayer::Create(new TestSurfaceReferenceFactory( |
| 166 &satisfied_sequence_, &required_id_, &required_set_)); | 166 &satisfied_sequence_, &required_id_, &required_set_)); |
| 167 SurfaceInfo info( | 167 SurfaceInfo info( |
| 168 SurfaceId(kArbitraryFrameSinkId, LocalFrameId(1, kArbitraryToken)), 1.f, | 168 SurfaceId(kArbitraryFrameSinkId, LocalSurfaceId(1, kArbitraryToken)), |
| 169 gfx::Size(1, 1)); | 169 1.f, gfx::Size(1, 1)); |
| 170 layer_->SetSurfaceInfo(info); | 170 layer_->SetSurfaceInfo(info); |
| 171 | 171 |
| 172 // Layer hasn't been added to tree so no SurfaceSequence generated yet. | 172 // Layer hasn't been added to tree so no SurfaceSequence generated yet. |
| 173 EXPECT_EQ(0u, required_set_.size()); | 173 EXPECT_EQ(0u, required_set_.size()); |
| 174 | 174 |
| 175 layer_tree()->SetRootLayer(layer_); | 175 layer_tree()->SetRootLayer(layer_); |
| 176 | 176 |
| 177 // Should have SurfaceSequence from first tree. | 177 // Should have SurfaceSequence from first tree. |
| 178 SurfaceSequence expected(kArbitraryFrameSinkId, 1u); | 178 SurfaceSequence expected(kArbitraryFrameSinkId, 1u); |
| 179 EXPECT_TRUE(required_id_ == SurfaceId(kArbitraryFrameSinkId, | 179 EXPECT_TRUE(required_id_ == SurfaceId(kArbitraryFrameSinkId, |
| 180 LocalFrameId(1, kArbitraryToken))); | 180 LocalSurfaceId(1, kArbitraryToken))); |
| 181 EXPECT_EQ(1u, required_set_.size()); | 181 EXPECT_EQ(1u, required_set_.size()); |
| 182 EXPECT_TRUE(required_set_.count(expected)); | 182 EXPECT_TRUE(required_set_.count(expected)); |
| 183 | 183 |
| 184 gfx::Size bounds(100, 100); | 184 gfx::Size bounds(100, 100); |
| 185 layer_tree()->SetViewportSize(bounds); | 185 layer_tree()->SetViewportSize(bounds); |
| 186 | 186 |
| 187 blank_layer_ = SolidColorLayer::Create(); | 187 blank_layer_ = SolidColorLayer::Create(); |
| 188 blank_layer_->SetIsDrawable(true); | 188 blank_layer_->SetIsDrawable(true); |
| 189 blank_layer_->SetBounds(gfx::Size(10, 10)); | 189 blank_layer_->SetBounds(gfx::Size(10, 10)); |
| 190 | 190 |
| (...skipping 35 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 226 EndTest(); | 226 EndTest(); |
| 227 break; | 227 break; |
| 228 default: | 228 default: |
| 229 NOTREACHED(); | 229 NOTREACHED(); |
| 230 break; | 230 break; |
| 231 } | 231 } |
| 232 } | 232 } |
| 233 | 233 |
| 234 void AfterTest() override { | 234 void AfterTest() override { |
| 235 EXPECT_TRUE(required_id_ == SurfaceId(kArbitraryFrameSinkId, | 235 EXPECT_TRUE(required_id_ == SurfaceId(kArbitraryFrameSinkId, |
| 236 LocalFrameId(1, kArbitraryToken))); | 236 LocalSurfaceId(1, kArbitraryToken))); |
| 237 EXPECT_EQ(1u, required_set_.size()); | 237 EXPECT_EQ(1u, required_set_.size()); |
| 238 EXPECT_TRUE(satisfied_sequence_ == | 238 EXPECT_TRUE(satisfied_sequence_ == |
| 239 SurfaceSequence(kArbitraryFrameSinkId, 1u)); | 239 SurfaceSequence(kArbitraryFrameSinkId, 1u)); |
| 240 } | 240 } |
| 241 }; | 241 }; |
| 242 | 242 |
| 243 SINGLE_AND_MULTI_THREAD_TEST_F(SurfaceLayerSwapPromiseWithDraw); | 243 SINGLE_AND_MULTI_THREAD_TEST_F(SurfaceLayerSwapPromiseWithDraw); |
| 244 | 244 |
| 245 // Check that SurfaceSequence is sent through swap promise and resolved when | 245 // Check that SurfaceSequence is sent through swap promise and resolved when |
| 246 // swap fails. | 246 // swap fails. |
| (...skipping 18 matching lines...) Expand all Loading... |
| 265 layer_tree_host()->SetNeedsCommit(); | 265 layer_tree_host()->SetNeedsCommit(); |
| 266 break; | 266 break; |
| 267 default: | 267 default: |
| 268 EndTest(); | 268 EndTest(); |
| 269 break; | 269 break; |
| 270 } | 270 } |
| 271 } | 271 } |
| 272 | 272 |
| 273 void AfterTest() override { | 273 void AfterTest() override { |
| 274 EXPECT_TRUE(required_id_ == SurfaceId(kArbitraryFrameSinkId, | 274 EXPECT_TRUE(required_id_ == SurfaceId(kArbitraryFrameSinkId, |
| 275 LocalFrameId(1, kArbitraryToken))); | 275 LocalSurfaceId(1, kArbitraryToken))); |
| 276 EXPECT_EQ(1u, required_set_.size()); | 276 EXPECT_EQ(1u, required_set_.size()); |
| 277 EXPECT_TRUE(satisfied_sequence_ == | 277 EXPECT_TRUE(satisfied_sequence_ == |
| 278 SurfaceSequence(kArbitraryFrameSinkId, 1u)); | 278 SurfaceSequence(kArbitraryFrameSinkId, 1u)); |
| 279 } | 279 } |
| 280 }; | 280 }; |
| 281 | 281 |
| 282 MULTI_THREAD_TEST_F(SurfaceLayerSwapPromiseWithoutDraw); | 282 MULTI_THREAD_TEST_F(SurfaceLayerSwapPromiseWithoutDraw); |
| 283 | 283 |
| 284 } // namespace | 284 } // namespace |
| 285 } // namespace cc | 285 } // namespace cc |
| OLD | NEW |