<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN"
"http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head><meta http-equiv="content-type" content="text/html; charset=utf-8" />
<title>[207458] trunk/Source</title>
</head>
<body>
<style type="text/css"><!--
#msg dl.meta { border: 1px #006 solid; background: #369; padding: 6px; color: #fff; }
#msg dl.meta dt { float: left; width: 6em; font-weight: bold; }
#msg dt:after { content:':';}
#msg dl, #msg dt, #msg ul, #msg li, #header, #footer, #logmsg { font-family: verdana,arial,helvetica,sans-serif; font-size: 10pt; }
#msg dl a { font-weight: bold}
#msg dl a:link { color:#fc3; }
#msg dl a:active { color:#ff0; }
#msg dl a:visited { color:#cc6; }
h3 { font-family: verdana,arial,helvetica,sans-serif; font-size: 10pt; font-weight: bold; }
#msg pre { overflow: auto; background: #ffc; border: 1px #fa0 solid; padding: 6px; }
#logmsg { background: #ffc; border: 1px #fa0 solid; padding: 1em 1em 0 1em; }
#logmsg p, #logmsg pre, #logmsg blockquote { margin: 0 0 1em 0; }
#logmsg p, #logmsg li, #logmsg dt, #logmsg dd { line-height: 14pt; }
#logmsg h1, #logmsg h2, #logmsg h3, #logmsg h4, #logmsg h5, #logmsg h6 { margin: .5em 0; }
#logmsg h1:first-child, #logmsg h2:first-child, #logmsg h3:first-child, #logmsg h4:first-child, #logmsg h5:first-child, #logmsg h6:first-child { margin-top: 0; }
#logmsg ul, #logmsg ol { padding: 0; list-style-position: inside; margin: 0 0 0 1em; }
#logmsg ul { text-indent: -1em; padding-left: 1em; }#logmsg ol { text-indent: -1.5em; padding-left: 1.5em; }
#logmsg > ul, #logmsg > ol { margin: 0 0 1em 0; }
#logmsg pre { background: #eee; padding: 1em; }
#logmsg blockquote { border: 1px solid #fa0; border-left-width: 10px; padding: 1em 1em 0 1em; background: white;}
#logmsg dl { margin: 0; }
#logmsg dt { font-weight: bold; }
#logmsg dd { margin: 0; padding: 0 0 0.5em 0; }
#logmsg dd:before { content:'\00bb';}
#logmsg table { border-spacing: 0px; border-collapse: collapse; border-top: 4px solid #fa0; border-bottom: 1px solid #fa0; background: #fff; }
#logmsg table th { text-align: left; font-weight: normal; padding: 0.2em 0.5em; border-top: 1px dotted #fa0; }
#logmsg table td { text-align: right; border-top: 1px dotted #fa0; padding: 0.2em 0.5em; }
#logmsg table thead th { text-align: center; border-bottom: 1px solid #fa0; }
#logmsg table th.Corner { text-align: left; }
#logmsg hr { border: none 0; border-top: 2px dashed #fa0; height: 1px; }
#header, #footer { color: #fff; background: #636; border: 1px #300 solid; padding: 6px; }
#patch { width: 100%; }
#patch h4 {font-family: verdana,arial,helvetica,sans-serif;font-size:10pt;padding:8px;background:#369;color:#fff;margin:0;}
#patch .propset h4, #patch .binary h4 {margin:0;}
#patch pre {padding:0;line-height:1.2em;margin:0;}
#patch .diff {width:100%;background:#eee;padding: 0 0 10px 0;overflow:auto;}
#patch .propset .diff, #patch .binary .diff {padding:10px 0;}
#patch span {display:block;padding:0 10px;}
#patch .modfile, #patch .addfile, #patch .delfile, #patch .propset, #patch .binary, #patch .copfile {border:1px solid #ccc;margin:10px 0;}
#patch ins {background:#dfd;text-decoration:none;display:block;padding:0 10px;}
#patch del {background:#fdd;text-decoration:none;display:block;padding:0 10px;}
#patch .lines, .info {color:#888;background:#fff;}
--></style>
<div id="msg">
<dl class="meta">
<dt>Revision</dt> <dd><a href="http://trac.webkit.org/projects/webkit/changeset/207458">207458</a></dd>
<dt>Author</dt> <dd>antti@apple.com</dd>
<dt>Date</dt> <dd>2016-10-18 05:28:55 -0700 (Tue, 18 Oct 2016)</dd>
</dl>
<h3>Log Message</h3>
<pre>Rename setNeedsStyleRecalc to invalidateStyle
https://bugs.webkit.org/show_bug.cgi?id=163542
Reviewed by Darin Adler.
Source/WebCore:
Also rename StyleChangeType enum and some related functions for clarity. For example
element.setNeedsStyleRecalc(SyntheticStyleChange);
becomes
element.invalidateStyleAndLayerComposition();
* WebCore.xcodeproj/project.pbxproj:
* css/StyleInvalidationAnalysis.cpp:
(WebCore::StyleInvalidationAnalysis::invalidateIfNeeded):
* dom/Document.cpp:
(WebCore::Document::recalcStyle):
(WebCore::Document::updateViewportUnitsOnResize):
(WebCore::Document::setCSSTarget):
(WebCore::unwrapFullScreenRenderer):
(WebCore::Document::setAnimatingFullScreen):
* dom/Element.cpp:
(WebCore::Element::setActive):
(WebCore::Element::setFocus):
(WebCore::Element::setHovered):
(WebCore::Element::attributeChanged):
(WebCore::Element::invalidateStyle):
(WebCore::Element::invalidateStyleAndLayerComposition):
(WebCore::Element::invalidateStyleForSubtree):
(WebCore::Element::invalidateStyleAndRenderersForSubtree):
Move public invalidation functions to Element tightening typing.
Use separate functions instead of enum values.
This way the call sites look nicer and only useful combinations are exposed.
(WebCore::Element::addShadowRoot):
(WebCore::checkForEmptyStyleChange):
(WebCore::checkForSiblingStyleChanges):
(WebCore::Element::needsStyleInvalidation):
(WebCore::Element::setContainsFullScreenElement):
* dom/Element.h:
(WebCore::Element::setHasFocusWithin):
* dom/Node.cpp:
(WebCore::computeEditabilityFromComputedStyle):
(WebCore::Node::adjustStyleValidity):
Update validity and mode separately. There was a potential bug here where
SyntheticStyleChange could overwrite FullStyleChange (no known repro).
(WebCore::Node::updateAncestorsForStyleRecalc):
(WebCore::Node::invalidateStyle):
(WebCore::Node::insertedInto):
(WebCore::Node::setNeedsStyleRecalc): Deleted.
* dom/Node.h:
(WebCore::Node::needsStyleRecalc):
(WebCore::Node::styleValidity):
(WebCore::Node::styleResolutionShouldRecompositeLayer):
(WebCore::Node::setHasValidStyle):
(WebCore::Node::styleChangeType): Deleted.
(WebCore::Node::clearNeedsStyleRecalc): Deleted.
(WebCore::Node::setStyleChange): Deleted.
* dom/RadioButtonGroups.cpp:
(WebCore::RadioButtonGroup::remove):
(WebCore::RadioButtonGroup::setNeedsStyleRecalcForAllButtons):
* dom/ShadowRoot.cpp:
(WebCore::ShadowRoot::setResetStyleInheritance):
* dom/SlotAssignment.cpp:
(WebCore::SlotAssignment::addSlotElementByName):
(WebCore::SlotAssignment::removeSlotElementByName):
(WebCore::SlotAssignment::didChangeSlot):
* dom/StyledElement.cpp:
(WebCore::StyledElement::attributeChanged):
(WebCore::StyledElement::styleAttributeChanged):
(WebCore::StyledElement::invalidateStyleAttribute):
* dom/Text.cpp:
(WebCore::Text::updateRendererAfterContentChange):
* dom/VisitedLinkState.cpp:
(WebCore::VisitedLinkState::invalidateStyleForAllLinks):
(WebCore::VisitedLinkState::invalidateStyleForLink):
* editing/FrameSelection.cpp:
(WebCore::FrameSelection::focusedOrActiveStateChanged):
* html/BaseDateAndTimeInputType.cpp:
(WebCore::BaseDateAndTimeInputType::minOrMaxAttributeChanged):
* html/FileInputType.cpp:
(WebCore::FileInputType::setValue):
* html/HTMLAnchorElement.cpp:
(WebCore::HTMLAnchorElement::parseAttribute):
* html/HTMLBodyElement.cpp:
(WebCore::HTMLBodyElement::parseAttribute):
* html/HTMLCanvasElement.cpp:
(WebCore::HTMLCanvasElement::getContext):
(WebCore::HTMLCanvasElement::createImageBuffer):
* html/HTMLElement.cpp:
(WebCore::HTMLElement::adjustDirectionalityIfNeededAfterChildAttributeChanged):
(WebCore::HTMLElement::calculateAndAdjustDirectionality):
* html/HTMLFieldSetElement.cpp:
(WebCore::HTMLFieldSetElement::addInvalidDescendant):
(WebCore::HTMLFieldSetElement::removeInvalidDescendant):
* html/HTMLFormControlElement.cpp:
(WebCore::HTMLFormControlElement::disabledStateChanged):
(WebCore::HTMLFormControlElement::readOnlyAttributeChanged):
(WebCore::HTMLFormControlElement::requiredAttributeChanged):
(WebCore::HTMLFormControlElement::setNeedsWillValidateCheck):
(WebCore::HTMLFormControlElement::updateValidity):
* html/HTMLFormElement.cpp:
(WebCore::HTMLFormElement::registerFormElement):
(WebCore::HTMLFormElement::registerInvalidAssociatedFormControl):
(WebCore::HTMLFormElement::removeInvalidAssociatedFormControlIfNeeded):
(WebCore::HTMLFormElement::resetDefaultButton):
* html/HTMLFrameElementBase.cpp:
(WebCore::HTMLFrameElementBase::finishedInsertingSubtree):
* html/HTMLFrameOwnerElement.cpp:
(WebCore::HTMLFrameOwnerElement::scheduleinvalidateStyleAndLayerComposition):
(WebCore::HTMLFrameOwnerElement::scheduleSetNeedsStyleRecalc): Deleted.
* html/HTMLFrameOwnerElement.h:
* html/HTMLFrameSetElement.cpp:
(WebCore::HTMLFrameSetElement::parseAttribute):
(WebCore::HTMLFrameSetElement::willRecalcStyle):
* html/HTMLInputElement.cpp:
(WebCore::HTMLInputElement::runPostTypeUpdateTasks):
(WebCore::HTMLInputElement::parseAttribute):
(WebCore::HTMLInputElement::setChecked):
(WebCore::HTMLInputElement::setIndeterminate):
(WebCore::HTMLInputElement::setAutoFilled):
(WebCore::HTMLInputElement::maxLengthAttributeChanged):
(WebCore::HTMLInputElement::minLengthAttributeChanged):
* html/HTMLLinkElement.cpp:
(WebCore::HTMLLinkElement::parseAttribute):
* html/HTMLMediaElement.cpp:
(WebCore::HTMLMediaElement::mediaPlayerRenderingModeChanged):
(WebCore::HTMLMediaElement::setVideoFullscreenLayer):
* html/HTMLObjectElement.cpp:
(WebCore::HTMLObjectElement::parseAttribute):
(WebCore::HTMLObjectElement::childrenChanged):
(WebCore::HTMLObjectElement::renderFallbackContent):
* html/HTMLOptGroupElement.cpp:
(WebCore::HTMLOptGroupElement::parseAttribute):
* html/HTMLOptionElement.cpp:
(WebCore::HTMLOptionElement::parseAttribute):
(WebCore::HTMLOptionElement::setSelectedState):
* html/HTMLPlugInElement.cpp:
(WebCore::HTMLPlugInElement::didAddUserAgentShadowRoot):
* html/HTMLPlugInImageElement.cpp:
(WebCore::HTMLPlugInImageElement::setDisplayState):
(WebCore::HTMLPlugInImageElement::willRecalcStyle):
(WebCore::HTMLPlugInImageElement::finishParsingChildren):
(WebCore::HTMLPlugInImageElement::resumeFromDocumentSuspension):
(WebCore::HTMLPlugInImageElement::removeSnapshotTimerFired):
(WebCore::HTMLPlugInImageElement::restartSnapshottedPlugIn):
* html/HTMLProgressElement.cpp:
(WebCore::HTMLProgressElement::didElementStateChange):
* html/HTMLSelectElement.cpp:
(WebCore::HTMLSelectElement::parseAttribute):
(WebCore::HTMLSelectElement::setRecalcListItems):
(WebCore::HTMLSelectElement::parseMultipleAttribute):
(WebCore::HTMLSelectElement::reset):
* html/HTMLTableElement.cpp:
(WebCore::isTableCellAncestor):
(WebCore::setTableCellsChanged):
(WebCore::HTMLTableElement::parseAttribute):
* html/HTMLTextAreaElement.cpp:
(WebCore::HTMLTextAreaElement::setValueCommon):
* html/HTMLTextFormControlElement.cpp:
(WebCore::HTMLTextFormControlElement::updatePlaceholderVisibility):
* html/InputType.cpp:
(WebCore::InputType::setValue):
* html/NumberInputType.cpp:
(WebCore::NumberInputType::minOrMaxAttributeChanged):
* html/TextFieldInputType.cpp:
(WebCore::TextFieldInputType::subtreeHasChanged):
* mathml/MathMLElement.cpp:
(WebCore::MathMLElement::parseAttribute):
* mathml/MathMLSelectElement.cpp:
(WebCore::MathMLSelectElement::updateSelectedChild):
* page/animation/AnimationBase.cpp:
(WebCore::AnimationBase::setNeedsStyleRecalc):
* page/animation/AnimationController.cpp:
(WebCore::AnimationControllerPrivate::clear):
(WebCore::AnimationControllerPrivate::updateAnimations):
(WebCore::AnimationControllerPrivate::fireEventsAndUpdateStyle):
(WebCore::AnimationControllerPrivate::pauseAnimationAtTime):
(WebCore::AnimationControllerPrivate::pauseTransitionAtTime):
(WebCore::AnimationController::cancelAnimations):
* rendering/RenderImage.cpp:
(WebCore::RenderImage::imageChanged):
* rendering/RenderLayer.cpp:
(WebCore::RenderLayer::calculateClipRects):
* rendering/RenderLayerCompositor.cpp:
(WebCore::RenderLayerCompositor::attachRootLayer):
(WebCore::RenderLayerCompositor::detachRootLayer):
(WebCore::RenderLayerCompositor::notifyIFramesOfCompositingChange):
* rendering/RenderObject.cpp:
(WebCore::RenderObject::updateDragState):
* rendering/svg/SVGResourcesCache.cpp:
(WebCore::SVGResourcesCache::clientStyleChanged):
* style/AttributeChangeInvalidation.cpp:
(WebCore::Style::AttributeChangeInvalidation::invalidateStyle):
* style/ClassChangeInvalidation.cpp:
(WebCore::Style::ClassChangeInvalidation::invalidateStyle):
* style/IdChangeInvalidation.cpp:
(WebCore::Style::IdChangeInvalidation::invalidateStyle):
* style/RenderTreeUpdater.cpp:
(WebCore::RenderTreeUpdater::updateElementRenderer):
* style/StyleScope.cpp:
(WebCore::Style::Scope::updateActiveStyleSheets):
* style/StyleTreeResolver.cpp:
(WebCore::Style::resetStyleForNonRenderedDescendants):
(WebCore::Style::TreeResolver::resolveElement):
(WebCore::Style::TreeResolver::createAnimatedElementUpdate):
(WebCore::Style::TreeResolver::popParent):
(WebCore::Style::clearNeedsStyleResolution):
(WebCore::Style::TreeResolver::resolveComposedTree):
* style/StyleUpdate.h:
* style/StyleValidity.h: Added.
StyleChangeType enum splits into Style::Validity and Style::InvalidationMode.
Move to a file of its own.
* svg/SVGAElement.cpp:
(WebCore::SVGAElement::svgAttributeChanged):
* svg/SVGAnimateElementBase.cpp:
(WebCore::applyCSSPropertyToTarget):
(WebCore::removeCSSPropertyFromTarget):
* svg/SVGElement.cpp:
(WebCore::SVGElement::willRecalcStyle):
* svg/SVGElement.h:
(WebCore::SVGElement::invalidateSVGPresentationAttributeStyle):
* svg/SVGTests.cpp:
(WebCore::SVGTests::handleAttributeChange):
* svg/SVGUseElement.cpp:
(WebCore::SVGUseElement::invalidateShadowTree):
* testing/Internals.cpp:
(WebCore::styleValidityToToString):
(WebCore::Internals::styleChangeType):
(WebCore::styleChangeTypeToString): Deleted.
Source/WebKit/mac:
* Plugins/Hosted/WebHostedNetscapePluginView.mm:
(-[WebHostedNetscapePluginView createPluginLayer]):
* Plugins/WebNetscapePluginView.mm:
(-[WebNetscapePluginView createPlugin]):
Source/WebKit2:
* WebProcess/Plugins/PluginView.cpp:
(WebKit::PluginView::didInitializePlugin):
(WebKit::PluginView::pluginProcessCrashed):</pre>
<h3>Modified Paths</h3>
<ul>
<li><a href="#trunkSourceWebCoreChangeLog">trunk/Source/WebCore/ChangeLog</a></li>
<li><a href="#trunkSourceWebCoreWebCorexcodeprojprojectpbxproj">trunk/Source/WebCore/WebCore.xcodeproj/project.pbxproj</a></li>
<li><a href="#trunkSourceWebCorecssStyleInvalidationAnalysiscpp">trunk/Source/WebCore/css/StyleInvalidationAnalysis.cpp</a></li>
<li><a href="#trunkSourceWebCoredomDocumentcpp">trunk/Source/WebCore/dom/Document.cpp</a></li>
<li><a href="#trunkSourceWebCoredomElementcpp">trunk/Source/WebCore/dom/Element.cpp</a></li>
<li><a href="#trunkSourceWebCoredomElementh">trunk/Source/WebCore/dom/Element.h</a></li>
<li><a href="#trunkSourceWebCoredomNodecpp">trunk/Source/WebCore/dom/Node.cpp</a></li>
<li><a href="#trunkSourceWebCoredomNodeh">trunk/Source/WebCore/dom/Node.h</a></li>
<li><a href="#trunkSourceWebCoredomRadioButtonGroupscpp">trunk/Source/WebCore/dom/RadioButtonGroups.cpp</a></li>
<li><a href="#trunkSourceWebCoredomShadowRootcpp">trunk/Source/WebCore/dom/ShadowRoot.cpp</a></li>
<li><a href="#trunkSourceWebCoredomSlotAssignmentcpp">trunk/Source/WebCore/dom/SlotAssignment.cpp</a></li>
<li><a href="#trunkSourceWebCoredomStyledElementcpp">trunk/Source/WebCore/dom/StyledElement.cpp</a></li>
<li><a href="#trunkSourceWebCoredomTextcpp">trunk/Source/WebCore/dom/Text.cpp</a></li>
<li><a href="#trunkSourceWebCoredomVisitedLinkStatecpp">trunk/Source/WebCore/dom/VisitedLinkState.cpp</a></li>
<li><a href="#trunkSourceWebCoreeditingFrameSelectioncpp">trunk/Source/WebCore/editing/FrameSelection.cpp</a></li>
<li><a href="#trunkSourceWebCorehtmlBaseDateAndTimeInputTypecpp">trunk/Source/WebCore/html/BaseDateAndTimeInputType.cpp</a></li>
<li><a href="#trunkSourceWebCorehtmlFileInputTypecpp">trunk/Source/WebCore/html/FileInputType.cpp</a></li>
<li><a href="#trunkSourceWebCorehtmlHTMLAnchorElementcpp">trunk/Source/WebCore/html/HTMLAnchorElement.cpp</a></li>
<li><a href="#trunkSourceWebCorehtmlHTMLBodyElementcpp">trunk/Source/WebCore/html/HTMLBodyElement.cpp</a></li>
<li><a href="#trunkSourceWebCorehtmlHTMLCanvasElementcpp">trunk/Source/WebCore/html/HTMLCanvasElement.cpp</a></li>
<li><a href="#trunkSourceWebCorehtmlHTMLElementcpp">trunk/Source/WebCore/html/HTMLElement.cpp</a></li>
<li><a href="#trunkSourceWebCorehtmlHTMLFieldSetElementcpp">trunk/Source/WebCore/html/HTMLFieldSetElement.cpp</a></li>
<li><a href="#trunkSourceWebCorehtmlHTMLFormControlElementcpp">trunk/Source/WebCore/html/HTMLFormControlElement.cpp</a></li>
<li><a href="#trunkSourceWebCorehtmlHTMLFormElementcpp">trunk/Source/WebCore/html/HTMLFormElement.cpp</a></li>
<li><a href="#trunkSourceWebCorehtmlHTMLFrameElementBasecpp">trunk/Source/WebCore/html/HTMLFrameElementBase.cpp</a></li>
<li><a href="#trunkSourceWebCorehtmlHTMLFrameOwnerElementcpp">trunk/Source/WebCore/html/HTMLFrameOwnerElement.cpp</a></li>
<li><a href="#trunkSourceWebCorehtmlHTMLFrameOwnerElementh">trunk/Source/WebCore/html/HTMLFrameOwnerElement.h</a></li>
<li><a href="#trunkSourceWebCorehtmlHTMLFrameSetElementcpp">trunk/Source/WebCore/html/HTMLFrameSetElement.cpp</a></li>
<li><a href="#trunkSourceWebCorehtmlHTMLInputElementcpp">trunk/Source/WebCore/html/HTMLInputElement.cpp</a></li>
<li><a href="#trunkSourceWebCorehtmlHTMLLinkElementcpp">trunk/Source/WebCore/html/HTMLLinkElement.cpp</a></li>
<li><a href="#trunkSourceWebCorehtmlHTMLMediaElementcpp">trunk/Source/WebCore/html/HTMLMediaElement.cpp</a></li>
<li><a href="#trunkSourceWebCorehtmlHTMLObjectElementcpp">trunk/Source/WebCore/html/HTMLObjectElement.cpp</a></li>
<li><a href="#trunkSourceWebCorehtmlHTMLOptGroupElementcpp">trunk/Source/WebCore/html/HTMLOptGroupElement.cpp</a></li>
<li><a href="#trunkSourceWebCorehtmlHTMLOptionElementcpp">trunk/Source/WebCore/html/HTMLOptionElement.cpp</a></li>
<li><a href="#trunkSourceWebCorehtmlHTMLPlugInElementcpp">trunk/Source/WebCore/html/HTMLPlugInElement.cpp</a></li>
<li><a href="#trunkSourceWebCorehtmlHTMLPlugInImageElementcpp">trunk/Source/WebCore/html/HTMLPlugInImageElement.cpp</a></li>
<li><a href="#trunkSourceWebCorehtmlHTMLProgressElementcpp">trunk/Source/WebCore/html/HTMLProgressElement.cpp</a></li>
<li><a href="#trunkSourceWebCorehtmlHTMLSelectElementcpp">trunk/Source/WebCore/html/HTMLSelectElement.cpp</a></li>
<li><a href="#trunkSourceWebCorehtmlHTMLTableElementcpp">trunk/Source/WebCore/html/HTMLTableElement.cpp</a></li>
<li><a href="#trunkSourceWebCorehtmlHTMLTextAreaElementcpp">trunk/Source/WebCore/html/HTMLTextAreaElement.cpp</a></li>
<li><a href="#trunkSourceWebCorehtmlHTMLTextFormControlElementcpp">trunk/Source/WebCore/html/HTMLTextFormControlElement.cpp</a></li>
<li><a href="#trunkSourceWebCorehtmlInputTypecpp">trunk/Source/WebCore/html/InputType.cpp</a></li>
<li><a href="#trunkSourceWebCorehtmlNumberInputTypecpp">trunk/Source/WebCore/html/NumberInputType.cpp</a></li>
<li><a href="#trunkSourceWebCorehtmlTextFieldInputTypecpp">trunk/Source/WebCore/html/TextFieldInputType.cpp</a></li>
<li><a href="#trunkSourceWebCoremathmlMathMLElementcpp">trunk/Source/WebCore/mathml/MathMLElement.cpp</a></li>
<li><a href="#trunkSourceWebCoremathmlMathMLSelectElementcpp">trunk/Source/WebCore/mathml/MathMLSelectElement.cpp</a></li>
<li><a href="#trunkSourceWebCorepageanimationAnimationBasecpp">trunk/Source/WebCore/page/animation/AnimationBase.cpp</a></li>
<li><a href="#trunkSourceWebCorepageanimationAnimationControllercpp">trunk/Source/WebCore/page/animation/AnimationController.cpp</a></li>
<li><a href="#trunkSourceWebCorerenderingRenderImagecpp">trunk/Source/WebCore/rendering/RenderImage.cpp</a></li>
<li><a href="#trunkSourceWebCorerenderingRenderLayercpp">trunk/Source/WebCore/rendering/RenderLayer.cpp</a></li>
<li><a href="#trunkSourceWebCorerenderingRenderLayerCompositorcpp">trunk/Source/WebCore/rendering/RenderLayerCompositor.cpp</a></li>
<li><a href="#trunkSourceWebCorerenderingRenderObjectcpp">trunk/Source/WebCore/rendering/RenderObject.cpp</a></li>
<li><a href="#trunkSourceWebCorerenderingsvgSVGResourcesCachecpp">trunk/Source/WebCore/rendering/svg/SVGResourcesCache.cpp</a></li>
<li><a href="#trunkSourceWebCorestyleAttributeChangeInvalidationcpp">trunk/Source/WebCore/style/AttributeChangeInvalidation.cpp</a></li>
<li><a href="#trunkSourceWebCorestyleClassChangeInvalidationcpp">trunk/Source/WebCore/style/ClassChangeInvalidation.cpp</a></li>
<li><a href="#trunkSourceWebCorestyleIdChangeInvalidationcpp">trunk/Source/WebCore/style/IdChangeInvalidation.cpp</a></li>
<li><a href="#trunkSourceWebCorestyleRenderTreeUpdatercpp">trunk/Source/WebCore/style/RenderTreeUpdater.cpp</a></li>
<li><a href="#trunkSourceWebCorestyleStyleScopecpp">trunk/Source/WebCore/style/StyleScope.cpp</a></li>
<li><a href="#trunkSourceWebCorestyleStyleTreeResolvercpp">trunk/Source/WebCore/style/StyleTreeResolver.cpp</a></li>
<li><a href="#trunkSourceWebCorestyleStyleUpdateh">trunk/Source/WebCore/style/StyleUpdate.h</a></li>
<li><a href="#trunkSourceWebCoresvgSVGAElementcpp">trunk/Source/WebCore/svg/SVGAElement.cpp</a></li>
<li><a href="#trunkSourceWebCoresvgSVGAnimateElementBasecpp">trunk/Source/WebCore/svg/SVGAnimateElementBase.cpp</a></li>
<li><a href="#trunkSourceWebCoresvgSVGElementcpp">trunk/Source/WebCore/svg/SVGElement.cpp</a></li>
<li><a href="#trunkSourceWebCoresvgSVGElementh">trunk/Source/WebCore/svg/SVGElement.h</a></li>
<li><a href="#trunkSourceWebCoresvgSVGTestscpp">trunk/Source/WebCore/svg/SVGTests.cpp</a></li>
<li><a href="#trunkSourceWebCoresvgSVGUseElementcpp">trunk/Source/WebCore/svg/SVGUseElement.cpp</a></li>
<li><a href="#trunkSourceWebCoretestingInternalscpp">trunk/Source/WebCore/testing/Internals.cpp</a></li>
<li><a href="#trunkSourceWebKitmacChangeLog">trunk/Source/WebKit/mac/ChangeLog</a></li>
<li><a href="#trunkSourceWebKitmacPluginsHostedWebHostedNetscapePluginViewmm">trunk/Source/WebKit/mac/Plugins/Hosted/WebHostedNetscapePluginView.mm</a></li>
<li><a href="#trunkSourceWebKitmacPluginsWebNetscapePluginViewmm">trunk/Source/WebKit/mac/Plugins/WebNetscapePluginView.mm</a></li>
<li><a href="#trunkSourceWebKit2ChangeLog">trunk/Source/WebKit2/ChangeLog</a></li>
<li><a href="#trunkSourceWebKit2WebProcessPluginsPluginViewcpp">trunk/Source/WebKit2/WebProcess/Plugins/PluginView.cpp</a></li>
</ul>
<h3>Added Paths</h3>
<ul>
<li><a href="#trunkSourceWebCorestyleStyleValidityh">trunk/Source/WebCore/style/StyleValidity.h</a></li>
</ul>
</div>
<div id="patch">
<h3>Diff</h3>
<a id="trunkSourceWebCoreChangeLog"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/ChangeLog (207457 => 207458)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/ChangeLog        2016-10-18 09:21:58 UTC (rev 207457)
+++ trunk/Source/WebCore/ChangeLog        2016-10-18 12:28:55 UTC (rev 207458)
</span><span class="lines">@@ -1,3 +1,242 @@
</span><ins>+2016-10-18 Antti Koivisto <antti@apple.com>
+
+ Rename setNeedsStyleRecalc to invalidateStyle
+ https://bugs.webkit.org/show_bug.cgi?id=163542
+
+ Reviewed by Darin Adler.
+
+ Also rename StyleChangeType enum and some related functions for clarity. For example
+
+ element.setNeedsStyleRecalc(SyntheticStyleChange);
+
+ becomes
+
+ element.invalidateStyleAndLayerComposition();
+
+ * WebCore.xcodeproj/project.pbxproj:
+ * css/StyleInvalidationAnalysis.cpp:
+ (WebCore::StyleInvalidationAnalysis::invalidateIfNeeded):
+ * dom/Document.cpp:
+ (WebCore::Document::recalcStyle):
+ (WebCore::Document::updateViewportUnitsOnResize):
+ (WebCore::Document::setCSSTarget):
+ (WebCore::unwrapFullScreenRenderer):
+ (WebCore::Document::setAnimatingFullScreen):
+ * dom/Element.cpp:
+ (WebCore::Element::setActive):
+ (WebCore::Element::setFocus):
+ (WebCore::Element::setHovered):
+ (WebCore::Element::attributeChanged):
+ (WebCore::Element::invalidateStyle):
+ (WebCore::Element::invalidateStyleAndLayerComposition):
+ (WebCore::Element::invalidateStyleForSubtree):
+ (WebCore::Element::invalidateStyleAndRenderersForSubtree):
+
+ Move public invalidation functions to Element tightening typing.
+ Use separate functions instead of enum values.
+ This way the call sites look nicer and only useful combinations are exposed.
+
+ (WebCore::Element::addShadowRoot):
+ (WebCore::checkForEmptyStyleChange):
+ (WebCore::checkForSiblingStyleChanges):
+ (WebCore::Element::needsStyleInvalidation):
+ (WebCore::Element::setContainsFullScreenElement):
+ * dom/Element.h:
+ (WebCore::Element::setHasFocusWithin):
+ * dom/Node.cpp:
+ (WebCore::computeEditabilityFromComputedStyle):
+ (WebCore::Node::adjustStyleValidity):
+
+ Update validity and mode separately. There was a potential bug here where
+ SyntheticStyleChange could overwrite FullStyleChange (no known repro).
+
+ (WebCore::Node::updateAncestorsForStyleRecalc):
+ (WebCore::Node::invalidateStyle):
+ (WebCore::Node::insertedInto):
+ (WebCore::Node::setNeedsStyleRecalc): Deleted.
+ * dom/Node.h:
+ (WebCore::Node::needsStyleRecalc):
+ (WebCore::Node::styleValidity):
+ (WebCore::Node::styleResolutionShouldRecompositeLayer):
+ (WebCore::Node::setHasValidStyle):
+ (WebCore::Node::styleChangeType): Deleted.
+ (WebCore::Node::clearNeedsStyleRecalc): Deleted.
+ (WebCore::Node::setStyleChange): Deleted.
+ * dom/RadioButtonGroups.cpp:
+ (WebCore::RadioButtonGroup::remove):
+ (WebCore::RadioButtonGroup::setNeedsStyleRecalcForAllButtons):
+ * dom/ShadowRoot.cpp:
+ (WebCore::ShadowRoot::setResetStyleInheritance):
+ * dom/SlotAssignment.cpp:
+ (WebCore::SlotAssignment::addSlotElementByName):
+ (WebCore::SlotAssignment::removeSlotElementByName):
+ (WebCore::SlotAssignment::didChangeSlot):
+ * dom/StyledElement.cpp:
+ (WebCore::StyledElement::attributeChanged):
+ (WebCore::StyledElement::styleAttributeChanged):
+ (WebCore::StyledElement::invalidateStyleAttribute):
+ * dom/Text.cpp:
+ (WebCore::Text::updateRendererAfterContentChange):
+ * dom/VisitedLinkState.cpp:
+ (WebCore::VisitedLinkState::invalidateStyleForAllLinks):
+ (WebCore::VisitedLinkState::invalidateStyleForLink):
+ * editing/FrameSelection.cpp:
+ (WebCore::FrameSelection::focusedOrActiveStateChanged):
+ * html/BaseDateAndTimeInputType.cpp:
+ (WebCore::BaseDateAndTimeInputType::minOrMaxAttributeChanged):
+ * html/FileInputType.cpp:
+ (WebCore::FileInputType::setValue):
+ * html/HTMLAnchorElement.cpp:
+ (WebCore::HTMLAnchorElement::parseAttribute):
+ * html/HTMLBodyElement.cpp:
+ (WebCore::HTMLBodyElement::parseAttribute):
+ * html/HTMLCanvasElement.cpp:
+ (WebCore::HTMLCanvasElement::getContext):
+ (WebCore::HTMLCanvasElement::createImageBuffer):
+ * html/HTMLElement.cpp:
+ (WebCore::HTMLElement::adjustDirectionalityIfNeededAfterChildAttributeChanged):
+ (WebCore::HTMLElement::calculateAndAdjustDirectionality):
+ * html/HTMLFieldSetElement.cpp:
+ (WebCore::HTMLFieldSetElement::addInvalidDescendant):
+ (WebCore::HTMLFieldSetElement::removeInvalidDescendant):
+ * html/HTMLFormControlElement.cpp:
+ (WebCore::HTMLFormControlElement::disabledStateChanged):
+ (WebCore::HTMLFormControlElement::readOnlyAttributeChanged):
+ (WebCore::HTMLFormControlElement::requiredAttributeChanged):
+ (WebCore::HTMLFormControlElement::setNeedsWillValidateCheck):
+ (WebCore::HTMLFormControlElement::updateValidity):
+ * html/HTMLFormElement.cpp:
+ (WebCore::HTMLFormElement::registerFormElement):
+ (WebCore::HTMLFormElement::registerInvalidAssociatedFormControl):
+ (WebCore::HTMLFormElement::removeInvalidAssociatedFormControlIfNeeded):
+ (WebCore::HTMLFormElement::resetDefaultButton):
+ * html/HTMLFrameElementBase.cpp:
+ (WebCore::HTMLFrameElementBase::finishedInsertingSubtree):
+ * html/HTMLFrameOwnerElement.cpp:
+ (WebCore::HTMLFrameOwnerElement::scheduleinvalidateStyleAndLayerComposition):
+ (WebCore::HTMLFrameOwnerElement::scheduleSetNeedsStyleRecalc): Deleted.
+ * html/HTMLFrameOwnerElement.h:
+ * html/HTMLFrameSetElement.cpp:
+ (WebCore::HTMLFrameSetElement::parseAttribute):
+ (WebCore::HTMLFrameSetElement::willRecalcStyle):
+ * html/HTMLInputElement.cpp:
+ (WebCore::HTMLInputElement::runPostTypeUpdateTasks):
+ (WebCore::HTMLInputElement::parseAttribute):
+ (WebCore::HTMLInputElement::setChecked):
+ (WebCore::HTMLInputElement::setIndeterminate):
+ (WebCore::HTMLInputElement::setAutoFilled):
+ (WebCore::HTMLInputElement::maxLengthAttributeChanged):
+ (WebCore::HTMLInputElement::minLengthAttributeChanged):
+ * html/HTMLLinkElement.cpp:
+ (WebCore::HTMLLinkElement::parseAttribute):
+ * html/HTMLMediaElement.cpp:
+ (WebCore::HTMLMediaElement::mediaPlayerRenderingModeChanged):
+ (WebCore::HTMLMediaElement::setVideoFullscreenLayer):
+ * html/HTMLObjectElement.cpp:
+ (WebCore::HTMLObjectElement::parseAttribute):
+ (WebCore::HTMLObjectElement::childrenChanged):
+ (WebCore::HTMLObjectElement::renderFallbackContent):
+ * html/HTMLOptGroupElement.cpp:
+ (WebCore::HTMLOptGroupElement::parseAttribute):
+ * html/HTMLOptionElement.cpp:
+ (WebCore::HTMLOptionElement::parseAttribute):
+ (WebCore::HTMLOptionElement::setSelectedState):
+ * html/HTMLPlugInElement.cpp:
+ (WebCore::HTMLPlugInElement::didAddUserAgentShadowRoot):
+ * html/HTMLPlugInImageElement.cpp:
+ (WebCore::HTMLPlugInImageElement::setDisplayState):
+ (WebCore::HTMLPlugInImageElement::willRecalcStyle):
+ (WebCore::HTMLPlugInImageElement::finishParsingChildren):
+ (WebCore::HTMLPlugInImageElement::resumeFromDocumentSuspension):
+ (WebCore::HTMLPlugInImageElement::removeSnapshotTimerFired):
+ (WebCore::HTMLPlugInImageElement::restartSnapshottedPlugIn):
+ * html/HTMLProgressElement.cpp:
+ (WebCore::HTMLProgressElement::didElementStateChange):
+ * html/HTMLSelectElement.cpp:
+ (WebCore::HTMLSelectElement::parseAttribute):
+ (WebCore::HTMLSelectElement::setRecalcListItems):
+ (WebCore::HTMLSelectElement::parseMultipleAttribute):
+ (WebCore::HTMLSelectElement::reset):
+ * html/HTMLTableElement.cpp:
+ (WebCore::isTableCellAncestor):
+ (WebCore::setTableCellsChanged):
+ (WebCore::HTMLTableElement::parseAttribute):
+ * html/HTMLTextAreaElement.cpp:
+ (WebCore::HTMLTextAreaElement::setValueCommon):
+ * html/HTMLTextFormControlElement.cpp:
+ (WebCore::HTMLTextFormControlElement::updatePlaceholderVisibility):
+ * html/InputType.cpp:
+ (WebCore::InputType::setValue):
+ * html/NumberInputType.cpp:
+ (WebCore::NumberInputType::minOrMaxAttributeChanged):
+ * html/TextFieldInputType.cpp:
+ (WebCore::TextFieldInputType::subtreeHasChanged):
+ * mathml/MathMLElement.cpp:
+ (WebCore::MathMLElement::parseAttribute):
+ * mathml/MathMLSelectElement.cpp:
+ (WebCore::MathMLSelectElement::updateSelectedChild):
+ * page/animation/AnimationBase.cpp:
+ (WebCore::AnimationBase::setNeedsStyleRecalc):
+ * page/animation/AnimationController.cpp:
+ (WebCore::AnimationControllerPrivate::clear):
+ (WebCore::AnimationControllerPrivate::updateAnimations):
+ (WebCore::AnimationControllerPrivate::fireEventsAndUpdateStyle):
+ (WebCore::AnimationControllerPrivate::pauseAnimationAtTime):
+ (WebCore::AnimationControllerPrivate::pauseTransitionAtTime):
+ (WebCore::AnimationController::cancelAnimations):
+ * rendering/RenderImage.cpp:
+ (WebCore::RenderImage::imageChanged):
+ * rendering/RenderLayer.cpp:
+ (WebCore::RenderLayer::calculateClipRects):
+ * rendering/RenderLayerCompositor.cpp:
+ (WebCore::RenderLayerCompositor::attachRootLayer):
+ (WebCore::RenderLayerCompositor::detachRootLayer):
+ (WebCore::RenderLayerCompositor::notifyIFramesOfCompositingChange):
+ * rendering/RenderObject.cpp:
+ (WebCore::RenderObject::updateDragState):
+ * rendering/svg/SVGResourcesCache.cpp:
+ (WebCore::SVGResourcesCache::clientStyleChanged):
+ * style/AttributeChangeInvalidation.cpp:
+ (WebCore::Style::AttributeChangeInvalidation::invalidateStyle):
+ * style/ClassChangeInvalidation.cpp:
+ (WebCore::Style::ClassChangeInvalidation::invalidateStyle):
+ * style/IdChangeInvalidation.cpp:
+ (WebCore::Style::IdChangeInvalidation::invalidateStyle):
+ * style/RenderTreeUpdater.cpp:
+ (WebCore::RenderTreeUpdater::updateElementRenderer):
+ * style/StyleScope.cpp:
+ (WebCore::Style::Scope::updateActiveStyleSheets):
+ * style/StyleTreeResolver.cpp:
+ (WebCore::Style::resetStyleForNonRenderedDescendants):
+ (WebCore::Style::TreeResolver::resolveElement):
+ (WebCore::Style::TreeResolver::createAnimatedElementUpdate):
+ (WebCore::Style::TreeResolver::popParent):
+ (WebCore::Style::clearNeedsStyleResolution):
+ (WebCore::Style::TreeResolver::resolveComposedTree):
+ * style/StyleUpdate.h:
+ * style/StyleValidity.h: Added.
+
+ StyleChangeType enum splits into Style::Validity and Style::InvalidationMode.
+ Move to a file of its own.
+
+ * svg/SVGAElement.cpp:
+ (WebCore::SVGAElement::svgAttributeChanged):
+ * svg/SVGAnimateElementBase.cpp:
+ (WebCore::applyCSSPropertyToTarget):
+ (WebCore::removeCSSPropertyFromTarget):
+ * svg/SVGElement.cpp:
+ (WebCore::SVGElement::willRecalcStyle):
+ * svg/SVGElement.h:
+ (WebCore::SVGElement::invalidateSVGPresentationAttributeStyle):
+ * svg/SVGTests.cpp:
+ (WebCore::SVGTests::handleAttributeChange):
+ * svg/SVGUseElement.cpp:
+ (WebCore::SVGUseElement::invalidateShadowTree):
+ * testing/Internals.cpp:
+ (WebCore::styleValidityToToString):
+ (WebCore::Internals::styleChangeType):
+ (WebCore::styleChangeTypeToString): Deleted.
+
</ins><span class="cx"> 2016-10-17 Sergio Villar Senin <svillar@igalia.com>
</span><span class="cx">
</span><span class="cx"> [css-grid] Constrain by min|max-height on auto repeat computation
</span></span></pre></div>
<a id="trunkSourceWebCoreWebCorexcodeprojprojectpbxproj"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/WebCore.xcodeproj/project.pbxproj (207457 => 207458)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/WebCore.xcodeproj/project.pbxproj        2016-10-18 09:21:58 UTC (rev 207457)
+++ trunk/Source/WebCore/WebCore.xcodeproj/project.pbxproj        2016-10-18 12:28:55 UTC (rev 207458)
</span><span class="lines">@@ -6252,6 +6252,7 @@
</span><span class="cx">                 E47B4BE90E71241600038854 /* CachedResourceHandle.cpp in Sources */ = {isa = PBXBuildFile; fileRef = E47B4BE70E71241600038854 /* CachedResourceHandle.cpp */; };
</span><span class="cx">                 E47E276516036ED200EE2AFB /* ExtensionStyleSheets.h in Headers */ = {isa = PBXBuildFile; fileRef = E47E276416036ED200EE2AFB /* ExtensionStyleSheets.h */; settings = {ATTRIBUTES = (Private, ); }; };
</span><span class="cx">                 E47E276816036EDC00EE2AFB /* ExtensionStyleSheets.cpp in Sources */ = {isa = PBXBuildFile; fileRef = E47E276716036EDC00EE2AFB /* ExtensionStyleSheets.cpp */; };
</span><ins>+                E48137B91DB3B526005C59BF /* StyleValidity.h in Headers */ = {isa = PBXBuildFile; fileRef = E48137B81DB3B526005C59BF /* StyleValidity.h */; settings = {ATTRIBUTES = (Private, ); }; };
</ins><span class="cx">                 E48944A2180B57D800F165D8 /* SimpleLineLayout.cpp in Sources */ = {isa = PBXBuildFile; fileRef = E48944A0180B57D800F165D8 /* SimpleLineLayout.cpp */; };
</span><span class="cx">                 E48944A3180B57D800F165D8 /* SimpleLineLayout.h in Headers */ = {isa = PBXBuildFile; fileRef = E48944A1180B57D800F165D8 /* SimpleLineLayout.h */; settings = {ATTRIBUTES = (Private, ); }; };
</span><span class="cx">                 E4916FF7195DF6A0005AB349 /* LayerFlushThrottleState.h in Headers */ = {isa = PBXBuildFile; fileRef = E4916FF6195DF6A0005AB349 /* LayerFlushThrottleState.h */; settings = {ATTRIBUTES = (Private, ); }; };
</span><span class="lines">@@ -14015,6 +14016,7 @@
</span><span class="cx">                 E47B4BE70E71241600038854 /* CachedResourceHandle.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = CachedResourceHandle.cpp; sourceTree = "<group>"; };
</span><span class="cx">                 E47E276416036ED200EE2AFB /* ExtensionStyleSheets.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ExtensionStyleSheets.h; sourceTree = "<group>"; };
</span><span class="cx">                 E47E276716036EDC00EE2AFB /* ExtensionStyleSheets.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = ExtensionStyleSheets.cpp; sourceTree = "<group>"; };
</span><ins>+                E48137B81DB3B526005C59BF /* StyleValidity.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = StyleValidity.h; sourceTree = "<group>"; };
</ins><span class="cx">                 E48944A0180B57D800F165D8 /* SimpleLineLayout.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = SimpleLineLayout.cpp; sourceTree = "<group>"; };
</span><span class="cx">                 E48944A1180B57D800F165D8 /* SimpleLineLayout.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SimpleLineLayout.h; sourceTree = "<group>"; };
</span><span class="cx">                 E4916FF6195DF6A0005AB349 /* LayerFlushThrottleState.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = LayerFlushThrottleState.h; sourceTree = "<group>"; };
</span><span class="lines">@@ -22696,6 +22698,7 @@
</span><span class="cx">                                 E4DEAA1617A93DC3000E0430 /* StyleTreeResolver.h */,
</span><span class="cx">                                 E42E76D91C7AF76C00E3614D /* StyleUpdate.cpp */,
</span><span class="cx">                                 E42E76DB1C7AF77600E3614D /* StyleUpdate.h */,
</span><ins>+                                E48137B81DB3B526005C59BF /* StyleValidity.h */,
</ins><span class="cx">                         );
</span><span class="cx">                         path = style;
</span><span class="cx">                         sourceTree = "<group>";
</span><span class="lines">@@ -25565,6 +25568,8 @@
</span><span class="cx">                                 BC926F810C0552470082776B /* JSHTMLFrameSetElement.h in Headers */,
</span><span class="cx">                                 A80E7B150A19D606007FB8C5 /* JSHTMLHeadElement.h in Headers */,
</span><span class="cx">                                 1AE2AA2F0A1CDAB400B42B25 /* JSHTMLHeadingElement.h in Headers */,
</span><ins>+                                E48137B91DB3B526005C59BF /* StyleValidity.h in Headers */,
+                                1A299FE81D7F5FA600A60093 /* RenderThemeCocoa.h in Headers */,
</ins><span class="cx">                                 1AE2AA310A1CDAB400B42B25 /* JSHTMLHRElement.h in Headers */,
</span><span class="cx">                                 1A85B1900A1B18A200D8C87C /* JSHTMLHtmlElement.h in Headers */,
</span><span class="cx">                                 BC4918C90BFEA050009D6316 /* JSHTMLIFrameElement.h in Headers */,
</span></span></pre></div>
<a id="trunkSourceWebCorecssStyleInvalidationAnalysiscpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/css/StyleInvalidationAnalysis.cpp (207457 => 207458)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/css/StyleInvalidationAnalysis.cpp        2016-10-18 09:21:58 UTC (rev 207457)
+++ trunk/Source/WebCore/css/StyleInvalidationAnalysis.cpp        2016-10-18 12:28:55 UTC (rev 207458)
</span><span class="lines">@@ -100,24 +100,23 @@
</span><span class="cx"> if (m_hasShadowPseudoElementRulesInAuthorSheet) {
</span><span class="cx"> // FIXME: This could do actual rule matching too.
</span><span class="cx"> if (element.shadowRoot())
</span><del>- element.setNeedsStyleRecalc();
</del><ins>+ element.invalidateStyleForSubtree();
</ins><span class="cx"> }
</span><span class="cx">
</span><del>- switch (element.styleChangeType()) {
- case NoStyleChange: {
</del><ins>+ switch (element.styleValidity()) {
+ case Style::Validity::Valid: {
</ins><span class="cx"> ElementRuleCollector ruleCollector(element, m_ruleSet, filter);
</span><span class="cx"> ruleCollector.setMode(SelectorChecker::Mode::CollectingRulesIgnoringVirtualPseudoElements);
</span><span class="cx"> ruleCollector.matchAuthorRules(false);
</span><span class="cx">
</span><span class="cx"> if (ruleCollector.hasMatchedRules())
</span><del>- element.setNeedsStyleRecalc(InlineStyleChange);
</del><ins>+ element.invalidateStyle();
</ins><span class="cx"> return CheckDescendants::Yes;
</span><span class="cx"> }
</span><del>- case InlineStyleChange:
</del><ins>+ case Style::Validity::ElementInvalid:
</ins><span class="cx"> return CheckDescendants::Yes;
</span><del>- case FullStyleChange:
- case SyntheticStyleChange:
- case ReconstructRenderTree:
</del><ins>+ case Style::Validity::SubtreeInvalid:
+ case Style::Validity::SubtreeAndRenderersInvalid:
</ins><span class="cx"> return CheckDescendants::No;
</span><span class="cx"> }
</span><span class="cx"> ASSERT_NOT_REACHED();
</span></span></pre></div>
<a id="trunkSourceWebCoredomDocumentcpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/dom/Document.cpp (207457 => 207458)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/dom/Document.cpp        2016-10-18 09:21:58 UTC (rev 207457)
+++ trunk/Source/WebCore/dom/Document.cpp        2016-10-18 12:28:55 UTC (rev 207458)
</span><span class="lines">@@ -1853,7 +1853,7 @@
</span><span class="cx">
</span><span class="cx"> m_lastStyleUpdateSizeForTesting = styleUpdate ? styleUpdate->size() : 0;
</span><span class="cx">
</span><del>- clearNeedsStyleRecalc();
</del><ins>+ setHasValidStyle();
</ins><span class="cx"> clearChildNeedsStyleRecalc();
</span><span class="cx"> unscheduleStyleRecalc();
</span><span class="cx">
</span><span class="lines">@@ -3500,7 +3500,7 @@
</span><span class="cx"> for (Element* element = ElementTraversal::firstWithin(rootNode()); element; element = ElementTraversal::nextIncludingPseudo(*element)) {
</span><span class="cx"> auto* renderer = element->renderer();
</span><span class="cx"> if (renderer && renderer->style().hasViewportUnits())
</span><del>- element->setNeedsStyleRecalc(InlineStyleChange);
</del><ins>+ element->invalidateStyle();
</ins><span class="cx"> }
</span><span class="cx"> }
</span><span class="cx">
</span><span class="lines">@@ -3818,10 +3818,10 @@
</span><span class="cx"> void Document::setCSSTarget(Element* n)
</span><span class="cx"> {
</span><span class="cx"> if (m_cssTarget)
</span><del>- m_cssTarget->setNeedsStyleRecalc();
</del><ins>+ m_cssTarget->invalidateStyleForSubtree();
</ins><span class="cx"> m_cssTarget = n;
</span><span class="cx"> if (n)
</span><del>- n->setNeedsStyleRecalc();
</del><ins>+ n->invalidateStyleForSubtree();
</ins><span class="cx"> }
</span><span class="cx">
</span><span class="cx"> void Document::registerNodeListForInvalidation(LiveNodeList& list)
</span><span class="lines">@@ -5835,8 +5835,8 @@
</span><span class="cx"> bool requiresRenderTreeRebuild;
</span><span class="cx"> fullScreenRenderer->unwrapRenderer(requiresRenderTreeRebuild);
</span><span class="cx">
</span><del>- if (requiresRenderTreeRebuild && fullScreenElement && fullScreenElement->parentNode())
- fullScreenElement->parentNode()->setNeedsStyleRecalc(ReconstructRenderTree);
</del><ins>+ if (requiresRenderTreeRebuild && fullScreenElement && fullScreenElement->parentElement())
+ fullScreenElement->parentElement()->invalidateStyleAndRenderersForSubtree();
</ins><span class="cx"> }
</span><span class="cx">
</span><span class="cx"> void Document::webkitWillEnterFullScreenForElement(Element* element)
</span><span class="lines">@@ -6027,7 +6027,7 @@
</span><span class="cx"> m_isAnimatingFullScreen = flag;
</span><span class="cx">
</span><span class="cx"> if (m_fullScreenElement && m_fullScreenElement->isDescendantOf(this)) {
</span><del>- m_fullScreenElement->setNeedsStyleRecalc();
</del><ins>+ m_fullScreenElement->invalidateStyleForSubtree();
</ins><span class="cx"> scheduleForcedStyleRecalc();
</span><span class="cx"> }
</span><span class="cx"> }
</span></span></pre></div>
<a id="trunkSourceWebCoredomElementcpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/dom/Element.cpp (207457 => 207458)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/dom/Element.cpp        2016-10-18 09:21:58 UTC (rev 207457)
+++ trunk/Source/WebCore/dom/Element.cpp        2016-10-18 12:28:55 UTC (rev 207458)
</span><span class="lines">@@ -567,7 +567,7 @@
</span><span class="cx"> const RenderStyle* renderStyle = this->renderStyle();
</span><span class="cx"> bool reactsToPress = (renderStyle && renderStyle->affectedByActive()) || styleAffectedByActive();
</span><span class="cx"> if (reactsToPress)
</span><del>- setNeedsStyleRecalc();
</del><ins>+ invalidateStyleForSubtree();
</ins><span class="cx">
</span><span class="cx"> if (!renderer())
</span><span class="cx"> return;
</span><span class="lines">@@ -612,7 +612,7 @@
</span><span class="cx"> return;
</span><span class="cx">
</span><span class="cx"> document().userActionElements().setFocused(this, flag);
</span><del>- setNeedsStyleRecalc();
</del><ins>+ invalidateStyleForSubtree();
</ins><span class="cx">
</span><span class="cx"> for (Element* element = this; element; element = element->parentOrShadowHostElement())
</span><span class="cx"> element->setHasFocusWithin(flag);
</span><span class="lines">@@ -632,13 +632,13 @@
</span><span class="cx"> // style, it would never go back to its normal style and remain
</span><span class="cx"> // stuck in its hovered style).
</span><span class="cx"> if (!flag)
</span><del>- setNeedsStyleRecalc();
</del><ins>+ invalidateStyleForSubtree();
</ins><span class="cx">
</span><span class="cx"> return;
</span><span class="cx"> }
</span><span class="cx">
</span><span class="cx"> if (renderer()->style().affectedByHover() || childrenAffectedByHover())
</span><del>- setNeedsStyleRecalc();
</del><ins>+ invalidateStyleForSubtree();
</ins><span class="cx">
</span><span class="cx"> if (renderer()->style().hasAppearance())
</span><span class="cx"> renderer()->theme().stateChanged(*renderer(), ControlStates::HoverState);
</span><span class="lines">@@ -1322,7 +1322,7 @@
</span><span class="cx"> elementData()->setHasNameAttribute(!newValue.isNull());
</span><span class="cx"> else if (name == HTMLNames::pseudoAttr) {
</span><span class="cx"> if (needsStyleInvalidation() && isInShadowTree())
</span><del>- setNeedsStyleRecalc(FullStyleChange);
</del><ins>+ invalidateStyleForSubtree();
</ins><span class="cx"> }
</span><span class="cx"> else if (name == HTMLNames::slotAttr) {
</span><span class="cx"> if (auto* parent = parentElement()) {
</span><span class="lines">@@ -1440,6 +1440,26 @@
</span><span class="cx"> return styleResolver().styleForElement(*this, parentStyle);
</span><span class="cx"> }
</span><span class="cx">
</span><ins>+void Element::invalidateStyle()
+{
+ Node::invalidateStyle(Style::Validity::ElementInvalid);
+}
+
+void Element::invalidateStyleAndLayerComposition()
+{
+ Node::invalidateStyle(Style::Validity::ElementInvalid, Style::InvalidationMode::RecompositeLayer);
+}
+
+void Element::invalidateStyleForSubtree()
+{
+ Node::invalidateStyle(Style::Validity::SubtreeInvalid);
+}
+
+void Element::invalidateStyleAndRenderersForSubtree()
+{
+ Node::invalidateStyle(Style::Validity::SubtreeAndRenderersInvalid);
+}
+
</ins><span class="cx"> #if ENABLE(WEB_ANIMATIONS)
</span><span class="cx"> WebAnimationVector Element::getAnimations()
</span><span class="cx"> {
</span><span class="lines">@@ -1754,7 +1774,7 @@
</span><span class="cx"> for (auto& target : postInsertionNotificationTargets)
</span><span class="cx"> target->finishedInsertingSubtree();
</span><span class="cx">
</span><del>- setNeedsStyleRecalc(ReconstructRenderTree);
</del><ins>+ invalidateStyleAndRenderersForSubtree();
</ins><span class="cx">
</span><span class="cx"> InspectorInstrumentation::didPushShadowRoot(*this, shadowRoot);
</span><span class="cx">
</span><span class="lines">@@ -1936,7 +1956,7 @@
</span><span class="cx"> if (element.styleAffectedByEmpty()) {
</span><span class="cx"> auto* style = element.renderStyle();
</span><span class="cx"> if (!style || (!style->emptyState() || element.hasChildNodes()))
</span><del>- element.setNeedsStyleRecalc();
</del><ins>+ element.invalidateStyleForSubtree();
</ins><span class="cx"> }
</span><span class="cx"> }
</span><span class="cx">
</span><span class="lines">@@ -1947,7 +1967,7 @@
</span><span class="cx"> // :empty selector.
</span><span class="cx"> checkForEmptyStyleChange(parent);
</span><span class="cx">
</span><del>- if (parent.styleChangeType() >= FullStyleChange)
</del><ins>+ if (parent.styleValidity() >= Style::Validity::SubtreeInvalid)
</ins><span class="cx"> return;
</span><span class="cx">
</span><span class="cx"> // :first-child. In the parser callback case, we don't have to check anything, since we were right the first time.
</span><span class="lines">@@ -1962,7 +1982,7 @@
</span><span class="cx"> if (newFirstElement != elementAfterChange) {
</span><span class="cx"> auto* style = elementAfterChange->renderStyle();
</span><span class="cx"> if (!style || style->firstChildState())
</span><del>- elementAfterChange->setNeedsStyleRecalc();
</del><ins>+ elementAfterChange->invalidateStyleForSubtree();
</ins><span class="cx"> }
</span><span class="cx">
</span><span class="cx"> // We also have to handle node removal.
</span><span class="lines">@@ -1969,7 +1989,7 @@
</span><span class="cx"> if (checkType == SiblingElementRemoved && newFirstElement == elementAfterChange && newFirstElement) {
</span><span class="cx"> auto* style = newFirstElement->renderStyle();
</span><span class="cx"> if (!style || !style->firstChildState())
</span><del>- newFirstElement->setNeedsStyleRecalc();
</del><ins>+ newFirstElement->invalidateStyleForSubtree();
</ins><span class="cx"> }
</span><span class="cx"> }
</span><span class="cx">
</span><span class="lines">@@ -1982,7 +2002,7 @@
</span><span class="cx"> if (newLastElement != elementBeforeChange) {
</span><span class="cx"> auto* style = elementBeforeChange->renderStyle();
</span><span class="cx"> if (!style || style->lastChildState())
</span><del>- elementBeforeChange->setNeedsStyleRecalc();
</del><ins>+ elementBeforeChange->invalidateStyleForSubtree();
</ins><span class="cx"> }
</span><span class="cx">
</span><span class="cx"> // We also have to handle node removal. The parser callback case is similar to node removal as well in that we need to change the last child
</span><span class="lines">@@ -1990,13 +2010,13 @@
</span><span class="cx"> if ((checkType == SiblingElementRemoved || checkType == FinishedParsingChildren) && newLastElement == elementBeforeChange && newLastElement) {
</span><span class="cx"> auto* style = newLastElement->renderStyle();
</span><span class="cx"> if (!style || !style->lastChildState())
</span><del>- newLastElement->setNeedsStyleRecalc();
</del><ins>+ newLastElement->invalidateStyleForSubtree();
</ins><span class="cx"> }
</span><span class="cx"> }
</span><span class="cx">
</span><span class="cx"> if (elementAfterChange) {
</span><span class="cx"> if (elementAfterChange->styleIsAffectedByPreviousSibling())
</span><del>- elementAfterChange->setNeedsStyleRecalc();
</del><ins>+ elementAfterChange->invalidateStyleForSubtree();
</ins><span class="cx"> else if (elementAfterChange->affectsNextSiblingElementStyle()) {
</span><span class="cx"> Element* elementToInvalidate = elementAfterChange;
</span><span class="cx"> do {
</span><span class="lines">@@ -2004,7 +2024,7 @@
</span><span class="cx"> } while (elementToInvalidate && !elementToInvalidate->styleIsAffectedByPreviousSibling());
</span><span class="cx">
</span><span class="cx"> if (elementToInvalidate)
</span><del>- elementToInvalidate->setNeedsStyleRecalc();
</del><ins>+ elementToInvalidate->invalidateStyleForSubtree();
</ins><span class="cx"> }
</span><span class="cx"> }
</span><span class="cx">
</span><span class="lines">@@ -2015,7 +2035,7 @@
</span><span class="cx"> // For performance reasons we just mark the parent node as changed, since we don't want to make childrenChanged O(n^2) by crawling all our kids
</span><span class="cx"> // here. recalcStyle will then force a walk of the children when it sees that this has happened.
</span><span class="cx"> if (parent.childrenAffectedByBackwardPositionalRules() && elementBeforeChange)
</span><del>- parent.setNeedsStyleRecalc();
</del><ins>+ parent.invalidateStyleForSubtree();
</ins><span class="cx"> }
</span><span class="cx">
</span><span class="cx"> void Element::childrenChanged(const ChildChange& change)
</span><span class="lines">@@ -2704,7 +2724,7 @@
</span><span class="cx"> {
</span><span class="cx"> if (!inRenderedDocument())
</span><span class="cx"> return false;
</span><del>- if (styleChangeType() >= FullStyleChange)
</del><ins>+ if (styleValidity() >= Style::Validity::SubtreeInvalid)
</ins><span class="cx"> return false;
</span><span class="cx"> if (document().hasPendingForcedStyleRecalc())
</span><span class="cx"> return false;
</span><span class="lines">@@ -3071,7 +3091,7 @@
</span><span class="cx"> void Element::setContainsFullScreenElement(bool flag)
</span><span class="cx"> {
</span><span class="cx"> ensureElementRareData().setContainsFullScreenElement(flag);
</span><del>- setNeedsStyleRecalc(SyntheticStyleChange);
</del><ins>+ invalidateStyleAndLayerComposition();
</ins><span class="cx"> }
</span><span class="cx">
</span><span class="cx"> static Element* parentCrossingFrameBoundaries(Element* element)
</span></span></pre></div>
<a id="trunkSourceWebCoredomElementh"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/dom/Element.h (207457 => 207458)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/dom/Element.h        2016-10-18 09:21:58 UTC (rev 207457)
+++ trunk/Source/WebCore/dom/Element.h        2016-10-18 12:28:55 UTC (rev 207458)
</span><span class="lines">@@ -543,6 +543,26 @@
</span><span class="cx"> StyleResolver& styleResolver();
</span><span class="cx"> ElementStyle resolveStyle(const RenderStyle* parentStyle);
</span><span class="cx">
</span><ins>+ // Invalidates the style of a single element. Style is resolved lazily.
+ // Descendant elements are resolved as needed, for example if an inherited property changes.
+ // This should be called whenever an element changes in a manner that can affect its style.
+ void invalidateStyle();
+
+ // As above but also call RenderElement::setStyle with StyleDifferenceRecompositeLayer flag for
+ // the element even when the style doesn't change. This is mostly needed by the animation code.
+ WEBCORE_EXPORT void invalidateStyleAndLayerComposition();
+
+ // Invalidate the element and all its descendants. This is used when there is some sort of change
+ // in the tree that may affect the style of any of the descendants and we don't know how to optimize
+ // the case to limit the scope. This is expensive and should be avoided.
+ void invalidateStyleForSubtree();
+
+ // Invalidates renderers for the element and all its descendants causing them to be torn down
+ // and rebuild during style resolution. Style is also recomputed. This is used in code dealing with
+ // custom (not style based) renderers. This is expensive and should be avoided.
+ // Elements newly added to the tree are also in this state.
+ void invalidateStyleAndRenderersForSubtree();
+
</ins><span class="cx"> bool hasDisplayContents() const;
</span><span class="cx"> void setHasDisplayContents(bool);
</span><span class="cx">
</span><span class="lines">@@ -808,7 +828,7 @@
</span><span class="cx"> return;
</span><span class="cx"> setFlag(flag, HasFocusWithin);
</span><span class="cx"> if (styleAffectedByFocusWithin())
</span><del>- setNeedsStyleRecalc();
</del><ins>+ invalidateStyleForSubtree();
</ins><span class="cx"> }
</span><span class="cx">
</span><span class="cx"> } // namespace WebCore
</span></span></pre></div>
<a id="trunkSourceWebCoredomNodecpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/dom/Node.cpp (207457 => 207458)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/dom/Node.cpp        2016-10-18 09:21:58 UTC (rev 207457)
+++ trunk/Source/WebCore/dom/Node.cpp        2016-10-18 12:28:55 UTC (rev 207458)
</span><span class="lines">@@ -666,7 +666,7 @@
</span><span class="cx"> static Node::Editability computeEditabilityFromComputedStyle(const Node& startNode, Node::UserSelectAllTreatment treatment)
</span><span class="cx"> {
</span><span class="cx"> // Ideally we'd call ASSERT(!needsStyleRecalc()) here, but
</span><del>- // ContainerNode::setFocus() calls setNeedsStyleRecalc(), so the assertion
</del><ins>+ // ContainerNode::setFocus() calls invalidateStyleForSubtree(), so the assertion
</ins><span class="cx"> // would fire in the middle of Document::setFocusedElement().
</span><span class="cx">
</span><span class="cx"> for (const Node* node = &startNode; node; node = node->parentNode()) {
</span><span class="lines">@@ -750,6 +750,16 @@
</span><span class="cx"> deref();
</span><span class="cx"> }
</span><span class="cx">
</span><ins>+void Node::adjustStyleValidity(Style::Validity validity, Style::InvalidationMode mode)
+{
+ if (validity > styleValidity()) {
+ m_nodeFlags &= ~StyleValidityMask;
+ m_nodeFlags |= static_cast<unsigned>(validity) << StyleValidityShift;
+ }
+ if (mode == Style::InvalidationMode::RecompositeLayer)
+ setFlag(StyleResolutionShouldRecompositeLayerFlag);
+}
+
</ins><span class="cx"> inline void Node::updateAncestorsForStyleRecalc()
</span><span class="cx"> {
</span><span class="cx"> auto composedAncestors = composedTreeAncestors(*this);
</span><span class="lines">@@ -758,10 +768,8 @@
</span><span class="cx"> if (it != end) {
</span><span class="cx"> it->setDirectChildNeedsStyleRecalc();
</span><span class="cx">
</span><del>- if (it->childrenAffectedByPropertyBasedBackwardPositionalRules()) {
- if (it->styleChangeType() < FullStyleChange)
- it->setStyleChange(FullStyleChange);
- }
</del><ins>+ if (it->childrenAffectedByPropertyBasedBackwardPositionalRules())
+ it->adjustStyleValidity(Style::Validity::SubtreeInvalid, Style::InvalidationMode::Normal);
</ins><span class="cx">
</span><span class="cx"> for (; it != end; ++it) {
</span><span class="cx"> // Iterator skips over shadow roots.
</span><span class="lines">@@ -782,9 +790,9 @@
</span><span class="cx"> document().scheduleStyleRecalc();
</span><span class="cx"> }
</span><span class="cx">
</span><del>-void Node::setNeedsStyleRecalc(StyleChangeType changeType)
</del><ins>+void Node::invalidateStyle(Style::Validity validity, Style::InvalidationMode mode)
</ins><span class="cx"> {
</span><del>- ASSERT(changeType != NoStyleChange);
</del><ins>+ ASSERT(validity != Style::Validity::Valid);
</ins><span class="cx"> if (!inRenderedDocument())
</span><span class="cx"> return;
</span><span class="cx">
</span><span class="lines">@@ -792,11 +800,12 @@
</span><span class="cx"> if (document().inRenderTreeUpdate())
</span><span class="cx"> return;
</span><span class="cx">
</span><del>- StyleChangeType existingChangeType = styleChangeType();
- if (changeType > existingChangeType)
- setStyleChange(changeType);
</del><ins>+ // FIXME: Why the second condition?
+ bool markAncestors = styleValidity() == Style::Validity::Valid || validity == Style::Validity::SubtreeAndRenderersInvalid;
</ins><span class="cx">
</span><del>- if (existingChangeType == NoStyleChange || changeType == ReconstructRenderTree)
</del><ins>+ adjustStyleValidity(validity, mode);
+
+ if (markAncestors)
</ins><span class="cx"> updateAncestorsForStyleRecalc();
</span><span class="cx"> }
</span><span class="cx">
</span><span class="lines">@@ -1196,7 +1205,7 @@
</span><span class="cx"> if (parentOrShadowHostNode()->isInShadowTree())
</span><span class="cx"> setFlag(IsInShadowTreeFlag);
</span><span class="cx">
</span><del>- setNeedsStyleRecalc(ReconstructRenderTree);
</del><ins>+ invalidateStyle(Style::Validity::SubtreeAndRenderersInvalid);
</ins><span class="cx">
</span><span class="cx"> return InsertionDone;
</span><span class="cx"> }
</span></span></pre></div>
<a id="trunkSourceWebCoredomNodeh"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/dom/Node.h (207457 => 207458)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/dom/Node.h        2016-10-18 09:21:58 UTC (rev 207457)
+++ trunk/Source/WebCore/dom/Node.h        2016-10-18 12:28:55 UTC (rev 207458)
</span><span class="lines">@@ -29,6 +29,7 @@
</span><span class="cx"> #include "LayoutRect.h"
</span><span class="cx"> #include "MutationObserver.h"
</span><span class="cx"> #include "RenderStyleConstants.h"
</span><ins>+#include "StyleValidity.h"
</ins><span class="cx"> #include "TreeScope.h"
</span><span class="cx"> #include <wtf/Forward.h>
</span><span class="cx"> #include <wtf/ListHashSet.h>
</span><span class="lines">@@ -61,21 +62,8 @@
</span><span class="cx"> class TouchEvent;
</span><span class="cx"> class UIRequestEvent;
</span><span class="cx">
</span><del>-const int nodeStyleChangeShift = 14;
-
</del><span class="cx"> using NodeOrString = std::experimental::variant<RefPtr<Node>, String>;
</span><span class="cx">
</span><del>-// SyntheticStyleChange means that we need to go through the entire style change logic even though
-// no style property has actually changed. It is used to restructure the tree when, for instance,
-// RenderLayers are created or destroyed due to animation changes.
-enum StyleChangeType {
- NoStyleChange = 0,
- InlineStyleChange = 1 << nodeStyleChangeShift,
- FullStyleChange = 2 << nodeStyleChangeShift,
- SyntheticStyleChange = 3 << nodeStyleChangeShift,
- ReconstructRenderTree = 4 << nodeStyleChangeShift,
-};
-
</del><span class="cx"> class NodeRareDataBase {
</span><span class="cx"> public:
</span><span class="cx"> RenderObject* renderer() const { return m_renderer; }
</span><span class="lines">@@ -321,8 +309,9 @@
</span><span class="cx"> void setUserActionElement(bool flag) { setFlag(flag, IsUserActionElement); }
</span><span class="cx">
</span><span class="cx"> bool inRenderedDocument() const;
</span><del>- bool needsStyleRecalc() const { return styleChangeType() != NoStyleChange; }
- StyleChangeType styleChangeType() const { return static_cast<StyleChangeType>(m_nodeFlags & StyleChangeMask); }
</del><ins>+ bool needsStyleRecalc() const { return styleValidity() != Style::Validity::Valid; }
+ Style::Validity styleValidity() const;
+ bool styleResolutionShouldRecompositeLayer() const;
</ins><span class="cx"> bool childNeedsStyleRecalc() const { return getFlag(ChildNeedsStyleRecalcFlag); }
</span><span class="cx"> bool styleIsAffectedByPreviousSibling() const { return getFlag(StyleIsAffectedByPreviousSibling); }
</span><span class="cx"> bool isEditingText() const { return getFlag(IsTextFlag) && getFlag(IsEditingTextOrUndefinedCustomElementFlag); }
</span><span class="lines">@@ -330,8 +319,7 @@
</span><span class="cx"> void setChildNeedsStyleRecalc() { setFlag(ChildNeedsStyleRecalcFlag); }
</span><span class="cx"> void clearChildNeedsStyleRecalc() { m_nodeFlags &= ~(ChildNeedsStyleRecalcFlag | DirectChildNeedsStyleRecalcFlag); }
</span><span class="cx">
</span><del>- WEBCORE_EXPORT void setNeedsStyleRecalc(StyleChangeType = FullStyleChange);
- void clearNeedsStyleRecalc() { m_nodeFlags &= ~StyleChangeMask; }
</del><ins>+ void setHasValidStyle();
</ins><span class="cx">
</span><span class="cx"> bool isLink() const { return getFlag(IsLinkFlag); }
</span><span class="cx"> void setIsLink(bool flag) { setFlag(flag, IsLinkFlag); }
</span><span class="lines">@@ -597,8 +585,9 @@
</span><span class="cx"> // These bits are used by derived classes, pulled up here so they can
</span><span class="cx"> // be stored in the same memory word as the Node bits above.
</span><span class="cx"> IsParsingChildrenFinishedFlag = 1 << 13, // Element
</span><del>-
- StyleChangeMask = 1 << nodeStyleChangeShift | 1 << (nodeStyleChangeShift + 1) | 1 << (nodeStyleChangeShift + 2),
</del><ins>+ StyleValidityShift = 14,
+ StyleValidityMask = 3 << StyleValidityShift,
+ StyleResolutionShouldRecompositeLayerFlag = 1 << 16,
</ins><span class="cx"> IsEditingTextOrUndefinedCustomElementFlag = 1 << 17,
</span><span class="cx"> HasFocusWithin = 1 << 18,
</span><span class="cx"> HasSyntheticAttrChildNodesFlag = 1 << 19,
</span><span class="lines">@@ -659,7 +648,7 @@
</span><span class="cx">
</span><span class="cx"> void setTreeScope(TreeScope& scope) { m_treeScope = &scope; }
</span><span class="cx">
</span><del>- void setStyleChange(StyleChangeType changeType) { m_nodeFlags = (m_nodeFlags & ~StyleChangeMask) | changeType; }
</del><ins>+ void invalidateStyle(Style::Validity, Style::InvalidationMode = Style::InvalidationMode::Normal);
</ins><span class="cx"> void updateAncestorsForStyleRecalc();
</span><span class="cx">
</span><span class="cx"> RefPtr<Node> convertNodesOrStringsIntoNode(Vector<NodeOrString>&&, ExceptionCode&);
</span><span class="lines">@@ -682,6 +671,8 @@
</span><span class="cx"> Vector<std::unique_ptr<MutationObserverRegistration>>* mutationObserverRegistry();
</span><span class="cx"> HashSet<MutationObserverRegistration*>* transientMutationObserverRegistry();
</span><span class="cx">
</span><ins>+ void adjustStyleValidity(Style::Validity, Style::InvalidationMode);
+
</ins><span class="cx"> int m_refCount;
</span><span class="cx"> mutable uint32_t m_nodeFlags;
</span><span class="cx">
</span><span class="lines">@@ -773,6 +764,22 @@
</span><span class="cx"> return parentNode();
</span><span class="cx"> }
</span><span class="cx">
</span><ins>+inline Style::Validity Node::styleValidity() const
+{
+ return static_cast<Style::Validity>((m_nodeFlags & StyleValidityMask) >> StyleValidityShift);
+}
+
+inline bool Node::styleResolutionShouldRecompositeLayer() const
+{
+ return getFlag(StyleResolutionShouldRecompositeLayerFlag);
+}
+
+inline void Node::setHasValidStyle()
+{
+ m_nodeFlags &= ~StyleValidityMask;
+ clearFlag(StyleResolutionShouldRecompositeLayerFlag);
+}
+
</ins><span class="cx"> } // namespace WebCore
</span><span class="cx">
</span><span class="cx"> #if ENABLE(TREE_DEBUGGING)
</span></span></pre></div>
<a id="trunkSourceWebCoredomRadioButtonGroupscpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/dom/RadioButtonGroups.cpp (207457 => 207458)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/dom/RadioButtonGroups.cpp        2016-10-18 09:21:58 UTC (rev 207457)
+++ trunk/Source/WebCore/dom/RadioButtonGroups.cpp        2016-10-18 12:28:55 UTC (rev 207458)
</span><span class="lines">@@ -153,7 +153,7 @@
</span><span class="cx"> --m_requiredCount;
</span><span class="cx"> }
</span><span class="cx"> if (m_checkedButton) {
</span><del>- button->setNeedsStyleRecalc();
</del><ins>+ button->invalidateStyleForSubtree();
</ins><span class="cx"> if (m_checkedButton == button) {
</span><span class="cx"> m_checkedButton = nullptr;
</span><span class="cx"> setNeedsStyleRecalcForAllButtons();
</span><span class="lines">@@ -176,7 +176,7 @@
</span><span class="cx"> {
</span><span class="cx"> for (auto& button : m_members) {
</span><span class="cx"> ASSERT(button->isRadioButton());
</span><del>- button->setNeedsStyleRecalc();
</del><ins>+ button->invalidateStyleForSubtree();
</ins><span class="cx"> }
</span><span class="cx"> }
</span><span class="cx">
</span></span></pre></div>
<a id="trunkSourceWebCoredomShadowRootcpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/dom/ShadowRoot.cpp (207457 => 207458)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/dom/ShadowRoot.cpp        2016-10-18 09:21:58 UTC (rev 207457)
+++ trunk/Source/WebCore/dom/ShadowRoot.cpp        2016-10-18 12:28:55 UTC (rev 207458)
</span><span class="lines">@@ -118,14 +118,8 @@
</span><span class="cx">
</span><span class="cx"> void ShadowRoot::setResetStyleInheritance(bool value)
</span><span class="cx"> {
</span><del>- if (isOrphan())
- return;
-
- if (value != m_resetStyleInheritance) {
- m_resetStyleInheritance = value;
- if (host())
- setNeedsStyleRecalc();
- }
</del><ins>+ // If this was ever changed after initialization, child styles would need to be invalidated here.
+ m_resetStyleInheritance = value;
</ins><span class="cx"> }
</span><span class="cx">
</span><span class="cx"> Ref<Node> ShadowRoot::cloneNodeInternal(Document&, CloningOperation)
</span></span></pre></div>
<a id="trunkSourceWebCoredomSlotAssignmentcpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/dom/SlotAssignment.cpp (207457 => 207458)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/dom/SlotAssignment.cpp        2016-10-18 09:21:58 UTC (rev 207457)
+++ trunk/Source/WebCore/dom/SlotAssignment.cpp        2016-10-18 12:28:55 UTC (rev 207458)
</span><span class="lines">@@ -77,7 +77,7 @@
</span><span class="cx"> #endif
</span><span class="cx">
</span><span class="cx"> // FIXME: We should be able to do a targeted reconstruction.
</span><del>- shadowRoot.host()->setNeedsStyleRecalc(ReconstructRenderTree);
</del><ins>+ shadowRoot.host()->invalidateStyleAndRenderersForSubtree();
</ins><span class="cx">
</span><span class="cx"> const AtomicString& slotName = slotNameFromAttributeValue(name);
</span><span class="cx"> auto addResult = m_slots.add(slotName, std::unique_ptr<SlotInfo>());
</span><span class="lines">@@ -109,7 +109,7 @@
</span><span class="cx"> #endif
</span><span class="cx">
</span><span class="cx"> if (auto* host = shadowRoot.host()) // FIXME: We should be able to do a targeted reconstruction.
</span><del>- host->setNeedsStyleRecalc(ReconstructRenderTree);
</del><ins>+ host->invalidateStyleAndRenderersForSubtree();
</ins><span class="cx">
</span><span class="cx"> auto it = m_slots.find(slotNameFromAttributeValue(name));
</span><span class="cx"> RELEASE_ASSERT(it != m_slots.end());
</span><span class="lines">@@ -154,7 +154,7 @@
</span><span class="cx"> return;
</span><span class="cx">
</span><span class="cx"> if (changeType == ChangeType::DirectChild) {
</span><del>- shadowRoot.host()->setNeedsStyleRecalc(ReconstructRenderTree);
</del><ins>+ shadowRoot.host()->invalidateStyleAndRenderersForSubtree();
</ins><span class="cx"> m_slotAssignmentsIsValid = false;
</span><span class="cx"> }
</span><span class="cx">
</span></span></pre></div>
<a id="trunkSourceWebCoredomStyledElementcpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/dom/StyledElement.cpp (207457 => 207458)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/dom/StyledElement.cpp        2016-10-18 09:21:58 UTC (rev 207457)
+++ trunk/Source/WebCore/dom/StyledElement.cpp        2016-10-18 12:28:55 UTC (rev 207458)
</span><span class="lines">@@ -159,7 +159,7 @@
</span><span class="cx"> styleAttributeChanged(newValue, reason);
</span><span class="cx"> else if (isPresentationAttribute(name)) {
</span><span class="cx"> elementData()->setPresentationAttributeStyleIsDirty(true);
</span><del>- setNeedsStyleRecalc(InlineStyleChange);
</del><ins>+ invalidateStyle();
</ins><span class="cx"> }
</span><span class="cx">
</span><span class="cx"> Element::attributeChanged(name, oldValue, newValue, reason);
</span><span class="lines">@@ -216,7 +216,7 @@
</span><span class="cx">
</span><span class="cx"> elementData()->setStyleAttributeIsDirty(false);
</span><span class="cx">
</span><del>- setNeedsStyleRecalc(InlineStyleChange);
</del><ins>+ invalidateStyle();
</ins><span class="cx"> InspectorInstrumentation::didInvalidateStyleAttr(document(), *this);
</span><span class="cx"> }
</span><span class="cx">
</span><span class="lines">@@ -226,7 +226,7 @@
</span><span class="cx"> document().setHasElementUsingStyleBasedEditability();
</span><span class="cx">
</span><span class="cx"> elementData()->setStyleAttributeIsDirty(true);
</span><del>- setNeedsStyleRecalc(InlineStyleChange);
</del><ins>+ invalidateStyle();
</ins><span class="cx"> }
</span><span class="cx">
</span><span class="cx"> void StyledElement::inlineStyleChanged()
</span></span></pre></div>
<a id="trunkSourceWebCoredomTextcpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/dom/Text.cpp (207457 => 207458)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/dom/Text.cpp        2016-10-18 09:21:58 UTC (rev 207457)
+++ trunk/Source/WebCore/dom/Text.cpp        2016-10-18 12:28:55 UTC (rev 207458)
</span><span class="lines">@@ -221,7 +221,7 @@
</span><span class="cx"> void Text::updateRendererAfterContentChange(unsigned offsetOfReplacedData, unsigned lengthOfReplacedData)
</span><span class="cx"> {
</span><span class="cx"> ASSERT(parentNode());
</span><del>- if (styleChangeType() == ReconstructRenderTree)
</del><ins>+ if (styleValidity() >= Style::Validity::SubtreeAndRenderersInvalid)
</ins><span class="cx"> return;
</span><span class="cx">
</span><span class="cx"> auto textUpdate = std::make_unique<Style::Update>(document());
</span><span class="lines">@@ -234,7 +234,6 @@
</span><span class="cx"> renderer->setTextWithOffset(data(), offsetOfReplacedData, lengthOfReplacedData);
</span><span class="cx"> }
</span><span class="cx">
</span><del>-
</del><span class="cx"> #if ENABLE(TREE_DEBUGGING)
</span><span class="cx"> void Text::formatForDebugger(char* buffer, unsigned length) const
</span><span class="cx"> {
</span></span></pre></div>
<a id="trunkSourceWebCoredomVisitedLinkStatecpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/dom/VisitedLinkState.cpp (207457 => 207458)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/dom/VisitedLinkState.cpp        2016-10-18 09:21:58 UTC (rev 207457)
+++ trunk/Source/WebCore/dom/VisitedLinkState.cpp        2016-10-18 12:28:55 UTC (rev 207458)
</span><span class="lines">@@ -63,7 +63,7 @@
</span><span class="cx"> return;
</span><span class="cx"> for (auto& element : descendantsOfType<Element>(m_document)) {
</span><span class="cx"> if (element.isLink())
</span><del>- element.setNeedsStyleRecalc();
</del><ins>+ element.invalidateStyleForSubtree();
</ins><span class="cx"> }
</span><span class="cx"> }
</span><span class="cx">
</span><span class="lines">@@ -82,7 +82,7 @@
</span><span class="cx"> return;
</span><span class="cx"> for (auto& element : descendantsOfType<Element>(m_document)) {
</span><span class="cx"> if (linkHashForElement(m_document, element) == linkHash)
</span><del>- element.setNeedsStyleRecalc();
</del><ins>+ element.invalidateStyleForSubtree();
</ins><span class="cx"> }
</span><span class="cx"> }
</span><span class="cx">
</span></span></pre></div>
<a id="trunkSourceWebCoreeditingFrameSelectioncpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/editing/FrameSelection.cpp (207457 => 207458)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/editing/FrameSelection.cpp        2016-10-18 09:21:58 UTC (rev 207457)
+++ trunk/Source/WebCore/editing/FrameSelection.cpp        2016-10-18 12:28:55 UTC (rev 207458)
</span><span class="lines">@@ -1983,7 +1983,7 @@
</span><span class="cx"> // RenderTheme::isFocused() check if the frame is active, we have to
</span><span class="cx"> // update style and theme state that depended on those.
</span><span class="cx"> if (Element* element = document->focusedElement()) {
</span><del>- element->setNeedsStyleRecalc();
</del><ins>+ element->invalidateStyleForSubtree();
</ins><span class="cx"> if (RenderObject* renderer = element->renderer())
</span><span class="cx"> if (renderer && renderer->style().hasAppearance())
</span><span class="cx"> renderer->theme().stateChanged(*renderer, ControlStates::FocusState);
</span></span></pre></div>
<a id="trunkSourceWebCorehtmlBaseDateAndTimeInputTypecpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/html/BaseDateAndTimeInputType.cpp (207457 => 207458)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/html/BaseDateAndTimeInputType.cpp        2016-10-18 09:21:58 UTC (rev 207457)
+++ trunk/Source/WebCore/html/BaseDateAndTimeInputType.cpp        2016-10-18 12:28:55 UTC (rev 207458)
</span><span class="lines">@@ -95,7 +95,7 @@
</span><span class="cx">
</span><span class="cx"> void BaseDateAndTimeInputType::minOrMaxAttributeChanged()
</span><span class="cx"> {
</span><del>- element().setNeedsStyleRecalc();
</del><ins>+ element().invalidateStyleForSubtree();
</ins><span class="cx"> }
</span><span class="cx">
</span><span class="cx"> Decimal BaseDateAndTimeInputType::parseToNumber(const String& source, const Decimal& defaultValue) const
</span></span></pre></div>
<a id="trunkSourceWebCorehtmlFileInputTypecpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/html/FileInputType.cpp (207457 => 207458)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/html/FileInputType.cpp        2016-10-18 09:21:58 UTC (rev 207457)
+++ trunk/Source/WebCore/html/FileInputType.cpp        2016-10-18 12:28:55 UTC (rev 207458)
</span><span class="lines">@@ -241,7 +241,7 @@
</span><span class="cx"> // FIXME: Should we clear the file list, or replace it with a new empty one here? This is observable from JavaScript through custom properties.
</span><span class="cx"> m_fileList->clear();
</span><span class="cx"> m_icon = nullptr;
</span><del>- element().setNeedsStyleRecalc();
</del><ins>+ element().invalidateStyleForSubtree();
</ins><span class="cx"> }
</span><span class="cx">
</span><span class="cx"> PassRefPtr<FileList> FileInputType::createFileList(const Vector<FileChooserFileInfo>& files) const
</span></span></pre></div>
<a id="trunkSourceWebCorehtmlHTMLAnchorElementcpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/html/HTMLAnchorElement.cpp (207457 => 207458)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/html/HTMLAnchorElement.cpp        2016-10-18 09:21:58 UTC (rev 207457)
+++ trunk/Source/WebCore/html/HTMLAnchorElement.cpp        2016-10-18 12:28:55 UTC (rev 207458)
</span><span class="lines">@@ -237,7 +237,7 @@
</span><span class="cx"> bool wasLink = isLink();
</span><span class="cx"> setIsLink(!value.isNull() && !shouldProhibitLinks(this));
</span><span class="cx"> if (wasLink != isLink())
</span><del>- setNeedsStyleRecalc();
</del><ins>+ invalidateStyleForSubtree();
</ins><span class="cx"> if (isLink()) {
</span><span class="cx"> String parsedURL = stripLeadingAndTrailingHTMLSpaces(value);
</span><span class="cx"> if (document().isDNSPrefetchEnabled() && document().frame()) {
</span></span></pre></div>
<a id="trunkSourceWebCorehtmlHTMLBodyElementcpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/html/HTMLBodyElement.cpp (207457 => 207458)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/html/HTMLBodyElement.cpp        2016-10-18 09:21:58 UTC (rev 207457)
+++ trunk/Source/WebCore/html/HTMLBodyElement.cpp        2016-10-18 12:28:55 UTC (rev 207458)
</span><span class="lines">@@ -169,7 +169,7 @@
</span><span class="cx"> }
</span><span class="cx"> }
</span><span class="cx">
</span><del>- setNeedsStyleRecalc();
</del><ins>+ invalidateStyleForSubtree();
</ins><span class="cx"> return;
</span><span class="cx"> }
</span><span class="cx">
</span></span></pre></div>
<a id="trunkSourceWebCorehtmlHTMLCanvasElementcpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/html/HTMLCanvasElement.cpp (207457 => 207458)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/html/HTMLCanvasElement.cpp        2016-10-18 09:21:58 UTC (rev 207457)
+++ trunk/Source/WebCore/html/HTMLCanvasElement.cpp        2016-10-18 12:28:55 UTC (rev 207458)
</span><span class="lines">@@ -235,7 +235,7 @@
</span><span class="cx">
</span><span class="cx"> #if USE(IOSURFACE_CANVAS_BACKING_STORE) || ENABLE(ACCELERATED_2D_CANVAS)
</span><span class="cx"> // Need to make sure a RenderLayer and compositing layer get created for the Canvas
</span><del>- setNeedsStyleRecalc(SyntheticStyleChange);
</del><ins>+ invalidateStyleAndLayerComposition();
</ins><span class="cx"> #endif
</span><span class="cx"> }
</span><span class="cx"> return m_context.get();
</span><span class="lines">@@ -250,7 +250,7 @@
</span><span class="cx"> m_context = WebGLRenderingContextBase::create(this, static_cast<WebGLContextAttributes*>(attrs), type);
</span><span class="cx"> if (m_context) {
</span><span class="cx"> // Need to make sure a RenderLayer and compositing layer get created for the Canvas
</span><del>- setNeedsStyleRecalc(SyntheticStyleChange);
</del><ins>+ invalidateStyleAndLayerComposition();
</ins><span class="cx"> }
</span><span class="cx"> }
</span><span class="cx"> return m_context.get();
</span><span class="lines">@@ -662,7 +662,7 @@
</span><span class="cx"> #if USE(IOSURFACE_CANVAS_BACKING_STORE) || ENABLE(ACCELERATED_2D_CANVAS)
</span><span class="cx"> if (m_context && m_context->is2d())
</span><span class="cx"> // Recalculate compositing requirements if acceleration state changed.
</span><del>- const_cast<HTMLCanvasElement*>(this)->setNeedsStyleRecalc(SyntheticStyleChange);
</del><ins>+ const_cast<HTMLCanvasElement*>(this)->invalidateStyleAndLayerComposition();
</ins><span class="cx"> #endif
</span><span class="cx"> }
</span><span class="cx">
</span></span></pre></div>
<a id="trunkSourceWebCorehtmlHTMLElementcpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/html/HTMLElement.cpp (207457 => 207458)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/html/HTMLElement.cpp        2016-10-18 09:21:58 UTC (rev 207457)
+++ trunk/Source/WebCore/html/HTMLElement.cpp        2016-10-18 12:28:55 UTC (rev 207458)
</span><span class="lines">@@ -897,7 +897,7 @@
</span><span class="cx"> return;
</span><span class="cx"> for (auto& elementToAdjust : elementLineage(this)) {
</span><span class="cx"> if (elementAffectsDirectionality(elementToAdjust)) {
</span><del>- elementToAdjust.setNeedsStyleRecalc();
</del><ins>+ elementToAdjust.invalidateStyleForSubtree();
</ins><span class="cx"> return;
</span><span class="cx"> }
</span><span class="cx"> }
</span><span class="lines">@@ -909,7 +909,7 @@
</span><span class="cx"> TextDirection textDirection = directionality(&strongDirectionalityTextNode);
</span><span class="cx"> setHasDirAutoFlagRecursively(this, true, strongDirectionalityTextNode);
</span><span class="cx"> if (renderer() && renderer()->style().direction() != textDirection)
</span><del>- setNeedsStyleRecalc();
</del><ins>+ invalidateStyleForSubtree();
</ins><span class="cx"> }
</span><span class="cx">
</span><span class="cx"> void HTMLElement::adjustDirectionalityIfNeededAfterChildrenChanged(Element* beforeChange, ChildChangeType changeType)
</span></span></pre></div>
<a id="trunkSourceWebCorehtmlHTMLFieldSetElementcpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/html/HTMLFieldSetElement.cpp (207457 => 207458)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/html/HTMLFieldSetElement.cpp        2016-10-18 09:21:58 UTC (rev 207457)
+++ trunk/Source/WebCore/html/HTMLFieldSetElement.cpp        2016-10-18 12:28:55 UTC (rev 207458)
</span><span class="lines">@@ -214,7 +214,7 @@
</span><span class="cx"> ASSERT_WITH_MESSAGE(!m_invalidDescendants.contains(&invalidFormControlElement), "Updating the fieldset on validity change is not an efficient operation, it should only be done when necessary.");
</span><span class="cx">
</span><span class="cx"> if (m_invalidDescendants.isEmpty())
</span><del>- setNeedsStyleRecalc();
</del><ins>+ invalidateStyleForSubtree();
</ins><span class="cx"> m_invalidDescendants.add(&invalidFormControlElement);
</span><span class="cx"> }
</span><span class="cx">
</span><span class="lines">@@ -225,7 +225,7 @@
</span><span class="cx">
</span><span class="cx"> m_invalidDescendants.remove(&formControlElement);
</span><span class="cx"> if (m_invalidDescendants.isEmpty())
</span><del>- setNeedsStyleRecalc();
</del><ins>+ invalidateStyleForSubtree();
</ins><span class="cx"> }
</span><span class="cx">
</span><span class="cx"> } // namespace
</span></span></pre></div>
<a id="trunkSourceWebCorehtmlHTMLFormControlElementcpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/html/HTMLFormControlElement.cpp (207457 => 207458)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/html/HTMLFormControlElement.cpp        2016-10-18 09:21:58 UTC (rev 207457)
+++ trunk/Source/WebCore/html/HTMLFormControlElement.cpp        2016-10-18 12:28:55 UTC (rev 207458)
</span><span class="lines">@@ -174,7 +174,7 @@
</span><span class="cx"> void HTMLFormControlElement::disabledStateChanged()
</span><span class="cx"> {
</span><span class="cx"> setNeedsWillValidateCheck();
</span><del>- setNeedsStyleRecalc();
</del><ins>+ invalidateStyleForSubtree();
</ins><span class="cx"> if (renderer() && renderer()->style().hasAppearance())
</span><span class="cx"> renderer()->theme().stateChanged(*renderer(), ControlStates::EnabledState);
</span><span class="cx"> }
</span><span class="lines">@@ -182,7 +182,7 @@
</span><span class="cx"> void HTMLFormControlElement::readOnlyAttributeChanged()
</span><span class="cx"> {
</span><span class="cx"> setNeedsWillValidateCheck();
</span><del>- setNeedsStyleRecalc();
</del><ins>+ invalidateStyleForSubtree();
</ins><span class="cx"> }
</span><span class="cx">
</span><span class="cx"> void HTMLFormControlElement::requiredAttributeChanged()
</span><span class="lines">@@ -190,7 +190,7 @@
</span><span class="cx"> updateValidity();
</span><span class="cx"> // Style recalculation is needed because style selectors may include
</span><span class="cx"> // :required and :optional pseudo-classes.
</span><del>- setNeedsStyleRecalc();
</del><ins>+ invalidateStyleForSubtree();
</ins><span class="cx"> }
</span><span class="cx">
</span><span class="cx"> static bool shouldAutofocus(HTMLFormControlElement* element)
</span><span class="lines">@@ -445,7 +445,7 @@
</span><span class="cx"> m_willValidate = newWillValidate;
</span><span class="cx">
</span><span class="cx"> updateValidity();
</span><del>- setNeedsStyleRecalc();
</del><ins>+ invalidateStyleForSubtree();
</ins><span class="cx">
</span><span class="cx"> if (!m_willValidate && !wasValid) {
</span><span class="cx"> removeInvalidElementToAncestorFromInsertionPoint(*this, parentNode());
</span><span class="lines">@@ -555,7 +555,7 @@
</span><span class="cx">
</span><span class="cx"> if (willValidate && m_isValid != wasValid) {
</span><span class="cx"> // Update style for pseudo classes such as :valid :invalid.
</span><del>- setNeedsStyleRecalc();
</del><ins>+ invalidateStyleForSubtree();
</ins><span class="cx">
</span><span class="cx"> if (!m_isValid) {
</span><span class="cx"> addInvalidElementToAncestorFromInsertionPoint(*this, parentNode());
</span></span></pre></div>
<a id="trunkSourceWebCorehtmlHTMLFormElementcpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/html/HTMLFormElement.cpp (207457 => 207458)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/html/HTMLFormElement.cpp        2016-10-18 09:21:58 UTC (rev 207457)
+++ trunk/Source/WebCore/html/HTMLFormElement.cpp        2016-10-18 12:28:55 UTC (rev 207458)
</span><span class="lines">@@ -591,7 +591,7 @@
</span><span class="cx"> HTMLFormControlElement& control = downcast<HTMLFormControlElement>(*e);
</span><span class="cx"> if (control.isSuccessfulSubmitButton()) {
</span><span class="cx"> if (!m_defaultButton)
</span><del>- control.setNeedsStyleRecalc();
</del><ins>+ control.invalidateStyleForSubtree();
</ins><span class="cx"> else
</span><span class="cx"> resetDefaultButton();
</span><span class="cx"> }
</span><span class="lines">@@ -619,7 +619,7 @@
</span><span class="cx"> ASSERT(static_cast<const Element&>(formControlElement).matchesInvalidPseudoClass());
</span><span class="cx">
</span><span class="cx"> if (m_invalidAssociatedFormControls.isEmpty())
</span><del>- setNeedsStyleRecalc();
</del><ins>+ invalidateStyleForSubtree();
</ins><span class="cx"> m_invalidAssociatedFormControls.add(&formControlElement);
</span><span class="cx"> }
</span><span class="cx">
</span><span class="lines">@@ -627,7 +627,7 @@
</span><span class="cx"> {
</span><span class="cx"> if (m_invalidAssociatedFormControls.remove(&formControlElement)) {
</span><span class="cx"> if (m_invalidAssociatedFormControls.isEmpty())
</span><del>- setNeedsStyleRecalc();
</del><ins>+ invalidateStyleForSubtree();
</ins><span class="cx"> }
</span><span class="cx"> }
</span><span class="cx">
</span><span class="lines">@@ -737,9 +737,9 @@
</span><span class="cx"> defaultButton();
</span><span class="cx"> if (m_defaultButton != oldDefault) {
</span><span class="cx"> if (oldDefault)
</span><del>- oldDefault->setNeedsStyleRecalc();
</del><ins>+ oldDefault->invalidateStyleForSubtree();
</ins><span class="cx"> if (m_defaultButton)
</span><del>- m_defaultButton->setNeedsStyleRecalc();
</del><ins>+ m_defaultButton->invalidateStyleForSubtree();
</ins><span class="cx"> }
</span><span class="cx"> }
</span><span class="cx">
</span></span></pre></div>
<a id="trunkSourceWebCorehtmlHTMLFrameElementBasecpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/html/HTMLFrameElementBase.cpp (207457 => 207458)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/html/HTMLFrameElementBase.cpp        2016-10-18 09:21:58 UTC (rev 207457)
+++ trunk/Source/WebCore/html/HTMLFrameElementBase.cpp        2016-10-18 12:28:55 UTC (rev 207458)
</span><span class="lines">@@ -153,7 +153,7 @@
</span><span class="cx"> return;
</span><span class="cx">
</span><span class="cx"> if (!renderer())
</span><del>- setNeedsStyleRecalc(ReconstructRenderTree);
</del><ins>+ invalidateStyleAndRenderersForSubtree();
</ins><span class="cx"> setNameAndOpenURL();
</span><span class="cx"> }
</span><span class="cx">
</span></span></pre></div>
<a id="trunkSourceWebCorehtmlHTMLFrameOwnerElementcpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/html/HTMLFrameOwnerElement.cpp (207457 => 207458)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/html/HTMLFrameOwnerElement.cpp        2016-10-18 09:21:58 UTC (rev 207457)
+++ trunk/Source/WebCore/html/HTMLFrameOwnerElement.cpp        2016-10-18 12:28:55 UTC (rev 207458)
</span><span class="lines">@@ -122,15 +122,15 @@
</span><span class="cx"> return nullptr;
</span><span class="cx"> }
</span><span class="cx">
</span><del>-void HTMLFrameOwnerElement::scheduleSetNeedsStyleRecalc(StyleChangeType changeType)
</del><ins>+void HTMLFrameOwnerElement::scheduleinvalidateStyleAndLayerComposition()
</ins><span class="cx"> {
</span><span class="cx"> if (Style::postResolutionCallbacksAreSuspended()) {
</span><span class="cx"> RefPtr<HTMLFrameOwnerElement> element = this;
</span><del>- Style::queuePostResolutionCallback([element, changeType]{
- element->setNeedsStyleRecalc(changeType);
</del><ins>+ Style::queuePostResolutionCallback([element] {
+ element->invalidateStyleAndLayerComposition();
</ins><span class="cx"> });
</span><span class="cx"> } else
</span><del>- setNeedsStyleRecalc(changeType);
</del><ins>+ invalidateStyleAndLayerComposition();
</ins><span class="cx"> }
</span><span class="cx">
</span><span class="cx"> bool SubframeLoadingDisabler::canLoadFrame(HTMLFrameOwnerElement& owner)
</span></span></pre></div>
<a id="trunkSourceWebCorehtmlHTMLFrameOwnerElementh"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/html/HTMLFrameOwnerElement.h (207457 => 207458)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/html/HTMLFrameOwnerElement.h        2016-10-18 09:21:58 UTC (rev 207457)
+++ trunk/Source/WebCore/html/HTMLFrameOwnerElement.h        2016-10-18 12:28:55 UTC (rev 207458)
</span><span class="lines">@@ -55,7 +55,7 @@
</span><span class="cx">
</span><span class="cx"> SandboxFlags sandboxFlags() const { return m_sandboxFlags; }
</span><span class="cx">
</span><del>- void scheduleSetNeedsStyleRecalc(StyleChangeType = FullStyleChange);
</del><ins>+ void scheduleinvalidateStyleAndLayerComposition();
</ins><span class="cx">
</span><span class="cx"> protected:
</span><span class="cx"> HTMLFrameOwnerElement(const QualifiedName& tagName, Document&);
</span></span></pre></div>
<a id="trunkSourceWebCorehtmlHTMLFrameSetElementcpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/html/HTMLFrameSetElement.cpp (207457 => 207458)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/html/HTMLFrameSetElement.cpp        2016-10-18 09:21:58 UTC (rev 207457)
+++ trunk/Source/WebCore/html/HTMLFrameSetElement.cpp        2016-10-18 12:28:55 UTC (rev 207458)
</span><span class="lines">@@ -86,7 +86,7 @@
</span><span class="cx"> if (!value.isNull()) {
</span><span class="cx"> m_rowLengths = newLengthArray(value.string(), m_totalRows);
</span><span class="cx"> // FIXME: Would be nice to optimize the case where m_rowLengths did not change.
</span><del>- setNeedsStyleRecalc();
</del><ins>+ invalidateStyleForSubtree();
</ins><span class="cx"> }
</span><span class="cx"> return;
</span><span class="cx"> }
</span><span class="lines">@@ -97,7 +97,7 @@
</span><span class="cx"> if (!value.isNull()) {
</span><span class="cx"> m_colLengths = newLengthArray(value.string(), m_totalCols);
</span><span class="cx"> // FIXME: Would be nice to optimize the case where m_colLengths did not change.
</span><del>- setNeedsStyleRecalc();
</del><ins>+ invalidateStyleForSubtree();
</ins><span class="cx"> }
</span><span class="cx"> return;
</span><span class="cx"> }
</span><span class="lines">@@ -202,10 +202,8 @@
</span><span class="cx">
</span><span class="cx"> bool HTMLFrameSetElement::willRecalcStyle(Style::Change)
</span><span class="cx"> {
</span><del>- if (needsStyleRecalc() && renderer()) {
</del><ins>+ if (needsStyleRecalc() && renderer())
</ins><span class="cx"> renderer()->setNeedsLayout();
</span><del>- clearNeedsStyleRecalc();
- }
</del><span class="cx"> return true;
</span><span class="cx"> }
</span><span class="cx">
</span></span></pre></div>
<a id="trunkSourceWebCorehtmlHTMLInputElementcpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/html/HTMLInputElement.cpp (207457 => 207458)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/html/HTMLInputElement.cpp        2016-10-18 09:21:58 UTC (rev 207457)
+++ trunk/Source/WebCore/html/HTMLInputElement.cpp        2016-10-18 12:28:55 UTC (rev 207458)
</span><span class="lines">@@ -549,7 +549,7 @@
</span><span class="cx"> #endif
</span><span class="cx">
</span><span class="cx"> if (renderer())
</span><del>- setNeedsStyleRecalc(ReconstructRenderTree);
</del><ins>+ invalidateStyleAndRenderersForSubtree();
</ins><span class="cx">
</span><span class="cx"> if (document().focusedElement() == this)
</span><span class="cx"> updateFocusAppearance(SelectionRestorationMode::Restore, SelectionRevealMode::Reveal);
</span><span class="lines">@@ -695,7 +695,7 @@
</span><span class="cx"> // We only need to setChanged if the form is looking at the default value right now.
</span><span class="cx"> if (!hasDirtyValue()) {
</span><span class="cx"> updatePlaceholderVisibility();
</span><del>- setNeedsStyleRecalc();
</del><ins>+ invalidateStyleForSubtree();
</ins><span class="cx"> }
</span><span class="cx"> setFormControlValueMatchesRenderer(false);
</span><span class="cx"> updateValidity();
</span><span class="lines">@@ -702,7 +702,7 @@
</span><span class="cx"> m_valueAttributeWasUpdatedAfterParsing = !m_parsingInProgress;
</span><span class="cx"> } else if (name == checkedAttr) {
</span><span class="cx"> if (m_inputType->isCheckable())
</span><del>- setNeedsStyleRecalc();
</del><ins>+ invalidateStyleForSubtree();
</ins><span class="cx">
</span><span class="cx"> // Another radio button in the same group might be checked by state
</span><span class="cx"> // restore. We shouldn't call setChecked() even if this has the checked
</span><span class="lines">@@ -731,9 +731,9 @@
</span><span class="cx"> m_maxResults = !value.isNull() ? std::min(value.toInt(), maxSavedResults) : -1;
</span><span class="cx"> m_inputType->maxResultsAttributeChanged();
</span><span class="cx"> } else if (name == autosaveAttr) {
</span><del>- setNeedsStyleRecalc();
</del><ins>+ invalidateStyleForSubtree();
</ins><span class="cx"> } else if (name == incrementalAttr) {
</span><del>- setNeedsStyleRecalc();
</del><ins>+ invalidateStyleForSubtree();
</ins><span class="cx"> } else if (name == minAttr) {
</span><span class="cx"> m_inputType->minOrMaxAttributeChanged();
</span><span class="cx"> updateValidity();
</span><span class="lines">@@ -895,7 +895,7 @@
</span><span class="cx">
</span><span class="cx"> m_reflectsCheckedAttribute = false;
</span><span class="cx"> m_isChecked = nowChecked;
</span><del>- setNeedsStyleRecalc();
</del><ins>+ invalidateStyleForSubtree();
</ins><span class="cx">
</span><span class="cx"> if (RadioButtonGroups* buttons = radioButtonGroups())
</span><span class="cx"> buttons->updateCheckedState(this);
</span><span class="lines">@@ -921,7 +921,7 @@
</span><span class="cx"> dispatchFormControlChangeEvent();
</span><span class="cx"> }
</span><span class="cx">
</span><del>- setNeedsStyleRecalc();
</del><ins>+ invalidateStyleForSubtree();
</ins><span class="cx"> }
</span><span class="cx">
</span><span class="cx"> void HTMLInputElement::setIndeterminate(bool newValue)
</span><span class="lines">@@ -931,7 +931,7 @@
</span><span class="cx">
</span><span class="cx"> m_isIndeterminate = newValue;
</span><span class="cx">
</span><del>- setNeedsStyleRecalc();
</del><ins>+ invalidateStyleForSubtree();
</ins><span class="cx">
</span><span class="cx"> if (renderer() && renderer()->style().hasAppearance())
</span><span class="cx"> renderer()->theme().stateChanged(*renderer(), ControlStates::CheckedState);
</span><span class="lines">@@ -1330,7 +1330,7 @@
</span><span class="cx"> return;
</span><span class="cx">
</span><span class="cx"> m_isAutoFilled = autoFilled;
</span><del>- setNeedsStyleRecalc();
</del><ins>+ invalidateStyleForSubtree();
</ins><span class="cx"> }
</span><span class="cx">
</span><span class="cx"> void HTMLInputElement::setShowAutoFillButton(AutoFillButtonType autoFillButtonType)
</span><span class="lines">@@ -1786,7 +1786,7 @@
</span><span class="cx"> updateValueIfNeeded();
</span><span class="cx">
</span><span class="cx"> // FIXME: Do we really need to do this if the effective maxLength has not changed?
</span><del>- setNeedsStyleRecalc();
</del><ins>+ invalidateStyleForSubtree();
</ins><span class="cx"> updateValidity();
</span><span class="cx"> }
</span><span class="cx">
</span><span class="lines">@@ -1802,7 +1802,7 @@
</span><span class="cx"> updateValueIfNeeded();
</span><span class="cx">
</span><span class="cx"> // FIXME: Do we really need to do this if the effective minLength has not changed?
</span><del>- setNeedsStyleRecalc();
</del><ins>+ invalidateStyleForSubtree();
</ins><span class="cx"> updateValidity();
</span><span class="cx"> }
</span><span class="cx">
</span></span></pre></div>
<a id="trunkSourceWebCorehtmlHTMLLinkElementcpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/html/HTMLLinkElement.cpp (207457 => 207458)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/html/HTMLLinkElement.cpp        2016-10-18 09:21:58 UTC (rev 207457)
+++ trunk/Source/WebCore/html/HTMLLinkElement.cpp        2016-10-18 12:28:55 UTC (rev 207458)
</span><span class="lines">@@ -157,7 +157,7 @@
</span><span class="cx"> bool wasLink = isLink();
</span><span class="cx"> setIsLink(!value.isNull() && !shouldProhibitLinks(this));
</span><span class="cx"> if (wasLink != isLink())
</span><del>- setNeedsStyleRecalc();
</del><ins>+ invalidateStyleForSubtree();
</ins><span class="cx"> process();
</span><span class="cx"> return;
</span><span class="cx"> }
</span></span></pre></div>
<a id="trunkSourceWebCorehtmlHTMLMediaElementcpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/html/HTMLMediaElement.cpp (207457 => 207458)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/html/HTMLMediaElement.cpp        2016-10-18 09:21:58 UTC (rev 207457)
+++ trunk/Source/WebCore/html/HTMLMediaElement.cpp        2016-10-18 12:28:55 UTC (rev 207458)
</span><span class="lines">@@ -4576,7 +4576,7 @@
</span><span class="cx"> LOG(Media, "HTMLMediaElement::mediaPlayerRenderingModeChanged(%p)", this);
</span><span class="cx">
</span><span class="cx"> // Kick off a fake recalcStyle that will update the compositing tree.
</span><del>- setNeedsStyleRecalc(SyntheticStyleChange);
</del><ins>+ invalidateStyleAndLayerComposition();
</ins><span class="cx"> }
</span><span class="cx">
</span><span class="cx"> #if PLATFORM(WIN) && USE(AVFOUNDATION)
</span><span class="lines">@@ -5590,7 +5590,7 @@
</span><span class="cx"> }
</span><span class="cx">
</span><span class="cx"> m_player->setVideoFullscreenLayer(platformLayer, completionHandler);
</span><del>- setNeedsStyleRecalc(SyntheticStyleChange);
</del><ins>+ invalidateStyleAndLayerComposition();
</ins><span class="cx"> #if ENABLE(VIDEO_TRACK)
</span><span class="cx"> updateTextTrackDisplay();
</span><span class="cx"> #endif
</span></span></pre></div>
<a id="trunkSourceWebCorehtmlHTMLObjectElementcpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/html/HTMLObjectElement.cpp (207457 => 207458)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/html/HTMLObjectElement.cpp        2016-10-18 09:21:58 UTC (rev 207457)
+++ trunk/Source/WebCore/html/HTMLObjectElement.cpp        2016-10-18 12:28:55 UTC (rev 207458)
</span><span class="lines">@@ -135,7 +135,7 @@
</span><span class="cx"> return;
</span><span class="cx">
</span><span class="cx"> clearUseFallbackContent();
</span><del>- setNeedsStyleRecalc(ReconstructRenderTree);
</del><ins>+ invalidateStyleAndRenderersForSubtree();
</ins><span class="cx"> }
</span><span class="cx">
</span><span class="cx"> static void mapDataParamToSrc(Vector<String>& paramNames, Vector<String>& paramValues)
</span><span class="lines">@@ -355,7 +355,7 @@
</span><span class="cx"> updateDocNamedItem();
</span><span class="cx"> if (inDocument() && !useFallbackContent()) {
</span><span class="cx"> setNeedsWidgetUpdate(true);
</span><del>- setNeedsStyleRecalc();
</del><ins>+ invalidateStyleForSubtree();
</ins><span class="cx"> }
</span><span class="cx"> HTMLPlugInImageElement::childrenChanged(change);
</span><span class="cx"> }
</span><span class="lines">@@ -378,7 +378,7 @@
</span><span class="cx"> if (!inDocument())
</span><span class="cx"> return;
</span><span class="cx">
</span><del>- setNeedsStyleRecalc(ReconstructRenderTree);
</del><ins>+ invalidateStyleAndRenderersForSubtree();
</ins><span class="cx">
</span><span class="cx"> // Before we give up and use fallback content, check to see if this is a MIME type issue.
</span><span class="cx"> auto* loader = imageLoader();
</span></span></pre></div>
<a id="trunkSourceWebCorehtmlHTMLOptGroupElementcpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/html/HTMLOptGroupElement.cpp (207457 => 207458)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/html/HTMLOptGroupElement.cpp        2016-10-18 09:21:58 UTC (rev 207457)
+++ trunk/Source/WebCore/html/HTMLOptGroupElement.cpp        2016-10-18 12:28:55 UTC (rev 207458)
</span><span class="lines">@@ -81,7 +81,7 @@
</span><span class="cx"> recalcSelectOptions();
</span><span class="cx">
</span><span class="cx"> if (name == disabledAttr)
</span><del>- setNeedsStyleRecalc();
</del><ins>+ invalidateStyleForSubtree();
</ins><span class="cx"> }
</span><span class="cx">
</span><span class="cx"> void HTMLOptGroupElement::recalcSelectOptions()
</span></span></pre></div>
<a id="trunkSourceWebCorehtmlHTMLOptionElementcpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/html/HTMLOptionElement.cpp (207457 => 207458)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/html/HTMLOptionElement.cpp        2016-10-18 09:21:58 UTC (rev 207457)
+++ trunk/Source/WebCore/html/HTMLOptionElement.cpp        2016-10-18 12:28:55 UTC (rev 207458)
</span><span class="lines">@@ -174,12 +174,12 @@
</span><span class="cx"> bool oldDisabled = m_disabled;
</span><span class="cx"> m_disabled = !value.isNull();
</span><span class="cx"> if (oldDisabled != m_disabled) {
</span><del>- setNeedsStyleRecalc();
</del><ins>+ invalidateStyleForSubtree();
</ins><span class="cx"> if (renderer() && renderer()->style().hasAppearance())
</span><span class="cx"> renderer()->theme().stateChanged(*renderer(), ControlStates::EnabledState);
</span><span class="cx"> }
</span><span class="cx"> } else if (name == selectedAttr) {
</span><del>- setNeedsStyleRecalc();
</del><ins>+ invalidateStyleForSubtree();
</ins><span class="cx">
</span><span class="cx"> // FIXME: This doesn't match what the HTML specification says.
</span><span class="cx"> // The specification implies that removing the selected attribute or
</span><span class="lines">@@ -229,7 +229,7 @@
</span><span class="cx"> return;
</span><span class="cx">
</span><span class="cx"> m_isSelected = selected;
</span><del>- setNeedsStyleRecalc();
</del><ins>+ invalidateStyleForSubtree();
</ins><span class="cx">
</span><span class="cx"> if (HTMLSelectElement* select = ownerSelectElement())
</span><span class="cx"> select->invalidateSelectedItems();
</span></span></pre></div>
<a id="trunkSourceWebCorehtmlHTMLPlugInElementcpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/html/HTMLPlugInElement.cpp (207457 => 207458)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/html/HTMLPlugInElement.cpp        2016-10-18 09:21:58 UTC (rev 207457)
+++ trunk/Source/WebCore/html/HTMLPlugInElement.cpp        2016-10-18 12:28:55 UTC (rev 207458)
</span><span class="lines">@@ -300,7 +300,7 @@
</span><span class="cx"> root->setResetStyleInheritance(true);
</span><span class="cx"> if (m_pluginReplacement->installReplacement(*root)) {
</span><span class="cx"> setDisplayState(DisplayingPluginReplacement);
</span><del>- setNeedsStyleRecalc(ReconstructRenderTree);
</del><ins>+ invalidateStyleAndRenderersForSubtree();
</ins><span class="cx"> }
</span><span class="cx"> }
</span><span class="cx">
</span></span></pre></div>
<a id="trunkSourceWebCorehtmlHTMLPlugInImageElementcpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/html/HTMLPlugInImageElement.cpp (207457 => 207458)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/html/HTMLPlugInImageElement.cpp        2016-10-18 09:21:58 UTC (rev 207457)
+++ trunk/Source/WebCore/html/HTMLPlugInImageElement.cpp        2016-10-18 12:28:55 UTC (rev 207458)
</span><span class="lines">@@ -139,7 +139,7 @@
</span><span class="cx"> if (state == RestartingWithPendingMouseClick || state == Restarting) {
</span><span class="cx"> m_isRestartedPlugin = true;
</span><span class="cx"> m_snapshotDecision = NeverSnapshot;
</span><del>- setNeedsStyleRecalc(SyntheticStyleChange);
</del><ins>+ invalidateStyleAndLayerComposition();
</ins><span class="cx"> if (displayState() == DisplayingSnapshot)
</span><span class="cx"> m_removeSnapshotTimer.startOneShot(removeSnapshotTimerDelay);
</span><span class="cx"> }
</span><span class="lines">@@ -239,13 +239,13 @@
</span><span class="cx"> bool HTMLPlugInImageElement::willRecalcStyle(Style::Change change)
</span><span class="cx"> {
</span><span class="cx"> // Make sure style recalcs scheduled by a child shadow tree don't trigger reconstruction and cause flicker.
</span><del>- if (change == Style::NoChange && styleChangeType() == NoStyleChange)
</del><ins>+ if (change == Style::NoChange && styleValidity() == Style::Validity::Valid)
</ins><span class="cx"> return true;
</span><span class="cx">
</span><span class="cx"> // FIXME: There shoudn't be need to force render tree reconstruction here.
</span><span class="cx"> // It is only done because loading and load event dispatching is tied to render tree construction.
</span><span class="cx"> if (!useFallbackContent() && needsWidgetUpdate() && renderer() && !isImageType() && (displayState() != DisplayingSnapshot))
</span><del>- setNeedsStyleRecalc(ReconstructRenderTree);
</del><ins>+ invalidateStyleAndRenderersForSubtree();
</ins><span class="cx"> return true;
</span><span class="cx"> }
</span><span class="cx">
</span><span class="lines">@@ -306,7 +306,7 @@
</span><span class="cx">
</span><span class="cx"> setNeedsWidgetUpdate(true);
</span><span class="cx"> if (inDocument())
</span><del>- setNeedsStyleRecalc();
</del><ins>+ invalidateStyleForSubtree();
</ins><span class="cx"> }
</span><span class="cx">
</span><span class="cx"> void HTMLPlugInImageElement::didMoveToNewDocument(Document* oldDocument)
</span><span class="lines">@@ -332,7 +332,7 @@
</span><span class="cx">
</span><span class="cx"> void HTMLPlugInImageElement::resumeFromDocumentSuspension()
</span><span class="cx"> {
</span><del>- setNeedsStyleRecalc(ReconstructRenderTree);
</del><ins>+ invalidateStyleAndRenderersForSubtree();
</ins><span class="cx">
</span><span class="cx"> HTMLPlugInElement::resumeFromDocumentSuspension();
</span><span class="cx"> }
</span><span class="lines">@@ -437,7 +437,7 @@
</span><span class="cx"> {
</span><span class="cx"> m_snapshotImage = nullptr;
</span><span class="cx"> m_isRestartedPlugin = false;
</span><del>- setNeedsStyleRecalc(SyntheticStyleChange);
</del><ins>+ invalidateStyleAndLayerComposition();
</ins><span class="cx"> if (renderer())
</span><span class="cx"> renderer()->repaint();
</span><span class="cx"> }
</span><span class="lines">@@ -515,7 +515,7 @@
</span><span class="cx"> return;
</span><span class="cx">
</span><span class="cx"> setDisplayState(Restarting);
</span><del>- setNeedsStyleRecalc(ReconstructRenderTree);
</del><ins>+ invalidateStyleAndRenderersForSubtree();
</ins><span class="cx"> }
</span><span class="cx">
</span><span class="cx"> void HTMLPlugInImageElement::dispatchPendingMouseClick()
</span></span></pre></div>
<a id="trunkSourceWebCorehtmlHTMLProgressElementcpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/html/HTMLProgressElement.cpp (207457 => 207458)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/html/HTMLProgressElement.cpp        2016-10-18 09:21:58 UTC (rev 207457)
+++ trunk/Source/WebCore/html/HTMLProgressElement.cpp        2016-10-18 12:28:55 UTC (rev 207458)
</span><span class="lines">@@ -141,7 +141,7 @@
</span><span class="cx"> bool wasDeterminate = render->isDeterminate();
</span><span class="cx"> render->updateFromElement();
</span><span class="cx"> if (wasDeterminate != isDeterminate())
</span><del>- setNeedsStyleRecalc();
</del><ins>+ invalidateStyleForSubtree();
</ins><span class="cx"> }
</span><span class="cx"> }
</span><span class="cx">
</span></span></pre></div>
<a id="trunkSourceWebCorehtmlHTMLSelectElementcpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/html/HTMLSelectElement.cpp (207457 => 207458)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/html/HTMLSelectElement.cpp        2016-10-18 09:21:58 UTC (rev 207457)
+++ trunk/Source/WebCore/html/HTMLSelectElement.cpp        2016-10-18 12:28:55 UTC (rev 207458)
</span><span class="lines">@@ -303,7 +303,7 @@
</span><span class="cx"> m_size = size;
</span><span class="cx"> updateValidity();
</span><span class="cx"> if (m_size != oldSize) {
</span><del>- setNeedsStyleRecalc(ReconstructRenderTree);
</del><ins>+ invalidateStyleAndRenderersForSubtree();
</ins><span class="cx"> setRecalcListItems();
</span><span class="cx"> updateValidity();
</span><span class="cx"> }
</span><span class="lines">@@ -744,7 +744,7 @@
</span><span class="cx"> // Manual selection anchor is reset when manipulating the select programmatically.
</span><span class="cx"> m_activeSelectionAnchorIndex = -1;
</span><span class="cx"> setOptionsChangedOnRenderer();
</span><del>- setNeedsStyleRecalc();
</del><ins>+ invalidateStyleForSubtree();
</ins><span class="cx"> if (!inDocument()) {
</span><span class="cx"> if (HTMLCollection* collection = cachedHTMLCollection(SelectOptions))
</span><span class="cx"> collection->invalidateCache(document());
</span><span class="lines">@@ -1022,7 +1022,7 @@
</span><span class="cx"> m_multiple = !value.isNull();
</span><span class="cx"> updateValidity();
</span><span class="cx"> if (oldUsesMenuList != usesMenuList())
</span><del>- setNeedsStyleRecalc(ReconstructRenderTree);
</del><ins>+ invalidateStyleAndRenderersForSubtree();
</ins><span class="cx"> }
</span><span class="cx">
</span><span class="cx"> bool HTMLSelectElement::appendFormData(FormDataList& list, bool)
</span><span class="lines">@@ -1071,7 +1071,7 @@
</span><span class="cx"> firstOption->setSelectedState(true);
</span><span class="cx">
</span><span class="cx"> setOptionsChangedOnRenderer();
</span><del>- setNeedsStyleRecalc();
</del><ins>+ invalidateStyleForSubtree();
</ins><span class="cx"> updateValidity();
</span><span class="cx"> }
</span><span class="cx">
</span></span></pre></div>
<a id="trunkSourceWebCorehtmlHTMLTableElementcpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/html/HTMLTableElement.cpp (207457 => 207458)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/html/HTMLTableElement.cpp        2016-10-18 09:21:58 UTC (rev 207457)
+++ trunk/Source/WebCore/html/HTMLTableElement.cpp        2016-10-18 12:28:55 UTC (rev 207458)
</span><span class="lines">@@ -29,6 +29,7 @@
</span><span class="cx"> #include "CSSPropertyNames.h"
</span><span class="cx"> #include "CSSValueKeywords.h"
</span><span class="cx"> #include "CSSValuePool.h"
</span><ins>+#include "ElementChildIterator.h"
</ins><span class="cx"> #include "ExceptionCode.h"
</span><span class="cx"> #include "ExceptionCodePlaceholder.h"
</span><span class="cx"> #include "GenericCachedHTMLCollection.h"
</span><span class="lines">@@ -265,27 +266,28 @@
</span><span class="cx"> row->remove(ec);
</span><span class="cx"> }
</span><span class="cx">
</span><del>-static inline bool isTableCellAncestor(Node* n)
</del><ins>+static inline bool isTableCellAncestor(const Element& element)
</ins><span class="cx"> {
</span><del>- return n->hasTagName(theadTag) || n->hasTagName(tbodyTag) ||
- n->hasTagName(tfootTag) || n->hasTagName(trTag) ||
- n->hasTagName(thTag);
</del><ins>+ return element.hasTagName(theadTag)
+ || element.hasTagName(tbodyTag)
+ || element.hasTagName(tfootTag)
+ || element.hasTagName(trTag)
+ || element.hasTagName(thTag);
</ins><span class="cx"> }
</span><span class="cx">
</span><del>-static bool setTableCellsChanged(Node* n)
</del><ins>+static bool setTableCellsChanged(Element& element)
</ins><span class="cx"> {
</span><del>- ASSERT(n);
</del><span class="cx"> bool cellChanged = false;
</span><span class="cx">
</span><del>- if (n->hasTagName(tdTag))
</del><ins>+ if (element.hasTagName(tdTag))
</ins><span class="cx"> cellChanged = true;
</span><del>- else if (isTableCellAncestor(n)) {
- for (Node* child = n->firstChild(); child; child = child->nextSibling())
</del><ins>+ else if (isTableCellAncestor(element)) {
+ for (auto& child : childrenOfType<Element>(element))
</ins><span class="cx"> cellChanged |= setTableCellsChanged(child);
</span><span class="cx"> }
</span><span class="cx">
</span><span class="cx"> if (cellChanged)
</span><del>- n->setNeedsStyleRecalc();
</del><ins>+ element.invalidateStyleForSubtree();
</ins><span class="cx">
</span><span class="cx"> return cellChanged;
</span><span class="cx"> }
</span><span class="lines">@@ -422,10 +424,10 @@
</span><span class="cx"> if (bordersBefore != cellBorders() || oldPadding != m_padding) {
</span><span class="cx"> m_sharedCellStyle = nullptr;
</span><span class="cx"> bool cellChanged = false;
</span><del>- for (Node* child = firstChild(); child; child = child->nextSibling())
</del><ins>+ for (auto& child : childrenOfType<Element>(*this))
</ins><span class="cx"> cellChanged |= setTableCellsChanged(child);
</span><span class="cx"> if (cellChanged)
</span><del>- setNeedsStyleRecalc();
</del><ins>+ invalidateStyleForSubtree();
</ins><span class="cx"> }
</span><span class="cx"> }
</span><span class="cx">
</span></span></pre></div>
<a id="trunkSourceWebCorehtmlHTMLTextAreaElementcpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/html/HTMLTextAreaElement.cpp (207457 => 207458)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/html/HTMLTextAreaElement.cpp        2016-10-18 09:21:58 UTC (rev 207457)
+++ trunk/Source/WebCore/html/HTMLTextAreaElement.cpp        2016-10-18 12:28:55 UTC (rev 207458)
</span><span class="lines">@@ -397,7 +397,7 @@
</span><span class="cx"> setInnerTextValue(m_value);
</span><span class="cx"> setLastChangeWasNotUserEdit();
</span><span class="cx"> updatePlaceholderVisibility();
</span><del>- setNeedsStyleRecalc();
</del><ins>+ invalidateStyleForSubtree();
</ins><span class="cx"> setFormControlValueMatchesRenderer(true);
</span><span class="cx">
</span><span class="cx"> // Set the caret to the end of the text value.
</span></span></pre></div>
<a id="trunkSourceWebCorehtmlHTMLTextFormControlElementcpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/html/HTMLTextFormControlElement.cpp (207457 => 207458)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/html/HTMLTextFormControlElement.cpp        2016-10-18 09:21:58 UTC (rev 207457)
+++ trunk/Source/WebCore/html/HTMLTextFormControlElement.cpp        2016-10-18 12:28:55 UTC (rev 207458)
</span><span class="lines">@@ -166,7 +166,7 @@
</span><span class="cx"> if (placeHolderWasVisible == m_isPlaceholderVisible)
</span><span class="cx"> return;
</span><span class="cx">
</span><del>- setNeedsStyleRecalc();
</del><ins>+ invalidateStyleForSubtree();
</ins><span class="cx"> }
</span><span class="cx">
</span><span class="cx"> void HTMLTextFormControlElement::setSelectionStart(int start)
</span></span></pre></div>
<a id="trunkSourceWebCorehtmlInputTypecpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/html/InputType.cpp (207457 => 207458)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/html/InputType.cpp        2016-10-18 09:21:58 UTC (rev 207457)
+++ trunk/Source/WebCore/html/InputType.cpp        2016-10-18 12:28:55 UTC (rev 207458)
</span><span class="lines">@@ -683,7 +683,7 @@
</span><span class="cx"> void InputType::setValue(const String& sanitizedValue, bool valueChanged, TextFieldEventBehavior eventBehavior)
</span><span class="cx"> {
</span><span class="cx"> element().setValueInternal(sanitizedValue, eventBehavior);
</span><del>- element().setNeedsStyleRecalc();
</del><ins>+ element().invalidateStyleForSubtree();
</ins><span class="cx"> if (!valueChanged)
</span><span class="cx"> return;
</span><span class="cx"> switch (eventBehavior) {
</span></span></pre></div>
<a id="trunkSourceWebCorehtmlNumberInputTypecpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/html/NumberInputType.cpp (207457 => 207458)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/html/NumberInputType.cpp        2016-10-18 09:21:58 UTC (rev 207457)
+++ trunk/Source/WebCore/html/NumberInputType.cpp        2016-10-18 12:28:55 UTC (rev 207458)
</span><span class="lines">@@ -300,7 +300,7 @@
</span><span class="cx"> {
</span><span class="cx"> InputType::minOrMaxAttributeChanged();
</span><span class="cx"> HTMLInputElement& element = this->element();
</span><del>- element.setNeedsStyleRecalc();
</del><ins>+ element.invalidateStyleForSubtree();
</ins><span class="cx"> if (RenderObject* renderer = element.renderer())
</span><span class="cx"> renderer->setNeedsLayoutAndPrefWidthsRecalc();
</span><span class="cx"> }
</span></span></pre></div>
<a id="trunkSourceWebCorehtmlTextFieldInputTypecpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/html/TextFieldInputType.cpp (207457 => 207458)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/html/TextFieldInputType.cpp        2016-10-18 09:21:58 UTC (rev 207457)
+++ trunk/Source/WebCore/html/TextFieldInputType.cpp        2016-10-18 12:28:55 UTC (rev 207458)
</span><span class="lines">@@ -550,7 +550,7 @@
</span><span class="cx"> element().setValueFromRenderer(innerText);
</span><span class="cx"> element().updatePlaceholderVisibility();
</span><span class="cx"> // Recalc for :invalid change.
</span><del>- element().setNeedsStyleRecalc();
</del><ins>+ element().invalidateStyleForSubtree();
</ins><span class="cx">
</span><span class="cx"> didSetValueByUserEdit();
</span><span class="cx"> }
</span></span></pre></div>
<a id="trunkSourceWebCoremathmlMathMLElementcpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/mathml/MathMLElement.cpp (207457 => 207458)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/mathml/MathMLElement.cpp        2016-10-18 09:21:58 UTC (rev 207457)
+++ trunk/Source/WebCore/mathml/MathMLElement.cpp        2016-10-18 12:28:55 UTC (rev 207458)
</span><span class="lines">@@ -75,7 +75,7 @@
</span><span class="cx"> bool wasLink = isLink();
</span><span class="cx"> setIsLink(!value.isNull() && !shouldProhibitLinks(this));
</span><span class="cx"> if (wasLink != isLink())
</span><del>- setNeedsStyleRecalc();
</del><ins>+ invalidateStyleForSubtree();
</ins><span class="cx"> } else if (name == rowspanAttr) {
</span><span class="cx"> if (is<RenderTableCell>(renderer()) && hasTagName(mtdTag))
</span><span class="cx"> downcast<RenderTableCell>(*renderer()).colSpanOrRowSpanChanged();
</span></span></pre></div>
<a id="trunkSourceWebCoremathmlMathMLSelectElementcpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/mathml/MathMLSelectElement.cpp (207457 => 207458)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/mathml/MathMLSelectElement.cpp        2016-10-18 09:21:58 UTC (rev 207457)
+++ trunk/Source/WebCore/mathml/MathMLSelectElement.cpp        2016-10-18 12:28:55 UTC (rev 207458)
</span><span class="lines">@@ -206,7 +206,7 @@
</span><span class="cx"> RenderTreeUpdater::tearDownRenderers(*m_selectedChild);
</span><span class="cx">
</span><span class="cx"> m_selectedChild = newSelectedChild;
</span><del>- setNeedsStyleRecalc();
</del><ins>+ invalidateStyleForSubtree();
</ins><span class="cx"> }
</span><span class="cx">
</span><span class="cx"> void MathMLSelectElement::defaultEventHandler(Event& event)
</span></span></pre></div>
<a id="trunkSourceWebCorepageanimationAnimationBasecpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/page/animation/AnimationBase.cpp (207457 => 207458)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/page/animation/AnimationBase.cpp        2016-10-18 09:21:58 UTC (rev 207457)
+++ trunk/Source/WebCore/page/animation/AnimationBase.cpp        2016-10-18 12:28:55 UTC (rev 207458)
</span><span class="lines">@@ -91,7 +91,7 @@
</span><span class="cx"> {
</span><span class="cx"> ASSERT(!element || element->document().pageCacheState() == Document::NotInPageCache);
</span><span class="cx"> if (element)
</span><del>- element->setNeedsStyleRecalc(SyntheticStyleChange);
</del><ins>+ element->invalidateStyleAndLayerComposition();
</ins><span class="cx"> }
</span><span class="cx">
</span><span class="cx"> double AnimationBase::duration() const
</span></span></pre></div>
<a id="trunkSourceWebCorepageanimationAnimationControllercpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/page/animation/AnimationController.cpp (207457 => 207458)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/page/animation/AnimationController.cpp        2016-10-18 09:21:58 UTC (rev 207457)
+++ trunk/Source/WebCore/page/animation/AnimationController.cpp        2016-10-18 12:28:55 UTC (rev 207458)
</span><span class="lines">@@ -112,7 +112,7 @@
</span><span class="cx"> });
</span><span class="cx">
</span><span class="cx"> // Return false if we didn't do anything OR we are suspended (so we don't try to
</span><del>- // do a setNeedsStyleRecalc() when suspended).
</del><ins>+ // do a invalidateStyleForSubtree() when suspended).
</ins><span class="cx"> RefPtr<CompositeAnimation> animation = m_compositeAnimations.take(&renderer);
</span><span class="cx"> ASSERT(animation);
</span><span class="cx"> renderer.setIsCSSAnimating(false);
</span><span class="lines">@@ -138,7 +138,7 @@
</span><span class="cx"> Element* element = compositeAnimation.key->element();
</span><span class="cx"> ASSERT(element);
</span><span class="cx"> ASSERT(element->document().pageCacheState() == Document::NotInPageCache);
</span><del>- element->setNeedsStyleRecalc(SyntheticStyleChange);
</del><ins>+ element->invalidateStyleAndLayerComposition();
</ins><span class="cx"> calledSetChanged = true;
</span><span class="cx"> }
</span><span class="cx"> }
</span><span class="lines">@@ -211,7 +211,7 @@
</span><span class="cx"> }
</span><span class="cx">
</span><span class="cx"> for (auto& change : m_elementChangesToDispatch)
</span><del>- change->setNeedsStyleRecalc(SyntheticStyleChange);
</del><ins>+ change->invalidateStyleAndLayerComposition();
</ins><span class="cx">
</span><span class="cx"> m_elementChangesToDispatch.clear();
</span><span class="cx">
</span><span class="lines">@@ -358,7 +358,7 @@
</span><span class="cx">
</span><span class="cx"> CompositeAnimation& compositeAnimation = ensureCompositeAnimation(*renderer);
</span><span class="cx"> if (compositeAnimation.pauseAnimationAtTime(name, t)) {
</span><del>- renderer->element()->setNeedsStyleRecalc(SyntheticStyleChange);
</del><ins>+ renderer->element()->invalidateStyleAndLayerComposition();
</ins><span class="cx"> startUpdateStyleIfNeededDispatcher();
</span><span class="cx"> return true;
</span><span class="cx"> }
</span><span class="lines">@@ -373,7 +373,7 @@
</span><span class="cx">
</span><span class="cx"> CompositeAnimation& compositeAnimation = ensureCompositeAnimation(*renderer);
</span><span class="cx"> if (compositeAnimation.pauseTransitionAtTime(cssPropertyID(property), t)) {
</span><del>- renderer->element()->setNeedsStyleRecalc(SyntheticStyleChange);
</del><ins>+ renderer->element()->invalidateStyleAndLayerComposition();
</ins><span class="cx"> startUpdateStyleIfNeededDispatcher();
</span><span class="cx"> return true;
</span><span class="cx"> }
</span><span class="lines">@@ -590,7 +590,7 @@
</span><span class="cx"> Element* element = renderer.element();
</span><span class="cx"> ASSERT(!element || element->document().pageCacheState() == Document::NotInPageCache);
</span><span class="cx"> if (element)
</span><del>- element->setNeedsStyleRecalc(SyntheticStyleChange);
</del><ins>+ element->invalidateStyleAndLayerComposition();
</ins><span class="cx"> }
</span><span class="cx">
</span><span class="cx"> bool AnimationController::updateAnimations(RenderElement& renderer, const RenderStyle& newStyle, std::unique_ptr<RenderStyle>& animatedStyle)
</span></span></pre></div>
<a id="trunkSourceWebCorerenderingRenderImagecpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/rendering/RenderImage.cpp (207457 => 207458)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/rendering/RenderImage.cpp        2016-10-18 09:21:58 UTC (rev 207457)
+++ trunk/Source/WebCore/rendering/RenderImage.cpp        2016-10-18 12:28:55 UTC (rev 207458)
</span><span class="lines">@@ -256,7 +256,7 @@
</span><span class="cx"> ASSERT(element());
</span><span class="cx"> if (element()) {
</span><span class="cx"> m_needsToSetSizeForAltText = true;
</span><del>- element()->setNeedsStyleRecalc(SyntheticStyleChange);
</del><ins>+ element()->invalidateStyleAndLayerComposition();
</ins><span class="cx"> }
</span><span class="cx"> return;
</span><span class="cx"> }
</span></span></pre></div>
<a id="trunkSourceWebCorerenderingRenderLayercpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/rendering/RenderLayer.cpp (207457 => 207458)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/rendering/RenderLayer.cpp        2016-10-18 09:21:58 UTC (rev 207457)
+++ trunk/Source/WebCore/rendering/RenderLayer.cpp        2016-10-18 12:28:55 UTC (rev 207458)
</span><span class="lines">@@ -6985,7 +6985,7 @@
</span><span class="cx"> {
</span><span class="cx"> // We use the enclosing element so that we recalculate style for the ancestor of an anonymous object.
</span><span class="cx"> if (Element* element = enclosingElement())
</span><del>- element->setNeedsStyleRecalc(SyntheticStyleChange);
</del><ins>+ element->invalidateStyleAndLayerComposition();
</ins><span class="cx"> renderer().repaint();
</span><span class="cx"> }
</span><span class="cx">
</span></span></pre></div>
<a id="trunkSourceWebCorerenderingRenderLayerCompositorcpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/rendering/RenderLayerCompositor.cpp (207457 => 207458)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/rendering/RenderLayerCompositor.cpp        2016-10-18 09:21:58 UTC (rev 207457)
+++ trunk/Source/WebCore/rendering/RenderLayerCompositor.cpp        2016-10-18 12:28:55 UTC (rev 207458)
</span><span class="lines">@@ -3549,7 +3549,7 @@
</span><span class="cx"> case RootLayerAttachedViaEnclosingFrame: {
</span><span class="cx"> // The layer will get hooked up via RenderLayerBacking::updateConfiguration()
</span><span class="cx"> // for the frame's renderer in the parent document.
</span><del>- m_renderView.document().ownerElement()->scheduleSetNeedsStyleRecalc(SyntheticStyleChange);
</del><ins>+ m_renderView.document().ownerElement()->scheduleinvalidateStyleAndLayerComposition();
</ins><span class="cx"> break;
</span><span class="cx"> }
</span><span class="cx"> }
</span><span class="lines">@@ -3578,7 +3578,7 @@
</span><span class="cx"> m_rootContentLayer->removeFromParent();
</span><span class="cx">
</span><span class="cx"> if (HTMLFrameOwnerElement* ownerElement = m_renderView.document().ownerElement())
</span><del>- ownerElement->scheduleSetNeedsStyleRecalc(SyntheticStyleChange);
</del><ins>+ ownerElement->scheduleinvalidateStyleAndLayerComposition();
</ins><span class="cx"> break;
</span><span class="cx"> }
</span><span class="cx"> case RootLayerAttachedViaChromeClient: {
</span><span class="lines">@@ -3637,7 +3637,7 @@
</span><span class="cx"> // Compositing affects the answer to RenderIFrame::requiresAcceleratedCompositing(), so
</span><span class="cx"> // we need to schedule a style recalc in our parent document.
</span><span class="cx"> if (HTMLFrameOwnerElement* ownerElement = m_renderView.document().ownerElement())
</span><del>- ownerElement->scheduleSetNeedsStyleRecalc(SyntheticStyleChange);
</del><ins>+ ownerElement->scheduleinvalidateStyleAndLayerComposition();
</ins><span class="cx"> }
</span><span class="cx">
</span><span class="cx"> bool RenderLayerCompositor::layerHas3DContent(const RenderLayer& layer) const
</span></span></pre></div>
<a id="trunkSourceWebCorerenderingRenderObjectcpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/rendering/RenderObject.cpp (207457 => 207458)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/rendering/RenderObject.cpp        2016-10-18 09:21:58 UTC (rev 207457)
+++ trunk/Source/WebCore/rendering/RenderObject.cpp        2016-10-18 12:28:55 UTC (rev 207458)
</span><span class="lines">@@ -1488,13 +1488,15 @@
</span><span class="cx"> {
</span><span class="cx"> bool valueChanged = (dragOn != isDragging());
</span><span class="cx"> setIsDragging(dragOn);
</span><del>- if (valueChanged && node() && (style().affectedByDrag() || (is<Element>(*node()) && downcast<Element>(*node()).childrenAffectedByDrag())))
- node()->setNeedsStyleRecalc();
</del><span class="cx">
</span><span class="cx"> if (!is<RenderElement>(*this))
</span><span class="cx"> return;
</span><ins>+ auto& renderElement = downcast<RenderElement>(*this);
</ins><span class="cx">
</span><del>- for (auto& child : childrenOfType<RenderObject>(downcast<RenderElement>(*this)))
</del><ins>+ if (valueChanged && renderElement.element() && (style().affectedByDrag() || renderElement.element()->childrenAffectedByDrag()))
+ renderElement.element()->invalidateStyleForSubtree();
+
+ for (auto& child : childrenOfType<RenderObject>(renderElement))
</ins><span class="cx"> child.updateDragState(dragOn);
</span><span class="cx"> }
</span><span class="cx">
</span></span></pre></div>
<a id="trunkSourceWebCorerenderingsvgSVGResourcesCachecpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/rendering/svg/SVGResourcesCache.cpp (207457 => 207458)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/rendering/svg/SVGResourcesCache.cpp        2016-10-18 09:21:58 UTC (rev 207457)
+++ trunk/Source/WebCore/rendering/svg/SVGResourcesCache.cpp        2016-10-18 12:28:55 UTC (rev 207458)
</span><span class="lines">@@ -121,7 +121,7 @@
</span><span class="cx"> RenderSVGResource::markForLayoutAndParentResourceInvalidation(renderer, false);
</span><span class="cx">
</span><span class="cx"> if (renderer.element() && !renderer.element()->isSVGElement())
</span><del>- renderer.element()->setNeedsStyleRecalc(SyntheticStyleChange);
</del><ins>+ renderer.element()->invalidateStyleAndLayerComposition();
</ins><span class="cx"> }
</span><span class="cx">
</span><span class="cx"> void SVGResourcesCache::clientWasAddedToTree(RenderObject& renderer)
</span></span></pre></div>
<a id="trunkSourceWebCorestyleAttributeChangeInvalidationcpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/style/AttributeChangeInvalidation.cpp (207457 => 207458)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/style/AttributeChangeInvalidation.cpp        2016-10-18 09:21:58 UTC (rev 207457)
+++ trunk/Source/WebCore/style/AttributeChangeInvalidation.cpp        2016-10-18 12:28:55 UTC (rev 207458)
</span><span class="lines">@@ -65,16 +65,16 @@
</span><span class="cx"> return;
</span><span class="cx">
</span><span class="cx"> if (!isHTML) {
</span><del>- m_element.setNeedsStyleRecalc(FullStyleChange);
</del><ins>+ m_element.invalidateStyleForSubtree();
</ins><span class="cx"> return;
</span><span class="cx"> }
</span><span class="cx">
</span><span class="cx"> if (m_element.shadowRoot() && ruleSets.authorStyle().hasShadowPseudoElementRules()) {
</span><del>- m_element.setNeedsStyleRecalc(FullStyleChange);
</del><ins>+ m_element.invalidateStyleForSubtree();
</ins><span class="cx"> return;
</span><span class="cx"> }
</span><span class="cx">
</span><del>- m_element.setNeedsStyleRecalc(InlineStyleChange);
</del><ins>+ m_element.invalidateStyle();
</ins><span class="cx">
</span><span class="cx"> if (!childrenOfType<Element>(m_element).first())
</span><span class="cx"> return;
</span></span></pre></div>
<a id="trunkSourceWebCorestyleClassChangeInvalidationcpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/style/ClassChangeInvalidation.cpp (207457 => 207458)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/style/ClassChangeInvalidation.cpp        2016-10-18 09:21:58 UTC (rev 207457)
+++ trunk/Source/WebCore/style/ClassChangeInvalidation.cpp        2016-10-18 12:28:55 UTC (rev 207458)
</span><span class="lines">@@ -116,11 +116,11 @@
</span><span class="cx"> return;
</span><span class="cx">
</span><span class="cx"> if (shadowRoot && ruleSets.authorStyle().hasShadowPseudoElementRules()) {
</span><del>- m_element.setNeedsStyleRecalc(FullStyleChange);
</del><ins>+ m_element.invalidateStyleForSubtree();
</ins><span class="cx"> return;
</span><span class="cx"> }
</span><span class="cx">
</span><del>- m_element.setNeedsStyleRecalc(InlineStyleChange);
</del><ins>+ m_element.invalidateStyle();
</ins><span class="cx">
</span><span class="cx"> if (!childrenOfType<Element>(m_element).first())
</span><span class="cx"> return;
</span></span></pre></div>
<a id="trunkSourceWebCorestyleIdChangeInvalidationcpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/style/IdChangeInvalidation.cpp (207457 => 207458)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/style/IdChangeInvalidation.cpp        2016-10-18 09:21:58 UTC (rev 207457)
+++ trunk/Source/WebCore/style/IdChangeInvalidation.cpp        2016-10-18 12:28:55 UTC (rev 207458)
</span><span class="lines">@@ -61,19 +61,19 @@
</span><span class="cx"> return;
</span><span class="cx">
</span><span class="cx"> if (m_element.shadowRoot() && ruleSets.authorStyle().hasShadowPseudoElementRules()) {
</span><del>- m_element.setNeedsStyleRecalc(FullStyleChange);
</del><ins>+ m_element.invalidateStyleForSubtree();
</ins><span class="cx"> return;
</span><span class="cx"> }
</span><span class="cx">
</span><del>- m_element.setNeedsStyleRecalc(InlineStyleChange);
</del><ins>+ m_element.invalidateStyle();
</ins><span class="cx">
</span><span class="cx"> // This could be easily optimized for fine-grained descendant invalidation similar to ClassChangeInvalidation.
</span><span class="cx"> // However using ids for dynamic styling is rare and this is probably not worth the memory cost of the required data structures.
</span><span class="cx"> bool mayAffectDescendantStyle = ruleSets.features().idsMatchingAncestorsInRules.contains(changedId.impl());
</span><span class="cx"> if (mayAffectDescendantStyle)
</span><del>- m_element.setNeedsStyleRecalc(FullStyleChange);
</del><ins>+ m_element.invalidateStyleForSubtree();
</ins><span class="cx"> else
</span><del>- m_element.setNeedsStyleRecalc(InlineStyleChange);
</del><ins>+ m_element.invalidateStyle();
</ins><span class="cx"> }
</span><span class="cx">
</span><span class="cx"> }
</span></span></pre></div>
<a id="trunkSourceWebCorestyleRenderTreeUpdatercpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/style/RenderTreeUpdater.cpp (207457 => 207458)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/style/RenderTreeUpdater.cpp        2016-10-18 09:21:58 UTC (rev 207457)
+++ trunk/Source/WebCore/style/RenderTreeUpdater.cpp        2016-10-18 12:28:55 UTC (rev 207458)
</span><span class="lines">@@ -289,7 +289,7 @@
</span><span class="cx"> return;
</span><span class="cx"> auto& renderer = *element.renderer();
</span><span class="cx">
</span><del>- if (update.isSynthetic) {
</del><ins>+ if (update.recompositeLayer) {
</ins><span class="cx"> renderer.setStyle(WTFMove(*update.style), StyleDifferenceRecompositeLayer);
</span><span class="cx"> return;
</span><span class="cx"> }
</span></span></pre></div>
<a id="trunkSourceWebCorestyleStyleScopecpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/style/StyleScope.cpp (207457 => 207458)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/style/StyleScope.cpp        2016-10-18 09:21:58 UTC (rev 207457)
+++ trunk/Source/WebCore/style/StyleScope.cpp        2016-10-18 12:28:55 UTC (rev 207458)
</span><span class="lines">@@ -392,7 +392,7 @@
</span><span class="cx"> if (requiresFullStyleRecalc) {
</span><span class="cx"> if (m_shadowRoot) {
</span><span class="cx"> for (auto& shadowChild : childrenOfType<Element>(*m_shadowRoot))
</span><del>- shadowChild.setNeedsStyleRecalc();
</del><ins>+ shadowChild.invalidateStyleForSubtree();
</ins><span class="cx"> } else
</span><span class="cx"> m_document.scheduleForcedStyleRecalc();
</span><span class="cx"> }
</span></span></pre></div>
<a id="trunkSourceWebCorestyleStyleTreeResolvercpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/style/StyleTreeResolver.cpp (207457 => 207458)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/style/StyleTreeResolver.cpp        2016-10-18 09:21:58 UTC (rev 207457)
+++ trunk/Source/WebCore/style/StyleTreeResolver.cpp        2016-10-18 12:28:55 UTC (rev 207458)
</span><span class="lines">@@ -168,7 +168,7 @@
</span><span class="cx">
</span><span class="cx"> if (child.needsStyleRecalc() || affectedByPreviousSibling) {
</span><span class="cx"> child.resetComputedStyle();
</span><del>- child.clearNeedsStyleRecalc();
</del><ins>+ child.setHasValidStyle();
</ins><span class="cx"> }
</span><span class="cx">
</span><span class="cx"> if (child.childNeedsStyleRecalc()) {
</span><span class="lines">@@ -200,13 +200,13 @@
</span><span class="cx"> if (!affectsRenderedSubtree(element, *newStyle))
</span><span class="cx"> return { };
</span><span class="cx">
</span><del>- bool shouldReconstructRenderTree = element.styleChangeType() == ReconstructRenderTree || parent().change == Detach;
</del><ins>+ bool shouldReconstructRenderTree = element.styleValidity() >= Validity::SubtreeAndRenderersInvalid || parent().change == Detach;
</ins><span class="cx"> auto* rendererToUpdate = shouldReconstructRenderTree ? nullptr : element.renderer();
</span><span class="cx">
</span><span class="cx"> auto update = createAnimatedElementUpdate(WTFMove(newStyle), rendererToUpdate, m_document);
</span><span class="cx">
</span><del>- if (element.styleChangeType() == SyntheticStyleChange)
- update.isSynthetic = true;
</del><ins>+ if (element.styleResolutionShouldRecompositeLayer())
+ update.recompositeLayer = true;
</ins><span class="cx">
</span><span class="cx"> auto* existingStyle = element.renderStyle();
</span><span class="cx">
</span><span class="lines">@@ -233,7 +233,7 @@
</span><span class="cx"> update.change = Detach;
</span><span class="cx"> }
</span><span class="cx">
</span><del>- if (update.change != Detach && (parent().change == Force || element.styleChangeType() == FullStyleChange))
</del><ins>+ if (update.change != Detach && (parent().change == Force || element.styleValidity() >= Validity::SubtreeInvalid))
</ins><span class="cx"> update.change = Force;
</span><span class="cx">
</span><span class="cx"> return update;
</span><span class="lines">@@ -245,7 +245,7 @@
</span><span class="cx">
</span><span class="cx"> std::unique_ptr<RenderStyle> animatedStyle;
</span><span class="cx"> if (rendererToUpdate && document.frame()->animation().updateAnimations(*rendererToUpdate, *newStyle, animatedStyle))
</span><del>- update.isSynthetic = true;
</del><ins>+ update.recompositeLayer = true;
</ins><span class="cx">
</span><span class="cx"> if (animatedStyle) {
</span><span class="cx"> update.change = determineChange(rendererToUpdate->style(), *animatedStyle);
</span><span class="lines">@@ -282,7 +282,7 @@
</span><span class="cx"> {
</span><span class="cx"> auto& parentElement = *parent().element;
</span><span class="cx">
</span><del>- parentElement.clearNeedsStyleRecalc();
</del><ins>+ parentElement.setHasValidStyle();
</ins><span class="cx"> parentElement.clearChildNeedsStyleRecalc();
</span><span class="cx">
</span><span class="cx"> if (parent().didPushScope)
</span><span class="lines">@@ -332,11 +332,11 @@
</span><span class="cx">
</span><span class="cx"> static void clearNeedsStyleResolution(Element& element)
</span><span class="cx"> {
</span><del>- element.clearNeedsStyleRecalc();
</del><ins>+ element.setHasValidStyle();
</ins><span class="cx"> if (auto* before = element.beforePseudoElement())
</span><del>- before->clearNeedsStyleRecalc();
</del><ins>+ before->setHasValidStyle();
</ins><span class="cx"> if (auto* after = element.afterPseudoElement())
</span><del>- after->clearNeedsStyleRecalc();
</del><ins>+ after->setHasValidStyle();
</ins><span class="cx"> }
</span><span class="cx">
</span><span class="cx"> void TreeResolver::resolveComposedTree()
</span><span class="lines">@@ -362,10 +362,10 @@
</span><span class="cx">
</span><span class="cx"> if (is<Text>(node)) {
</span><span class="cx"> auto& text = downcast<Text>(node);
</span><del>- if (text.styleChangeType() == ReconstructRenderTree && parent.change != Detach)
</del><ins>+ if (text.styleValidity() >= Validity::SubtreeAndRenderersInvalid && parent.change != Detach)
</ins><span class="cx"> m_update->addText(text, parent.element);
</span><span class="cx">
</span><del>- text.clearNeedsStyleRecalc();
</del><ins>+ text.setHasValidStyle();
</ins><span class="cx"> it.traverseNextSkippingChildren();
</span><span class="cx"> continue;
</span><span class="cx"> }
</span></span></pre></div>
<a id="trunkSourceWebCorestyleStyleUpdateh"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/style/StyleUpdate.h (207457 => 207458)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/style/StyleUpdate.h        2016-10-18 09:21:58 UTC (rev 207457)
+++ trunk/Source/WebCore/style/StyleUpdate.h        2016-10-18 12:28:55 UTC (rev 207458)
</span><span class="lines">@@ -48,7 +48,7 @@
</span><span class="cx"> struct ElementUpdate {
</span><span class="cx"> std::unique_ptr<RenderStyle> style;
</span><span class="cx"> Change change { NoChange };
</span><del>- bool isSynthetic { false };
</del><ins>+ bool recompositeLayer { false };
</ins><span class="cx"> };
</span><span class="cx">
</span><span class="cx"> class Update {
</span></span></pre></div>
<a id="trunkSourceWebCorestyleStyleValidityh"></a>
<div class="addfile"><h4>Added: trunk/Source/WebCore/style/StyleValidity.h (0 => 207458)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/style/StyleValidity.h         (rev 0)
+++ trunk/Source/WebCore/style/StyleValidity.h        2016-10-18 12:28:55 UTC (rev 207458)
</span><span class="lines">@@ -0,0 +1,44 @@
</span><ins>+/*
+ * Copyright (C) 2016 Apple Inc. All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS''
+ * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
+ * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+ * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS
+ * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+ * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
+ * THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#pragma once
+
+namespace WebCore {
+namespace Style {
+
+enum class Validity {
+ Valid,
+ ElementInvalid,
+ SubtreeInvalid,
+ SubtreeAndRenderersInvalid
+};
+
+enum class InvalidationMode {
+ Normal,
+ RecompositeLayer
+};
+
+}
+}
</ins></span></pre></div>
<a id="trunkSourceWebCoresvgSVGAElementcpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/svg/SVGAElement.cpp (207457 => 207458)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/svg/SVGAElement.cpp        2016-10-18 09:21:58 UTC (rev 207457)
+++ trunk/Source/WebCore/svg/SVGAElement.cpp        2016-10-18 12:28:55 UTC (rev 207458)
</span><span class="lines">@@ -98,7 +98,7 @@
</span><span class="cx"> setIsLink(!href().isNull() && !shouldProhibitLinks(this));
</span><span class="cx"> if (wasLink != isLink()) {
</span><span class="cx"> InstanceInvalidationGuard guard(*this);
</span><del>- setNeedsStyleRecalc();
</del><ins>+ invalidateStyleForSubtree();
</ins><span class="cx"> }
</span><span class="cx"> }
</span><span class="cx">
</span></span></pre></div>
<a id="trunkSourceWebCoresvgSVGAnimateElementBasecpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/svg/SVGAnimateElementBase.cpp (207457 => 207458)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/svg/SVGAnimateElementBase.cpp        2016-10-18 09:21:58 UTC (rev 207457)
+++ trunk/Source/WebCore/svg/SVGAnimateElementBase.cpp        2016-10-18 12:28:55 UTC (rev 207458)
</span><span class="lines">@@ -239,7 +239,7 @@
</span><span class="cx"> if (!targetElement.ensureAnimatedSMILStyleProperties().setProperty(id, value, false))
</span><span class="cx"> return;
</span><span class="cx">
</span><del>- targetElement.setNeedsStyleRecalc(SyntheticStyleChange);
</del><ins>+ targetElement.invalidateStyleAndLayerComposition();
</ins><span class="cx"> }
</span><span class="cx">
</span><span class="cx"> static inline void removeCSSPropertyFromTarget(SVGElement& targetElement, CSSPropertyID id)
</span><span class="lines">@@ -246,7 +246,7 @@
</span><span class="cx"> {
</span><span class="cx"> ASSERT(!targetElement.m_deletionHasBegun);
</span><span class="cx"> targetElement.ensureAnimatedSMILStyleProperties().removeProperty(id);
</span><del>- targetElement.setNeedsStyleRecalc(SyntheticStyleChange);
</del><ins>+ targetElement.invalidateStyleAndLayerComposition();
</ins><span class="cx"> }
</span><span class="cx">
</span><span class="cx"> static inline void applyCSSPropertyToTargetAndInstances(SVGElement& targetElement, const QualifiedName& attributeName, const String& valueAsString)
</span></span></pre></div>
<a id="trunkSourceWebCoresvgSVGElementcpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/svg/SVGElement.cpp (207457 => 207458)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/svg/SVGElement.cpp        2016-10-18 09:21:58 UTC (rev 207457)
+++ trunk/Source/WebCore/svg/SVGElement.cpp        2016-10-18 12:28:55 UTC (rev 207458)
</span><span class="lines">@@ -301,7 +301,7 @@
</span><span class="cx">
</span><span class="cx"> bool SVGElement::willRecalcStyle(Style::Change change)
</span><span class="cx"> {
</span><del>- if (!m_svgRareData || styleChangeType() == SyntheticStyleChange)
</del><ins>+ if (!m_svgRareData || styleResolutionShouldRecompositeLayer())
</ins><span class="cx"> return true;
</span><span class="cx"> // If the style changes because of a regular property change (not induced by SMIL animations themselves)
</span><span class="cx"> // reset the "computed style without SMIL style properties", so the base value change gets reflected.
</span></span></pre></div>
<a id="trunkSourceWebCoresvgSVGElementh"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/svg/SVGElement.h (207457 => 207458)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/svg/SVGElement.h        2016-10-18 09:21:58 UTC (rev 207457)
+++ trunk/Source/WebCore/svg/SVGElement.h        2016-10-18 12:28:55 UTC (rev 207458)
</span><span class="lines">@@ -90,7 +90,7 @@
</span><span class="cx"> {
</span><span class="cx"> ensureUniqueElementData().setPresentationAttributeStyleIsDirty(true);
</span><span class="cx"> // Trigger style recalculation for "elements as resource" (e.g. referenced by feImage).
</span><del>- setNeedsStyleRecalc(InlineStyleChange);
</del><ins>+ invalidateStyle();
</ins><span class="cx"> }
</span><span class="cx">
</span><span class="cx"> // The instances of an element are clones made in shadow trees to implement <use>.
</span></span></pre></div>
<a id="trunkSourceWebCoresvgSVGTestscpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/svg/SVGTests.cpp (207457 => 207458)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/svg/SVGTests.cpp        2016-10-18 09:21:58 UTC (rev 207457)
+++ trunk/Source/WebCore/svg/SVGTests.cpp        2016-10-18 12:28:55 UTC (rev 207458)
</span><span class="lines">@@ -193,7 +193,7 @@
</span><span class="cx"> return false;
</span><span class="cx"> if (!targetElement->inDocument())
</span><span class="cx"> return true;
</span><del>- targetElement->setNeedsStyleRecalc(ReconstructRenderTree);
</del><ins>+ targetElement->invalidateStyleAndRenderersForSubtree();
</ins><span class="cx"> return true;
</span><span class="cx"> }
</span><span class="cx">
</span></span></pre></div>
<a id="trunkSourceWebCoresvgSVGUseElementcpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/svg/SVGUseElement.cpp (207457 => 207458)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/svg/SVGUseElement.cpp        2016-10-18 09:21:58 UTC (rev 207457)
+++ trunk/Source/WebCore/svg/SVGUseElement.cpp        2016-10-18 12:28:55 UTC (rev 207458)
</span><span class="lines">@@ -514,7 +514,7 @@
</span><span class="cx"> if (m_shadowTreeNeedsUpdate)
</span><span class="cx"> return;
</span><span class="cx"> m_shadowTreeNeedsUpdate = true;
</span><del>- setNeedsStyleRecalc(ReconstructRenderTree);
</del><ins>+ invalidateStyleAndRenderersForSubtree();
</ins><span class="cx"> invalidateDependentShadowTrees();
</span><span class="cx"> }
</span><span class="cx">
</span></span></pre></div>
<a id="trunkSourceWebCoretestingInternalscpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/testing/Internals.cpp (207457 => 207458)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/testing/Internals.cpp        2016-10-18 09:21:58 UTC (rev 207457)
+++ trunk/Source/WebCore/testing/Internals.cpp        2016-10-18 12:28:55 UTC (rev 207458)
</span><span class="lines">@@ -486,18 +486,16 @@
</span><span class="cx"> return node.needsStyleRecalc();
</span><span class="cx"> }
</span><span class="cx">
</span><del>-static String styleChangeTypeToString(StyleChangeType type)
</del><ins>+static String styleValidityToToString(Style::Validity validity)
</ins><span class="cx"> {
</span><del>- switch (type) {
- case NoStyleChange:
</del><ins>+ switch (validity) {
+ case Style::Validity::Valid:
</ins><span class="cx"> return "NoStyleChange";
</span><del>- case InlineStyleChange:
</del><ins>+ case Style::Validity::ElementInvalid:
</ins><span class="cx"> return "InlineStyleChange";
</span><del>- case FullStyleChange:
</del><ins>+ case Style::Validity::SubtreeInvalid:
</ins><span class="cx"> return "FullStyleChange";
</span><del>- case SyntheticStyleChange:
- return "SyntheticStyleChange";
- case ReconstructRenderTree:
</del><ins>+ case Style::Validity::SubtreeAndRenderersInvalid:
</ins><span class="cx"> return "ReconstructRenderTree";
</span><span class="cx"> }
</span><span class="cx"> ASSERT_NOT_REACHED();
</span><span class="lines">@@ -506,7 +504,7 @@
</span><span class="cx">
</span><span class="cx"> String Internals::styleChangeType(Node& node)
</span><span class="cx"> {
</span><del>- return styleChangeTypeToString(node.styleChangeType());
</del><ins>+ return styleValidityToToString(node.styleValidity());
</ins><span class="cx"> }
</span><span class="cx">
</span><span class="cx"> String Internals::description(JSC::JSValue value)
</span></span></pre></div>
<a id="trunkSourceWebKitmacChangeLog"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebKit/mac/ChangeLog (207457 => 207458)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebKit/mac/ChangeLog        2016-10-18 09:21:58 UTC (rev 207457)
+++ trunk/Source/WebKit/mac/ChangeLog        2016-10-18 12:28:55 UTC (rev 207458)
</span><span class="lines">@@ -1,3 +1,15 @@
</span><ins>+2016-10-17 Antti Koivisto <antti@apple.com>
+
+ Rename setNeedsStyleRecalc to invalidateStyle
+ https://bugs.webkit.org/show_bug.cgi?id=163542
+
+ Reviewed by Darin Adler.
+
+ * Plugins/Hosted/WebHostedNetscapePluginView.mm:
+ (-[WebHostedNetscapePluginView createPluginLayer]):
+ * Plugins/WebNetscapePluginView.mm:
+ (-[WebNetscapePluginView createPlugin]):
+
</ins><span class="cx"> 2016-10-17 Jeremy Jones <jeremyj@apple.com>
</span><span class="cx">
</span><span class="cx"> Enable keyboard in fullscreen.
</span></span></pre></div>
<a id="trunkSourceWebKitmacPluginsHostedWebHostedNetscapePluginViewmm"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebKit/mac/Plugins/Hosted/WebHostedNetscapePluginView.mm (207457 => 207458)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebKit/mac/Plugins/Hosted/WebHostedNetscapePluginView.mm        2016-10-18 09:21:58 UTC (rev 207457)
+++ trunk/Source/WebKit/mac/Plugins/Hosted/WebHostedNetscapePluginView.mm        2016-10-18 12:28:55 UTC (rev 207458)
</span><span class="lines">@@ -168,7 +168,7 @@
</span><span class="cx"> // Eagerly enter compositing mode, since we know we'll need it. This avoids firing setNeedsStyleRecalc()
</span><span class="cx"> // for iframes that contain composited plugins at bad times. https://bugs.webkit.org/show_bug.cgi?id=39033
</span><span class="cx"> core([self webFrame])->view()->enterCompositingMode();
</span><del>- [self element]->setNeedsStyleRecalc(SyntheticStyleChange);
</del><ins>+ [self element]->invalidateStyleAndLayerComposition();
</ins><span class="cx"> } else
</span><span class="cx"> self.wantsLayer = YES;
</span><span class="cx"> }
</span></span></pre></div>
<a id="trunkSourceWebKitmacPluginsWebNetscapePluginViewmm"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebKit/mac/Plugins/WebNetscapePluginView.mm (207457 => 207458)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebKit/mac/Plugins/WebNetscapePluginView.mm        2016-10-18 09:21:58 UTC (rev 207457)
+++ trunk/Source/WebKit/mac/Plugins/WebNetscapePluginView.mm        2016-10-18 12:28:55 UTC (rev 207458)
</span><span class="lines">@@ -1099,10 +1099,10 @@
</span><span class="cx"> realPluginLayer.get().autoresizingMask = kCALayerWidthSizable | kCALayerHeightSizable;
</span><span class="cx"> [_pluginLayer.get() addSublayer:realPluginLayer.get()];
</span><span class="cx">
</span><del>- // Eagerly enter compositing mode, since we know we'll need it. This avoids firing setNeedsStyleRecalc()
</del><ins>+ // Eagerly enter compositing mode, since we know we'll need it. This avoids firing invalidateStyle()
</ins><span class="cx"> // for iframes that contain composited plugins at bad times. https://bugs.webkit.org/show_bug.cgi?id=39033
</span><span class="cx"> core([self webFrame])->view()->enterCompositingMode();
</span><del>- [self element]->setNeedsStyleRecalc(SyntheticStyleChange);
</del><ins>+ [self element]->invalidateStyleAndLayerComposition();
</ins><span class="cx"> } else
</span><span class="cx"> [self setWantsLayer:YES];
</span><span class="cx">
</span></span></pre></div>
<a id="trunkSourceWebKit2ChangeLog"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebKit2/ChangeLog (207457 => 207458)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebKit2/ChangeLog        2016-10-18 09:21:58 UTC (rev 207457)
+++ trunk/Source/WebKit2/ChangeLog        2016-10-18 12:28:55 UTC (rev 207458)
</span><span class="lines">@@ -1,3 +1,14 @@
</span><ins>+2016-10-17 Antti Koivisto <antti@apple.com>
+
+ Rename setNeedsStyleRecalc to invalidateStyle
+ https://bugs.webkit.org/show_bug.cgi?id=163542
+
+ Reviewed by Darin Adler.
+
+ * WebProcess/Plugins/PluginView.cpp:
+ (WebKit::PluginView::didInitializePlugin):
+ (WebKit::PluginView::pluginProcessCrashed):
+
</ins><span class="cx"> 2016-10-17 Carlos Garcia Campos <cgarcia@igalia.com>
</span><span class="cx">
</span><span class="cx"> NetworkSession: PendingDownload is leaked if canceled before willDecidePendingDownloadDestination
</span></span></pre></div>
<a id="trunkSourceWebKit2WebProcessPluginsPluginViewcpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebKit2/WebProcess/Plugins/PluginView.cpp (207457 => 207458)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebKit2/WebProcess/Plugins/PluginView.cpp        2016-10-18 09:21:58 UTC (rev 207457)
+++ trunk/Source/WebKit2/WebProcess/Plugins/PluginView.cpp        2016-10-18 12:28:55 UTC (rev 207458)
</span><span class="lines">@@ -663,7 +663,7 @@
</span><span class="cx"> if (m_pluginElement->displayState() < HTMLPlugInElement::Restarting) {
</span><span class="cx"> if (m_plugin->pluginLayer() && frame()) {
</span><span class="cx"> frame()->view()->enterCompositingMode();
</span><del>- m_pluginElement->setNeedsStyleRecalc(SyntheticStyleChange);
</del><ins>+ m_pluginElement->invalidateStyleAndLayerComposition();
</ins><span class="cx"> }
</span><span class="cx"> if (frame() && !frame()->settings().maximumPlugInSnapshotAttempts()) {
</span><span class="cx"> beginSnapshottingRunningPlugin();
</span><span class="lines">@@ -673,7 +673,7 @@
</span><span class="cx"> } else {
</span><span class="cx"> if (m_plugin->pluginLayer() && frame()) {
</span><span class="cx"> frame()->view()->enterCompositingMode();
</span><del>- m_pluginElement->setNeedsStyleRecalc(SyntheticStyleChange);
</del><ins>+ m_pluginElement->invalidateStyleAndLayerComposition();
</ins><span class="cx"> }
</span><span class="cx"> if (m_pluginElement->displayState() == HTMLPlugInElement::RestartingWithPendingMouseClick)
</span><span class="cx"> m_pluginElement->dispatchPendingMouseClick();
</span><span class="lines">@@ -1570,7 +1570,7 @@
</span><span class="cx"> if (!is<RenderEmbeddedObject>(renderer))
</span><span class="cx"> return;
</span><span class="cx">
</span><del>- m_pluginElement->setNeedsStyleRecalc(SyntheticStyleChange);
</del><ins>+ m_pluginElement->invalidateStyleAndLayerComposition();
</ins><span class="cx">
</span><span class="cx"> downcast<RenderEmbeddedObject>(*renderer).setPluginUnavailabilityReason(RenderEmbeddedObject::PluginCrashed);
</span><span class="cx">
</span></span></pre>
</div>
</div>
</body>
</html>