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

Side by Side Diff: content/gpu/chrome_gpu_memory_buffer_service_ipc_transport.cc

Issue 1656433002: Sample code: IPC Transport object for GPU Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: GpuMemoryBufferService + Transport object. TODO: Eliminate ChildThreadImpl dependency Created 4 years, 10 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 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 "content/gpu/chrome_gpu_memory_buffer_service_ipc_transport.h"
6
7 #include "content/common/gpu/gpu_messages.h"
8 #include "ipc/ipc_sender.h"
9
10 namespace content {
11
12 namespace {
13
14 class GpuMemoryBufferServiceMessageFilter : public IPC::MessageFilter {
15 public:
16 explicit GpuMemoryBufferServiceMessageFilter(
17 const base::WeakPtr<ChromeGpuMemoryBufferServiceIPCTransport>& transport)
18 : transport_(transport) {}
19
20 private:
21 ~GpuMemoryBufferServiceMessageFilter() override {}
22
23 // Overridden from IPC::MessageFilter:
24 void OnFilterAdded(IPC::Sender* sender) override {
25 if (transport_) {
26 DCHECK(!transport_->sender_);
27 transport_->sender_ = sender;
28 }
29 }
30
31 void OnFilterRemoved() override {
32 if (transport_) {
33 DCHECK(transport_->sender_);
34 transport_->sender_ = nullptr;
35 transport_->CloseConnection();
36 }
37 }
38
39 bool OnMessageReceived(const IPC::Message& message) override {
40 if (transport_)
41 return transport_->OnMessageReceived(message);
42 return false;
43 }
44
45 base::WeakPtr<ChromeGpuMemoryBufferServiceIPCTransport> transport_;
46
47 DISALLOW_COPY_AND_ASSIGN(GpuMemoryBufferServiceMessageFilter);
48 };
49
50 } // namespace
51
52 // static
53 scoped_ptr<GpuMemoryBufferServiceIPCTransport>
54 ChromeGpuMemoryBufferServiceIPCTransport::Create() {
55 return make_scoped_ptr<GpuMemoryBufferServiceIPCTransport>(
56 new ChromeGpuMemoryBufferServiceIPCTransport());
57 }
58
59 ChromeGpuMemoryBufferServiceIPCTransport::
60 ~ChromeGpuMemoryBufferServiceIPCTransport() {}
61
62 ChromeGpuMemoryBufferServiceIPCTransport::
63 ChromeGpuMemoryBufferServiceIPCTransport()
64 : client_(nullptr), sender_(nullptr), factory_(this) {
65 message_filter_ =
66 new GpuMemoryBufferServiceMessageFilter(factory_.GetWeakPtr());
67 }
68
69 void ChromeGpuMemoryBufferServiceIPCTransport::CloseConnection() {
70 if (client_)
71 client_->OnConnectionClosed();
72 }
73
74 bool ChromeGpuMemoryBufferServiceIPCTransport::GpuMemoryBufferCreated(
75 const gfx::GpuMemoryBufferHandle& handle) {
76 DCHECK(sender_);
77 return sender_->Send(new GpuHostMsg_GpuMemoryBufferCreated(handle));
78 }
79
80 void ChromeGpuMemoryBufferServiceIPCTransport::SetClient(
81 GpuMemoryBufferServiceIPCTransport::Client* client) {
82 client_ = client;
83 }
84
85 bool ChromeGpuMemoryBufferServiceIPCTransport::OnMessageReceived(
86 const IPC::Message& message) {
87 DCHECK(sender_);
88 bool handled = true;
89 IPC_BEGIN_MESSAGE_MAP(ChromeGpuMemoryBufferServiceIPCTransport, message)
90 IPC_MESSAGE_HANDLER(GpuMsg_CreateGpuMemoryBuffer, OnCreateGpuMemoryBuffer)
91 IPC_MESSAGE_HANDLER(GpuMsg_CreateGpuMemoryBufferFromHandle,
92 OnCreateGpuMemoryBufferFromHandle)
93 IPC_MESSAGE_UNHANDLED(handled = false)
94 IPC_END_MESSAGE_MAP()
95 return handled;
96 }
97
98 void ChromeGpuMemoryBufferServiceIPCTransport::OnCreateGpuMemoryBuffer(
99 const CreateGpuMemoryBufferParams& params) {
100 if (client_)
101 client_->OnCreateGpuMemoryBuffer(params);
102 }
103
104 void ChromeGpuMemoryBufferServiceIPCTransport::
105 OnCreateGpuMemoryBufferFromHandle(
106 const CreateGpuMemoryBufferFromHandleParams& params) {
107 if (client_)
108 client_->OnCreateGpuMemoryBufferFromHandle(params);
109 }
110
111 } // namespace content
OLDNEW
« no previous file with comments | « content/gpu/chrome_gpu_memory_buffer_service_ipc_transport.h ('k') | content/gpu/gpu_child_thread.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698