Chromium Code Reviews| 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 2295 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 2306 } | 2306 } |
| 2307 | 2307 |
| 2308 void LayerTreeHostImplTest::SetupMouseMoveAtWithDeviceScale( | 2308 void LayerTreeHostImplTest::SetupMouseMoveAtWithDeviceScale( |
| 2309 float device_scale_factor) { | 2309 float device_scale_factor) { |
| 2310 LayerTreeSettings settings; | 2310 LayerTreeSettings settings; |
| 2311 settings.scrollbar_fade_delay_ms = 500; | 2311 settings.scrollbar_fade_delay_ms = 500; |
| 2312 settings.scrollbar_fade_duration_ms = 300; | 2312 settings.scrollbar_fade_duration_ms = 300; |
| 2313 settings.scrollbar_animator = LayerTreeSettings::THINNING; | 2313 settings.scrollbar_animator = LayerTreeSettings::THINNING; |
| 2314 | 2314 |
| 2315 gfx::Size viewport_size(300, 200); | 2315 gfx::Size viewport_size(300, 200); |
| 2316 gfx::Size device_viewport_size = gfx::ToFlooredSize( | 2316 gfx::Size device_viewport_size = |
| 2317 gfx::ScaleSize(viewport_size, device_scale_factor)); | 2317 gfx::ScaleToFlooredSize(viewport_size, device_scale_factor); |
| 2318 gfx::Size content_size(1000, 1000); | 2318 gfx::Size content_size(1000, 1000); |
| 2319 | 2319 |
| 2320 CreateHostImpl(settings, CreateOutputSurface()); | 2320 CreateHostImpl(settings, CreateOutputSurface()); |
| 2321 host_impl_->SetDeviceScaleFactor(device_scale_factor); | 2321 host_impl_->SetDeviceScaleFactor(device_scale_factor); |
| 2322 host_impl_->SetViewportSize(device_viewport_size); | 2322 host_impl_->SetViewportSize(device_viewport_size); |
| 2323 | 2323 |
| 2324 scoped_ptr<LayerImpl> root = | 2324 scoped_ptr<LayerImpl> root = |
| 2325 LayerImpl::Create(host_impl_->active_tree(), 1); | 2325 LayerImpl::Create(host_impl_->active_tree(), 1); |
| 2326 root->SetBounds(viewport_size); | 2326 root->SetBounds(viewport_size); |
| 2327 root->SetHasRenderSurface(true); | 2327 root->SetHasRenderSurface(true); |
| (...skipping 1304 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 3632 EXPECT_FLOAT_EQ(scroll_delta.y(), | 3632 EXPECT_FLOAT_EQ(scroll_delta.y(), |
| 3633 top_controls_height_ - | 3633 top_controls_height_ - |
| 3634 host_impl_->top_controls_manager()->ContentTopOffset()); | 3634 host_impl_->top_controls_manager()->ContentTopOffset()); |
| 3635 | 3635 |
| 3636 // Top controls were hidden by 25px so the inner viewport should have expanded | 3636 // Top controls were hidden by 25px so the inner viewport should have expanded |
| 3637 // by that much. | 3637 // by that much. |
| 3638 LayerImpl* outer_container = | 3638 LayerImpl* outer_container = |
| 3639 host_impl_->active_tree()->OuterViewportContainerLayer(); | 3639 host_impl_->active_tree()->OuterViewportContainerLayer(); |
| 3640 LayerImpl* inner_container = | 3640 LayerImpl* inner_container = |
| 3641 host_impl_->active_tree()->InnerViewportContainerLayer(); | 3641 host_impl_->active_tree()->InnerViewportContainerLayer(); |
| 3642 EXPECT_EQ(gfx::Size(100, 100+25), inner_container->BoundsForScrolling()); | 3642 EXPECT_EQ(gfx::SizeF(100.f, 100.f + 25.f), |
| 3643 inner_container->BoundsForScrolling()); | |
| 3643 | 3644 |
| 3644 // Outer viewport should match inner's aspect ratio. The bounds are ceiled. | 3645 // Outer viewport should match inner's aspect ratio. The bounds are ceiled. |
| 3645 float aspect_ratio = inner_container->BoundsForScrolling().width() / | 3646 float aspect_ratio = inner_container->BoundsForScrolling().width() / |
| 3646 inner_container->BoundsForScrolling().height(); | 3647 inner_container->BoundsForScrolling().height(); |
| 3647 gfx::Size expected = gfx::ToCeiledSize(gfx::SizeF(200, 200 / aspect_ratio)); | 3648 gfx::SizeF expected = |
| 3649 gfx::SizeF(gfx::ToCeiledSize(gfx::SizeF(200, 200 / aspect_ratio))); | |
|
vmpstr
2015/09/23 23:04:25
This is a bit weird. It almost like we want ToCeil
| |
| 3648 EXPECT_EQ(expected, outer_container->BoundsForScrolling()); | 3650 EXPECT_EQ(expected, outer_container->BoundsForScrolling()); |
| 3649 EXPECT_EQ(expected, | 3651 EXPECT_EQ(expected, |
| 3650 host_impl_->InnerViewportScrollLayer()->BoundsForScrolling()); | 3652 host_impl_->InnerViewportScrollLayer()->BoundsForScrolling()); |
| 3651 } | 3653 } |
| 3652 | 3654 |
| 3653 // Test that scrolling the outer viewport affects the top controls. | 3655 // Test that scrolling the outer viewport affects the top controls. |
| 3654 TEST_F(LayerTreeHostImplTopControlsTest, TopControlsScrollOuterViewport) { | 3656 TEST_F(LayerTreeHostImplTopControlsTest, TopControlsScrollOuterViewport) { |
| 3655 SetupTopControlsAndScrollLayerWithVirtualViewport( | 3657 SetupTopControlsAndScrollLayerWithVirtualViewport( |
| 3656 gfx::Size(100, 100), gfx::Size(200, 200), gfx::Size(200, 400)); | 3658 gfx::Size(100, 100), gfx::Size(200, 200), gfx::Size(200, 400)); |
| 3657 DrawFrame(); | 3659 DrawFrame(); |
| (...skipping 1044 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 4702 host_impl_->ScrollEnd(); | 4704 host_impl_->ScrollEnd(); |
| 4703 host_impl_->SetSynchronousInputHandlerRootScrollOffset(gfx::ScrollOffset()); | 4705 host_impl_->SetSynchronousInputHandlerRootScrollOffset(gfx::ScrollOffset()); |
| 4704 | 4706 |
| 4705 // Forces a full tree synchronization and ensures that the scroll delegate | 4707 // Forces a full tree synchronization and ensures that the scroll delegate |
| 4706 // sees the correct size of the new tree. | 4708 // sees the correct size of the new tree. |
| 4707 gfx::Size new_size(42, 24); | 4709 gfx::Size new_size(42, 24); |
| 4708 host_impl_->CreatePendingTree(); | 4710 host_impl_->CreatePendingTree(); |
| 4709 host_impl_->pending_tree()->PushPageScaleFromMainThread(1.f, 1.f, 1.f); | 4711 host_impl_->pending_tree()->PushPageScaleFromMainThread(1.f, 1.f, 1.f); |
| 4710 CreateScrollAndContentsLayers(host_impl_->pending_tree(), new_size); | 4712 CreateScrollAndContentsLayers(host_impl_->pending_tree(), new_size); |
| 4711 host_impl_->ActivateSyncTree(); | 4713 host_impl_->ActivateSyncTree(); |
| 4712 EXPECT_EQ(new_size, scroll_watcher.scrollable_size()); | 4714 EXPECT_EQ(gfx::SizeF(new_size), scroll_watcher.scrollable_size()); |
| 4713 | 4715 |
| 4714 // Tear down the LayerTreeHostImpl before the InputHandlerClient. | 4716 // Tear down the LayerTreeHostImpl before the InputHandlerClient. |
| 4715 host_impl_.reset(); | 4717 host_impl_.reset(); |
| 4716 } | 4718 } |
| 4717 | 4719 |
| 4718 void CheckLayerScrollDelta(LayerImpl* layer, gfx::Vector2dF scroll_delta) { | 4720 void CheckLayerScrollDelta(LayerImpl* layer, gfx::Vector2dF scroll_delta) { |
| 4719 const gfx::Transform target_space_transform = | 4721 const gfx::Transform target_space_transform = |
| 4720 layer->draw_properties().target_space_transform; | 4722 layer->draw_properties().target_space_transform; |
| 4721 EXPECT_TRUE(target_space_transform.IsScaleOrTranslation()); | 4723 EXPECT_TRUE(target_space_transform.IsScaleOrTranslation()); |
| 4722 gfx::Point translated_point; | 4724 gfx::Point translated_point; |
| (...skipping 759 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 5482 quad_list, gfx::Rect(DipSizeToPixelSize(viewport_size_))); | 5484 quad_list, gfx::Rect(DipSizeToPixelSize(viewport_size_))); |
| 5483 } | 5485 } |
| 5484 | 5486 |
| 5485 // Make sure that the texture coordinates match their expectations. | 5487 // Make sure that the texture coordinates match their expectations. |
| 5486 void ValidateTextureDrawQuads(const QuadList& quad_list) { | 5488 void ValidateTextureDrawQuads(const QuadList& quad_list) { |
| 5487 for (const auto& quad : quad_list) { | 5489 for (const auto& quad : quad_list) { |
| 5488 if (quad->material != DrawQuad::TEXTURE_CONTENT) | 5490 if (quad->material != DrawQuad::TEXTURE_CONTENT) |
| 5489 continue; | 5491 continue; |
| 5490 const TextureDrawQuad* texture_quad = TextureDrawQuad::MaterialCast(quad); | 5492 const TextureDrawQuad* texture_quad = TextureDrawQuad::MaterialCast(quad); |
| 5491 gfx::SizeF gutter_texture_size_pixels = gfx::ScaleSize( | 5493 gfx::SizeF gutter_texture_size_pixels = gfx::ScaleSize( |
| 5492 gutter_texture_size_, host_impl_->device_scale_factor()); | 5494 gfx::SizeF(gutter_texture_size_), host_impl_->device_scale_factor()); |
| 5493 EXPECT_EQ(texture_quad->uv_top_left.x(), | 5495 EXPECT_EQ(texture_quad->uv_top_left.x(), |
| 5494 texture_quad->rect.x() / gutter_texture_size_pixels.width()); | 5496 texture_quad->rect.x() / gutter_texture_size_pixels.width()); |
| 5495 EXPECT_EQ(texture_quad->uv_top_left.y(), | 5497 EXPECT_EQ(texture_quad->uv_top_left.y(), |
| 5496 texture_quad->rect.y() / gutter_texture_size_pixels.height()); | 5498 texture_quad->rect.y() / gutter_texture_size_pixels.height()); |
| 5497 EXPECT_EQ( | 5499 EXPECT_EQ( |
| 5498 texture_quad->uv_bottom_right.x(), | 5500 texture_quad->uv_bottom_right.x(), |
| 5499 texture_quad->rect.right() / gutter_texture_size_pixels.width()); | 5501 texture_quad->rect.right() / gutter_texture_size_pixels.width()); |
| 5500 EXPECT_EQ( | 5502 EXPECT_EQ( |
| 5501 texture_quad->uv_bottom_right.y(), | 5503 texture_quad->uv_bottom_right.y(), |
| 5502 texture_quad->rect.bottom() / gutter_texture_size_pixels.height()); | 5504 texture_quad->rect.bottom() / gutter_texture_size_pixels.height()); |
| 5503 } | 5505 } |
| 5504 } | 5506 } |
| 5505 | 5507 |
| 5506 gfx::Size DipSizeToPixelSize(const gfx::Size& size) { | 5508 gfx::Size DipSizeToPixelSize(const gfx::Size& size) { |
| 5507 return gfx::ToRoundedSize( | 5509 return gfx::ScaleToRoundedSize(size, host_impl_->device_scale_factor()); |
| 5508 gfx::ScaleSize(size, host_impl_->device_scale_factor())); | |
| 5509 } | 5510 } |
| 5510 | 5511 |
| 5511 DrawQuad::Material gutter_quad_material_; | 5512 DrawQuad::Material gutter_quad_material_; |
| 5512 gfx::Size gutter_texture_size_; | 5513 gfx::Size gutter_texture_size_; |
| 5513 gfx::Size viewport_size_; | 5514 gfx::Size viewport_size_; |
| 5514 BlendStateCheckLayer* child_; | 5515 BlendStateCheckLayer* child_; |
| 5515 bool did_activate_pending_tree_; | 5516 bool did_activate_pending_tree_; |
| 5516 }; | 5517 }; |
| 5517 | 5518 |
| 5518 TEST_F(LayerTreeHostImplViewportCoveredTest, ViewportCovered) { | 5519 TEST_F(LayerTreeHostImplViewportCoveredTest, ViewportCovered) { |
| (...skipping 747 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 6266 using GLRenderer::ShouldAntialiasQuad; | 6267 using GLRenderer::ShouldAntialiasQuad; |
| 6267 }; | 6268 }; |
| 6268 | 6269 |
| 6269 TEST_F(LayerTreeHostImplTest, FarAwayQuadsDontNeedAA) { | 6270 TEST_F(LayerTreeHostImplTest, FarAwayQuadsDontNeedAA) { |
| 6270 // Due to precision issues (especially on Android), sometimes far | 6271 // Due to precision issues (especially on Android), sometimes far |
| 6271 // away quads can end up thinking they need AA. | 6272 // away quads can end up thinking they need AA. |
| 6272 float device_scale_factor = 4.f / 3.f; | 6273 float device_scale_factor = 4.f / 3.f; |
| 6273 host_impl_->SetDeviceScaleFactor(device_scale_factor); | 6274 host_impl_->SetDeviceScaleFactor(device_scale_factor); |
| 6274 gfx::Size root_size(2000, 1000); | 6275 gfx::Size root_size(2000, 1000); |
| 6275 gfx::Size device_viewport_size = | 6276 gfx::Size device_viewport_size = |
| 6276 gfx::ToCeiledSize(gfx::ScaleSize(root_size, device_scale_factor)); | 6277 gfx::ScaleToCeiledSize(root_size, device_scale_factor); |
| 6277 host_impl_->SetViewportSize(device_viewport_size); | 6278 host_impl_->SetViewportSize(device_viewport_size); |
| 6278 | 6279 |
| 6279 host_impl_->CreatePendingTree(); | 6280 host_impl_->CreatePendingTree(); |
| 6280 host_impl_->pending_tree()->PushPageScaleFromMainThread(1.f, 1.f / 16.f, | 6281 host_impl_->pending_tree()->PushPageScaleFromMainThread(1.f, 1.f / 16.f, |
| 6281 16.f); | 6282 16.f); |
| 6282 | 6283 |
| 6283 scoped_ptr<LayerImpl> scoped_root = | 6284 scoped_ptr<LayerImpl> scoped_root = |
| 6284 LayerImpl::Create(host_impl_->pending_tree(), 1); | 6285 LayerImpl::Create(host_impl_->pending_tree(), 1); |
| 6285 LayerImpl* root = scoped_root.get(); | 6286 LayerImpl* root = scoped_root.get(); |
| 6286 root->SetHasRenderSurface(true); | 6287 root->SetHasRenderSurface(true); |
| (...skipping 2260 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 8547 // Hold an unowned pointer to the output surface to use for mock expectations. | 8548 // Hold an unowned pointer to the output surface to use for mock expectations. |
| 8548 MockReclaimResourcesOutputSurface* mock_output_surface = output_surface.get(); | 8549 MockReclaimResourcesOutputSurface* mock_output_surface = output_surface.get(); |
| 8549 | 8550 |
| 8550 CreateHostImpl(DefaultSettings(), output_surface.Pass()); | 8551 CreateHostImpl(DefaultSettings(), output_surface.Pass()); |
| 8551 EXPECT_CALL(*mock_output_surface, ForceReclaimResources()).Times(1); | 8552 EXPECT_CALL(*mock_output_surface, ForceReclaimResources()).Times(1); |
| 8552 host_impl_->BeginCommit(); | 8553 host_impl_->BeginCommit(); |
| 8553 } | 8554 } |
| 8554 | 8555 |
| 8555 } // namespace | 8556 } // namespace |
| 8556 } // namespace cc | 8557 } // namespace cc |
| OLD | NEW |