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

Unified Diff: cc/trees/layer_tree_impl.cc

Issue 60513007: Add SwapPromise support to LayerTreeHost and LayerTreeImpl (Closed) Base URL: http://git.chromium.org/chromium/src.git@master
Patch Set: rework SwapPromise() interface to have virtual DidSwap() & DidNotSwap() interface Created 7 years, 1 month 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 side-by-side diff with in-line comments
Download patch
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();
}

Powered by Google App Engine
This is Rietveld 408576698