Commit 023ac8ba authored by jar@chromium.org's avatar jar@chromium.org

Prevent multile DoPoll() calls from being simultaneously pending

r=scottmg
BUG=139084
Review URL: https://chromiumcodereview.appspot.com/10833030

git-svn-id: svn://svn.chromium.org/chrome/trunk/src@148631 0039d316-1c4b-4281-b951-d872f2087c98
parent a5c95824
......@@ -22,6 +22,7 @@ namespace content {
GamepadProvider::GamepadProvider()
: is_paused_(true),
have_scheduled_do_poll_(false),
devices_changed_(true) {
size_t data_size = sizeof(GamepadHardwareBuffer);
base::SystemMonitor* monitor = base::SystemMonitor::Get();
......@@ -118,6 +119,9 @@ void GamepadProvider::SendPauseHint(bool paused) {
void GamepadProvider::DoPoll() {
DCHECK(MessageLoop::current() == polling_thread_->message_loop());
DCHECK(have_scheduled_do_poll_);
have_scheduled_do_poll_ = false;
bool changed;
GamepadHardwareBuffer* hwbuf = SharedMemoryAsHardwareBuffer();
......@@ -144,6 +148,8 @@ void GamepadProvider::DoPoll() {
void GamepadProvider::ScheduleDoPoll() {
DCHECK(MessageLoop::current() == polling_thread_->message_loop());
if (have_scheduled_do_poll_)
return;
{
base::AutoLock lock(is_paused_lock_);
......@@ -155,6 +161,7 @@ void GamepadProvider::ScheduleDoPoll() {
FROM_HERE,
base::Bind(&GamepadProvider::DoPoll, Unretained(this)),
base::TimeDelta::FromMilliseconds(kDesiredSamplingIntervalMs));
have_scheduled_do_poll_ = true;
}
GamepadHardwareBuffer* GamepadProvider::SharedMemoryAsHardwareBuffer() {
......
......@@ -65,6 +65,11 @@ class CONTENT_EXPORT GamepadProvider :
base::Lock is_paused_lock_;
bool is_paused_;
// Keep track of when a polling task is schedlued, so as to prevent us from
// accidentally scheduling more than one at any time, when rapidly toggling
// |is_paused_|.
bool have_scheduled_do_poll_;
// Updated based on notification from SystemMonitor when the system devices
// have been updated, and this notification is passed on to the data fetcher
// to enable it to avoid redundant (and possibly expensive) is-connected
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment