MarkingConstraint.cpp [plain text]
#include "config.h"
#include "MarkingConstraint.h"
#include "JSCInlines.h"
#include "VisitCounter.h"
namespace JSC {
static constexpr bool verboseMarkingConstraint = false;
MarkingConstraint::MarkingConstraint(CString abbreviatedName, CString name, ConstraintVolatility volatility, ConstraintConcurrency concurrency, ConstraintParallelism parallelism)
: m_abbreviatedName(abbreviatedName)
, m_name(WTFMove(name))
, m_volatility(volatility)
, m_concurrency(concurrency)
, m_parallelism(parallelism)
{
}
MarkingConstraint::~MarkingConstraint()
{
}
void MarkingConstraint::resetStats()
{
m_lastVisitCount = 0;
}
void MarkingConstraint::execute(SlotVisitor& visitor)
{
VisitCounter visitCounter(visitor);
executeImpl(visitor);
m_lastVisitCount += visitCounter.visitCount();
if (verboseMarkingConstraint && visitCounter.visitCount())
dataLog("(", abbreviatedName(), " visited ", visitCounter.visitCount(), " in execute)");
}
double MarkingConstraint::quickWorkEstimate(SlotVisitor&)
{
return 0;
}
double MarkingConstraint::workEstimate(SlotVisitor& visitor)
{
return lastVisitCount() + quickWorkEstimate(visitor);
}
void MarkingConstraint::prepareToExecute(const AbstractLocker& constraintSolvingLocker, SlotVisitor& visitor)
{
if (Options::logGC())
dataLog(abbreviatedName());
VisitCounter visitCounter(visitor);
prepareToExecuteImpl(constraintSolvingLocker, visitor);
m_lastVisitCount = visitCounter.visitCount();
if (verboseMarkingConstraint && visitCounter.visitCount())
dataLog("(", abbreviatedName(), " visited ", visitCounter.visitCount(), " in prepareToExecute)");
}
void MarkingConstraint::doParallelWork(SlotVisitor& visitor, SharedTask<void(SlotVisitor&)>& task)
{
VisitCounter visitCounter(visitor);
task.run(visitor);
if (verboseMarkingConstraint && visitCounter.visitCount())
dataLog("(", abbreviatedName(), " visited ", visitCounter.visitCount(), " in doParallelWork)");
{
auto locker = holdLock(m_lock);
m_lastVisitCount += visitCounter.visitCount();
}
}
void MarkingConstraint::prepareToExecuteImpl(const AbstractLocker&, SlotVisitor&)
{
}
}