OLD | NEW |
1 // Copyright 2016 The Chromium Authors. All rights reserved. | 1 // Copyright 2016 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 "modules/sensor/SensorProxy.h" | 5 #include "modules/sensor/SensorProxy.h" |
6 | 6 |
7 #include "core/frame/LocalFrame.h" | 7 #include "core/frame/LocalFrame.h" |
8 #include "modules/sensor/SensorProviderProxy.h" | 8 #include "modules/sensor/SensorProviderProxy.h" |
9 #include "platform/mojo/MojoHelper.h" | 9 #include "platform/mojo/MojoHelper.h" |
10 #include "public/platform/Platform.h" | 10 #include "public/platform/Platform.h" |
11 | 11 |
12 using namespace device::mojom::blink; | 12 using namespace device::mojom::blink; |
13 | 13 |
14 namespace blink { | 14 namespace blink { |
15 | 15 |
16 SensorProxy::SensorProxy(SensorType sensorType, SensorProviderProxy* provider) | 16 SensorProxy::SensorProxy(SensorType sensorType, SensorProviderProxy* provider) |
17 : m_type(sensorType), | 17 : m_type(sensorType), |
18 m_mode(ReportingMode::CONTINUOUS), | 18 m_mode(ReportingMode::CONTINUOUS), |
19 m_provider(provider), | 19 m_provider(provider), |
20 m_clientBinding(this), | 20 m_clientBinding(this), |
21 m_state(SensorProxy::Uninitialized), | 21 m_state(SensorProxy::Uninitialized), |
22 m_reading(), | 22 m_reading(), |
23 m_suspended(false) {} | 23 m_suspended(false), |
| 24 m_maximumFrequency(0.0) {} |
24 | 25 |
25 SensorProxy::~SensorProxy() {} | 26 SensorProxy::~SensorProxy() {} |
26 | 27 |
27 void SensorProxy::dispose() { | 28 void SensorProxy::dispose() { |
28 m_clientBinding.Close(); | 29 m_clientBinding.Close(); |
29 } | 30 } |
30 | 31 |
31 DEFINE_TRACE(SensorProxy) { | 32 DEFINE_TRACE(SensorProxy) { |
32 visitor->trace(m_observers); | 33 visitor->trace(m_observers); |
33 visitor->trace(m_provider); | 34 visitor->trace(m_provider); |
(...skipping 57 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
91 m_sensor->Resume(); | 92 m_sensor->Resume(); |
92 m_suspended = false; | 93 m_suspended = false; |
93 } | 94 } |
94 | 95 |
95 const device::mojom::blink::SensorConfiguration* SensorProxy::defaultConfig() | 96 const device::mojom::blink::SensorConfiguration* SensorProxy::defaultConfig() |
96 const { | 97 const { |
97 DCHECK(isInitialized()); | 98 DCHECK(isInitialized()); |
98 return m_defaultConfig.get(); | 99 return m_defaultConfig.get(); |
99 } | 100 } |
100 | 101 |
| 102 double SensorProxy::maximumFrequency() const { |
| 103 return m_maximumFrequency; |
| 104 } |
| 105 |
101 void SensorProxy::updateInternalReading() { | 106 void SensorProxy::updateInternalReading() { |
102 DCHECK(isInitialized()); | 107 DCHECK(isInitialized()); |
103 int readAttempts = 0; | 108 int readAttempts = 0; |
104 const int kMaxReadAttemptsCount = 10; | 109 const int kMaxReadAttemptsCount = 10; |
105 while (!tryReadFromBuffer()) { | 110 while (!tryReadFromBuffer()) { |
106 if (++readAttempts == kMaxReadAttemptsCount) { | 111 if (++readAttempts == kMaxReadAttemptsCount) { |
107 handleSensorError(); | 112 handleSensorError(); |
108 return; | 113 return; |
109 } | 114 } |
110 } | 115 } |
(...skipping 50 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
161 m_sharedBufferHandle = std::move(params->memory); | 166 m_sharedBufferHandle = std::move(params->memory); |
162 DCHECK(!m_sharedBuffer); | 167 DCHECK(!m_sharedBuffer); |
163 m_sharedBuffer = | 168 m_sharedBuffer = |
164 m_sharedBufferHandle->MapAtOffset(kReadBufferSize, params->buffer_offset); | 169 m_sharedBufferHandle->MapAtOffset(kReadBufferSize, params->buffer_offset); |
165 | 170 |
166 if (!m_sharedBuffer) { | 171 if (!m_sharedBuffer) { |
167 handleSensorError(); | 172 handleSensorError(); |
168 return; | 173 return; |
169 } | 174 } |
170 | 175 |
| 176 m_maximumFrequency = params->maximum_frequency; |
| 177 DCHECK(m_maximumFrequency <= SensorConfiguration::kMaxAllowedFrequency); |
| 178 |
171 auto errorCallback = | 179 auto errorCallback = |
172 WTF::bind(&SensorProxy::handleSensorError, wrapWeakPersistent(this), | 180 WTF::bind(&SensorProxy::handleSensorError, wrapWeakPersistent(this), |
173 UnknownError, String("Internal error"), String()); | 181 UnknownError, String("Internal error"), String()); |
174 m_sensor.set_connection_error_handler( | 182 m_sensor.set_connection_error_handler( |
175 convertToBaseCallback(std::move(errorCallback))); | 183 convertToBaseCallback(std::move(errorCallback))); |
176 | 184 |
177 m_state = Initialized; | 185 m_state = Initialized; |
178 for (Observer* observer : m_observers) | 186 for (Observer* observer : m_observers) |
179 observer->onSensorInitialized(); | 187 observer->onSensorInitialized(); |
180 } | 188 } |
181 | 189 |
182 bool SensorProxy::tryReadFromBuffer() { | 190 bool SensorProxy::tryReadFromBuffer() { |
183 DCHECK(isInitialized()); | 191 DCHECK(isInitialized()); |
184 const ReadingBuffer* buffer = | 192 const ReadingBuffer* buffer = |
185 static_cast<const ReadingBuffer*>(m_sharedBuffer.get()); | 193 static_cast<const ReadingBuffer*>(m_sharedBuffer.get()); |
186 const device::OneWriterSeqLock& seqlock = buffer->seqlock.value(); | 194 const device::OneWriterSeqLock& seqlock = buffer->seqlock.value(); |
187 auto version = seqlock.ReadBegin(); | 195 auto version = seqlock.ReadBegin(); |
188 auto reading = buffer->reading; | 196 auto reading = buffer->reading; |
189 if (seqlock.ReadRetry(version)) | 197 if (seqlock.ReadRetry(version)) |
190 return false; | 198 return false; |
191 m_reading = reading; | 199 m_reading = reading; |
192 return true; | 200 return true; |
193 } | 201 } |
194 | 202 |
195 } // namespace blink | 203 } // namespace blink |
OLD | NEW |