| Index: chrome/renderer/command_buffer_proxy.cc
|
| ===================================================================
|
| --- chrome/renderer/command_buffer_proxy.cc (revision 0)
|
| +++ chrome/renderer/command_buffer_proxy.cc (revision 0)
|
| @@ -0,0 +1,173 @@
|
| +// Copyright (c) 2009 The Chromium Authors. All rights reserved.
|
| +// Use of this source code is governed by a BSD-style license that can be
|
| +// found in the LICENSE file.
|
| +
|
| +#include "base/logging.h"
|
| +#include "base/process_util.h"
|
| +#include "chrome/common/command_buffer_messages.h"
|
| +#include "chrome/common/plugin_messages.h"
|
| +#include "chrome/renderer/command_buffer_proxy.h"
|
| +#include "chrome/renderer/plugin_channel_host.h"
|
| +
|
| +CommandBufferProxy::CommandBufferProxy(
|
| + PluginChannelHost* channel,
|
| + int route_id)
|
| + : size_(0),
|
| + channel_(channel),
|
| + route_id_(route_id) {
|
| +}
|
| +
|
| +CommandBufferProxy::~CommandBufferProxy() {
|
| +}
|
| +
|
| +bool CommandBufferProxy::Send(IPC::Message* msg) {
|
| + if (channel_)
|
| + return channel_->Send(msg);
|
| +
|
| + // Callee takes ownership of message, regardless of whether Send is
|
| + // successful. See IPC::Message::Sender.
|
| + delete msg;
|
| + return false;
|
| +}
|
| +
|
| +base::SharedMemory* CommandBufferProxy::Initialize(int32 size) {
|
| + DCHECK(!ring_buffer_.get());
|
| +
|
| + // Initialize the service. Assuming we are in the renderer process, the GPU
|
| + // process is responsible for duplicating the handle. This might not be true
|
| + // for NaCl.
|
| + base::SharedMemoryHandle handle;
|
| + if (Send(new CommandBufferMsg_Initialize(route_id_, size, &handle)) &&
|
| + base::SharedMemory::IsHandleValid(handle)) {
|
| + ring_buffer_.reset(new base::SharedMemory(handle, false));
|
| + if (ring_buffer_->Map(size * sizeof(int32))) {
|
| + size_ = size;
|
| + return ring_buffer_.get();
|
| + }
|
| +
|
| + ring_buffer_.reset();
|
| + }
|
| +
|
| + return NULL;
|
| +}
|
| +
|
| +base::SharedMemory* CommandBufferProxy::GetRingBuffer() {
|
| + // Return locally cached ring buffer.
|
| + return ring_buffer_.get();
|
| +}
|
| +
|
| +int32 CommandBufferProxy::GetSize() {
|
| + // Return locally cached size.
|
| + return size_;
|
| +}
|
| +
|
| +int32 CommandBufferProxy::SyncOffsets(int32 put_offset) {
|
| + int32 get_offset;
|
| + if (Send(new CommandBufferMsg_SyncOffsets(route_id_,
|
| + put_offset,
|
| + &get_offset)))
|
| + return get_offset;
|
| +
|
| + return -1;
|
| +}
|
| +
|
| +int32 CommandBufferProxy::GetGetOffset() {
|
| + int32 get_offset;
|
| + if (Send(new CommandBufferMsg_GetGetOffset(route_id_, &get_offset)))
|
| + return get_offset;
|
| +
|
| + return -1;
|
| +}
|
| +
|
| +void CommandBufferProxy::SetGetOffset(int32 get_offset) {
|
| + // Not implemented in proxy.
|
| + NOTREACHED();
|
| +}
|
| +
|
| +int32 CommandBufferProxy::GetPutOffset() {
|
| + int put_offset;
|
| + if (Send(new CommandBufferMsg_GetPutOffset(route_id_, &put_offset)))
|
| + return put_offset;
|
| +
|
| + return -1;
|
| +}
|
| +
|
| +void CommandBufferProxy::SetPutOffsetChangeCallback(Callback0::Type* callback) {
|
| + // Not implemented in proxy.
|
| + NOTREACHED();
|
| +}
|
| +
|
| +int32 CommandBufferProxy::CreateTransferBuffer(size_t size) {
|
| + int32 id;
|
| + if (Send(new CommandBufferMsg_CreateTransferBuffer(route_id_, size, &id)))
|
| + return id;
|
| +
|
| + return -1;
|
| +}
|
| +
|
| +void CommandBufferProxy::DestroyTransferBuffer(int32 id) {
|
| + // Remove the transfer buffer from the client side4 cache.
|
| + transfer_buffers_.erase(id);
|
| +
|
| + Send(new CommandBufferMsg_DestroyTransferBuffer(route_id_, id));
|
| +}
|
| +
|
| +base::SharedMemory* CommandBufferProxy::GetTransferBuffer(int32 id) {
|
| + // Check local cache to see if there is already a client side shared memory
|
| + // object for this id.
|
| + TransferBufferMap::iterator it = transfer_buffers_.find(id);
|
| + if (it != transfer_buffers_.end())
|
| + return it->second.get();
|
| +
|
| + // Assuming we are in the renderer process, the service is responsible for
|
| + // duplicating the handle. This might not be true for NaCl.
|
| + base::SharedMemoryHandle handle;
|
| + if (!Send(new CommandBufferMsg_GetTransferBuffer(route_id_, id, &handle)))
|
| + return NULL;
|
| +
|
| + // Cache the transfer buffer shared memory object client side.
|
| + base::SharedMemory* transfer_buffer =
|
| + new base::SharedMemory(handle, false, base::GetCurrentProcessHandle());
|
| + transfer_buffers_[id].reset(transfer_buffer);
|
| +
|
| + return transfer_buffer;
|
| +}
|
| +
|
| +int32 CommandBufferProxy::GetToken() {
|
| + int32 token;
|
| + if (Send(new CommandBufferMsg_GetToken(route_id_, &token)))
|
| + return token;
|
| +
|
| + return -1;
|
| +}
|
| +
|
| +void CommandBufferProxy::SetToken(int32 token) {
|
| + // Not implemented in proxy.
|
| + NOTREACHED();
|
| +}
|
| +
|
| +int32 CommandBufferProxy::ResetParseError() {
|
| + int32 parse_error;
|
| + if (Send(new CommandBufferMsg_ResetParseError(route_id_, &parse_error)))
|
| + return parse_error;
|
| +
|
| + return -1;
|
| +}
|
| +
|
| +void CommandBufferProxy::SetParseError(int32 parse_error) {
|
| + // Not implemented in proxy.
|
| + NOTREACHED();
|
| +}
|
| +
|
| +bool CommandBufferProxy::GetErrorStatus() {
|
| + bool status;
|
| + if (Send(new CommandBufferMsg_GetErrorStatus(route_id_, &status)))
|
| + return status;
|
| +
|
| + return true;
|
| +}
|
| +
|
| +void CommandBufferProxy::RaiseErrorStatus() {
|
| + // Not implemented in proxy.
|
| + NOTREACHED();
|
| +}
|
|
|
| Property changes on: chrome\renderer\command_buffer_proxy.cc
|
| ___________________________________________________________________
|
| Added: svn:eol-style
|
| + LF
|
|
|
|
|