| 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 e55ba64e9976e1196c51137615819687d5a9227b..d9cc1fecf1c59d7b164c5bd4dcafc10a939aae28 100644
|
| --- a/cc/trees/layer_tree_host_impl.cc
|
| +++ b/cc/trees/layer_tree_host_impl.cc
|
| @@ -197,6 +197,7 @@ LayerTreeHostImpl::LayerTreeHostImpl(
|
| device_scale_factor_(1.f),
|
| overhang_ui_resource_id_(0),
|
| 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),
|
| @@ -293,7 +294,7 @@ bool LayerTreeHostImpl::CanDraw() const {
|
| if (output_surface_->capabilities().draw_and_swap_full_viewport_every_frame)
|
| return true;
|
|
|
| - if (device_viewport_size_.IsEmpty()) {
|
| + if (DrawViewportSize().IsEmpty()) {
|
| TRACE_EVENT_INSTANT0("cc", "LayerTreeHostImpl::CanDraw empty viewport",
|
| TRACE_EVENT_SCOPE_THREAD);
|
| return false;
|
| @@ -328,6 +329,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();
|
|
|
| @@ -355,7 +359,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();
|
|
|
| @@ -1187,9 +1191,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) {
|
| @@ -1390,7 +1398,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();
|
| @@ -1401,7 +1409,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;
|
| @@ -1796,7 +1804,7 @@ void LayerTreeHostImpl::SetViewportSize(gfx::Size device_viewport_size) {
|
| if (device_viewport_size == device_viewport_size_)
|
| return;
|
|
|
| - if (pending_tree_ && device_viewport_size_ != device_viewport_size)
|
| + if (pending_tree_)
|
| active_tree_->SetViewportSizeInvalid();
|
|
|
| device_viewport_size_ = device_viewport_size;
|
| @@ -1838,6 +1846,10 @@ void LayerTreeHostImpl::SetDeviceScaleFactor(float device_scale_factor) {
|
| SetFullRootLayerDamage();
|
| }
|
|
|
| +gfx::Size LayerTreeHostImpl::DrawViewportSize() const {
|
| + return DeviceViewport().size();
|
| +}
|
| +
|
| gfx::Rect LayerTreeHostImpl::DeviceViewport() const {
|
| if (external_viewport_.IsEmpty())
|
| return gfx::Rect(device_viewport_size_);
|
| @@ -1845,7 +1857,14 @@ gfx::Rect LayerTreeHostImpl::DeviceViewport() const {
|
| return external_viewport_;
|
| }
|
|
|
| -const gfx::Transform& LayerTreeHostImpl::DeviceTransform() const {
|
| +gfx::Rect LayerTreeHostImpl::DeviceClip() const {
|
| + if (external_clip_.IsEmpty())
|
| + return DeviceViewport();
|
| +
|
| + return external_clip_;
|
| +}
|
| +
|
| +const gfx::Transform& LayerTreeHostImpl::DrawTransform() const {
|
| return external_transform_;
|
| }
|
|
|
| @@ -2298,7 +2317,7 @@ scoped_ptr<ScrollAndScaleSet> LayerTreeHostImpl::ProcessScrollDeltas() {
|
| }
|
|
|
| void LayerTreeHostImpl::SetFullRootLayerDamage() {
|
| - SetViewportDamage(gfx::Rect(device_viewport_size_));
|
| + SetViewportDamage(gfx::Rect(DrawViewportSize()));
|
| }
|
|
|
| void LayerTreeHostImpl::AnimatePageScale(base::TimeTicks time) {
|
|
|