Chromium Code Reviews| Index: cc/trees/layer_tree_impl.cc |
| diff --git a/cc/trees/layer_tree_impl.cc b/cc/trees/layer_tree_impl.cc |
| index 27688591420284b6853c22b0b7cb93350d623402..7a29bfc923767739cafbc1e6e8ab498f24ff5cb3 100644 |
| --- a/cc/trees/layer_tree_impl.cc |
| +++ b/cc/trees/layer_tree_impl.cc |
| @@ -70,7 +70,8 @@ LayerTreeImpl::LayerTreeImpl( |
| } |
| LayerTreeImpl::~LayerTreeImpl() { |
| - BreakSwapPromises(SwapPromise::SWAP_FAILS); |
| + BreakSwapPromises(IsActiveTree() ? SwapPromise::SWAP_FAILS |
| + : SwapPromise::ACTIVATION_FAILS); |
| // Need to explicitly clear the tree prior to destroying this so that |
| // the LayerTreeImpl pointer is still valid in the LayerImpl dtor. |
| @@ -744,6 +745,8 @@ void LayerTreeImpl::DidBecomeActive() { |
| root_layer(), [](LayerImpl* layer) { layer->DidBecomeActive(); }); |
| } |
| + for (auto* swap_promise : swap_promise_list_) |
| + swap_promise->DidActivate(); |
| devtools_instrumentation::DidActivateLayerTree(layer_tree_host_impl_->id(), |
| source_frame_number_); |
| } |
| @@ -990,8 +993,8 @@ void LayerTreeImpl::AsValueInto(base::trace_event::TracedValue* state) const { |
| state->EndArray(); |
| state->BeginArray("swap_promise_trace_ids"); |
| - for (size_t i = 0; i < swap_promise_list_.size(); i++) |
| - state->AppendDouble(swap_promise_list_[i]->TraceId()); |
| + for (auto* swap_promise : swap_promise_list_) |
| + state->AppendDouble(swap_promise->TraceId()); |
| state->EndArray(); |
| } |
| @@ -1072,20 +1075,22 @@ void LayerTreeImpl::QueueSwapPromise(scoped_ptr<SwapPromise> swap_promise) { |
| void LayerTreeImpl::PassSwapPromises( |
| ScopedPtrVector<SwapPromise>* new_swap_promise) { |
| + // Any left over promises have failed to swap before the next frame. |
| + BreakSwapPromises(SwapPromise::SWAP_FAILS); |
| swap_promise_list_.insert_and_take(swap_promise_list_.end(), |
|
piman
2015/05/13 22:47:15
nit: can this be a swap now? That's likely more ef
|
| new_swap_promise); |
| new_swap_promise->clear(); |
| } |
| void LayerTreeImpl::FinishSwapPromises(CompositorFrameMetadata* metadata) { |
| - for (size_t i = 0; i < swap_promise_list_.size(); i++) |
| - swap_promise_list_[i]->DidSwap(metadata); |
| + for (auto* swap_promise : swap_promise_list_) |
| + swap_promise->DidSwap(metadata); |
| swap_promise_list_.clear(); |
| } |
| void LayerTreeImpl::BreakSwapPromises(SwapPromise::DidNotSwapReason reason) { |
| - for (size_t i = 0; i < swap_promise_list_.size(); i++) |
| - swap_promise_list_[i]->DidNotSwap(reason); |
| + for (auto* swap_promise : swap_promise_list_) |
| + swap_promise->DidNotSwap(reason); |
| swap_promise_list_.clear(); |
| } |