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

Side by Side Diff: third_party/WebKit/Source/modules/sensor/SensorProxy.cpp

Issue 2465363004: [Sensors] Consider maximum supported frequency (Closed)
Patch Set: Comments from Alex Created 4 years, 1 month 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 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
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
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
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698