void HeapSnapshotBuilder::appendPropertyNameEdge(JSCell* from, JSCell* to, UniquedStringImpl* propertyName) { ASSERT(m_profiler.activeSnapshotBuilder() == this); ASSERT(to); std::lock_guard<Lock> lock(m_buildingEdgeMutex); m_edges.append(HeapSnapshotEdge(from, to, EdgeType::Property, propertyName)); }
void HeapSnapshotBuilder::appendIndexEdge(JSCell* from, JSCell* to, uint32_t index) { ASSERT(m_profiler.activeSnapshotBuilder() == this); ASSERT(to); std::lock_guard<Lock> lock(m_buildingEdgeMutex); m_edges.append(HeapSnapshotEdge(from, to, index)); }
void HeapSnapshotBuilder::appendEdge(JSCell* from, JSCell* to) { ASSERT(m_profiler.activeSnapshotBuilder() == this); ASSERT(to); // Avoid trivial edges. if (from == to) return; std::lock_guard<Lock> lock(m_buildingEdgeMutex); m_edges.append(HeapSnapshotEdge(from, to)); }
void HeapSnapshotBuilder::appendEdge(JSCell* from, JSCell* to, SlotVisitor::RootMarkReason rootMarkReason) { ASSERT(m_profiler.activeSnapshotBuilder() == this); ASSERT(to); // Avoid trivial edges. if (from == to) return; std::lock_guard<Lock> lock(m_buildingEdgeMutex); if (m_snapshotType == SnapshotType::GCDebuggingSnapshot && !from) { if (rootMarkReason == SlotVisitor::RootMarkReason::None && m_snapshotType == SnapshotType::GCDebuggingSnapshot) WTFLogAlways("Cell %p is a root but no root marking reason was supplied", to); m_rootData.ensure(to, [] () -> RootData { return { }; }).iterator->value.markReason = rootMarkReason; } m_edges.append(HeapSnapshotEdge(from, to)); }