WebCoreJSClientData.cpp [plain text]
#include "config.h"
#include "WebCoreJSClientData.h"
#include "DOMGCOutputConstraint.h"
#include "JSDOMBinding.h"
#include <JavaScriptCore/FastMallocAlignedMemoryAllocator.h>
#include <JavaScriptCore/HeapInlines.h>
#include <JavaScriptCore/JSDestructibleObjectHeapCellType.h>
#include <JavaScriptCore/JSSegmentedVariableObjectHeapCellType.h>
#include <JavaScriptCore/MarkingConstraint.h>
#include <JavaScriptCore/SubspaceInlines.h>
#include <JavaScriptCore/VM.h>
#include "runtime_method.h"
#include <wtf/MainThread.h>
namespace WebCore {
using namespace JSC;
JSVMClientData::JSVMClientData(VM& vm)
: m_builtinFunctions(vm)
, m_builtinNames(&vm)
, m_runtimeMethodSpace ISO_SUBSPACE_INIT(vm.heap, vm.destructibleObjectHeapCellType.get(), RuntimeMethod)
, m_outputConstraintSpace("WebCore Wrapper w/ Output Constraint", vm.heap, vm.destructibleObjectHeapCellType.get(), vm.fastMallocAllocator.get())
, m_globalObjectOutputConstraintSpace("WebCore Global Object w/ Output Constraint", vm.heap, vm.segmentedVariableObjectHeapCellType.get(), vm.fastMallocAllocator.get())
{
}
JSVMClientData::~JSVMClientData()
{
ASSERT(m_worldSet.contains(m_normalWorld.get()));
ASSERT(m_worldSet.size() == 1);
ASSERT(m_normalWorld->hasOneRef());
m_normalWorld = nullptr;
ASSERT(m_worldSet.isEmpty());
}
void JSVMClientData::getAllWorlds(Vector<Ref<DOMWrapperWorld>>& worlds)
{
ASSERT(worlds.isEmpty());
worlds.reserveInitialCapacity(m_worldSet.size());
for (auto it = m_worldSet.begin(), end = m_worldSet.end(); it != end; ++it)
worlds.uncheckedAppend(*(*it));
}
void JSVMClientData::initNormalWorld(VM* vm)
{
JSVMClientData* clientData = new JSVMClientData(*vm);
vm->clientData = clientData;
vm->heap.addMarkingConstraint(std::make_unique<DOMGCOutputConstraint>(*vm, *clientData));
clientData->m_normalWorld = DOMWrapperWorld::create(*vm, true);
vm->m_typedArrayController = adoptRef(new WebCoreTypedArrayController());
}
}