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

Unified Diff: content/browser/renderer_host/offscreen_canvas_frame_receiver_impl.cc

Issue 2333133003: Make Surface creation lazy for OffscreenCanvasFrameReceiverImpl (Closed)
Patch Set: Rebase Created 4 years, 3 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: 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

Powered by Google App Engine
This is Rietveld 408576698