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

Side by Side Diff: device/device_sensors/data_fetcher_shared_memory_base.cc

Issue 1164563003: Extract device_sensors to /device via Mojofication (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Created 5 years, 6 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 unified diff | Download patch
OLDNEW
1 // Copyright 2014 The Chromium Authors. All rights reserved. 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 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/device_sensors/data_fetcher_shared_memory_base.h" 5 #include "device/device_sensors/data_fetcher_shared_memory_base.h"
6 6
7 #include "base/bind.h" 7 #include "base/bind.h"
8 #include "base/logging.h" 8 #include "base/logging.h"
9 #include "base/stl_util.h" 9 #include "base/stl_util.h"
10 #include "base/threading/thread.h" 10 #include "base/threading/thread.h"
11 #include "base/timer/timer.h" 11 #include "base/timer/timer.h"
12 #include "content/common/device_sensors/device_light_hardware_buffer.h" 12 #include "device/device_sensors/device_light_hardware_buffer.h"
13 #include "content/common/device_sensors/device_motion_hardware_buffer.h" 13 #include "device/device_sensors/device_motion_hardware_buffer.h"
14 #include "content/common/device_sensors/device_orientation_hardware_buffer.h" 14 #include "device/device_sensors/device_orientation_hardware_buffer.h"
15 15
16 namespace content { 16 namespace device {
17 17
18 namespace { 18 namespace {
19 19
20 size_t GetConsumerSharedMemoryBufferSize(ConsumerType consumer_type) { 20 size_t GetConsumerSharedMemoryBufferSize(ConsumerType consumer_type) {
21 switch (consumer_type) { 21 switch (consumer_type) {
22 case CONSUMER_TYPE_MOTION: 22 case CONSUMER_TYPE_MOTION:
23 return sizeof(DeviceMotionHardwareBuffer); 23 return sizeof(DeviceMotionHardwareBuffer);
24 case CONSUMER_TYPE_ORIENTATION: 24 case CONSUMER_TYPE_ORIENTATION:
25 return sizeof(DeviceOrientationHardwareBuffer); 25 return sizeof(DeviceOrientationHardwareBuffer);
26 case CONSUMER_TYPE_LIGHT: 26 case CONSUMER_TYPE_LIGHT:
(...skipping 15 matching lines...) Expand all
42 void RemoveConsumer(ConsumerType consumer_type); 42 void RemoveConsumer(ConsumerType consumer_type);
43 43
44 unsigned GetConsumersBitmask() const { return consumers_bitmask_; } 44 unsigned GetConsumersBitmask() const { return consumers_bitmask_; }
45 bool IsTimerRunning() const { return timer_ ? timer_->IsRunning() : false; } 45 bool IsTimerRunning() const { return timer_ ? timer_->IsRunning() : false; }
46 46
47 private: 47 private:
48 void DoPoll(); 48 void DoPoll();
49 49
50 unsigned consumers_bitmask_; 50 unsigned consumers_bitmask_;
51 DataFetcherSharedMemoryBase* fetcher_; 51 DataFetcherSharedMemoryBase* fetcher_;
52 scoped_ptr<base::RepeatingTimer<PollingThread> > timer_; 52 scoped_ptr<base::RepeatingTimer<PollingThread>> timer_;
53 53
54 DISALLOW_COPY_AND_ASSIGN(PollingThread); 54 DISALLOW_COPY_AND_ASSIGN(PollingThread);
55 }; 55 };
56 56
57 // --- PollingThread methods 57 // --- PollingThread methods
58 58
59 DataFetcherSharedMemoryBase::PollingThread::PollingThread( 59 DataFetcherSharedMemoryBase::PollingThread::PollingThread(
60 const char* name, DataFetcherSharedMemoryBase* fetcher) 60 const char* name,
61 : base::Thread(name), 61 DataFetcherSharedMemoryBase* fetcher)
62 consumers_bitmask_(0), 62 : base::Thread(name), consumers_bitmask_(0), fetcher_(fetcher) {
63 fetcher_(fetcher) {
64 } 63 }
65 64
66 DataFetcherSharedMemoryBase::PollingThread::~PollingThread() { 65 DataFetcherSharedMemoryBase::PollingThread::~PollingThread() {
67 } 66 }
68 67
69 void DataFetcherSharedMemoryBase::PollingThread::AddConsumer( 68 void DataFetcherSharedMemoryBase::PollingThread::AddConsumer(
70 ConsumerType consumer_type, void* buffer) { 69 ConsumerType consumer_type,
70 void* buffer) {
71 DCHECK(fetcher_); 71 DCHECK(fetcher_);
72 if (!fetcher_->Start(consumer_type, buffer)) 72 if (!fetcher_->Start(consumer_type, buffer))
73 return; 73 return;
74 74
75 consumers_bitmask_ |= consumer_type; 75 consumers_bitmask_ |= consumer_type;
76 76
77 if (!timer_ && fetcher_->GetType() == FETCHER_TYPE_POLLING_CALLBACK) { 77 if (!timer_ && fetcher_->GetType() == FETCHER_TYPE_POLLING_CALLBACK) {
78 timer_.reset(new base::RepeatingTimer<PollingThread>()); 78 timer_.reset(new base::RepeatingTimer<PollingThread>());
79 timer_->Start(FROM_HERE, 79 timer_->Start(FROM_HERE, fetcher_->GetInterval(), this,
80 fetcher_->GetInterval(), 80 &PollingThread::DoPoll);
81 this, &PollingThread::DoPoll);
82 } 81 }
83 } 82 }
84 83
85 void DataFetcherSharedMemoryBase::PollingThread::RemoveConsumer( 84 void DataFetcherSharedMemoryBase::PollingThread::RemoveConsumer(
86 ConsumerType consumer_type) { 85 ConsumerType consumer_type) {
87 DCHECK(fetcher_); 86 DCHECK(fetcher_);
88 if (!fetcher_->Stop(consumer_type)) 87 if (!fetcher_->Stop(consumer_type))
89 return; 88 return;
90 89
91 consumers_bitmask_ ^= consumer_type; 90 consumers_bitmask_ ^= consumer_type;
(...skipping 15 matching lines...) Expand all
107 } 106 }
108 107
109 DataFetcherSharedMemoryBase::~DataFetcherSharedMemoryBase() { 108 DataFetcherSharedMemoryBase::~DataFetcherSharedMemoryBase() {
110 DCHECK_EQ(0u, started_consumers_); 109 DCHECK_EQ(0u, started_consumers_);
111 110
112 // make sure polling thread stops asap. 111 // make sure polling thread stops asap.
113 if (polling_thread_) 112 if (polling_thread_)
114 polling_thread_->Stop(); 113 polling_thread_->Stop();
115 114
116 STLDeleteContainerPairSecondPointers(shared_memory_map_.begin(), 115 STLDeleteContainerPairSecondPointers(shared_memory_map_.begin(),
117 shared_memory_map_.end()); 116 shared_memory_map_.end());
118 } 117 }
119 118
120 bool DataFetcherSharedMemoryBase::StartFetchingDeviceData( 119 bool DataFetcherSharedMemoryBase::StartFetchingDeviceData(
121 ConsumerType consumer_type) { 120 ConsumerType consumer_type) {
122 if (started_consumers_ & consumer_type) 121 if (started_consumers_ & consumer_type)
123 return true; 122 return true;
124 123
125 void* buffer = GetSharedMemoryBuffer(consumer_type); 124 void* buffer = GetSharedMemoryBuffer(consumer_type);
126 if (!buffer) 125 if (!buffer)
127 return false; 126 return false;
128 127
129 if (GetType() != FETCHER_TYPE_DEFAULT) { 128 if (GetType() != FETCHER_TYPE_DEFAULT) {
130 if (!InitAndStartPollingThreadIfNecessary()) 129 if (!InitAndStartPollingThreadIfNecessary())
131 return false; 130 return false;
132 polling_thread_->message_loop()->PostTask( 131 polling_thread_->message_loop()->PostTask(
133 FROM_HERE, 132 FROM_HERE, base::Bind(&PollingThread::AddConsumer,
134 base::Bind(&PollingThread::AddConsumer, 133 base::Unretained(polling_thread_.get()),
135 base::Unretained(polling_thread_.get()), 134 consumer_type, buffer));
136 consumer_type, buffer));
137 } else { 135 } else {
138 if (!Start(consumer_type, buffer)) 136 if (!Start(consumer_type, buffer))
139 return false; 137 return false;
140 } 138 }
141 139
142 started_consumers_ |= consumer_type; 140 started_consumers_ |= consumer_type;
143 141
144 return true; 142 return true;
145 } 143 }
146 144
147 bool DataFetcherSharedMemoryBase::StopFetchingDeviceData( 145 bool DataFetcherSharedMemoryBase::StopFetchingDeviceData(
148 ConsumerType consumer_type) { 146 ConsumerType consumer_type) {
149 if (!(started_consumers_ & consumer_type)) 147 if (!(started_consumers_ & consumer_type))
150 return true; 148 return true;
151 149
152 if (GetType() != FETCHER_TYPE_DEFAULT) { 150 if (GetType() != FETCHER_TYPE_DEFAULT) {
153 polling_thread_->message_loop()->PostTask( 151 polling_thread_->message_loop()->PostTask(
154 FROM_HERE, 152 FROM_HERE,
155 base::Bind(&PollingThread::RemoveConsumer, 153 base::Bind(&PollingThread::RemoveConsumer,
156 base::Unretained(polling_thread_.get()), 154 base::Unretained(polling_thread_.get()), consumer_type));
157 consumer_type));
158 } else { 155 } else {
159 if (!Stop(consumer_type)) 156 if (!Stop(consumer_type))
160 return false; 157 return false;
161 } 158 }
162 159
163 started_consumers_ ^= consumer_type; 160 started_consumers_ ^= consumer_type;
164 161
165 return true; 162 return true;
166 } 163 }
167 164
168 void DataFetcherSharedMemoryBase::Shutdown() { 165 void DataFetcherSharedMemoryBase::Shutdown() {
169 StopFetchingDeviceData(CONSUMER_TYPE_MOTION); 166 StopFetchingDeviceData(CONSUMER_TYPE_MOTION);
170 StopFetchingDeviceData(CONSUMER_TYPE_ORIENTATION); 167 StopFetchingDeviceData(CONSUMER_TYPE_ORIENTATION);
171 StopFetchingDeviceData(CONSUMER_TYPE_LIGHT); 168 StopFetchingDeviceData(CONSUMER_TYPE_LIGHT);
172 } 169 }
173 170
174 base::SharedMemoryHandle 171 base::SharedMemoryHandle
175 DataFetcherSharedMemoryBase::GetSharedMemoryHandleForProcess( 172 DataFetcherSharedMemoryBase::GetSharedMemoryHandleForProcess(
176 ConsumerType consumer_type, base::ProcessHandle process) { 173 ConsumerType consumer_type,
174 base::ProcessHandle process) {
177 SharedMemoryMap::const_iterator it = shared_memory_map_.find(consumer_type); 175 SharedMemoryMap::const_iterator it = shared_memory_map_.find(consumer_type);
178 if (it == shared_memory_map_.end()) 176 if (it == shared_memory_map_.end())
179 return base::SharedMemory::NULLHandle(); 177 return base::SharedMemory::NULLHandle();
180 178
181 base::SharedMemoryHandle renderer_handle; 179 base::SharedMemoryHandle renderer_handle;
182 it->second->ShareToProcess(process, &renderer_handle); 180 it->second->ShareToProcess(process, &renderer_handle);
183 return renderer_handle; 181 return renderer_handle;
184 } 182 }
185 183
186 bool DataFetcherSharedMemoryBase::InitAndStartPollingThreadIfNecessary() { 184 bool DataFetcherSharedMemoryBase::InitAndStartPollingThreadIfNecessary() {
187 if (polling_thread_) 185 if (polling_thread_)
188 return true; 186 return true;
189 187
190 polling_thread_.reset( 188 polling_thread_.reset(
191 new PollingThread("Inertial Device Sensor poller", this)); 189 new PollingThread("Inertial Device Sensor poller", this));
192 190
193 if (!polling_thread_->Start()) { 191 if (!polling_thread_->Start()) {
194 LOG(ERROR) << "Failed to start inertial sensor data polling thread"; 192 LOG(ERROR) << "Failed to start inertial sensor data polling thread";
195 return false; 193 return false;
196 } 194 }
197 return true; 195 return true;
198 } 196 }
199 197
200 void DataFetcherSharedMemoryBase::Fetch(unsigned consumer_bitmask) { 198 void DataFetcherSharedMemoryBase::Fetch(unsigned consumer_bitmask) {
201 NOTIMPLEMENTED(); 199 NOTIMPLEMENTED();
202 } 200 }
203 201
204 DataFetcherSharedMemoryBase::FetcherType 202 DataFetcherSharedMemoryBase::FetcherType DataFetcherSharedMemoryBase::GetType()
205 DataFetcherSharedMemoryBase::GetType() const { 203 const {
206 return FETCHER_TYPE_DEFAULT; 204 return FETCHER_TYPE_DEFAULT;
207 } 205 }
208 206
209 base::TimeDelta DataFetcherSharedMemoryBase::GetInterval() const { 207 base::TimeDelta DataFetcherSharedMemoryBase::GetInterval() const {
210 return base::TimeDelta::FromMicroseconds(kInertialSensorIntervalMicroseconds); 208 return base::TimeDelta::FromMicroseconds(kInertialSensorIntervalMicroseconds);
211 } 209 }
212 210
213 base::SharedMemory* DataFetcherSharedMemoryBase::GetSharedMemory( 211 base::SharedMemory* DataFetcherSharedMemoryBase::GetSharedMemory(
214 ConsumerType consumer_type) { 212 ConsumerType consumer_type) {
215 SharedMemoryMap::const_iterator it = shared_memory_map_.find(consumer_type); 213 SharedMemoryMap::const_iterator it = shared_memory_map_.find(consumer_type);
(...skipping 25 matching lines...) Expand all
241 } 239 }
242 240
243 base::MessageLoop* DataFetcherSharedMemoryBase::GetPollingMessageLoop() const { 241 base::MessageLoop* DataFetcherSharedMemoryBase::GetPollingMessageLoop() const {
244 return polling_thread_ ? polling_thread_->message_loop() : nullptr; 242 return polling_thread_ ? polling_thread_->message_loop() : nullptr;
245 } 243 }
246 244
247 bool DataFetcherSharedMemoryBase::IsPollingTimerRunningForTesting() const { 245 bool DataFetcherSharedMemoryBase::IsPollingTimerRunningForTesting() const {
248 return polling_thread_ ? polling_thread_->IsTimerRunning() : false; 246 return polling_thread_ ? polling_thread_->IsTimerRunning() : false;
249 } 247 }
250 248
251 } // namespace content 249 } // namespace device
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698