| Index: ppapi/proxy/plugin_main_nacl.cc
|
| diff --git a/ppapi/proxy/plugin_main_nacl.cc b/ppapi/proxy/plugin_main_nacl.cc
|
| index f050778227cad4eef35c4f1c26f59fe1a6ccbcbe..46c988a80f3114594b1759c1890add14e32eba22 100644
|
| --- a/ppapi/proxy/plugin_main_nacl.cc
|
| +++ b/ppapi/proxy/plugin_main_nacl.cc
|
| @@ -12,6 +12,7 @@
|
| // ViewMsgLog et al. functions.
|
|
|
| #include "base/command_line.h"
|
| +#include "base/debug/trace_event.h"
|
| #include "base/message_loop/message_loop.h"
|
| #include "base/synchronization/waitable_event.h"
|
| #include "base/threading/thread.h"
|
| @@ -28,6 +29,7 @@
|
| #include "ppapi/proxy/plugin_globals.h"
|
| #include "ppapi/proxy/plugin_proxy_delegate.h"
|
| #include "ppapi/shared_impl/ppb_audio_shared.h"
|
| +#include "ppapi/shared_impl/proxy_lock.h"
|
|
|
| #if defined(IPC_MESSAGE_LOG_ENABLED)
|
| #include "base/containers/hash_tables.h"
|
| @@ -53,6 +55,12 @@ using ppapi::proxy::SerializedHandle;
|
|
|
| namespace {
|
|
|
| +// Interval to check if plugin has been active and report to the browser
|
| +// process. The value is somewhat arbitrary. It should be large enough to
|
| +// minimize computation overhead and small enough to not add exessive latency
|
| +// to detecting idle processes.
|
| +const int kIdleCheckIntervalInSeconds = 5;
|
| +
|
| // This class manages communication between the plugin and the browser, and
|
| // manages the PluginDispatcher instances for communication between the plugin
|
| // and the renderer.
|
| @@ -257,6 +265,24 @@ void PpapiDispatcher::OnPluginDispatcherMessageReceived(
|
| dispatcher->second->OnMessageReceived(msg);
|
| }
|
|
|
| +void CheckActivity(bool last_was_active) {
|
| + ppapi::ProxyAutoLock lock;
|
| + if (!PluginGlobals::Get())
|
| + return;
|
| +
|
| + bool was_active = PluginGlobals::Get()->plugin_has_been_active();
|
| + PluginGlobals::Get()->set_plugin_has_been_active(false);
|
| +
|
| + if (last_was_active != was_active) {
|
| + PluginGlobals::Get()->GetBrowserSender()->Send(
|
| + new PpapiHostMsg_IdleStateChange(!was_active));
|
| + }
|
| +
|
| + base::MessageLoop::current()->PostDelayedTask(FROM_HERE,
|
| + base::Bind(&CheckActivity, was_active),
|
| + base::TimeDelta::FromSeconds(kIdleCheckIntervalInSeconds));
|
| +}
|
| +
|
| } // namespace
|
|
|
| void PpapiPluginRegisterThreadCreator(
|
| @@ -289,6 +315,9 @@ int PpapiPluginMain() {
|
| PpapiDispatcher ppapi_dispatcher(io_thread.message_loop_proxy());
|
| plugin_globals.set_plugin_proxy_delegate(&ppapi_dispatcher);
|
|
|
| + base::MessageLoop::current()->PostDelayedTask(FROM_HERE,
|
| + base::Bind(&CheckActivity, false),
|
| + base::TimeDelta::FromSeconds(kIdleCheckIntervalInSeconds));
|
| loop.Run();
|
|
|
| return 0;
|
|
|