| OLD | NEW |
| 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 Loading... |
| 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 Loading... |
| 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 Loading... |
| 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 Loading... |
| 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 |
| OLD | NEW |