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

Side by Side 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: Another test 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 unified diff | Download patch | Annotate | Revision Log
« no previous file with comments | « cc/trees/layer_tree_host.h ('k') | cc/trees/layer_tree_host_impl.cc » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright 2011 The Chromium Authors. All rights reserved. 1 // Copyright 2011 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "cc/trees/layer_tree_host.h" 5 #include "cc/trees/layer_tree_host.h"
6 6
7 #include <algorithm> 7 #include <algorithm>
8 #include <stack> 8 #include <stack>
9 9
10 #include "base/bind.h" 10 #include "base/bind.h"
(...skipping 451 matching lines...) Expand 10 before | Expand all | Expand 10 after
462 462
463 const RendererCapabilities& LayerTreeHost::GetRendererCapabilities() const { 463 const RendererCapabilities& LayerTreeHost::GetRendererCapabilities() const {
464 return proxy_->GetRendererCapabilities(); 464 return proxy_->GetRendererCapabilities();
465 } 465 }
466 466
467 void LayerTreeHost::SetNeedsAnimate() { 467 void LayerTreeHost::SetNeedsAnimate() {
468 DCHECK(proxy_->HasImplThread()); 468 DCHECK(proxy_->HasImplThread());
469 proxy_->SetNeedsAnimate(); 469 proxy_->SetNeedsAnimate();
470 } 470 }
471 471
472 void LayerTreeHost::SetNeedsUpdateLayers() { proxy_->SetNeedsUpdateLayers(); }
473
472 void LayerTreeHost::SetNeedsCommit() { 474 void LayerTreeHost::SetNeedsCommit() {
473 if (!prepaint_callback_.IsCancelled()) { 475 if (!prepaint_callback_.IsCancelled()) {
474 TRACE_EVENT_INSTANT0("cc", 476 TRACE_EVENT_INSTANT0("cc",
475 "LayerTreeHost::SetNeedsCommit::cancel prepaint", 477 "LayerTreeHost::SetNeedsCommit::cancel prepaint",
476 TRACE_EVENT_SCOPE_THREAD); 478 TRACE_EVENT_SCOPE_THREAD);
477 prepaint_callback_.Cancel(); 479 prepaint_callback_.Cancel();
478 } 480 }
479 proxy_->SetNeedsCommit(); 481 proxy_->SetNeedsCommit();
480 } 482 }
481 483
(...skipping 92 matching lines...) Expand 10 before | Expand all | Expand 10 after
574 } 576 }
575 577
576 void LayerTreeHost::SetOverdrawBottomHeight(float overdraw_bottom_height) { 578 void LayerTreeHost::SetOverdrawBottomHeight(float overdraw_bottom_height) {
577 if (overdraw_bottom_height_ == overdraw_bottom_height) 579 if (overdraw_bottom_height_ == overdraw_bottom_height)
578 return; 580 return;
579 581
580 overdraw_bottom_height_ = overdraw_bottom_height; 582 overdraw_bottom_height_ = overdraw_bottom_height;
581 SetNeedsCommit(); 583 SetNeedsCommit();
582 } 584 }
583 585
586 void LayerTreeHost::ApplyPageScaleDeltaFromImplSide(float page_scale_delta) {
587 DCHECK(CommitRequested());
588 page_scale_factor_ *= page_scale_delta;
589 }
590
584 void LayerTreeHost::SetPageScaleFactorAndLimits(float page_scale_factor, 591 void LayerTreeHost::SetPageScaleFactorAndLimits(float page_scale_factor,
585 float min_page_scale_factor, 592 float min_page_scale_factor,
586 float max_page_scale_factor) { 593 float max_page_scale_factor) {
587 if (page_scale_factor == page_scale_factor_ && 594 if (page_scale_factor == page_scale_factor_ &&
588 min_page_scale_factor == min_page_scale_factor_ && 595 min_page_scale_factor == min_page_scale_factor_ &&
589 max_page_scale_factor == max_page_scale_factor_) 596 max_page_scale_factor == max_page_scale_factor_)
590 return; 597 return;
591 598
592 page_scale_factor_ = page_scale_factor; 599 page_scale_factor_ = page_scale_factor;
593 min_page_scale_factor_ = min_page_scale_factor; 600 min_page_scale_factor_ = min_page_scale_factor;
(...skipping 363 matching lines...) Expand 10 before | Expand all | Expand 10 after
957 964
958 in_paint_layer_contents_ = false; 965 in_paint_layer_contents_ = false;
959 966
960 occlusion_tracker.overdraw_metrics()->RecordMetrics(this); 967 occlusion_tracker.overdraw_metrics()->RecordMetrics(this);
961 } 968 }
962 969
963 void LayerTreeHost::ApplyScrollAndScale(const ScrollAndScaleSet& info) { 970 void LayerTreeHost::ApplyScrollAndScale(const ScrollAndScaleSet& info) {
964 if (!root_layer_.get()) 971 if (!root_layer_.get())
965 return; 972 return;
966 973
974 gfx::Vector2d root_scroll_delta;
967 Layer* root_scroll_layer = FindFirstScrollableLayer(root_layer_.get()); 975 Layer* root_scroll_layer = FindFirstScrollableLayer(root_layer_.get());
968 gfx::Vector2d root_scroll_delta;
969 976
970 for (size_t i = 0; i < info.scrolls.size(); ++i) { 977 for (size_t i = 0; i < info.scrolls.size(); ++i) {
971 Layer* layer = 978 Layer* layer =
972 LayerTreeHostCommon::FindLayerInSubtree(root_layer_.get(), 979 LayerTreeHostCommon::FindLayerInSubtree(root_layer_.get(),
973 info.scrolls[i].layer_id); 980 info.scrolls[i].layer_id);
974 if (!layer) 981 if (!layer)
975 continue; 982 continue;
976 if (layer == root_scroll_layer) { 983 if (layer == root_scroll_layer) {
977 root_scroll_delta += info.scrolls[i].scroll_delta; 984 root_scroll_delta += info.scrolls[i].scroll_delta;
978 } else { 985 } else {
979 layer->SetScrollOffsetFromImplSide(layer->scroll_offset() + 986 layer->SetScrollOffsetFromImplSide(layer->scroll_offset() +
980 info.scrolls[i].scroll_delta); 987 info.scrolls[i].scroll_delta);
981 } 988 }
982 } 989 }
983 if (!root_scroll_delta.IsZero() || info.page_scale_delta != 1.f) 990
991 if (!root_scroll_delta.IsZero() || info.page_scale_delta != 1.f) {
992 // SetScrollOffsetFromImplSide above could have destroyed the tree,
993 // so re-get this layer before doing anything to it.
994 root_scroll_layer = FindFirstScrollableLayer(root_layer_.get());
995
996 // Preemptively apply the scroll offset and scale delta here before sending
997 // it to the client. If the client comes back and sets it to the same
998 // value, then the layer can early out without needing a full commit.
999 if (root_scroll_layer) {
1000 root_scroll_layer->SetScrollOffsetFromImplSide(
1001 root_scroll_layer->scroll_offset() + root_scroll_delta);
1002 }
1003 ApplyPageScaleDeltaFromImplSide(info.page_scale_delta);
984 client_->ApplyScrollAndScale(root_scroll_delta, info.page_scale_delta); 1004 client_->ApplyScrollAndScale(root_scroll_delta, info.page_scale_delta);
1005 }
985 } 1006 }
986 1007
987 void LayerTreeHost::StartRateLimiter(WebKit::WebGraphicsContext3D* context3d) { 1008 void LayerTreeHost::StartRateLimiter(WebKit::WebGraphicsContext3D* context3d) {
988 if (animating_) 1009 if (animating_)
989 return; 1010 return;
990 1011
991 DCHECK(context3d); 1012 DCHECK(context3d);
992 RateLimiterMap::iterator it = rate_limiters_.find(context3d); 1013 RateLimiterMap::iterator it = rate_limiters_.find(context3d);
993 if (it != rate_limiters_.end()) { 1014 if (it != rate_limiters_.end()) {
994 it->second->Start(); 1015 it->second->Start();
(...skipping 79 matching lines...) Expand 10 before | Expand all | Expand 10 after
1074 for (AnimationRegistrar::AnimationControllerMap::iterator iter = copy.begin(); 1095 for (AnimationRegistrar::AnimationControllerMap::iterator iter = copy.begin();
1075 iter != copy.end(); 1096 iter != copy.end();
1076 ++iter) { 1097 ++iter) {
1077 (*iter).second->Animate(monotonic_time); 1098 (*iter).second->Animate(monotonic_time);
1078 bool start_ready_animations = true; 1099 bool start_ready_animations = true;
1079 (*iter).second->UpdateState(start_ready_animations, NULL); 1100 (*iter).second->UpdateState(start_ready_animations, NULL);
1080 } 1101 }
1081 } 1102 }
1082 1103
1083 } // namespace cc 1104 } // namespace cc
OLDNEW
« no previous file with comments | « cc/trees/layer_tree_host.h ('k') | cc/trees/layer_tree_host_impl.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698