Commit 2ae3356d authored by ke.he's avatar ke.he Committed by Commit bot

Using mojo::ScopedSharedBufferHandle directly in GamepadSharedMemoryReader

After gamepad mojoification, In renderer side, GamepadSharedMemoryReader has to
"unwrap" the received mojo::ScopedSharedBufferHandle into a
base::SharedMemoryHandle. It is not good.

In this patch we let GamepadSharedMemoryReader completely use mojo::SharedBuffer
to avoid the "unwrap" operation.

BUG = 670655

Review-Url: https://codereview.chromium.org/2567713003
Cr-Commit-Position: refs/heads/master@{#438039}
parent fa492598
......@@ -29,14 +29,7 @@ GamepadSharedMemoryReader::GamepadSharedMemoryReader(RenderThread* thread)
void GamepadSharedMemoryReader::SendStartMessage() {
if (gamepad_monitor_) {
mojo::ScopedSharedBufferHandle buffer_handle;
gamepad_monitor_->GamepadStartPolling(&buffer_handle);
// TODO(heke): Use mojo::SharedBuffer rather than base::SharedMemory. See
// crbug.com/670655.
MojoResult result = mojo::UnwrapSharedMemoryHandle(
std::move(buffer_handle), &renderer_shared_memory_handle_, nullptr,
nullptr);
CHECK_EQ(MOJO_RESULT_OK, result);
gamepad_monitor_->GamepadStartPolling(&renderer_shared_buffer_handle_);
}
}
......@@ -52,16 +45,15 @@ void GamepadSharedMemoryReader::Start(
// If we don't get a valid handle from the browser, don't try to Map (we're
// probably out of memory or file handles).
bool valid_handle = base::SharedMemory::IsHandleValid(
renderer_shared_memory_handle_);
bool valid_handle = renderer_shared_buffer_handle_.is_valid();
UMA_HISTOGRAM_BOOLEAN("Gamepad.ValidSharedMemoryHandle", valid_handle);
if (!valid_handle)
return;
renderer_shared_memory_.reset(
new base::SharedMemory(renderer_shared_memory_handle_, true));
CHECK(renderer_shared_memory_->Map(sizeof(GamepadHardwareBuffer)));
void *memory = renderer_shared_memory_->memory();
renderer_shared_buffer_mapping_ =
renderer_shared_buffer_handle_->Map(sizeof(GamepadHardwareBuffer));
CHECK(renderer_shared_buffer_mapping_);
void* memory = renderer_shared_buffer_mapping_.get();
CHECK(memory);
gamepad_hardware_buffer_ =
static_cast<GamepadHardwareBuffer*>(memory);
......@@ -80,7 +72,7 @@ void GamepadSharedMemoryReader::SampleGamepads(blink::WebGamepads& gamepads) {
blink::WebGamepads read_into;
TRACE_EVENT0("GAMEPAD", "SampleGamepads");
if (!base::SharedMemory::IsHandleValid(renderer_shared_memory_handle_))
if (!renderer_shared_buffer_handle_.is_valid())
return;
// Only try to read this many times before failing to avoid waiting here
......
......@@ -8,12 +8,11 @@
#include <memory>
#include "base/macros.h"
#include "base/memory/shared_memory.h"
#include "content/public/renderer/renderer_gamepad_provider.h"
#include "device/base/synchronization/shared_memory_seqlock_buffer.h"
#include "device/gamepad/public/interfaces/gamepad.mojom.h"
#include "mojo/public/cpp/bindings/binding.h"
#include "mojo/public/cpp/system/platform_handle.h"
#include "mojo/public/cpp/system/buffer.h"
#include "third_party/WebKit/public/platform/WebGamepads.h"
namespace content {
......@@ -42,8 +41,8 @@ class GamepadSharedMemoryReader : public RendererGamepadProvider,
void GamepadDisconnected(int index,
const blink::WebGamepad& gamepad) override;
base::SharedMemoryHandle renderer_shared_memory_handle_;
std::unique_ptr<base::SharedMemory> renderer_shared_memory_;
mojo::ScopedSharedBufferHandle renderer_shared_buffer_handle_;
mojo::ScopedSharedBufferMapping renderer_shared_buffer_mapping_;
GamepadHardwareBuffer* gamepad_hardware_buffer_;
bool ever_interacted_with_;
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment