<!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>[179454] trunk/Source/WebCore</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/179454">179454</a></dd>
<dt>Author</dt> <dd>akling@apple.com</dd>
<dt>Date</dt> <dd>2015-01-31 18:58:13 -0800 (Sat, 31 Jan 2015)</dd>
</dl>

<h3>Log Message</h3>
<pre>Shrink RenderBlock.
&lt;https://webkit.org/b/141129&gt;

Reviewed by Antti Koivisto.

Get rid of the bitfield in RenderBlock by moving the essential bits to
RenderElement (plenty of space in the bitfield there.)

RenderBlock also had a cache of its line-height, but it doesn't appear
to help any of the benchmarks that we're tracking so I'd say it's okay
to lose this optimization.

This knocks 8 bytes off of RenderBlock (and all of its subclasses.)

* rendering/RenderBlock.cpp:
(WebCore::RenderBlock::RenderBlock):
(WebCore::RenderBlock::styleDidChange):
(WebCore::RenderBlock::recomputeLogicalWidth):
(WebCore::RenderBlock::lineHeight):
* rendering/RenderBlock.h:
(WebCore::RenderBlock::setHasMarginBeforeQuirk):
(WebCore::RenderBlock::setHasMarginAfterQuirk):
(WebCore::RenderBlock::setHasBorderOrPaddingLogicalWidthChanged):
(WebCore::RenderBlock::hasMarginBeforeQuirk):
(WebCore::RenderBlock::hasMarginAfterQuirk):
(WebCore::RenderBlock::hasBorderOrPaddingLogicalWidthChanged):
* rendering/RenderBlockFlow.cpp:
(WebCore::RenderBlockFlow::layoutInlineChildren):
(WebCore::RenderBlockFlow::invalidateLineLayoutPath):
(WebCore::RenderBlockFlow::deleteLineBoxesBeforeSimpleLineLayout):
(WebCore::RenderBlockFlow::ensureLineBoxes):
* rendering/RenderBlockFlow.h:
(WebCore::RenderBlockFlow::lineLayoutPath):
(WebCore::RenderBlockFlow::setLineLayoutPath):
(WebCore::RenderBlockFlow::setHasMarkupTruncation):
(WebCore::RenderBlockFlow::hasMarkupTruncation):
(WebCore::RenderBlockFlow::simpleLineLayout):
* rendering/RenderElement.cpp:
(WebCore::RenderElement::RenderElement):
* rendering/RenderElement.h:
(WebCore::RenderElement::setRenderBlockHasMarginBeforeQuirk):
(WebCore::RenderElement::setRenderBlockHasMarginAfterQuirk):
(WebCore::RenderElement::setRenderBlockHasBorderOrPaddingLogicalWidthChanged):
(WebCore::RenderElement::renderBlockHasMarginBeforeQuirk):
(WebCore::RenderElement::renderBlockHasMarginAfterQuirk):
(WebCore::RenderElement::renderBlockHasBorderOrPaddingLogicalWidthChanged):
(WebCore::RenderElement::setRenderBlockFlowLineLayoutPath):
(WebCore::RenderElement::setRenderBlockFlowHasMarkupTruncation):
(WebCore::RenderElement::renderBlockFlowLineLayoutPath):
(WebCore::RenderElement::renderBlockFlowHasMarkupTruncation):
* rendering/RenderFlowThread.cpp:
(WebCore::RenderFlowThread::removeLineRegionInfo):</pre>

<h3>Modified Paths</h3>
<ul>
<li><a href="#trunkSourceWebCoreChangeLog">trunk/Source/WebCore/ChangeLog</a></li>
<li><a href="#trunkSourceWebCorerenderingRenderBlockcpp">trunk/Source/WebCore/rendering/RenderBlock.cpp</a></li>
<li><a href="#trunkSourceWebCorerenderingRenderBlockh">trunk/Source/WebCore/rendering/RenderBlock.h</a></li>
<li><a href="#trunkSourceWebCorerenderingRenderBlockFlowcpp">trunk/Source/WebCore/rendering/RenderBlockFlow.cpp</a></li>
<li><a href="#trunkSourceWebCorerenderingRenderBlockFlowh">trunk/Source/WebCore/rendering/RenderBlockFlow.h</a></li>
<li><a href="#trunkSourceWebCorerenderingRenderElementcpp">trunk/Source/WebCore/rendering/RenderElement.cpp</a></li>
<li><a href="#trunkSourceWebCorerenderingRenderElementh">trunk/Source/WebCore/rendering/RenderElement.h</a></li>
<li><a href="#trunkSourceWebCorerenderingRenderFlowThreadcpp">trunk/Source/WebCore/rendering/RenderFlowThread.cpp</a></li>
</ul>

