| Index: content/browser/gamepad/gamepad_provider.cc
|
| diff --git a/content/browser/gamepad/gamepad_provider.cc b/content/browser/gamepad/gamepad_provider.cc
|
| index 642e2445a7bbe8fa0d0fc8fa7fd1fcbe2827c101..c8eed65a30f00b447a888bfa75eedf7932c9f521 100644
|
| --- a/content/browser/gamepad/gamepad_provider.cc
|
| +++ b/content/browser/gamepad/gamepad_provider.cc
|
| @@ -21,31 +21,29 @@
|
| #include "content/browser/gamepad/data_fetcher_win.h"
|
| #endif
|
|
|
| -namespace gamepad {
|
| +namespace content {
|
|
|
| -Provider* Provider::instance_ = NULL;
|
| +GamepadProvider* GamepadProvider::instance_ = NULL;
|
|
|
| -using namespace content;
|
| -
|
| -// Define the default data fetcher that Provider will use if none is supplied.
|
| -// (PlatformDataFetcher).
|
| +// Define the default data fetcher that GamepadProvider will use if none is
|
| +// supplied. (GamepadPlatformDataFetcher).
|
| #if defined(OS_WIN)
|
|
|
| -typedef DataFetcherWindows PlatformDataFetcher;
|
| +typedef GamepadDataFetcherWindows GamepadPlatformDataFetcher;
|
|
|
| #else
|
|
|
| -class EmptyDataFetcher : public DataFetcher {
|
| +class GamepadEmptyDataFetcher : public GamepadDataFetcher {
|
| public:
|
| void GetGamepadData(WebKit::WebGamepads* pads, bool) {
|
| pads->length = 0;
|
| }
|
| };
|
| -typedef EmptyDataFetcher PlatformDataFetcher;
|
| +typedef GamepadEmptyDataFetcher GamepadPlatformDataFetcher;
|
|
|
| #endif
|
|
|
| -Provider::Provider(DataFetcher* fetcher)
|
| +GamepadProvider::GamepadProvider(GamepadDataFetcher* fetcher)
|
| : creator_loop_(MessageLoop::current()->message_loop_proxy()),
|
| provided_fetcher_(fetcher),
|
| devices_changed_(true),
|
| @@ -59,25 +57,25 @@ Provider::Provider(DataFetcher* fetcher)
|
| memset(hwbuf, 0, sizeof(GamepadHardwareBuffer));
|
| }
|
|
|
| -Provider::~Provider() {
|
| +GamepadProvider::~GamepadProvider() {
|
| base::SystemMonitor* monitor = base::SystemMonitor::Get();
|
| if (monitor)
|
| monitor->RemoveDevicesChangedObserver(this);
|
| Stop();
|
| }
|
|
|
| -base::SharedMemoryHandle Provider::GetRendererSharedMemoryHandle(
|
| +base::SharedMemoryHandle GamepadProvider::GetRendererSharedMemoryHandle(
|
| base::ProcessHandle process) {
|
| base::SharedMemoryHandle renderer_handle;
|
| gamepad_shared_memory_.ShareToProcess(process, &renderer_handle);
|
| return renderer_handle;
|
| }
|
|
|
| -void Provider::OnDevicesChanged() {
|
| +void GamepadProvider::OnDevicesChanged() {
|
| devices_changed_ = true;
|
| }
|
|
|
| -void Provider::Start() {
|
| +void GamepadProvider::Start() {
|
| DCHECK(MessageLoop::current()->message_loop_proxy() == creator_loop_);
|
|
|
| if (polling_thread_.get())
|
| @@ -93,21 +91,21 @@ void Provider::Start() {
|
| MessageLoop* polling_loop = polling_thread_->message_loop();
|
| polling_loop->PostTask(
|
| FROM_HERE,
|
| - base::Bind(&Provider::DoInitializePollingThread, this));
|
| + base::Bind(&GamepadProvider::DoInitializePollingThread, this));
|
| }
|
|
|
| -void Provider::Stop() {
|
| +void GamepadProvider::Stop() {
|
| DCHECK(MessageLoop::current()->message_loop_proxy() == creator_loop_);
|
|
|
| polling_thread_.reset();
|
| data_fetcher_.reset();
|
| }
|
|
|
| -void Provider::DoInitializePollingThread() {
|
| +void GamepadProvider::DoInitializePollingThread() {
|
| DCHECK(MessageLoop::current() == polling_thread_->message_loop());
|
|
|
| if (!provided_fetcher_.get())
|
| - provided_fetcher_.reset(new PlatformDataFetcher);
|
| + provided_fetcher_.reset(new GamepadPlatformDataFetcher);
|
|
|
| // Pass ownership of fetcher to provider_.
|
| data_fetcher_.swap(provided_fetcher_);
|
| @@ -116,30 +114,38 @@ void Provider::DoInitializePollingThread() {
|
| ScheduleDoPoll();
|
| }
|
|
|
| -void Provider::DoPoll() {
|
| +void GamepadProvider::DoPoll() {
|
| DCHECK(MessageLoop::current() == polling_thread_->message_loop());
|
| GamepadHardwareBuffer* hwbuf = SharedMemoryAsHardwareBuffer();
|
| - base::subtle::Barrier_AtomicIncrement(&hwbuf->start_marker, 1);
|
| +
|
| + ANNOTATE_BENIGN_RACE_SIZED(
|
| + &hwbuf->buffer,
|
| + sizeof(WebKit::WebGamepads),
|
| + "Racey reads are discarded");
|
| +
|
| + // 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, devices_changed_);
|
| - base::subtle::Barrier_AtomicIncrement(&hwbuf->end_marker, 1);
|
| + hwbuf->sequence.WriteEnd();
|
| devices_changed_ = false;
|
| // Schedule our next interval of polling.
|
| ScheduleDoPoll();
|
| }
|
|
|
| -void Provider::ScheduleDoPoll() {
|
| +void GamepadProvider::ScheduleDoPoll() {
|
| DCHECK(MessageLoop::current() == polling_thread_->message_loop());
|
|
|
| MessageLoop::current()->PostDelayedTask(
|
| FROM_HERE,
|
| - base::Bind(&Provider::DoPoll, weak_factory_.GetWeakPtr()),
|
| + base::Bind(&GamepadProvider::DoPoll, weak_factory_.GetWeakPtr()),
|
| kDesiredSamplingIntervalMs);
|
| }
|
|
|
| -GamepadHardwareBuffer* Provider::SharedMemoryAsHardwareBuffer() {
|
| +GamepadHardwareBuffer* GamepadProvider::SharedMemoryAsHardwareBuffer() {
|
| void* mem = gamepad_shared_memory_.memory();
|
| DCHECK(mem);
|
| return static_cast<GamepadHardwareBuffer*>(mem);
|
| }
|
|
|
| -} // namespace gamepad
|
| +} // namespace content
|
|
|