<!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  &lt;antti@apple.com&gt;
+
+        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  &lt;svillar@igalia.com&gt;
</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 = &quot;&lt;group&gt;&quot;; };
</span><span class="cx">                 E47E276416036ED200EE2AFB /* ExtensionStyleSheets.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ExtensionStyleSheets.h; sourceTree = &quot;&lt;group&gt;&quot;; };
</span><span class="cx">                 E47E276716036EDC00EE2AFB /* ExtensionStyleSheets.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = ExtensionStyleSheets.cpp; sourceTree = &quot;&lt;group&gt;&quot;; };
</span><ins>+                E48137B81DB3B526005C59BF /* StyleValidity.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = StyleValidity.h; sourceTree = &quot;&lt;group&gt;&quot;; };
</ins><span class="cx">                 E48944A0180B57D800F165D8 /* SimpleLineLayout.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = SimpleLineLayout.cpp; sourceTree = &quot;&lt;group&gt;&quot;; };
</span><span class="cx">                 E48944A1180B57D800F165D8 /* SimpleLineLayout.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SimpleLineLayout.h; sourceTree = &quot;&lt;group&gt;&quot;; };
</span><span class="cx">                 E4916FF6195DF6A0005AB349 /* LayerFlushThrottleState.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = LayerFlushThrottleState.h; sourceTree = &quot;&lt;group&gt;&quot;; };
</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 = &quot;&lt;group&gt;&quot;;
</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-&gt;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-&gt;renderer();
</span><span class="cx">         if (renderer &amp;&amp; renderer-&gt;style().hasViewportUnits())
</span><del>-            element-&gt;setNeedsStyleRecalc(InlineStyleChange);
</del><ins>+            element-&gt;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-&gt;setNeedsStyleRecalc();
</del><ins>+        m_cssTarget-&gt;invalidateStyleForSubtree();
</ins><span class="cx">     m_cssTarget = n;
</span><span class="cx">     if (n)
</span><del>-        n-&gt;setNeedsStyleRecalc();
</del><ins>+        n-&gt;invalidateStyleForSubtree();
</ins><span class="cx"> }
</span><span class="cx"> 
</span><span class="cx"> void Document::registerNodeListForInvalidation(LiveNodeList&amp; list)
</span><span class="lines">@@ -5835,8 +5835,8 @@
</span><span class="cx">     bool requiresRenderTreeRebuild;
</span><span class="cx">     fullScreenRenderer-&gt;unwrapRenderer(requiresRenderTreeRebuild);
</span><span class="cx"> 
</span><del>-    if (requiresRenderTreeRebuild &amp;&amp; fullScreenElement &amp;&amp; fullScreenElement-&gt;parentNode())
-        fullScreenElement-&gt;parentNode()-&gt;setNeedsStyleRecalc(ReconstructRenderTree);
</del><ins>+    if (requiresRenderTreeRebuild &amp;&amp; fullScreenElement &amp;&amp; fullScreenElement-&gt;parentElement())
+        fullScreenElement-&gt;parentElement()-&gt;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 &amp;&amp; m_fullScreenElement-&gt;isDescendantOf(this)) {
</span><del>-        m_fullScreenElement-&gt;setNeedsStyleRecalc();
</del><ins>+        m_fullScreenElement-&gt;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-&gt;renderStyle();
</span><span class="cx">     bool reactsToPress = (renderStyle &amp;&amp; renderStyle-&gt;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-&gt;parentOrShadowHostElement())
</span><span class="cx">         element-&gt;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()-&gt;style().affectedByHover() || childrenAffectedByHover())
</span><del>-        setNeedsStyleRecalc();
</del><ins>+        invalidateStyleForSubtree();
</ins><span class="cx"> 
</span><span class="cx">     if (renderer()-&gt;style().hasAppearance())
</span><span class="cx">         renderer()-&gt;theme().stateChanged(*renderer(), ControlStates::HoverState);
</span><span class="lines">@@ -1322,7 +1322,7 @@
</span><span class="cx">             elementData()-&gt;setHasNameAttribute(!newValue.isNull());
</span><span class="cx">         else if (name == HTMLNames::pseudoAttr) {
</span><span class="cx">             if (needsStyleInvalidation() &amp;&amp; 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&amp; target : postInsertionNotificationTargets)
</span><span class="cx">         target-&gt;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-&gt;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() &gt;= FullStyleChange)
</del><ins>+    if (parent.styleValidity() &gt;= 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-&gt;renderStyle();
</span><span class="cx">             if (!style || style-&gt;firstChildState())
</span><del>-                elementAfterChange-&gt;setNeedsStyleRecalc();
</del><ins>+                elementAfterChange-&gt;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 &amp;&amp; newFirstElement == elementAfterChange &amp;&amp; newFirstElement) {
</span><span class="cx">             auto* style = newFirstElement-&gt;renderStyle();
</span><span class="cx">             if (!style || !style-&gt;firstChildState())
</span><del>-                newFirstElement-&gt;setNeedsStyleRecalc();
</del><ins>+                newFirstElement-&gt;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-&gt;renderStyle();
</span><span class="cx">             if (!style || style-&gt;lastChildState())
</span><del>-                elementBeforeChange-&gt;setNeedsStyleRecalc();
</del><ins>+                elementBeforeChange-&gt;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) &amp;&amp; newLastElement == elementBeforeChange &amp;&amp; newLastElement) {
</span><span class="cx">             auto* style = newLastElement-&gt;renderStyle();
</span><span class="cx">             if (!style || !style-&gt;lastChildState())
</span><del>-                newLastElement-&gt;setNeedsStyleRecalc();
</del><ins>+                newLastElement-&gt;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-&gt;styleIsAffectedByPreviousSibling())
</span><del>-            elementAfterChange-&gt;setNeedsStyleRecalc();
</del><ins>+            elementAfterChange-&gt;invalidateStyleForSubtree();
</ins><span class="cx">         else if (elementAfterChange-&gt;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 &amp;&amp; !elementToInvalidate-&gt;styleIsAffectedByPreviousSibling());
</span><span class="cx"> 
</span><span class="cx">             if (elementToInvalidate)
</span><del>-                elementToInvalidate-&gt;setNeedsStyleRecalc();
</del><ins>+                elementToInvalidate-&gt;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() &amp;&amp; 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&amp; 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() &gt;= FullStyleChange)
</del><ins>+    if (styleValidity() &gt;= 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&amp; 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&amp; 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 = &amp;startNode; node; node = node-&gt;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 &gt; styleValidity()) {
+        m_nodeFlags &amp;= ~StyleValidityMask;
+        m_nodeFlags |= static_cast&lt;unsigned&gt;(validity) &lt;&lt; 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-&gt;setDirectChildNeedsStyleRecalc();
</span><span class="cx"> 
</span><del>-        if (it-&gt;childrenAffectedByPropertyBasedBackwardPositionalRules()) {
-            if (it-&gt;styleChangeType() &lt; FullStyleChange)
-                it-&gt;setStyleChange(FullStyleChange);
-        }
</del><ins>+        if (it-&gt;childrenAffectedByPropertyBasedBackwardPositionalRules())
+            it-&gt;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 &gt; 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()-&gt;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 &quot;LayoutRect.h&quot;
</span><span class="cx"> #include &quot;MutationObserver.h&quot;
</span><span class="cx"> #include &quot;RenderStyleConstants.h&quot;
</span><ins>+#include &quot;StyleValidity.h&quot;
</ins><span class="cx"> #include &quot;TreeScope.h&quot;
</span><span class="cx"> #include &lt;wtf/Forward.h&gt;
</span><span class="cx"> #include &lt;wtf/ListHashSet.h&gt;
</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&lt;RefPtr&lt;Node&gt;, String&gt;;
</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 &lt;&lt; nodeStyleChangeShift, 
-    FullStyleChange = 2 &lt;&lt; nodeStyleChangeShift, 
-    SyntheticStyleChange = 3 &lt;&lt; nodeStyleChangeShift,
-    ReconstructRenderTree = 4 &lt;&lt; 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&lt;StyleChangeType&gt;(m_nodeFlags &amp; 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) &amp;&amp; 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 &amp;= ~(ChildNeedsStyleRecalcFlag | DirectChildNeedsStyleRecalcFlag); }
</span><span class="cx"> 
</span><del>-    WEBCORE_EXPORT void setNeedsStyleRecalc(StyleChangeType = FullStyleChange);
-    void clearNeedsStyleRecalc() { m_nodeFlags &amp;= ~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 &lt;&lt; 13, // Element
</span><del>-
-        StyleChangeMask = 1 &lt;&lt; nodeStyleChangeShift | 1 &lt;&lt; (nodeStyleChangeShift + 1) | 1 &lt;&lt; (nodeStyleChangeShift + 2),
</del><ins>+        StyleValidityShift = 14,
+        StyleValidityMask = 3 &lt;&lt; StyleValidityShift,
+        StyleResolutionShouldRecompositeLayerFlag = 1 &lt;&lt; 16,
</ins><span class="cx">         IsEditingTextOrUndefinedCustomElementFlag = 1 &lt;&lt; 17,
</span><span class="cx">         HasFocusWithin = 1 &lt;&lt; 18,
</span><span class="cx">         HasSyntheticAttrChildNodesFlag = 1 &lt;&lt; 19,
</span><span class="lines">@@ -659,7 +648,7 @@
</span><span class="cx"> 
</span><span class="cx">     void setTreeScope(TreeScope&amp; scope) { m_treeScope = &amp;scope; }
</span><span class="cx"> 
</span><del>-    void setStyleChange(StyleChangeType changeType) { m_nodeFlags = (m_nodeFlags &amp; ~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&lt;Node&gt; convertNodesOrStringsIntoNode(Vector&lt;NodeOrString&gt;&amp;&amp;, ExceptionCode&amp;);
</span><span class="lines">@@ -682,6 +671,8 @@
</span><span class="cx">     Vector&lt;std::unique_ptr&lt;MutationObserverRegistration&gt;&gt;* mutationObserverRegistry();
</span><span class="cx">     HashSet&lt;MutationObserverRegistration*&gt;* 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&lt;Style::Validity&gt;((m_nodeFlags &amp; StyleValidityMask) &gt;&gt; StyleValidityShift);
+}
+
+inline bool Node::styleResolutionShouldRecompositeLayer() const
+{
+    return getFlag(StyleResolutionShouldRecompositeLayerFlag);
+}
+
+inline void Node::setHasValidStyle()
+{
+    m_nodeFlags &amp;= ~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-&gt;setNeedsStyleRecalc();
</del><ins>+        button-&gt;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&amp; button : m_members) {
</span><span class="cx">         ASSERT(button-&gt;isRadioButton());
</span><del>-        button-&gt;setNeedsStyleRecalc();
</del><ins>+        button-&gt;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&lt;Node&gt; ShadowRoot::cloneNodeInternal(Document&amp;, 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()-&gt;setNeedsStyleRecalc(ReconstructRenderTree);
</del><ins>+    shadowRoot.host()-&gt;invalidateStyleAndRenderersForSubtree();
</ins><span class="cx"> 
</span><span class="cx">     const AtomicString&amp; slotName = slotNameFromAttributeValue(name);
</span><span class="cx">     auto addResult = m_slots.add(slotName, std::unique_ptr&lt;SlotInfo&gt;());
</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-&gt;setNeedsStyleRecalc(ReconstructRenderTree);
</del><ins>+        host-&gt;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()-&gt;setNeedsStyleRecalc(ReconstructRenderTree);
</del><ins>+        shadowRoot.host()-&gt;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()-&gt;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()-&gt;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()-&gt;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() &gt;= Style::Validity::SubtreeAndRenderersInvalid)
</ins><span class="cx">         return;
</span><span class="cx"> 
</span><span class="cx">     auto textUpdate = std::make_unique&lt;Style::Update&gt;(document());
</span><span class="lines">@@ -234,7 +234,6 @@
</span><span class="cx">         renderer-&gt;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&amp; element : descendantsOfType&lt;Element&gt;(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&amp; element : descendantsOfType&lt;Element&gt;(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-&gt;focusedElement()) {
</span><del>-        element-&gt;setNeedsStyleRecalc();
</del><ins>+        element-&gt;invalidateStyleForSubtree();
</ins><span class="cx">         if (RenderObject* renderer = element-&gt;renderer())
</span><span class="cx">             if (renderer &amp;&amp; renderer-&gt;style().hasAppearance())
</span><span class="cx">                 renderer-&gt;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&amp; source, const Decimal&amp; 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-&gt;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&lt;FileList&gt; FileInputType::createFileList(const Vector&lt;FileChooserFileInfo&gt;&amp; 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() &amp;&amp; !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() &amp;&amp; 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&lt;WebGLContextAttributes*&gt;(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 &amp;&amp; m_context-&gt;is2d())
</span><span class="cx">         // Recalculate compositing requirements if acceleration state changed.
</span><del>-        const_cast&lt;HTMLCanvasElement*&gt;(this)-&gt;setNeedsStyleRecalc(SyntheticStyleChange);
</del><ins>+        const_cast&lt;HTMLCanvasElement*&gt;(this)-&gt;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&amp; 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(&amp;strongDirectionalityTextNode);
</span><span class="cx">     setHasDirAutoFlagRecursively(this, true, strongDirectionalityTextNode);
</span><span class="cx">     if (renderer() &amp;&amp; renderer()-&gt;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(&amp;invalidFormControlElement), &quot;Updating the fieldset on validity change is not an efficient operation, it should only be done when necessary.&quot;);
</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(&amp;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(&amp;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() &amp;&amp; renderer()-&gt;style().hasAppearance())
</span><span class="cx">         renderer()-&gt;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 &amp;&amp; !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 &amp;&amp; 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&amp; control = downcast&lt;HTMLFormControlElement&gt;(*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&lt;const Element&amp;&gt;(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(&amp;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(&amp;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-&gt;setNeedsStyleRecalc();
</del><ins>+            oldDefault-&gt;invalidateStyleForSubtree();
</ins><span class="cx">         if (m_defaultButton)
</span><del>-            m_defaultButton-&gt;setNeedsStyleRecalc();
</del><ins>+            m_defaultButton-&gt;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&lt;HTMLFrameOwnerElement&gt; element = this;
</span><del>-        Style::queuePostResolutionCallback([element, changeType]{
-            element-&gt;setNeedsStyleRecalc(changeType);
</del><ins>+        Style::queuePostResolutionCallback([element] {
+            element-&gt;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&amp; 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&amp; tagName, Document&amp;);
</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() &amp;&amp; renderer()) {
</del><ins>+    if (needsStyleRecalc() &amp;&amp; renderer())
</ins><span class="cx">         renderer()-&gt;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-&gt;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-&gt;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-&gt;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-&gt;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() &amp;&amp; renderer()-&gt;style().hasAppearance())
</span><span class="cx">         renderer()-&gt;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() &amp;&amp; !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, &quot;HTMLMediaElement::mediaPlayerRenderingModeChanged(%p)&quot;, 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) &amp;&amp; USE(AVFOUNDATION)
</span><span class="lines">@@ -5590,7 +5590,7 @@
</span><span class="cx">     }
</span><span class="cx">     
</span><span class="cx">     m_player-&gt;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&lt;String&gt;&amp; paramNames, Vector&lt;String&gt;&amp; paramValues)
</span><span class="lines">@@ -355,7 +355,7 @@
</span><span class="cx">     updateDocNamedItem();
</span><span class="cx">     if (inDocument() &amp;&amp; !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() &amp;&amp; renderer()-&gt;style().hasAppearance())
</span><span class="cx">                 renderer()-&gt;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-&gt;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-&gt;setResetStyleInheritance(true);
</span><span class="cx">     if (m_pluginReplacement-&gt;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 &amp;&amp; styleChangeType() == NoStyleChange)
</del><ins>+    if (change == Style::NoChange &amp;&amp; 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() &amp;&amp; needsWidgetUpdate() &amp;&amp; renderer() &amp;&amp; !isImageType() &amp;&amp; (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()-&gt;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-&gt;isDeterminate();
</span><span class="cx">         render-&gt;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-&gt;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&amp; list, bool)
</span><span class="lines">@@ -1071,7 +1071,7 @@
</span><span class="cx">         firstOption-&gt;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 &quot;CSSPropertyNames.h&quot;
</span><span class="cx"> #include &quot;CSSValueKeywords.h&quot;
</span><span class="cx"> #include &quot;CSSValuePool.h&quot;
</span><ins>+#include &quot;ElementChildIterator.h&quot;
</ins><span class="cx"> #include &quot;ExceptionCode.h&quot;
</span><span class="cx"> #include &quot;ExceptionCodePlaceholder.h&quot;
</span><span class="cx"> #include &quot;GenericCachedHTMLCollection.h&quot;
</span><span class="lines">@@ -265,27 +266,28 @@
</span><span class="cx">     row-&gt;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&amp; element)
</ins><span class="cx"> {
</span><del>-    return n-&gt;hasTagName(theadTag) || n-&gt;hasTagName(tbodyTag) ||
-           n-&gt;hasTagName(tfootTag) || n-&gt;hasTagName(trTag) ||
-           n-&gt;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&amp; element)
</ins><span class="cx"> {
</span><del>-    ASSERT(n);
</del><span class="cx">     bool cellChanged = false;
</span><span class="cx"> 
</span><del>-    if (n-&gt;hasTagName(tdTag))
</del><ins>+    if (element.hasTagName(tdTag))
</ins><span class="cx">         cellChanged = true;
</span><del>-    else if (isTableCellAncestor(n)) {
-        for (Node* child = n-&gt;firstChild(); child; child = child-&gt;nextSibling())
</del><ins>+    else if (isTableCellAncestor(element)) {
+        for (auto&amp; child : childrenOfType&lt;Element&gt;(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-&gt;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-&gt;nextSibling())
</del><ins>+        for (auto&amp; child : childrenOfType&lt;Element&gt;(*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&amp; 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&amp; element = this-&gt;element();
</span><del>-    element.setNeedsStyleRecalc();
</del><ins>+    element.invalidateStyleForSubtree();
</ins><span class="cx">     if (RenderObject* renderer = element.renderer())
</span><span class="cx">         renderer-&gt;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() &amp;&amp; !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&lt;RenderTableCell&gt;(renderer()) &amp;&amp; hasTagName(mtdTag))
</span><span class="cx">             downcast&lt;RenderTableCell&gt;(*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&amp; 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-&gt;document().pageCacheState() == Document::NotInPageCache);
</span><span class="cx">     if (element)
</span><del>-        element-&gt;setNeedsStyleRecalc(SyntheticStyleChange);
</del><ins>+        element-&gt;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&lt;CompositeAnimation&gt; animation = m_compositeAnimations.take(&amp;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-&gt;element();
</span><span class="cx">                 ASSERT(element);
</span><span class="cx">                 ASSERT(element-&gt;document().pageCacheState() == Document::NotInPageCache);
</span><del>-                element-&gt;setNeedsStyleRecalc(SyntheticStyleChange);
</del><ins>+                element-&gt;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&amp; change : m_elementChangesToDispatch)
</span><del>-        change-&gt;setNeedsStyleRecalc(SyntheticStyleChange);
</del><ins>+        change-&gt;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&amp; compositeAnimation = ensureCompositeAnimation(*renderer);
</span><span class="cx">     if (compositeAnimation.pauseAnimationAtTime(name, t)) {
</span><del>-        renderer-&gt;element()-&gt;setNeedsStyleRecalc(SyntheticStyleChange);
</del><ins>+        renderer-&gt;element()-&gt;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&amp; compositeAnimation = ensureCompositeAnimation(*renderer);
</span><span class="cx">     if (compositeAnimation.pauseTransitionAtTime(cssPropertyID(property), t)) {
</span><del>-        renderer-&gt;element()-&gt;setNeedsStyleRecalc(SyntheticStyleChange);
</del><ins>+        renderer-&gt;element()-&gt;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-&gt;document().pageCacheState() == Document::NotInPageCache);
</span><span class="cx">     if (element)
</span><del>-        element-&gt;setNeedsStyleRecalc(SyntheticStyleChange);
</del><ins>+        element-&gt;invalidateStyleAndLayerComposition();
</ins><span class="cx"> }
</span><span class="cx"> 
</span><span class="cx"> bool AnimationController::updateAnimations(RenderElement&amp; renderer, const RenderStyle&amp; newStyle, std::unique_ptr&lt;RenderStyle&gt;&amp; 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()-&gt;setNeedsStyleRecalc(SyntheticStyleChange);
</del><ins>+                element()-&gt;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-&gt;setNeedsStyleRecalc(SyntheticStyleChange);
</del><ins>+        element-&gt;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()-&gt;scheduleSetNeedsStyleRecalc(SyntheticStyleChange);
</del><ins>+            m_renderView.document().ownerElement()-&gt;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-&gt;removeFromParent();
</span><span class="cx"> 
</span><span class="cx">         if (HTMLFrameOwnerElement* ownerElement = m_renderView.document().ownerElement())
</span><del>-            ownerElement-&gt;scheduleSetNeedsStyleRecalc(SyntheticStyleChange);
</del><ins>+            ownerElement-&gt;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-&gt;scheduleSetNeedsStyleRecalc(SyntheticStyleChange);
</del><ins>+        ownerElement-&gt;scheduleinvalidateStyleAndLayerComposition();
</ins><span class="cx"> }
</span><span class="cx"> 
</span><span class="cx"> bool RenderLayerCompositor::layerHas3DContent(const RenderLayer&amp; 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 &amp;&amp; node() &amp;&amp; (style().affectedByDrag() || (is&lt;Element&gt;(*node()) &amp;&amp; downcast&lt;Element&gt;(*node()).childrenAffectedByDrag())))
-        node()-&gt;setNeedsStyleRecalc();
</del><span class="cx"> 
</span><span class="cx">     if (!is&lt;RenderElement&gt;(*this))
</span><span class="cx">         return;
</span><ins>+    auto&amp; renderElement = downcast&lt;RenderElement&gt;(*this);
</ins><span class="cx"> 
</span><del>-    for (auto&amp; child : childrenOfType&lt;RenderObject&gt;(downcast&lt;RenderElement&gt;(*this)))
</del><ins>+    if (valueChanged &amp;&amp; renderElement.element() &amp;&amp; (style().affectedByDrag() || renderElement.element()-&gt;childrenAffectedByDrag()))
+        renderElement.element()-&gt;invalidateStyleForSubtree();
+
+    for (auto&amp; child : childrenOfType&lt;RenderObject&gt;(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() &amp;&amp; !renderer.element()-&gt;isSVGElement())
</span><del>-        renderer.element()-&gt;setNeedsStyleRecalc(SyntheticStyleChange);
</del><ins>+        renderer.element()-&gt;invalidateStyleAndLayerComposition();
</ins><span class="cx"> }
</span><span class="cx"> 
</span><span class="cx"> void SVGResourcesCache::clientWasAddedToTree(RenderObject&amp; 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() &amp;&amp; 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&lt;Element&gt;(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 &amp;&amp; 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&lt;Element&gt;(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() &amp;&amp; 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&amp; 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&amp; shadowChild : childrenOfType&lt;Element&gt;(*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() &gt;= 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 &amp;&amp; (parent().change == Force || element.styleChangeType() == FullStyleChange))
</del><ins>+    if (update.change != Detach &amp;&amp; (parent().change == Force || element.styleValidity() &gt;= 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&lt;RenderStyle&gt; animatedStyle;
</span><span class="cx">     if (rendererToUpdate &amp;&amp; document.frame()-&gt;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-&gt;style(), *animatedStyle);
</span><span class="lines">@@ -282,7 +282,7 @@
</span><span class="cx"> {
</span><span class="cx">     auto&amp; 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&amp; 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-&gt;clearNeedsStyleRecalc();
</del><ins>+        before-&gt;setHasValidStyle();
</ins><span class="cx">     if (auto* after = element.afterPseudoElement())
</span><del>-        after-&gt;clearNeedsStyleRecalc();
</del><ins>+        after-&gt;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&lt;Text&gt;(node)) {
</span><span class="cx">             auto&amp; text = downcast&lt;Text&gt;(node);
</span><del>-            if (text.styleChangeType() == ReconstructRenderTree &amp;&amp; parent.change != Detach)
</del><ins>+            if (text.styleValidity() &gt;= Validity::SubtreeAndRenderersInvalid &amp;&amp; parent.change != Detach)
</ins><span class="cx">                 m_update-&gt;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&lt;RenderStyle&gt; 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() &amp;&amp; !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&amp; 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&amp; targetElement, const QualifiedName&amp; attributeName, const String&amp; 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 &quot;computed style without SMIL style properties&quot;, 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 &quot;elements as resource&quot; (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 &lt;use&gt;.
</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-&gt;inDocument())
</span><span class="cx">         return true;
</span><del>-    targetElement-&gt;setNeedsStyleRecalc(ReconstructRenderTree);
</del><ins>+    targetElement-&gt;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 &quot;NoStyleChange&quot;;
</span><del>-    case InlineStyleChange:
</del><ins>+    case Style::Validity::ElementInvalid:
</ins><span class="cx">         return &quot;InlineStyleChange&quot;;
</span><del>-    case FullStyleChange:
</del><ins>+    case Style::Validity::SubtreeInvalid:
</ins><span class="cx">         return &quot;FullStyleChange&quot;;
</span><del>-    case SyntheticStyleChange:
-        return &quot;SyntheticStyleChange&quot;;
-    case ReconstructRenderTree:
</del><ins>+    case Style::Validity::SubtreeAndRenderersInvalid:
</ins><span class="cx">         return &quot;ReconstructRenderTree&quot;;
</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&amp; 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  &lt;antti@apple.com&gt;
+
+        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  &lt;jeremyj@apple.com&gt;
</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])-&gt;view()-&gt;enterCompositingMode();
</span><del>-        [self element]-&gt;setNeedsStyleRecalc(SyntheticStyleChange);
</del><ins>+        [self element]-&gt;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])-&gt;view()-&gt;enterCompositingMode();
</span><del>-                [self element]-&gt;setNeedsStyleRecalc(SyntheticStyleChange);
</del><ins>+                [self element]-&gt;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  &lt;antti@apple.com&gt;
+
+        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  &lt;cgarcia@igalia.com&gt;
</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-&gt;displayState() &lt; HTMLPlugInElement::Restarting) {
</span><span class="cx">         if (m_plugin-&gt;pluginLayer() &amp;&amp; frame()) {
</span><span class="cx">             frame()-&gt;view()-&gt;enterCompositingMode();
</span><del>-            m_pluginElement-&gt;setNeedsStyleRecalc(SyntheticStyleChange);
</del><ins>+            m_pluginElement-&gt;invalidateStyleAndLayerComposition();
</ins><span class="cx">         }
</span><span class="cx">         if (frame() &amp;&amp; !frame()-&gt;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-&gt;pluginLayer() &amp;&amp; frame()) {
</span><span class="cx">             frame()-&gt;view()-&gt;enterCompositingMode();
</span><del>-            m_pluginElement-&gt;setNeedsStyleRecalc(SyntheticStyleChange);
</del><ins>+            m_pluginElement-&gt;invalidateStyleAndLayerComposition();
</ins><span class="cx">         }
</span><span class="cx">         if (m_pluginElement-&gt;displayState() == HTMLPlugInElement::RestartingWithPendingMouseClick)
</span><span class="cx">             m_pluginElement-&gt;dispatchPendingMouseClick();
</span><span class="lines">@@ -1570,7 +1570,7 @@
</span><span class="cx">     if (!is&lt;RenderEmbeddedObject&gt;(renderer))
</span><span class="cx">         return;
</span><span class="cx"> 
</span><del>-    m_pluginElement-&gt;setNeedsStyleRecalc(SyntheticStyleChange);
</del><ins>+    m_pluginElement-&gt;invalidateStyleAndLayerComposition();
</ins><span class="cx"> 
</span><span class="cx">     downcast&lt;RenderEmbeddedObject&gt;(*renderer).setPluginUnavailabilityReason(RenderEmbeddedObject::PluginCrashed);
</span><span class="cx"> 
</span></span></pre>
</div>
</div>

</body>
</html>