void JSString::visitChildren(JSCell* cell, SlotVisitor& visitor) { JSString* thisObject = jsCast<JSString*>(cell); Base::visitChildren(thisObject, visitor); MARK_LOG_MESSAGE1("[%u]: ", thisObject->length()); #if ENABLE(OBJECT_MARK_LOGGING) if (!thisObject->isRope()) { WTF::StringImpl* ourImpl = thisObject->m_value.impl(); if (ourImpl->is8Bit()) MARK_LOG_MESSAGE1("[8 %p]", ourImpl->characters8()); else MARK_LOG_MESSAGE1("[16 %p]", ourImpl->characters16()); } else MARK_LOG_MESSAGE0("[rope]: "); #endif if (thisObject->isRope()) static_cast<JSRopeString*>(thisObject)->visitFibers(visitor); else { StringImpl* impl = thisObject->m_value.impl(); ASSERT(impl); visitor.reportExtraMemoryUsage(impl->costDuringGC()); } }
void WeakMapData::visitChildren(JSCell* cell, SlotVisitor& visitor) { Base::visitChildren(cell, visitor); WeakMapData* thisObj = jsCast<WeakMapData*>(cell); visitor.addUnconditionalFinalizer(&thisObj->m_deadKeyCleaner); visitor.addWeakReferenceHarvester(&thisObj->m_deadKeyCleaner); // Rough approximation of the external storage needed for the hashtable. // This isn't exact, but it is close enough, and proportional to the actual // external mermory usage. visitor.reportExtraMemoryUsage(thisObj->m_map.capacity() * (sizeof(JSObject*) + sizeof(WriteBarrier<Unknown>))); }
void JSString::visitChildren(JSCell* cell, SlotVisitor& visitor) { JSString* thisObject = jsCast<JSString*>(cell); Base::visitChildren(thisObject, visitor); if (thisObject->isRope()) static_cast<JSRopeString*>(thisObject)->visitFibers(visitor); else { StringImpl* impl = thisObject->m_value.impl(); ASSERT(impl); visitor.reportExtraMemoryUsage(thisObject, impl->costDuringGC()); } }