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 "content/browser/gamepad/gamepad_provider.h" | 5 #include "content/browser/gamepad/gamepad_provider.h" |
6 | 6 |
7 #include <stddef.h> | 7 #include <stddef.h> |
8 #include <string.h> | 8 #include <string.h> |
9 #include <cmath> | 9 #include <cmath> |
10 #include <set> | 10 #include <set> |
(...skipping 32 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
43 const ClosureAndThread& other) = default; | 43 const ClosureAndThread& other) = default; |
44 | 44 |
45 GamepadProvider::ClosureAndThread::~ClosureAndThread() { | 45 GamepadProvider::ClosureAndThread::~ClosureAndThread() { |
46 } | 46 } |
47 | 47 |
48 GamepadProvider::GamepadProvider() | 48 GamepadProvider::GamepadProvider() |
49 : is_paused_(true), | 49 : is_paused_(true), |
50 have_scheduled_do_poll_(false), | 50 have_scheduled_do_poll_(false), |
51 devices_changed_(true), | 51 devices_changed_(true), |
52 ever_had_user_gesture_(false) { | 52 ever_had_user_gesture_(false) { |
53 Initialize(scoped_ptr<GamepadDataFetcher>()); | 53 Initialize(std::unique_ptr<GamepadDataFetcher>()); |
54 } | 54 } |
55 | 55 |
56 GamepadProvider::GamepadProvider(scoped_ptr<GamepadDataFetcher> fetcher) | 56 GamepadProvider::GamepadProvider(std::unique_ptr<GamepadDataFetcher> fetcher) |
57 : is_paused_(true), | 57 : is_paused_(true), |
58 have_scheduled_do_poll_(false), | 58 have_scheduled_do_poll_(false), |
59 devices_changed_(true), | 59 devices_changed_(true), |
60 ever_had_user_gesture_(false) { | 60 ever_had_user_gesture_(false) { |
61 Initialize(std::move(fetcher)); | 61 Initialize(std::move(fetcher)); |
62 } | 62 } |
63 | 63 |
64 GamepadProvider::~GamepadProvider() { | 64 GamepadProvider::~GamepadProvider() { |
65 base::SystemMonitor* monitor = base::SystemMonitor::Get(); | 65 base::SystemMonitor* monitor = base::SystemMonitor::Get(); |
66 if (monitor) | 66 if (monitor) |
(...skipping 50 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
117 base::AutoLock lock(user_gesture_lock_); | 117 base::AutoLock lock(user_gesture_lock_); |
118 user_gesture_observers_.push_back( | 118 user_gesture_observers_.push_back( |
119 ClosureAndThread(closure, base::MessageLoop::current()->task_runner())); | 119 ClosureAndThread(closure, base::MessageLoop::current()->task_runner())); |
120 } | 120 } |
121 | 121 |
122 void GamepadProvider::OnDevicesChanged(base::SystemMonitor::DeviceType type) { | 122 void GamepadProvider::OnDevicesChanged(base::SystemMonitor::DeviceType type) { |
123 base::AutoLock lock(devices_changed_lock_); | 123 base::AutoLock lock(devices_changed_lock_); |
124 devices_changed_ = true; | 124 devices_changed_ = true; |
125 } | 125 } |
126 | 126 |
127 void GamepadProvider::Initialize(scoped_ptr<GamepadDataFetcher> fetcher) { | 127 void GamepadProvider::Initialize(std::unique_ptr<GamepadDataFetcher> fetcher) { |
128 size_t data_size = sizeof(GamepadHardwareBuffer); | 128 size_t data_size = sizeof(GamepadHardwareBuffer); |
129 base::SystemMonitor* monitor = base::SystemMonitor::Get(); | 129 base::SystemMonitor* monitor = base::SystemMonitor::Get(); |
130 if (monitor) | 130 if (monitor) |
131 monitor->AddDevicesChangedObserver(this); | 131 monitor->AddDevicesChangedObserver(this); |
132 bool res = gamepad_shared_memory_.CreateAndMapAnonymous(data_size); | 132 bool res = gamepad_shared_memory_.CreateAndMapAnonymous(data_size); |
133 CHECK(res); | 133 CHECK(res); |
134 GamepadHardwareBuffer* hwbuf = SharedMemoryAsHardwareBuffer(); | 134 GamepadHardwareBuffer* hwbuf = SharedMemoryAsHardwareBuffer(); |
135 memset(hwbuf, 0, sizeof(GamepadHardwareBuffer)); | 135 memset(hwbuf, 0, sizeof(GamepadHardwareBuffer)); |
136 pad_states_.reset(new PadState[WebGamepads::itemsLengthCap]); | 136 pad_states_.reset(new PadState[WebGamepads::itemsLengthCap]); |
137 | 137 |
(...skipping 13 matching lines...) Expand all Loading... |
151 const base::MessageLoop::Type kMessageLoopType = base::MessageLoop::TYPE_UI; | 151 const base::MessageLoop::Type kMessageLoopType = base::MessageLoop::TYPE_UI; |
152 #endif | 152 #endif |
153 polling_thread_->StartWithOptions(base::Thread::Options(kMessageLoopType, 0)); | 153 polling_thread_->StartWithOptions(base::Thread::Options(kMessageLoopType, 0)); |
154 | 154 |
155 polling_thread_->task_runner()->PostTask( | 155 polling_thread_->task_runner()->PostTask( |
156 FROM_HERE, base::Bind(&GamepadProvider::DoInitializePollingThread, | 156 FROM_HERE, base::Bind(&GamepadProvider::DoInitializePollingThread, |
157 base::Unretained(this), base::Passed(&fetcher))); | 157 base::Unretained(this), base::Passed(&fetcher))); |
158 } | 158 } |
159 | 159 |
160 void GamepadProvider::DoInitializePollingThread( | 160 void GamepadProvider::DoInitializePollingThread( |
161 scoped_ptr<GamepadDataFetcher> fetcher) { | 161 std::unique_ptr<GamepadDataFetcher> fetcher) { |
162 DCHECK(base::MessageLoop::current() == polling_thread_->message_loop()); | 162 DCHECK(base::MessageLoop::current() == polling_thread_->message_loop()); |
163 DCHECK(!data_fetcher_.get()); // Should only initialize once. | 163 DCHECK(!data_fetcher_.get()); // Should only initialize once. |
164 | 164 |
165 if (!fetcher) | 165 if (!fetcher) |
166 fetcher.reset(new GamepadPlatformDataFetcher); | 166 fetcher.reset(new GamepadPlatformDataFetcher); |
167 data_fetcher_ = std::move(fetcher); | 167 data_fetcher_ = std::move(fetcher); |
168 } | 168 } |
169 | 169 |
170 void GamepadProvider::SendPauseHint(bool paused) { | 170 void GamepadProvider::SendPauseHint(bool paused) { |
171 DCHECK(base::MessageLoop::current() == polling_thread_->message_loop()); | 171 DCHECK(base::MessageLoop::current() == polling_thread_->message_loop()); |
(...skipping 153 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
325 } | 325 } |
326 if (!had_gesture_before && ever_had_user_gesture_) { | 326 if (!had_gesture_before && ever_had_user_gesture_) { |
327 // Initialize pad_states_ for the first time. | 327 // Initialize pad_states_ for the first time. |
328 for (size_t i = 0; i < WebGamepads::itemsLengthCap; ++i) { | 328 for (size_t i = 0; i < WebGamepads::itemsLengthCap; ++i) { |
329 pad_states_.get()[i].SetPad(pads.items[i]); | 329 pad_states_.get()[i].SetPad(pads.items[i]); |
330 } | 330 } |
331 } | 331 } |
332 } | 332 } |
333 | 333 |
334 } // namespace content | 334 } // namespace content |
OLD | NEW |