diff options
author | Lorry Tar Creator <lorry-tar-importer@lorry> | 2017-06-27 06:07:23 +0000 |
---|---|---|
committer | Lorry Tar Creator <lorry-tar-importer@lorry> | 2017-06-27 06:07:23 +0000 |
commit | 1bf1084f2b10c3b47fd1a588d85d21ed0eb41d0c (patch) | |
tree | 46dcd36c86e7fbc6e5df36deb463b33e9967a6f7 /Source/WebKit2/UIProcess/ResponsivenessTimer.cpp | |
parent | 32761a6cee1d0dee366b885b7b9c777e67885688 (diff) | |
download | WebKitGtk-tarball-master.tar.gz |
webkitgtk-2.16.5HEADwebkitgtk-2.16.5master
Diffstat (limited to 'Source/WebKit2/UIProcess/ResponsivenessTimer.cpp')
-rw-r--r-- | Source/WebKit2/UIProcess/ResponsivenessTimer.cpp | 33 |
1 files changed, 24 insertions, 9 deletions
diff --git a/Source/WebKit2/UIProcess/ResponsivenessTimer.cpp b/Source/WebKit2/UIProcess/ResponsivenessTimer.cpp index 9739fa3a1..feb469f08 100644 --- a/Source/WebKit2/UIProcess/ResponsivenessTimer.cpp +++ b/Source/WebKit2/UIProcess/ResponsivenessTimer.cpp @@ -30,7 +30,7 @@ namespace WebKit { static const double responsivenessTimeout = 3; -ResponsivenessTimer::ResponsivenessTimer(ResponsivenessTimer::Client* client) +ResponsivenessTimer::ResponsivenessTimer(ResponsivenessTimer::Client& client) : m_client(client) , m_isResponsive(true) , m_timer(RunLoop::main(), this, &ResponsivenessTimer::timerFired) @@ -49,13 +49,19 @@ void ResponsivenessTimer::invalidate() void ResponsivenessTimer::timerFired() { - if (m_isResponsive) { - m_isResponsive = false; - m_client->didBecomeUnresponsive(this); - } else { - // The timer fired while unresponsive. - m_client->interactionOccurredWhileUnresponsive(this); + if (!m_isResponsive) + return; + + if (!m_client.mayBecomeUnresponsive()) { + m_timer.startOneShot(responsivenessTimeout); + return; } + + m_client.willChangeIsResponsive(); + m_isResponsive = false; + m_client.didChangeIsResponsive(); + + m_client.didBecomeUnresponsive(); } void ResponsivenessTimer::start() @@ -69,12 +75,21 @@ void ResponsivenessTimer::start() void ResponsivenessTimer::stop() { if (!m_isResponsive) { - // We got a life sign from the web process! - m_client->didBecomeResponsive(this); + // We got a life sign from the web process. + m_client.willChangeIsResponsive(); m_isResponsive = true; + m_client.didChangeIsResponsive(); + + m_client.didBecomeResponsive(); } m_timer.stop(); } +void ResponsivenessTimer::processTerminated() +{ + // Since there is no web process, we must not be waiting for it anymore. + stop(); +} + } // namespace WebKit |