OLD | NEW |
| (Empty) |
1 // Copyright 2015 The Chromium Authors. All rights reserved. | |
2 // Use of this source code is governed by a BSD-style license that can be | |
3 // found in the LICENSE file. | |
4 | |
5 #include "components/display_compositor/gpu_compositor_frame_sink.h" | |
6 | |
7 namespace display_compositor { | |
8 | |
9 GpuCompositorFrameSink::GpuCompositorFrameSink( | |
10 GpuCompositorFrameSinkDelegate* delegate, | |
11 cc::SurfaceManager* surface_manager, | |
12 const cc::FrameSinkId& frame_sink_id, | |
13 cc::mojom::MojoCompositorFrameSinkRequest request, | |
14 cc::mojom::MojoCompositorFrameSinkPrivateRequest | |
15 compositor_frame_sink_private_request, | |
16 cc::mojom::MojoCompositorFrameSinkClientPtr client) | |
17 : delegate_(delegate), | |
18 support_(base::MakeUnique<cc::CompositorFrameSinkSupport>( | |
19 this, | |
20 surface_manager, | |
21 frame_sink_id, | |
22 false /* is_root */, | |
23 true /* handles_frame_sink_id_invalidation */, | |
24 true /* needs_sync_points */)), | |
25 client_(std::move(client)), | |
26 compositor_frame_sink_binding_(this, std::move(request)), | |
27 compositor_frame_sink_private_binding_( | |
28 this, | |
29 std::move(compositor_frame_sink_private_request)) { | |
30 compositor_frame_sink_binding_.set_connection_error_handler(base::Bind( | |
31 &GpuCompositorFrameSink::OnClientConnectionLost, base::Unretained(this))); | |
32 compositor_frame_sink_private_binding_.set_connection_error_handler( | |
33 base::Bind(&GpuCompositorFrameSink::OnPrivateConnectionLost, | |
34 base::Unretained(this))); | |
35 } | |
36 | |
37 GpuCompositorFrameSink::~GpuCompositorFrameSink() {} | |
38 | |
39 void GpuCompositorFrameSink::EvictFrame() { | |
40 support_->EvictFrame(); | |
41 } | |
42 | |
43 void GpuCompositorFrameSink::SetNeedsBeginFrame(bool needs_begin_frame) { | |
44 support_->SetNeedsBeginFrame(needs_begin_frame); | |
45 } | |
46 | |
47 void GpuCompositorFrameSink::SubmitCompositorFrame( | |
48 const cc::LocalSurfaceId& local_surface_id, | |
49 cc::CompositorFrame frame) { | |
50 support_->SubmitCompositorFrame(local_surface_id, std::move(frame)); | |
51 } | |
52 | |
53 void GpuCompositorFrameSink::BeginFrameDidNotSwap( | |
54 const cc::BeginFrameAck& begin_frame_ack) { | |
55 support_->BeginFrameDidNotSwap(begin_frame_ack); | |
56 } | |
57 | |
58 void GpuCompositorFrameSink::DidReceiveCompositorFrameAck() { | |
59 if (client_) | |
60 client_->DidReceiveCompositorFrameAck(); | |
61 } | |
62 | |
63 void GpuCompositorFrameSink::ClaimTemporaryReference( | |
64 const cc::SurfaceId& surface_id) { | |
65 support_->ClaimTemporaryReference(surface_id); | |
66 } | |
67 | |
68 void GpuCompositorFrameSink::RequestCopyOfSurface( | |
69 std::unique_ptr<cc::CopyOutputRequest> request) { | |
70 support_->RequestCopyOfSurface(std::move(request)); | |
71 } | |
72 | |
73 void GpuCompositorFrameSink::OnBeginFrame(const cc::BeginFrameArgs& args) { | |
74 if (client_) | |
75 client_->OnBeginFrame(args); | |
76 } | |
77 | |
78 void GpuCompositorFrameSink::ReclaimResources( | |
79 const cc::ReturnedResourceArray& resources) { | |
80 if (client_) | |
81 client_->ReclaimResources(resources); | |
82 } | |
83 | |
84 void GpuCompositorFrameSink::WillDrawSurface( | |
85 const cc::LocalSurfaceId& local_surface_id, | |
86 const gfx::Rect& damage_rect) { | |
87 if (client_) | |
88 client_->WillDrawSurface(local_surface_id, damage_rect); | |
89 } | |
90 | |
91 void GpuCompositorFrameSink::OnClientConnectionLost() { | |
92 client_connection_lost_ = true; | |
93 // Request destruction of |this| only if both connections are lost. | |
94 delegate_->OnClientConnectionLost(support_->frame_sink_id(), | |
95 private_connection_lost_); | |
96 } | |
97 | |
98 void GpuCompositorFrameSink::OnPrivateConnectionLost() { | |
99 private_connection_lost_ = true; | |
100 // Request destruction of |this| only if both connections are lost. | |
101 delegate_->OnPrivateConnectionLost(support_->frame_sink_id(), | |
102 client_connection_lost_); | |
103 } | |
104 | |
105 } // namespace display_compositor | |
OLD | NEW |