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

Unified Diff: device/gamepad/gamepad_data_fetcher_manager.cc

Issue 2129003002: Refactored gamepad polling to support dynamic sources (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Fixed unit test issue and Mac XBoxDataFetcher constructor 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
Index: device/gamepad/gamepad_data_fetcher_manager.cc
diff --git a/device/gamepad/gamepad_data_fetcher_manager.cc b/device/gamepad/gamepad_data_fetcher_manager.cc
new file mode 100644
index 0000000000000000000000000000000000000000..6b46eb80978a2307afea2a6d5c9440b329c95e99
--- /dev/null
+++ b/device/gamepad/gamepad_data_fetcher_manager.cc
@@ -0,0 +1,63 @@
+// Copyright 2016 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#include "device/gamepad/gamepad_data_fetcher_manager.h"
+
+#include "device/gamepad/gamepad_data_fetcher.h"
+#include "device/gamepad/gamepad_platform_data_fetcher.h"
+
+namespace device {
+
+namespace {
+GamepadDataFetcherManager* g_gamepad_data_fetcher_manager = 0;
+}
+
+GamepadDataFetcherManager::GamepadDataFetcherManager() : provider_(nullptr) {}
+
+GamepadDataFetcherManager::~GamepadDataFetcherManager() {}
+
+GamepadDataFetcherManager* GamepadDataFetcherManager::GetInstance() {
+ if (!g_gamepad_data_fetcher_manager) {
+ g_gamepad_data_fetcher_manager = new GamepadDataFetcherManager;
+
+ // Add platform specific data fetchers
+ AddGamepadPlatformDataFetchers(g_gamepad_data_fetcher_manager);
+ }
+ return g_gamepad_data_fetcher_manager;
+}
+
+void GamepadDataFetcherManager::AddFactory(GamepadDataFetcherFactory* factory) {
+ factories_.push_back(factory);
+ if (provider_) {
+ provider_->AddGamepadDataFetcher(factory->CreateDataFetcher());
+ }
+}
+
+void GamepadDataFetcherManager::RemoveSourceFactory(GamepadSource source) {
+ if (provider_)
+ provider_->RemoveSourceGamepadDataFetcher(source);
+
+ for (FactoryVector::iterator it = factories_.begin(); it != factories_.end();
+ ++it) {
+ if ((*it)->source() == source) {
+ delete (*it);
+ factories_.erase(it);
+ }
+ }
+}
+
+void GamepadDataFetcherManager::InitializeProvider(GamepadProvider* provider) {
+ DCHECK(!provider_);
+
+ provider_ = provider;
+ for (const auto& it : factories_) {
+ provider_->AddGamepadDataFetcher(it->CreateDataFetcher());
+ }
+}
+
+void GamepadDataFetcherManager::ClearProvider() {
+ provider_ = nullptr;
+}
+
+} // namespace device

Powered by Google App Engine
This is Rietveld 408576698