Index: cc/trees/layer_tree_impl.cc |
diff --git a/cc/trees/layer_tree_impl.cc b/cc/trees/layer_tree_impl.cc |
index 4604043663920750438b5de260b0d8a0249d36b2..aa923cb77382469d2c889ec52fdcf47148a16b9b 100644 |
--- a/cc/trees/layer_tree_impl.cc |
+++ b/cc/trees/layer_tree_impl.cc |
@@ -17,6 +17,10 @@ |
#include "ui/gfx/size_conversions.h" |
#include "ui/gfx/vector2d_conversions.h" |
+namespace { |
+const size_t kMaxQueuedSwapPromiseNumber = 100; |
+} // namespace |
+ |
namespace cc { |
LayerTreeImpl::LayerTreeImpl(LayerTreeHostImpl* layer_tree_host_impl) |
@@ -119,6 +123,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( |
@@ -696,6 +703,36 @@ void LayerTreeImpl::ClearLatencyInfo() { |
latency_info_.Clear(); |
} |
+void LayerTreeImpl::QueueSwapPromise(const SwapPromise& swap_promise) { |
+ if (swap_promise_list_.size() > kMaxQueuedSwapPromiseNumber) { |
+ NOTREACHED() << "LayerTreeImpl::swap_promise_list overflows"; |
+ swap_promise_list_.clear(); |
+ } |
+ swap_promise_list_.push_back(swap_promise); |
+} |
+ |
+void LayerTreeImpl::TakeSwapPromise( |
+ std::vector<SwapPromise>* new_swap_promise) { |
+ swap_promise_list_.insert(swap_promise_list_.end(), |
+ new_swap_promise->begin(), |
+ new_swap_promise->end()); |
+ new_swap_promise->clear(); |
+} |
+ |
+void LayerTreeImpl::FinishSwapPromise() { |
+ for (size_t i = 0; i < swap_promise_list_.size(); i++) { |
+ swap_promise_list_[i].did_swap_callback.Run(); |
+ } |
+ swap_promise_list_.clear(); |
+} |
+ |
+void LayerTreeImpl::BreakSwapPromise(const std::string& msg) { |
+ for (size_t i = 0; i < swap_promise_list_.size(); i++) { |
+ swap_promise_list_[i].swap_aborted_callback.Run(msg); |
+ } |
+ swap_promise_list_.clear(); |
+} |
+ |
void LayerTreeImpl::DidModifyTilePriorities() { |
layer_tree_host_impl_->DidModifyTilePriorities(); |
} |