This source file includes following definitions.
- m_didDisposeContextForMainFrame
- notifyContextDisposed
- notifyIdleSooner
- instanceTemplate
- pseudoIdleTimerFired
#include "config.h"
#include "bindings/v8/V8GCForContextDispose.h"
#include "wtf/StdLibExtras.h"
namespace WebCore {
V8GCForContextDispose::V8GCForContextDispose()
: m_pseudoIdleTimer(this, &V8GCForContextDispose::pseudoIdleTimerFired)
, m_didDisposeContextForMainFrame(false)
{
}
void V8GCForContextDispose::notifyContextDisposed(bool isMainFrame)
{
m_didDisposeContextForMainFrame = m_didDisposeContextForMainFrame || isMainFrame;
v8::V8::ContextDisposedNotification();
if (!m_pseudoIdleTimer.isActive())
m_pseudoIdleTimer.startOneShot(0.8, FROM_HERE);
}
void V8GCForContextDispose::notifyIdleSooner(double maximumFireInterval)
{
if (m_pseudoIdleTimer.isActive()) {
double nextFireInterval = m_pseudoIdleTimer.nextFireInterval();
if (nextFireInterval > maximumFireInterval) {
m_pseudoIdleTimer.stop();
m_pseudoIdleTimer.startOneShot(maximumFireInterval, FROM_HERE);
}
}
}
V8GCForContextDispose& V8GCForContextDispose::instanceTemplate()
{
DEFINE_STATIC_LOCAL(V8GCForContextDispose, staticInstance, ());
return staticInstance;
}
void V8GCForContextDispose::pseudoIdleTimerFired(Timer<V8GCForContextDispose>*)
{
const int longIdlePauseInMs = 1000;
const int shortIdlePauseInMs = 10;
int hint = m_didDisposeContextForMainFrame ? longIdlePauseInMs : shortIdlePauseInMs;
v8::V8::IdleNotification(hint);
m_didDisposeContextForMainFrame = false;
}
}