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

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: 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 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 95 matching lines...) Expand 10 before | Expand all | Expand 10 after
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
580 void LayerTreeHost::SetPageScaleFactorAndLimits(float page_scale_factor, 584 void LayerTreeHost::SetPageScaleFactorAndLimits(float page_scale_factor,
581 float min_page_scale_factor, 585 float min_page_scale_factor,
582 float max_page_scale_factor) { 586 float max_page_scale_factor) {
583 if (page_scale_factor == page_scale_factor_ && 587 bool same_page_scale_factor = page_scale_factor == page_scale_factor_;
588 bool same_page_scale_limits =
584 min_page_scale_factor == min_page_scale_factor_ && 589 min_page_scale_factor == min_page_scale_factor_ &&
585 max_page_scale_factor == max_page_scale_factor_) 590 max_page_scale_factor == max_page_scale_factor_;
591 if (same_page_scale_factor && same_page_scale_limits)
586 return; 592 return;
587 593
588 page_scale_factor_ = page_scale_factor; 594 page_scale_factor_ = page_scale_factor;
589 min_page_scale_factor_ = min_page_scale_factor; 595 min_page_scale_factor_ = min_page_scale_factor;
590 max_page_scale_factor_ = max_page_scale_factor; 596 max_page_scale_factor_ = max_page_scale_factor;
591 SetNeedsCommit(); 597
598 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.
599 SetNeedsUpdateLayers();
600 else
601 SetNeedsCommit();
592 } 602 }
593 603
594 void LayerTreeHost::SetVisible(bool visible) { 604 void LayerTreeHost::SetVisible(bool visible) {
595 if (visible_ == visible) 605 if (visible_ == visible)
596 return; 606 return;
597 visible_ = visible; 607 visible_ = visible;
598 if (!visible) 608 if (!visible)
599 ReduceMemoryUsage(); 609 ReduceMemoryUsage();
600 proxy_->SetVisible(visible); 610 proxy_->SetVisible(visible);
601 } 611 }
(...skipping 339 matching lines...) Expand 10 before | Expand all | Expand 10 after
941 951
942 in_paint_layer_contents_ = false; 952 in_paint_layer_contents_ = false;
943 953
944 occlusion_tracker.overdraw_metrics()->RecordMetrics(this); 954 occlusion_tracker.overdraw_metrics()->RecordMetrics(this);
945 } 955 }
946 956
947 void LayerTreeHost::ApplyScrollAndScale(const ScrollAndScaleSet& info) { 957 void LayerTreeHost::ApplyScrollAndScale(const ScrollAndScaleSet& info) {
948 if (!root_layer_.get()) 958 if (!root_layer_.get())
949 return; 959 return;
950 960
961 gfx::Vector2d root_scroll_delta;
951 Layer* root_scroll_layer = FindFirstScrollableLayer(root_layer_.get()); 962 Layer* root_scroll_layer = FindFirstScrollableLayer(root_layer_.get());
952 gfx::Vector2d root_scroll_delta;
953 963
954 for (size_t i = 0; i < info.scrolls.size(); ++i) { 964 for (size_t i = 0; i < info.scrolls.size(); ++i) {
955 Layer* layer = 965 Layer* layer =
956 LayerTreeHostCommon::FindLayerInSubtree(root_layer_.get(), 966 LayerTreeHostCommon::FindLayerInSubtree(root_layer_.get(),
957 info.scrolls[i].layer_id); 967 info.scrolls[i].layer_id);
958 if (!layer) 968 if (!layer)
959 continue; 969 continue;
960 if (layer == root_scroll_layer) { 970 if (layer == root_scroll_layer) {
961 root_scroll_delta += info.scrolls[i].scroll_delta; 971 root_scroll_delta += info.scrolls[i].scroll_delta;
962 } else { 972 } else {
963 layer->SetScrollOffsetFromImplSide(layer->scroll_offset() + 973 layer->SetScrollOffsetFromImplSide(layer->scroll_offset() +
964 info.scrolls[i].scroll_delta); 974 info.scrolls[i].scroll_delta);
965 } 975 }
966 } 976 }
967 if (!root_scroll_delta.IsZero() || info.page_scale_delta != 1.f) 977
978 if (!root_scroll_delta.IsZero() || info.page_scale_delta != 1.f) {
979 // SetScrollOffsetFromImplSide above could have destroyed the tree,
980 // so re-get this layer before doing anything to it.
981 root_scroll_layer = FindFirstScrollableLayer(root_layer_.get());
982
983 // Preemptively apply the scroll offset here before sending it to
984 // the client. If the client comes back and sets it to the same value,
985 // then the layer can early out without needing a full commit.
986 if (root_scroll_layer) {
987 root_scroll_layer->SetScrollOffsetFromImplSide(
988 root_scroll_layer->scroll_offset() + root_scroll_delta);
989 }
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