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

Unified Diff: third_party/WebKit/Source/modules/sensor/SensorProxy.h

Issue 2503853002: [Sensors] Improvements in fetching reading for sensors with continuous reporting mode (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 side-by-side diff with in-line comments
Download patch
Index: third_party/WebKit/Source/modules/sensor/SensorProxy.h
diff --git a/third_party/WebKit/Source/modules/sensor/SensorProxy.h b/third_party/WebKit/Source/modules/sensor/SensorProxy.h
index 4c32534e9ae1a38158f008f63bd99cfdfe4bff11..3243636775cef146e6edd103933ced25ff4c15ad 100644
--- a/third_party/WebKit/Source/modules/sensor/SensorProxy.h
+++ b/third_party/WebKit/Source/modules/sensor/SensorProxy.h
@@ -6,12 +6,15 @@
#define SensorProxy_h
#include "core/dom/ExceptionCode.h"
+#include "core/page/PageVisibilityObserver.h"
#include "device/generic_sensor/public/cpp/sensor_reading.h"
#include "device/generic_sensor/public/interfaces/sensor.mojom-blink.h"
#include "device/generic_sensor/public/interfaces/sensor_provider.mojom-blink.h"
#include "mojo/public/cpp/bindings/binding.h"
#include "platform/Supplementable.h"
+#include "platform/Timer.h"
#include "platform/heap/Handle.h"
+#include "wtf/Vector.h"
namespace blink {
@@ -22,7 +25,9 @@ class SensorReadingFactory;
// This class wraps 'Sensor' mojo interface and used by multiple
// JS sensor instances of the same type (within a single frame).
class SensorProxy final : public GarbageCollectedFinalized<SensorProxy>,
- public device::mojom::blink::SensorClient {
+ public device::mojom::blink::SensorClient,
+ public PageVisibilityObserver {
+ USING_GARBAGE_COLLECTED_MIXIN(SensorProxy);
USING_PRE_FINALIZER(SensorProxy, dispose);
WTF_MAKE_NONCOPYABLE(SensorProxy);
@@ -32,12 +37,14 @@ class SensorProxy final : public GarbageCollectedFinalized<SensorProxy>,
// Has valid 'Sensor' binding, {add, remove}Configuration()
// methods can be called.
virtual void onSensorInitialized() {}
- // Platfrom sensort reading has changed (for 'ONCHANGE' reporting mode).
+ // Platfrom sensort reading has changed.
virtual void onSensorReadingChanged() {}
// An error has occurred.
virtual void onSensorError(ExceptionCode,
const String& sanitizedMessage,
const String& unsanitizedMessage) {}
+ // Sensor reading change notification is suspended.
+ virtual void onSuspended() {}
};
~SensorProxy();
@@ -54,8 +61,8 @@ class SensorProxy final : public GarbageCollectedFinalized<SensorProxy>,
void addConfiguration(device::mojom::blink::SensorConfigurationPtr,
std::unique_ptr<Function<void(bool)>>);
- void removeConfiguration(device::mojom::blink::SensorConfigurationPtr,
- std::unique_ptr<Function<void(bool)>>);
+
+ void removeConfiguration(device::mojom::blink::SensorConfigurationPtr);
void suspend();
void resume();
@@ -72,31 +79,45 @@ class SensorProxy final : public GarbageCollectedFinalized<SensorProxy>,
double maximumFrequency() const { return m_maximumFrequency; }
- // Updates sensor reading from shared buffer.
- void updateSensorReading();
-
DECLARE_VIRTUAL_TRACE();
private:
friend class SensorProviderProxy;
SensorProxy(device::mojom::blink::SensorType,
SensorProviderProxy*,
+ Page*,
std::unique_ptr<SensorReadingFactory>);
+ // Returns true if this instance is using polling timer to
+ // periodically fetch reading data from shared buffer.
+ bool usesPollingTimer() const;
+
+ // Updates sensor reading from shared buffer.
+ void updateSensorReading();
// device::mojom::blink::SensorClient overrides.
void RaiseError() override;
void SensorReadingChanged() override;
+ // PageVisibilityObserver overrides.
+ void pageVisibilityChanged() override;
+
// Generic handler for a fatal error.
// String parameters are intentionally copied.
void handleSensorError(ExceptionCode = UnknownError,
String sanitizedMessage = String(),
String unsanitizedMessage = String());
-
+ // mojo call callbacks.
void onSensorCreated(device::mojom::blink::SensorInitParamsPtr,
device::mojom::blink::SensorClientRequest);
+ void onAddConfigurationCompleted(
+ double frequency,
+ std::unique_ptr<Function<void(bool)>> callback,
+ bool result);
+ void onRemoveConfigurationCompleted(double frequency, bool result);
bool tryReadFromBuffer(device::SensorReading& result);
+ void updatePollingStatus();
+ void onTimerFired(TimerBase*);
device::mojom::blink::SensorType m_type;
device::mojom::blink::ReportingMode m_mode;
@@ -117,6 +138,10 @@ class SensorProxy final : public GarbageCollectedFinalized<SensorProxy>,
std::unique_ptr<SensorReadingFactory> m_readingFactory;
double m_maximumFrequency;
+ // Used for continious reporting mode.
+ Timer<SensorProxy> m_timer;
+ WTF::Vector<double> m_frequenciesUsed;
+
using ReadingBuffer = device::SensorReadingSharedBuffer;
static_assert(
sizeof(ReadingBuffer) ==

Powered by Google App Engine
This is Rietveld 408576698