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

Side by Side Diff: content/renderer/device_motion_event_pump.cc

Issue 14678012: Implement the content/renderer and content/browser part of the Device Motion API. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Created 7 years, 7 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
(Empty)
1 // Copyright (c) 2013 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
4
5 #include "device_motion_event_pump.h"
6
7 #include "base/bind.h"
8 #include "base/memory/scoped_ptr.h"
9 #include "base/message_loop.h"
10 #include "base/shared_memory.h"
11 #include "device_motion_shared_memory_reader.h"
12 #include "third_party/WebKit/Source/Platform/chromium/public/WebDeviceMotionData .h"
13 #include "third_party/WebKit/Source/Platform/chromium/public/WebDeviceMotionHand ler.h"
14 #include "third_party/WebKit/Source/Platform/chromium/public/WebDeviceMotionList ener.h"
15
16 namespace content {
17
18 DeviceMotionEventPump::DeviceMotionEventPump()
19 : listener_(0),
20 fire_pending_(false),
21 pump_delay_(base::TimeDelta::FromMilliseconds(pump_delay_millis))
22 {
jamesr 2013/05/16 19:53:06 This is chromium - the { goes on the previous line
timvolodine 2013/05/20 18:18:48 Done.
23 }
24
25 DeviceMotionEventPump::~DeviceMotionEventPump()
26 {
27 }
28
29 void DeviceMotionEventPump::startListeningToDeviceMotion(
30 WebKit::WebDeviceMotionListener* listener)
31 {
32 if (listener_)
33 return;
34
35 if (!reader_.get())
36 reader_.reset(new DeviceMotionSharedMemoryReader);
37
38 reader_->startUpdating();
39 listener_ = listener;
40
41 if (!fire_pending_) {
42 // Only post a task if the pump is not still running.
43 MessageLoop::current()->PostTask(
44 FROM_HERE,
45 base::Bind(&DeviceMotionEventPump::fire, base::Unretained(this)));
jamesr 2013/05/16 19:53:06 unretained? what prevents this task from running a
timvolodine 2013/05/20 18:18:48 switched to RepeatedTimer, looks like this is exac
46 fire_pending_ = true;
47 }
48 }
49
50 void DeviceMotionEventPump::stopListeningToDeviceMotion()
51 {
52 LOG(INFO) << "stop listening\n";
jamesr 2013/05/16 19:53:06 This is way too useless to spam up the INFO log.
timvolodine 2013/05/20 18:18:48 Done.
53 reader_->stopUpdating();
54 listener_ = 0;
55 }
56
57 bool DeviceMotionEventPump::shouldFireEvent(WebKit::WebDeviceMotionData& data)
58 {
59 // Device motion should probably be always fired,
60 // however for device orientation a threshold can be provided.
61 return true;
jamesr 2013/05/16 19:53:06 why does this function take a data parameter if it
timvolodine 2013/05/20 18:18:48 Done.
62 }
63
64 void DeviceMotionEventPump::fire()
65 {
66 fire_pending_ = false;
67 last_fire_event_time_ = base::TimeTicks::Now();
68
69 if (!listener_)
70 return;
71
72 WebKit::WebDeviceMotionData data;
73 if (reader_->latestDeviceMotionData(data) && shouldFireEvent(data))
74 listener_->didChangeDeviceMotion(data);
75
76 const base::TimeDelta dispatch_time =
77 base::TimeTicks::Now() - last_fire_event_time_;
78 const base::TimeDelta schedule_delay =
79 (dispatch_time < pump_delay_) ? pump_delay_ - dispatch_time
80 : base::TimeDelta();
81
82 MessageLoop::current()->PostDelayedTask(
83 FROM_HERE,
84 base::Bind(&DeviceMotionEventPump::fire, base::Unretained(this)),
jamesr 2013/05/16 19:53:06 same thing here re the unretained
timvolodine 2013/05/20 18:18:48 Done.
85 schedule_delay);
86 fire_pending_ = true;
87 }
88
89
90 } // namespace content
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698