| Index: cc/trees/layer_tree_host_impl.cc
|
| diff --git a/cc/trees/layer_tree_host_impl.cc b/cc/trees/layer_tree_host_impl.cc
|
| index 870b65d89ba7b123085028c34359d4afbf122131..69372d5f63a8a2702528f9156bb5c376c45d8820 100644
|
| --- a/cc/trees/layer_tree_host_impl.cc
|
| +++ b/cc/trees/layer_tree_host_impl.cc
|
| @@ -195,6 +195,7 @@ LayerTreeHostImpl::LayerTreeHostImpl(
|
| zero_budget_(false),
|
| device_scale_factor_(1.f),
|
| overdraw_bottom_height_(0.f),
|
| + device_viewport_valid_for_tile_management_(true),
|
| external_stencil_test_enabled_(false),
|
| animation_registrar_(AnimationRegistrar::Create()),
|
| rendering_stats_instrumentation_(rendering_stats_instrumentation),
|
| @@ -291,7 +292,7 @@ bool LayerTreeHostImpl::CanDraw() const {
|
| if (output_surface_->capabilities().draw_and_swap_full_viewport_every_frame)
|
| return true;
|
|
|
| - if (device_viewport_size_.IsEmpty()) {
|
| + if (DeviceViewport().IsEmpty()) {
|
| TRACE_EVENT_INSTANT0("cc", "LayerTreeHostImpl::CanDraw empty viewport",
|
| TRACE_EVENT_SCOPE_THREAD);
|
| return false;
|
| @@ -326,6 +327,9 @@ void LayerTreeHostImpl::ManageTiles() {
|
| return;
|
| if (!manage_tiles_needed_)
|
| return;
|
| + if (!device_viewport_valid_for_tile_management_)
|
| + return;
|
| +
|
| manage_tiles_needed_ = false;
|
| tile_manager_->ManageTiles();
|
|
|
| @@ -353,7 +357,7 @@ void LayerTreeHostImpl::StartPageScaleAnimation(gfx::Vector2d target_offset,
|
| gfx::Vector2dF scroll_total =
|
| RootScrollLayer()->scroll_offset() + RootScrollLayer()->ScrollDelta();
|
| gfx::SizeF scaled_scrollable_size = active_tree_->ScrollableSize();
|
| - gfx::SizeF viewport_size = VisibleViewportSize();
|
| + gfx::SizeF viewport_size = UnscaledScrollableViewportSize();
|
|
|
| double start_time_seconds = (start_time - base::TimeTicks()).InSecondsF();
|
|
|
| @@ -1160,9 +1164,13 @@ void LayerTreeHostImpl::SetManagedMemoryPolicy(
|
|
|
| void LayerTreeHostImpl::SetExternalDrawConstraints(
|
| const gfx::Transform& transform,
|
| - gfx::Rect viewport) {
|
| + gfx::Rect viewport,
|
| + gfx::Rect clip,
|
| + bool valid_for_tile_management) {
|
| external_transform_ = transform;
|
| external_viewport_ = viewport;
|
| + external_clip_ = clip;
|
| + device_viewport_valid_for_tile_management_ = valid_for_tile_management;
|
| }
|
|
|
| void LayerTreeHostImpl::SetExternalStencilTest(bool enabled) {
|
| @@ -1363,7 +1371,7 @@ float LayerTreeHostImpl::DeviceScaleFactor() const {
|
| return device_scale_factor_;
|
| }
|
|
|
| -gfx::SizeF LayerTreeHostImpl::VisibleViewportSize() const {
|
| +gfx::SizeF LayerTreeHostImpl::UnscaledScrollableViewportSize() const {
|
| // The container layer bounds should be used if non-overlay scrollbars may
|
| // exist since it adjusts for them.
|
| LayerImpl* container_layer = active_tree_->RootContainerLayer();
|
| @@ -1374,7 +1382,7 @@ gfx::SizeF LayerTreeHostImpl::VisibleViewportSize() const {
|
| }
|
|
|
| gfx::SizeF dip_size =
|
| - gfx::ScaleSize(device_viewport_size(), 1.f / device_scale_factor());
|
| + gfx::ScaleSize(device_viewport_size_, 1.f / device_scale_factor());
|
|
|
| float top_offset =
|
| top_controls_manager_ ? top_controls_manager_->content_top_offset() : 0.f;
|
| @@ -1811,6 +1819,13 @@ gfx::Rect LayerTreeHostImpl::DeviceViewport() const {
|
| return external_viewport_;
|
| }
|
|
|
| +gfx::Rect LayerTreeHostImpl::DeviceClip() const {
|
| + if (external_clip_.IsEmpty())
|
| + return DeviceViewport();
|
| +
|
| + return external_clip_;
|
| +}
|
| +
|
| const gfx::Transform& LayerTreeHostImpl::DeviceTransform() const {
|
| return external_transform_;
|
| }
|
| @@ -2264,7 +2279,7 @@ scoped_ptr<ScrollAndScaleSet> LayerTreeHostImpl::ProcessScrollDeltas() {
|
| }
|
|
|
| void LayerTreeHostImpl::SetFullRootLayerDamage() {
|
| - SetViewportDamage(gfx::Rect(device_viewport_size_));
|
| + SetViewportDamage(gfx::Rect(DeviceViewport().size()));
|
| }
|
|
|
| void LayerTreeHostImpl::AnimatePageScale(base::TimeTicks time) {
|
|
|