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

Side by Side Diff: content/browser/renderer_host/offscreen_canvas_compositor_frame_sink.cc

Issue 2614493003: Manage OffscreenCanvasCompositorFrameSink lifetime explicitly (Closed)
Patch Set: Rebased 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 unified diff | Download patch
OLDNEW
1 // Copyright 2016 The Chromium Authors. All rights reserved. 1 // Copyright 2016 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "content/browser/renderer_host/offscreen_canvas_compositor_frame_sink.h " 5 #include "content/browser/renderer_host/offscreen_canvas_compositor_frame_sink.h "
6 6
7 #include "base/memory/ptr_util.h" 7 #include "base/memory/ptr_util.h"
8 #include "cc/surfaces/surface.h" 8 #include "cc/surfaces/surface.h"
9 #include "cc/surfaces/surface_manager.h" 9 #include "cc/surfaces/surface_manager.h"
10 #include "content/browser/renderer_host/offscreen_canvas_compositor_frame_sink_p rovider_impl.h"
10 #include "mojo/public/cpp/bindings/strong_binding.h" 11 #include "mojo/public/cpp/bindings/strong_binding.h"
11 12
12 namespace content { 13 namespace content {
13 14
14 // static 15 OffscreenCanvasCompositorFrameSink::OffscreenCanvasCompositorFrameSink(
15 void OffscreenCanvasCompositorFrameSink::Create( 16 OffscreenCanvasCompositorFrameSinkProviderImpl* provider,
16 const cc::FrameSinkId& frame_sink_id, 17 const cc::FrameSinkId& frame_sink_id,
17 cc::SurfaceManager* surface_manager, 18 cc::mojom::MojoCompositorFrameSinkRequest request,
18 cc::mojom::MojoCompositorFrameSinkClientPtr client, 19 cc::mojom::MojoCompositorFrameSinkClientPtr client)
19 cc::mojom::MojoCompositorFrameSinkRequest request) { 20 : provider_(provider),
20 std::unique_ptr<OffscreenCanvasCompositorFrameSink> impl = 21 support_(this,
21 base::MakeUnique<OffscreenCanvasCompositorFrameSink>( 22 provider->GetSurfaceManager(),
22 frame_sink_id, surface_manager, std::move(client)); 23 frame_sink_id,
23 OffscreenCanvasCompositorFrameSink* compositor_frame_sink = impl.get(); 24 nullptr,
24 compositor_frame_sink->binding_ = 25 nullptr),
25 mojo::MakeStrongBinding(std::move(impl), std::move(request)); 26 client_(std::move(client)),
27 binding_(this, std::move(request)) {
28 binding_.set_connection_error_handler(
29 base::Bind(&OffscreenCanvasCompositorFrameSink::OnClientConnectionLost,
30 base::Unretained(this)));
26 } 31 }
27 32
28 OffscreenCanvasCompositorFrameSink::OffscreenCanvasCompositorFrameSink(
29 const cc::FrameSinkId& frame_sink_id,
30 cc::SurfaceManager* surface_manager,
31 cc::mojom::MojoCompositorFrameSinkClientPtr client)
32 : support_(this, surface_manager, frame_sink_id, nullptr, nullptr),
33 client_(std::move(client)) {}
34
35 OffscreenCanvasCompositorFrameSink::~OffscreenCanvasCompositorFrameSink() {} 33 OffscreenCanvasCompositorFrameSink::~OffscreenCanvasCompositorFrameSink() {}
36 34
37 void OffscreenCanvasCompositorFrameSink::SetNeedsBeginFrame( 35 void OffscreenCanvasCompositorFrameSink::SetNeedsBeginFrame(
38 bool needs_begin_frame) { 36 bool needs_begin_frame) {
39 support_.SetNeedsBeginFrame(needs_begin_frame); 37 support_.SetNeedsBeginFrame(needs_begin_frame);
40 } 38 }
41 39
42 void OffscreenCanvasCompositorFrameSink::SubmitCompositorFrame( 40 void OffscreenCanvasCompositorFrameSink::SubmitCompositorFrame(
43 const cc::LocalFrameId& local_frame_id, 41 const cc::LocalFrameId& local_frame_id,
44 cc::CompositorFrame frame) { 42 cc::CompositorFrame frame) {
(...skipping 42 matching lines...) Expand 10 before | Expand all | Expand 10 after
87 const cc::ReturnedResourceArray& resources) { 85 const cc::ReturnedResourceArray& resources) {
88 if (client_) 86 if (client_)
89 client_->ReclaimResources(resources); 87 client_->ReclaimResources(resources);
90 } 88 }
91 89
92 void OffscreenCanvasCompositorFrameSink::WillDrawSurface() { 90 void OffscreenCanvasCompositorFrameSink::WillDrawSurface() {
93 if (client_) 91 if (client_)
94 client_->WillDrawSurface(); 92 client_->WillDrawSurface();
95 } 93 }
96 94
95 void OffscreenCanvasCompositorFrameSink::OnClientConnectionLost() {
96 provider_->OnCompositorFrameSinkClientConnectionLost(
97 support_.frame_sink_id());
98 }
99
97 } // namespace content 100 } // namespace content
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698