Index: cc/trees/layer_tree_impl.cc |
diff --git a/cc/trees/layer_tree_impl.cc b/cc/trees/layer_tree_impl.cc |
index 15bd750b13e24e02122ecaeb8df7579b692fe4cf..dcae12c5077a0fd9c2d7ff06375e047d6600e8dc 100644 |
--- a/cc/trees/layer_tree_impl.cc |
+++ b/cc/trees/layer_tree_impl.cc |
@@ -20,6 +20,10 @@ |
#include "ui/gfx/size_conversions.h" |
#include "ui/gfx/vector2d_conversions.h" |
+namespace { |
+const size_t kMaxQueuedSwapPromiseNumber = 100; |
danakj
2013/11/13 23:22:09
Can we share these constants instead of duplicatin
Yufeng Shen (Slow to review)
2013/11/14 22:09:55
Moved to swap_promise.h
|
+} // namespace |
+ |
namespace cc { |
LayerTreeImpl::LayerTreeImpl(LayerTreeHostImpl* layer_tree_host_impl) |
@@ -122,6 +126,9 @@ void LayerTreeImpl::PushPropertiesTo(LayerTreeImpl* target_tree) { |
target_tree->SetLatencyInfo(latency_info_); |
latency_info_.Clear(); |
+ |
+ target_tree->TakeSwapPromise(&swap_promise_list_); |
+ |
target_tree->SetPageScaleFactorAndLimits( |
page_scale_factor(), min_page_scale_factor(), max_page_scale_factor()); |
target_tree->SetPageScaleDelta( |
@@ -708,6 +715,36 @@ void LayerTreeImpl::ClearLatencyInfo() { |
latency_info_.Clear(); |
} |
+void LayerTreeImpl::QueueSwapPromise(SwapPromise* swap_promise) { |
danakj
2013/11/13 23:22:09
Same comments here as in LTH
Yufeng Shen (Slow to review)
2013/11/14 22:09:55
Done.
|
+ if (swap_promise_list_.size() > kMaxQueuedSwapPromiseNumber) { |
+ NOTREACHED() << "LayerTreeImpl::swap_promise_list overflows"; |
+ BreakSwapPromise(SwapPromise::SWAP_PROMISE_LIST_OVERFLOW); |
+ } |
+ swap_promise_list_.push_back(swap_promise); |
+} |
+ |
+void LayerTreeImpl::TakeSwapPromise( |
+ ScopedVector<SwapPromise>* new_swap_promise) { |
+ swap_promise_list_.insert(swap_promise_list_.end(), |
+ new_swap_promise->begin(), |
+ new_swap_promise->end()); |
+ new_swap_promise->weak_clear(); |
+} |
+ |
+void LayerTreeImpl::FinishSwapPromise() { |
+ for (size_t i = 0; i < swap_promise_list_.size(); i++) { |
+ swap_promise_list_[i]->DidSwap(); |
+ } |
+ swap_promise_list_.clear(); |
+} |
+ |
+void LayerTreeImpl::BreakSwapPromise(SwapPromise::DidNotSwapReason reason) { |
+ for (size_t i = 0; i < swap_promise_list_.size(); i++) { |
+ swap_promise_list_[i]->DidNotSwap(reason); |
+ } |
+ swap_promise_list_.clear(); |
+} |
+ |
void LayerTreeImpl::DidModifyTilePriorities() { |
layer_tree_host_impl_->DidModifyTilePriorities(); |
} |