| 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 "device/gamepad/gamepad_provider.h" | 5 #include "device/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 <utility> | 10 #include <utility> |
| (...skipping 54 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 65 Initialize(std::move(fetcher)); | 65 Initialize(std::move(fetcher)); |
| 66 } | 66 } |
| 67 | 67 |
| 68 GamepadProvider::~GamepadProvider() { | 68 GamepadProvider::~GamepadProvider() { |
| 69 GamepadDataFetcherManager::GetInstance()->ClearProvider(); | 69 GamepadDataFetcherManager::GetInstance()->ClearProvider(); |
| 70 | 70 |
| 71 base::SystemMonitor* monitor = base::SystemMonitor::Get(); | 71 base::SystemMonitor* monitor = base::SystemMonitor::Get(); |
| 72 if (monitor) | 72 if (monitor) |
| 73 monitor->RemoveDevicesChangedObserver(this); | 73 monitor->RemoveDevicesChangedObserver(this); |
| 74 | 74 |
| 75 // Delete GamepadDataFetchers on |polling_thread_|. This is important because |
| 76 // some of them require their destructor to be called on the same sequence as |
| 77 // their other methods. |
| 78 polling_thread_->task_runner()->PostTask( |
| 79 FROM_HERE, base::Bind(&GamepadFetcherVector::clear, |
| 80 base::Unretained(&data_fetchers_))); |
| 81 |
| 75 // Use Stop() to join the polling thread, as there may be pending callbacks | 82 // Use Stop() to join the polling thread, as there may be pending callbacks |
| 76 // which dereference |polling_thread_|. | 83 // which dereference |polling_thread_|. |
| 77 polling_thread_->Stop(); | 84 polling_thread_->Stop(); |
| 85 |
| 86 DCHECK(data_fetchers_.empty()); |
| 78 } | 87 } |
| 79 | 88 |
| 80 base::SharedMemoryHandle GamepadProvider::GetSharedMemoryHandleForProcess( | 89 base::SharedMemoryHandle GamepadProvider::GetSharedMemoryHandleForProcess( |
| 81 base::ProcessHandle process) { | 90 base::ProcessHandle process) { |
| 82 base::SharedMemoryHandle renderer_handle; | 91 base::SharedMemoryHandle renderer_handle; |
| 83 gamepad_shared_buffer_->shared_memory()->ShareToProcess(process, | 92 gamepad_shared_buffer_->shared_memory()->ShareToProcess(process, |
| 84 &renderer_handle); | 93 &renderer_handle); |
| 85 return renderer_handle; | 94 return renderer_handle; |
| 86 } | 95 } |
| 87 | 96 |
| (...skipping 223 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 311 ever_had_user_gesture_ = true; | 320 ever_had_user_gesture_ = true; |
| 312 for (size_t i = 0; i < user_gesture_observers_.size(); i++) { | 321 for (size_t i = 0; i < user_gesture_observers_.size(); i++) { |
| 313 user_gesture_observers_[i].task_runner->PostTask( | 322 user_gesture_observers_[i].task_runner->PostTask( |
| 314 FROM_HERE, user_gesture_observers_[i].closure); | 323 FROM_HERE, user_gesture_observers_[i].closure); |
| 315 } | 324 } |
| 316 user_gesture_observers_.clear(); | 325 user_gesture_observers_.clear(); |
| 317 } | 326 } |
| 318 } | 327 } |
| 319 | 328 |
| 320 } // namespace device | 329 } // namespace device |
| OLD | NEW |