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

Unified Diff: cc/trees/layer_tree_host.cc

Issue 19106007: cc: Allow the main thread to cancel commits (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Fix scheduler tests Created 7 years, 5 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.cc
diff --git a/cc/trees/layer_tree_host.cc b/cc/trees/layer_tree_host.cc
index ff4d0079fe3983e8096afe381a0cafaa7035ad7f..68fdf792f45b566764c7d804cf48b1de46b24b84 100644
--- a/cc/trees/layer_tree_host.cc
+++ b/cc/trees/layer_tree_host.cc
@@ -465,6 +465,10 @@ void LayerTreeHost::SetNeedsAnimate() {
proxy_->SetNeedsAnimate();
}
+void LayerTreeHost::SetNeedsUpdateLayers() {
+ proxy_->SetNeedsUpdateLayers();
+}
+
void LayerTreeHost::SetNeedsCommit() {
if (!prepaint_callback_.IsCancelled()) {
TRACE_EVENT_INSTANT0("cc",
@@ -580,15 +584,21 @@ void LayerTreeHost::SetOverdrawBottomHeight(float overdraw_bottom_height) {
void LayerTreeHost::SetPageScaleFactorAndLimits(float page_scale_factor,
float min_page_scale_factor,
float max_page_scale_factor) {
- if (page_scale_factor == page_scale_factor_ &&
+ bool same_page_scale_factor = page_scale_factor == page_scale_factor_;
+ bool same_page_scale_limits =
min_page_scale_factor == min_page_scale_factor_ &&
- max_page_scale_factor == max_page_scale_factor_)
+ max_page_scale_factor == max_page_scale_factor_;
+ if (same_page_scale_factor && same_page_scale_limits)
return;
page_scale_factor_ = page_scale_factor;
min_page_scale_factor_ = min_page_scale_factor;
max_page_scale_factor_ = max_page_scale_factor;
- SetNeedsCommit();
+
+ if (same_page_scale_limits)
danakj 2013/07/17 20:53:24 So I guess the main thread is not able to set the
enne (OOO) 2013/07/18 17:36:37 Done.
+ SetNeedsUpdateLayers();
+ else
+ SetNeedsCommit();
}
void LayerTreeHost::SetVisible(bool visible) {
@@ -948,8 +958,8 @@ void LayerTreeHost::ApplyScrollAndScale(const ScrollAndScaleSet& info) {
if (!root_layer_.get())
return;
- Layer* root_scroll_layer = FindFirstScrollableLayer(root_layer_.get());
gfx::Vector2d root_scroll_delta;
+ Layer* root_scroll_layer = FindFirstScrollableLayer(root_layer_.get());
for (size_t i = 0; i < info.scrolls.size(); ++i) {
Layer* layer =
@@ -964,8 +974,21 @@ void LayerTreeHost::ApplyScrollAndScale(const ScrollAndScaleSet& info) {
info.scrolls[i].scroll_delta);
}
}
- if (!root_scroll_delta.IsZero() || info.page_scale_delta != 1.f)
+
+ if (!root_scroll_delta.IsZero() || info.page_scale_delta != 1.f) {
+ // SetScrollOffsetFromImplSide above could have destroyed the tree,
+ // so re-get this layer before doing anything to it.
+ root_scroll_layer = FindFirstScrollableLayer(root_layer_.get());
+
+ // Preemptively apply the scroll offset here before sending it to
+ // the client. If the client comes back and sets it to the same value,
+ // then the layer can early out without needing a full commit.
+ if (root_scroll_layer) {
+ root_scroll_layer->SetScrollOffsetFromImplSide(
+ root_scroll_layer->scroll_offset() + root_scroll_delta);
+ }
client_->ApplyScrollAndScale(root_scroll_delta, info.page_scale_delta);
+ }
}
void LayerTreeHost::StartRateLimiter(WebKit::WebGraphicsContext3D* context3d) {

Powered by Google App Engine
This is Rietveld 408576698