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

Unified Diff: content/renderer/device_sensors/device_sensor_event_pump.h

Issue 446603002: Refactor code listening to platform events in content/renderer/. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@webkitplatform_impl_start_stop
Patch Set: rebase Created 6 years, 4 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 side-by-side diff with in-line comments
Download patch
Index: content/renderer/device_sensors/device_sensor_event_pump.h
diff --git a/content/renderer/device_sensors/device_sensor_event_pump.h b/content/renderer/device_sensors/device_sensor_event_pump.h
index 0c66e54035d2fa598ec9f7767b92ba7024858a0b..f36992871a3313eb8886676585a71af0c15ea77a 100644
--- a/content/renderer/device_sensors/device_sensor_event_pump.h
+++ b/content/renderer/device_sensors/device_sensor_event_pump.h
@@ -7,28 +7,54 @@
#include "base/memory/shared_memory.h"
#include "base/timer/timer.h"
-#include "content/public/renderer/render_process_observer.h"
+#include "content/public/renderer/platform_event_observer.h"
namespace content {
-class RenderThread;
-class CONTENT_EXPORT DeviceSensorEventPump : public RenderProcessObserver {
+template <typename ListenerType>
+class CONTENT_EXPORT DeviceSensorEventPump
+ : NON_EXPORTED_BASE(public PlatformEventObserver<ListenerType>) {
public:
// Default delay between subsequent firing of events.
- static const int kDefaultPumpDelayMillis;
+ static const int kDefaultPumpDelayMillis = 50;
- int GetDelayMillis() const;
+ // PlatformEventObserver
+ virtual void Start(blink::WebPlatformEventListener* listener) OVERRIDE {
+ DVLOG(2) << "requested start";
- void Attach(RenderThread* thread);
- virtual bool OnControlMessageReceived(const IPC::Message& message) = 0;
+ if (state_ != STOPPED)
+ return;
+
+ DCHECK(!timer_.IsRunning());
+
+ PlatformEventObserver<ListenerType>::Start(listener);
+ state_ = PENDING_START;
+ }
+
+ virtual void Stop() OVERRIDE {
+ DVLOG(2) << "stop";
+
+ if (state_ == STOPPED)
+ return;
+
+ DCHECK((state_ == PENDING_START && !timer_.IsRunning()) ||
+ (state_ == RUNNING && timer_.IsRunning()));
+
+ if (timer_.IsRunning())
+ timer_.Stop();
+ PlatformEventObserver<ListenerType>::Stop();
+ state_ = STOPPED;
+ }
protected:
- // Constructor for a pump with default delay.
- DeviceSensorEventPump();
+ explicit DeviceSensorEventPump(RenderThread* thread)
+ : PlatformEventObserver<ListenerType>(thread),
+ pump_delay_millis_(kDefaultPumpDelayMillis),
+ state_(STOPPED) {
+ }
- // Constructor for a pump with a given delay.
- explicit DeviceSensorEventPump(int pump_delay_millis);
- virtual ~DeviceSensorEventPump();
+ virtual ~DeviceSensorEventPump() {
+ }
// The pump is a tri-state automaton with allowed transitions as follows:
// STOPPED -> PENDING_START
@@ -41,18 +67,30 @@ class CONTENT_EXPORT DeviceSensorEventPump : public RenderProcessObserver {
PENDING_START
};
- bool RequestStart();
- void OnDidStart(base::SharedMemoryHandle handle);
- bool Stop();
+ void OnDidStart(base::SharedMemoryHandle handle) {
+ DVLOG(2) << "did start sensor event pump";
+
+ if (state_ != PENDING_START)
+ return;
+
+ DCHECK(!timer_.IsRunning());
+
+ if (InitializeReader(handle)) {
+ timer_.Start(FROM_HERE,
+ base::TimeDelta::FromMilliseconds(pump_delay_millis_),
+ this, &DeviceSensorEventPump::FireEvent);
+ state_ = RUNNING;
+ }
+ }
virtual void FireEvent() = 0;
virtual bool InitializeReader(base::SharedMemoryHandle handle) = 0;
- virtual bool SendStartMessage() = 0;
- virtual bool SendStopMessage() = 0;
int pump_delay_millis_;
PumpState state_;
base::RepeatingTimer<DeviceSensorEventPump> timer_;
+
+ DISALLOW_COPY_AND_ASSIGN(DeviceSensorEventPump);
};
} // namespace content

Powered by Google App Engine
This is Rietveld 408576698