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 95 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
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 Loading... | |
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 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 |