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 "cc/trees/layer_tree_impl.h" | 5 #include "cc/trees/layer_tree_impl.h" |
6 | 6 |
7 #include "cc/layers/heads_up_display_layer_impl.h" | 7 #include "cc/layers/heads_up_display_layer_impl.h" |
8 #include "cc/test/fake_layer_tree_host_impl.h" | 8 #include "cc/test/fake_layer_tree_host_impl.h" |
9 #include "cc/test/geometry_test_utils.h" | 9 #include "cc/test/geometry_test_utils.h" |
10 #include "cc/test/layer_test_common.h" | 10 #include "cc/test/layer_test_common.h" |
(...skipping 2202 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
2213 CHECK_EQ(1u, RenderSurfaceLayerList().size()); | 2213 CHECK_EQ(1u, RenderSurfaceLayerList().size()); |
2214 | 2214 |
2215 gfx::PointF test_point = gfx::PointF(1.f, 1.f); | 2215 gfx::PointF test_point = gfx::PointF(1.f, 1.f); |
2216 LayerImpl* result_layer = | 2216 LayerImpl* result_layer = |
2217 host_impl().active_tree()->FindLayerThatIsHitByPoint(test_point); | 2217 host_impl().active_tree()->FindLayerThatIsHitByPoint(test_point); |
2218 | 2218 |
2219 CHECK(result_layer); | 2219 CHECK(result_layer); |
2220 EXPECT_EQ(2, result_layer->id()); | 2220 EXPECT_EQ(2, result_layer->id()); |
2221 } | 2221 } |
2222 | 2222 |
2223 namespace { | |
2224 | |
2225 class CC_EXPORT PersistentSwapPromise | |
2226 : public SwapPromise, | |
2227 public base::SupportsWeakPtr<PersistentSwapPromise> { | |
2228 public: | |
2229 PersistentSwapPromise() = default; | |
2230 ~PersistentSwapPromise() override = default; | |
2231 | |
2232 void DidActivate() override {} | |
2233 void DidSwap(CompositorFrameMetadata* metadata) override {} | |
2234 | |
2235 DidNotSwapAction DidNotSwap(DidNotSwapReason reason) override { | |
2236 return DidNotSwapAction::KEEP_ACTIVE; | |
2237 } | |
2238 | |
2239 void OnCommit() override {} | |
2240 int64_t TraceId() const override { return 0; } | |
2241 }; | |
2242 | |
2243 class CC_EXPORT NotPersistentSwapPromise | |
2244 : public SwapPromise, | |
2245 public base::SupportsWeakPtr<NotPersistentSwapPromise> { | |
2246 public: | |
2247 NotPersistentSwapPromise() = default; | |
2248 ~NotPersistentSwapPromise() override = default; | |
2249 | |
2250 void DidActivate() override {} | |
2251 void DidSwap(CompositorFrameMetadata* metadata) override {} | |
2252 | |
2253 DidNotSwapAction DidNotSwap(DidNotSwapReason reason) override { | |
2254 return DidNotSwapAction::DEFAULT_ACTION; | |
2255 } | |
2256 | |
2257 void OnCommit() override {} | |
2258 int64_t TraceId() const override { return 0; } | |
2259 }; | |
2260 | |
2261 } // namespace | |
2262 | |
2263 TEST_F(LayerTreeImplTest, PersistentSwapPromisesAreKeptAlive) { | |
2264 const size_t promises_count = 2; | |
2265 | |
2266 std::vector<base::WeakPtr<PersistentSwapPromise>> persistent_promises; | |
2267 std::vector<std::unique_ptr<PersistentSwapPromise>> | |
2268 persistent_promises_to_pass; | |
2269 for (size_t i = 0; i < promises_count; ++i) { | |
2270 persistent_promises_to_pass.push_back( | |
2271 base::WrapUnique(new PersistentSwapPromise())); | |
2272 } | |
2273 | |
2274 for (auto& promise : persistent_promises_to_pass) { | |
2275 persistent_promises.push_back(promise->AsWeakPtr()); | |
2276 host_impl().active_tree()->QueueSwapPromise(std::move(promise)); | |
2277 } | |
2278 | |
2279 std::vector<std::unique_ptr<SwapPromise>> promises; | |
2280 host_impl().active_tree()->PassSwapPromises(&promises); | |
2281 host_impl().active_tree()->BreakSwapPromises( | |
2282 SwapPromise::DidNotSwapReason::SWAP_FAILS); | |
2283 | |
2284 ASSERT_EQ(promises_count, persistent_promises.size()); | |
2285 for (size_t i = 0; i < persistent_promises.size(); ++i) { | |
2286 EXPECT_TRUE(persistent_promises[i]) << "While checking case #" << i; | |
danakj
2016/08/10 01:04:15
Instead of checking the destructor didn't run (wha
svartmetal
2016/08/10 17:38:22
Reasonable. Made EXPECT_CALL for DidSwap.
| |
2287 } | |
2288 } | |
2289 | |
2290 TEST_F(LayerTreeImplTest, NotPersistentSwapPromisesAreDroppedWhenSwapFails) { | |
2291 const size_t promises_count = 2; | |
2292 | |
2293 std::vector<base::WeakPtr<NotPersistentSwapPromise>> not_persistent_promises; | |
2294 std::vector<std::unique_ptr<NotPersistentSwapPromise>> | |
2295 not_persistent_promises_to_pass; | |
2296 for (size_t i = 0; i < promises_count; ++i) { | |
2297 not_persistent_promises_to_pass.push_back( | |
2298 base::WrapUnique(new NotPersistentSwapPromise())); | |
2299 } | |
2300 | |
2301 for (auto& promise : not_persistent_promises_to_pass) { | |
2302 not_persistent_promises.push_back(promise->AsWeakPtr()); | |
2303 host_impl().active_tree()->QueueSwapPromise(std::move(promise)); | |
2304 } | |
2305 std::vector<std::unique_ptr<SwapPromise>> promises; | |
2306 host_impl().active_tree()->PassSwapPromises(&promises); | |
2307 | |
2308 ASSERT_EQ(promises_count, not_persistent_promises.size()); | |
2309 for (size_t i = 0; i < not_persistent_promises.size(); ++i) { | |
2310 EXPECT_FALSE(not_persistent_promises[i]) << "While checking case #" << i; | |
2311 } | |
2312 | |
2313 // Finally, check that not persistent promise doesn't survive | |
2314 // |LayerTreeImpl::BreakSwapPromises|. | |
2315 { | |
2316 std::unique_ptr<NotPersistentSwapPromise> promise( | |
2317 new NotPersistentSwapPromise()); | |
2318 auto weak_promise = promise->AsWeakPtr(); | |
2319 host_impl().active_tree()->QueueSwapPromise(std::move(promise)); | |
2320 | |
2321 host_impl().active_tree()->BreakSwapPromises( | |
2322 SwapPromise::DidNotSwapReason::SWAP_FAILS); | |
2323 EXPECT_FALSE(weak_promise); | |
2324 } | |
2325 } | |
2326 | |
2223 } // namespace | 2327 } // namespace |
2224 } // namespace cc | 2328 } // namespace cc |
OLD | NEW |