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

Unified Diff: services/ui/ws/frame_generator.cc

Issue 2651843002: FrameGenerator should receive SurfaceInfo and use it in frame generation (Closed)
Patch Set: c Created 3 years, 11 months 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: services/ui/ws/frame_generator.cc
diff --git a/services/ui/ws/frame_generator.cc b/services/ui/ws/frame_generator.cc
index 114af93278c4e08ac9226f8cb2db900e378ae173..1e58213b2c42c6da98cd357a122c2e5b7845fafb 100644
--- a/services/ui/ws/frame_generator.cc
+++ b/services/ui/ws/frame_generator.cc
@@ -46,23 +46,19 @@ void FrameGenerator::OnAcceleratedWidgetAvailable(
root_window_->CreateDisplayCompositorFrameSink(
widget, std::move(request), binding_.CreateInterfacePtrAndBind(),
std::move(display_private_request));
- // TODO(fsamuel): This means we're always requesting a new BeginFrame signal
- // even when we don't need it. Once surface ID propagation work is done,
- // this will not be necessary because FrameGenerator will only need a
- // BeginFrame if the window manager changes.
- compositor_frame_sink_->SetNeedsBeginFrame(true);
}
-void FrameGenerator::OnSurfaceCreated(const cc::SurfaceId& surface_id,
- ServerWindow* window) {
- DCHECK(surface_id.is_valid());
+void FrameGenerator::OnSurfaceCreated(const cc::SurfaceInfo& surface_info) {
+ DCHECK(surface_info.id().is_valid());
// Only handle embedded surfaces changing here. The display root surface
// changing is handled immediately after the CompositorFrame is submitted.
// TODO(samans): Only tell FrameGenerator about WM surface instead of all
// all surfaces.
- if (window == delegate_->GetActiveRootWindow())
- window_manager_surface_id_ = surface_id;
+ if (surface_info != window_manager_surface_info_) {
+ compositor_frame_sink_->SetNeedsBeginFrame(true);
+ window_manager_surface_info_ = surface_info;
+ }
}
void FrameGenerator::DidReceiveCompositorFrameAck() {}
@@ -84,6 +80,7 @@ void FrameGenerator::OnBeginFrame(const cc::BeginFrameArgs& begin_frame_arags) {
compositor_frame_sink_->SubmitCompositorFrame(local_frame_id_,
std::move(frame));
+ compositor_frame_sink_->SetNeedsBeginFrame(false);
last_submitted_frame_size_ = frame_size;
}
}
@@ -127,8 +124,10 @@ cc::CompositorFrame FrameGenerator::GenerateCompositorFrame(
}
frame.metadata.device_scale_factor = device_scale_factor_;
- if (window_manager_surface_id_.is_valid())
- frame.metadata.referenced_surfaces.push_back(window_manager_surface_id_);
+ if (window_manager_surface_info_.id().is_valid()) {
+ frame.metadata.referenced_surfaces.push_back(
+ window_manager_surface_info_.id());
+ }
return frame;
}

Powered by Google App Engine
This is Rietveld 408576698