Index: content/browser/gamepad/gamepad_provider.cc |
diff --git a/content/browser/gamepad/gamepad_provider.cc b/content/browser/gamepad/gamepad_provider.cc |
index 55a5f30ed78b6802c7fd6231a13bd0d596c958c8..f77389456ca87daf89201799fc0899d27a48f0ba 100644 |
--- a/content/browser/gamepad/gamepad_provider.cc |
+++ b/content/browser/gamepad/gamepad_provider.cc |
@@ -12,14 +12,17 @@ |
#include "base/message_loop/message_loop_proxy.h" |
#include "base/threading/thread.h" |
#include "base/threading/thread_restrictions.h" |
+#include "base/time/time.h" |
#include "content/browser/gamepad/gamepad_data_fetcher.h" |
#include "content/browser/gamepad/gamepad_platform_data_fetcher.h" |
#include "content/browser/gamepad/gamepad_provider.h" |
+#include "content/browser/gamepad/gamepad_service.h" |
#include "content/common/gamepad_hardware_buffer.h" |
#include "content/common/gamepad_messages.h" |
#include "content/common/gamepad_user_gesture.h" |
namespace content { |
+const int64 GamepadProvider::max_timestamp_before_pause_ = 500; |
GamepadProvider::ClosureAndThread::ClosureAndThread( |
const base::Closure& c, |
@@ -63,6 +66,10 @@ base::SharedMemoryHandle GamepadProvider::GetSharedMemoryHandleForProcess( |
return renderer_handle; |
} |
+bool GamepadProvider::GetPollState() { |
+ return is_paused_; |
+} |
+ |
void GamepadProvider::Pause() { |
{ |
base::AutoLock lock(is_paused_lock_); |
@@ -167,6 +174,15 @@ void GamepadProvider::DoPoll() { |
devices_changed_ = false; |
} |
+ base::TimeDelta timestamp = |
+ (base::Time::NowFromSystemTime()) - ( |
+ GamepadService::GetInstance()->GetGamepadAccessTimestamp()); |
+ |
+ if (timestamp.InMilliseconds() > max_timestamp_before_pause_) { |
+ Pause(); |
+ return; |
+ } |
+ |
// Acquire the SeqLock. There is only ever one writer to this data. |
// See gamepad_hardware_buffer.h. |
hwbuf->sequence.WriteBegin(); |