</div>
<div id="patch">
<h3>Diff</h3>
<a id="trunkSourceWebCoreChangeLog"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/ChangeLog (179453 => 179454)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/ChangeLog        2015-02-01 02:06:44 UTC (rev 179453)
+++ trunk/Source/WebCore/ChangeLog        2015-02-01 02:58:13 UTC (rev 179454)
</span><span class="lines">@@ -1,3 +1,58 @@
</span><ins>+2015-01-31  Andreas Kling  &lt;akling@apple.com&gt;
+
+        Shrink RenderBlock.
+        &lt;https://webkit.org/b/141129&gt;
+
+        Reviewed by Antti Koivisto.
+
+        Get rid of the bitfield in RenderBlock by moving the essential bits to
+        RenderElement (plenty of space in the bitfield there.)
+
+        RenderBlock also had a cache of its line-height, but it doesn't appear
+        to help any of the benchmarks that we're tracking so I'd say it's okay
+        to lose this optimization.
+
+        This knocks 8 bytes off of RenderBlock (and all of its subclasses.)
+
+        * rendering/RenderBlock.cpp:
+        (WebCore::RenderBlock::RenderBlock):
+        (WebCore::RenderBlock::styleDidChange):
+        (WebCore::RenderBlock::recomputeLogicalWidth):
+        (WebCore::RenderBlock::lineHeight):
+        * rendering/RenderBlock.h:
+        (WebCore::RenderBlock::setHasMarginBeforeQuirk):
+        (WebCore::RenderBlock::setHasMarginAfterQuirk):
+        (WebCore::RenderBlock::setHasBorderOrPaddingLogicalWidthChanged):
+        (WebCore::RenderBlock::hasMarginBeforeQuirk):
+        (WebCore::RenderBlock::hasMarginAfterQuirk):
+        (WebCore::RenderBlock::hasBorderOrPaddingLogicalWidthChanged):
+        * rendering/RenderBlockFlow.cpp:
+        (WebCore::RenderBlockFlow::layoutInlineChildren):
+        (WebCore::RenderBlockFlow::invalidateLineLayoutPath):
+        (WebCore::RenderBlockFlow::deleteLineBoxesBeforeSimpleLineLayout):
+        (WebCore::RenderBlockFlow::ensureLineBoxes):
+        * rendering/RenderBlockFlow.h:
+        (WebCore::RenderBlockFlow::lineLayoutPath):
+        (WebCore::RenderBlockFlow::setLineLayoutPath):
+        (WebCore::RenderBlockFlow::setHasMarkupTruncation):
+        (WebCore::RenderBlockFlow::hasMarkupTruncation):
+        (WebCore::RenderBlockFlow::simpleLineLayout):
+        * rendering/RenderElement.cpp:
+        (WebCore::RenderElement::RenderElement):
+        * rendering/RenderElement.h:
+        (WebCore::RenderElement::setRenderBlockHasMarginBeforeQuirk):
+        (WebCore::RenderElement::setRenderBlockHasMarginAfterQuirk):
+        (WebCore::RenderElement::setRenderBlockHasBorderOrPaddingLogicalWidthChanged):
+        (WebCore::RenderElement::renderBlockHasMarginBeforeQuirk):
+        (WebCore::RenderElement::renderBlockHasMarginAfterQuirk):
+        (WebCore::RenderElement::renderBlockHasBorderOrPaddingLogicalWidthChanged):
+        (WebCore::RenderElement::setRenderBlockFlowLineLayoutPath):
+        (WebCore::RenderElement::setRenderBlockFlowHasMarkupTruncation):
+        (WebCore::RenderElement::renderBlockFlowLineLayoutPath):
+        (WebCore::RenderElement::renderBlockFlowHasMarkupTruncation):
+        * rendering/RenderFlowThread.cpp:
+        (WebCore::RenderFlowThread::removeLineRegionInfo):
+
</ins><span class="cx"> 2015-01-31  Chris Dumez  &lt;cdumez@apple.com&gt;
</span><span class="cx"> 
</span><span class="cx">         Remove useless PageCache::singleton() call from PageCache member function
</span></span></pre></div>
<a id="trunkSourceWebCorerenderingRenderBlockcpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/rendering/RenderBlock.cpp (179453 => 179454)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/rendering/RenderBlock.cpp        2015-02-01 02:06:44 UTC (rev 179453)
+++ trunk/Source/WebCore/rendering/RenderBlock.cpp        2015-02-01 02:58:13 UTC (rev 179454)
</span><span class="lines">@@ -86,7 +86,6 @@
</span><span class="cx"> using namespace HTMLNames;
</span><span class="cx"> 
</span><span class="cx"> struct SameSizeAsRenderBlock : public RenderBox {
</span><del>-    uint32_t bitfields;
</del><span class="cx"> };
</span><span class="cx"> 
</span><span class="cx"> COMPILE_ASSERT(sizeof(RenderBlock) == sizeof(SameSizeAsRenderBlock), RenderBlock_should_stay_small);
</span><span class="lines">@@ -183,23 +182,11 @@
</span><span class="cx"> 
</span><span class="cx"> RenderBlock::RenderBlock(Element&amp; element, Ref&lt;RenderStyle&gt;&amp;&amp; style, unsigned baseTypeFlags)
</span><span class="cx">     : RenderBox(element, WTF::move(style), baseTypeFlags | RenderBlockFlag)
</span><del>-    , m_lineHeight(-1)
-    , m_hasMarginBeforeQuirk(false)
-    , m_hasMarginAfterQuirk(false)
-    , m_hasMarkupTruncation(false)
-    , m_hasBorderOrPaddingLogicalWidthChanged(false)
-    , m_lineLayoutPath(UndeterminedPath)
</del><span class="cx"> {
</span><span class="cx"> }
</span><span class="cx"> 
</span><span class="cx"> RenderBlock::RenderBlock(Document&amp; document, Ref&lt;RenderStyle&gt;&amp;&amp; style, unsigned baseTypeFlags)
</span><span class="cx">     : RenderBox(document, WTF::move(style), baseTypeFlags | RenderBlockFlag)
</span><del>-    , m_lineHeight(-1)
-    , m_hasMarginBeforeQuirk(false)
-    , m_hasMarginAfterQuirk(false)
-    , m_hasMarkupTruncation(false)
-    , m_hasBorderOrPaddingLogicalWidthChanged(false)
-    , m_lineLayoutPath(UndeterminedPath)
</del><span class="cx"> {
</span><span class="cx"> }
</span><span class="cx"> 
</span><span class="lines">@@ -320,11 +307,10 @@
</span><span class="cx">     }
</span><span class="cx"> 
</span><span class="cx">     propagateStyleToAnonymousChildren(PropagateToBlockChildrenOnly);
</span><del>-    m_lineHeight = -1;
</del><span class="cx"> 
</span><span class="cx">     // It's possible for our border/padding to change, but for the overall logical width of the block to
</span><span class="cx">     // end up being the same. We keep track of this change so in layoutBlock, we can know to set relayoutChildren=true.
</span><del>-    m_hasBorderOrPaddingLogicalWidthChanged = oldStyle &amp;&amp; diff == StyleDifferenceLayout &amp;&amp; needsLayout() &amp;&amp; borderOrPaddingLogicalWidthChanged(oldStyle, &amp;newStyle);
</del><ins>+    setHasBorderOrPaddingLogicalWidthChanged(oldStyle &amp;&amp; diff == StyleDifferenceLayout &amp;&amp; needsLayout() &amp;&amp; borderOrPaddingLogicalWidthChanged(oldStyle, &amp;newStyle));
</ins><span class="cx"> }
</span><span class="cx"> 
</span><span class="cx"> RenderBlock* RenderBlock::continuationBefore(RenderObject* beforeChild)
</span><span class="lines">@@ -990,8 +976,8 @@
</span><span class="cx">     
</span><span class="cx">     updateLogicalWidth();
</span><span class="cx">     
</span><del>-    bool hasBorderOrPaddingLogicalWidthChanged = m_hasBorderOrPaddingLogicalWidthChanged;
-    m_hasBorderOrPaddingLogicalWidthChanged = false;
</del><ins>+    bool hasBorderOrPaddingLogicalWidthChanged = this-&gt;hasBorderOrPaddingLogicalWidthChanged();
+    setHasBorderOrPaddingLogicalWidthChanged(false);
</ins><span class="cx"> 
</span><span class="cx">     return oldWidth != logicalWidth() || hasBorderOrPaddingLogicalWidthChanged;
</span><span class="cx"> }
</span><span class="lines">@@ -2840,10 +2826,7 @@
</span><span class="cx">             return s.computedLineHeight();
</span><span class="cx">     }
</span><span class="cx">     
</span><del>-    if (m_lineHeight == -1)
-        m_lineHeight = style().computedLineHeight();
-
-    return m_lineHeight;
</del><ins>+    return style().computedLineHeight();
</ins><span class="cx"> }
</span><span class="cx"> 
</span><span class="cx"> int RenderBlock::baselinePosition(FontBaseline baselineType, bool firstLine, LineDirectionMode direction, LinePositionMode linePositionMode) const
</span></span></pre></div>
<a id="trunkSourceWebCorerenderingRenderBlockh"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/rendering/RenderBlock.h (179453 => 179454)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/rendering/RenderBlock.h        2015-02-01 02:06:44 UTC (rev 179453)
+++ trunk/Source/WebCore/rendering/RenderBlock.h        2015-02-01 02:58:13 UTC (rev 179454)
</span><span class="lines">@@ -100,11 +100,13 @@
</span><span class="cx">     static void clearPercentHeightDescendantsFrom(RenderBox&amp;);
</span><span class="cx">     static void removePercentHeightDescendantIfNeeded(RenderBox&amp;);
</span><span class="cx"> 
</span><del>-    void setHasMarginBeforeQuirk(bool b) { m_hasMarginBeforeQuirk = b; }
-    void setHasMarginAfterQuirk(bool b) { m_hasMarginAfterQuirk = b; }
</del><ins>+    void setHasMarginBeforeQuirk(bool b) { setRenderBlockHasMarginBeforeQuirk(b); }
+    void setHasMarginAfterQuirk(bool b) { setRenderBlockHasMarginAfterQuirk(b); }
+    void setHasBorderOrPaddingLogicalWidthChanged(bool b) { setRenderBlockHasBorderOrPaddingLogicalWidthChanged(b); }
</ins><span class="cx"> 
</span><del>-    bool hasMarginBeforeQuirk() const { return m_hasMarginBeforeQuirk; }
-    bool hasMarginAfterQuirk() const { return m_hasMarginAfterQuirk; }
</del><ins>+    bool hasMarginBeforeQuirk() const { return renderBlockHasMarginBeforeQuirk(); }
+    bool hasMarginAfterQuirk() const { return renderBlockHasMarginAfterQuirk(); }
+    bool hasBorderOrPaddingLogicalWidthChanged() const { return renderBlockHasBorderOrPaddingLogicalWidthChanged(); }
</ins><span class="cx"> 
</span><span class="cx">     bool hasMarginBeforeQuirk(const RenderBox&amp; child) const;
</span><span class="cx">     bool hasMarginAfterQuirk(const RenderBox&amp; child) const;
</span><span class="lines">@@ -511,14 +513,6 @@
</span><span class="cx">     // FIXME-BLOCKFLOW: Remove this when the line layout stuff has all moved out of RenderBlock
</span><span class="cx">     friend class LineBreaker;
</span><span class="cx"> 
</span><del>-    mutable signed m_lineHeight : 25;
-    unsigned m_hasMarginBeforeQuirk : 1; // Note these quirk values can't be put in RenderBlockRareData since they are set too frequently.
-    unsigned m_hasMarginAfterQuirk : 1;
-    unsigned m_hasMarkupTruncation : 1;
-    unsigned m_hasBorderOrPaddingLogicalWidthChanged : 1;
-    enum LineLayoutPath { UndeterminedPath, SimpleLinesPath, LineBoxesPath, ForceLineBoxesPath };
-    unsigned m_lineLayoutPath : 2;
-    
</del><span class="cx">     // RenderRubyBase objects need to be able to split and merge, moving their children around
</span><span class="cx">     // (calling moveChildTo, moveAllChildrenTo, and makeChildrenNonInline).
</span><span class="cx">     friend class RenderRubyBase;
</span></span></pre></div>
<a id="trunkSourceWebCorerenderingRenderBlockFlowcpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/rendering/RenderBlockFlow.cpp (179453 => 179454)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/rendering/RenderBlockFlow.cpp        2015-02-01 02:06:44 UTC (rev 179453)
+++ trunk/Source/WebCore/rendering/RenderBlockFlow.cpp        2015-02-01 02:58:13 UTC (rev 179454)
</span><span class="lines">@@ -633,10 +633,10 @@
</span><span class="cx"> 
</span><span class="cx"> void RenderBlockFlow::layoutInlineChildren(bool relayoutChildren, LayoutUnit&amp; repaintLogicalTop, LayoutUnit&amp; repaintLogicalBottom)
</span><span class="cx"> {
</span><del>-    if (m_lineLayoutPath == UndeterminedPath)
-        m_lineLayoutPath = SimpleLineLayout::canUseFor(*this) ? SimpleLinesPath : LineBoxesPath;
</del><ins>+    if (lineLayoutPath() == UndeterminedPath)
+        setLineLayoutPath(SimpleLineLayout::canUseFor(*this) ? SimpleLinesPath : LineBoxesPath);
</ins><span class="cx"> 
</span><del>-    if (m_lineLayoutPath == SimpleLinesPath) {
</del><ins>+    if (lineLayoutPath() == SimpleLinesPath) {
</ins><span class="cx">         layoutSimpleLines(relayoutChildren, repaintLogicalTop, repaintLogicalBottom);
</span><span class="cx">         return;
</span><span class="cx">     }
</span><span class="lines">@@ -3471,20 +3471,20 @@
</span><span class="cx"> 
</span><span class="cx"> void RenderBlockFlow::invalidateLineLayoutPath()
</span><span class="cx"> {
</span><del>-    switch (m_lineLayoutPath) {
</del><ins>+    switch (lineLayoutPath()) {
</ins><span class="cx">     case UndeterminedPath:
</span><span class="cx">     case ForceLineBoxesPath:
</span><span class="cx">         ASSERT(!m_simpleLineLayout);
</span><span class="cx">         return;
</span><span class="cx">     case LineBoxesPath:
</span><span class="cx">         ASSERT(!m_simpleLineLayout);
</span><del>-        m_lineLayoutPath = UndeterminedPath;
</del><ins>+        setLineLayoutPath(UndeterminedPath);
</ins><span class="cx">         return;
</span><span class="cx">     case SimpleLinesPath:
</span><span class="cx">         // The simple line layout may have become invalid.
</span><span class="cx">         m_simpleLineLayout = nullptr;
</span><span class="cx">         setNeedsLayout();
</span><del>-        m_lineLayoutPath = UndeterminedPath;
</del><ins>+        setLineLayoutPath(UndeterminedPath);
</ins><span class="cx">         return;
</span><span class="cx">     }
</span><span class="cx">     ASSERT_NOT_REACHED();
</span><span class="lines">@@ -3508,7 +3508,7 @@
</span><span class="cx"> 
</span><span class="cx"> void RenderBlockFlow::deleteLineBoxesBeforeSimpleLineLayout()
</span><span class="cx"> {
</span><del>-    ASSERT(m_lineLayoutPath == SimpleLinesPath);
</del><ins>+    ASSERT(lineLayoutPath() == SimpleLinesPath);
</ins><span class="cx">     lineBoxes().deleteLineBoxes();
</span><span class="cx">     ASSERT(!childrenOfType&lt;RenderElement&gt;(*this).first());
</span><span class="cx">     for (auto&amp; textRenderer : childrenOfType&lt;RenderText&gt;(*this))
</span><span class="lines">@@ -3517,7 +3517,7 @@
</span><span class="cx"> 
</span><span class="cx"> void RenderBlockFlow::ensureLineBoxes()
</span><span class="cx"> {
</span><del>-    m_lineLayoutPath = ForceLineBoxesPath;
</del><ins>+    setLineLayoutPath(ForceLineBoxesPath);
</ins><span class="cx">     if (!m_simpleLineLayout)
</span><span class="cx">         return;
</span><span class="cx">     m_simpleLineLayout = nullptr;
</span></span></pre></div>
<a id="trunkSourceWebCorerenderingRenderBlockFlowh"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/rendering/RenderBlockFlow.h (179453 => 179454)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/rendering/RenderBlockFlow.h        2015-02-01 02:06:44 UTC (rev 179453)
+++ trunk/Source/WebCore/rendering/RenderBlockFlow.h        2015-02-01 02:58:13 UTC (rev 179454)
</span><span class="lines">@@ -344,14 +344,18 @@
</span><span class="cx">     virtual bool hasLines() const override final;
</span><span class="cx">     virtual void invalidateLineLayoutPath() override final;
</span><span class="cx"> 
</span><ins>+    enum LineLayoutPath { UndeterminedPath = 0, SimpleLinesPath, LineBoxesPath, ForceLineBoxesPath };
+    LineLayoutPath lineLayoutPath() const { return static_cast&lt;LineLayoutPath&gt;(renderBlockFlowLineLayoutPath()); }
+    void setLineLayoutPath(LineLayoutPath path) { setRenderBlockFlowLineLayoutPath(path); }
+
</ins><span class="cx">     // Helper methods for computing line counts and heights for line counts.
</span><span class="cx">     RootInlineBox* lineAtIndex(int) const;
</span><span class="cx">     int lineCount(const RootInlineBox* = nullptr, bool* = nullptr) const;
</span><span class="cx">     int heightForLineCount(int);
</span><span class="cx">     void clearTruncation();
</span><span class="cx"> 
</span><del>-    void setHasMarkupTruncation(bool b) { m_hasMarkupTruncation = b; }
-    bool hasMarkupTruncation() const { return m_hasMarkupTruncation; }
</del><ins>+    void setHasMarkupTruncation(bool b) { setRenderBlockFlowHasMarkupTruncation(b); }
+    bool hasMarkupTruncation() const { return renderBlockFlowHasMarkupTruncation(); }
</ins><span class="cx"> 
</span><span class="cx">     bool containsNonZeroBidiLevel() const;
</span><span class="cx"> 
</span><span class="lines">@@ -634,7 +638,7 @@
</span><span class="cx"> 
</span><span class="cx"> inline const SimpleLineLayout::Layout* RenderBlockFlow::simpleLineLayout() const
</span><span class="cx"> {
</span><del>-    ASSERT(m_lineLayoutPath == SimpleLinesPath || !m_simpleLineLayout);
</del><ins>+    ASSERT(lineLayoutPath() == SimpleLinesPath || !m_simpleLineLayout);
</ins><span class="cx">     return m_simpleLineLayout.get();
</span><span class="cx"> }
</span><span class="cx"> 
</span></span></pre></div>
<a id="trunkSourceWebCorerenderingRenderElementcpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/rendering/RenderElement.cpp (179453 => 179454)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/rendering/RenderElement.cpp        2015-02-01 02:06:44 UTC (rev 179453)
+++ trunk/Source/WebCore/rendering/RenderElement.cpp        2015-02-01 02:58:13 UTC (rev 179454)
</span><span class="lines">@@ -91,6 +91,11 @@
</span><span class="cx">     , m_hasCounterNodeMap(false)
</span><span class="cx">     , m_isCSSAnimating(false)
</span><span class="cx">     , m_hasContinuation(false)
</span><ins>+    , m_renderBlockHasMarginBeforeQuirk(false)
+    , m_renderBlockHasMarginAfterQuirk(false)
+    , m_renderBlockHasBorderOrPaddingLogicalWidthChanged(false)
+    , m_renderBlockFlowHasMarkupTruncation(false)
+    , m_renderBlockFlowLineLayoutPath(RenderBlockFlow::UndeterminedPath)
</ins><span class="cx">     , m_firstChild(nullptr)
</span><span class="cx">     , m_lastChild(nullptr)
</span><span class="cx">     , m_style(WTF::move(style))
</span></span></pre></div>
<a id="trunkSourceWebCorerenderingRenderElementh"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/rendering/RenderElement.h (179453 => 179454)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/rendering/RenderElement.h        2015-02-01 02:06:44 UTC (rev 179453)
+++ trunk/Source/WebCore/rendering/RenderElement.h        2015-02-01 02:58:13 UTC (rev 179454)
</span><span class="lines">@@ -235,6 +235,18 @@
</span><span class="cx">     static void removeControlStatesForRenderer(const RenderObject*);
</span><span class="cx">     static void addControlStatesForRenderer(const RenderObject*, ControlStates*);
</span><span class="cx"> 
</span><ins>+    void setRenderBlockHasMarginBeforeQuirk(bool b) { m_renderBlockHasMarginBeforeQuirk = b; }
+    void setRenderBlockHasMarginAfterQuirk(bool b) { m_renderBlockHasMarginAfterQuirk = b; }
+    void setRenderBlockHasBorderOrPaddingLogicalWidthChanged(bool b) { m_renderBlockHasBorderOrPaddingLogicalWidthChanged = b; }
+    bool renderBlockHasMarginBeforeQuirk() const { return m_renderBlockHasMarginBeforeQuirk; }
+    bool renderBlockHasMarginAfterQuirk() const { return m_renderBlockHasMarginAfterQuirk; }
+    bool renderBlockHasBorderOrPaddingLogicalWidthChanged() const { return m_renderBlockHasBorderOrPaddingLogicalWidthChanged; }
+
+    void setRenderBlockFlowLineLayoutPath(unsigned u) { m_renderBlockFlowLineLayoutPath = u; }
+    void setRenderBlockFlowHasMarkupTruncation(bool b) { m_renderBlockFlowHasMarkupTruncation = b; }
+    unsigned renderBlockFlowLineLayoutPath() const { return m_renderBlockFlowLineLayoutPath; }
+    bool renderBlockFlowHasMarkupTruncation() const { return m_renderBlockFlowHasMarkupTruncation; }
+
</ins><span class="cx"> private:
</span><span class="cx">     RenderElement(ContainerNode&amp;, Ref&lt;RenderStyle&gt;&amp;&amp;, unsigned baseTypeFlags);
</span><span class="cx">     void node() const = delete;
</span><span class="lines">@@ -280,6 +292,12 @@
</span><span class="cx">     unsigned m_isCSSAnimating : 1;
</span><span class="cx">     unsigned m_hasContinuation : 1;
</span><span class="cx"> 
</span><ins>+    unsigned m_renderBlockHasMarginBeforeQuirk : 1;
+    unsigned m_renderBlockHasMarginAfterQuirk : 1;
+    unsigned m_renderBlockHasBorderOrPaddingLogicalWidthChanged : 1;
+    unsigned m_renderBlockFlowHasMarkupTruncation : 1;
+    unsigned m_renderBlockFlowLineLayoutPath : 2;
+
</ins><span class="cx">     RenderObject* m_firstChild;
</span><span class="cx">     RenderObject* m_lastChild;
</span><span class="cx"> 
</span></span></pre></div>
<a id="trunkSourceWebCorerenderingRenderFlowThreadcpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/rendering/RenderFlowThread.cpp (179453 => 179454)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/rendering/RenderFlowThread.cpp        2015-02-01 02:06:44 UTC (rev 179453)
+++ trunk/Source/WebCore/rendering/RenderFlowThread.cpp        2015-02-01 02:58:13 UTC (rev 179454)
</span><span class="lines">@@ -592,7 +592,7 @@
</span><span class="cx"> 
</span><span class="cx"> void RenderFlowThread::removeLineRegionInfo(const RenderBlockFlow* blockFlow)
</span><span class="cx"> {
</span><del>-    if (!m_lineToRegionMap || blockFlow-&gt;m_lineLayoutPath == SimpleLinesPath)
</del><ins>+    if (!m_lineToRegionMap || blockFlow-&gt;lineLayoutPath() == SimpleLinesPath)
</ins><span class="cx">         return;
</span><span class="cx"> 
</span><span class="cx">     for (RootInlineBox* curr = blockFlow-&gt;firstRootBox(); curr; curr = curr-&gt;nextRootBox()) {
</span></span></pre>
</div>
</div>

</body>
</html>