Changeset 214082 in webkit
- Timestamp:
- Mar 16, 2017 5:20:45 PM (7 years ago)
- Location:
- trunk/Source/WebCore
- Files:
-
- 29 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/Source/WebCore/ChangeLog
r214080 r214082 1 2017-03-16 Simon Fraser <simon.fraser@apple.com> 2 3 RenderView::documentBeingDestroyed() needs a new name. 4 https://bugs.webkit.org/show_bug.cgi?id=166727 5 6 Reviewed by Andreas Kling. 7 8 Now that we destroy the render tree for documents going into the page cache, RenderView::documentBeingDestroyed() 9 is misleadingly named. Rename it to renderTreeBeingDestroyed() and fix all callers. 10 11 * page/FrameView.cpp: 12 (WebCore::FrameView::scheduleRelayoutOfSubtree): 13 * page/scrolling/ScrollingCoordinator.cpp: 14 (WebCore::ScrollingCoordinator::absoluteEventTrackingRegionsForFrame): 15 * rendering/CounterNode.cpp: 16 (WebCore::CounterNode::resetRenderers): 17 * rendering/ImageQualityController.cpp: 18 (WebCore::ImageQualityController::highQualityRepaintTimerFired): 19 * rendering/RenderBlock.cpp: 20 (WebCore::RenderBlock::willBeDestroyed): 21 (WebCore::canMergeContiguousAnonymousBlocks): 22 (WebCore::RenderBlock::removeChild): 23 * rendering/RenderBlockFlow.cpp: 24 (WebCore::RenderBlockFlow::willBeDestroyed): 25 (WebCore::RenderBlockFlow::removeChild): 26 * rendering/RenderBox.cpp: 27 (WebCore::RenderBox::removeFloatingOrPositionedChildFromBlockLists): 28 (WebCore::RenderBox::deleteLineBoxWrapper): 29 * rendering/RenderBoxModelObject.cpp: 30 (WebCore::RenderBoxModelObject::willBeDestroyed): 31 * rendering/RenderElement.cpp: 32 (WebCore::RenderElement::insertChildInternal): 33 (WebCore::RenderElement::removeChildInternal): 34 (WebCore::RenderElement::clearLayoutRootIfNeeded): 35 (WebCore::RenderElement::willBeDestroyed): 36 * rendering/RenderImage.cpp: 37 (WebCore::RenderImage::imageChanged): 38 (WebCore::RenderImage::notifyFinished): 39 * rendering/RenderInline.cpp: 40 (WebCore::RenderInline::willBeDestroyed): 41 * rendering/RenderLayer.cpp: 42 (WebCore::RenderLayer::removeChild): 43 (WebCore::RenderLayer::calculateClipRects): 44 * rendering/RenderLayerBacking.cpp: 45 (WebCore::RenderLayerBacking::notifyFlushRequired): 46 * rendering/RenderLayerCompositor.cpp: 47 (WebCore::RenderLayerCompositor::layerWillBeRemoved): 48 (WebCore::RenderLayerCompositor::fixedRootBackgroundLayerChanged): 49 * rendering/RenderLineBreak.cpp: 50 (WebCore::RenderLineBreak::deleteInlineBoxWrapper): 51 * rendering/RenderNamedFlowFragment.cpp: 52 (WebCore::RenderNamedFlowFragment::attachRegion): 53 * rendering/RenderObject.cpp: 54 (WebCore::RenderObject::resetFlowThreadStateOnRemoval): 55 (WebCore::RenderObject::willBeDestroyed): 56 (WebCore::RenderObject::destroyAndCleanupAnonymousWrappers): 57 * rendering/RenderObject.h: 58 (WebCore::RenderObject::renderTreeBeingDestroyed): 59 (WebCore::RenderObject::documentBeingDestroyed): Deleted. 60 * rendering/RenderQuote.cpp: 61 (WebCore::RenderQuote::detachQuote): 62 * rendering/RenderRegion.cpp: 63 (WebCore::RenderRegion::attachRegion): 64 * rendering/RenderReplaced.cpp: 65 (WebCore::RenderReplaced::willBeDestroyed): 66 * rendering/RenderRubyRun.cpp: 67 (WebCore::RenderRubyRun::removeChild): 68 * rendering/RenderTable.h: 69 (WebCore::RenderTable::setNeedsSectionRecalc): 70 * rendering/RenderText.cpp: 71 (WebCore::RenderText::removeAndDestroyTextBoxes): 72 * rendering/RenderVideo.cpp: 73 (WebCore::RenderVideo::updatePlayer): 74 * rendering/svg/RenderSVGResource.cpp: 75 (WebCore::RenderSVGResource::markForLayoutAndParentResourceInvalidation): 76 * rendering/svg/RenderSVGResourceContainer.cpp: 77 (WebCore::RenderSVGResourceContainer::markClientForInvalidation): 78 * rendering/svg/RenderSVGText.cpp: 79 (WebCore::RenderSVGText::subtreeChildWasAdded): 80 (WebCore::RenderSVGText::subtreeChildWillBeRemoved): 81 (WebCore::RenderSVGText::subtreeChildWasRemoved): 82 (WebCore::RenderSVGText::subtreeStyleDidChange): 83 1 84 2017-03-16 Youenn Fablet <youenn@apple.com> 2 85 -
trunk/Source/WebCore/page/FrameView.cpp
r213715 r214082 3025 3025 3026 3026 // Try to catch unnecessary work during render tree teardown. 3027 ASSERT(!renderView. documentBeingDestroyed());3027 ASSERT(!renderView.renderTreeBeingDestroyed()); 3028 3028 ASSERT(frame().view() == this); 3029 3029 -
trunk/Source/WebCore/page/scrolling/ScrollingCoordinator.cpp
r210758 r214082 101 101 { 102 102 auto* renderView = frame.contentRenderer(); 103 if (!renderView || renderView-> documentBeingDestroyed())103 if (!renderView || renderView->renderTreeBeingDestroyed()) 104 104 return EventTrackingRegions(); 105 105 -
trunk/Source/WebCore/rendering/CounterNode.cpp
r208744 r214082 178 178 if (!m_rootRenderer) 179 179 return; 180 bool skipLayoutAndPerfWidthsRecalc = m_rootRenderer-> documentBeingDestroyed();180 bool skipLayoutAndPerfWidthsRecalc = m_rootRenderer->renderTreeBeingDestroyed(); 181 181 auto* current = m_rootRenderer; 182 182 while (current) { -
trunk/Source/WebCore/rendering/ImageQualityController.cpp
r210758 r214082 75 75 void ImageQualityController::highQualityRepaintTimerFired() 76 76 { 77 if (m_renderView. documentBeingDestroyed())77 if (m_renderView.renderTreeBeingDestroyed()) 78 78 return; 79 79 if (!m_animatedResizeIsActive && !m_liveResizeOptimizationIsActive) -
trunk/Source/WebCore/rendering/RenderBlock.cpp
r213923 r214082 344 344 void RenderBlock::willBeDestroyed() 345 345 { 346 if (! documentBeingDestroyed()) {346 if (!renderTreeBeingDestroyed()) { 347 347 if (parent()) 348 348 parent()->dirtyLinesFromChangedChild(*this); … … 779 779 static bool canMergeContiguousAnonymousBlocks(RenderObject& oldChild, RenderObject* previous, RenderObject* next) 780 780 { 781 if (oldChild. documentBeingDestroyed() || oldChild.isInline() || oldChild.virtualContinuation())781 if (oldChild.renderTreeBeingDestroyed() || oldChild.isInline() || oldChild.virtualContinuation()) 782 782 return false; 783 783 … … 815 815 // No need to waste time in merging or removing empty anonymous blocks. 816 816 // We can just bail out if our document is getting destroyed. 817 if ( documentBeingDestroyed()) {817 if (renderTreeBeingDestroyed()) { 818 818 RenderBox::removeChild(oldChild); 819 819 return; -
trunk/Source/WebCore/rendering/RenderBlockFlow.cpp
r214023 r214082 154 154 destroyLeftoverChildren(); 155 155 156 if (! documentBeingDestroyed()) {156 if (!renderTreeBeingDestroyed()) { 157 157 if (firstRootBox()) { 158 158 // We can't wait for RenderBox::destroy to clear the selection, … … 3927 3927 void RenderBlockFlow::removeChild(RenderObject& oldChild) 3928 3928 { 3929 if (! documentBeingDestroyed()) {3929 if (!renderTreeBeingDestroyed()) { 3930 3930 RenderFlowThread* flowThread = multiColumnFlowThread(); 3931 3931 if (flowThread && flowThread != &oldChild) -
trunk/Source/WebCore/rendering/RenderBox.cpp
r214010 r214082 280 280 ASSERT(isFloatingOrOutOfFlowPositioned()); 281 281 282 if ( documentBeingDestroyed())282 if (renderTreeBeingDestroyed()) 283 283 return; 284 284 … … 2195 2195 return; 2196 2196 2197 if (! documentBeingDestroyed())2197 if (!renderTreeBeingDestroyed()) 2198 2198 m_inlineBoxWrapper->removeFromParent(); 2199 2199 delete m_inlineBoxWrapper; -
trunk/Source/WebCore/rendering/RenderBoxModelObject.cpp
r213455 r214082 192 192 setFirstLetterRemainingText(nullptr); 193 193 194 if (! documentBeingDestroyed())194 if (!renderTreeBeingDestroyed()) 195 195 view().imageQualityController().rendererWillBeDestroyed(*this); 196 196 -
trunk/Source/WebCore/rendering/RenderElement.cpp
r214023 r214082 566 566 567 567 newChild->initializeFlowThreadStateOnInsertion(); 568 if (! documentBeingDestroyed()) {568 if (!renderTreeBeingDestroyed()) { 569 569 if (notifyChildren == NotifyChildren) 570 570 newChild->insertedIntoTree(); … … 597 597 // that a positioned child got yanked). We also repaint, so that the area exposed when the child 598 598 // disappears gets repainted properly. 599 if (! documentBeingDestroyed() && notifyChildren == NotifyChildren && oldChild.everHadLayout()) {599 if (!renderTreeBeingDestroyed() && notifyChildren == NotifyChildren && oldChild.everHadLayout()) { 600 600 oldChild.setNeedsLayoutAndPrefWidthsRecalc(); 601 601 // We only repaint |oldChild| if we have a RenderLayer as its visual overflow may not be tracked by its parent. … … 612 612 downcast<RenderLineBreak>(oldChild).deleteInlineBoxWrapper(); 613 613 614 if (! documentBeingDestroyed() && is<RenderFlexibleBox>(this) && !oldChild.isFloatingOrOutOfFlowPositioned() && oldChild.isBox())614 if (!renderTreeBeingDestroyed() && is<RenderFlexibleBox>(this) && !oldChild.isFloatingOrOutOfFlowPositioned() && oldChild.isBox()) 615 615 downcast<RenderFlexibleBox>(this)->clearCachedChildIntrinsicContentLogicalHeight(downcast<RenderBox>(oldChild)); 616 616 617 617 // If oldChild is the start or end of the selection, then clear the selection to 618 618 // avoid problems of invalid pointers. 619 if (! documentBeingDestroyed() && oldChild.isSelectionBorder())619 if (!renderTreeBeingDestroyed() && oldChild.isSelectionBorder()) 620 620 frame().selection().setNeedsSelectionUpdate(); 621 621 622 if (! documentBeingDestroyed() && notifyChildren == NotifyChildren)622 if (!renderTreeBeingDestroyed() && notifyChildren == NotifyChildren) 623 623 oldChild.willBeRemovedFromTree(); 624 624 … … 647 647 // rendererRemovedFromTree walks the whole subtree. We can improve performance 648 648 // by skipping this step when destroying the entire tree. 649 if (! documentBeingDestroyed() && is<RenderElement>(oldChild))649 if (!renderTreeBeingDestroyed() && is<RenderElement>(oldChild)) 650 650 RenderCounter::rendererRemovedFromTree(downcast<RenderElement>(oldChild)); 651 651 … … 1103 1103 inline void RenderElement::clearLayoutRootIfNeeded() const 1104 1104 { 1105 if ( documentBeingDestroyed())1105 if (renderTreeBeingDestroyed()) 1106 1106 return; 1107 1107 … … 1137 1137 1138 1138 #if !ASSERT_DISABLED 1139 if (! documentBeingDestroyed() && view().hasRenderNamedFlowThreads()) {1139 if (!renderTreeBeingDestroyed() && view().hasRenderNamedFlowThreads()) { 1140 1140 // After remove, the object and the associated information should not be in any flow thread. 1141 1141 for (auto& flowThread : *view().flowThreadController().renderNamedFlowThreadList()) { -
trunk/Source/WebCore/rendering/RenderImage.cpp
r213466 r214082 231 231 void RenderImage::imageChanged(WrappedImagePtr newImage, const IntRect* rect) 232 232 { 233 if ( documentBeingDestroyed())233 if (renderTreeBeingDestroyed()) 234 234 return; 235 235 … … 338 338 void RenderImage::notifyFinished(CachedResource& newImage) 339 339 { 340 if ( documentBeingDestroyed())340 if (renderTreeBeingDestroyed()) 341 341 return; 342 342 -
trunk/Source/WebCore/rendering/RenderInline.cpp
r214059 r214082 85 85 destroyLeftoverChildren(); 86 86 87 if (! documentBeingDestroyed()) {87 if (!renderTreeBeingDestroyed()) { 88 88 if (firstLineBox()) { 89 89 // We can't wait for RenderBoxModelObject::destroy to clear the selection, -
trunk/Source/WebCore/rendering/RenderLayer.cpp
r213712 r214082 1905 1905 RenderLayer* RenderLayer::removeChild(RenderLayer* oldChild) 1906 1906 { 1907 if (!renderer(). documentBeingDestroyed())1907 if (!renderer().renderTreeBeingDestroyed()) 1908 1908 compositor().layerWillBeRemoved(*this, *oldChild); 1909 1909 … … 6132 6132 void RenderLayer::clearBacking(bool layerBeingDestroyed) 6133 6133 { 6134 if (m_backing && !renderer(). documentBeingDestroyed())6134 if (m_backing && !renderer().renderTreeBeingDestroyed()) 6135 6135 compositor().layerBecameNonComposited(*this); 6136 6136 m_backing = nullptr; … … 6273 6273 return; 6274 6274 6275 if (m_parent && !renderer(). documentBeingDestroyed())6275 if (m_parent && !renderer().renderTreeBeingDestroyed()) 6276 6276 compositor().layerWillBeRemoved(*m_parent, *this); 6277 6277 6278 6278 m_parent = parent; 6279 6279 6280 if (m_parent && !renderer(). documentBeingDestroyed())6280 if (m_parent && !renderer().renderTreeBeingDestroyed()) 6281 6281 compositor().layerWasAdded(*m_parent, *this); 6282 6282 } … … 6293 6293 m_zOrderListsDirty = true; 6294 6294 6295 if (!renderer(). documentBeingDestroyed()) {6295 if (!renderer().renderTreeBeingDestroyed()) { 6296 6296 if (isFlowThreadCollectingGraphicsLayersUnderRegions()) 6297 6297 downcast<RenderFlowThread>(renderer()).setNeedsLayerToRegionMappingsUpdate(); … … 6317 6317 m_normalFlowListDirty = true; 6318 6318 6319 if (!renderer(). documentBeingDestroyed()) {6319 if (!renderer().renderTreeBeingDestroyed()) { 6320 6320 if (isFlowThreadCollectingGraphicsLayersUnderRegions()) 6321 6321 downcast<RenderFlowThread>(renderer()).setNeedsLayerToRegionMappingsUpdate(); … … 6798 6798 if (parent() && (renderer().isOutOfFlowPositioned() != wasOutOfFlowPositioned)) { 6799 6799 parent()->dirtyAncestorChainHasOutOfFlowPositionedDescendantStatus(); 6800 if (!renderer(). documentBeingDestroyed() && acceleratedCompositingForOverflowScrollEnabled())6800 if (!renderer().renderTreeBeingDestroyed() && acceleratedCompositingForOverflowScrollEnabled()) 6801 6801 compositor().setShouldReevaluateCompositingAfterLayout(); 6802 6802 } … … 6959 6959 void RenderLayer::removeReflection() 6960 6960 { 6961 if (!m_reflection-> documentBeingDestroyed())6961 if (!m_reflection->renderTreeBeingDestroyed()) 6962 6962 m_reflection->removeLayers(this); 6963 6963 -
trunk/Source/WebCore/rendering/RenderLayerBacking.cpp
r214017 r214082 2869 2869 void RenderLayerBacking::notifyFlushRequired(const GraphicsLayer* layer) 2870 2870 { 2871 if (renderer(). documentBeingDestroyed())2871 if (renderer().renderTreeBeingDestroyed()) 2872 2872 return; 2873 2873 compositor().scheduleLayerFlush(layer->canThrottleLayerFlush()); -
trunk/Source/WebCore/rendering/RenderLayerCompositor.cpp
r213466 r214082 1124 1124 void RenderLayerCompositor::layerWillBeRemoved(RenderLayer& parent, RenderLayer& child) 1125 1125 { 1126 if (!child.isComposited() || parent.renderer(). documentBeingDestroyed())1126 if (!child.isComposited() || parent.renderer().renderTreeBeingDestroyed()) 1127 1127 return; 1128 1128 … … 1777 1777 void RenderLayerCompositor::fixedRootBackgroundLayerChanged() 1778 1778 { 1779 if (m_renderView. documentBeingDestroyed())1779 if (m_renderView.renderTreeBeingDestroyed()) 1780 1780 return; 1781 1781 -
trunk/Source/WebCore/rendering/RenderLineBreak.cpp
r207757 r214082 112 112 if (!m_inlineBoxWrapper) 113 113 return; 114 if (! documentBeingDestroyed())114 if (!renderTreeBeingDestroyed()) 115 115 m_inlineBoxWrapper->removeFromParent(); 116 116 delete m_inlineBoxWrapper; -
trunk/Source/WebCore/rendering/RenderNamedFlowFragment.cpp
r208743 r214082 500 500 RenderRegion::attachRegion(); 501 501 502 if ( documentBeingDestroyed() || !isValid())502 if (renderTreeBeingDestroyed() || !isValid()) 503 503 return; 504 504 -
trunk/Source/WebCore/rendering/RenderObject.cpp
r213715 r214082 227 227 return; 228 228 229 if (! documentBeingDestroyed() && is<RenderElement>(*this)) {229 if (!renderTreeBeingDestroyed() && is<RenderElement>(*this)) { 230 230 downcast<RenderElement>(*this).removeFromRenderFlowThread(); 231 231 return; … … 1474 1474 removeFromParent(); 1475 1475 1476 ASSERT( documentBeingDestroyed() || !is<RenderElement>(*this) || !view().frameView().hasSlowRepaintObject(downcast<RenderElement>(*this)));1476 ASSERT(renderTreeBeingDestroyed() || !is<RenderElement>(*this) || !view().frameView().hasSlowRepaintObject(downcast<RenderElement>(*this))); 1477 1477 1478 1478 // The remove() call above may invoke axObjectCache()->childrenChanged() on the parent, which may require the AX render … … 1512 1512 { 1513 1513 // If the tree is destroyed, there is no need for a clean-up phase. 1514 if ( documentBeingDestroyed()) {1514 if (renderTreeBeingDestroyed()) { 1515 1515 destroy(); 1516 1516 return; -
trunk/Source/WebCore/rendering/RenderObject.h
r213715 r214082 740 740 virtual LayoutRect localCaretRect(InlineBox*, unsigned caretOffset, LayoutUnit* extraWidthToEndOfLine = nullptr); 741 741 742 // When performing a global document tear-down, the renderer of the document is cleared. We use this 743 // as a hook to detect the case of document destruction and don't waste time doing unnecessary work. 744 bool documentBeingDestroyed() const; 742 // When performing a global document tear-down, or when going into the page cache, the renderer of the document is cleared. 743 bool renderTreeBeingDestroyed() const; 745 744 746 745 void destroyAndCleanupAnonymousWrappers(); … … 1028 1027 } 1029 1028 1030 inline bool RenderObject:: documentBeingDestroyed() const1029 inline bool RenderObject::renderTreeBeingDestroyed() const 1031 1030 { 1032 1031 return document().renderTreeBeingDestroyed(); -
trunk/Source/WebCore/rendering/RenderQuote.cpp
r208731 r214082 447 447 if (m_next) 448 448 m_next->m_previous = m_previous; 449 if (! documentBeingDestroyed()) {449 if (!renderTreeBeingDestroyed()) { 450 450 for (RenderQuote* quote = m_next; quote; quote = quote->m_next) 451 451 quote->updateDepth(); -
trunk/Source/WebCore/rendering/RenderRegion.cpp
r210828 r214082 280 280 void RenderRegion::attachRegion() 281 281 { 282 if ( documentBeingDestroyed())282 if (renderTreeBeingDestroyed()) 283 283 return; 284 284 -
trunk/Source/WebCore/rendering/RenderReplaced.cpp
r214010 r214082 73 73 void RenderReplaced::willBeDestroyed() 74 74 { 75 if (! documentBeingDestroyed() && parent())75 if (!renderTreeBeingDestroyed() && parent()) 76 76 parent()->dirtyLinesFromChangedChild(*this); 77 77 -
trunk/Source/WebCore/rendering/RenderRubyRun.cpp
r213455 r214082 159 159 // If the child is a ruby text, then merge the ruby base with the base of 160 160 // the right sibling run, if possible. 161 if (!beingDestroyed() && ! documentBeingDestroyed() && child.isRubyText()) {161 if (!beingDestroyed() && !renderTreeBeingDestroyed() && child.isRubyText()) { 162 162 RenderRubyBase* base = rubyBase(); 163 163 RenderObject* rightNeighbour = nextSibling(); … … 179 179 RenderBlockFlow::removeChild(child); 180 180 181 if (!beingDestroyed() && ! documentBeingDestroyed()) {181 if (!beingDestroyed() && !renderTreeBeingDestroyed()) { 182 182 // Check if our base (if any) is now empty. If so, destroy it. 183 183 RenderBlock* base = rubyBase(); -
trunk/Source/WebCore/rendering/RenderTable.h
r213455 r214082 223 223 void setNeedsSectionRecalc() 224 224 { 225 if ( documentBeingDestroyed())225 if (renderTreeBeingDestroyed()) 226 226 return; 227 227 m_needsSectionRecalc = true; -
trunk/Source/WebCore/rendering/RenderText.cpp
r213095 r214082 273 273 void RenderText::removeAndDestroyTextBoxes() 274 274 { 275 if (! documentBeingDestroyed())275 if (!renderTreeBeingDestroyed()) 276 276 m_lineBoxes.removeAllFromParent(*this); 277 277 #if !ASSERT_WITH_SECURITY_IMPLICATION_DISABLED -
trunk/Source/WebCore/rendering/RenderVideo.cpp
r214010 r214082 217 217 void RenderVideo::updatePlayer() 218 218 { 219 if ( documentBeingDestroyed())219 if (renderTreeBeingDestroyed()) 220 220 return; 221 221 -
trunk/Source/WebCore/rendering/svg/RenderSVGResource.cpp
r209777 r214082 192 192 ASSERT(object.node()); 193 193 194 if (needsLayout && !object. documentBeingDestroyed())194 if (needsLayout && !object.renderTreeBeingDestroyed()) 195 195 object.setNeedsLayout(); 196 196 -
trunk/Source/WebCore/rendering/svg/RenderSVGResourceContainer.cpp
r200041 r214082 134 134 break; 135 135 case RepaintInvalidation: 136 if (!client. documentBeingDestroyed())136 if (!client.renderTreeBeingDestroyed()) 137 137 client.repaint(); 138 138 break; -
trunk/Source/WebCore/rendering/svg/RenderSVGText.cpp
r212562 r214082 162 162 { 163 163 ASSERT(child); 164 if (!shouldHandleSubtreeMutations() || documentBeingDestroyed())164 if (!shouldHandleSubtreeMutations() || renderTreeBeingDestroyed()) 165 165 return; 166 166 … … 250 250 SVGTextLayoutAttributes* previous = nullptr; 251 251 SVGTextLayoutAttributes* next = nullptr; 252 if (! documentBeingDestroyed())252 if (!renderTreeBeingDestroyed()) 253 253 findPreviousAndNextAttributes(*this, &text, stopAfterNext, previous, next); 254 254 … … 264 264 void RenderSVGText::subtreeChildWasRemoved(const Vector<SVGTextLayoutAttributes*, 2>& affectedAttributes) 265 265 { 266 if (!shouldHandleSubtreeMutations() || documentBeingDestroyed()) {266 if (!shouldHandleSubtreeMutations() || renderTreeBeingDestroyed()) { 267 267 ASSERT(affectedAttributes.isEmpty()); 268 268 return; … … 279 279 { 280 280 ASSERT(text); 281 if (!shouldHandleSubtreeMutations() || documentBeingDestroyed())281 if (!shouldHandleSubtreeMutations() || renderTreeBeingDestroyed()) 282 282 return; 283 283
Note: See TracChangeset
for help on using the changeset viewer.