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 3 // found in the LICENSE file. 4 5 #include "content/browser/gamepad/gamepad_service.h" 6 7 #include "base/bind.h" 8 #include "base/logging.h" 9 #include "base/memory/singleton.h" 10 #include "content/browser/gamepad/gamepad_data_fetcher.h" 11 #include "content/browser/gamepad/gamepad_provider.h" 12 #include "content/public/browser/render_process_host.h" 13 14 namespace content { 15 GamepadService()16GamepadService::GamepadService() : num_readers_(0) { 17 } 18 GamepadService(scoped_ptr<GamepadDataFetcher> fetcher)19GamepadService::GamepadService(scoped_ptr<GamepadDataFetcher> fetcher) 20 : num_readers_(0), 21 provider_(new GamepadProvider(fetcher.Pass())) { 22 thread_checker_.DetachFromThread(); 23 } 24 ~GamepadService()25GamepadService::~GamepadService() { 26 } 27 GetInstance()28GamepadService* GamepadService::GetInstance() { 29 return Singleton<GamepadService, 30 LeakySingletonTraits<GamepadService> >::get(); 31 } 32 AddConsumer()33void GamepadService::AddConsumer() { 34 DCHECK(thread_checker_.CalledOnValidThread()); 35 36 num_readers_++; 37 DCHECK(num_readers_ > 0); 38 if (!provider_) 39 provider_.reset(new GamepadProvider); 40 provider_->Resume(); 41 } 42 RemoveConsumer()43void GamepadService::RemoveConsumer() { 44 DCHECK(thread_checker_.CalledOnValidThread()); 45 46 --num_readers_; 47 DCHECK(num_readers_ >= 0); 48 49 if (num_readers_ == 0) 50 provider_->Pause(); 51 } 52 RegisterForUserGesture(const base::Closure & closure)53void GamepadService::RegisterForUserGesture(const base::Closure& closure) { 54 DCHECK(num_readers_ > 0); 55 DCHECK(thread_checker_.CalledOnValidThread()); 56 provider_->RegisterForUserGesture(closure); 57 } 58 Terminate()59void GamepadService::Terminate() { 60 provider_.reset(); 61 } 62 GetSharedMemoryHandleForProcess(base::ProcessHandle handle)63base::SharedMemoryHandle GamepadService::GetSharedMemoryHandleForProcess( 64 base::ProcessHandle handle) { 65 DCHECK(thread_checker_.CalledOnValidThread()); 66 return provider_->GetSharedMemoryHandleForProcess(handle); 67 } 68 69 } // namespace content 70