| OLD | NEW | 
|---|
|  | (Empty) | 
| 1 // Copyright 2014 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/device_sensors/device_sensor_service.h" |  | 
| 6 |  | 
| 7 #include "base/bind.h" |  | 
| 8 #include "base/logging.h" |  | 
| 9 #include "base/memory/singleton.h" |  | 
| 10 #include "content/browser/device_sensors/data_fetcher_shared_memory.h" |  | 
| 11 |  | 
| 12 namespace content { |  | 
| 13 |  | 
| 14 DeviceSensorService::DeviceSensorService() |  | 
| 15     : num_light_readers_(0), |  | 
| 16       num_motion_readers_(0), |  | 
| 17       num_orientation_readers_(0), |  | 
| 18       num_orientation_absolute_readers_(0), |  | 
| 19       is_shutdown_(false) {} |  | 
| 20 |  | 
| 21 DeviceSensorService::~DeviceSensorService() {} |  | 
| 22 |  | 
| 23 DeviceSensorService* DeviceSensorService::GetInstance() { |  | 
| 24   return base::Singleton<DeviceSensorService, base::LeakySingletonTraits< |  | 
| 25                                                   DeviceSensorService>>::get(); |  | 
| 26 } |  | 
| 27 |  | 
| 28 void DeviceSensorService::AddConsumer(ConsumerType consumer_type) { |  | 
| 29   if (!ChangeNumberConsumers(consumer_type, 1)) |  | 
| 30     return; |  | 
| 31 |  | 
| 32   DCHECK(GetNumberConsumers(consumer_type)); |  | 
| 33 |  | 
| 34   if (!data_fetcher_) |  | 
| 35     data_fetcher_.reset(new DataFetcherSharedMemory); |  | 
| 36   data_fetcher_->StartFetchingDeviceData(consumer_type); |  | 
| 37 } |  | 
| 38 |  | 
| 39 void DeviceSensorService::RemoveConsumer(ConsumerType consumer_type) { |  | 
| 40   if (!ChangeNumberConsumers(consumer_type, -1)) |  | 
| 41     return; |  | 
| 42 |  | 
| 43   if (GetNumberConsumers(consumer_type) == 0) |  | 
| 44     data_fetcher_->StopFetchingDeviceData(consumer_type); |  | 
| 45 } |  | 
| 46 |  | 
| 47 bool DeviceSensorService::ChangeNumberConsumers(ConsumerType consumer_type, |  | 
| 48                                                 int delta) { |  | 
| 49   DCHECK(thread_checker_.CalledOnValidThread()); |  | 
| 50   if (is_shutdown_) |  | 
| 51     return false; |  | 
| 52 |  | 
| 53   switch (consumer_type) { |  | 
| 54     case CONSUMER_TYPE_MOTION: |  | 
| 55       num_motion_readers_ += delta; |  | 
| 56       DCHECK_GE(num_motion_readers_, 0); |  | 
| 57       return true; |  | 
| 58     case CONSUMER_TYPE_ORIENTATION: |  | 
| 59       num_orientation_readers_ += delta; |  | 
| 60       DCHECK_GE(num_orientation_readers_, 0); |  | 
| 61       return true; |  | 
| 62     case CONSUMER_TYPE_ORIENTATION_ABSOLUTE: |  | 
| 63       num_orientation_absolute_readers_ += delta; |  | 
| 64       DCHECK_GE(num_orientation_absolute_readers_, 0); |  | 
| 65       return true; |  | 
| 66     case CONSUMER_TYPE_LIGHT: |  | 
| 67       num_light_readers_ += delta; |  | 
| 68       DCHECK_GE(num_light_readers_, 0); |  | 
| 69       return true; |  | 
| 70     default: |  | 
| 71       NOTREACHED(); |  | 
| 72   } |  | 
| 73   return false; |  | 
| 74 } |  | 
| 75 |  | 
| 76 int DeviceSensorService::GetNumberConsumers(ConsumerType consumer_type) const { |  | 
| 77   switch (consumer_type) { |  | 
| 78     case CONSUMER_TYPE_MOTION: |  | 
| 79       return num_motion_readers_; |  | 
| 80     case CONSUMER_TYPE_ORIENTATION: |  | 
| 81       return num_orientation_readers_; |  | 
| 82     case CONSUMER_TYPE_ORIENTATION_ABSOLUTE: |  | 
| 83       return num_orientation_absolute_readers_; |  | 
| 84     case CONSUMER_TYPE_LIGHT: |  | 
| 85       return num_light_readers_; |  | 
| 86     default: |  | 
| 87       NOTREACHED(); |  | 
| 88   } |  | 
| 89   return 0; |  | 
| 90 } |  | 
| 91 |  | 
| 92 mojo::ScopedSharedBufferHandle DeviceSensorService::GetSharedMemoryHandle( |  | 
| 93     ConsumerType consumer_type) { |  | 
| 94   DCHECK(thread_checker_.CalledOnValidThread()); |  | 
| 95   return data_fetcher_->GetSharedMemoryHandle(consumer_type); |  | 
| 96 } |  | 
| 97 |  | 
| 98 void DeviceSensorService::Shutdown() { |  | 
| 99   if (data_fetcher_) { |  | 
| 100     data_fetcher_->Shutdown(); |  | 
| 101     data_fetcher_.reset(); |  | 
| 102   } |  | 
| 103   is_shutdown_ = true; |  | 
| 104 } |  | 
| 105 |  | 
| 106 void DeviceSensorService::SetDataFetcherForTesting( |  | 
| 107     DataFetcherSharedMemory* test_data_fetcher) { |  | 
| 108   if (data_fetcher_) |  | 
| 109     data_fetcher_->Shutdown(); |  | 
| 110   data_fetcher_.reset(test_data_fetcher); |  | 
| 111 } |  | 
| 112 |  | 
| 113 }  // namespace content |  | 
| OLD | NEW | 
|---|