Index: content/browser/renderer_host/offscreen_canvas_frame_receiver_impl.cc |
diff --git a/content/browser/renderer_host/offscreen_canvas_frame_receiver_impl.cc b/content/browser/renderer_host/offscreen_canvas_frame_receiver_impl.cc |
index 7e9a204d848070fb259c7b8b2eef7b9eb9dedc90..3496764baec403ba23da29e3d3fff80ec13343b2 100644 |
--- a/content/browser/renderer_host/offscreen_canvas_frame_receiver_impl.cc |
+++ b/content/browser/renderer_host/offscreen_canvas_frame_receiver_impl.cc |
@@ -13,7 +13,18 @@ namespace content { |
OffscreenCanvasFrameReceiverImpl::OffscreenCanvasFrameReceiverImpl() {} |
-OffscreenCanvasFrameReceiverImpl::~OffscreenCanvasFrameReceiverImpl() {} |
+OffscreenCanvasFrameReceiverImpl::~OffscreenCanvasFrameReceiverImpl() { |
+ if (surface_factory_) { |
+ if (!GetSurfaceManager()) { |
+ // Inform SurfaceFactory that SurfaceManager's no longer alive to |
+ // avoid its destruction error. |
+ surface_factory_->DidDestroySurfaceManager(); |
+ } else { |
+ GetSurfaceManager()->InvalidateSurfaceClientId(surface_id_.client_id()); |
+ } |
+ surface_factory_->Destroy(surface_id_); |
+ } |
+} |
// static |
void OffscreenCanvasFrameReceiverImpl::Create( |
@@ -25,11 +36,30 @@ void OffscreenCanvasFrameReceiverImpl::Create( |
void OffscreenCanvasFrameReceiverImpl::SubmitCompositorFrame( |
const cc::SurfaceId& surface_id, |
cc::CompositorFrame frame) { |
- cc::Surface* surface = GetSurfaceManager()->GetSurfaceForId(surface_id); |
- if (surface) { |
- surface->QueueFrame(std::move(frame), base::Closure()); |
+ if (!surface_factory_) { |
+ cc::SurfaceManager* manager = GetSurfaceManager(); |
+ surface_factory_ = base::MakeUnique<cc::SurfaceFactory>(manager, this); |
+ surface_factory_->Create(surface_id); |
+ |
+ GetSurfaceManager()->RegisterSurfaceClientId(surface_id.client_id()); |
+ } |
+ if (surface_id_.is_null()) { |
+ surface_id_ = surface_id; |
} |
- // If surface doet not exist, drop the frame. |
+ surface_factory_->SubmitCompositorFrame(surface_id, std::move(frame), |
+ base::Closure()); |
} |
+// TODO(619136): Implement cc::SurfaceFactoryClient functions for resources |
+// return. |
+void OffscreenCanvasFrameReceiverImpl::ReturnResources( |
+ const cc::ReturnedResourceArray& resources) {} |
+ |
+void OffscreenCanvasFrameReceiverImpl::WillDrawSurface( |
+ const cc::SurfaceId& id, |
+ const gfx::Rect& damage_rect) {} |
+ |
+void OffscreenCanvasFrameReceiverImpl::SetBeginFrameSource( |
+ cc::BeginFrameSource* begin_frame_source) {} |
+ |
} // namespace content |