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

Side by Side Diff: device/sensors/data_fetcher_shared_memory_base_unittest.cc

Issue 2819273006: Move //device/sensor impl to be part of the internal implemenation of the Device Service. (Closed)
Patch Set: Move //device/sensor impl to be part of the internal implemenation of the Device Service Created 3 years, 8 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
(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 "device/sensors/data_fetcher_shared_memory_base.h"
6
7 #include "base/logging.h"
8 #include "base/macros.h"
9 #include "base/process/process_handle.h"
10 #include "base/single_thread_task_runner.h"
11 #include "base/synchronization/waitable_event.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"
15 #include "device/sensors/public/cpp/device_orientation_hardware_buffer.h"
16 #include "testing/gtest/include/gtest/gtest.h"
17
18 namespace device {
19
20 namespace {
21
22 class FakeDataFetcher : public DataFetcherSharedMemoryBase {
23 public:
24 FakeDataFetcher()
25 : start_light_(base::WaitableEvent::ResetPolicy::AUTOMATIC,
26 base::WaitableEvent::InitialState::NOT_SIGNALED),
27 start_motion_(base::WaitableEvent::ResetPolicy::AUTOMATIC,
28 base::WaitableEvent::InitialState::NOT_SIGNALED),
29 start_orientation_(base::WaitableEvent::ResetPolicy::AUTOMATIC,
30 base::WaitableEvent::InitialState::NOT_SIGNALED),
31 start_orientation_absolute_(
32 base::WaitableEvent::ResetPolicy::AUTOMATIC,
33 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,
37 base::WaitableEvent::InitialState::NOT_SIGNALED),
38 stop_orientation_(base::WaitableEvent::ResetPolicy::AUTOMATIC,
39 base::WaitableEvent::InitialState::NOT_SIGNALED),
40 stop_orientation_absolute_(
41 base::WaitableEvent::ResetPolicy::AUTOMATIC,
42 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,
46 base::WaitableEvent::InitialState::NOT_SIGNALED),
47 updated_orientation_(base::WaitableEvent::ResetPolicy::AUTOMATIC,
48 base::WaitableEvent::InitialState::NOT_SIGNALED),
49 updated_orientation_absolute_(
50 base::WaitableEvent::ResetPolicy::AUTOMATIC,
51 base::WaitableEvent::InitialState::NOT_SIGNALED),
52 light_buffer_(nullptr),
53 motion_buffer_(nullptr),
54 orientation_buffer_(nullptr),
55 orientation_absolute_buffer_(nullptr) {}
56 ~FakeDataFetcher() override { Shutdown(); }
57
58 bool Init(ConsumerType consumer_type, void* buffer) {
59 EXPECT_TRUE(buffer);
60
61 switch (consumer_type) {
62 case CONSUMER_TYPE_MOTION:
63 motion_buffer_ = static_cast<DeviceMotionHardwareBuffer*>(buffer);
64 break;
65 case CONSUMER_TYPE_ORIENTATION:
66 orientation_buffer_ =
67 static_cast<DeviceOrientationHardwareBuffer*>(buffer);
68 break;
69 case CONSUMER_TYPE_ORIENTATION_ABSOLUTE:
70 orientation_absolute_buffer_ =
71 static_cast<DeviceOrientationHardwareBuffer*>(buffer);
72 break;
73 case CONSUMER_TYPE_LIGHT:
74 light_buffer_ = static_cast<DeviceLightHardwareBuffer*>(buffer);
75 break;
76 default:
77 return false;
78 }
79 return true;
80 }
81
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() {
92 DeviceMotionHardwareBuffer* buffer = GetMotionBuffer();
93 ASSERT_TRUE(buffer);
94 buffer->seqlock.WriteBegin();
95 buffer->data.interval = kDeviceSensorIntervalMicroseconds / 1000.;
96 buffer->seqlock.WriteEnd();
97 updated_motion_.Signal();
98 }
99
100 void UpdateOrientation() {
101 DeviceOrientationHardwareBuffer* buffer = GetOrientationBuffer();
102 ASSERT_TRUE(buffer);
103 buffer->seqlock.WriteBegin();
104 buffer->data.alpha = 1;
105 buffer->seqlock.WriteEnd();
106 updated_orientation_.Signal();
107 }
108
109 void UpdateOrientationAbsolute() {
110 DeviceOrientationHardwareBuffer* buffer = GetOrientationAbsoluteBuffer();
111 ASSERT_TRUE(buffer);
112 buffer->seqlock.WriteBegin();
113 buffer->data.alpha = 1;
114 buffer->data.absolute = true;
115 buffer->seqlock.WriteEnd();
116 updated_orientation_absolute_.Signal();
117 }
118
119 DeviceLightHardwareBuffer* GetLightBuffer() const { return light_buffer_; }
120
121 DeviceMotionHardwareBuffer* GetMotionBuffer() const { return motion_buffer_; }
122
123 DeviceOrientationHardwareBuffer* GetOrientationBuffer() const {
124 return orientation_buffer_;
125 }
126
127 DeviceOrientationHardwareBuffer* GetOrientationAbsoluteBuffer() const {
128 return orientation_absolute_buffer_;
129 }
130
131 void WaitForStart(ConsumerType consumer_type) {
132 switch (consumer_type) {
133 case CONSUMER_TYPE_MOTION:
134 start_motion_.Wait();
135 break;
136 case CONSUMER_TYPE_ORIENTATION:
137 start_orientation_.Wait();
138 break;
139 case CONSUMER_TYPE_ORIENTATION_ABSOLUTE:
140 start_orientation_absolute_.Wait();
141 break;
142 case CONSUMER_TYPE_LIGHT:
143 start_light_.Wait();
144 break;
145 }
146 }
147
148 void WaitForStop(ConsumerType consumer_type) {
149 switch (consumer_type) {
150 case CONSUMER_TYPE_MOTION:
151 stop_motion_.Wait();
152 break;
153 case CONSUMER_TYPE_ORIENTATION:
154 stop_orientation_.Wait();
155 break;
156 case CONSUMER_TYPE_ORIENTATION_ABSOLUTE:
157 stop_orientation_absolute_.Wait();
158 break;
159 case CONSUMER_TYPE_LIGHT:
160 stop_light_.Wait();
161 break;
162 }
163 }
164
165 void WaitForUpdate(ConsumerType consumer_type) {
166 switch (consumer_type) {
167 case CONSUMER_TYPE_MOTION:
168 updated_motion_.Wait();
169 break;
170 case CONSUMER_TYPE_ORIENTATION:
171 updated_orientation_.Wait();
172 break;
173 case CONSUMER_TYPE_ORIENTATION_ABSOLUTE:
174 updated_orientation_absolute_.Wait();
175 break;
176 case CONSUMER_TYPE_LIGHT:
177 updated_light_.Wait();
178 break;
179 }
180 }
181
182 protected:
183 base::WaitableEvent start_light_;
184 base::WaitableEvent start_motion_;
185 base::WaitableEvent start_orientation_;
186 base::WaitableEvent start_orientation_absolute_;
187 base::WaitableEvent stop_light_;
188 base::WaitableEvent stop_motion_;
189 base::WaitableEvent stop_orientation_;
190 base::WaitableEvent stop_orientation_absolute_;
191 base::WaitableEvent updated_light_;
192 base::WaitableEvent updated_motion_;
193 base::WaitableEvent updated_orientation_;
194 base::WaitableEvent updated_orientation_absolute_;
195
196 private:
197 DeviceLightHardwareBuffer* light_buffer_;
198 DeviceMotionHardwareBuffer* motion_buffer_;
199 DeviceOrientationHardwareBuffer* orientation_buffer_;
200 DeviceOrientationHardwareBuffer* orientation_absolute_buffer_;
201
202 DISALLOW_COPY_AND_ASSIGN(FakeDataFetcher);
203 };
204
205 class FakeNonPollingDataFetcher : public FakeDataFetcher {
206 public:
207 FakeNonPollingDataFetcher() : update_(true) {}
208 ~FakeNonPollingDataFetcher() override {}
209
210 bool Start(ConsumerType consumer_type, void* buffer) override {
211 Init(consumer_type, buffer);
212 switch (consumer_type) {
213 case CONSUMER_TYPE_MOTION:
214 if (update_)
215 UpdateMotion();
216 start_motion_.Signal();
217 break;
218 case CONSUMER_TYPE_ORIENTATION:
219 if (update_)
220 UpdateOrientation();
221 start_orientation_.Signal();
222 break;
223 case CONSUMER_TYPE_ORIENTATION_ABSOLUTE:
224 if (update_)
225 UpdateOrientationAbsolute();
226 start_orientation_absolute_.Signal();
227 break;
228 case CONSUMER_TYPE_LIGHT:
229 if (update_)
230 UpdateLight();
231 start_light_.Signal();
232 break;
233 default:
234 return false;
235 }
236 return true;
237 }
238
239 bool Stop(ConsumerType consumer_type) override {
240 switch (consumer_type) {
241 case CONSUMER_TYPE_MOTION:
242 stop_motion_.Signal();
243 break;
244 case CONSUMER_TYPE_ORIENTATION:
245 stop_orientation_.Signal();
246 break;
247 case CONSUMER_TYPE_ORIENTATION_ABSOLUTE:
248 stop_orientation_absolute_.Signal();
249 break;
250 case CONSUMER_TYPE_LIGHT:
251 stop_light_.Signal();
252 break;
253 default:
254 return false;
255 }
256 return true;
257 }
258
259 void Fetch(unsigned consumer_bitmask) override {
260 FAIL() << "fetch should not be called, "
261 << "because this is a non-polling fetcher";
262 }
263
264 FetcherType GetType() const override { return FakeDataFetcher::GetType(); }
265 void set_update(bool update) { update_ = update; }
266
267 private:
268 bool update_;
269
270 DISALLOW_COPY_AND_ASSIGN(FakeNonPollingDataFetcher);
271 };
272
273 class FakePollingDataFetcher : public FakeDataFetcher {
274 public:
275 FakePollingDataFetcher() {}
276 ~FakePollingDataFetcher() override {}
277
278 bool Start(ConsumerType consumer_type, void* buffer) override {
279 EXPECT_TRUE(
280 GetPollingMessageLoop()->task_runner()->BelongsToCurrentThread());
281
282 Init(consumer_type, buffer);
283 switch (consumer_type) {
284 case CONSUMER_TYPE_MOTION:
285 start_motion_.Signal();
286 break;
287 case CONSUMER_TYPE_ORIENTATION:
288 start_orientation_.Signal();
289 break;
290 case CONSUMER_TYPE_ORIENTATION_ABSOLUTE:
291 start_orientation_absolute_.Signal();
292 break;
293 case CONSUMER_TYPE_LIGHT:
294 start_light_.Signal();
295 break;
296 default:
297 return false;
298 }
299 return true;
300 }
301
302 bool Stop(ConsumerType consumer_type) override {
303 EXPECT_TRUE(
304 GetPollingMessageLoop()->task_runner()->BelongsToCurrentThread());
305
306 switch (consumer_type) {
307 case CONSUMER_TYPE_MOTION:
308 stop_motion_.Signal();
309 break;
310 case CONSUMER_TYPE_ORIENTATION:
311 stop_orientation_.Signal();
312 break;
313 case CONSUMER_TYPE_ORIENTATION_ABSOLUTE:
314 stop_orientation_absolute_.Signal();
315 break;
316 case CONSUMER_TYPE_LIGHT:
317 stop_light_.Signal();
318 break;
319 default:
320 return false;
321 }
322 return true;
323 }
324
325 void Fetch(unsigned consumer_bitmask) override {
326 EXPECT_TRUE(
327 GetPollingMessageLoop()->task_runner()->BelongsToCurrentThread());
328 EXPECT_TRUE(consumer_bitmask & CONSUMER_TYPE_ORIENTATION ||
329 consumer_bitmask & CONSUMER_TYPE_ORIENTATION_ABSOLUTE ||
330 consumer_bitmask & CONSUMER_TYPE_MOTION ||
331 consumer_bitmask & CONSUMER_TYPE_LIGHT);
332
333 if (consumer_bitmask & CONSUMER_TYPE_ORIENTATION)
334 UpdateOrientation();
335 if (consumer_bitmask & CONSUMER_TYPE_ORIENTATION_ABSOLUTE)
336 UpdateOrientationAbsolute();
337 if (consumer_bitmask & CONSUMER_TYPE_MOTION)
338 UpdateMotion();
339 if (consumer_bitmask & CONSUMER_TYPE_LIGHT)
340 UpdateLight();
341 }
342
343 FetcherType GetType() const override { return FETCHER_TYPE_POLLING_CALLBACK; }
344
345 private:
346 DISALLOW_COPY_AND_ASSIGN(FakePollingDataFetcher);
347 };
348
349 class FakeZeroDelayPollingDataFetcher : public FakeDataFetcher {
350 public:
351 FakeZeroDelayPollingDataFetcher() {}
352 ~FakeZeroDelayPollingDataFetcher() override {}
353
354 bool Start(ConsumerType consumer_type, void* buffer) override {
355 EXPECT_TRUE(
356 GetPollingMessageLoop()->task_runner()->BelongsToCurrentThread());
357
358 Init(consumer_type, buffer);
359 switch (consumer_type) {
360 case CONSUMER_TYPE_MOTION:
361 start_motion_.Signal();
362 break;
363 case CONSUMER_TYPE_ORIENTATION:
364 start_orientation_.Signal();
365 break;
366 case CONSUMER_TYPE_ORIENTATION_ABSOLUTE:
367 start_orientation_absolute_.Signal();
368 break;
369 case CONSUMER_TYPE_LIGHT:
370 start_light_.Signal();
371 break;
372 default:
373 return false;
374 }
375 return true;
376 }
377
378 bool Stop(ConsumerType consumer_type) override {
379 EXPECT_TRUE(
380 GetPollingMessageLoop()->task_runner()->BelongsToCurrentThread());
381
382 switch (consumer_type) {
383 case CONSUMER_TYPE_MOTION:
384 stop_motion_.Signal();
385 break;
386 case CONSUMER_TYPE_ORIENTATION:
387 stop_orientation_.Signal();
388 break;
389 case CONSUMER_TYPE_ORIENTATION_ABSOLUTE:
390 stop_orientation_absolute_.Signal();
391 break;
392 case CONSUMER_TYPE_LIGHT:
393 stop_light_.Signal();
394 break;
395 default:
396 return false;
397 }
398 return true;
399 }
400
401 void Fetch(unsigned consumer_bitmask) override {
402 FAIL() << "fetch should not be called";
403 }
404
405 FetcherType GetType() const override { return FETCHER_TYPE_SEPARATE_THREAD; }
406
407 bool IsPollingTimerRunningForTesting() const {
408 return FakeDataFetcher::IsPollingTimerRunningForTesting();
409 }
410
411 private:
412 DISALLOW_COPY_AND_ASSIGN(FakeZeroDelayPollingDataFetcher);
413 };
414
415 TEST(DataFetcherSharedMemoryBaseTest, DoesStartMotion) {
416 FakeNonPollingDataFetcher fake_data_fetcher;
417 EXPECT_EQ(DataFetcherSharedMemoryBase::FETCHER_TYPE_DEFAULT,
418 fake_data_fetcher.GetType());
419
420 EXPECT_TRUE(fake_data_fetcher.StartFetchingDeviceData(CONSUMER_TYPE_MOTION));
421 fake_data_fetcher.WaitForStart(CONSUMER_TYPE_MOTION);
422
423 EXPECT_EQ(kDeviceSensorIntervalMicroseconds / 1000.,
424 fake_data_fetcher.GetMotionBuffer()->data.interval);
425
426 fake_data_fetcher.StopFetchingDeviceData(CONSUMER_TYPE_MOTION);
427 fake_data_fetcher.WaitForStop(CONSUMER_TYPE_MOTION);
428 }
429
430 TEST(DataFetcherSharedMemoryBaseTest, DoesStartOrientation) {
431 FakeNonPollingDataFetcher fake_data_fetcher;
432 EXPECT_EQ(DataFetcherSharedMemoryBase::FETCHER_TYPE_DEFAULT,
433 fake_data_fetcher.GetType());
434
435 EXPECT_TRUE(
436 fake_data_fetcher.StartFetchingDeviceData(CONSUMER_TYPE_ORIENTATION));
437 fake_data_fetcher.WaitForStart(CONSUMER_TYPE_ORIENTATION);
438
439 EXPECT_EQ(1, fake_data_fetcher.GetOrientationBuffer()->data.alpha);
440
441 fake_data_fetcher.StopFetchingDeviceData(CONSUMER_TYPE_ORIENTATION);
442 fake_data_fetcher.WaitForStop(CONSUMER_TYPE_ORIENTATION);
443 }
444
445 TEST(DataFetcherSharedMemoryBaseTest, DoesStartOrientationAbsolute) {
446 FakeNonPollingDataFetcher fake_data_fetcher;
447 EXPECT_EQ(DataFetcherSharedMemoryBase::FETCHER_TYPE_DEFAULT,
448 fake_data_fetcher.GetType());
449
450 EXPECT_TRUE(fake_data_fetcher.StartFetchingDeviceData(
451 CONSUMER_TYPE_ORIENTATION_ABSOLUTE));
452 fake_data_fetcher.WaitForStart(CONSUMER_TYPE_ORIENTATION_ABSOLUTE);
453
454 EXPECT_EQ(1, fake_data_fetcher.GetOrientationAbsoluteBuffer()->data.alpha);
455 EXPECT_TRUE(fake_data_fetcher.GetOrientationAbsoluteBuffer()->data.absolute);
456
457 fake_data_fetcher.StopFetchingDeviceData(CONSUMER_TYPE_ORIENTATION_ABSOLUTE);
458 fake_data_fetcher.WaitForStop(CONSUMER_TYPE_ORIENTATION_ABSOLUTE);
459 }
460
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) {
476 FakePollingDataFetcher fake_data_fetcher;
477 EXPECT_EQ(DataFetcherSharedMemoryBase::FETCHER_TYPE_POLLING_CALLBACK,
478 fake_data_fetcher.GetType());
479
480 EXPECT_TRUE(fake_data_fetcher.StartFetchingDeviceData(CONSUMER_TYPE_MOTION));
481 fake_data_fetcher.WaitForStart(CONSUMER_TYPE_MOTION);
482 fake_data_fetcher.WaitForUpdate(CONSUMER_TYPE_MOTION);
483
484 EXPECT_EQ(kDeviceSensorIntervalMicroseconds / 1000.,
485 fake_data_fetcher.GetMotionBuffer()->data.interval);
486
487 fake_data_fetcher.StopFetchingDeviceData(CONSUMER_TYPE_MOTION);
488 fake_data_fetcher.WaitForStop(CONSUMER_TYPE_MOTION);
489 }
490
491 TEST(DataFetcherSharedMemoryBaseTest, DoesPollOrientation) {
492 FakePollingDataFetcher fake_data_fetcher;
493 EXPECT_EQ(DataFetcherSharedMemoryBase::FETCHER_TYPE_POLLING_CALLBACK,
494 fake_data_fetcher.GetType());
495
496 EXPECT_TRUE(
497 fake_data_fetcher.StartFetchingDeviceData(CONSUMER_TYPE_ORIENTATION));
498 fake_data_fetcher.WaitForStart(CONSUMER_TYPE_ORIENTATION);
499 fake_data_fetcher.WaitForUpdate(CONSUMER_TYPE_ORIENTATION);
500
501 EXPECT_EQ(1, fake_data_fetcher.GetOrientationBuffer()->data.alpha);
502
503 fake_data_fetcher.StopFetchingDeviceData(CONSUMER_TYPE_ORIENTATION);
504 fake_data_fetcher.WaitForStop(CONSUMER_TYPE_ORIENTATION);
505 }
506
507 TEST(DataFetcherSharedMemoryBaseTest, DoesPollOrientationAbsolute) {
508 FakePollingDataFetcher fake_data_fetcher;
509 EXPECT_EQ(DataFetcherSharedMemoryBase::FETCHER_TYPE_POLLING_CALLBACK,
510 fake_data_fetcher.GetType());
511
512 EXPECT_TRUE(fake_data_fetcher.StartFetchingDeviceData(
513 CONSUMER_TYPE_ORIENTATION_ABSOLUTE));
514 fake_data_fetcher.WaitForStart(CONSUMER_TYPE_ORIENTATION_ABSOLUTE);
515 fake_data_fetcher.WaitForUpdate(CONSUMER_TYPE_ORIENTATION_ABSOLUTE);
516
517 EXPECT_EQ(1, fake_data_fetcher.GetOrientationAbsoluteBuffer()->data.alpha);
518 EXPECT_TRUE(fake_data_fetcher.GetOrientationAbsoluteBuffer()->data.absolute);
519
520 fake_data_fetcher.StopFetchingDeviceData(CONSUMER_TYPE_ORIENTATION_ABSOLUTE);
521 fake_data_fetcher.WaitForStop(CONSUMER_TYPE_ORIENTATION_ABSOLUTE);
522 }
523
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) {
540 FakePollingDataFetcher fake_data_fetcher;
541 EXPECT_EQ(DataFetcherSharedMemoryBase::FETCHER_TYPE_POLLING_CALLBACK,
542 fake_data_fetcher.GetType());
543
544 EXPECT_TRUE(
545 fake_data_fetcher.StartFetchingDeviceData(CONSUMER_TYPE_ORIENTATION));
546 mojo::ScopedSharedBufferHandle handle_orientation =
547 fake_data_fetcher.GetSharedMemoryHandle(CONSUMER_TYPE_ORIENTATION);
548 EXPECT_TRUE(handle_orientation.is_valid());
549
550 EXPECT_TRUE(fake_data_fetcher.StartFetchingDeviceData(CONSUMER_TYPE_MOTION));
551 mojo::ScopedSharedBufferHandle handle_motion =
552 fake_data_fetcher.GetSharedMemoryHandle(CONSUMER_TYPE_MOTION);
553 EXPECT_TRUE(handle_motion.is_valid());
554
555 fake_data_fetcher.WaitForStart(CONSUMER_TYPE_ORIENTATION);
556 fake_data_fetcher.WaitForStart(CONSUMER_TYPE_MOTION);
557
558 fake_data_fetcher.WaitForUpdate(CONSUMER_TYPE_ORIENTATION);
559 fake_data_fetcher.WaitForUpdate(CONSUMER_TYPE_MOTION);
560
561 EXPECT_EQ(1, fake_data_fetcher.GetOrientationBuffer()->data.alpha);
562 EXPECT_EQ(kDeviceSensorIntervalMicroseconds / 1000.,
563 fake_data_fetcher.GetMotionBuffer()->data.interval);
564
565 fake_data_fetcher.StopFetchingDeviceData(CONSUMER_TYPE_ORIENTATION);
566 fake_data_fetcher.StopFetchingDeviceData(CONSUMER_TYPE_MOTION);
567 fake_data_fetcher.WaitForStop(CONSUMER_TYPE_ORIENTATION);
568 fake_data_fetcher.WaitForStop(CONSUMER_TYPE_MOTION);
569 }
570
571 TEST(DataFetcherSharedMemoryBaseTest, DoesNotPollZeroDelay) {
572 FakeZeroDelayPollingDataFetcher fake_data_fetcher;
573 EXPECT_EQ(DataFetcherSharedMemoryBase::FETCHER_TYPE_SEPARATE_THREAD,
574 fake_data_fetcher.GetType());
575
576 EXPECT_TRUE(
577 fake_data_fetcher.StartFetchingDeviceData(CONSUMER_TYPE_ORIENTATION));
578 fake_data_fetcher.WaitForStart(CONSUMER_TYPE_ORIENTATION);
579
580 EXPECT_FALSE(fake_data_fetcher.IsPollingTimerRunningForTesting());
581 EXPECT_EQ(0, fake_data_fetcher.GetOrientationBuffer()->data.alpha);
582
583 fake_data_fetcher.StopFetchingDeviceData(CONSUMER_TYPE_ORIENTATION);
584 fake_data_fetcher.WaitForStop(CONSUMER_TYPE_ORIENTATION);
585 }
586
587 TEST(DataFetcherSharedMemoryBaseTest, DoesClearBufferOnStart) {
588 FakeNonPollingDataFetcher fake_data_fetcher;
589 EXPECT_TRUE(
590 fake_data_fetcher.StartFetchingDeviceData(CONSUMER_TYPE_ORIENTATION));
591 fake_data_fetcher.WaitForStart(CONSUMER_TYPE_ORIENTATION);
592 EXPECT_EQ(1, fake_data_fetcher.GetOrientationBuffer()->data.alpha);
593 fake_data_fetcher.StopFetchingDeviceData(CONSUMER_TYPE_ORIENTATION);
594 fake_data_fetcher.WaitForStop(CONSUMER_TYPE_ORIENTATION);
595
596 // Restart orientation without updating the memory buffer and check that
597 // it has been cleared to its initial state.
598 fake_data_fetcher.set_update(false);
599 EXPECT_TRUE(
600 fake_data_fetcher.StartFetchingDeviceData(CONSUMER_TYPE_ORIENTATION));
601 fake_data_fetcher.WaitForStart(CONSUMER_TYPE_ORIENTATION);
602 EXPECT_EQ(0, fake_data_fetcher.GetOrientationBuffer()->data.alpha);
603 fake_data_fetcher.StopFetchingDeviceData(CONSUMER_TYPE_ORIENTATION);
604 fake_data_fetcher.WaitForStop(CONSUMER_TYPE_ORIENTATION);
605 }
606
607 } // namespace
608
609 } // namespace device
OLDNEW
« no previous file with comments | « device/sensors/data_fetcher_shared_memory_base.cc ('k') | device/sensors/data_fetcher_shared_memory_chromeos.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698