Index: components/exo/compositor_frame_sink_holder.cc |
diff --git a/components/exo/compositor_frame_sink_holder.cc b/components/exo/compositor_frame_sink_holder.cc |
index b516b842a52f5ec660badee0bfed3aa464022818..f63c358bce8e70335538e12e5ac5720a6dcc57e9 100644 |
--- a/components/exo/compositor_frame_sink_holder.cc |
+++ b/components/exo/compositor_frame_sink_holder.cc |
@@ -4,6 +4,7 @@ |
#include "components/exo/compositor_frame_sink_holder.h" |
+#include "cc/output/compositor_frame_sink.h" |
#include "cc/resources/returned_resource.h" |
#include "components/exo/surface.h" |
@@ -14,15 +15,22 @@ namespace exo { |
CompositorFrameSinkHolder::CompositorFrameSinkHolder( |
Surface* surface, |
- const cc::FrameSinkId& frame_sink_id, |
- cc::SurfaceManager* surface_manager) |
+ std::unique_ptr<cc::CompositorFrameSink> frame_sink) |
: surface_(surface), |
- frame_sink_( |
- new CompositorFrameSink(frame_sink_id, surface_manager, this)), |
- begin_frame_source_(base::MakeUnique<cc::ExternalBeginFrameSource>(this)), |
+ frame_sink_(std::move(frame_sink)), |
weak_factory_(this) { |
surface_->AddSurfaceObserver(this); |
- surface_->SetBeginFrameSource(begin_frame_source_.get()); |
+ frame_sink_->BindToClient(this); |
+} |
+ |
+CompositorFrameSinkHolder::~CompositorFrameSinkHolder() { |
+ frame_sink_->DetachFromClient(); |
+ if (surface_) |
+ surface_->RemoveSurfaceObserver(this); |
+ |
+ // Release all resources which aren't returned from CompositorFrameSink. |
+ for (auto& callback : release_callbacks_) |
+ callback.second.Run(gpu::SyncToken(), false); |
} |
bool CompositorFrameSinkHolder::HasReleaseCallbackForResource( |
@@ -38,17 +46,12 @@ void CompositorFrameSinkHolder::SetResourceReleaseCallback( |
} |
//////////////////////////////////////////////////////////////////////////////// |
-// cc::mojom::MojoCompositorFrameSinkClient overrides: |
+// cc::CompositorFrameSinkClient overrides: |
-void CompositorFrameSinkHolder::DidReceiveCompositorFrameAck( |
- const cc::ReturnedResourceArray& resources) { |
- ReclaimResources(resources); |
+void CompositorFrameSinkHolder::SetBeginFrameSource( |
+ cc::BeginFrameSource* source) { |
if (surface_) |
- surface_->DidReceiveCompositorFrameAck(); |
-} |
- |
-void CompositorFrameSinkHolder::OnBeginFrame(const cc::BeginFrameArgs& args) { |
- begin_frame_source_->OnBeginFrame(args); |
+ surface_->SetBeginFrameSource(source); |
} |
void CompositorFrameSinkHolder::ReclaimResources( |
@@ -63,17 +66,9 @@ void CompositorFrameSinkHolder::ReclaimResources( |
} |
} |
-//////////////////////////////////////////////////////////////////////////////// |
-// cc::ExternalBeginFrameSourceClient overrides: |
- |
-void CompositorFrameSinkHolder::OnNeedsBeginFrames(bool needs_begin_frames) { |
- frame_sink_->SetNeedsBeginFrame(needs_begin_frames); |
-} |
- |
-void CompositorFrameSinkHolder::OnDidFinishFrame(const cc::BeginFrameAck& ack) { |
- // If there was damage, the submitted CompositorFrame includes the ack. |
- if (!ack.has_damage) |
- frame_sink_->BeginFrameDidNotSwap(ack); |
+void CompositorFrameSinkHolder::DidReceiveCompositorFrameAck() { |
+ if (surface_) |
+ surface_->DidReceiveCompositorFrameAck(); |
} |
//////////////////////////////////////////////////////////////////////////////// |
@@ -84,12 +79,4 @@ void CompositorFrameSinkHolder::OnSurfaceDestroying(Surface* surface) { |
surface_ = nullptr; |
} |
-//////////////////////////////////////////////////////////////////////////////// |
-// ExoComopositorFrameSink, private: |
- |
-CompositorFrameSinkHolder::~CompositorFrameSinkHolder() { |
- if (surface_) |
- surface_->RemoveSurfaceObserver(this); |
-} |
- |
} // namespace exo |