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

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

Issue 2569923004: OffscreenCanvasCompositorFrameSink uses CompositorFrameSinkSupport (Closed)
Patch Set: Fix typo Created 4 years 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 "cc/surfaces/surface.h" 7 #include "cc/surfaces/surface.h"
8 #include "cc/surfaces/surface_manager.h" 8 #include "cc/surfaces/surface_manager.h"
9 #include "content/browser/compositor/surface_utils.h"
10 #include "mojo/public/cpp/bindings/strong_binding.h" 9 #include "mojo/public/cpp/bindings/strong_binding.h"
11 10
12 namespace content { 11 namespace content {
13 12
14 OffscreenCanvasCompositorFrameSink::OffscreenCanvasCompositorFrameSink( 13 // static
15 const cc::SurfaceId& surface_id, 14 void OffscreenCanvasCompositorFrameSink::Create(
16 cc::mojom::MojoCompositorFrameSinkClientPtr client) 15 const cc::FrameSinkId& frame_sink_id,
17 : surface_id_(surface_id), client_(std::move(client)) { 16 cc::SurfaceManager* surface_manager,
18 cc::SurfaceManager* manager = GetSurfaceManager(); 17 cc::mojom::MojoCompositorFrameSinkClientPtr client,
19 surface_factory_ = base::MakeUnique<cc::SurfaceFactory>( 18 cc::mojom::MojoCompositorFrameSinkRequest request) {
20 surface_id_.frame_sink_id(), manager, this); 19 std::unique_ptr<OffscreenCanvasCompositorFrameSink> impl =
21 manager->RegisterFrameSinkId(surface_id_.frame_sink_id()); 20 base::MakeUnique<OffscreenCanvasCompositorFrameSink>(
21 frame_sink_id, surface_manager, std::move(client));
22 OffscreenCanvasCompositorFrameSink* compositor_frame_sink = impl.get();
23 compositor_frame_sink->binding_ =
24 mojo::MakeStrongBinding(std::move(impl), std::move(request));
22 } 25 }
23 26
24 OffscreenCanvasCompositorFrameSink::~OffscreenCanvasCompositorFrameSink() { 27 OffscreenCanvasCompositorFrameSink::OffscreenCanvasCompositorFrameSink(
25 cc::SurfaceManager* manager = GetSurfaceManager(); 28 const cc::FrameSinkId& frame_sink_id,
26 if (!manager) { 29 cc::SurfaceManager* surface_manager,
27 // Inform SurfaceFactory that SurfaceManager's no longer alive to 30 cc::mojom::MojoCompositorFrameSinkClientPtr client)
28 // avoid its destruction error. 31 : support_(this, surface_manager, frame_sink_id, nullptr, nullptr),
29 surface_factory_->DidDestroySurfaceManager(); 32 client_(std::move(client)) {}
30 } else {
31 manager->InvalidateFrameSinkId(surface_id_.frame_sink_id());
32 }
33 surface_factory_->EvictSurface();
34 }
35 33
36 // static 34 OffscreenCanvasCompositorFrameSink::~OffscreenCanvasCompositorFrameSink() {}
37 void OffscreenCanvasCompositorFrameSink::Create( 35
38 const cc::SurfaceId& surface_id, 36 void OffscreenCanvasCompositorFrameSink::SetNeedsBeginFrame(
39 cc::mojom::MojoCompositorFrameSinkClientPtr client, 37 bool needs_begin_frame) {
40 cc::mojom::MojoCompositorFrameSinkRequest request) { 38 support_.SetNeedsBeginFrame(needs_begin_frame);
41 mojo::MakeStrongBinding(base::MakeUnique<OffscreenCanvasCompositorFrameSink>(
42 surface_id, std::move(client)),
43 std::move(request));
44 } 39 }
45 40
46 void OffscreenCanvasCompositorFrameSink::SubmitCompositorFrame( 41 void OffscreenCanvasCompositorFrameSink::SubmitCompositorFrame(
47 const cc::LocalFrameId& local_frame_id, 42 const cc::LocalFrameId& local_frame_id,
48 cc::CompositorFrame frame) { 43 cc::CompositorFrame frame) {
49 ++ack_pending_count_; 44 support_.SubmitCompositorFrame(local_frame_id, std::move(frame));
50 surface_factory_->SubmitCompositorFrame(
51 surface_id_.local_frame_id(), std::move(frame),
52 base::Bind(
53 &OffscreenCanvasCompositorFrameSink::DidReceiveCompositorFrameAck,
54 base::Unretained(this)));
55 }
56
57 void OffscreenCanvasCompositorFrameSink::SetNeedsBeginFrame(
58 bool needs_begin_frame) {
59 NOTIMPLEMENTED();
60 } 45 }
61 46
62 void OffscreenCanvasCompositorFrameSink::AddSurfaceReferences( 47 void OffscreenCanvasCompositorFrameSink::AddSurfaceReferences(
63 const std::vector<cc::SurfaceReference>& references) { 48 const std::vector<cc::SurfaceReference>& references) {
49 // TODO(fsamuel, staraz): Implement this.
64 NOTIMPLEMENTED(); 50 NOTIMPLEMENTED();
65 } 51 }
66 52
67 void OffscreenCanvasCompositorFrameSink::RemoveSurfaceReferences( 53 void OffscreenCanvasCompositorFrameSink::RemoveSurfaceReferences(
68 const std::vector<cc::SurfaceReference>& references) { 54 const std::vector<cc::SurfaceReference>& references) {
55 // TODO(fsamuel, staraz): Implement this.
69 NOTIMPLEMENTED(); 56 NOTIMPLEMENTED();
70 } 57 }
71 58
72 void OffscreenCanvasCompositorFrameSink::EvictFrame() { 59 void OffscreenCanvasCompositorFrameSink::EvictFrame() {
73 // TODO(fsamuel, staraz): Implement this 60 support_.EvictFrame();
74 NOTIMPLEMENTED();
75 } 61 }
76 62
77 void OffscreenCanvasCompositorFrameSink::Require( 63 void OffscreenCanvasCompositorFrameSink::Require(
78 const cc::LocalFrameId& local_frame_id, 64 const cc::LocalFrameId& local_frame_id,
79 const cc::SurfaceSequence& sequence) { 65 const cc::SurfaceSequence& sequence) {
80 // TODO(staraz): Implement this. 66 support_.Require(local_frame_id, sequence);
81 NOTIMPLEMENTED();
82 } 67 }
83 68
84 void OffscreenCanvasCompositorFrameSink::Satisfy( 69 void OffscreenCanvasCompositorFrameSink::Satisfy(
85 const cc::SurfaceSequence& sequence) { 70 const cc::SurfaceSequence& sequence) {
86 // TODO(staraz): Implement this. 71 support_.Satisfy(sequence);
87 NOTIMPLEMENTED();
88 } 72 }
89 73
90 void OffscreenCanvasCompositorFrameSink::ReturnResources( 74 void OffscreenCanvasCompositorFrameSink::DidReceiveCompositorFrameAck() {
91 const cc::ReturnedResourceArray& resources) { 75 if (client_)
92 if (resources.empty()) 76 client_->DidReceiveCompositorFrameAck();
93 return;
94
95 if (!ack_pending_count_ && client_) {
96 client_->ReclaimResources(resources);
97 return;
98 }
99
100 std::copy(resources.begin(), resources.end(),
101 std::back_inserter(surface_returned_resources_));
102 } 77 }
103 78
104 void OffscreenCanvasCompositorFrameSink::WillDrawSurface( 79 void OffscreenCanvasCompositorFrameSink::OnBeginFrame(
105 const cc::LocalFrameId& id, 80 const cc::BeginFrameArgs& args) {
106 const gfx::Rect& damage_rect) {} 81 if (client_)
82 client_->OnBeginFrame(args);
83 }
107 84
108 void OffscreenCanvasCompositorFrameSink::SetBeginFrameSource( 85 void OffscreenCanvasCompositorFrameSink::ReclaimResources(
109 cc::BeginFrameSource* begin_frame_source) {} 86 const cc::ReturnedResourceArray& resources) {
87 if (client_)
88 client_->ReclaimResources(resources);
89 }
110 90
111 void OffscreenCanvasCompositorFrameSink::DidReceiveCompositorFrameAck() { 91 void OffscreenCanvasCompositorFrameSink::WillDrawSurface() {
112 if (!client_) 92 if (client_)
113 return; 93 client_->WillDrawSurface();
114 client_->DidReceiveCompositorFrameAck();
115 DCHECK_GT(ack_pending_count_, 0);
116 if (!surface_returned_resources_.empty()) {
117 client_->ReclaimResources(surface_returned_resources_);
118 surface_returned_resources_.clear();
119 }
120 ack_pending_count_--;
121 } 94 }
122 95
123 } // namespace content 96 } // namespace content
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698