OLD | NEW |
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 "device/sensors/data_fetcher_shared_memory_base.h" | 5 #include "device/sensors/data_fetcher_shared_memory_base.h" |
6 | 6 |
7 #include "base/logging.h" | 7 #include "base/logging.h" |
8 #include "base/macros.h" | 8 #include "base/macros.h" |
9 #include "base/process/process_handle.h" | 9 #include "base/process/process_handle.h" |
10 #include "base/single_thread_task_runner.h" | 10 #include "base/single_thread_task_runner.h" |
11 #include "base/synchronization/waitable_event.h" | 11 #include "base/synchronization/waitable_event.h" |
12 #include "base/threading/thread.h" | 12 #include "base/threading/thread.h" |
13 #include "device/sensors/public/cpp/device_light_hardware_buffer.h" | |
14 #include "device/sensors/public/cpp/device_motion_hardware_buffer.h" | 13 #include "device/sensors/public/cpp/device_motion_hardware_buffer.h" |
15 #include "device/sensors/public/cpp/device_orientation_hardware_buffer.h" | 14 #include "device/sensors/public/cpp/device_orientation_hardware_buffer.h" |
16 #include "testing/gtest/include/gtest/gtest.h" | 15 #include "testing/gtest/include/gtest/gtest.h" |
17 | 16 |
18 namespace device { | 17 namespace device { |
19 | 18 |
20 namespace { | 19 namespace { |
21 | 20 |
22 class FakeDataFetcher : public DataFetcherSharedMemoryBase { | 21 class FakeDataFetcher : public DataFetcherSharedMemoryBase { |
23 public: | 22 public: |
24 FakeDataFetcher() | 23 FakeDataFetcher() |
25 : start_light_(base::WaitableEvent::ResetPolicy::AUTOMATIC, | 24 : start_motion_(base::WaitableEvent::ResetPolicy::AUTOMATIC, |
26 base::WaitableEvent::InitialState::NOT_SIGNALED), | |
27 start_motion_(base::WaitableEvent::ResetPolicy::AUTOMATIC, | |
28 base::WaitableEvent::InitialState::NOT_SIGNALED), | 25 base::WaitableEvent::InitialState::NOT_SIGNALED), |
29 start_orientation_(base::WaitableEvent::ResetPolicy::AUTOMATIC, | 26 start_orientation_(base::WaitableEvent::ResetPolicy::AUTOMATIC, |
30 base::WaitableEvent::InitialState::NOT_SIGNALED), | 27 base::WaitableEvent::InitialState::NOT_SIGNALED), |
31 start_orientation_absolute_( | 28 start_orientation_absolute_( |
32 base::WaitableEvent::ResetPolicy::AUTOMATIC, | 29 base::WaitableEvent::ResetPolicy::AUTOMATIC, |
33 base::WaitableEvent::InitialState::NOT_SIGNALED), | 30 base::WaitableEvent::InitialState::NOT_SIGNALED), |
34 stop_light_(base::WaitableEvent::ResetPolicy::AUTOMATIC, | |
35 base::WaitableEvent::InitialState::NOT_SIGNALED), | |
36 stop_motion_(base::WaitableEvent::ResetPolicy::AUTOMATIC, | 31 stop_motion_(base::WaitableEvent::ResetPolicy::AUTOMATIC, |
37 base::WaitableEvent::InitialState::NOT_SIGNALED), | 32 base::WaitableEvent::InitialState::NOT_SIGNALED), |
38 stop_orientation_(base::WaitableEvent::ResetPolicy::AUTOMATIC, | 33 stop_orientation_(base::WaitableEvent::ResetPolicy::AUTOMATIC, |
39 base::WaitableEvent::InitialState::NOT_SIGNALED), | 34 base::WaitableEvent::InitialState::NOT_SIGNALED), |
40 stop_orientation_absolute_( | 35 stop_orientation_absolute_( |
41 base::WaitableEvent::ResetPolicy::AUTOMATIC, | 36 base::WaitableEvent::ResetPolicy::AUTOMATIC, |
42 base::WaitableEvent::InitialState::NOT_SIGNALED), | 37 base::WaitableEvent::InitialState::NOT_SIGNALED), |
43 updated_light_(base::WaitableEvent::ResetPolicy::AUTOMATIC, | |
44 base::WaitableEvent::InitialState::NOT_SIGNALED), | |
45 updated_motion_(base::WaitableEvent::ResetPolicy::AUTOMATIC, | 38 updated_motion_(base::WaitableEvent::ResetPolicy::AUTOMATIC, |
46 base::WaitableEvent::InitialState::NOT_SIGNALED), | 39 base::WaitableEvent::InitialState::NOT_SIGNALED), |
47 updated_orientation_(base::WaitableEvent::ResetPolicy::AUTOMATIC, | 40 updated_orientation_(base::WaitableEvent::ResetPolicy::AUTOMATIC, |
48 base::WaitableEvent::InitialState::NOT_SIGNALED), | 41 base::WaitableEvent::InitialState::NOT_SIGNALED), |
49 updated_orientation_absolute_( | 42 updated_orientation_absolute_( |
50 base::WaitableEvent::ResetPolicy::AUTOMATIC, | 43 base::WaitableEvent::ResetPolicy::AUTOMATIC, |
51 base::WaitableEvent::InitialState::NOT_SIGNALED), | 44 base::WaitableEvent::InitialState::NOT_SIGNALED), |
52 light_buffer_(nullptr), | |
53 motion_buffer_(nullptr), | 45 motion_buffer_(nullptr), |
54 orientation_buffer_(nullptr), | 46 orientation_buffer_(nullptr), |
55 orientation_absolute_buffer_(nullptr) {} | 47 orientation_absolute_buffer_(nullptr) {} |
56 ~FakeDataFetcher() override { Shutdown(); } | 48 ~FakeDataFetcher() override { Shutdown(); } |
57 | 49 |
58 bool Init(ConsumerType consumer_type, void* buffer) { | 50 bool Init(ConsumerType consumer_type, void* buffer) { |
59 EXPECT_TRUE(buffer); | 51 EXPECT_TRUE(buffer); |
60 | 52 |
61 switch (consumer_type) { | 53 switch (consumer_type) { |
62 case CONSUMER_TYPE_MOTION: | 54 case CONSUMER_TYPE_MOTION: |
63 motion_buffer_ = static_cast<DeviceMotionHardwareBuffer*>(buffer); | 55 motion_buffer_ = static_cast<DeviceMotionHardwareBuffer*>(buffer); |
64 break; | 56 break; |
65 case CONSUMER_TYPE_ORIENTATION: | 57 case CONSUMER_TYPE_ORIENTATION: |
66 orientation_buffer_ = | 58 orientation_buffer_ = |
67 static_cast<DeviceOrientationHardwareBuffer*>(buffer); | 59 static_cast<DeviceOrientationHardwareBuffer*>(buffer); |
68 break; | 60 break; |
69 case CONSUMER_TYPE_ORIENTATION_ABSOLUTE: | 61 case CONSUMER_TYPE_ORIENTATION_ABSOLUTE: |
70 orientation_absolute_buffer_ = | 62 orientation_absolute_buffer_ = |
71 static_cast<DeviceOrientationHardwareBuffer*>(buffer); | 63 static_cast<DeviceOrientationHardwareBuffer*>(buffer); |
72 break; | 64 break; |
73 case CONSUMER_TYPE_LIGHT: | |
74 light_buffer_ = static_cast<DeviceLightHardwareBuffer*>(buffer); | |
75 break; | |
76 default: | 65 default: |
77 return false; | 66 return false; |
78 } | 67 } |
79 return true; | 68 return true; |
80 } | 69 } |
81 | 70 |
82 void UpdateLight() { | |
83 DeviceLightHardwareBuffer* buffer = GetLightBuffer(); | |
84 ASSERT_TRUE(buffer); | |
85 buffer->seqlock.WriteBegin(); | |
86 buffer->data.value = 100; | |
87 buffer->seqlock.WriteEnd(); | |
88 updated_light_.Signal(); | |
89 } | |
90 | |
91 void UpdateMotion() { | 71 void UpdateMotion() { |
92 DeviceMotionHardwareBuffer* buffer = GetMotionBuffer(); | 72 DeviceMotionHardwareBuffer* buffer = GetMotionBuffer(); |
93 ASSERT_TRUE(buffer); | 73 ASSERT_TRUE(buffer); |
94 buffer->seqlock.WriteBegin(); | 74 buffer->seqlock.WriteBegin(); |
95 buffer->data.interval = kDeviceSensorIntervalMicroseconds / 1000.; | 75 buffer->data.interval = kDeviceSensorIntervalMicroseconds / 1000.; |
96 buffer->seqlock.WriteEnd(); | 76 buffer->seqlock.WriteEnd(); |
97 updated_motion_.Signal(); | 77 updated_motion_.Signal(); |
98 } | 78 } |
99 | 79 |
100 void UpdateOrientation() { | 80 void UpdateOrientation() { |
101 DeviceOrientationHardwareBuffer* buffer = GetOrientationBuffer(); | 81 DeviceOrientationHardwareBuffer* buffer = GetOrientationBuffer(); |
102 ASSERT_TRUE(buffer); | 82 ASSERT_TRUE(buffer); |
103 buffer->seqlock.WriteBegin(); | 83 buffer->seqlock.WriteBegin(); |
104 buffer->data.alpha = 1; | 84 buffer->data.alpha = 1; |
105 buffer->seqlock.WriteEnd(); | 85 buffer->seqlock.WriteEnd(); |
106 updated_orientation_.Signal(); | 86 updated_orientation_.Signal(); |
107 } | 87 } |
108 | 88 |
109 void UpdateOrientationAbsolute() { | 89 void UpdateOrientationAbsolute() { |
110 DeviceOrientationHardwareBuffer* buffer = GetOrientationAbsoluteBuffer(); | 90 DeviceOrientationHardwareBuffer* buffer = GetOrientationAbsoluteBuffer(); |
111 ASSERT_TRUE(buffer); | 91 ASSERT_TRUE(buffer); |
112 buffer->seqlock.WriteBegin(); | 92 buffer->seqlock.WriteBegin(); |
113 buffer->data.alpha = 1; | 93 buffer->data.alpha = 1; |
114 buffer->data.absolute = true; | 94 buffer->data.absolute = true; |
115 buffer->seqlock.WriteEnd(); | 95 buffer->seqlock.WriteEnd(); |
116 updated_orientation_absolute_.Signal(); | 96 updated_orientation_absolute_.Signal(); |
117 } | 97 } |
118 | 98 |
119 DeviceLightHardwareBuffer* GetLightBuffer() const { return light_buffer_; } | |
120 | |
121 DeviceMotionHardwareBuffer* GetMotionBuffer() const { return motion_buffer_; } | 99 DeviceMotionHardwareBuffer* GetMotionBuffer() const { return motion_buffer_; } |
122 | 100 |
123 DeviceOrientationHardwareBuffer* GetOrientationBuffer() const { | 101 DeviceOrientationHardwareBuffer* GetOrientationBuffer() const { |
124 return orientation_buffer_; | 102 return orientation_buffer_; |
125 } | 103 } |
126 | 104 |
127 DeviceOrientationHardwareBuffer* GetOrientationAbsoluteBuffer() const { | 105 DeviceOrientationHardwareBuffer* GetOrientationAbsoluteBuffer() const { |
128 return orientation_absolute_buffer_; | 106 return orientation_absolute_buffer_; |
129 } | 107 } |
130 | 108 |
131 void WaitForStart(ConsumerType consumer_type) { | 109 void WaitForStart(ConsumerType consumer_type) { |
132 switch (consumer_type) { | 110 switch (consumer_type) { |
133 case CONSUMER_TYPE_MOTION: | 111 case CONSUMER_TYPE_MOTION: |
134 start_motion_.Wait(); | 112 start_motion_.Wait(); |
135 break; | 113 break; |
136 case CONSUMER_TYPE_ORIENTATION: | 114 case CONSUMER_TYPE_ORIENTATION: |
137 start_orientation_.Wait(); | 115 start_orientation_.Wait(); |
138 break; | 116 break; |
139 case CONSUMER_TYPE_ORIENTATION_ABSOLUTE: | 117 case CONSUMER_TYPE_ORIENTATION_ABSOLUTE: |
140 start_orientation_absolute_.Wait(); | 118 start_orientation_absolute_.Wait(); |
141 break; | 119 break; |
142 case CONSUMER_TYPE_LIGHT: | |
143 start_light_.Wait(); | |
144 break; | |
145 } | 120 } |
146 } | 121 } |
147 | 122 |
148 void WaitForStop(ConsumerType consumer_type) { | 123 void WaitForStop(ConsumerType consumer_type) { |
149 switch (consumer_type) { | 124 switch (consumer_type) { |
150 case CONSUMER_TYPE_MOTION: | 125 case CONSUMER_TYPE_MOTION: |
151 stop_motion_.Wait(); | 126 stop_motion_.Wait(); |
152 break; | 127 break; |
153 case CONSUMER_TYPE_ORIENTATION: | 128 case CONSUMER_TYPE_ORIENTATION: |
154 stop_orientation_.Wait(); | 129 stop_orientation_.Wait(); |
155 break; | 130 break; |
156 case CONSUMER_TYPE_ORIENTATION_ABSOLUTE: | 131 case CONSUMER_TYPE_ORIENTATION_ABSOLUTE: |
157 stop_orientation_absolute_.Wait(); | 132 stop_orientation_absolute_.Wait(); |
158 break; | 133 break; |
159 case CONSUMER_TYPE_LIGHT: | |
160 stop_light_.Wait(); | |
161 break; | |
162 } | 134 } |
163 } | 135 } |
164 | 136 |
165 void WaitForUpdate(ConsumerType consumer_type) { | 137 void WaitForUpdate(ConsumerType consumer_type) { |
166 switch (consumer_type) { | 138 switch (consumer_type) { |
167 case CONSUMER_TYPE_MOTION: | 139 case CONSUMER_TYPE_MOTION: |
168 updated_motion_.Wait(); | 140 updated_motion_.Wait(); |
169 break; | 141 break; |
170 case CONSUMER_TYPE_ORIENTATION: | 142 case CONSUMER_TYPE_ORIENTATION: |
171 updated_orientation_.Wait(); | 143 updated_orientation_.Wait(); |
172 break; | 144 break; |
173 case CONSUMER_TYPE_ORIENTATION_ABSOLUTE: | 145 case CONSUMER_TYPE_ORIENTATION_ABSOLUTE: |
174 updated_orientation_absolute_.Wait(); | 146 updated_orientation_absolute_.Wait(); |
175 break; | 147 break; |
176 case CONSUMER_TYPE_LIGHT: | |
177 updated_light_.Wait(); | |
178 break; | |
179 } | 148 } |
180 } | 149 } |
181 | 150 |
182 protected: | 151 protected: |
183 base::WaitableEvent start_light_; | |
184 base::WaitableEvent start_motion_; | 152 base::WaitableEvent start_motion_; |
185 base::WaitableEvent start_orientation_; | 153 base::WaitableEvent start_orientation_; |
186 base::WaitableEvent start_orientation_absolute_; | 154 base::WaitableEvent start_orientation_absolute_; |
187 base::WaitableEvent stop_light_; | |
188 base::WaitableEvent stop_motion_; | 155 base::WaitableEvent stop_motion_; |
189 base::WaitableEvent stop_orientation_; | 156 base::WaitableEvent stop_orientation_; |
190 base::WaitableEvent stop_orientation_absolute_; | 157 base::WaitableEvent stop_orientation_absolute_; |
191 base::WaitableEvent updated_light_; | |
192 base::WaitableEvent updated_motion_; | 158 base::WaitableEvent updated_motion_; |
193 base::WaitableEvent updated_orientation_; | 159 base::WaitableEvent updated_orientation_; |
194 base::WaitableEvent updated_orientation_absolute_; | 160 base::WaitableEvent updated_orientation_absolute_; |
195 | 161 |
196 private: | 162 private: |
197 DeviceLightHardwareBuffer* light_buffer_; | |
198 DeviceMotionHardwareBuffer* motion_buffer_; | 163 DeviceMotionHardwareBuffer* motion_buffer_; |
199 DeviceOrientationHardwareBuffer* orientation_buffer_; | 164 DeviceOrientationHardwareBuffer* orientation_buffer_; |
200 DeviceOrientationHardwareBuffer* orientation_absolute_buffer_; | 165 DeviceOrientationHardwareBuffer* orientation_absolute_buffer_; |
201 | 166 |
202 DISALLOW_COPY_AND_ASSIGN(FakeDataFetcher); | 167 DISALLOW_COPY_AND_ASSIGN(FakeDataFetcher); |
203 }; | 168 }; |
204 | 169 |
205 class FakeNonPollingDataFetcher : public FakeDataFetcher { | 170 class FakeNonPollingDataFetcher : public FakeDataFetcher { |
206 public: | 171 public: |
207 FakeNonPollingDataFetcher() : update_(true) {} | 172 FakeNonPollingDataFetcher() : update_(true) {} |
(...skipping 10 matching lines...) Expand all Loading... |
218 case CONSUMER_TYPE_ORIENTATION: | 183 case CONSUMER_TYPE_ORIENTATION: |
219 if (update_) | 184 if (update_) |
220 UpdateOrientation(); | 185 UpdateOrientation(); |
221 start_orientation_.Signal(); | 186 start_orientation_.Signal(); |
222 break; | 187 break; |
223 case CONSUMER_TYPE_ORIENTATION_ABSOLUTE: | 188 case CONSUMER_TYPE_ORIENTATION_ABSOLUTE: |
224 if (update_) | 189 if (update_) |
225 UpdateOrientationAbsolute(); | 190 UpdateOrientationAbsolute(); |
226 start_orientation_absolute_.Signal(); | 191 start_orientation_absolute_.Signal(); |
227 break; | 192 break; |
228 case CONSUMER_TYPE_LIGHT: | |
229 if (update_) | |
230 UpdateLight(); | |
231 start_light_.Signal(); | |
232 break; | |
233 default: | 193 default: |
234 return false; | 194 return false; |
235 } | 195 } |
236 return true; | 196 return true; |
237 } | 197 } |
238 | 198 |
239 bool Stop(ConsumerType consumer_type) override { | 199 bool Stop(ConsumerType consumer_type) override { |
240 switch (consumer_type) { | 200 switch (consumer_type) { |
241 case CONSUMER_TYPE_MOTION: | 201 case CONSUMER_TYPE_MOTION: |
242 stop_motion_.Signal(); | 202 stop_motion_.Signal(); |
243 break; | 203 break; |
244 case CONSUMER_TYPE_ORIENTATION: | 204 case CONSUMER_TYPE_ORIENTATION: |
245 stop_orientation_.Signal(); | 205 stop_orientation_.Signal(); |
246 break; | 206 break; |
247 case CONSUMER_TYPE_ORIENTATION_ABSOLUTE: | 207 case CONSUMER_TYPE_ORIENTATION_ABSOLUTE: |
248 stop_orientation_absolute_.Signal(); | 208 stop_orientation_absolute_.Signal(); |
249 break; | 209 break; |
250 case CONSUMER_TYPE_LIGHT: | |
251 stop_light_.Signal(); | |
252 break; | |
253 default: | 210 default: |
254 return false; | 211 return false; |
255 } | 212 } |
256 return true; | 213 return true; |
257 } | 214 } |
258 | 215 |
259 void Fetch(unsigned consumer_bitmask) override { | 216 void Fetch(unsigned consumer_bitmask) override { |
260 FAIL() << "fetch should not be called, " | 217 FAIL() << "fetch should not be called, " |
261 << "because this is a non-polling fetcher"; | 218 << "because this is a non-polling fetcher"; |
262 } | 219 } |
(...skipping 20 matching lines...) Expand all Loading... |
283 switch (consumer_type) { | 240 switch (consumer_type) { |
284 case CONSUMER_TYPE_MOTION: | 241 case CONSUMER_TYPE_MOTION: |
285 start_motion_.Signal(); | 242 start_motion_.Signal(); |
286 break; | 243 break; |
287 case CONSUMER_TYPE_ORIENTATION: | 244 case CONSUMER_TYPE_ORIENTATION: |
288 start_orientation_.Signal(); | 245 start_orientation_.Signal(); |
289 break; | 246 break; |
290 case CONSUMER_TYPE_ORIENTATION_ABSOLUTE: | 247 case CONSUMER_TYPE_ORIENTATION_ABSOLUTE: |
291 start_orientation_absolute_.Signal(); | 248 start_orientation_absolute_.Signal(); |
292 break; | 249 break; |
293 case CONSUMER_TYPE_LIGHT: | |
294 start_light_.Signal(); | |
295 break; | |
296 default: | 250 default: |
297 return false; | 251 return false; |
298 } | 252 } |
299 return true; | 253 return true; |
300 } | 254 } |
301 | 255 |
302 bool Stop(ConsumerType consumer_type) override { | 256 bool Stop(ConsumerType consumer_type) override { |
303 EXPECT_TRUE( | 257 EXPECT_TRUE( |
304 GetPollingMessageLoop()->task_runner()->BelongsToCurrentThread()); | 258 GetPollingMessageLoop()->task_runner()->BelongsToCurrentThread()); |
305 | 259 |
306 switch (consumer_type) { | 260 switch (consumer_type) { |
307 case CONSUMER_TYPE_MOTION: | 261 case CONSUMER_TYPE_MOTION: |
308 stop_motion_.Signal(); | 262 stop_motion_.Signal(); |
309 break; | 263 break; |
310 case CONSUMER_TYPE_ORIENTATION: | 264 case CONSUMER_TYPE_ORIENTATION: |
311 stop_orientation_.Signal(); | 265 stop_orientation_.Signal(); |
312 break; | 266 break; |
313 case CONSUMER_TYPE_ORIENTATION_ABSOLUTE: | 267 case CONSUMER_TYPE_ORIENTATION_ABSOLUTE: |
314 stop_orientation_absolute_.Signal(); | 268 stop_orientation_absolute_.Signal(); |
315 break; | 269 break; |
316 case CONSUMER_TYPE_LIGHT: | |
317 stop_light_.Signal(); | |
318 break; | |
319 default: | 270 default: |
320 return false; | 271 return false; |
321 } | 272 } |
322 return true; | 273 return true; |
323 } | 274 } |
324 | 275 |
325 void Fetch(unsigned consumer_bitmask) override { | 276 void Fetch(unsigned consumer_bitmask) override { |
326 EXPECT_TRUE( | 277 EXPECT_TRUE( |
327 GetPollingMessageLoop()->task_runner()->BelongsToCurrentThread()); | 278 GetPollingMessageLoop()->task_runner()->BelongsToCurrentThread()); |
328 EXPECT_TRUE(consumer_bitmask & CONSUMER_TYPE_ORIENTATION || | 279 EXPECT_TRUE(consumer_bitmask & CONSUMER_TYPE_ORIENTATION || |
329 consumer_bitmask & CONSUMER_TYPE_ORIENTATION_ABSOLUTE || | 280 consumer_bitmask & CONSUMER_TYPE_ORIENTATION_ABSOLUTE || |
330 consumer_bitmask & CONSUMER_TYPE_MOTION || | 281 consumer_bitmask & CONSUMER_TYPE_MOTION); |
331 consumer_bitmask & CONSUMER_TYPE_LIGHT); | |
332 | 282 |
333 if (consumer_bitmask & CONSUMER_TYPE_ORIENTATION) | 283 if (consumer_bitmask & CONSUMER_TYPE_ORIENTATION) |
334 UpdateOrientation(); | 284 UpdateOrientation(); |
335 if (consumer_bitmask & CONSUMER_TYPE_ORIENTATION_ABSOLUTE) | 285 if (consumer_bitmask & CONSUMER_TYPE_ORIENTATION_ABSOLUTE) |
336 UpdateOrientationAbsolute(); | 286 UpdateOrientationAbsolute(); |
337 if (consumer_bitmask & CONSUMER_TYPE_MOTION) | 287 if (consumer_bitmask & CONSUMER_TYPE_MOTION) |
338 UpdateMotion(); | 288 UpdateMotion(); |
339 if (consumer_bitmask & CONSUMER_TYPE_LIGHT) | |
340 UpdateLight(); | |
341 } | 289 } |
342 | 290 |
343 FetcherType GetType() const override { return FETCHER_TYPE_POLLING_CALLBACK; } | 291 FetcherType GetType() const override { return FETCHER_TYPE_POLLING_CALLBACK; } |
344 | 292 |
345 private: | 293 private: |
346 DISALLOW_COPY_AND_ASSIGN(FakePollingDataFetcher); | 294 DISALLOW_COPY_AND_ASSIGN(FakePollingDataFetcher); |
347 }; | 295 }; |
348 | 296 |
349 class FakeZeroDelayPollingDataFetcher : public FakeDataFetcher { | 297 class FakeZeroDelayPollingDataFetcher : public FakeDataFetcher { |
350 public: | 298 public: |
351 FakeZeroDelayPollingDataFetcher() {} | 299 FakeZeroDelayPollingDataFetcher() {} |
352 ~FakeZeroDelayPollingDataFetcher() override {} | 300 ~FakeZeroDelayPollingDataFetcher() override {} |
353 | 301 |
354 bool Start(ConsumerType consumer_type, void* buffer) override { | 302 bool Start(ConsumerType consumer_type, void* buffer) override { |
355 EXPECT_TRUE( | 303 EXPECT_TRUE( |
356 GetPollingMessageLoop()->task_runner()->BelongsToCurrentThread()); | 304 GetPollingMessageLoop()->task_runner()->BelongsToCurrentThread()); |
357 | 305 |
358 Init(consumer_type, buffer); | 306 Init(consumer_type, buffer); |
359 switch (consumer_type) { | 307 switch (consumer_type) { |
360 case CONSUMER_TYPE_MOTION: | 308 case CONSUMER_TYPE_MOTION: |
361 start_motion_.Signal(); | 309 start_motion_.Signal(); |
362 break; | 310 break; |
363 case CONSUMER_TYPE_ORIENTATION: | 311 case CONSUMER_TYPE_ORIENTATION: |
364 start_orientation_.Signal(); | 312 start_orientation_.Signal(); |
365 break; | 313 break; |
366 case CONSUMER_TYPE_ORIENTATION_ABSOLUTE: | 314 case CONSUMER_TYPE_ORIENTATION_ABSOLUTE: |
367 start_orientation_absolute_.Signal(); | 315 start_orientation_absolute_.Signal(); |
368 break; | 316 break; |
369 case CONSUMER_TYPE_LIGHT: | |
370 start_light_.Signal(); | |
371 break; | |
372 default: | 317 default: |
373 return false; | 318 return false; |
374 } | 319 } |
375 return true; | 320 return true; |
376 } | 321 } |
377 | 322 |
378 bool Stop(ConsumerType consumer_type) override { | 323 bool Stop(ConsumerType consumer_type) override { |
379 EXPECT_TRUE( | 324 EXPECT_TRUE( |
380 GetPollingMessageLoop()->task_runner()->BelongsToCurrentThread()); | 325 GetPollingMessageLoop()->task_runner()->BelongsToCurrentThread()); |
381 | 326 |
382 switch (consumer_type) { | 327 switch (consumer_type) { |
383 case CONSUMER_TYPE_MOTION: | 328 case CONSUMER_TYPE_MOTION: |
384 stop_motion_.Signal(); | 329 stop_motion_.Signal(); |
385 break; | 330 break; |
386 case CONSUMER_TYPE_ORIENTATION: | 331 case CONSUMER_TYPE_ORIENTATION: |
387 stop_orientation_.Signal(); | 332 stop_orientation_.Signal(); |
388 break; | 333 break; |
389 case CONSUMER_TYPE_ORIENTATION_ABSOLUTE: | 334 case CONSUMER_TYPE_ORIENTATION_ABSOLUTE: |
390 stop_orientation_absolute_.Signal(); | 335 stop_orientation_absolute_.Signal(); |
391 break; | 336 break; |
392 case CONSUMER_TYPE_LIGHT: | |
393 stop_light_.Signal(); | |
394 break; | |
395 default: | 337 default: |
396 return false; | 338 return false; |
397 } | 339 } |
398 return true; | 340 return true; |
399 } | 341 } |
400 | 342 |
401 void Fetch(unsigned consumer_bitmask) override { | 343 void Fetch(unsigned consumer_bitmask) override { |
402 FAIL() << "fetch should not be called"; | 344 FAIL() << "fetch should not be called"; |
403 } | 345 } |
404 | 346 |
(...skipping 46 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
451 CONSUMER_TYPE_ORIENTATION_ABSOLUTE)); | 393 CONSUMER_TYPE_ORIENTATION_ABSOLUTE)); |
452 fake_data_fetcher.WaitForStart(CONSUMER_TYPE_ORIENTATION_ABSOLUTE); | 394 fake_data_fetcher.WaitForStart(CONSUMER_TYPE_ORIENTATION_ABSOLUTE); |
453 | 395 |
454 EXPECT_EQ(1, fake_data_fetcher.GetOrientationAbsoluteBuffer()->data.alpha); | 396 EXPECT_EQ(1, fake_data_fetcher.GetOrientationAbsoluteBuffer()->data.alpha); |
455 EXPECT_TRUE(fake_data_fetcher.GetOrientationAbsoluteBuffer()->data.absolute); | 397 EXPECT_TRUE(fake_data_fetcher.GetOrientationAbsoluteBuffer()->data.absolute); |
456 | 398 |
457 fake_data_fetcher.StopFetchingDeviceData(CONSUMER_TYPE_ORIENTATION_ABSOLUTE); | 399 fake_data_fetcher.StopFetchingDeviceData(CONSUMER_TYPE_ORIENTATION_ABSOLUTE); |
458 fake_data_fetcher.WaitForStop(CONSUMER_TYPE_ORIENTATION_ABSOLUTE); | 400 fake_data_fetcher.WaitForStop(CONSUMER_TYPE_ORIENTATION_ABSOLUTE); |
459 } | 401 } |
460 | 402 |
461 TEST(DataFetcherSharedMemoryBaseTest, DoesStartLight) { | |
462 FakeNonPollingDataFetcher fake_data_fetcher; | |
463 EXPECT_EQ(DataFetcherSharedMemoryBase::FETCHER_TYPE_DEFAULT, | |
464 fake_data_fetcher.GetType()); | |
465 | |
466 EXPECT_TRUE(fake_data_fetcher.StartFetchingDeviceData(CONSUMER_TYPE_LIGHT)); | |
467 fake_data_fetcher.WaitForStart(CONSUMER_TYPE_LIGHT); | |
468 | |
469 EXPECT_EQ(100, fake_data_fetcher.GetLightBuffer()->data.value); | |
470 | |
471 fake_data_fetcher.StopFetchingDeviceData(CONSUMER_TYPE_LIGHT); | |
472 fake_data_fetcher.WaitForStop(CONSUMER_TYPE_LIGHT); | |
473 } | |
474 | |
475 TEST(DataFetcherSharedMemoryBaseTest, DoesPollMotion) { | 403 TEST(DataFetcherSharedMemoryBaseTest, DoesPollMotion) { |
476 FakePollingDataFetcher fake_data_fetcher; | 404 FakePollingDataFetcher fake_data_fetcher; |
477 EXPECT_EQ(DataFetcherSharedMemoryBase::FETCHER_TYPE_POLLING_CALLBACK, | 405 EXPECT_EQ(DataFetcherSharedMemoryBase::FETCHER_TYPE_POLLING_CALLBACK, |
478 fake_data_fetcher.GetType()); | 406 fake_data_fetcher.GetType()); |
479 | 407 |
480 EXPECT_TRUE(fake_data_fetcher.StartFetchingDeviceData(CONSUMER_TYPE_MOTION)); | 408 EXPECT_TRUE(fake_data_fetcher.StartFetchingDeviceData(CONSUMER_TYPE_MOTION)); |
481 fake_data_fetcher.WaitForStart(CONSUMER_TYPE_MOTION); | 409 fake_data_fetcher.WaitForStart(CONSUMER_TYPE_MOTION); |
482 fake_data_fetcher.WaitForUpdate(CONSUMER_TYPE_MOTION); | 410 fake_data_fetcher.WaitForUpdate(CONSUMER_TYPE_MOTION); |
483 | 411 |
484 EXPECT_EQ(kDeviceSensorIntervalMicroseconds / 1000., | 412 EXPECT_EQ(kDeviceSensorIntervalMicroseconds / 1000., |
(...skipping 29 matching lines...) Expand all Loading... |
514 fake_data_fetcher.WaitForStart(CONSUMER_TYPE_ORIENTATION_ABSOLUTE); | 442 fake_data_fetcher.WaitForStart(CONSUMER_TYPE_ORIENTATION_ABSOLUTE); |
515 fake_data_fetcher.WaitForUpdate(CONSUMER_TYPE_ORIENTATION_ABSOLUTE); | 443 fake_data_fetcher.WaitForUpdate(CONSUMER_TYPE_ORIENTATION_ABSOLUTE); |
516 | 444 |
517 EXPECT_EQ(1, fake_data_fetcher.GetOrientationAbsoluteBuffer()->data.alpha); | 445 EXPECT_EQ(1, fake_data_fetcher.GetOrientationAbsoluteBuffer()->data.alpha); |
518 EXPECT_TRUE(fake_data_fetcher.GetOrientationAbsoluteBuffer()->data.absolute); | 446 EXPECT_TRUE(fake_data_fetcher.GetOrientationAbsoluteBuffer()->data.absolute); |
519 | 447 |
520 fake_data_fetcher.StopFetchingDeviceData(CONSUMER_TYPE_ORIENTATION_ABSOLUTE); | 448 fake_data_fetcher.StopFetchingDeviceData(CONSUMER_TYPE_ORIENTATION_ABSOLUTE); |
521 fake_data_fetcher.WaitForStop(CONSUMER_TYPE_ORIENTATION_ABSOLUTE); | 449 fake_data_fetcher.WaitForStop(CONSUMER_TYPE_ORIENTATION_ABSOLUTE); |
522 } | 450 } |
523 | 451 |
524 TEST(DataFetcherSharedMemoryBaseTest, DoesPollLight) { | |
525 FakePollingDataFetcher fake_data_fetcher; | |
526 EXPECT_EQ(DataFetcherSharedMemoryBase::FETCHER_TYPE_POLLING_CALLBACK, | |
527 fake_data_fetcher.GetType()); | |
528 | |
529 EXPECT_TRUE(fake_data_fetcher.StartFetchingDeviceData(CONSUMER_TYPE_LIGHT)); | |
530 fake_data_fetcher.WaitForStart(CONSUMER_TYPE_LIGHT); | |
531 fake_data_fetcher.WaitForUpdate(CONSUMER_TYPE_LIGHT); | |
532 | |
533 EXPECT_EQ(100, fake_data_fetcher.GetLightBuffer()->data.value); | |
534 | |
535 fake_data_fetcher.StopFetchingDeviceData(CONSUMER_TYPE_LIGHT); | |
536 fake_data_fetcher.WaitForStop(CONSUMER_TYPE_LIGHT); | |
537 } | |
538 | |
539 TEST(DataFetcherSharedMemoryBaseTest, DoesPollMotionAndOrientation) { | 452 TEST(DataFetcherSharedMemoryBaseTest, DoesPollMotionAndOrientation) { |
540 FakePollingDataFetcher fake_data_fetcher; | 453 FakePollingDataFetcher fake_data_fetcher; |
541 EXPECT_EQ(DataFetcherSharedMemoryBase::FETCHER_TYPE_POLLING_CALLBACK, | 454 EXPECT_EQ(DataFetcherSharedMemoryBase::FETCHER_TYPE_POLLING_CALLBACK, |
542 fake_data_fetcher.GetType()); | 455 fake_data_fetcher.GetType()); |
543 | 456 |
544 EXPECT_TRUE( | 457 EXPECT_TRUE( |
545 fake_data_fetcher.StartFetchingDeviceData(CONSUMER_TYPE_ORIENTATION)); | 458 fake_data_fetcher.StartFetchingDeviceData(CONSUMER_TYPE_ORIENTATION)); |
546 mojo::ScopedSharedBufferHandle handle_orientation = | 459 mojo::ScopedSharedBufferHandle handle_orientation = |
547 fake_data_fetcher.GetSharedMemoryHandle(CONSUMER_TYPE_ORIENTATION); | 460 fake_data_fetcher.GetSharedMemoryHandle(CONSUMER_TYPE_ORIENTATION); |
548 EXPECT_TRUE(handle_orientation.is_valid()); | 461 EXPECT_TRUE(handle_orientation.is_valid()); |
(...skipping 51 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
600 fake_data_fetcher.StartFetchingDeviceData(CONSUMER_TYPE_ORIENTATION)); | 513 fake_data_fetcher.StartFetchingDeviceData(CONSUMER_TYPE_ORIENTATION)); |
601 fake_data_fetcher.WaitForStart(CONSUMER_TYPE_ORIENTATION); | 514 fake_data_fetcher.WaitForStart(CONSUMER_TYPE_ORIENTATION); |
602 EXPECT_EQ(0, fake_data_fetcher.GetOrientationBuffer()->data.alpha); | 515 EXPECT_EQ(0, fake_data_fetcher.GetOrientationBuffer()->data.alpha); |
603 fake_data_fetcher.StopFetchingDeviceData(CONSUMER_TYPE_ORIENTATION); | 516 fake_data_fetcher.StopFetchingDeviceData(CONSUMER_TYPE_ORIENTATION); |
604 fake_data_fetcher.WaitForStop(CONSUMER_TYPE_ORIENTATION); | 517 fake_data_fetcher.WaitForStop(CONSUMER_TYPE_ORIENTATION); |
605 } | 518 } |
606 | 519 |
607 } // namespace | 520 } // namespace |
608 | 521 |
609 } // namespace device | 522 } // namespace device |
OLD | NEW |