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

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

Issue 2668173003: [Sensors] Remove SensorReading interfaces (Closed)
Patch Set: updated global-interface-listing.html Created 3 years, 10 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
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/dom/Document.h" 7 #include "core/dom/Document.h"
8 #include "core/frame/LocalFrame.h" 8 #include "core/frame/LocalFrame.h"
9 #include "modules/sensor/SensorProviderProxy.h" 9 #include "modules/sensor/SensorProviderProxy.h"
10 #include "modules/sensor/SensorReading.h"
11 #include "modules/sensor/SensorReadingUpdater.h" 10 #include "modules/sensor/SensorReadingUpdater.h"
12 #include "platform/mojo/MojoHelper.h" 11 #include "platform/mojo/MojoHelper.h"
13 #include "public/platform/Platform.h" 12 #include "public/platform/Platform.h"
14 13
15 using namespace device::mojom::blink; 14 using namespace device::mojom::blink;
16 15
17 namespace blink { 16 namespace blink {
18 17
19 SensorProxy::SensorProxy(SensorType sensorType, 18 SensorProxy::SensorProxy(SensorType sensorType,
20 SensorProviderProxy* provider, 19 SensorProviderProxy* provider,
21 Page* page, 20 Page* page)
22 std::unique_ptr<SensorReadingFactory> readingFactory)
23 : PageVisibilityObserver(page), 21 : PageVisibilityObserver(page),
24 m_type(sensorType), 22 m_type(sensorType),
25 m_mode(ReportingMode::CONTINUOUS), 23 m_mode(ReportingMode::CONTINUOUS),
26 m_provider(provider), 24 m_provider(provider),
27 m_clientBinding(this), 25 m_clientBinding(this),
28 m_state(SensorProxy::Uninitialized), 26 m_state(SensorProxy::Uninitialized),
29 m_suspended(false), 27 m_suspended(false),
30 m_readingFactory(std::move(readingFactory)),
31 m_maximumFrequency(0.0) {} 28 m_maximumFrequency(0.0) {}
32 29
33 SensorProxy::~SensorProxy() {} 30 SensorProxy::~SensorProxy() {}
34 31
35 void SensorProxy::dispose() { 32 void SensorProxy::dispose() {
36 m_clientBinding.Close(); 33 m_clientBinding.Close();
37 } 34 }
38 35
39 DEFINE_TRACE(SensorProxy) { 36 DEFINE_TRACE(SensorProxy) {
40 visitor->trace(m_readingUpdater); 37 visitor->trace(m_readingUpdater);
41 visitor->trace(m_reading);
42 visitor->trace(m_observers); 38 visitor->trace(m_observers);
43 visitor->trace(m_provider); 39 visitor->trace(m_provider);
44 PageVisibilityObserver::trace(visitor); 40 PageVisibilityObserver::trace(visitor);
45 } 41 }
46 42
47 void SensorProxy::addObserver(Observer* observer) { 43 void SensorProxy::addObserver(Observer* observer) {
48 if (!m_observers.contains(observer)) 44 if (!m_observers.contains(observer))
49 m_observers.insert(observer); 45 m_observers.insert(observer);
50 } 46 }
51 47
(...skipping 65 matching lines...) Expand 10 before | Expand all | Expand 10 after
117 DCHECK(isInitialized()); 113 DCHECK(isInitialized());
118 return m_defaultConfig.get(); 114 return m_defaultConfig.get();
119 } 115 }
120 116
121 Document* SensorProxy::document() const { 117 Document* SensorProxy::document() const {
122 return m_provider->supplementable()->document(); 118 return m_provider->supplementable()->document();
123 } 119 }
124 120
125 void SensorProxy::updateSensorReading() { 121 void SensorProxy::updateSensorReading() {
126 DCHECK(isInitialized()); 122 DCHECK(isInitialized());
127 DCHECK(m_readingFactory);
128 int readAttempts = 0; 123 int readAttempts = 0;
129 const int kMaxReadAttemptsCount = 10; 124 const int kMaxReadAttemptsCount = 10;
130 device::SensorReading readingData; 125 device::SensorReading readingData;
131 while (!tryReadFromBuffer(readingData)) { 126 while (!tryReadFromBuffer(readingData)) {
132 if (++readAttempts == kMaxReadAttemptsCount) { 127 if (++readAttempts == kMaxReadAttemptsCount) {
133 handleSensorError(); 128 handleSensorError();
134 return; 129 return;
135 } 130 }
136 } 131 }
137 132
138 m_reading = m_readingFactory->createSensorReading(readingData); 133 m_reading = readingData;
139 } 134 }
140 135
141 void SensorProxy::notifySensorChanged(double timestamp) { 136 void SensorProxy::notifySensorChanged(double timestamp) {
142 // This notification leads to sync 'onchange' event sending, so 137 // This notification leads to sync 'onchange' event sending, so
143 // we must cache m_observers as it can be modified within event handlers. 138 // we must cache m_observers as it can be modified within event handlers.
144 auto copy = m_observers; 139 auto copy = m_observers;
145 for (Observer* observer : copy) 140 for (Observer* observer : copy)
146 observer->onSensorReadingChanged(timestamp); 141 observer->onSensorReadingChanged(timestamp);
147 } 142 }
148 143
(...skipping 21 matching lines...) Expand all
170 void SensorProxy::handleSensorError(ExceptionCode code, 165 void SensorProxy::handleSensorError(ExceptionCode code,
171 String sanitizedMessage, 166 String sanitizedMessage,
172 String unsanitizedMessage) { 167 String unsanitizedMessage) {
173 if (!Platform::current()) { 168 if (!Platform::current()) {
174 // TODO(rockot): Remove this hack once renderer shutdown sequence is fixed. 169 // TODO(rockot): Remove this hack once renderer shutdown sequence is fixed.
175 return; 170 return;
176 } 171 }
177 172
178 m_state = Uninitialized; 173 m_state = Uninitialized;
179 m_frequenciesUsed.clear(); 174 m_frequenciesUsed.clear();
175 m_reading = device::SensorReading();
180 176
181 // The m_sensor.reset() will release all callbacks and its bound parameters, 177 // The m_sensor.reset() will release all callbacks and its bound parameters,
182 // therefore, handleSensorError accepts messages by value. 178 // therefore, handleSensorError accepts messages by value.
183 m_sensor.reset(); 179 m_sensor.reset();
184 m_sharedBuffer.reset(); 180 m_sharedBuffer.reset();
185 m_sharedBufferHandle.reset(); 181 m_sharedBufferHandle.reset();
186 m_defaultConfig.reset(); 182 m_defaultConfig.reset();
187 m_clientBinding.Close(); 183 m_clientBinding.Close();
188 m_reading = nullptr;
189 184
190 for (Observer* observer : m_observers) 185 for (Observer* observer : m_observers)
191 observer->onSensorError(code, sanitizedMessage, unsanitizedMessage); 186 observer->onSensorError(code, sanitizedMessage, unsanitizedMessage);
192 } 187 }
193 188
194 void SensorProxy::onSensorCreated(SensorInitParamsPtr params, 189 void SensorProxy::onSensorCreated(SensorInitParamsPtr params,
195 SensorClientRequest clientRequest) { 190 SensorClientRequest clientRequest) {
196 DCHECK_EQ(Initializing, m_state); 191 DCHECK_EQ(Initializing, m_state);
197 if (!params) { 192 if (!params) {
198 handleSensorError(NotFoundError, "Sensor is not present on the platform."); 193 handleSensorError(NotFoundError, "Sensor is not present on the platform.");
(...skipping 75 matching lines...) Expand 10 before | Expand all | Expand 10 after
274 const device::OneWriterSeqLock& seqlock = buffer->seqlock.value(); 269 const device::OneWriterSeqLock& seqlock = buffer->seqlock.value();
275 auto version = seqlock.ReadBegin(); 270 auto version = seqlock.ReadBegin();
276 auto readingData = buffer->reading; 271 auto readingData = buffer->reading;
277 if (seqlock.ReadRetry(version)) 272 if (seqlock.ReadRetry(version))
278 return false; 273 return false;
279 result = readingData; 274 result = readingData;
280 return true; 275 return true;
281 } 276 }
282 277
283 } // namespace blink 278 } // namespace blink
OLDNEW
« no previous file with comments | « third_party/WebKit/Source/modules/sensor/SensorProxy.h ('k') | third_party/WebKit/Source/modules/sensor/SensorReading.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698