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

Side by Side Diff: chrome/plugin/command_buffer_stub.cc

Issue 465040: Added CommandBufferClient, CommandBufferStub and some IPC messages.... (Closed) Base URL: svn://chrome-svn/chrome/trunk/src/
Patch Set: '' Created 11 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 | Annotate | Revision Log
« no previous file with comments | « chrome/plugin/command_buffer_stub.h ('k') | chrome/plugin/webplugin_delegate_stub.h » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Property Changes:
Added: svn:eol-style
+ LF
OLDNEW
(Empty)
1 // Copyright (c) 2009 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 "base/process_util.h"
6 #include "base/shared_memory.h"
7 #include "chrome/common/command_buffer_messages.h"
8 #include "chrome/plugin/command_buffer_stub.h"
9 #include "chrome/plugin/plugin_channel.h"
10
11 CommandBufferStub::CommandBufferStub(PluginChannel* channel,
12 gfx::NativeView view)
13 : channel_(channel),
14 view_(view) {
15 route_id_ = channel->GenerateRouteID();
16 channel->AddRoute(route_id_, this, false);
17 }
18
19 CommandBufferStub::~CommandBufferStub() {
20 channel_->RemoveRoute(route_id_);
21 }
22
23 void CommandBufferStub::OnChannelError() {
24 NOTREACHED() << "CommandBufferService::OnChannelError called";
25 }
26
27 bool CommandBufferStub::Send(IPC::Message* message) {
28 if (!channel_) {
29 delete message;
30 return false;
31 }
32
33 return channel_->Send(message);
34 }
35
36 void CommandBufferStub::OnInitialize(int32 size,
37 base::SharedMemoryHandle* ring_buffer) {
38 DCHECK(!command_buffer_.get());
39
40 *ring_buffer = base::SharedMemory::NULLHandle();
41
42 // Assume service is responsible for duplicating the handle from the calling
43 // process.
44 base::ProcessHandle peer_handle;
45 if (base::OpenProcessHandle(channel_->peer_pid(), &peer_handle))
46 return;
47
48 command_buffer_.reset(new gpu::CommandBufferService);
49
50 // Initialize the CommandBufferService and GPUProcessor.
51 base::SharedMemory* shared_memory = command_buffer_->Initialize(size);
52 if (shared_memory) {
53 processor_ = new gpu::GPUProcessor(command_buffer_.get());
54 if (processor_->Initialize(view_)) {
55 command_buffer_->SetPutOffsetChangeCallback(
56 NewCallback(processor_.get(),
57 &gpu::GPUProcessor::ProcessCommands));
58 shared_memory->ShareToProcess(peer_handle, ring_buffer);
59 } else {
60 processor_ = NULL;
61 command_buffer_.reset();
62 }
63 }
64
65 base::CloseProcessHandle(peer_handle);
66 }
67
68 void CommandBufferStub::OnSyncOffsets(int32 put_offset, int32* get_offset) {
69 *get_offset = command_buffer_->SyncOffsets(put_offset);
70 }
71
72 void CommandBufferStub::OnGetGetOffset(int32* get_offset) {
73 *get_offset = command_buffer_->GetGetOffset();
74 }
75
76 void CommandBufferStub::OnGetPutOffset(int32* put_offset) {
77 *put_offset = command_buffer_->GetPutOffset();
78 }
79
80 void CommandBufferStub::OnCreateTransferBuffer(int32 size, int32* id) {
81 *id = command_buffer_->CreateTransferBuffer(size);
82 }
83
84 void CommandBufferStub::OnDestroyTransferBuffer(int32 id) {
85 command_buffer_->DestroyTransferBuffer(id);
86 }
87
88 void CommandBufferStub::OnGetTransferBuffer(int32 id,
89 base::SharedMemoryHandle* transfer_buffer) {
90 *transfer_buffer = 0;
91
92 // Assume service is responsible for duplicating the handle to the calling
93 // process.
94 base::ProcessHandle peer_handle;
95 if (base::OpenProcessHandle(channel_->peer_pid(), &peer_handle))
96 return;
97
98 base::SharedMemory* shared_memory = command_buffer_->GetTransferBuffer(id);
99 if (shared_memory) {
100 shared_memory->ShareToProcess(peer_handle, transfer_buffer);
101 }
102
103 base::CloseProcessHandle(peer_handle);
104 }
105
106 void CommandBufferStub::OnGetToken(int32* token) {
107 *token = command_buffer_->GetToken();
108 }
109
110 void CommandBufferStub::OnResetParseError(int32* parse_error) {
111 *parse_error = command_buffer_->ResetParseError();
112 }
113
114 void CommandBufferStub::OnGetErrorStatus(bool* error_status) {
115 *error_status = command_buffer_->GetErrorStatus();
116 }
117
118 void CommandBufferStub::OnMessageReceived(const IPC::Message& msg) {
119 IPC_BEGIN_MESSAGE_MAP(CommandBufferStub, msg)
120 IPC_MESSAGE_HANDLER(CommandBufferMsg_Initialize, OnInitialize);
121 IPC_MESSAGE_HANDLER(CommandBufferMsg_SyncOffsets, OnSyncOffsets);
122 IPC_MESSAGE_HANDLER(CommandBufferMsg_GetGetOffset, OnGetGetOffset);
123 IPC_MESSAGE_HANDLER(CommandBufferMsg_GetPutOffset, OnGetPutOffset);
124 IPC_MESSAGE_HANDLER(CommandBufferMsg_CreateTransferBuffer,
125 OnCreateTransferBuffer);
126 IPC_MESSAGE_HANDLER(CommandBufferMsg_DestroyTransferBuffer,
127 OnDestroyTransferBuffer);
128 IPC_MESSAGE_HANDLER(CommandBufferMsg_GetTransferBuffer,
129 OnGetTransferBuffer);
130 IPC_MESSAGE_HANDLER(CommandBufferMsg_GetToken, OnGetToken);
131 IPC_MESSAGE_HANDLER(CommandBufferMsg_ResetParseError, OnResetParseError);
132 IPC_MESSAGE_HANDLER(CommandBufferMsg_GetErrorStatus, OnGetErrorStatus);
133 IPC_MESSAGE_UNHANDLED_ERROR()
134 IPC_END_MESSAGE_MAP()
135 }
OLDNEW
« no previous file with comments | « chrome/plugin/command_buffer_stub.h ('k') | chrome/plugin/webplugin_delegate_stub.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698