Chromium Code Reviews| 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 14 matching lines...) Expand all Loading... | |
| 25 #include "cc/test/fake_output_surface.h" | 25 #include "cc/test/fake_output_surface.h" |
| 26 #include "cc/test/layer_tree_test.h" | 26 #include "cc/test/layer_tree_test.h" |
| 27 #include "cc/test/test_task_graph_runner.h" | 27 #include "cc/test/test_task_graph_runner.h" |
| 28 #include "cc/trees/layer_tree_host.h" | 28 #include "cc/trees/layer_tree_host.h" |
| 29 #include "testing/gmock/include/gmock/gmock.h" | 29 #include "testing/gmock/include/gmock/gmock.h" |
| 30 #include "testing/gtest/include/gtest/gtest.h" | 30 #include "testing/gtest/include/gtest/gtest.h" |
| 31 | 31 |
| 32 namespace cc { | 32 namespace cc { |
| 33 namespace { | 33 namespace { |
| 34 | 34 |
| 35 using testing::_; | |
| 36 using testing::Eq; | |
| 37 | |
| 35 static constexpr FrameSinkId kArbitraryFrameSinkId(1, 1); | 38 static constexpr FrameSinkId kArbitraryFrameSinkId(1, 1); |
| 36 | 39 |
| 37 class SurfaceLayerTest : public testing::Test { | 40 class SurfaceLayerTest : public testing::Test { |
| 38 public: | 41 public: |
| 39 SurfaceLayerTest() | 42 SurfaceLayerTest() |
| 40 : host_impl_(&task_runner_provider_, &task_graph_runner_) {} | 43 : host_impl_(&task_runner_provider_, &task_graph_runner_) {} |
| 41 | 44 |
| 42 protected: | 45 protected: |
| 43 void SetUp() override { | 46 void SetUp() override { |
| 44 animation_host_ = AnimationHost::CreateForTesting(ThreadInstance::MAIN); | 47 animation_host_ = AnimationHost::CreateForTesting(ThreadInstance::MAIN); |
| (...skipping 11 matching lines...) Expand all Loading... | |
| 56 } | 59 } |
| 57 | 60 |
| 58 FakeLayerTreeHostClient fake_client_; | 61 FakeLayerTreeHostClient fake_client_; |
| 59 FakeImplTaskRunnerProvider task_runner_provider_; | 62 FakeImplTaskRunnerProvider task_runner_provider_; |
| 60 TestTaskGraphRunner task_graph_runner_; | 63 TestTaskGraphRunner task_graph_runner_; |
| 61 std::unique_ptr<AnimationHost> animation_host_; | 64 std::unique_ptr<AnimationHost> animation_host_; |
| 62 std::unique_ptr<FakeLayerTreeHost> layer_tree_host_; | 65 std::unique_ptr<FakeLayerTreeHost> layer_tree_host_; |
| 63 FakeLayerTreeHostImpl host_impl_; | 66 FakeLayerTreeHostImpl host_impl_; |
| 64 }; | 67 }; |
| 65 | 68 |
| 66 class TestSurfaceReferenceFactory : public SequenceSurfaceReferenceFactory { | 69 class MockSurfaceReferenceFactory : public SequenceSurfaceReferenceFactory { |
| 67 protected: | 70 public: |
| 68 void SatisfySequence(const SurfaceSequence& seq) const override { | 71 MockSurfaceReferenceFactory() {} |
| 69 *out_seq_ = seq; | |
| 70 } | |
| 71 | 72 |
| 72 void RequireSequence(const SurfaceId& id, | 73 // SequenceSurfaceReferenceFactory implementation. |
| 73 const SurfaceSequence& seq) const override { | 74 MOCK_CONST_METHOD1(SatisfySequence, void(const SurfaceSequence&)); |
| 74 *out_id_ = id; | 75 MOCK_CONST_METHOD2(RequireSequence, |
| 75 out_set_->insert(seq); | 76 void(const SurfaceId&, const SurfaceSequence&)); |
| 76 } | |
| 77 | |
| 78 public: | |
| 79 TestSurfaceReferenceFactory(SurfaceSequence* out_seq, | |
| 80 SurfaceId* out_id, | |
| 81 std::set<SurfaceSequence>* out_set) | |
| 82 : out_seq_(out_seq), out_id_(out_id), out_set_(out_set) {} | |
| 83 | 77 |
| 84 protected: | 78 protected: |
| 85 ~TestSurfaceReferenceFactory() override = default; | 79 ~MockSurfaceReferenceFactory() override = default; |
| 86 | 80 |
| 87 private: | 81 private: |
| 88 SurfaceSequence* out_seq_; | 82 DISALLOW_COPY_AND_ASSIGN(MockSurfaceReferenceFactory); |
| 89 SurfaceId* out_id_; | |
| 90 std::set<SurfaceSequence>* out_set_; | |
| 91 | |
| 92 DISALLOW_COPY_AND_ASSIGN(TestSurfaceReferenceFactory); | |
| 93 }; | 83 }; |
| 94 | 84 |
| 95 // Check that one surface can be referenced by multiple LayerTreeHosts, and | 85 // Check that one surface can be referenced by multiple LayerTreeHosts, and |
| 96 // each will create its own SurfaceSequence that's satisfied on destruction. | 86 // each will create its own SurfaceSequence that's satisfied on destruction. |
| 97 TEST_F(SurfaceLayerTest, MultipleFramesOneSurface) { | 87 TEST_F(SurfaceLayerTest, MultipleFramesOneSurface) { |
| 98 const base::UnguessableToken kArbitraryToken = | 88 const base::UnguessableToken kArbitraryToken = |
| 99 base::UnguessableToken::Create(); | 89 base::UnguessableToken::Create(); |
| 100 SurfaceSequence blank_change; // Receives sequence if commit doesn't happen. | 90 const SurfaceInfo info( |
| 101 | |
| 102 SurfaceId required_id; | |
| 103 std::set<SurfaceSequence> required_seq; | |
| 104 scoped_refptr<SurfaceReferenceFactory> ref_factory = | |
| 105 new TestSurfaceReferenceFactory(&blank_change, &required_id, | |
| 106 &required_seq); | |
| 107 auto layer = SurfaceLayer::Create(ref_factory); | |
| 108 SurfaceInfo info( | |
| 109 SurfaceId(kArbitraryFrameSinkId, LocalSurfaceId(1, kArbitraryToken)), 1.f, | 91 SurfaceId(kArbitraryFrameSinkId, LocalSurfaceId(1, kArbitraryToken)), 1.f, |
| 110 gfx::Size(1, 1)); | 92 gfx::Size(1, 1)); |
| 93 const SurfaceSequence expected_seq1(FrameSinkId(1, 1), 1u); | |
| 94 const SurfaceSequence expected_seq2(FrameSinkId(2, 2), 1u); | |
| 95 const SurfaceId expected_id(kArbitraryFrameSinkId, | |
| 96 LocalSurfaceId(1, kArbitraryToken)); | |
| 97 | |
| 98 scoped_refptr<MockSurfaceReferenceFactory> ref_factory = | |
| 99 new testing::StrictMock<MockSurfaceReferenceFactory>(); | |
| 100 | |
| 101 // We are going to set up the SurfaceLayers and LayerTreeHosts. Each layer | |
| 102 // will require a sequence and no sequence should be satisfied for now. | |
| 103 EXPECT_CALL(*ref_factory, RequireSequence(Eq(expected_id), Eq(expected_seq1))) | |
| 104 .Times(1); | |
| 105 EXPECT_CALL(*ref_factory, RequireSequence(Eq(expected_id), Eq(expected_seq2))) | |
| 106 .Times(1); | |
| 107 EXPECT_CALL(*ref_factory, SatisfySequence(_)).Times(0); | |
| 108 | |
| 109 auto layer = SurfaceLayer::Create(ref_factory); | |
| 111 layer->SetPrimarySurfaceInfo(info); | 110 layer->SetPrimarySurfaceInfo(info); |
| 112 layer_tree_host_->GetSurfaceSequenceGenerator()->set_frame_sink_id( | 111 layer_tree_host_->GetSurfaceSequenceGenerator()->set_frame_sink_id( |
| 113 FrameSinkId(1, 1)); | 112 FrameSinkId(1, 1)); |
| 114 layer_tree_host_->SetRootLayer(layer); | 113 layer_tree_host_->SetRootLayer(layer); |
| 115 | 114 |
| 116 auto animation_host2 = AnimationHost::CreateForTesting(ThreadInstance::MAIN); | 115 auto animation_host2 = AnimationHost::CreateForTesting(ThreadInstance::MAIN); |
| 117 std::unique_ptr<FakeLayerTreeHost> layer_tree_host2 = | 116 std::unique_ptr<FakeLayerTreeHost> layer_tree_host2 = |
| 118 FakeLayerTreeHost::Create(&fake_client_, &task_graph_runner_, | 117 FakeLayerTreeHost::Create(&fake_client_, &task_graph_runner_, |
| 119 animation_host2.get()); | 118 animation_host2.get()); |
| 120 auto layer2 = SurfaceLayer::Create(std::move(ref_factory)); | 119 auto layer2 = SurfaceLayer::Create(ref_factory); |
| 121 layer2->SetPrimarySurfaceInfo(info); | 120 layer2->SetPrimarySurfaceInfo(info); |
| 122 layer_tree_host2->GetSurfaceSequenceGenerator()->set_frame_sink_id( | 121 layer_tree_host2->GetSurfaceSequenceGenerator()->set_frame_sink_id( |
| 123 FrameSinkId(2, 2)); | 122 FrameSinkId(2, 2)); |
| 124 layer_tree_host2->SetRootLayer(layer2); | 123 layer_tree_host2->SetRootLayer(layer2); |
| 125 | 124 |
| 126 // Layers haven't been removed, so no sequence should be satisfied. | 125 testing::Mock::VerifyAndClearExpectations(ref_factory.get()); |
| 127 EXPECT_FALSE(blank_change.is_valid()); | |
| 128 | 126 |
| 129 SurfaceSequence expected1(FrameSinkId(1, 1), 1u); | 127 // Destroy the second LayerTreeHost. The sequence generated by its |
| 130 SurfaceSequence expected2(FrameSinkId(2, 2), 1u); | 128 // SurfaceLayer must be satisfied and no new sequences must be required. |
| 131 | 129 EXPECT_CALL(*ref_factory, SatisfySequence(Eq(expected_seq2))).Times(1); |
| 132 layer_tree_host2->SetRootLayer(nullptr); | 130 layer_tree_host2->SetRootLayer(nullptr); |
| 133 layer_tree_host2.reset(); | 131 layer_tree_host2.reset(); |
| 134 animation_host2 = nullptr; | 132 animation_host2 = nullptr; |
| 133 base::RunLoop().RunUntilIdle(); | |
| 134 testing::Mock::VerifyAndClearExpectations(ref_factory.get()); | |
| 135 | 135 |
| 136 // Layer was removed so sequence from second LayerTreeHost should be | 136 // Destroy the first LayerTreeHost. The sequence generated by its |
| 137 // satisfied. | 137 // SurfaceLayer must be satisfied and no new sequences must be required. |
| 138 base::RunLoop().RunUntilIdle(); | 138 EXPECT_CALL(*ref_factory, SatisfySequence(expected_seq1)).Times(1); |
| 139 EXPECT_TRUE(blank_change == expected2); | 139 EXPECT_CALL(*ref_factory, RequireSequence(_, _)).Times(0); |
| 140 | |
| 141 // Set of sequences that need to be satisfied should include sequences from | |
| 142 // both trees. | |
| 143 EXPECT_TRUE(required_id == SurfaceId(kArbitraryFrameSinkId, | |
| 144 LocalSurfaceId(1, kArbitraryToken))); | |
| 145 EXPECT_EQ(2u, required_seq.size()); | |
| 146 EXPECT_TRUE(required_seq.count(expected1)); | |
| 147 EXPECT_TRUE(required_seq.count(expected2)); | |
| 148 | |
| 149 layer_tree_host_->SetRootLayer(nullptr); | 140 layer_tree_host_->SetRootLayer(nullptr); |
| 150 layer_tree_host_.reset(); | 141 layer_tree_host_.reset(); |
| 151 | |
| 152 // Layer was removed so sequence from first LayerTreeHost should be | |
| 153 // satisfied. | |
| 154 base::RunLoop().RunUntilIdle(); | 142 base::RunLoop().RunUntilIdle(); |
| 155 EXPECT_TRUE(blank_change == expected1); | 143 testing::Mock::VerifyAndClearExpectations(ref_factory.get()); |
| 156 | |
| 157 // No more SurfaceSequences should have been generated that need to have be | |
| 158 // satisfied. | |
| 159 EXPECT_EQ(2u, required_seq.size()); | |
| 160 } | 144 } |
| 161 | 145 |
| 162 // This test verifies that the primary and fallback SurfaceInfo are pushed | 146 // This test verifies that the primary and fallback SurfaceInfo are pushed |
| 163 // across from SurfaceLayer to SurfaceLayerImpl. | 147 // across from SurfaceLayer to SurfaceLayerImpl. |
| 164 TEST_F(SurfaceLayerTest, SurfaceInfoPushProperties) { | 148 TEST_F(SurfaceLayerTest, SurfaceInfoPushProperties) { |
| 165 SurfaceSequence blank_change; | 149 // We use a nice mock here because we are not really interested in calls to |
| 166 SurfaceId required_id; | 150 // MockSurfaceReferenceFactory and we don't want warnings printed. |
| 167 std::set<SurfaceSequence> required_sequences; | |
| 168 scoped_refptr<SurfaceReferenceFactory> ref_factory = | 151 scoped_refptr<SurfaceReferenceFactory> ref_factory = |
| 169 new TestSurfaceReferenceFactory(&blank_change, &required_id, | 152 new testing::NiceMock<MockSurfaceReferenceFactory>(); |
| 170 &required_sequences); | |
| 171 | 153 |
| 172 scoped_refptr<SurfaceLayer> layer = SurfaceLayer::Create(ref_factory); | 154 scoped_refptr<SurfaceLayer> layer = SurfaceLayer::Create(ref_factory); |
| 173 layer_tree_host_->SetRootLayer(layer); | 155 layer_tree_host_->SetRootLayer(layer); |
| 174 SurfaceInfo primary_info( | 156 SurfaceInfo primary_info( |
| 175 SurfaceId(kArbitraryFrameSinkId, | 157 SurfaceId(kArbitraryFrameSinkId, |
| 176 LocalSurfaceId(1, base::UnguessableToken::Create())), | 158 LocalSurfaceId(1, base::UnguessableToken::Create())), |
| 177 1.f, gfx::Size(1, 1)); | 159 1.f, gfx::Size(1, 1)); |
| 178 layer->SetPrimarySurfaceInfo(primary_info); | 160 layer->SetPrimarySurfaceInfo(primary_info); |
| 179 | 161 |
| 180 std::unique_ptr<SurfaceLayerImpl> layer_impl = | 162 std::unique_ptr<SurfaceLayerImpl> layer_impl = |
| (...skipping 20 matching lines...) Expand all Loading... | |
| 201 | 183 |
| 202 // Check that SurfaceSequence is sent through swap promise. | 184 // Check that SurfaceSequence is sent through swap promise. |
| 203 class SurfaceLayerSwapPromise : public LayerTreeTest { | 185 class SurfaceLayerSwapPromise : public LayerTreeTest { |
| 204 public: | 186 public: |
| 205 SurfaceLayerSwapPromise() | 187 SurfaceLayerSwapPromise() |
| 206 : commit_count_(0), sequence_was_satisfied_(false) {} | 188 : commit_count_(0), sequence_was_satisfied_(false) {} |
| 207 | 189 |
| 208 void BeginTest() override { | 190 void BeginTest() override { |
| 209 layer_tree_host()->GetSurfaceSequenceGenerator()->set_frame_sink_id( | 191 layer_tree_host()->GetSurfaceSequenceGenerator()->set_frame_sink_id( |
| 210 FrameSinkId(1, 1)); | 192 FrameSinkId(1, 1)); |
| 211 layer_ = SurfaceLayer::Create(new TestSurfaceReferenceFactory( | 193 ref_factory_ = new testing::StrictMock<MockSurfaceReferenceFactory>(); |
| 212 &satisfied_sequence_, &required_id_, &required_set_)); | 194 |
| 195 // Create a SurfaceLayer but don't add it to the tree yet. No sequence | |
| 196 // should be required / satisfied. | |
| 197 EXPECT_CALL(*ref_factory_, SatisfySequence(_)).Times(0); | |
| 198 EXPECT_CALL(*ref_factory_, RequireSequence(_, _)).Times(0); | |
| 199 layer_ = SurfaceLayer::Create(ref_factory_); | |
| 213 SurfaceInfo info( | 200 SurfaceInfo info( |
| 214 SurfaceId(kArbitraryFrameSinkId, LocalSurfaceId(1, kArbitraryToken)), | 201 SurfaceId(kArbitraryFrameSinkId, LocalSurfaceId(1, kArbitraryToken)), |
| 215 1.f, gfx::Size(1, 1)); | 202 1.f, gfx::Size(1, 1)); |
| 216 layer_->SetPrimarySurfaceInfo(info); | 203 layer_->SetPrimarySurfaceInfo(info); |
| 204 testing::Mock::VerifyAndClearExpectations(ref_factory_.get()); | |
| 217 | 205 |
| 218 // Layer hasn't been added to tree so no SurfaceSequence generated yet. | 206 // Add the layer to the tree. A sequence must be required. |
| 219 EXPECT_EQ(0u, required_set_.size()); | 207 SurfaceSequence expected_seq(kArbitraryFrameSinkId, 1u); |
| 208 SurfaceId expected_id(kArbitraryFrameSinkId, | |
| 209 LocalSurfaceId(1, kArbitraryToken)); | |
| 210 EXPECT_CALL(*ref_factory_, SatisfySequence(_)).Times(0); | |
| 211 EXPECT_CALL(*ref_factory_, | |
| 212 RequireSequence(Eq(expected_id), Eq(expected_seq))) | |
| 213 .Times(1); | |
| 214 layer_tree_host()->SetRootLayer(layer_); | |
| 215 testing::Mock::VerifyAndClearExpectations(ref_factory_.get()); | |
| 220 | 216 |
| 221 layer_tree_host()->SetRootLayer(layer_); | 217 // By the end of the test, the required sequence must be satisfied and no |
| 222 | 218 // more sequence must be required. |
| 223 // Should have SurfaceSequence from first tree. | 219 EXPECT_CALL(*ref_factory_, SatisfySequence(Eq(expected_seq))).Times(1); |
| 224 SurfaceSequence expected(kArbitraryFrameSinkId, 1u); | 220 EXPECT_CALL(*ref_factory_, RequireSequence(_, _)).Times(0); |
| 225 EXPECT_TRUE(required_id_ == SurfaceId(kArbitraryFrameSinkId, | |
| 226 LocalSurfaceId(1, kArbitraryToken))); | |
| 227 EXPECT_EQ(1u, required_set_.size()); | |
| 228 EXPECT_TRUE(required_set_.count(expected)); | |
| 229 | 221 |
| 230 gfx::Size bounds(100, 100); | 222 gfx::Size bounds(100, 100); |
| 231 layer_tree_host()->SetViewportSize(bounds); | 223 layer_tree_host()->SetViewportSize(bounds); |
| 232 | 224 |
| 233 blank_layer_ = SolidColorLayer::Create(); | 225 blank_layer_ = SolidColorLayer::Create(); |
| 234 blank_layer_->SetIsDrawable(true); | 226 blank_layer_->SetIsDrawable(true); |
| 235 blank_layer_->SetBounds(gfx::Size(10, 10)); | 227 blank_layer_->SetBounds(gfx::Size(10, 10)); |
| 236 | 228 |
| 237 PostSetNeedsCommitToMainThread(); | 229 PostSetNeedsCommitToMainThread(); |
| 238 } | 230 } |
| 239 | 231 |
| 240 virtual void ChangeTree() = 0; | 232 virtual void ChangeTree() = 0; |
| 241 | 233 |
| 242 void DidCommitAndDrawFrame() override { | 234 void DidCommitAndDrawFrame() override { |
| 243 base::ThreadTaskRunnerHandle::Get()->PostTask( | 235 base::ThreadTaskRunnerHandle::Get()->PostTask( |
| 244 FROM_HERE, base::BindOnce(&SurfaceLayerSwapPromise::ChangeTree, | 236 FROM_HERE, base::BindOnce(&SurfaceLayerSwapPromise::ChangeTree, |
| 245 base::Unretained(this))); | 237 base::Unretained(this))); |
| 246 } | 238 } |
| 247 | 239 |
| 240 void AfterTest() override { | |
| 241 testing::Mock::VerifyAndClearExpectations(ref_factory_.get()); | |
|
danakj
2017/04/20 21:40:36
Tests will verify mocks implicitly when the mock i
| |
| 242 } | |
| 243 | |
| 248 protected: | 244 protected: |
| 249 int commit_count_; | 245 int commit_count_; |
| 250 bool sequence_was_satisfied_; | 246 bool sequence_was_satisfied_; |
| 251 scoped_refptr<SurfaceLayer> layer_; | 247 scoped_refptr<SurfaceLayer> layer_; |
| 252 scoped_refptr<Layer> blank_layer_; | 248 scoped_refptr<Layer> blank_layer_; |
| 253 SurfaceSequence satisfied_sequence_; | 249 scoped_refptr<MockSurfaceReferenceFactory> ref_factory_; |
| 254 | 250 |
| 255 SurfaceId required_id_; | |
| 256 std::set<SurfaceSequence> required_set_; | |
| 257 const base::UnguessableToken kArbitraryToken = | 251 const base::UnguessableToken kArbitraryToken = |
| 258 base::UnguessableToken::Create(); | 252 base::UnguessableToken::Create(); |
| 259 }; | 253 }; |
| 260 | 254 |
| 261 // Check that SurfaceSequence is sent through swap promise. | 255 // Check that SurfaceSequence is sent through swap promise. |
| 262 class SurfaceLayerSwapPromiseWithDraw : public SurfaceLayerSwapPromise { | 256 class SurfaceLayerSwapPromiseWithDraw : public SurfaceLayerSwapPromise { |
| 263 public: | 257 public: |
| 264 void ChangeTree() override { | 258 void ChangeTree() override { |
| 265 ++commit_count_; | 259 ++commit_count_; |
| 266 switch (commit_count_) { | 260 switch (commit_count_) { |
| 267 case 1: | 261 case 1: |
| 268 // Remove SurfaceLayer from tree to cause SwapPromise to be created. | 262 // Remove SurfaceLayer from tree to cause SwapPromise to be created. |
| 269 layer_tree_host()->SetRootLayer(blank_layer_); | 263 layer_tree_host()->SetRootLayer(blank_layer_); |
| 270 break; | 264 break; |
| 271 case 2: | 265 case 2: |
| 272 EndTest(); | 266 EndTest(); |
| 273 break; | 267 break; |
| 274 default: | 268 default: |
| 275 NOTREACHED(); | 269 NOTREACHED(); |
| 276 break; | 270 break; |
| 277 } | 271 } |
| 278 } | 272 } |
| 279 | |
| 280 void AfterTest() override { | |
| 281 EXPECT_TRUE(required_id_ == SurfaceId(kArbitraryFrameSinkId, | |
| 282 LocalSurfaceId(1, kArbitraryToken))); | |
| 283 EXPECT_EQ(1u, required_set_.size()); | |
| 284 EXPECT_TRUE(satisfied_sequence_ == | |
| 285 SurfaceSequence(kArbitraryFrameSinkId, 1u)); | |
| 286 } | |
| 287 }; | 273 }; |
| 288 | 274 |
| 289 SINGLE_AND_MULTI_THREAD_TEST_F(SurfaceLayerSwapPromiseWithDraw); | 275 SINGLE_AND_MULTI_THREAD_TEST_F(SurfaceLayerSwapPromiseWithDraw); |
| 290 | 276 |
| 291 // Check that SurfaceSequence is sent through swap promise and resolved when | 277 // Check that SurfaceSequence is sent through swap promise and resolved when |
| 292 // swap fails. | 278 // swap fails. |
| 293 class SurfaceLayerSwapPromiseWithoutDraw : public SurfaceLayerSwapPromise { | 279 class SurfaceLayerSwapPromiseWithoutDraw : public SurfaceLayerSwapPromise { |
| 294 public: | 280 public: |
| 295 SurfaceLayerSwapPromiseWithoutDraw() : SurfaceLayerSwapPromise() {} | 281 SurfaceLayerSwapPromiseWithoutDraw() : SurfaceLayerSwapPromise() {} |
| 296 | 282 |
| (...skipping 11 matching lines...) Expand all Loading... | |
| 308 layer_tree_host()->SetRootLayer(blank_layer_); | 294 layer_tree_host()->SetRootLayer(blank_layer_); |
| 309 break; | 295 break; |
| 310 case 2: | 296 case 2: |
| 311 layer_tree_host()->SetNeedsCommit(); | 297 layer_tree_host()->SetNeedsCommit(); |
| 312 break; | 298 break; |
| 313 default: | 299 default: |
| 314 EndTest(); | 300 EndTest(); |
| 315 break; | 301 break; |
| 316 } | 302 } |
| 317 } | 303 } |
| 318 | |
| 319 void AfterTest() override { | |
| 320 EXPECT_TRUE(required_id_ == SurfaceId(kArbitraryFrameSinkId, | |
| 321 LocalSurfaceId(1, kArbitraryToken))); | |
| 322 EXPECT_EQ(1u, required_set_.size()); | |
| 323 EXPECT_TRUE(satisfied_sequence_ == | |
| 324 SurfaceSequence(kArbitraryFrameSinkId, 1u)); | |
| 325 } | |
| 326 }; | 304 }; |
| 327 | 305 |
| 328 MULTI_THREAD_TEST_F(SurfaceLayerSwapPromiseWithoutDraw); | 306 MULTI_THREAD_TEST_F(SurfaceLayerSwapPromiseWithoutDraw); |
| 329 | 307 |
| 330 } // namespace | 308 } // namespace |
| 331 } // namespace cc | 309 } // namespace cc |
| OLD | NEW |