Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(1008)

Unified Diff: cc/trees/layer_tree_host_impl.cc

Issue 23171014: Fix UpdateTilePriorities viewport in Android WebView. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Rebase to 221292 Created 7 years, 3 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « cc/trees/layer_tree_host_impl.h ('k') | cc/trees/layer_tree_host_impl_unittest.cc » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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) {
« no previous file with comments | « cc/trees/layer_tree_host_impl.h ('k') | cc/trees/layer_tree_host_impl_unittest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698