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

Unified Diff: device/gamepad/gamepad_provider.cc

Issue 2081583002: Migrating majority of gamepad from content/browser/ to device/ (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Final tweaks Created 4 years, 5 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 side-by-side diff with in-line comments
Download patch
« no previous file with comments | « device/gamepad/gamepad_provider.h ('k') | device/gamepad/gamepad_provider_unittest.cc » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: device/gamepad/gamepad_provider.cc
diff --git a/content/browser/gamepad/gamepad_provider.cc b/device/gamepad/gamepad_provider.cc
similarity index 76%
rename from content/browser/gamepad/gamepad_provider.cc
rename to device/gamepad/gamepad_provider.cc
index 5f196b11ecafe656fd6ff0c154cafe72f3b85421..dded2673f8ce9de6d318d732cf14cee696b2ddde 100644
--- a/content/browser/gamepad/gamepad_provider.cc
+++ b/device/gamepad/gamepad_provider.cc
@@ -2,7 +2,7 @@
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
-#include "content/browser/gamepad/gamepad_provider.h"
+#include "device/gamepad/gamepad_provider.h"
#include <stddef.h>
#include <string.h>
@@ -20,44 +20,47 @@
#include "base/threading/thread_restrictions.h"
#include "base/threading/thread_task_runner_handle.h"
#include "build/build_config.h"
-#include "content/browser/gamepad/gamepad_data_fetcher.h"
-#include "content/browser/gamepad/gamepad_platform_data_fetcher.h"
-#include "content/browser/gamepad/gamepad_service.h"
-#include "content/common/gamepad_hardware_buffer.h"
-#include "content/common/gamepad_messages.h"
-#include "content/common/gamepad_user_gesture.h"
-#include "content/public/browser/browser_thread.h"
+#include "device/gamepad/gamepad_data_fetcher.h"
+#include "device/gamepad/gamepad_platform_data_fetcher.h"
+#include "device/gamepad/gamepad_user_gesture.h"
using blink::WebGamepad;
using blink::WebGamepads;
-namespace content {
+namespace device {
GamepadProvider::ClosureAndThread::ClosureAndThread(
const base::Closure& c,
const scoped_refptr<base::SingleThreadTaskRunner>& m)
- : closure(c), task_runner(m) {
-}
+ : closure(c), task_runner(m) {}
GamepadProvider::ClosureAndThread::ClosureAndThread(
const ClosureAndThread& other) = default;
-GamepadProvider::ClosureAndThread::~ClosureAndThread() {
-}
+GamepadProvider::ClosureAndThread::~ClosureAndThread() {}
-GamepadProvider::GamepadProvider()
+GamepadProvider::GamepadProvider(
+ std::unique_ptr<GamepadSharedBuffer> buffer,
+ GamepadConnectionChangeClient* connection_change_client)
: is_paused_(true),
have_scheduled_do_poll_(false),
devices_changed_(true),
- ever_had_user_gesture_(false) {
+ ever_had_user_gesture_(false),
+ gamepad_shared_buffer_(std::move(buffer)),
+ connection_change_client_(connection_change_client) {
Initialize(std::unique_ptr<GamepadDataFetcher>());
}
-GamepadProvider::GamepadProvider(std::unique_ptr<GamepadDataFetcher> fetcher)
+GamepadProvider::GamepadProvider(
+ std::unique_ptr<GamepadSharedBuffer> buffer,
+ GamepadConnectionChangeClient* connection_change_client,
+ std::unique_ptr<GamepadDataFetcher> fetcher)
: is_paused_(true),
have_scheduled_do_poll_(false),
devices_changed_(true),
- ever_had_user_gesture_(false) {
+ ever_had_user_gesture_(false),
+ gamepad_shared_buffer_(std::move(buffer)),
+ connection_change_client_(connection_change_client) {
Initialize(std::move(fetcher));
}
@@ -75,14 +78,15 @@ GamepadProvider::~GamepadProvider() {
base::SharedMemoryHandle GamepadProvider::GetSharedMemoryHandleForProcess(
base::ProcessHandle process) {
base::SharedMemoryHandle renderer_handle;
- gamepad_shared_memory_.ShareToProcess(process, &renderer_handle);
+ gamepad_shared_buffer_->shared_memory()->ShareToProcess(process,
+ &renderer_handle);
return renderer_handle;
}
void GamepadProvider::GetCurrentGamepadData(WebGamepads* data) {
- const WebGamepads& pads = SharedMemoryAsHardwareBuffer()->buffer;
+ const WebGamepads* pads = gamepad_shared_buffer_->buffer();
base::AutoLock lock(shared_memory_lock_);
- *data = pads;
+ *data = *pads;
}
void GamepadProvider::Pause() {
@@ -100,7 +104,7 @@ void GamepadProvider::Resume() {
{
base::AutoLock lock(is_paused_lock_);
if (!is_paused_)
- return;
+ return;
is_paused_ = false;
}
@@ -125,14 +129,10 @@ void GamepadProvider::OnDevicesChanged(base::SystemMonitor::DeviceType type) {
}
void GamepadProvider::Initialize(std::unique_ptr<GamepadDataFetcher> fetcher) {
- size_t data_size = sizeof(GamepadHardwareBuffer);
base::SystemMonitor* monitor = base::SystemMonitor::Get();
if (monitor)
monitor->AddDevicesChangedObserver(this);
- bool res = gamepad_shared_memory_.CreateAndMapAnonymous(data_size);
- CHECK(res);
- GamepadHardwareBuffer* hwbuf = SharedMemoryAsHardwareBuffer();
- memset(hwbuf, 0, sizeof(GamepadHardwareBuffer));
+
pad_states_.reset(new PadState[WebGamepads::itemsLengthCap]);
polling_thread_.reset(new base::Thread("Gamepad polling thread"));
@@ -174,8 +174,7 @@ void GamepadProvider::SendPauseHint(bool paused) {
}
bool GamepadProvider::PadState::Match(const WebGamepad& pad) const {
- return connected_ == pad.connected &&
- axes_length_ == pad.axesLength &&
+ return connected_ == pad.connected && axes_length_ == pad.axesLength &&
buttons_length_ == pad.buttonsLength &&
memcmp(id_, pad.id, sizeof(id_)) == 0 &&
memcmp(mapping_, pad.mapping, sizeof(mapping_)) == 0;
@@ -213,12 +212,9 @@ void GamepadProvider::DoPoll() {
have_scheduled_do_poll_ = false;
bool changed;
- GamepadHardwareBuffer* hwbuf = SharedMemoryAsHardwareBuffer();
- ANNOTATE_BENIGN_RACE_SIZED(
- &hwbuf->buffer,
- sizeof(WebGamepads),
- "Racey reads are discarded");
+ ANNOTATE_BENIGN_RACE_SIZED(gamepad_shared_buffer_->buffer(),
+ sizeof(WebGamepads), "Racey reads are discarded");
{
base::AutoLock lock(devices_changed_lock_);
@@ -231,14 +227,14 @@ void GamepadProvider::DoPoll() {
// Acquire the SeqLock. There is only ever one writer to this data.
// See gamepad_hardware_buffer.h.
- hwbuf->sequence.WriteBegin();
- data_fetcher_->GetGamepadData(&hwbuf->buffer, changed);
- hwbuf->sequence.WriteEnd();
+ gamepad_shared_buffer_->WriteBegin();
+ data_fetcher_->GetGamepadData(gamepad_shared_buffer_->buffer(), changed);
+ gamepad_shared_buffer_->WriteEnd();
}
if (ever_had_user_gesture_) {
for (unsigned i = 0; i < WebGamepads::itemsLengthCap; ++i) {
- WebGamepad& pad = hwbuf->buffer.items[i];
+ WebGamepad& pad = gamepad_shared_buffer_->buffer()->items[i];
PadState& state = pad_states_.get()[i];
if (pad.connected && !state.connected()) {
OnGamepadConnectionChange(true, i, pad);
@@ -276,36 +272,17 @@ void GamepadProvider::ScheduleDoPoll() {
have_scheduled_do_poll_ = true;
}
-void GamepadProvider::OnGamepadConnectionChange(
- bool connected, int index, const WebGamepad& pad) {
+void GamepadProvider::OnGamepadConnectionChange(bool connected,
+ int index,
+ const WebGamepad& pad) {
PadState& state = pad_states_.get()[index];
if (connected)
state.SetPad(pad);
else
state.SetDisconnected();
- BrowserThread::PostTask(
- BrowserThread::IO,
- FROM_HERE,
- base::Bind(&GamepadProvider::DispatchGamepadConnectionChange,
- base::Unretained(this),
- connected,
- index,
- pad));
-}
-
-void GamepadProvider::DispatchGamepadConnectionChange(
- bool connected, int index, const WebGamepad& pad) {
- if (connected)
- GamepadService::GetInstance()->OnGamepadConnected(index, pad);
- else
- GamepadService::GetInstance()->OnGamepadDisconnected(index, pad);
-}
-
-GamepadHardwareBuffer* GamepadProvider::SharedMemoryAsHardwareBuffer() {
- void* mem = gamepad_shared_memory_.memory();
- CHECK(mem);
- return static_cast<GamepadHardwareBuffer*>(mem);
+ if (connection_change_client_)
+ connection_change_client_->OnGamepadConnectionChange(connected, index, pad);
}
void GamepadProvider::CheckForUserGesture() {
@@ -314,8 +291,8 @@ void GamepadProvider::CheckForUserGesture() {
return;
bool had_gesture_before = ever_had_user_gesture_;
- const WebGamepads& pads = SharedMemoryAsHardwareBuffer()->buffer;
- if (GamepadsHaveUserGesture(pads)) {
+ const WebGamepads* pads = gamepad_shared_buffer_->buffer();
+ if (GamepadsHaveUserGesture(*pads)) {
ever_had_user_gesture_ = true;
for (size_t i = 0; i < user_gesture_observers_.size(); i++) {
user_gesture_observers_[i].task_runner->PostTask(
@@ -326,9 +303,9 @@ void GamepadProvider::CheckForUserGesture() {
if (!had_gesture_before && ever_had_user_gesture_) {
// Initialize pad_states_ for the first time.
for (size_t i = 0; i < WebGamepads::itemsLengthCap; ++i) {
- pad_states_.get()[i].SetPad(pads.items[i]);
+ pad_states_.get()[i].SetPad(pads->items[i]);
}
}
}
-} // namespace content
+} // namespace device
« no previous file with comments | « device/gamepad/gamepad_provider.h ('k') | device/gamepad/gamepad_provider_unittest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698