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

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

Powered by Google App Engine
This is Rietveld 408576698