OLD | NEW |
1 // Copyright 2011 The Chromium Authors. All rights reserved. | 1 // Copyright 2011 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_host_impl.h" | 5 #include "cc/trees/layer_tree_host_impl.h" |
6 | 6 |
7 #include <algorithm> | 7 #include <algorithm> |
8 #include <cmath> | 8 #include <cmath> |
9 | 9 |
10 #include "base/bind.h" | 10 #include "base/bind.h" |
(...skipping 142 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
153 scrollbar_fade_start_ = start_fade; | 153 scrollbar_fade_start_ = start_fade; |
154 requested_scrollbar_animation_delay_ = delay; | 154 requested_scrollbar_animation_delay_ = delay; |
155 } | 155 } |
156 void DidActivateSyncTree() override {} | 156 void DidActivateSyncTree() override {} |
157 void DidManageTiles() override {} | 157 void DidManageTiles() override {} |
158 | 158 |
159 void set_reduce_memory_result(bool reduce_memory_result) { | 159 void set_reduce_memory_result(bool reduce_memory_result) { |
160 reduce_memory_result_ = reduce_memory_result; | 160 reduce_memory_result_ = reduce_memory_result; |
161 } | 161 } |
162 | 162 |
163 bool CreateHostImpl(const LayerTreeSettings& settings, | 163 virtual bool CreateHostImpl(const LayerTreeSettings& settings, |
164 scoped_ptr<OutputSurface> output_surface) { | 164 scoped_ptr<OutputSurface> output_surface) { |
165 host_impl_ = LayerTreeHostImpl::Create(settings, | 165 host_impl_ = LayerTreeHostImpl::Create(settings, |
166 this, | 166 this, |
167 &proxy_, | 167 &proxy_, |
168 &stats_instrumentation_, | 168 &stats_instrumentation_, |
169 shared_bitmap_manager_.get(), | 169 shared_bitmap_manager_.get(), |
170 gpu_memory_buffer_manager_.get(), | 170 gpu_memory_buffer_manager_.get(), |
171 0); | 171 0); |
172 bool init = host_impl_->InitializeRenderer(output_surface.Pass()); | 172 bool init = host_impl_->InitializeRenderer(output_surface.Pass()); |
173 host_impl_->SetViewportSize(gfx::Size(10, 10)); | 173 host_impl_->SetViewportSize(gfx::Size(10, 10)); |
174 return init; | 174 return init; |
(...skipping 2078 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2253 EXPECT_FALSE(did_request_commit_); | 2253 EXPECT_FALSE(did_request_commit_); |
2254 } | 2254 } |
2255 | 2255 |
2256 // TODO(bokan): Convert these tests to create inner and outer viewports. | 2256 // TODO(bokan): Convert these tests to create inner and outer viewports. |
2257 class LayerTreeHostImplTopControlsTest : public LayerTreeHostImplTest { | 2257 class LayerTreeHostImplTopControlsTest : public LayerTreeHostImplTest { |
2258 public: | 2258 public: |
2259 LayerTreeHostImplTopControlsTest() | 2259 LayerTreeHostImplTopControlsTest() |
2260 // Make the clip size the same as the layer (content) size so the layer is | 2260 // Make the clip size the same as the layer (content) size so the layer is |
2261 // non-scrollable. | 2261 // non-scrollable. |
2262 : layer_size_(10, 10), | 2262 : layer_size_(10, 10), |
2263 clip_size_(layer_size_) { | 2263 clip_size_(layer_size_), |
| 2264 top_controls_height_(50) { |
2264 settings_.calculate_top_controls_position = true; | 2265 settings_.calculate_top_controls_position = true; |
2265 settings_.top_controls_height = 50; | |
2266 settings_.use_pinch_virtual_viewport = true; | 2266 settings_.use_pinch_virtual_viewport = true; |
2267 | 2267 |
2268 viewport_size_ = | 2268 viewport_size_ = gfx::Size(clip_size_.width(), |
2269 gfx::Size(clip_size_.width(), | 2269 clip_size_.height() + top_controls_height_); |
2270 clip_size_.height() + settings_.top_controls_height); | 2270 } |
| 2271 |
| 2272 bool CreateHostImpl(const LayerTreeSettings& settings, |
| 2273 scoped_ptr<OutputSurface> output_surface) override { |
| 2274 bool init = |
| 2275 LayerTreeHostImplTest::CreateHostImpl(settings, output_surface.Pass()); |
| 2276 if (init && settings.calculate_top_controls_position) { |
| 2277 host_impl_->active_tree()->set_top_controls_height(top_controls_height_); |
| 2278 host_impl_->active_tree()->set_top_controls_delta(top_controls_height_); |
| 2279 host_impl_->top_controls_manager()->SetTopControlsHeight( |
| 2280 top_controls_height_); |
| 2281 } |
| 2282 return init; |
2271 } | 2283 } |
2272 | 2284 |
2273 void SetupTopControlsAndScrollLayer() { | 2285 void SetupTopControlsAndScrollLayer() { |
2274 scoped_ptr<LayerImpl> root = | 2286 scoped_ptr<LayerImpl> root = |
2275 LayerImpl::Create(host_impl_->active_tree(), 1); | 2287 LayerImpl::Create(host_impl_->active_tree(), 1); |
2276 scoped_ptr<LayerImpl> root_clip = | 2288 scoped_ptr<LayerImpl> root_clip = |
2277 LayerImpl::Create(host_impl_->active_tree(), 2); | 2289 LayerImpl::Create(host_impl_->active_tree(), 2); |
2278 root_clip->SetBounds(clip_size_); | 2290 root_clip->SetBounds(clip_size_); |
2279 root->SetScrollClipLayer(root_clip->id()); | 2291 root->SetScrollClipLayer(root_clip->id()); |
2280 root->SetBounds(layer_size_); | 2292 root->SetBounds(layer_size_); |
2281 root->SetContentBounds(layer_size_); | 2293 root->SetContentBounds(layer_size_); |
2282 root->SetPosition(gfx::PointF()); | 2294 root->SetPosition(gfx::PointF()); |
2283 root->SetDrawsContent(false); | 2295 root->SetDrawsContent(false); |
2284 root->SetIsContainerForFixedPositionLayers(true); | 2296 root->SetIsContainerForFixedPositionLayers(true); |
2285 int inner_viewport_scroll_layer_id = root->id(); | 2297 int inner_viewport_scroll_layer_id = root->id(); |
2286 int page_scale_layer_id = root_clip->id(); | 2298 int page_scale_layer_id = root_clip->id(); |
2287 root_clip->AddChild(root.Pass()); | 2299 root_clip->AddChild(root.Pass()); |
2288 host_impl_->active_tree()->SetRootLayer(root_clip.Pass()); | 2300 host_impl_->active_tree()->SetRootLayer(root_clip.Pass()); |
2289 host_impl_->active_tree()->SetViewportLayersFromIds( | 2301 host_impl_->active_tree()->SetViewportLayersFromIds( |
2290 page_scale_layer_id, inner_viewport_scroll_layer_id, Layer::INVALID_ID); | 2302 page_scale_layer_id, inner_viewport_scroll_layer_id, Layer::INVALID_ID); |
2291 // Set a viewport size that is large enough to contain both the top controls | 2303 // Set a viewport size that is large enough to contain both the top controls |
2292 // and some content. | 2304 // and some content. |
2293 host_impl_->SetViewportSize(viewport_size_); | 2305 host_impl_->SetViewportSize(viewport_size_); |
2294 host_impl_->SetTopControlsLayoutHeight( | 2306 host_impl_->SetTopControlsShrinkBlinkSize(true); |
2295 settings_.top_controls_height); | |
2296 | 2307 |
2297 host_impl_->CreatePendingTree(); | 2308 host_impl_->CreatePendingTree(); |
2298 root = | 2309 root = |
2299 LayerImpl::Create(host_impl_->sync_tree(), 1); | 2310 LayerImpl::Create(host_impl_->sync_tree(), 1); |
2300 root_clip = | 2311 root_clip = |
2301 LayerImpl::Create(host_impl_->sync_tree(), 2); | 2312 LayerImpl::Create(host_impl_->sync_tree(), 2); |
2302 root_clip->SetBounds(clip_size_); | 2313 root_clip->SetBounds(clip_size_); |
2303 root->SetScrollClipLayer(root_clip->id()); | 2314 root->SetScrollClipLayer(root_clip->id()); |
2304 root->SetBounds(layer_size_); | 2315 root->SetBounds(layer_size_); |
2305 root->SetContentBounds(layer_size_); | 2316 root->SetContentBounds(layer_size_); |
2306 root->SetPosition(gfx::PointF()); | 2317 root->SetPosition(gfx::PointF()); |
2307 root->SetDrawsContent(false); | 2318 root->SetDrawsContent(false); |
2308 root->SetIsContainerForFixedPositionLayers(true); | 2319 root->SetIsContainerForFixedPositionLayers(true); |
2309 inner_viewport_scroll_layer_id = root->id(); | 2320 inner_viewport_scroll_layer_id = root->id(); |
2310 page_scale_layer_id = root_clip->id(); | 2321 page_scale_layer_id = root_clip->id(); |
2311 root_clip->AddChild(root.Pass()); | 2322 root_clip->AddChild(root.Pass()); |
2312 host_impl_->sync_tree()->SetRootLayer(root_clip.Pass()); | 2323 host_impl_->sync_tree()->SetRootLayer(root_clip.Pass()); |
2313 host_impl_->sync_tree()->SetViewportLayersFromIds( | 2324 host_impl_->sync_tree()->SetViewportLayersFromIds( |
2314 page_scale_layer_id, inner_viewport_scroll_layer_id, Layer::INVALID_ID); | 2325 page_scale_layer_id, inner_viewport_scroll_layer_id, Layer::INVALID_ID); |
2315 // Set a viewport size that is large enough to contain both the top controls | 2326 // Set a viewport size that is large enough to contain both the top controls |
2316 // and some content. | 2327 // and some content. |
2317 host_impl_->SetViewportSize(viewport_size_); | 2328 host_impl_->SetViewportSize(viewport_size_); |
2318 host_impl_->sync_tree()->set_top_controls_layout_height( | 2329 host_impl_->sync_tree()->set_top_controls_height(top_controls_height_); |
2319 settings_.top_controls_height); | 2330 host_impl_->sync_tree()->set_top_controls_shrink_blink_size(true); |
2320 } | 2331 } |
2321 | 2332 |
2322 void SetupTopControlsAndScrollLayerWithVirtualViewport( | 2333 void SetupTopControlsAndScrollLayerWithVirtualViewport( |
2323 const gfx::Size& inner_viewport_size, | 2334 const gfx::Size& inner_viewport_size, |
2324 const gfx::Size& outer_viewport_size, | 2335 const gfx::Size& outer_viewport_size, |
2325 const gfx::Size& scroll_layer_size) { | 2336 const gfx::Size& scroll_layer_size) { |
2326 CreateHostImpl(settings_, CreateOutputSurface()); | 2337 CreateHostImpl(settings_, CreateOutputSurface()); |
2327 host_impl_->SetTopControlsLayoutHeight( | 2338 host_impl_->SetTopControlsShrinkBlinkSize(true); |
2328 settings_.top_controls_height); | |
2329 | 2339 |
2330 scoped_ptr<LayerImpl> root = | 2340 scoped_ptr<LayerImpl> root = |
2331 LayerImpl::Create(host_impl_->active_tree(), 1); | 2341 LayerImpl::Create(host_impl_->active_tree(), 1); |
2332 scoped_ptr<LayerImpl> root_clip = | 2342 scoped_ptr<LayerImpl> root_clip = |
2333 LayerImpl::Create(host_impl_->active_tree(), 2); | 2343 LayerImpl::Create(host_impl_->active_tree(), 2); |
2334 scoped_ptr<LayerImpl> page_scale = | 2344 scoped_ptr<LayerImpl> page_scale = |
2335 LayerImpl::Create(host_impl_->active_tree(), 3); | 2345 LayerImpl::Create(host_impl_->active_tree(), 3); |
2336 | 2346 |
2337 scoped_ptr<LayerImpl> outer_scroll = | 2347 scoped_ptr<LayerImpl> outer_scroll = |
2338 LayerImpl::Create(host_impl_->active_tree(), 4); | 2348 LayerImpl::Create(host_impl_->active_tree(), 4); |
(...skipping 33 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2372 | 2382 |
2373 host_impl_->SetViewportSize(inner_viewport_size); | 2383 host_impl_->SetViewportSize(inner_viewport_size); |
2374 LayerImpl* root_clip_ptr = host_impl_->active_tree()->root_layer(); | 2384 LayerImpl* root_clip_ptr = host_impl_->active_tree()->root_layer(); |
2375 EXPECT_EQ(inner_viewport_size, root_clip_ptr->bounds()); | 2385 EXPECT_EQ(inner_viewport_size, root_clip_ptr->bounds()); |
2376 } | 2386 } |
2377 | 2387 |
2378 protected: | 2388 protected: |
2379 gfx::Size layer_size_; | 2389 gfx::Size layer_size_; |
2380 gfx::Size clip_size_; | 2390 gfx::Size clip_size_; |
2381 gfx::Size viewport_size_; | 2391 gfx::Size viewport_size_; |
| 2392 float top_controls_height_; |
2382 | 2393 |
2383 LayerTreeSettings settings_; | 2394 LayerTreeSettings settings_; |
2384 }; // class LayerTreeHostImplTopControlsTest | 2395 }; // class LayerTreeHostImplTopControlsTest |
2385 | 2396 |
2386 TEST_F(LayerTreeHostImplTopControlsTest, ScrollTopControlsByFractionalAmount) { | 2397 TEST_F(LayerTreeHostImplTopControlsTest, ScrollTopControlsByFractionalAmount) { |
2387 SetupTopControlsAndScrollLayerWithVirtualViewport( | 2398 SetupTopControlsAndScrollLayerWithVirtualViewport( |
2388 gfx::Size(10, 10), gfx::Size(10, 10), gfx::Size(10, 10)); | 2399 gfx::Size(10, 10), gfx::Size(10, 10), gfx::Size(10, 10)); |
2389 DrawFrame(); | 2400 DrawFrame(); |
2390 | 2401 |
2391 EXPECT_EQ(InputHandler::ScrollStarted, | 2402 EXPECT_EQ(InputHandler::ScrollStarted, |
(...skipping 91 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2483 } | 2494 } |
2484 | 2495 |
2485 // Test that the fixed position container delta is appropriately adjusted | 2496 // Test that the fixed position container delta is appropriately adjusted |
2486 // by the top controls showing/hiding and page scale doesn't affect it. | 2497 // by the top controls showing/hiding and page scale doesn't affect it. |
2487 TEST_F(LayerTreeHostImplTopControlsTest, FixedContainerDelta) { | 2498 TEST_F(LayerTreeHostImplTopControlsTest, FixedContainerDelta) { |
2488 SetupTopControlsAndScrollLayerWithVirtualViewport( | 2499 SetupTopControlsAndScrollLayerWithVirtualViewport( |
2489 gfx::Size(100, 100), gfx::Size(100, 100), gfx::Size(100, 100)); | 2500 gfx::Size(100, 100), gfx::Size(100, 100), gfx::Size(100, 100)); |
2490 DrawFrame(); | 2501 DrawFrame(); |
2491 | 2502 |
2492 float page_scale = 1.5f; | 2503 float page_scale = 1.5f; |
2493 float top_controls_height = settings_.top_controls_height; | |
2494 LayerImpl* outer_viewport_scroll_layer = | 2504 LayerImpl* outer_viewport_scroll_layer = |
2495 host_impl_->active_tree()->OuterViewportScrollLayer(); | 2505 host_impl_->active_tree()->OuterViewportScrollLayer(); |
2496 | 2506 |
2497 // Zoom in, since the fixed container is the outer viewport, the delta should | 2507 // Zoom in, since the fixed container is the outer viewport, the delta should |
2498 // not be scaled. | 2508 // not be scaled. |
2499 host_impl_->active_tree()->SetPageScaleFactorAndLimits(page_scale, 1.f, 2.f); | 2509 host_impl_->active_tree()->SetPageScaleFactorAndLimits(page_scale, 1.f, 2.f); |
2500 | 2510 |
2501 EXPECT_EQ(InputHandler::ScrollStarted, | 2511 EXPECT_EQ(InputHandler::ScrollStarted, |
2502 host_impl_->ScrollBegin(gfx::Point(), InputHandler::Gesture)); | 2512 host_impl_->ScrollBegin(gfx::Point(), InputHandler::Gesture)); |
2503 | 2513 |
2504 // Scroll down, the top controls hiding should expand the viewport size so | 2514 // Scroll down, the top controls hiding should expand the viewport size so |
2505 // the delta should be equal to the scroll distance. | 2515 // the delta should be equal to the scroll distance. |
2506 gfx::Vector2dF top_controls_scroll_delta(0.f, 20.f); | 2516 gfx::Vector2dF top_controls_scroll_delta(0.f, 20.f); |
2507 host_impl_->top_controls_manager()->ScrollBegin(); | 2517 host_impl_->top_controls_manager()->ScrollBegin(); |
2508 host_impl_->top_controls_manager()->ScrollBy(top_controls_scroll_delta); | 2518 host_impl_->top_controls_manager()->ScrollBy(top_controls_scroll_delta); |
2509 EXPECT_EQ(top_controls_height - top_controls_scroll_delta.y(), | 2519 EXPECT_EQ(top_controls_height_ - top_controls_scroll_delta.y(), |
2510 host_impl_->top_controls_manager()->ContentTopOffset()); | 2520 host_impl_->top_controls_manager()->ContentTopOffset()); |
2511 EXPECT_VECTOR_EQ(top_controls_scroll_delta, | 2521 EXPECT_VECTOR_EQ(top_controls_scroll_delta, |
2512 outer_viewport_scroll_layer->FixedContainerSizeDelta()); | 2522 outer_viewport_scroll_layer->FixedContainerSizeDelta()); |
2513 host_impl_->ScrollEnd(); | 2523 host_impl_->ScrollEnd(); |
2514 | 2524 |
2515 // Scroll past the maximum extent. The delta shouldn't be greater than the | 2525 // Scroll past the maximum extent. The delta shouldn't be greater than the |
2516 // top controls height. | 2526 // top controls height. |
2517 host_impl_->top_controls_manager()->ScrollBegin(); | 2527 host_impl_->top_controls_manager()->ScrollBegin(); |
2518 host_impl_->top_controls_manager()->ScrollBy(top_controls_scroll_delta); | 2528 host_impl_->top_controls_manager()->ScrollBy(top_controls_scroll_delta); |
2519 host_impl_->top_controls_manager()->ScrollBy(top_controls_scroll_delta); | 2529 host_impl_->top_controls_manager()->ScrollBy(top_controls_scroll_delta); |
2520 host_impl_->top_controls_manager()->ScrollBy(top_controls_scroll_delta); | 2530 host_impl_->top_controls_manager()->ScrollBy(top_controls_scroll_delta); |
2521 EXPECT_EQ(0.f, host_impl_->top_controls_manager()->ContentTopOffset()); | 2531 EXPECT_EQ(0.f, host_impl_->top_controls_manager()->ContentTopOffset()); |
2522 EXPECT_VECTOR_EQ(gfx::Vector2dF(0, top_controls_height), | 2532 EXPECT_VECTOR_EQ(gfx::Vector2dF(0, top_controls_height_), |
2523 outer_viewport_scroll_layer->FixedContainerSizeDelta()); | 2533 outer_viewport_scroll_layer->FixedContainerSizeDelta()); |
2524 host_impl_->ScrollEnd(); | 2534 host_impl_->ScrollEnd(); |
2525 | 2535 |
2526 // Scroll in the direction to make the top controls show. | 2536 // Scroll in the direction to make the top controls show. |
2527 host_impl_->top_controls_manager()->ScrollBegin(); | 2537 host_impl_->top_controls_manager()->ScrollBegin(); |
2528 host_impl_->top_controls_manager()->ScrollBy(-top_controls_scroll_delta); | 2538 host_impl_->top_controls_manager()->ScrollBy(-top_controls_scroll_delta); |
2529 EXPECT_EQ(top_controls_scroll_delta.y(), | 2539 EXPECT_EQ(top_controls_scroll_delta.y(), |
2530 host_impl_->top_controls_manager()->ContentTopOffset()); | 2540 host_impl_->top_controls_manager()->ContentTopOffset()); |
2531 EXPECT_VECTOR_EQ( | 2541 EXPECT_VECTOR_EQ( |
2532 gfx::Vector2dF(0, top_controls_height - top_controls_scroll_delta.y()), | 2542 gfx::Vector2dF(0, top_controls_height_ - top_controls_scroll_delta.y()), |
2533 outer_viewport_scroll_layer->FixedContainerSizeDelta()); | 2543 outer_viewport_scroll_layer->FixedContainerSizeDelta()); |
2534 host_impl_->top_controls_manager()->ScrollEnd(); | 2544 host_impl_->top_controls_manager()->ScrollEnd(); |
2535 } | 2545 } |
2536 | 2546 |
2537 // Ensure setting the top controls position explicitly using the setters on the | 2547 // Ensure setting the top controls position explicitly using the setters on the |
2538 // TreeImpl correctly affects the top controls manager and viewport bounds. | 2548 // TreeImpl correctly affects the top controls manager and viewport bounds. |
2539 TEST_F(LayerTreeHostImplTopControlsTest, PositionTopControlsExplicitly) { | 2549 TEST_F(LayerTreeHostImplTopControlsTest, PositionTopControlsExplicitly) { |
2540 CreateHostImpl(settings_, CreateOutputSurface()); | 2550 CreateHostImpl(settings_, CreateOutputSurface()); |
2541 SetupTopControlsAndScrollLayer(); | 2551 SetupTopControlsAndScrollLayer(); |
2542 DrawFrame(); | 2552 DrawFrame(); |
(...skipping 51 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2594 // Test that changing the top controls layout height is correctly applied to | 2604 // Test that changing the top controls layout height is correctly applied to |
2595 // the inner viewport container bounds. That is, the top controls layout | 2605 // the inner viewport container bounds. That is, the top controls layout |
2596 // height is the amount that the inner viewport container was shrunk outside | 2606 // height is the amount that the inner viewport container was shrunk outside |
2597 // the compositor to accommodate the top controls. | 2607 // the compositor to accommodate the top controls. |
2598 TEST_F(LayerTreeHostImplTopControlsTest, TopControlsLayoutHeightChanged) { | 2608 TEST_F(LayerTreeHostImplTopControlsTest, TopControlsLayoutHeightChanged) { |
2599 CreateHostImpl(settings_, CreateOutputSurface()); | 2609 CreateHostImpl(settings_, CreateOutputSurface()); |
2600 SetupTopControlsAndScrollLayer(); | 2610 SetupTopControlsAndScrollLayer(); |
2601 DrawFrame(); | 2611 DrawFrame(); |
2602 | 2612 |
2603 host_impl_->sync_tree()->set_top_controls_content_offset(15.f); | 2613 host_impl_->sync_tree()->set_top_controls_content_offset(15.f); |
2604 host_impl_->sync_tree()->set_top_controls_layout_height(15.f); | 2614 host_impl_->sync_tree()->set_top_controls_height(15.f); |
| 2615 host_impl_->sync_tree()->set_top_controls_shrink_blink_size(true); |
2605 | 2616 |
2606 host_impl_->active_tree()->set_top_controls_content_offset(20.f); | 2617 host_impl_->active_tree()->set_top_controls_content_offset(20.f); |
2607 host_impl_->active_tree()->set_top_controls_delta(-20.f); | 2618 host_impl_->active_tree()->set_top_controls_delta(-20.f); |
2608 host_impl_->active_tree()->set_sent_top_controls_delta(-5.f); | 2619 host_impl_->active_tree()->set_sent_top_controls_delta(-5.f); |
2609 | 2620 |
2610 host_impl_->DidChangeTopControlsPosition(); | 2621 host_impl_->DidChangeTopControlsPosition(); |
2611 LayerImpl* root_clip_ptr = host_impl_->active_tree()->root_layer(); | 2622 LayerImpl* root_clip_ptr = host_impl_->active_tree()->root_layer(); |
2612 EXPECT_EQ(viewport_size_, root_clip_ptr->bounds()); | 2623 EXPECT_EQ(viewport_size_, root_clip_ptr->bounds()); |
2613 EXPECT_EQ(0.f, host_impl_->top_controls_manager()->ContentTopOffset()); | 2624 EXPECT_EQ(0.f, host_impl_->top_controls_manager()->ContentTopOffset()); |
2614 | 2625 |
(...skipping 22 matching lines...) Expand all Loading... |
2637 } | 2648 } |
2638 | 2649 |
2639 // Test that showing/hiding the top controls when the viewport is fully scrolled | 2650 // Test that showing/hiding the top controls when the viewport is fully scrolled |
2640 // doesn't incorrectly change the viewport offset due to clamping from changing | 2651 // doesn't incorrectly change the viewport offset due to clamping from changing |
2641 // viewport bounds. | 2652 // viewport bounds. |
2642 TEST_F(LayerTreeHostImplTopControlsTest, TopControlsViewportOffsetClamping) { | 2653 TEST_F(LayerTreeHostImplTopControlsTest, TopControlsViewportOffsetClamping) { |
2643 SetupTopControlsAndScrollLayerWithVirtualViewport( | 2654 SetupTopControlsAndScrollLayerWithVirtualViewport( |
2644 gfx::Size(100, 100), gfx::Size(200, 200), gfx::Size(200, 400)); | 2655 gfx::Size(100, 100), gfx::Size(200, 200), gfx::Size(200, 400)); |
2645 DrawFrame(); | 2656 DrawFrame(); |
2646 | 2657 |
2647 EXPECT_EQ(settings_.top_controls_height, | 2658 EXPECT_EQ(top_controls_height_, |
2648 host_impl_->active_tree()->total_top_controls_content_offset()); | 2659 host_impl_->active_tree()->total_top_controls_content_offset()); |
2649 | 2660 |
2650 LayerImpl* outer_scroll = host_impl_->OuterViewportScrollLayer(); | 2661 LayerImpl* outer_scroll = host_impl_->OuterViewportScrollLayer(); |
2651 LayerImpl* inner_scroll = host_impl_->InnerViewportScrollLayer(); | 2662 LayerImpl* inner_scroll = host_impl_->InnerViewportScrollLayer(); |
2652 | 2663 |
2653 // Scroll the viewports to max scroll offset. | 2664 // Scroll the viewports to max scroll offset. |
2654 outer_scroll->SetScrollDelta(gfx::Vector2dF(0, 200.f)); | 2665 outer_scroll->SetScrollDelta(gfx::Vector2dF(0, 200.f)); |
2655 inner_scroll->SetScrollDelta(gfx::Vector2dF(100, 100.f)); | 2666 inner_scroll->SetScrollDelta(gfx::Vector2dF(100, 100.f)); |
2656 | 2667 |
2657 gfx::ScrollOffset viewport_offset = | 2668 gfx::ScrollOffset viewport_offset = |
2658 host_impl_->active_tree()->TotalScrollOffset(); | 2669 host_impl_->active_tree()->TotalScrollOffset(); |
2659 EXPECT_EQ(host_impl_->active_tree()->TotalMaxScrollOffset(), viewport_offset); | 2670 EXPECT_EQ(host_impl_->active_tree()->TotalMaxScrollOffset(), viewport_offset); |
2660 | 2671 |
2661 // Hide the top controls by 25px. | 2672 // Hide the top controls by 25px. |
2662 gfx::Vector2dF scroll_delta(0.f, 25.f); | 2673 gfx::Vector2dF scroll_delta(0.f, 25.f); |
2663 EXPECT_EQ(InputHandler::ScrollStarted, | 2674 EXPECT_EQ(InputHandler::ScrollStarted, |
2664 host_impl_->ScrollBegin(gfx::Point(), InputHandler::Gesture)); | 2675 host_impl_->ScrollBegin(gfx::Point(), InputHandler::Gesture)); |
2665 host_impl_->ScrollBy(gfx::Point(), scroll_delta); | 2676 host_impl_->ScrollBy(gfx::Point(), scroll_delta); |
2666 | 2677 |
2667 // scrolling down at the max extents no longer hides the top controls | 2678 // scrolling down at the max extents no longer hides the top controls |
2668 EXPECT_EQ(0.f, | 2679 EXPECT_EQ(0.f, |
2669 settings_.top_controls_height - | 2680 top_controls_height_ - |
2670 host_impl_->active_tree()->total_top_controls_content_offset()); | 2681 host_impl_->active_tree()->total_top_controls_content_offset()); |
2671 | 2682 |
2672 // forcefully hide the top controls by 25px | 2683 // forcefully hide the top controls by 25px |
2673 host_impl_->top_controls_manager()->ScrollBy(scroll_delta); | 2684 host_impl_->top_controls_manager()->ScrollBy(scroll_delta); |
2674 host_impl_->ScrollEnd(); | 2685 host_impl_->ScrollEnd(); |
2675 | 2686 |
2676 EXPECT_EQ(scroll_delta.y(), | 2687 EXPECT_EQ(scroll_delta.y(), |
2677 settings_.top_controls_height - | 2688 top_controls_height_ - |
2678 host_impl_->active_tree()->total_top_controls_content_offset()); | 2689 host_impl_->active_tree()->total_top_controls_content_offset()); |
2679 | 2690 |
2680 inner_scroll->ClampScrollToMaxScrollOffset(); | 2691 inner_scroll->ClampScrollToMaxScrollOffset(); |
2681 outer_scroll->ClampScrollToMaxScrollOffset(); | 2692 outer_scroll->ClampScrollToMaxScrollOffset(); |
2682 | 2693 |
2683 // We should still be fully scrolled. | 2694 // We should still be fully scrolled. |
2684 EXPECT_EQ(host_impl_->active_tree()->TotalMaxScrollOffset(), | 2695 EXPECT_EQ(host_impl_->active_tree()->TotalMaxScrollOffset(), |
2685 host_impl_->active_tree()->TotalScrollOffset()); | 2696 host_impl_->active_tree()->TotalScrollOffset()); |
2686 | 2697 |
2687 viewport_offset = host_impl_->active_tree()->TotalScrollOffset(); | 2698 viewport_offset = host_impl_->active_tree()->TotalScrollOffset(); |
(...skipping 16 matching lines...) Expand all Loading... |
2704 host_impl_->active_tree()->TotalScrollOffset()); | 2715 host_impl_->active_tree()->TotalScrollOffset()); |
2705 } | 2716 } |
2706 | 2717 |
2707 // Test that the top controls coming in and out maintains the same aspect ratio | 2718 // Test that the top controls coming in and out maintains the same aspect ratio |
2708 // between the inner and outer viewports. | 2719 // between the inner and outer viewports. |
2709 TEST_F(LayerTreeHostImplTopControlsTest, TopControlsAspectRatio) { | 2720 TEST_F(LayerTreeHostImplTopControlsTest, TopControlsAspectRatio) { |
2710 SetupTopControlsAndScrollLayerWithVirtualViewport( | 2721 SetupTopControlsAndScrollLayerWithVirtualViewport( |
2711 gfx::Size(100, 100), gfx::Size(200, 200), gfx::Size(200, 400)); | 2722 gfx::Size(100, 100), gfx::Size(200, 200), gfx::Size(200, 400)); |
2712 DrawFrame(); | 2723 DrawFrame(); |
2713 | 2724 |
2714 EXPECT_EQ(settings_.top_controls_height, | 2725 EXPECT_EQ(top_controls_height_, |
2715 host_impl_->active_tree()->total_top_controls_content_offset()); | 2726 host_impl_->active_tree()->total_top_controls_content_offset()); |
2716 | 2727 |
2717 gfx::Vector2dF scroll_delta(0.f, 25.f); | 2728 gfx::Vector2dF scroll_delta(0.f, 25.f); |
2718 EXPECT_EQ(InputHandler::ScrollStarted, | 2729 EXPECT_EQ(InputHandler::ScrollStarted, |
2719 host_impl_->ScrollBegin(gfx::Point(), InputHandler::Gesture)); | 2730 host_impl_->ScrollBegin(gfx::Point(), InputHandler::Gesture)); |
2720 host_impl_->ScrollBy(gfx::Point(), scroll_delta); | 2731 host_impl_->ScrollBy(gfx::Point(), scroll_delta); |
2721 host_impl_->ScrollEnd(); | 2732 host_impl_->ScrollEnd(); |
2722 | 2733 |
2723 EXPECT_EQ(scroll_delta.y(), | 2734 EXPECT_EQ(scroll_delta.y(), |
2724 settings_.top_controls_height - | 2735 top_controls_height_ - |
2725 host_impl_->active_tree()->total_top_controls_content_offset()); | 2736 host_impl_->active_tree()->total_top_controls_content_offset()); |
2726 | 2737 |
2727 // Top controls were hidden by 25px so the inner viewport should have expanded | 2738 // Top controls were hidden by 25px so the inner viewport should have expanded |
2728 // by that much. | 2739 // by that much. |
2729 LayerImpl* outer_container = | 2740 LayerImpl* outer_container = |
2730 host_impl_->active_tree()->OuterViewportContainerLayer(); | 2741 host_impl_->active_tree()->OuterViewportContainerLayer(); |
2731 LayerImpl* inner_container = | 2742 LayerImpl* inner_container = |
2732 host_impl_->active_tree()->InnerViewportContainerLayer(); | 2743 host_impl_->active_tree()->InnerViewportContainerLayer(); |
2733 EXPECT_EQ(gfx::Size(100, 100+25), inner_container->BoundsForScrolling()); | 2744 EXPECT_EQ(gfx::Size(100, 100+25), inner_container->BoundsForScrolling()); |
2734 | 2745 |
2735 // Outer viewport should match inner's aspect ratio. The bounds are ceiled. | 2746 // Outer viewport should match inner's aspect ratio. The bounds are ceiled. |
2736 float aspect_ratio = inner_container->BoundsForScrolling().width() / | 2747 float aspect_ratio = inner_container->BoundsForScrolling().width() / |
2737 inner_container->BoundsForScrolling().height(); | 2748 inner_container->BoundsForScrolling().height(); |
2738 gfx::Size expected = gfx::ToCeiledSize(gfx::SizeF(200, 200 / aspect_ratio)); | 2749 gfx::Size expected = gfx::ToCeiledSize(gfx::SizeF(200, 200 / aspect_ratio)); |
2739 EXPECT_EQ(expected, outer_container->BoundsForScrolling()); | 2750 EXPECT_EQ(expected, outer_container->BoundsForScrolling()); |
2740 EXPECT_EQ(expected, | 2751 EXPECT_EQ(expected, |
2741 host_impl_->InnerViewportScrollLayer()->BoundsForScrolling()); | 2752 host_impl_->InnerViewportScrollLayer()->BoundsForScrolling()); |
2742 } | 2753 } |
2743 | 2754 |
2744 // Test that scrolling the outer viewport affects the top controls. | 2755 // Test that scrolling the outer viewport affects the top controls. |
2745 TEST_F(LayerTreeHostImplTopControlsTest, TopControlsScrollOuterViewport) { | 2756 TEST_F(LayerTreeHostImplTopControlsTest, TopControlsScrollOuterViewport) { |
2746 SetupTopControlsAndScrollLayerWithVirtualViewport( | 2757 SetupTopControlsAndScrollLayerWithVirtualViewport( |
2747 gfx::Size(100, 100), gfx::Size(200, 200), gfx::Size(200, 400)); | 2758 gfx::Size(100, 100), gfx::Size(200, 200), gfx::Size(200, 400)); |
2748 DrawFrame(); | 2759 DrawFrame(); |
2749 | 2760 |
2750 EXPECT_EQ(settings_.top_controls_height, | 2761 EXPECT_EQ(top_controls_height_, |
2751 host_impl_->active_tree()->total_top_controls_content_offset()); | 2762 host_impl_->active_tree()->total_top_controls_content_offset()); |
2752 | 2763 |
2753 // Send a gesture scroll that will scroll the outer viewport, make sure the | 2764 // Send a gesture scroll that will scroll the outer viewport, make sure the |
2754 // top controls get scrolled. | 2765 // top controls get scrolled. |
2755 gfx::Vector2dF scroll_delta(0.f, 15.f); | 2766 gfx::Vector2dF scroll_delta(0.f, 15.f); |
2756 EXPECT_EQ(InputHandler::ScrollStarted, | 2767 EXPECT_EQ(InputHandler::ScrollStarted, |
2757 host_impl_->ScrollBegin(gfx::Point(), InputHandler::Gesture)); | 2768 host_impl_->ScrollBegin(gfx::Point(), InputHandler::Gesture)); |
2758 host_impl_->ScrollBy(gfx::Point(), scroll_delta); | 2769 host_impl_->ScrollBy(gfx::Point(), scroll_delta); |
2759 EXPECT_EQ(host_impl_->OuterViewportScrollLayer(), | 2770 EXPECT_EQ(host_impl_->OuterViewportScrollLayer(), |
2760 host_impl_->CurrentlyScrollingLayer()); | 2771 host_impl_->CurrentlyScrollingLayer()); |
2761 host_impl_->ScrollEnd(); | 2772 host_impl_->ScrollEnd(); |
2762 | 2773 |
2763 EXPECT_EQ(scroll_delta.y(), | 2774 EXPECT_EQ(scroll_delta.y(), |
2764 settings_.top_controls_height - | 2775 top_controls_height_ - |
2765 host_impl_->active_tree()->total_top_controls_content_offset()); | 2776 host_impl_->active_tree()->total_top_controls_content_offset()); |
2766 | 2777 |
2767 scroll_delta = gfx::Vector2dF(0.f, 50.f); | 2778 scroll_delta = gfx::Vector2dF(0.f, 50.f); |
2768 EXPECT_EQ(InputHandler::ScrollStarted, | 2779 EXPECT_EQ(InputHandler::ScrollStarted, |
2769 host_impl_->ScrollBegin(gfx::Point(), InputHandler::Gesture)); | 2780 host_impl_->ScrollBegin(gfx::Point(), InputHandler::Gesture)); |
2770 host_impl_->ScrollBy(gfx::Point(), scroll_delta); | 2781 host_impl_->ScrollBy(gfx::Point(), scroll_delta); |
2771 | 2782 |
2772 EXPECT_EQ(0, host_impl_->active_tree()->total_top_controls_content_offset()); | 2783 EXPECT_EQ(0, host_impl_->active_tree()->total_top_controls_content_offset()); |
2773 EXPECT_EQ(host_impl_->OuterViewportScrollLayer(), | 2784 EXPECT_EQ(host_impl_->OuterViewportScrollLayer(), |
2774 host_impl_->CurrentlyScrollingLayer()); | 2785 host_impl_->CurrentlyScrollingLayer()); |
2775 | 2786 |
2776 host_impl_->ScrollEnd(); | 2787 host_impl_->ScrollEnd(); |
2777 | 2788 |
2778 // Position the viewports such that the inner viewport will be scrolled. | 2789 // Position the viewports such that the inner viewport will be scrolled. |
2779 gfx::Vector2dF inner_viewport_offset(0.f, 25.f); | 2790 gfx::Vector2dF inner_viewport_offset(0.f, 25.f); |
2780 host_impl_->OuterViewportScrollLayer()->SetScrollDelta(gfx::Vector2dF()); | 2791 host_impl_->OuterViewportScrollLayer()->SetScrollDelta(gfx::Vector2dF()); |
2781 host_impl_->InnerViewportScrollLayer()->SetScrollDelta(inner_viewport_offset); | 2792 host_impl_->InnerViewportScrollLayer()->SetScrollDelta(inner_viewport_offset); |
2782 | 2793 |
2783 scroll_delta = gfx::Vector2dF(0.f, -65.f); | 2794 scroll_delta = gfx::Vector2dF(0.f, -65.f); |
2784 EXPECT_EQ(InputHandler::ScrollStarted, | 2795 EXPECT_EQ(InputHandler::ScrollStarted, |
2785 host_impl_->ScrollBegin(gfx::Point(), InputHandler::Gesture)); | 2796 host_impl_->ScrollBegin(gfx::Point(), InputHandler::Gesture)); |
2786 host_impl_->ScrollBy(gfx::Point(), scroll_delta); | 2797 host_impl_->ScrollBy(gfx::Point(), scroll_delta); |
2787 | 2798 |
2788 EXPECT_EQ(settings_.top_controls_height, | 2799 EXPECT_EQ(top_controls_height_, |
2789 host_impl_->active_tree()->total_top_controls_content_offset()); | 2800 host_impl_->active_tree()->total_top_controls_content_offset()); |
2790 EXPECT_EQ(inner_viewport_offset.y() + | 2801 EXPECT_EQ( |
2791 (scroll_delta.y() + settings_.top_controls_height), | 2802 inner_viewport_offset.y() + (scroll_delta.y() + top_controls_height_), |
2792 host_impl_->InnerViewportScrollLayer()->ScrollDelta().y()); | 2803 host_impl_->InnerViewportScrollLayer()->ScrollDelta().y()); |
2793 | 2804 |
2794 host_impl_->ScrollEnd(); | 2805 host_impl_->ScrollEnd(); |
2795 } | 2806 } |
2796 | 2807 |
2797 TEST_F(LayerTreeHostImplTopControlsTest, | 2808 TEST_F(LayerTreeHostImplTopControlsTest, |
2798 ScrollNonScrollableRootWithTopControls) { | 2809 ScrollNonScrollableRootWithTopControls) { |
2799 CreateHostImpl(settings_, CreateOutputSurface()); | 2810 CreateHostImpl(settings_, CreateOutputSurface()); |
2800 SetupTopControlsAndScrollLayer(); | 2811 SetupTopControlsAndScrollLayer(); |
2801 DrawFrame(); | 2812 DrawFrame(); |
2802 | 2813 |
(...skipping 4361 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
7164 EXPECT_EQ(2, set_needs_redraw_count); | 7175 EXPECT_EQ(2, set_needs_redraw_count); |
7165 EXPECT_EQ(1, forward_to_main_count); | 7176 EXPECT_EQ(1, forward_to_main_count); |
7166 } | 7177 } |
7167 } | 7178 } |
7168 | 7179 |
7169 class LayerTreeHostImplWithTopControlsTest : public LayerTreeHostImplTest { | 7180 class LayerTreeHostImplWithTopControlsTest : public LayerTreeHostImplTest { |
7170 public: | 7181 public: |
7171 void SetUp() override { | 7182 void SetUp() override { |
7172 LayerTreeSettings settings = DefaultSettings(); | 7183 LayerTreeSettings settings = DefaultSettings(); |
7173 settings.calculate_top_controls_position = true; | 7184 settings.calculate_top_controls_position = true; |
7174 settings.top_controls_height = top_controls_height_; | |
7175 CreateHostImpl(settings, CreateOutputSurface()); | 7185 CreateHostImpl(settings, CreateOutputSurface()); |
| 7186 host_impl_->active_tree()->set_top_controls_height(top_controls_height_); |
| 7187 host_impl_->top_controls_manager()->SetTopControlsHeight( |
| 7188 top_controls_height_); |
7176 } | 7189 } |
7177 | 7190 |
7178 protected: | 7191 protected: |
7179 static const int top_controls_height_; | 7192 static const int top_controls_height_; |
7180 }; | 7193 }; |
7181 | 7194 |
7182 const int LayerTreeHostImplWithTopControlsTest::top_controls_height_ = 50; | 7195 const int LayerTreeHostImplWithTopControlsTest::top_controls_height_ = 50; |
7183 | 7196 |
7184 TEST_F(LayerTreeHostImplWithTopControlsTest, NoIdleAnimations) { | 7197 TEST_F(LayerTreeHostImplWithTopControlsTest, NoIdleAnimations) { |
7185 SetupScrollAndContentsLayers(gfx::Size(100, 100)) | 7198 SetupScrollAndContentsLayers(gfx::Size(100, 100)) |
7186 ->SetScrollOffset(gfx::ScrollOffset(0, 10)); | 7199 ->SetScrollOffset(gfx::ScrollOffset(0, 10)); |
7187 host_impl_->Animate(base::TimeTicks()); | 7200 host_impl_->Animate(base::TimeTicks()); |
7188 EXPECT_FALSE(did_request_redraw_); | 7201 EXPECT_FALSE(did_request_redraw_); |
7189 } | 7202 } |
7190 | 7203 |
| 7204 /*TEST_F(LayerTreeHostImplWithTopControlsTest, HeightChangeCausesInvalidate) { |
| 7205 SetupScrollAndContentsLayers(gfx::Size(100, 100)); |
| 7206 EXPECT_FALSE(did_request_redraw_); |
| 7207 host_impl_->SetTopControlsHeight(100); |
| 7208 EXPECT_TRUE(did_request_redraw_); |
| 7209 }*/ |
| 7210 |
7191 TEST_F(LayerTreeHostImplWithTopControlsTest, TopControlsAnimationScheduling) { | 7211 TEST_F(LayerTreeHostImplWithTopControlsTest, TopControlsAnimationScheduling) { |
7192 SetupScrollAndContentsLayers(gfx::Size(100, 100)) | 7212 SetupScrollAndContentsLayers(gfx::Size(100, 100)) |
7193 ->SetScrollOffset(gfx::ScrollOffset(0, 10)); | 7213 ->SetScrollOffset(gfx::ScrollOffset(0, 10)); |
7194 host_impl_->DidChangeTopControlsPosition(); | 7214 host_impl_->DidChangeTopControlsPosition(); |
7195 EXPECT_TRUE(did_request_animate_); | 7215 EXPECT_TRUE(did_request_animate_); |
7196 EXPECT_TRUE(did_request_redraw_); | 7216 EXPECT_TRUE(did_request_redraw_); |
7197 } | 7217 } |
7198 | 7218 |
7199 TEST_F(LayerTreeHostImplWithTopControlsTest, ScrollHandledByTopControls) { | 7219 TEST_F(LayerTreeHostImplWithTopControlsTest, ScrollHandledByTopControls) { |
7200 LayerImpl* scroll_layer = SetupScrollAndContentsLayers(gfx::Size(100, 200)); | 7220 LayerImpl* scroll_layer = SetupScrollAndContentsLayers(gfx::Size(100, 200)); |
(...skipping 575 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
7776 // surface. | 7796 // surface. |
7777 EXPECT_EQ(0, num_lost_surfaces_); | 7797 EXPECT_EQ(0, num_lost_surfaces_); |
7778 host_impl_->DidLoseOutputSurface(); | 7798 host_impl_->DidLoseOutputSurface(); |
7779 EXPECT_EQ(1, num_lost_surfaces_); | 7799 EXPECT_EQ(1, num_lost_surfaces_); |
7780 host_impl_->DidLoseOutputSurface(); | 7800 host_impl_->DidLoseOutputSurface(); |
7781 EXPECT_LE(1, num_lost_surfaces_); | 7801 EXPECT_LE(1, num_lost_surfaces_); |
7782 } | 7802 } |
7783 | 7803 |
7784 } // namespace | 7804 } // namespace |
7785 } // namespace cc | 7805 } // namespace cc |
OLD | NEW |