| OLD | NEW |
| 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 | 4 |
| 5 #include "ppapi/proxy/gamepad_resource.h" | 5 #include "ppapi/proxy/gamepad_resource.h" |
| 6 | 6 |
| 7 #include <string.h> | 7 #include <string.h> |
| 8 | 8 |
| 9 #include "base/bind.h" |
| 9 #include "base/threading/platform_thread.h" | 10 #include "base/threading/platform_thread.h" |
| 10 #include "ppapi/proxy/dispatch_reply_message.h" | 11 #include "ppapi/proxy/dispatch_reply_message.h" |
| 11 #include "ppapi/proxy/ppapi_messages.h" | 12 #include "ppapi/proxy/ppapi_messages.h" |
| 12 #include "ppapi/shared_impl/ppb_gamepad_shared.h" | 13 #include "ppapi/shared_impl/ppb_gamepad_shared.h" |
| 13 | 14 |
| 14 namespace ppapi { | 15 namespace ppapi { |
| 15 namespace proxy { | 16 namespace proxy { |
| 16 | 17 |
| 17 namespace { | 18 namespace { |
| 18 | 19 |
| (...skipping 22 matching lines...) Expand all Loading... |
| 41 } | 42 } |
| 42 | 43 |
| 43 } // namespace | 44 } // namespace |
| 44 | 45 |
| 45 GamepadResource::GamepadResource(Connection connection, PP_Instance instance) | 46 GamepadResource::GamepadResource(Connection connection, PP_Instance instance) |
| 46 : PluginResource(connection, instance), | 47 : PluginResource(connection, instance), |
| 47 buffer_(NULL) { | 48 buffer_(NULL) { |
| 48 memset(&last_read_, 0, sizeof(last_read_)); | 49 memset(&last_read_, 0, sizeof(last_read_)); |
| 49 | 50 |
| 50 SendCreateToBrowser(PpapiHostMsg_Gamepad_Create()); | 51 SendCreateToBrowser(PpapiHostMsg_Gamepad_Create()); |
| 51 CallBrowser(PpapiHostMsg_Gamepad_RequestMemory()); | 52 CallBrowser<PpapiPluginMsg_Gamepad_SendMemory>( |
| 53 PpapiHostMsg_Gamepad_RequestMemory(), |
| 54 base::Bind(&GamepadResource::OnPluginMsgSendMemory, this)); |
| 52 } | 55 } |
| 53 | 56 |
| 54 GamepadResource::~GamepadResource() { | 57 GamepadResource::~GamepadResource() { |
| 55 } | 58 } |
| 56 | 59 |
| 57 void GamepadResource::Sample(PP_GamepadsSampleData* data) { | 60 void GamepadResource::Sample(PP_GamepadsSampleData* data) { |
| 58 if (!buffer_) { | 61 if (!buffer_) { |
| 59 // Browser hasn't sent back our shared memory, give the plugin gamepad | 62 // Browser hasn't sent back our shared memory, give the plugin gamepad |
| 60 // data corresponding to "not connected". | 63 // data corresponding to "not connected". |
| 61 memset(data, 0, sizeof(PP_GamepadsSampleData)); | 64 memset(data, 0, sizeof(PP_GamepadsSampleData)); |
| (...skipping 22 matching lines...) Expand all Loading... |
| 84 } while (ReadRetry(&buffer_->sequence, version)); | 87 } while (ReadRetry(&buffer_->sequence, version)); |
| 85 | 88 |
| 86 // In the event of a read failure, just leave the last read data as-is (the | 89 // In the event of a read failure, just leave the last read data as-is (the |
| 87 // hardware thread is taking unusally long). | 90 // hardware thread is taking unusally long). |
| 88 if (contention_count < kMaximumContentionCount) | 91 if (contention_count < kMaximumContentionCount) |
| 89 ConvertWebKitGamepadData(read_into, &last_read_); | 92 ConvertWebKitGamepadData(read_into, &last_read_); |
| 90 | 93 |
| 91 memcpy(data, &last_read_, sizeof(PP_GamepadsSampleData)); | 94 memcpy(data, &last_read_, sizeof(PP_GamepadsSampleData)); |
| 92 } | 95 } |
| 93 | 96 |
| 94 void GamepadResource::OnReplyReceived(const ResourceMessageReplyParams& params, | |
| 95 const IPC::Message& msg) { | |
| 96 IPC_BEGIN_MESSAGE_MAP(GamepadResource, msg) | |
| 97 PPAPI_DISPATCH_RESOURCE_REPLY_0(PpapiPluginMsg_Gamepad_SendMemory, | |
| 98 OnPluginMsgSendMemory) | |
| 99 IPC_END_MESSAGE_MAP() | |
| 100 } | |
| 101 | |
| 102 void GamepadResource::OnPluginMsgSendMemory( | 97 void GamepadResource::OnPluginMsgSendMemory( |
| 103 const ResourceMessageReplyParams& params) { | 98 const ResourceMessageReplyParams& params) { |
| 104 // On failure, the handle will be null and the CHECK below will be tripped. | 99 // On failure, the handle will be null and the CHECK below will be tripped. |
| 105 base::SharedMemoryHandle handle; | 100 base::SharedMemoryHandle handle; |
| 106 params.GetSharedMemoryHandleAtIndex(0, &handle); | 101 params.GetSharedMemoryHandleAtIndex(0, &handle); |
| 107 | 102 |
| 108 shared_memory_.reset(new base::SharedMemory(handle, true)); | 103 shared_memory_.reset(new base::SharedMemory(handle, true)); |
| 109 CHECK(shared_memory_->Map(sizeof(ContentGamepadHardwareBuffer))); | 104 CHECK(shared_memory_->Map(sizeof(ContentGamepadHardwareBuffer))); |
| 110 buffer_ = static_cast<const ContentGamepadHardwareBuffer*>( | 105 buffer_ = static_cast<const ContentGamepadHardwareBuffer*>( |
| 111 shared_memory_->memory()); | 106 shared_memory_->memory()); |
| 112 } | 107 } |
| 113 | 108 |
| 114 } // namespace proxy | 109 } // namespace proxy |
| 115 } // namespace ppapi | 110 } // namespace ppapi |
| OLD | NEW |