| 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 21 matching lines...) Expand all Loading... |
| 32 namespace { | 32 namespace { |
| 33 | 33 |
| 34 static constexpr FrameSinkId kArbitraryFrameSinkId(1, 1); | 34 static constexpr FrameSinkId kArbitraryFrameSinkId(1, 1); |
| 35 | 35 |
| 36 class SurfaceLayerTest : public testing::Test { | 36 class SurfaceLayerTest : public testing::Test { |
| 37 protected: | 37 protected: |
| 38 void SetUp() override { | 38 void SetUp() override { |
| 39 animation_host_ = AnimationHost::CreateForTesting(ThreadInstance::MAIN); | 39 animation_host_ = AnimationHost::CreateForTesting(ThreadInstance::MAIN); |
| 40 layer_tree_host_ = FakeLayerTreeHost::Create( | 40 layer_tree_host_ = FakeLayerTreeHost::Create( |
| 41 &fake_client_, &task_graph_runner_, animation_host_.get()); | 41 &fake_client_, &task_graph_runner_, animation_host_.get()); |
| 42 layer_tree_ = layer_tree_host_->GetLayerTree(); | 42 layer_tree_host_->SetViewportSize(gfx::Size(10, 10)); |
| 43 layer_tree_->SetViewportSize(gfx::Size(10, 10)); | |
| 44 } | 43 } |
| 45 | 44 |
| 46 void TearDown() override { | 45 void TearDown() override { |
| 47 if (layer_tree_host_) { | 46 if (layer_tree_host_) { |
| 48 layer_tree_->SetRootLayer(nullptr); | 47 layer_tree_host_->SetRootLayer(nullptr); |
| 49 layer_tree_host_ = nullptr; | 48 layer_tree_host_ = nullptr; |
| 50 } | 49 } |
| 51 } | 50 } |
| 52 | 51 |
| 53 FakeLayerTreeHostClient fake_client_; | 52 FakeLayerTreeHostClient fake_client_; |
| 54 TestTaskGraphRunner task_graph_runner_; | 53 TestTaskGraphRunner task_graph_runner_; |
| 55 std::unique_ptr<AnimationHost> animation_host_; | 54 std::unique_ptr<AnimationHost> animation_host_; |
| 56 std::unique_ptr<FakeLayerTreeHost> layer_tree_host_; | 55 std::unique_ptr<FakeLayerTreeHost> layer_tree_host_; |
| 57 LayerTree* layer_tree_; | |
| 58 }; | 56 }; |
| 59 | 57 |
| 60 class TestSurfaceReferenceFactory : public SequenceSurfaceReferenceFactory { | 58 class TestSurfaceReferenceFactory : public SequenceSurfaceReferenceFactory { |
| 61 protected: | 59 protected: |
| 62 void SatisfySequence(const SurfaceSequence& seq) const override { | 60 void SatisfySequence(const SurfaceSequence& seq) const override { |
| 63 *out_seq_ = seq; | 61 *out_seq_ = seq; |
| 64 } | 62 } |
| 65 | 63 |
| 66 void RequireSequence(const SurfaceId& id, | 64 void RequireSequence(const SurfaceId& id, |
| 67 const SurfaceSequence& seq) const override { | 65 const SurfaceSequence& seq) const override { |
| (...skipping 30 matching lines...) Expand all Loading... |
| 98 scoped_refptr<SurfaceReferenceFactory> ref_factory = | 96 scoped_refptr<SurfaceReferenceFactory> ref_factory = |
| 99 new TestSurfaceReferenceFactory(&blank_change, &required_id, | 97 new TestSurfaceReferenceFactory(&blank_change, &required_id, |
| 100 &required_seq); | 98 &required_seq); |
| 101 auto layer = SurfaceLayer::Create(ref_factory); | 99 auto layer = SurfaceLayer::Create(ref_factory); |
| 102 SurfaceInfo info( | 100 SurfaceInfo info( |
| 103 SurfaceId(kArbitraryFrameSinkId, LocalFrameId(1, kArbitraryToken)), 1.f, | 101 SurfaceId(kArbitraryFrameSinkId, LocalFrameId(1, kArbitraryToken)), 1.f, |
| 104 gfx::Size(1, 1)); | 102 gfx::Size(1, 1)); |
| 105 layer->SetSurfaceInfo(info); | 103 layer->SetSurfaceInfo(info); |
| 106 layer_tree_host_->GetSurfaceSequenceGenerator()->set_frame_sink_id( | 104 layer_tree_host_->GetSurfaceSequenceGenerator()->set_frame_sink_id( |
| 107 FrameSinkId(1, 1)); | 105 FrameSinkId(1, 1)); |
| 108 layer_tree_->SetRootLayer(layer); | 106 layer_tree_host_->SetRootLayer(layer); |
| 109 | 107 |
| 110 auto animation_host2 = AnimationHost::CreateForTesting(ThreadInstance::MAIN); | 108 auto animation_host2 = AnimationHost::CreateForTesting(ThreadInstance::MAIN); |
| 111 std::unique_ptr<FakeLayerTreeHost> layer_tree_host2 = | 109 std::unique_ptr<FakeLayerTreeHost> layer_tree_host2 = |
| 112 FakeLayerTreeHost::Create(&fake_client_, &task_graph_runner_, | 110 FakeLayerTreeHost::Create(&fake_client_, &task_graph_runner_, |
| 113 animation_host2.get()); | 111 animation_host2.get()); |
| 114 auto layer2 = SurfaceLayer::Create(std::move(ref_factory)); | 112 auto layer2 = SurfaceLayer::Create(std::move(ref_factory)); |
| 115 layer2->SetSurfaceInfo(info); | 113 layer2->SetSurfaceInfo(info); |
| 116 layer_tree_host2->GetSurfaceSequenceGenerator()->set_frame_sink_id( | 114 layer_tree_host2->GetSurfaceSequenceGenerator()->set_frame_sink_id( |
| 117 FrameSinkId(2, 2)); | 115 FrameSinkId(2, 2)); |
| 118 layer_tree_host2->SetRootLayer(layer2); | 116 layer_tree_host2->SetRootLayer(layer2); |
| (...skipping 14 matching lines...) Expand all Loading... |
| 133 EXPECT_TRUE(blank_change == expected2); | 131 EXPECT_TRUE(blank_change == expected2); |
| 134 | 132 |
| 135 // Set of sequences that need to be satisfied should include sequences from | 133 // Set of sequences that need to be satisfied should include sequences from |
| 136 // both trees. | 134 // both trees. |
| 137 EXPECT_TRUE(required_id == SurfaceId(kArbitraryFrameSinkId, | 135 EXPECT_TRUE(required_id == SurfaceId(kArbitraryFrameSinkId, |
| 138 LocalFrameId(1, kArbitraryToken))); | 136 LocalFrameId(1, kArbitraryToken))); |
| 139 EXPECT_EQ(2u, required_seq.size()); | 137 EXPECT_EQ(2u, required_seq.size()); |
| 140 EXPECT_TRUE(required_seq.count(expected1)); | 138 EXPECT_TRUE(required_seq.count(expected1)); |
| 141 EXPECT_TRUE(required_seq.count(expected2)); | 139 EXPECT_TRUE(required_seq.count(expected2)); |
| 142 | 140 |
| 143 layer_tree_->SetRootLayer(nullptr); | 141 layer_tree_host_->SetRootLayer(nullptr); |
| 144 layer_tree_host_.reset(); | 142 layer_tree_host_.reset(); |
| 145 | 143 |
| 146 // Layer was removed so sequence from first LayerTreeHost should be | 144 // Layer was removed so sequence from first LayerTreeHost should be |
| 147 // satisfied. | 145 // satisfied. |
| 148 base::RunLoop().RunUntilIdle(); | 146 base::RunLoop().RunUntilIdle(); |
| 149 EXPECT_TRUE(blank_change == expected1); | 147 EXPECT_TRUE(blank_change == expected1); |
| 150 | 148 |
| 151 // No more SurfaceSequences should have been generated that need to have be | 149 // No more SurfaceSequences should have been generated that need to have be |
| 152 // satisfied. | 150 // satisfied. |
| 153 EXPECT_EQ(2u, required_seq.size()); | 151 EXPECT_EQ(2u, required_seq.size()); |
| (...skipping 11 matching lines...) Expand all Loading... |
| 165 layer_ = SurfaceLayer::Create(new TestSurfaceReferenceFactory( | 163 layer_ = SurfaceLayer::Create(new TestSurfaceReferenceFactory( |
| 166 &satisfied_sequence_, &required_id_, &required_set_)); | 164 &satisfied_sequence_, &required_id_, &required_set_)); |
| 167 SurfaceInfo info( | 165 SurfaceInfo info( |
| 168 SurfaceId(kArbitraryFrameSinkId, LocalFrameId(1, kArbitraryToken)), 1.f, | 166 SurfaceId(kArbitraryFrameSinkId, LocalFrameId(1, kArbitraryToken)), 1.f, |
| 169 gfx::Size(1, 1)); | 167 gfx::Size(1, 1)); |
| 170 layer_->SetSurfaceInfo(info); | 168 layer_->SetSurfaceInfo(info); |
| 171 | 169 |
| 172 // Layer hasn't been added to tree so no SurfaceSequence generated yet. | 170 // Layer hasn't been added to tree so no SurfaceSequence generated yet. |
| 173 EXPECT_EQ(0u, required_set_.size()); | 171 EXPECT_EQ(0u, required_set_.size()); |
| 174 | 172 |
| 175 layer_tree()->SetRootLayer(layer_); | 173 layer_tree_host()->SetRootLayer(layer_); |
| 176 | 174 |
| 177 // Should have SurfaceSequence from first tree. | 175 // Should have SurfaceSequence from first tree. |
| 178 SurfaceSequence expected(kArbitraryFrameSinkId, 1u); | 176 SurfaceSequence expected(kArbitraryFrameSinkId, 1u); |
| 179 EXPECT_TRUE(required_id_ == SurfaceId(kArbitraryFrameSinkId, | 177 EXPECT_TRUE(required_id_ == SurfaceId(kArbitraryFrameSinkId, |
| 180 LocalFrameId(1, kArbitraryToken))); | 178 LocalFrameId(1, kArbitraryToken))); |
| 181 EXPECT_EQ(1u, required_set_.size()); | 179 EXPECT_EQ(1u, required_set_.size()); |
| 182 EXPECT_TRUE(required_set_.count(expected)); | 180 EXPECT_TRUE(required_set_.count(expected)); |
| 183 | 181 |
| 184 gfx::Size bounds(100, 100); | 182 gfx::Size bounds(100, 100); |
| 185 layer_tree()->SetViewportSize(bounds); | 183 layer_tree_host()->SetViewportSize(bounds); |
| 186 | 184 |
| 187 blank_layer_ = SolidColorLayer::Create(); | 185 blank_layer_ = SolidColorLayer::Create(); |
| 188 blank_layer_->SetIsDrawable(true); | 186 blank_layer_->SetIsDrawable(true); |
| 189 blank_layer_->SetBounds(gfx::Size(10, 10)); | 187 blank_layer_->SetBounds(gfx::Size(10, 10)); |
| 190 | 188 |
| 191 PostSetNeedsCommitToMainThread(); | 189 PostSetNeedsCommitToMainThread(); |
| 192 } | 190 } |
| 193 | 191 |
| 194 virtual void ChangeTree() = 0; | 192 virtual void ChangeTree() = 0; |
| 195 | 193 |
| (...skipping 17 matching lines...) Expand all Loading... |
| 213 }; | 211 }; |
| 214 | 212 |
| 215 // Check that SurfaceSequence is sent through swap promise. | 213 // Check that SurfaceSequence is sent through swap promise. |
| 216 class SurfaceLayerSwapPromiseWithDraw : public SurfaceLayerSwapPromise { | 214 class SurfaceLayerSwapPromiseWithDraw : public SurfaceLayerSwapPromise { |
| 217 public: | 215 public: |
| 218 void ChangeTree() override { | 216 void ChangeTree() override { |
| 219 ++commit_count_; | 217 ++commit_count_; |
| 220 switch (commit_count_) { | 218 switch (commit_count_) { |
| 221 case 1: | 219 case 1: |
| 222 // Remove SurfaceLayer from tree to cause SwapPromise to be created. | 220 // Remove SurfaceLayer from tree to cause SwapPromise to be created. |
| 223 layer_tree()->SetRootLayer(blank_layer_); | 221 layer_tree_host()->SetRootLayer(blank_layer_); |
| 224 break; | 222 break; |
| 225 case 2: | 223 case 2: |
| 226 EndTest(); | 224 EndTest(); |
| 227 break; | 225 break; |
| 228 default: | 226 default: |
| 229 NOTREACHED(); | 227 NOTREACHED(); |
| 230 break; | 228 break; |
| 231 } | 229 } |
| 232 } | 230 } |
| 233 | 231 |
| (...skipping 18 matching lines...) Expand all Loading... |
| 252 LayerTreeHostImpl::FrameData* frame, | 250 LayerTreeHostImpl::FrameData* frame, |
| 253 DrawResult draw_result) override { | 251 DrawResult draw_result) override { |
| 254 return DRAW_ABORTED_MISSING_HIGH_RES_CONTENT; | 252 return DRAW_ABORTED_MISSING_HIGH_RES_CONTENT; |
| 255 } | 253 } |
| 256 | 254 |
| 257 void ChangeTree() override { | 255 void ChangeTree() override { |
| 258 ++commit_count_; | 256 ++commit_count_; |
| 259 switch (commit_count_) { | 257 switch (commit_count_) { |
| 260 case 1: | 258 case 1: |
| 261 // Remove SurfaceLayer from tree to cause SwapPromise to be created. | 259 // Remove SurfaceLayer from tree to cause SwapPromise to be created. |
| 262 layer_tree()->SetRootLayer(blank_layer_); | 260 layer_tree_host()->SetRootLayer(blank_layer_); |
| 263 break; | 261 break; |
| 264 case 2: | 262 case 2: |
| 265 layer_tree_host()->SetNeedsCommit(); | 263 layer_tree_host()->SetNeedsCommit(); |
| 266 break; | 264 break; |
| 267 default: | 265 default: |
| 268 EndTest(); | 266 EndTest(); |
| 269 break; | 267 break; |
| 270 } | 268 } |
| 271 } | 269 } |
| 272 | 270 |
| 273 void AfterTest() override { | 271 void AfterTest() override { |
| 274 EXPECT_TRUE(required_id_ == SurfaceId(kArbitraryFrameSinkId, | 272 EXPECT_TRUE(required_id_ == SurfaceId(kArbitraryFrameSinkId, |
| 275 LocalFrameId(1, kArbitraryToken))); | 273 LocalFrameId(1, kArbitraryToken))); |
| 276 EXPECT_EQ(1u, required_set_.size()); | 274 EXPECT_EQ(1u, required_set_.size()); |
| 277 EXPECT_TRUE(satisfied_sequence_ == | 275 EXPECT_TRUE(satisfied_sequence_ == |
| 278 SurfaceSequence(kArbitraryFrameSinkId, 1u)); | 276 SurfaceSequence(kArbitraryFrameSinkId, 1u)); |
| 279 } | 277 } |
| 280 }; | 278 }; |
| 281 | 279 |
| 282 MULTI_THREAD_TEST_F(SurfaceLayerSwapPromiseWithoutDraw); | 280 MULTI_THREAD_TEST_F(SurfaceLayerSwapPromiseWithoutDraw); |
| 283 | 281 |
| 284 } // namespace | 282 } // namespace |
| 285 } // namespace cc | 283 } // namespace cc |
| OLD | NEW |