Index: cc/surfaces/display.cc |
diff --git a/cc/surfaces/display.cc b/cc/surfaces/display.cc |
index 3709cabb79530490977055028e80983d7c47b854..c24997bfecdd12da89421b106b970ef385ed4c45 100644 |
--- a/cc/surfaces/display.cc |
+++ b/cc/surfaces/display.cc |
@@ -207,7 +207,8 @@ void Display::DidLoseOutputSurface() { |
void Display::UpdateRootSurfaceResourcesLocked() { |
Surface* surface = surface_manager_->GetSurfaceForId(current_surface_id_); |
- bool root_surface_resources_locked = !surface || !surface->GetEligibleFrame(); |
+ bool root_surface_resources_locked = |
+ !surface || !surface->GetEligibleFrame().delegated_frame_data; |
if (scheduler_) |
scheduler_->SetRootSurfaceResourcesLocked(root_surface_resources_locked); |
} |
@@ -226,9 +227,8 @@ bool Display::DrawAndSwap() { |
return false; |
} |
- std::unique_ptr<CompositorFrame> frame = |
- aggregator_->Aggregate(current_surface_id_); |
- if (!frame) { |
+ CompositorFrame frame = aggregator_->Aggregate(current_surface_id_); |
+ if (!frame.delegated_frame_data) { |
TRACE_EVENT_INSTANT0("cc", "Empty aggregated frame.", |
TRACE_EVENT_SCOPE_THREAD); |
return false; |
@@ -241,11 +241,11 @@ bool Display::DrawAndSwap() { |
surface->RunDrawCallbacks(SurfaceDrawStatus::DRAWN); |
} |
- DelegatedFrameData* frame_data = frame->delegated_frame_data.get(); |
+ DelegatedFrameData* frame_data = frame.delegated_frame_data.get(); |
- frame->metadata.latency_info.insert(frame->metadata.latency_info.end(), |
- stored_latency_info_.begin(), |
- stored_latency_info_.end()); |
+ frame.metadata.latency_info.insert(frame.metadata.latency_info.end(), |
+ stored_latency_info_.begin(), |
+ stored_latency_info_.end()); |
stored_latency_info_.clear(); |
bool have_copy_requests = false; |
for (const auto& pass : frame_data->render_pass_list) { |
@@ -300,21 +300,21 @@ bool Display::DrawAndSwap() { |
bool should_swap = should_draw && size_matches; |
if (should_swap) { |
swapped_since_resize_ = true; |
- for (auto& latency : frame->metadata.latency_info) { |
+ for (auto& latency : frame.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", "Display::DrawAndSwap"); |
} |
benchmark_instrumentation::IssueDisplayRenderingStatsEvent(); |
- renderer_->SwapBuffers(std::move(frame->metadata)); |
+ renderer_->SwapBuffers(std::move(frame.metadata)); |
} else { |
if (have_damage && !size_matches) |
aggregator_->SetFullDamageForSurface(current_surface_id_); |
TRACE_EVENT_INSTANT0("cc", "Swap skipped.", TRACE_EVENT_SCOPE_THREAD); |
stored_latency_info_.insert(stored_latency_info_.end(), |
- frame->metadata.latency_info.begin(), |
- frame->metadata.latency_info.end()); |
+ frame.metadata.latency_info.begin(), |
+ frame.metadata.latency_info.end()); |
DidSwapBuffers(); |
DidSwapBuffersComplete(); |
} |
@@ -393,9 +393,9 @@ void Display::OnSurfaceDamaged(SurfaceId surface_id, bool* changed) { |
aggregator_->previous_contained_surfaces().count(surface_id)) { |
Surface* surface = surface_manager_->GetSurfaceForId(surface_id); |
if (surface) { |
- const CompositorFrame* current_frame = surface->GetEligibleFrame(); |
- if (!current_frame || !current_frame->delegated_frame_data || |
- !current_frame->delegated_frame_data->resource_list.size()) { |
+ const CompositorFrame& current_frame = surface->GetEligibleFrame(); |
+ if (!current_frame.delegated_frame_data || |
+ !current_frame.delegated_frame_data->resource_list.size()) { |
aggregator_->ReleaseResources(surface_id); |
} |
} |