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

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: Add tests 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
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) {

Powered by Google App Engine
This is Rietveld 408576698