#include "config.h"
#include "PageThrottler.h"
#include "Chrome.h"
#include "ChromeClient.h"
#include "MainFrame.h"
#include "Page.h"
#include "PageActivityAssertionToken.h"
#include <wtf/StdLibExtras.h>
namespace WebCore {
PageThrottler::PageThrottler(Page& page, ViewState::Flags viewState)
: m_page(page)
, m_viewState(viewState)
, m_weakPtrFactory(this)
, m_hysteresis(*this)
, m_activity("Page is active.")
, m_activityCount(0)
{
if (!(m_viewState & ViewState::IsVisuallyIdle))
m_hysteresis.start();
}
std::unique_ptr<PageActivityAssertionToken> PageThrottler::mediaActivityToken()
{
return std::make_unique<PageActivityAssertionToken>(*this);
}
std::unique_ptr<PageActivityAssertionToken> PageThrottler::pageLoadActivityToken()
{
return std::make_unique<PageActivityAssertionToken>(*this);
}
void PageThrottler::incrementActivityCount()
{
++m_activityCount;
updateHysteresis();
}
void PageThrottler::decrementActivityCount()
{
--m_activityCount;
updateHysteresis();
}
void PageThrottler::updateHysteresis()
{
if (m_activityCount || !(m_viewState & ViewState::IsVisuallyIdle))
m_hysteresis.start();
else
m_hysteresis.stop();
}
void PageThrottler::setViewState(ViewState::Flags viewState)
{
ViewState::Flags changed = m_viewState ^ viewState;
m_viewState = viewState;
if (changed & ViewState::IsVisuallyIdle)
updateHysteresis();
}
void PageThrottler::started()
{
m_activity.beginActivity();
}
void PageThrottler::stopped()
{
m_activity.endActivity();
}
}