Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(168)

Side by Side Diff: Source/core/dom/Document.cpp

Issue 280123002: Oilpan: move LiveNodeList collections to the heap. (Closed) Base URL: https://chromium.googlesource.com/chromium/blink.git@master
Patch Set: Pre-emptively GC a long runnning test Created 6 years, 7 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
1 /* 1 /*
2 * Copyright (C) 1999 Lars Knoll (knoll@kde.org) 2 * Copyright (C) 1999 Lars Knoll (knoll@kde.org)
3 * (C) 1999 Antti Koivisto (koivisto@kde.org) 3 * (C) 1999 Antti Koivisto (koivisto@kde.org)
4 * (C) 2001 Dirk Mueller (mueller@kde.org) 4 * (C) 2001 Dirk Mueller (mueller@kde.org)
5 * (C) 2006 Alexey Proskuryakov (ap@webkit.org) 5 * (C) 2006 Alexey Proskuryakov (ap@webkit.org)
6 * Copyright (C) 2004, 2005, 2006, 2007, 2008, 2009, 2011, 2012 Apple Inc. All r ights reserved. 6 * Copyright (C) 2004, 2005, 2006, 2007, 2008, 2009, 2011, 2012 Apple Inc. All r ights reserved.
7 * Copyright (C) 2008, 2009 Torch Mobile Inc. All rights reserved. (http://www.t orchmobile.com/) 7 * Copyright (C) 2008, 2009 Torch Mobile Inc. All rights reserved. (http://www.t orchmobile.com/)
8 * Copyright (C) 2008, 2009, 2011, 2012 Google Inc. All rights reserved. 8 * Copyright (C) 2008, 2009, 2011, 2012 Google Inc. All rights reserved.
9 * Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies) 9 * Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies)
10 * Copyright (C) Research In Motion Limited 2010-2011. All rights reserved. 10 * Copyright (C) Research In Motion Limited 2010-2011. All rights reserved.
(...skipping 491 matching lines...) Expand 10 before | Expand all | Expand 10 after
502 // also depend on the url NOT getting immediately set in opened windows. 502 // also depend on the url NOT getting immediately set in opened windows.
503 // See fast/dom/early-frame-url.html 503 // See fast/dom/early-frame-url.html
504 // and fast/dom/location-new-window-no-crash.html, respectively. 504 // and fast/dom/location-new-window-no-crash.html, respectively.
505 // FIXME: Can/should we unify this behavior? 505 // FIXME: Can/should we unify this behavior?
506 if (initializer.shouldSetURL()) 506 if (initializer.shouldSetURL())
507 setURL(initializer.url()); 507 setURL(initializer.url());
508 508
509 initSecurityContext(initializer); 509 initSecurityContext(initializer);
510 initDNSPrefetch(); 510 initDNSPrefetch();
511 511
512 #if !ENABLE(OILPAN)
512 for (unsigned i = 0; i < WTF_ARRAY_LENGTH(m_nodeListCounts); i++) 513 for (unsigned i = 0; i < WTF_ARRAY_LENGTH(m_nodeListCounts); i++)
513 m_nodeListCounts[i] = 0; 514 m_nodeListCounts[i] = 0;
515 #endif
514 516
515 InspectorCounters::incrementCounter(InspectorCounters::DocumentCounter); 517 InspectorCounters::incrementCounter(InspectorCounters::DocumentCounter);
516 518
517 m_lifecycle.advanceTo(DocumentLifecycle::Inactive); 519 m_lifecycle.advanceTo(DocumentLifecycle::Inactive);
518 520
519 // Since CSSFontSelector requires Document::m_fetcher and StyleEngine owns 521 // Since CSSFontSelector requires Document::m_fetcher and StyleEngine owns
520 // CSSFontSelector, need to initialize m_styleEngine after initializing 522 // CSSFontSelector, need to initialize m_styleEngine after initializing
521 // m_fetcher. 523 // m_fetcher.
522 m_styleEngine = StyleEngine::create(*this); 524 m_styleEngine = StyleEngine::create(*this);
523 } 525 }
(...skipping 58 matching lines...) Expand 10 before | Expand all | Expand 10 after
582 if (m_elemSheet) 584 if (m_elemSheet)
583 m_elemSheet->clearOwnerNode(); 585 m_elemSheet->clearOwnerNode();
584 586
585 // It's possible for multiple Documents to end up referencing the same Resou rceFetcher (e.g., SVGImages 587 // It's possible for multiple Documents to end up referencing the same Resou rceFetcher (e.g., SVGImages
586 // load the initial empty document and the SVGDocument with the same Documen tLoader). 588 // load the initial empty document and the SVGDocument with the same Documen tLoader).
587 if (m_fetcher->document() == this) 589 if (m_fetcher->document() == this)
588 m_fetcher->setDocument(nullptr); 590 m_fetcher->setDocument(nullptr);
589 m_fetcher.clear(); 591 m_fetcher.clear();
590 #endif 592 #endif
591 593
594 #if !ENABLE(OILPAN)
592 // We must call clearRareData() here since a Document class inherits TreeSco pe 595 // We must call clearRareData() here since a Document class inherits TreeSco pe
593 // as well as Node. See a comment on TreeScope.h for the reason. 596 // as well as Node. See a comment on TreeScope.h for the reason.
594 #if !ENABLE(OILPAN)
595 if (hasRareData()) 597 if (hasRareData())
596 clearRareData(); 598 clearRareData();
597 #endif
598 599
599 ASSERT(!m_listsInvalidatedAtDocument.size()); 600 ASSERT(m_listsInvalidatedAtDocument.isEmpty());
600 601
601 for (unsigned i = 0; i < WTF_ARRAY_LENGTH(m_nodeListCounts); i++) 602 for (unsigned i = 0; i < WTF_ARRAY_LENGTH(m_nodeListCounts); i++)
602 ASSERT(!m_nodeListCounts[i]); 603 ASSERT(!m_nodeListCounts[i]);
604 #endif
603 605
604 setClient(0); 606 setClient(0);
605 607
606 InspectorCounters::decrementCounter(InspectorCounters::DocumentCounter); 608 InspectorCounters::decrementCounter(InspectorCounters::DocumentCounter);
607 } 609 }
608 610
609 void Document::dispose() 611 void Document::dispose()
610 { 612 {
611 #if !ENABLE(OILPAN) 613 #if !ENABLE(OILPAN)
612 ASSERT_WITH_SECURITY_IMPLICATION(!m_deletionHasBegun); 614 ASSERT_WITH_SECURITY_IMPLICATION(!m_deletionHasBegun);
(...skipping 3079 matching lines...) Expand 10 before | Expand all | Expand 10 after
3692 { 3694 {
3693 if (m_cssTarget) 3695 if (m_cssTarget)
3694 m_cssTarget->didAffectSelector(AffectedSelectorTarget); 3696 m_cssTarget->didAffectSelector(AffectedSelectorTarget);
3695 m_cssTarget = n; 3697 m_cssTarget = n;
3696 if (n) 3698 if (n)
3697 n->didAffectSelector(AffectedSelectorTarget); 3699 n->didAffectSelector(AffectedSelectorTarget);
3698 } 3700 }
3699 3701
3700 void Document::registerNodeList(LiveNodeListBase* list) 3702 void Document::registerNodeList(LiveNodeListBase* list)
3701 { 3703 {
3704 #if ENABLE(OILPAN)
3705 m_nodeLists[list->invalidationType()].add(list);
3706 #else
3702 m_nodeListCounts[list->invalidationType()]++; 3707 m_nodeListCounts[list->invalidationType()]++;
3708 #endif
3703 if (list->isRootedAtDocument()) 3709 if (list->isRootedAtDocument())
3704 m_listsInvalidatedAtDocument.add(list); 3710 m_listsInvalidatedAtDocument.add(list);
3705 } 3711 }
3706 3712
3707 void Document::unregisterNodeList(LiveNodeListBase* list) 3713 void Document::unregisterNodeList(LiveNodeListBase* list)
3708 { 3714 {
3715 #if ENABLE(OILPAN)
3716 ASSERT(m_nodeLists[list->invalidationType()].contains(WeakMember<LiveNodeLis tBase>(list)));
3717 m_nodeLists[list->invalidationType()].remove(WeakMember<LiveNodeListBase>(li st));
haraken 2014/05/12 12:04:13 Isn't this weak processing automatically done by o
sof 2014/05/12 12:24:36 It is done automatically most times but for the ca
3718 #else
3709 m_nodeListCounts[list->invalidationType()]--; 3719 m_nodeListCounts[list->invalidationType()]--;
3720 #endif
3710 if (list->isRootedAtDocument()) { 3721 if (list->isRootedAtDocument()) {
haraken 2014/05/12 12:04:13 I'm just curious but why is this check necessary i
sof 2014/05/15 22:15:57 It is used to handle fast invalidation of certain
3711 ASSERT(m_listsInvalidatedAtDocument.contains(list)); 3722 ASSERT(m_listsInvalidatedAtDocument.contains(list));
3712 m_listsInvalidatedAtDocument.remove(list); 3723 m_listsInvalidatedAtDocument.remove(list);
haraken 2014/05/12 12:04:13 I think you can remove this line from oilpan-build
sof 2014/05/12 12:24:36 I think it needs to stay; see above.
3713 } 3724 }
3714 } 3725 }
3715 3726
3727 #if ENABLE(OILPAN)
3728 void Document::incrementNodeListWithIdNameCacheCount(const LiveNodeListBase* lis t)
3729 {
3730 m_nodeLists[InvalidateOnIdNameAttrChange].add(WeakMember<LiveNodeListBase>(c onst_cast<LiveNodeListBase*>(list)));
3731 }
3732
3733 void Document::decrementNodeListWithIdNameCacheCount(const LiveNodeListBase* lis t)
haraken 2014/05/12 12:04:13 I'd rename these methods to {register,unregister}N
sof 2014/05/15 22:15:57 Done.
3734 {
3735 ASSERT(m_nodeLists[InvalidateOnIdNameAttrChange].contains(WeakMember<LiveNod eListBase>(const_cast<LiveNodeListBase*>(list))));
3736 m_nodeLists[InvalidateOnIdNameAttrChange].remove(WeakMember<LiveNodeListBase >(const_cast<LiveNodeListBase*>(list)));
3737 }
3738 #endif
3739
3716 void Document::attachNodeIterator(NodeIterator* ni) 3740 void Document::attachNodeIterator(NodeIterator* ni)
3717 { 3741 {
3718 m_nodeIterators.add(ni); 3742 m_nodeIterators.add(ni);
3719 } 3743 }
3720 3744
3721 void Document::detachNodeIterator(NodeIterator* ni) 3745 void Document::detachNodeIterator(NodeIterator* ni)
3722 { 3746 {
3723 // The node iterator can be detached without having been attached if its roo t node didn't have a document 3747 // The node iterator can be detached without having been attached if its roo t node didn't have a document
3724 // when the iterator was created, but has it now. 3748 // when the iterator was created, but has it now.
3725 m_nodeIterators.remove(ni); 3749 m_nodeIterators.remove(ni);
(...skipping 783 matching lines...) Expand 10 before | Expand all | Expand 10 after
4509 if (!m_svgExtensions) 4533 if (!m_svgExtensions)
4510 m_svgExtensions = adoptPtr(new SVGDocumentExtensions(this)); 4534 m_svgExtensions = adoptPtr(new SVGDocumentExtensions(this));
4511 return *m_svgExtensions; 4535 return *m_svgExtensions;
4512 } 4536 }
4513 4537
4514 bool Document::hasSVGRootNode() const 4538 bool Document::hasSVGRootNode() const
4515 { 4539 {
4516 return isSVGSVGElement(documentElement()); 4540 return isSVGSVGElement(documentElement());
4517 } 4541 }
4518 4542
4519 PassRefPtr<HTMLCollection> Document::ensureCachedCollection(CollectionType type) 4543 PassRefPtrWillBeRawPtr<HTMLCollection> Document::ensureCachedCollection(Collecti onType type)
4520 { 4544 {
4521 return ensureRareData().ensureNodeLists().addCache<HTMLCollection>(*this, ty pe); 4545 return ensureRareData().ensureNodeLists().addCache<HTMLCollection>(*this, ty pe);
4522 } 4546 }
4523 4547
4524 PassRefPtr<HTMLCollection> Document::images() 4548 PassRefPtrWillBeRawPtr<HTMLCollection> Document::images()
4525 { 4549 {
4526 return ensureCachedCollection(DocImages); 4550 return ensureCachedCollection(DocImages);
4527 } 4551 }
4528 4552
4529 PassRefPtr<HTMLCollection> Document::applets() 4553 PassRefPtrWillBeRawPtr<HTMLCollection> Document::applets()
4530 { 4554 {
4531 return ensureCachedCollection(DocApplets); 4555 return ensureCachedCollection(DocApplets);
4532 } 4556 }
4533 4557
4534 PassRefPtr<HTMLCollection> Document::embeds() 4558 PassRefPtrWillBeRawPtr<HTMLCollection> Document::embeds()
4535 { 4559 {
4536 return ensureCachedCollection(DocEmbeds); 4560 return ensureCachedCollection(DocEmbeds);
4537 } 4561 }
4538 4562
4539 PassRefPtr<HTMLCollection> Document::scripts() 4563 PassRefPtrWillBeRawPtr<HTMLCollection> Document::scripts()
4540 { 4564 {
4541 return ensureCachedCollection(DocScripts); 4565 return ensureCachedCollection(DocScripts);
4542 } 4566 }
4543 4567
4544 PassRefPtr<HTMLCollection> Document::links() 4568 PassRefPtrWillBeRawPtr<HTMLCollection> Document::links()
4545 { 4569 {
4546 return ensureCachedCollection(DocLinks); 4570 return ensureCachedCollection(DocLinks);
4547 } 4571 }
4548 4572
4549 PassRefPtr<HTMLCollection> Document::forms() 4573 PassRefPtrWillBeRawPtr<HTMLCollection> Document::forms()
4550 { 4574 {
4551 return ensureCachedCollection(DocForms); 4575 return ensureCachedCollection(DocForms);
4552 } 4576 }
4553 4577
4554 PassRefPtr<HTMLCollection> Document::anchors() 4578 PassRefPtrWillBeRawPtr<HTMLCollection> Document::anchors()
4555 { 4579 {
4556 return ensureCachedCollection(DocAnchors); 4580 return ensureCachedCollection(DocAnchors);
4557 } 4581 }
4558 4582
4559 PassRefPtr<HTMLAllCollection> Document::allForBinding() 4583 PassRefPtrWillBeRawPtr<HTMLAllCollection> Document::allForBinding()
4560 { 4584 {
4561 UseCounter::count(*this, UseCounter::DocumentAll); 4585 UseCounter::count(*this, UseCounter::DocumentAll);
4562 return all(); 4586 return all();
4563 } 4587 }
4564 4588
4565 PassRefPtr<HTMLAllCollection> Document::all() 4589 PassRefPtrWillBeRawPtr<HTMLAllCollection> Document::all()
4566 { 4590 {
4567 return ensureRareData().ensureNodeLists().addCache<HTMLAllCollection>(*this, DocAll); 4591 return ensureRareData().ensureNodeLists().addCache<HTMLAllCollection>(*this, DocAll);
4568 } 4592 }
4569 4593
4570 PassRefPtr<HTMLCollection> Document::windowNamedItems(const AtomicString& name) 4594 PassRefPtrWillBeRawPtr<HTMLCollection> Document::windowNamedItems(const AtomicSt ring& name)
4571 { 4595 {
4572 return ensureRareData().ensureNodeLists().addCache<HTMLNameCollection>(*this , WindowNamedItems, name); 4596 return ensureRareData().ensureNodeLists().addCache<HTMLNameCollection>(*this , WindowNamedItems, name);
4573 } 4597 }
4574 4598
4575 PassRefPtr<HTMLCollection> Document::documentNamedItems(const AtomicString& name ) 4599 PassRefPtrWillBeRawPtr<HTMLCollection> Document::documentNamedItems(const Atomic String& name)
4576 { 4600 {
4577 return ensureRareData().ensureNodeLists().addCache<HTMLNameCollection>(*this , DocumentNamedItems, name); 4601 return ensureRareData().ensureNodeLists().addCache<HTMLNameCollection>(*this , DocumentNamedItems, name);
4578 } 4602 }
4579 4603
4580 void Document::finishedParsing() 4604 void Document::finishedParsing()
4581 { 4605 {
4582 ASSERT(!scriptableDocumentParser() || !m_parser->isParsing()); 4606 ASSERT(!scriptableDocumentParser() || !m_parser->isParsing());
4583 ASSERT(!scriptableDocumentParser() || m_readyState != Loading); 4607 ASSERT(!scriptableDocumentParser() || m_readyState != Loading);
4584 setParsing(false); 4608 setParsing(false);
4585 if (!m_documentTiming.domContentLoadedEventStart) 4609 if (!m_documentTiming.domContentLoadedEventStart)
(...skipping 1057 matching lines...) Expand 10 before | Expand all | Expand 10 after
5643 if (!page->focusController().isActive() || !page->focusController().isFocuse d()) 5667 if (!page->focusController().isActive() || !page->focusController().isFocuse d())
5644 return false; 5668 return false;
5645 Frame* focusedFrame = page->focusController().focusedFrame(); 5669 Frame* focusedFrame = page->focusController().focusedFrame();
5646 if (focusedFrame && focusedFrame->isLocalFrame()) { 5670 if (focusedFrame && focusedFrame->isLocalFrame()) {
5647 if (toLocalFrame(focusedFrame)->tree().isDescendantOf(frame())) 5671 if (toLocalFrame(focusedFrame)->tree().isDescendantOf(frame()))
5648 return true; 5672 return true;
5649 } 5673 }
5650 return false; 5674 return false;
5651 } 5675 }
5652 5676
5677 #if ENABLE(OILPAN)
5678 template<unsigned type>
5679 bool shouldInvalidateNodeListCachesForAttr(const HeapHashSet<WeakMember<LiveNode ListBase> > nodeLists[], const QualifiedName& attrName)
5680 {
5681 if (!nodeLists[type].isEmpty() && LiveNodeListBase::shouldInvalidateTypeOnAt tributeChange(static_cast<NodeListInvalidationType>(type), attrName))
5682 return true;
5683 return shouldInvalidateNodeListCachesForAttr<type + 1>(nodeLists, attrName);
5684 }
5685
5686 template<>
5687 bool shouldInvalidateNodeListCachesForAttr<numNodeListInvalidationTypes>(const H eapHashSet<WeakMember<LiveNodeListBase> >[], const QualifiedName&)
5688 {
5689 return false;
5690 }
5691 #else
5653 template<unsigned type> 5692 template<unsigned type>
5654 bool shouldInvalidateNodeListCachesForAttr(const unsigned nodeListCounts[], cons t QualifiedName& attrName) 5693 bool shouldInvalidateNodeListCachesForAttr(const unsigned nodeListCounts[], cons t QualifiedName& attrName)
5655 { 5694 {
5656 if (nodeListCounts[type] && LiveNodeListBase::shouldInvalidateTypeOnAttribut eChange(static_cast<NodeListInvalidationType>(type), attrName)) 5695 if (nodeListCounts[type] && LiveNodeListBase::shouldInvalidateTypeOnAttribut eChange(static_cast<NodeListInvalidationType>(type), attrName))
5657 return true; 5696 return true;
5658 return shouldInvalidateNodeListCachesForAttr<type + 1>(nodeListCounts, attrN ame); 5697 return shouldInvalidateNodeListCachesForAttr<type + 1>(nodeListCounts, attrN ame);
5659 } 5698 }
5660 5699
5661 template<> 5700 template<>
5662 bool shouldInvalidateNodeListCachesForAttr<numNodeListInvalidationTypes>(const u nsigned[], const QualifiedName&) 5701 bool shouldInvalidateNodeListCachesForAttr<numNodeListInvalidationTypes>(const u nsigned[], const QualifiedName&)
5663 { 5702 {
5664 return false; 5703 return false;
5665 } 5704 }
5705 #endif
5666 5706
5667 bool Document::shouldInvalidateNodeListCaches(const QualifiedName* attrName) con st 5707 bool Document::shouldInvalidateNodeListCaches(const QualifiedName* attrName) con st
5668 { 5708 {
5669 if (attrName) 5709 if (attrName) {
5710 #if ENABLE(OILPAN)
5711 return shouldInvalidateNodeListCachesForAttr<DoNotInvalidateOnAttributeC hanges + 1>(m_nodeLists, *attrName);
5712 #else
5670 return shouldInvalidateNodeListCachesForAttr<DoNotInvalidateOnAttributeC hanges + 1>(m_nodeListCounts, *attrName); 5713 return shouldInvalidateNodeListCachesForAttr<DoNotInvalidateOnAttributeC hanges + 1>(m_nodeListCounts, *attrName);
5714 #endif
5715 }
5671 5716
5672 for (int type = 0; type < numNodeListInvalidationTypes; type++) { 5717 for (int type = 0; type < numNodeListInvalidationTypes; type++) {
5718 #if ENABLE(OILPAN)
5719 if (!m_nodeLists[type].isEmpty())
5720 #else
5673 if (m_nodeListCounts[type]) 5721 if (m_nodeListCounts[type])
5722 #endif
5674 return true; 5723 return true;
5675 } 5724 }
5676 5725
5677 return false; 5726 return false;
5678 } 5727 }
5679 5728
5680 void Document::invalidateNodeListCaches(const QualifiedName* attrName) 5729 void Document::invalidateNodeListCaches(const QualifiedName* attrName)
5681 { 5730 {
5682 HashSet<LiveNodeListBase*>::iterator end = m_listsInvalidatedAtDocument.end( ); 5731 WillBeHeapHashSet<RawPtrWillBeWeakMember<LiveNodeListBase> >::iterator end = m_listsInvalidatedAtDocument.end();
5683 for (HashSet<LiveNodeListBase*>::iterator it = m_listsInvalidatedAtDocument. begin(); it != end; ++it) 5732 for (WillBeHeapHashSet<RawPtrWillBeWeakMember<LiveNodeListBase> >::iterator it = m_listsInvalidatedAtDocument.begin(); it != end; ++it)
5684 (*it)->invalidateCacheForAttribute(attrName); 5733 (*it)->invalidateCacheForAttribute(attrName);
5685 } 5734 }
5686 5735
5687 void Document::clearWeakMembers(Visitor* visitor) 5736 void Document::clearWeakMembers(Visitor* visitor)
5688 { 5737 {
5689 if (m_axObjectCache) 5738 if (m_axObjectCache)
5690 m_axObjectCache->clearWeakMembers(visitor); 5739 m_axObjectCache->clearWeakMembers(visitor);
5691 5740
5692 if (m_markers) 5741 if (m_markers)
5693 m_markers->clearWeakMembers(visitor); 5742 m_markers->clearWeakMembers(visitor);
(...skipping 15 matching lines...) Expand all
5709 visitor->trace(m_docType); 5758 visitor->trace(m_docType);
5710 visitor->trace(m_implementation); 5759 visitor->trace(m_implementation);
5711 visitor->trace(m_autofocusElement); 5760 visitor->trace(m_autofocusElement);
5712 visitor->trace(m_focusedElement); 5761 visitor->trace(m_focusedElement);
5713 visitor->trace(m_hoverNode); 5762 visitor->trace(m_hoverNode);
5714 visitor->trace(m_activeHoverElement); 5763 visitor->trace(m_activeHoverElement);
5715 visitor->trace(m_documentElement); 5764 visitor->trace(m_documentElement);
5716 visitor->trace(m_titleElement); 5765 visitor->trace(m_titleElement);
5717 visitor->trace(m_currentScriptStack); 5766 visitor->trace(m_currentScriptStack);
5718 visitor->trace(m_transformSourceDocument); 5767 visitor->trace(m_transformSourceDocument);
5768 visitor->trace(m_listsInvalidatedAtDocument);
5769 #if ENABLE(OILPAN)
5770 for (int i = 0; i < numNodeListInvalidationTypes; i++)
5771 visitor->trace(m_nodeLists[i]);
5772 #endif
5719 visitor->trace(m_cssCanvasElements); 5773 visitor->trace(m_cssCanvasElements);
5720 visitor->trace(m_topLayerElements); 5774 visitor->trace(m_topLayerElements);
5721 visitor->trace(m_elemSheet); 5775 visitor->trace(m_elemSheet);
5722 visitor->trace(m_styleEngine); 5776 visitor->trace(m_styleEngine);
5723 visitor->trace(m_formController); 5777 visitor->trace(m_formController);
5724 visitor->trace(m_fetcher); 5778 visitor->trace(m_fetcher);
5725 visitor->trace(m_contextFeatures); 5779 visitor->trace(m_contextFeatures);
5726 visitor->trace(m_styleSheetList); 5780 visitor->trace(m_styleSheetList);
5727 visitor->trace(m_mediaQueryMatcher); 5781 visitor->trace(m_mediaQueryMatcher);
5728 visitor->trace(m_associatedFormControls); 5782 visitor->trace(m_associatedFormControls);
5729 visitor->trace(m_templateDocument); 5783 visitor->trace(m_templateDocument);
5730 visitor->trace(m_templateDocumentHost); 5784 visitor->trace(m_templateDocumentHost);
5731 visitor->trace(m_visibilityObservers); 5785 visitor->trace(m_visibilityObservers);
5732 visitor->trace(m_userActionElements); 5786 visitor->trace(m_userActionElements);
5733 visitor->registerWeakMembers<Document, &Document::clearWeakMembers>(this); 5787 visitor->registerWeakMembers<Document, &Document::clearWeakMembers>(this);
5734 DocumentSupplementable::trace(visitor); 5788 DocumentSupplementable::trace(visitor);
5735 TreeScope::trace(visitor); 5789 TreeScope::trace(visitor);
5736 ContainerNode::trace(visitor); 5790 ContainerNode::trace(visitor);
5737 ExecutionContext::trace(visitor); 5791 ExecutionContext::trace(visitor);
5738 } 5792 }
5739 5793
5740 } // namespace WebCore 5794 } // namespace WebCore
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698