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

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

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

Powered by Google App Engine
This is Rietveld 408576698