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

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: New test for texture state 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
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 448 matching lines...) Expand 10 before | Expand all | Expand 10 after
459 459
460 const RendererCapabilities& LayerTreeHost::GetRendererCapabilities() const { 460 const RendererCapabilities& LayerTreeHost::GetRendererCapabilities() const {
461 return proxy_->GetRendererCapabilities(); 461 return proxy_->GetRendererCapabilities();
462 } 462 }
463 463
464 void LayerTreeHost::SetNeedsAnimate() { 464 void LayerTreeHost::SetNeedsAnimate() {
465 DCHECK(proxy_->HasImplThread()); 465 DCHECK(proxy_->HasImplThread());
466 proxy_->SetNeedsAnimate(); 466 proxy_->SetNeedsAnimate();
467 } 467 }
468 468
469 void LayerTreeHost::SetNeedsUpdateLayers() {
470 proxy_->SetNeedsUpdateLayers();
471 }
472
469 void LayerTreeHost::SetNeedsCommit() { 473 void LayerTreeHost::SetNeedsCommit() {
470 if (!prepaint_callback_.IsCancelled()) { 474 if (!prepaint_callback_.IsCancelled()) {
471 TRACE_EVENT_INSTANT0("cc", 475 TRACE_EVENT_INSTANT0("cc",
472 "LayerTreeHost::SetNeedsCommit::cancel prepaint", 476 "LayerTreeHost::SetNeedsCommit::cancel prepaint",
473 TRACE_EVENT_SCOPE_THREAD); 477 TRACE_EVENT_SCOPE_THREAD);
474 prepaint_callback_.Cancel(); 478 prepaint_callback_.Cancel();
475 } 479 }
476 proxy_->SetNeedsCommit(); 480 proxy_->SetNeedsCommit();
477 } 481 }
478 482
(...skipping 92 matching lines...) Expand 10 before | Expand all | Expand 10 after
571 } 575 }
572 576
573 void LayerTreeHost::SetOverdrawBottomHeight(float overdraw_bottom_height) { 577 void LayerTreeHost::SetOverdrawBottomHeight(float overdraw_bottom_height) {
574 if (overdraw_bottom_height_ == overdraw_bottom_height) 578 if (overdraw_bottom_height_ == overdraw_bottom_height)
575 return; 579 return;
576 580
577 overdraw_bottom_height_ = overdraw_bottom_height; 581 overdraw_bottom_height_ = overdraw_bottom_height;
578 SetNeedsCommit(); 582 SetNeedsCommit();
579 } 583 }
580 584
585 void LayerTreeHost::ApplyPageScaleDeltaFromImplSide(float page_scale_delta) {
586 DCHECK(CommitRequested());
587 page_scale_factor_ *= page_scale_delta;
588 }
589
581 void LayerTreeHost::SetPageScaleFactorAndLimits(float page_scale_factor, 590 void LayerTreeHost::SetPageScaleFactorAndLimits(float page_scale_factor,
582 float min_page_scale_factor, 591 float min_page_scale_factor,
583 float max_page_scale_factor) { 592 float max_page_scale_factor) {
584 if (page_scale_factor == page_scale_factor_ && 593 if (page_scale_factor == page_scale_factor_ &&
585 min_page_scale_factor == min_page_scale_factor_ && 594 min_page_scale_factor == min_page_scale_factor_ &&
586 max_page_scale_factor == max_page_scale_factor_) 595 max_page_scale_factor == max_page_scale_factor_)
587 return; 596 return;
588 597
589 page_scale_factor_ = page_scale_factor; 598 page_scale_factor_ = page_scale_factor;
590 min_page_scale_factor_ = min_page_scale_factor; 599 min_page_scale_factor_ = min_page_scale_factor;
(...skipping 353 matching lines...) Expand 10 before | Expand all | Expand 10 after
944 953
945 in_paint_layer_contents_ = false; 954 in_paint_layer_contents_ = false;
946 955
947 occlusion_tracker.overdraw_metrics()->RecordMetrics(this); 956 occlusion_tracker.overdraw_metrics()->RecordMetrics(this);
948 } 957 }
949 958
950 void LayerTreeHost::ApplyScrollAndScale(const ScrollAndScaleSet& info) { 959 void LayerTreeHost::ApplyScrollAndScale(const ScrollAndScaleSet& info) {
951 if (!root_layer_.get()) 960 if (!root_layer_.get())
952 return; 961 return;
953 962
963 gfx::Vector2d root_scroll_delta;
954 Layer* root_scroll_layer = FindFirstScrollableLayer(root_layer_.get()); 964 Layer* root_scroll_layer = FindFirstScrollableLayer(root_layer_.get());
955 gfx::Vector2d root_scroll_delta;
956 965
957 for (size_t i = 0; i < info.scrolls.size(); ++i) { 966 for (size_t i = 0; i < info.scrolls.size(); ++i) {
958 Layer* layer = 967 Layer* layer =
959 LayerTreeHostCommon::FindLayerInSubtree(root_layer_.get(), 968 LayerTreeHostCommon::FindLayerInSubtree(root_layer_.get(),
960 info.scrolls[i].layer_id); 969 info.scrolls[i].layer_id);
961 if (!layer) 970 if (!layer)
962 continue; 971 continue;
963 if (layer == root_scroll_layer) { 972 if (layer == root_scroll_layer) {
964 root_scroll_delta += info.scrolls[i].scroll_delta; 973 root_scroll_delta += info.scrolls[i].scroll_delta;
965 } else { 974 } else {
966 layer->SetScrollOffsetFromImplSide(layer->scroll_offset() + 975 layer->SetScrollOffsetFromImplSide(layer->scroll_offset() +
967 info.scrolls[i].scroll_delta); 976 info.scrolls[i].scroll_delta);
968 } 977 }
969 } 978 }
970 if (!root_scroll_delta.IsZero() || info.page_scale_delta != 1.f) 979
980 if (!root_scroll_delta.IsZero() || info.page_scale_delta != 1.f) {
981 // SetScrollOffsetFromImplSide above could have destroyed the tree,
982 // so re-get this layer before doing anything to it.
983 root_scroll_layer = FindFirstScrollableLayer(root_layer_.get());
984
985 // Preemptively apply the scroll offset and scale delta here before sending
986 // it to the client. If the client comes back and sets it to the same
987 // value, then the layer can early out without needing a full commit.
988 if (root_scroll_layer) {
989 root_scroll_layer->SetScrollOffsetFromImplSide(
990 root_scroll_layer->scroll_offset() + root_scroll_delta);
991 }
992 ApplyPageScaleDeltaFromImplSide(info.page_scale_delta);
971 client_->ApplyScrollAndScale(root_scroll_delta, info.page_scale_delta); 993 client_->ApplyScrollAndScale(root_scroll_delta, info.page_scale_delta);
994 }
972 } 995 }
973 996
974 void LayerTreeHost::StartRateLimiter(WebKit::WebGraphicsContext3D* context3d) { 997 void LayerTreeHost::StartRateLimiter(WebKit::WebGraphicsContext3D* context3d) {
975 if (animating_) 998 if (animating_)
976 return; 999 return;
977 1000
978 DCHECK(context3d); 1001 DCHECK(context3d);
979 RateLimiterMap::iterator it = rate_limiters_.find(context3d); 1002 RateLimiterMap::iterator it = rate_limiters_.find(context3d);
980 if (it != rate_limiters_.end()) { 1003 if (it != rate_limiters_.end()) {
981 it->second->Start(); 1004 it->second->Start();
(...skipping 79 matching lines...) Expand 10 before | Expand all | Expand 10 after
1061 for (AnimationRegistrar::AnimationControllerMap::iterator iter = copy.begin(); 1084 for (AnimationRegistrar::AnimationControllerMap::iterator iter = copy.begin();
1062 iter != copy.end(); 1085 iter != copy.end();
1063 ++iter) { 1086 ++iter) {
1064 (*iter).second->Animate(monotonic_time); 1087 (*iter).second->Animate(monotonic_time);
1065 bool start_ready_animations = true; 1088 bool start_ready_animations = true;
1066 (*iter).second->UpdateState(start_ready_animations, NULL); 1089 (*iter).second->UpdateState(start_ready_animations, NULL);
1067 } 1090 }
1068 } 1091 }
1069 1092
1070 } // namespace cc 1093 } // namespace cc
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698