| 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 163 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 174 | 174 |
| 175 SurfaceId required_id_; | 175 SurfaceId required_id_; |
| 176 std::set<SurfaceSequence> required_set_; | 176 std::set<SurfaceSequence> required_set_; |
| 177 }; | 177 }; |
| 178 | 178 |
| 179 // Check that SurfaceSequence is sent through swap promise. | 179 // Check that SurfaceSequence is sent through swap promise. |
| 180 class SurfaceLayerSwapPromiseWithDraw : public SurfaceLayerSwapPromise { | 180 class SurfaceLayerSwapPromiseWithDraw : public SurfaceLayerSwapPromise { |
| 181 public: | 181 public: |
| 182 SurfaceLayerSwapPromiseWithDraw() : SurfaceLayerSwapPromise() {} | 182 SurfaceLayerSwapPromiseWithDraw() : SurfaceLayerSwapPromise() {} |
| 183 | 183 |
| 184 std::unique_ptr<OutputSurface> CreateOutputSurface() override { |
| 185 auto ret = delegating_renderer() ? FakeOutputSurface::CreateDelegating3d() |
| 186 : FakeOutputSurface::Create3d(); |
| 187 output_surface_ = ret.get(); |
| 188 return std::move(ret); |
| 189 } |
| 190 |
| 184 void ChangeTree() override { | 191 void ChangeTree() override { |
| 185 ++commit_count_; | 192 ++commit_count_; |
| 186 switch (commit_count_) { | 193 switch (commit_count_) { |
| 187 case 1: | 194 case 1: |
| 188 // Remove SurfaceLayer from tree to cause SwapPromise to be created. | 195 // Remove SurfaceLayer from tree to cause SwapPromise to be created. |
| 189 layer_tree_host()->SetRootLayer(blank_layer_); | 196 layer_tree_host()->SetRootLayer(blank_layer_); |
| 190 break; | 197 break; |
| 191 case 2: | 198 case 2: |
| 192 break; | 199 break; |
| 193 default: | 200 default: |
| 194 NOTREACHED(); | 201 NOTREACHED(); |
| 195 break; | 202 break; |
| 196 } | 203 } |
| 197 } | 204 } |
| 198 | 205 |
| 199 void SwapBuffersCompleteOnThread() override { | 206 void SwapBuffersCompleteOnThread() override { |
| 200 std::vector<uint32_t>& satisfied = | 207 std::vector<uint32_t>& satisfied = |
| 201 output_surface()->last_sent_frame()->metadata.satisfies_sequences; | 208 output_surface_->last_sent_frame()->metadata.satisfies_sequences; |
| 202 EXPECT_LE(satisfied.size(), 1u); | 209 EXPECT_LE(satisfied.size(), 1u); |
| 203 if (satisfied.size() == 1) { | 210 if (satisfied.size() == 1) { |
| 204 // Eventually the one SurfaceSequence should be satisfied, but only | 211 // Eventually the one SurfaceSequence should be satisfied, but only |
| 205 // after the layer was removed from the tree, and only once. | 212 // after the layer was removed from the tree, and only once. |
| 206 EXPECT_EQ(1u, satisfied[0]); | 213 EXPECT_EQ(1u, satisfied[0]); |
| 207 EXPECT_LE(1, commit_count_); | 214 EXPECT_LE(1, commit_count_); |
| 208 EXPECT_FALSE(sequence_was_satisfied_); | 215 EXPECT_FALSE(sequence_was_satisfied_); |
| 209 sequence_was_satisfied_ = true; | 216 sequence_was_satisfied_ = true; |
| 210 EndTest(); | 217 EndTest(); |
| 211 } | 218 } |
| 212 } | 219 } |
| 213 | 220 |
| 214 void AfterTest() override { | 221 void AfterTest() override { |
| 215 EXPECT_TRUE(required_id_ == SurfaceId(kArbitraryClientId, 1, 0)); | 222 EXPECT_TRUE(required_id_ == SurfaceId(kArbitraryClientId, 1, 0)); |
| 216 EXPECT_EQ(1u, required_set_.size()); | 223 EXPECT_EQ(1u, required_set_.size()); |
| 217 // Sequence should have been satisfied through Swap, not with the | 224 // Sequence should have been satisfied through Swap, not with the |
| 218 // callback. | 225 // callback. |
| 219 EXPECT_TRUE(satisfied_sequence_.is_null()); | 226 EXPECT_TRUE(satisfied_sequence_.is_null()); |
| 220 } | 227 } |
| 228 |
| 229 FakeOutputSurface* output_surface_; |
| 221 }; | 230 }; |
| 222 | 231 |
| 223 // TODO(jbauman): Reenable on single thread once http://crbug.com/421923 is | 232 // TODO(jbauman): Reenable on single thread once http://crbug.com/421923 is |
| 224 // fixed. | 233 // fixed. |
| 225 MULTI_THREAD_TEST_F(SurfaceLayerSwapPromiseWithDraw); | 234 MULTI_THREAD_TEST_F(SurfaceLayerSwapPromiseWithDraw); |
| 226 | 235 |
| 227 // Check that SurfaceSequence is sent through swap promise and resolved when | 236 // Check that SurfaceSequence is sent through swap promise and resolved when |
| 228 // swap fails. | 237 // swap fails. |
| 229 class SurfaceLayerSwapPromiseWithoutDraw : public SurfaceLayerSwapPromise { | 238 class SurfaceLayerSwapPromiseWithoutDraw : public SurfaceLayerSwapPromise { |
| 230 public: | 239 public: |
| (...skipping 26 matching lines...) Expand all Loading... |
| 257 EXPECT_EQ(1u, required_set_.size()); | 266 EXPECT_EQ(1u, required_set_.size()); |
| 258 // Sequence should have been satisfied with the callback. | 267 // Sequence should have been satisfied with the callback. |
| 259 EXPECT_TRUE(satisfied_sequence_ == SurfaceSequence(1u, 1u)); | 268 EXPECT_TRUE(satisfied_sequence_ == SurfaceSequence(1u, 1u)); |
| 260 } | 269 } |
| 261 }; | 270 }; |
| 262 | 271 |
| 263 MULTI_THREAD_TEST_F(SurfaceLayerSwapPromiseWithoutDraw); | 272 MULTI_THREAD_TEST_F(SurfaceLayerSwapPromiseWithoutDraw); |
| 264 | 273 |
| 265 } // namespace | 274 } // namespace |
| 266 } // namespace cc | 275 } // namespace cc |
| OLD | NEW |