Chromium Code Reviews| Index: cc/trees/layer_tree_host_impl.cc |
| diff --git a/cc/trees/layer_tree_host_impl.cc b/cc/trees/layer_tree_host_impl.cc |
| index f46d3cddfba829d2c71428b1f699eddaea703af4..8ed36a9373411cf815fe84fbffdbe2227d114e71 100644 |
| --- a/cc/trees/layer_tree_host_impl.cc |
| +++ b/cc/trees/layer_tree_host_impl.cc |
| @@ -1723,24 +1723,6 @@ void LayerTreeHostImpl::DrawLayers(FrameData* frame) { |
| renderer_->DrawFrame(&frame->render_passes); |
| // The render passes should be consumed by the renderer. |
| DCHECK(frame->render_passes.empty()); |
| - |
| - // The next frame should start by assuming nothing has changed, and changes |
| - // are noted as they occur. |
| - // TODO(boliu): If we did a temporary software renderer frame, propogate the |
| - // damage forward to the next frame. |
| - for (size_t i = 0; i < frame->render_surface_layer_list->size(); i++) { |
| - (*frame->render_surface_layer_list)[i] |
| - ->render_surface() |
| - ->damage_tracker() |
| - ->DidDrawDamagedArea(); |
| - } |
| - active_tree_->ResetAllChangeTracking(); |
| - |
| - active_tree_->set_has_ever_been_drawn(true); |
| - devtools_instrumentation::DidDrawFrame(id_); |
| - benchmark_instrumentation::IssueImplThreadRenderingStatsEvent( |
| - rendering_stats_instrumentation_->impl_thread_rendering_stats()); |
| - rendering_stats_instrumentation_->AccumulateAndClearImplThreadStats(); |
| } |
| void LayerTreeHostImpl::DidDrawAllLayers(const FrameData& frame) { |
| @@ -1881,28 +1863,48 @@ void LayerTreeHostImpl::UpdateTreeResourcesForGpuRasterizationIfNeeded() { |
| bool LayerTreeHostImpl::SwapBuffers(const LayerTreeHostImpl::FrameData& frame) { |
| ResetRequiresHighResToDraw(); |
| + bool swapped = false; |
| if (frame.has_no_damage) { |
| active_tree()->BreakSwapPromises(SwapPromise::SWAP_FAILS); |
| - return false; |
| - } |
| - CompositorFrameMetadata metadata = MakeCompositorFrameMetadata(); |
| - metadata.may_contain_video = frame.may_contain_video; |
| - active_tree()->FinishSwapPromises(&metadata); |
| - for (auto& latency : metadata.latency_info) { |
| - TRACE_EVENT_WITH_FLOW1("input,benchmark", "LatencyInfo.Flow", |
| - TRACE_ID_DONT_MANGLE(latency.trace_id()), |
| - TRACE_EVENT_FLAG_FLOW_IN | TRACE_EVENT_FLAG_FLOW_OUT, |
| - "step", "SwapBuffers"); |
| - // Only add the latency component once for renderer swap, not the browser |
| - // swap. |
| - if (!latency.FindLatency(ui::INPUT_EVENT_LATENCY_RENDERER_SWAP_COMPONENT, 0, |
| - nullptr)) { |
| - latency.AddLatencyNumber(ui::INPUT_EVENT_LATENCY_RENDERER_SWAP_COMPONENT, |
| - 0, 0); |
| + } else { |
| + CompositorFrameMetadata metadata = MakeCompositorFrameMetadata(); |
| + metadata.may_contain_video = frame.may_contain_video; |
| + active_tree()->FinishSwapPromises(&metadata); |
| + for (auto& latency : metadata.latency_info) { |
| + TRACE_EVENT_WITH_FLOW1( |
| + "input,benchmark", "LatencyInfo.Flow", |
| + TRACE_ID_DONT_MANGLE(latency.trace_id()), |
| + TRACE_EVENT_FLAG_FLOW_IN | TRACE_EVENT_FLAG_FLOW_OUT, "step", |
| + "SwapBuffers"); |
| + // Only add the latency component once for renderer swap, not the browser |
| + // swap. |
| + if (!latency.FindLatency(ui::INPUT_EVENT_LATENCY_RENDERER_SWAP_COMPONENT, |
| + 0, nullptr)) { |
| + latency.AddLatencyNumber( |
| + ui::INPUT_EVENT_LATENCY_RENDERER_SWAP_COMPONENT, 0, 0); |
| + } |
| } |
| + renderer_->SwapBuffers(std::move(metadata)); |
| + swapped = true; |
| } |
| - renderer_->SwapBuffers(std::move(metadata)); |
| - return true; |
| + |
| + // The next frame should start by assuming nothing has changed, and changes |
|
danakj
2016/09/07 00:25:35
I think this stuff shouldn't actually happen if ha
danakj
2016/09/07 00:32:15
Fixed.
|
| + // are noted as they occur. |
| + // TODO(boliu): If we did a temporary software renderer frame, propogate the |
| + // damage forward to the next frame. |
| + for (size_t i = 0; i < frame.render_surface_layer_list->size(); i++) { |
| + auto* surface = (*frame.render_surface_layer_list)[i]->render_surface(); |
| + surface->damage_tracker()->DidDrawDamagedArea(); |
| + } |
| + active_tree_->ResetAllChangeTracking(); |
| + |
| + active_tree_->set_has_ever_been_drawn(true); |
| + devtools_instrumentation::DidDrawFrame(id_); |
| + benchmark_instrumentation::IssueImplThreadRenderingStatsEvent( |
| + rendering_stats_instrumentation_->impl_thread_rendering_stats()); |
| + rendering_stats_instrumentation_->AccumulateAndClearImplThreadStats(); |
| + |
| + return swapped; |
| } |
| void LayerTreeHostImpl::WillBeginImplFrame(const BeginFrameArgs& args) { |