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

Side by Side Diff: services/ui/public/cpp/window_compositor_frame_sink.cc

Issue 2429173005: Mus+Ash: Replace (Server)WindowSurface with (Server)WindowCompositorFrameSink (Closed)
Patch Set: ui::CompositorFrameSink => ui::WindowCompositorFrameSink Created 4 years, 2 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
(Empty)
1 // Copyright 2014 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 "services/ui/public/cpp/window_compositor_frame_sink.h"
6
7 #include "base/bind.h"
8 #include "cc/output/compositor_frame.h"
9 #include "cc/output/compositor_frame_sink_client.h"
10 #include "gpu/ipc/client/gpu_channel_host.h"
11 #include "services/ui/public/cpp/gpu_service.h"
12
13 namespace ui {
14
15 // static
16 std::unique_ptr<WindowCompositorFrameSink> WindowCompositorFrameSink::Create(
17 scoped_refptr<cc::ContextProvider> context_provider,
18 std::unique_ptr<WindowCompositorFrameSinkBinding>*
19 compositor_frame_sink_binding) {
20 cc::mojom::MojoCompositorFrameSinkPtr compositor_frame_sink;
21 cc::mojom::MojoCompositorFrameSinkClientPtr compositor_frame_sink_client;
22 cc::mojom::MojoCompositorFrameSinkClientRequest
23 compositor_frame_sink_client_request =
24 GetProxy(&compositor_frame_sink_client);
25
26 compositor_frame_sink_binding->reset(new WindowCompositorFrameSinkBinding(
27 GetProxy(&compositor_frame_sink),
28 compositor_frame_sink_client.PassInterface()));
29 return base::WrapUnique(new WindowCompositorFrameSink(
30 std::move(context_provider), compositor_frame_sink.PassInterface(),
31 std::move(compositor_frame_sink_client_request)));
32 }
33
34 WindowCompositorFrameSink::~WindowCompositorFrameSink() {}
35
36 bool WindowCompositorFrameSink::BindToClient(
37 cc::CompositorFrameSinkClient* client) {
38 if (!cc::CompositorFrameSink::BindToClient(client))
39 return false;
40
41 DCHECK(!thread_checker_);
42 thread_checker_.reset(new base::ThreadChecker());
43 compositor_frame_sink_.Bind(std::move(compositor_frame_sink_info_));
44 client_binding_.reset(
45 new mojo::Binding<cc::mojom::MojoCompositorFrameSinkClient>(
46 this, std::move(client_request_)));
47
48 // TODO(enne): Get this from the WindowSurface via ServerWindowSurface.
49 begin_frame_source_.reset(new cc::DelayBasedBeginFrameSource(
50 base::MakeUnique<cc::DelayBasedTimeSource>(
51 base::ThreadTaskRunnerHandle::Get().get())));
52
53 client->SetBeginFrameSource(begin_frame_source_.get());
54 return true;
55 }
56
57 void WindowCompositorFrameSink::DetachFromClient() {
58 client_->SetBeginFrameSource(nullptr);
59 begin_frame_source_.reset();
60 compositor_frame_sink_.reset();
61 cc::CompositorFrameSink::DetachFromClient();
62 }
63
64 void WindowCompositorFrameSink::SubmitCompositorFrame(
65 cc::CompositorFrame frame) {
66 DCHECK(thread_checker_);
67 DCHECK(thread_checker_->CalledOnValidThread());
68 if (!compositor_frame_sink_)
69 return;
70 compositor_frame_sink_->SubmitCompositorFrame(std::move(frame));
71 }
72
73 WindowCompositorFrameSink::WindowCompositorFrameSink(
74 scoped_refptr<cc::ContextProvider> context_provider,
75 mojo::InterfacePtrInfo<cc::mojom::MojoCompositorFrameSink>
76 compositor_frame_sink_info,
77 cc::mojom::MojoCompositorFrameSinkClientRequest client_request)
78 : cc::CompositorFrameSink(std::move(context_provider), nullptr),
79 compositor_frame_sink_info_(std::move(compositor_frame_sink_info)),
80 client_request_(std::move(client_request)) {}
81
82 void WindowCompositorFrameSink::DidReceiveCompositorFrameAck() {
83 DCHECK(thread_checker_);
84 DCHECK(thread_checker_->CalledOnValidThread());
85 if (!client_)
86 return;
87 client_->DidReceiveCompositorFrameAck();
88 }
89
90 void WindowCompositorFrameSink::ReclaimResources(
91 const cc::ReturnedResourceArray& resources) {
92 DCHECK(thread_checker_);
93 DCHECK(thread_checker_->CalledOnValidThread());
94 if (!client_)
95 return;
96 client_->ReclaimResources(resources);
97 }
98
99 WindowCompositorFrameSinkBinding::~WindowCompositorFrameSinkBinding() {}
100
101 WindowCompositorFrameSinkBinding::WindowCompositorFrameSinkBinding(
102 cc::mojom::MojoCompositorFrameSinkRequest compositor_frame_sink_request,
103 mojo::InterfacePtrInfo<cc::mojom::MojoCompositorFrameSinkClient>
104 compositor_frame_sink_client)
105 : compositor_frame_sink_request_(std::move(compositor_frame_sink_request)),
106 compositor_frame_sink_client_(std::move(compositor_frame_sink_client)) {}
107
108 } // namespace ui
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698