| Index: content/browser/renderer_host/gamepad_browser_message_filter.cc
|
| diff --git a/content/browser/renderer_host/gamepad_browser_message_filter.cc b/content/browser/renderer_host/gamepad_browser_message_filter.cc
|
| index 6b5972e5a0af5c99d147919d022c3abe6456ce1d..77a0b3e3cea4b23ccf34c4eb28f223262e6ea75a 100644
|
| --- a/content/browser/renderer_host/gamepad_browser_message_filter.cc
|
| +++ b/content/browser/renderer_host/gamepad_browser_message_filter.cc
|
| @@ -1,9 +1,10 @@
|
| // Copyright (c) 2011 The Chromium Authors. All rights reserved.
|
| +// Copyright (c) 2014, NVIDIA CORPORATION. All rights reserved.
|
| // Use of this source code is governed by a BSD-style license that can be
|
| // found in the LICENSE file.
|
|
|
| +#include "base/time/time.h"
|
| #include "content/browser/renderer_host/gamepad_browser_message_filter.h"
|
| -
|
| #include "content/browser/gamepad/gamepad_service.h"
|
| #include "content/common/gamepad_messages.h"
|
|
|
| @@ -28,6 +29,12 @@ bool GamepadBrowserMessageFilter::OnMessageReceived(
|
| *message_was_ok)
|
| IPC_MESSAGE_HANDLER(GamepadHostMsg_StartPolling, OnGamepadStartPolling)
|
| IPC_MESSAGE_HANDLER(GamepadHostMsg_StopPolling, OnGamepadStopPolling)
|
| +#if defined(OS_ANDROID)
|
| + IPC_MESSAGE_HANDLER(GamepadHostMsg_ResumePolling, OnGamepadResumePolling)
|
| + IPC_MESSAGE_HANDLER(GamepadHostMsg_PausePolling, OnGamepadPausePolling)
|
| + IPC_MESSAGE_HANDLER(GamepadHostMsg_UpdateTimestamp,
|
| + OnGamepadUpdateTimestamp)
|
| +#endif
|
| IPC_MESSAGE_UNHANDLED(handled = false)
|
| IPC_END_MESSAGE_MAP_EX()
|
| return handled;
|
| @@ -57,4 +64,37 @@ void GamepadBrowserMessageFilter::OnGamepadStopPolling() {
|
| }
|
| }
|
|
|
| +#if defined(OS_ANDROID)
|
| +void GamepadBrowserMessageFilter::OnGamepadResumePolling() {
|
| + // The renderer will put the background polling thread to resume state.
|
| + if (is_started_ && GamepadService::GetInstance()->GetPollState()) {
|
| + GamepadService::GetInstance()->Resume();
|
| + } else {
|
| + NOTREACHED();
|
| + }
|
| +}
|
| +
|
| +void GamepadBrowserMessageFilter::OnGamepadPausePolling() {
|
| + // The renderer will put the background polling thread to pause state.
|
| + if (is_started_ && !GamepadService::GetInstance()->GetPollState()) {
|
| + GamepadService::GetInstance()->Pause();
|
| + } else {
|
| + NOTREACHED();
|
| + }
|
| +}
|
| +
|
| +void GamepadBrowserMessageFilter::OnGamepadUpdateTimestamp() {
|
| + // The renderer will set the timestamp for last gamepad data access. This way
|
| + // the polling thread can be put to pause state when webpage stops accessing
|
| + // data i.e browser minimize or tab change.
|
| + // TODO: Currently this approach is expensive. We need to get rid of this
|
| + // message and set the polling thread to pause state everytime gamepad data
|
| + // access stops. One possible way is tracking the focus change on the
|
| + // webpage.
|
| + GamepadService::GetInstance()->SetGamepadAccessTimestamp(
|
| + base::Time::NowFromSystemTime());
|
| + OnGamepadResumePolling();
|
| +}
|
| +#endif
|
| +
|
| } // namespace content
|
|
|