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

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: Add more comments Created 7 years, 4 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 364 matching lines...) Expand 10 before | Expand all | Expand 10 after
958 965
959 in_paint_layer_contents_ = false; 966 in_paint_layer_contents_ = false;
960 967
961 occlusion_tracker.overdraw_metrics()->RecordMetrics(this); 968 occlusion_tracker.overdraw_metrics()->RecordMetrics(this);
962 } 969 }
963 970
964 void LayerTreeHost::ApplyScrollAndScale(const ScrollAndScaleSet& info) { 971 void LayerTreeHost::ApplyScrollAndScale(const ScrollAndScaleSet& info) {
965 if (!root_layer_.get()) 972 if (!root_layer_.get())
966 return; 973 return;
967 974
975 gfx::Vector2d root_scroll_delta;
968 Layer* root_scroll_layer = FindFirstScrollableLayer(root_layer_.get()); 976 Layer* root_scroll_layer = FindFirstScrollableLayer(root_layer_.get());
969 gfx::Vector2d root_scroll_delta;
970 977
971 for (size_t i = 0; i < info.scrolls.size(); ++i) { 978 for (size_t i = 0; i < info.scrolls.size(); ++i) {
972 Layer* layer = 979 Layer* layer =
973 LayerTreeHostCommon::FindLayerInSubtree(root_layer_.get(), 980 LayerTreeHostCommon::FindLayerInSubtree(root_layer_.get(),
974 info.scrolls[i].layer_id); 981 info.scrolls[i].layer_id);
975 if (!layer) 982 if (!layer)
976 continue; 983 continue;
977 if (layer == root_scroll_layer) { 984 if (layer == root_scroll_layer) {
978 root_scroll_delta += info.scrolls[i].scroll_delta; 985 root_scroll_delta += info.scrolls[i].scroll_delta;
979 } else { 986 } else {
980 layer->SetScrollOffsetFromImplSide(layer->scroll_offset() + 987 layer->SetScrollOffsetFromImplSide(layer->scroll_offset() +
981 info.scrolls[i].scroll_delta); 988 info.scrolls[i].scroll_delta);
982 } 989 }
983 } 990 }
984 if (!root_scroll_delta.IsZero() || info.page_scale_delta != 1.f) 991
992 if (!root_scroll_delta.IsZero() || info.page_scale_delta != 1.f) {
993 // SetScrollOffsetFromImplSide above could have destroyed the tree,
994 // so re-get this layer before doing anything to it.
995 root_scroll_layer = FindFirstScrollableLayer(root_layer_.get());
996
997 // Preemptively apply the scroll offset and scale delta here before sending
998 // it to the client. If the client comes back and sets it to the same
999 // value, then the layer can early out without needing a full commit.
1000 if (root_scroll_layer) {
1001 root_scroll_layer->SetScrollOffsetFromImplSide(
1002 root_scroll_layer->scroll_offset() + root_scroll_delta);
1003 }
1004 ApplyPageScaleDeltaFromImplSide(info.page_scale_delta);
985 client_->ApplyScrollAndScale(root_scroll_delta, info.page_scale_delta); 1005 client_->ApplyScrollAndScale(root_scroll_delta, info.page_scale_delta);
1006 }
986 } 1007 }
987 1008
988 void LayerTreeHost::StartRateLimiter(WebKit::WebGraphicsContext3D* context3d) { 1009 void LayerTreeHost::StartRateLimiter(WebKit::WebGraphicsContext3D* context3d) {
989 if (animating_) 1010 if (animating_)
990 return; 1011 return;
991 1012
992 DCHECK(context3d); 1013 DCHECK(context3d);
993 RateLimiterMap::iterator it = rate_limiters_.find(context3d); 1014 RateLimiterMap::iterator it = rate_limiters_.find(context3d);
994 if (it != rate_limiters_.end()) { 1015 if (it != rate_limiters_.end()) {
995 it->second->Start(); 1016 it->second->Start();
(...skipping 79 matching lines...) Expand 10 before | Expand all | Expand 10 after
1075 for (AnimationRegistrar::AnimationControllerMap::iterator iter = copy.begin(); 1096 for (AnimationRegistrar::AnimationControllerMap::iterator iter = copy.begin();
1076 iter != copy.end(); 1097 iter != copy.end();
1077 ++iter) { 1098 ++iter) {
1078 (*iter).second->Animate(monotonic_time); 1099 (*iter).second->Animate(monotonic_time);
1079 bool start_ready_animations = true; 1100 bool start_ready_animations = true;
1080 (*iter).second->UpdateState(start_ready_animations, NULL); 1101 (*iter).second->UpdateState(start_ready_animations, NULL);
1081 } 1102 }
1082 } 1103 }
1083 1104
1084 } // namespace cc 1105 } // 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