diff --git a/Source/WebCore/ChangeLog b/Source/WebCore/ChangeLog
index 650ba10..ab4c8ef 100644
--- a/Source/WebCore/ChangeLog
+++ b/Source/WebCore/ChangeLog
@@ -1,3 +1,48 @@
+2020-01-18  Antti Koivisto  <antti@apple.com>
+
+        [LFC] LayoutState constructor shouldn't take LayoutTreeContent
+        https://bugs.webkit.org/show_bug.cgi?id=206471
+
+        Reviewed by Zalan Bujtas.
+
+        It just needs the root container.
+
+        This is preparation for more performant layout box construction and ownership model in the integration code.
+
+        * layout/LayoutContext.h:
+        * layout/LayoutState.cpp:
+        (WebCore::Layout::LayoutState::LayoutState):
+
+        Take Document (to compute quirks mode) and the root box only.
+
+        (WebCore::Layout::LayoutState::displayBoxForRootLayoutBox):
+        (WebCore::Layout::LayoutState::setViewportSize):
+        (WebCore::Layout::LayoutState::viewportSize const):
+        (WebCore::Layout::LayoutState::setIsIntegratedRootBoxFirstChild):
+        (WebCore::Layout::LayoutState::isIntegratedRootBoxFirstChild const): Deleted.
+
+        Make this a bit set by the integration code.
+
+        * layout/LayoutState.h:
+        (WebCore::Layout::LayoutState::root const):
+        (WebCore::Layout::LayoutState::isIntegratedRootBoxFirstChild const):
+        (WebCore::Layout::LayoutState::rootRenderer const): Deleted.
+        * layout/Verification.cpp:
+        (WebCore::Layout::LayoutContext::verifyAndOutputMismatchingLayoutTree):
+        * layout/inlineformatting/InlineFormattingContext.cpp:
+        (WebCore::Layout::InlineFormattingContext::constraintsForLine):
+        * layout/integration/LayoutIntegrationLineLayout.cpp:
+        (WebCore::LayoutIntegration::LineLayout::layout):
+
+        Also allocate LayoutState directly from LineLayout using Optional.
+
+        * layout/integration/LayoutIntegrationLineLayout.h:
+        * layout/layouttree/LayoutTreeBuilder.cpp:
+        (WebCore::Layout::printLayoutTreeForLiveDocuments):
+        * page/FrameViewLayoutContext.cpp:
+        (WebCore::FrameViewLayoutContext::layoutUsingFormattingContext):
+        * rendering/updating/RenderTreeUpdater.cpp:
+
 2020-01-18  Zalan Bujtas  <zalan@apple.com>
 
         [LFC][IFC] Rename trailing collapsible content to trailing trimmable
diff --git a/Source/WebCore/layout/LayoutContext.h b/Source/WebCore/layout/LayoutContext.h
index e454f1b..a071804 100644
--- a/Source/WebCore/layout/LayoutContext.h
+++ b/Source/WebCore/layout/LayoutContext.h
@@ -63,7 +63,7 @@
     static void paint(const LayoutState&, GraphicsContext&, const IntRect& dirtyRect);
 #ifndef NDEBUG
     // For testing purposes only
-    static void verifyAndOutputMismatchingLayoutTree(const LayoutState&);
+    static void verifyAndOutputMismatchingLayoutTree(const LayoutState&, const RenderView&);
 #endif
 
 private:
diff --git a/Source/WebCore/layout/LayoutState.cpp b/Source/WebCore/layout/LayoutState.cpp
index 718f0e5..e0c8e78 100644
--- a/Source/WebCore/layout/LayoutState.cpp
+++ b/Source/WebCore/layout/LayoutState.cpp
@@ -44,14 +44,13 @@
 
 WTF_MAKE_ISO_ALLOCATED_IMPL(LayoutState);
 
-LayoutState::LayoutState(const LayoutTreeContent& layoutTreeContent)
-    : m_layoutTreeContent(makeWeakPtr(layoutTreeContent))
+LayoutState::LayoutState(const Document& document, const Container& rootContainer)
+    : m_rootContainer(makeWeakPtr(rootContainer))
 {
     // It makes absolutely no sense to construct a dedicated layout state for a non-formatting context root (layout would be a no-op).
-    ASSERT(m_layoutTreeContent->rootLayoutBox().establishesFormattingContext());
+    ASSERT(root().establishesFormattingContext());
 
     auto quirksMode = [&] {
-        auto& document = m_layoutTreeContent->rootRenderer().document();
         if (document.inLimitedQuirksMode())
             return LayoutState::QuirksMode::Limited;
         if (document.inQuirksMode())
@@ -65,7 +64,7 @@
 
 Display::Box& LayoutState::displayBoxForRootLayoutBox()
 {
-    return ensureDisplayBoxForLayoutBox(m_layoutTreeContent->rootLayoutBox());
+    return ensureDisplayBoxForLayoutBox(root());
 }
 
 Display::Box& LayoutState::ensureDisplayBoxForLayoutBoxSlow(const Box& layoutBox)
@@ -139,30 +138,20 @@
 
 void LayoutState::setViewportSize(const LayoutSize& viewportSize)
 {
-    if (RuntimeEnabledFeatures::sharedFeatures().layoutFormattingContextIntegrationEnabled()) {
-        m_viewportSize = viewportSize;
-        return;
-    }
-    ASSERT_NOT_REACHED();
+    ASSERT(RuntimeEnabledFeatures::sharedFeatures().layoutFormattingContextIntegrationEnabled());
+    m_viewportSize = viewportSize;
 }
 
 LayoutSize LayoutState::viewportSize() const
 {
-    if (RuntimeEnabledFeatures::sharedFeatures().layoutFormattingContextIntegrationEnabled())
-        return m_viewportSize;
-    ASSERT_NOT_REACHED();
-    return { };
+    ASSERT(RuntimeEnabledFeatures::sharedFeatures().layoutFormattingContextIntegrationEnabled());
+    return m_viewportSize;
 }
 
-bool LayoutState::isIntegratedRootBoxFirstChild() const
+void LayoutState::setIsIntegratedRootBoxFirstChild(bool value)
 {
-    if (RuntimeEnabledFeatures::sharedFeatures().layoutFormattingContextIntegrationEnabled()) {
-        auto& rootRenderer = m_layoutTreeContent->rootRenderer();
-        ASSERT(rootRenderer.parent());
-        return rootRenderer.parent()->firstChild() == &rootRenderer;
-    }
-    ASSERT_NOT_REACHED();
-    return false;
+    ASSERT(RuntimeEnabledFeatures::sharedFeatures().layoutFormattingContextIntegrationEnabled());
+    m_isIntegratedRootBoxFirstChild = value;
 }
 
 }
diff --git a/Source/WebCore/layout/LayoutState.h b/Source/WebCore/layout/LayoutState.h
index b71be40..8088b5e 100644
--- a/Source/WebCore/layout/LayoutState.h
+++ b/Source/WebCore/layout/LayoutState.h
@@ -28,7 +28,6 @@
 #if ENABLE(LAYOUT_FORMATTING_CONTEXT)
 
 #include "LayoutContainer.h"
-#include "LayoutTreeBuilder.h"
 #include <wtf/HashMap.h>
 #include <wtf/HashSet.h>
 #include <wtf/IsoMalloc.h>
@@ -48,7 +47,7 @@
 class LayoutState : public CanMakeWeakPtr<LayoutState> {
     WTF_MAKE_ISO_ALLOCATED(LayoutState);
 public:
-    LayoutState(const LayoutTreeContent&);
+    LayoutState(const Document&, const Container& rootContainer);
     ~LayoutState();
 
     FormattingState& createFormattingStateForFormattingRootIfNeeded(const Container& formattingContextRoot);
@@ -72,15 +71,13 @@
     bool inLimitedQuirksMode() const { return m_quirksMode == QuirksMode::Limited; }
     bool inNoQuirksMode() const { return m_quirksMode == QuirksMode::No; }
 
-    const Container& root() const { return m_layoutTreeContent->rootLayoutBox(); }
-#ifndef NDEBUG
-    const RenderBox& rootRenderer() const { return m_layoutTreeContent->rootRenderer(); }
-#endif
+    const Container& root() const { return *m_rootContainer; }
 
     // LFC integration only. Full LFC has proper ICB access.
     void setViewportSize(const LayoutSize&);
     LayoutSize viewportSize() const;
-    bool isIntegratedRootBoxFirstChild() const;
+    bool isIntegratedRootBoxFirstChild() const { return m_isIntegratedRootBoxFirstChild; }
+    void setIsIntegratedRootBoxFirstChild(bool);
 
 private:
     void setQuirksMode(QuirksMode quirksMode) { m_quirksMode = quirksMode; }
@@ -93,9 +90,11 @@
     HashMap<const Box*, std::unique_ptr<Display::Box>> m_layoutToDisplayBox;
     QuirksMode m_quirksMode { QuirksMode::No };
 
-    WeakPtr<const LayoutTreeContent> m_layoutTreeContent;
+    WeakPtr<const Container> m_rootContainer;
+
     // LFC integration only.
     LayoutSize m_viewportSize;
+    bool m_isIntegratedRootBoxFirstChild { false };
 };
 
 inline bool LayoutState::hasDisplayBox(const Box& layoutBox) const
diff --git a/Source/WebCore/layout/Verification.cpp b/Source/WebCore/layout/Verification.cpp
index 7e19148..da10510 100644
--- a/Source/WebCore/layout/Verification.cpp
+++ b/Source/WebCore/layout/Verification.cpp
@@ -334,11 +334,10 @@
     return mismtachingGeometry;
 }
 
-void LayoutContext::verifyAndOutputMismatchingLayoutTree(const LayoutState& layoutState)
+void LayoutContext::verifyAndOutputMismatchingLayoutTree(const LayoutState& layoutState, const RenderView& rootRenderer)
 {
     TextStream stream;
     auto& layoutRoot = layoutState.root();
-    auto& rootRenderer = layoutState.rootRenderer();
     auto mismatchingGeometry = verifyAndOutputSubtree(stream, layoutState, rootRenderer, layoutRoot);
     if (!mismatchingGeometry)
         return;
diff --git a/Source/WebCore/layout/inlineformatting/InlineFormattingContext.cpp b/Source/WebCore/layout/inlineformatting/InlineFormattingContext.cpp
index ab6cc2e..b2a5318 100644
--- a/Source/WebCore/layout/inlineformatting/InlineFormattingContext.cpp
+++ b/Source/WebCore/layout/inlineformatting/InlineFormattingContext.cpp
@@ -422,8 +422,9 @@
             // Unless otherwise specified by the each-line and/or hanging keywords, only lines that are the first formatted line
             // of an element are affected.
             // For example, the first line of an anonymous block box is only affected if it is the first child of its parent element.
-            isFormattingContextRootCandidateToTextIndent = RuntimeEnabledFeatures::sharedFeatures().layoutFormattingContextIntegrationEnabled() ?
-            layoutState().isIntegratedRootBoxFirstChild() : root.parent()->firstInFlowChild() == &root;
+            isFormattingContextRootCandidateToTextIndent = RuntimeEnabledFeatures::sharedFeatures().layoutFormattingContextIntegrationEnabled()
+                ? layoutState().isIntegratedRootBoxFirstChild()
+                : root.parent()->firstInFlowChild() == &root;
         }
         if (!isFormattingContextRootCandidateToTextIndent)
             return InlineLayoutUnit { };
diff --git a/Source/WebCore/layout/integration/LayoutIntegrationLineLayout.cpp b/Source/WebCore/layout/integration/LayoutIntegrationLineLayout.cpp
index ec12389..2f63977 100644
--- a/Source/WebCore/layout/integration/LayoutIntegrationLineLayout.cpp
+++ b/Source/WebCore/layout/integration/LayoutIntegrationLineLayout.cpp
@@ -95,8 +95,10 @@
 
 void LineLayout::layout()
 {
-    if (!m_layoutState)
-        m_layoutState = makeUnique<Layout::LayoutState>(*m_treeContent);
+    if (!m_layoutState) {
+        m_layoutState.emplace(m_flow.document(), m_treeContent->rootLayoutBox());
+        m_layoutState->setIsIntegratedRootBoxFirstChild(m_flow.parent()->firstChild() == &m_flow);
+    }
 
     prepareRootGeometryForLayout();
 
diff --git a/Source/WebCore/layout/integration/LayoutIntegrationLineLayout.h b/Source/WebCore/layout/integration/LayoutIntegrationLineLayout.h
index 0ca6503..cf625c3 100644
--- a/Source/WebCore/layout/integration/LayoutIntegrationLineLayout.h
+++ b/Source/WebCore/layout/integration/LayoutIntegrationLineLayout.h
@@ -28,6 +28,7 @@
 #if ENABLE(LAYOUT_FORMATTING_CONTEXT)
 
 #include "LayoutPoint.h"
+#include "LayoutState.h"
 #include "LineLayoutTraversal.h"
 #include "RenderObjectEnums.h"
 
@@ -47,7 +48,6 @@
 
 namespace Layout {
 class LayoutTreeContent;
-class LayoutState;
 }
 
 namespace LayoutIntegration {
@@ -87,7 +87,7 @@
 
     const RenderBlockFlow& m_flow;
     std::unique_ptr<Layout::LayoutTreeContent> m_treeContent;
-    std::unique_ptr<Layout::LayoutState> m_layoutState;
+    Optional<Layout::LayoutState> m_layoutState;
     LayoutUnit m_contentLogicalHeight;
 };
 
diff --git a/Source/WebCore/layout/layouttree/LayoutTreeBuilder.cpp b/Source/WebCore/layout/layouttree/LayoutTreeBuilder.cpp
index 0de605e..1fd3986 100644
--- a/Source/WebCore/layout/layouttree/LayoutTreeBuilder.cpp
+++ b/Source/WebCore/layout/layouttree/LayoutTreeBuilder.cpp
@@ -452,7 +452,7 @@
         // FIXME: Need to find a way to output geometry without layout context.
         auto& renderView = *document->renderView();
         auto layoutTreeContent = TreeBuilder::buildLayoutTree(renderView);
-        auto layoutState = LayoutState { *layoutTreeContent };
+        auto layoutState = LayoutState { *document, layoutTreeContent->rootLayoutBox() };
 
         auto& layoutRoot = layoutState.root();
         auto invalidationState = InvalidationState { };
diff --git a/Source/WebCore/page/FrameViewLayoutContext.cpp b/Source/WebCore/page/FrameViewLayoutContext.cpp
index 0e7844d..5b3b6cd 100644
--- a/Source/WebCore/page/FrameViewLayoutContext.cpp
+++ b/Source/WebCore/page/FrameViewLayoutContext.cpp
@@ -72,7 +72,7 @@
         m_layoutState = nullptr;
     }
     if (!m_layoutState)
-        m_layoutState = makeUnique<Layout::LayoutState>(*m_layoutTreeContent);
+        m_layoutState = makeUnique<Layout::LayoutState>(*document(), m_layoutTreeContent->rootLayoutBox());
 
     // FIXME: This is not the real invalidation yet.
     auto invalidationState = Layout::InvalidationState { };
@@ -91,7 +91,7 @@
     }
 
 #ifndef NDEBUG
-    Layout::LayoutContext::verifyAndOutputMismatchingLayoutTree(*m_layoutState);
+    Layout::LayoutContext::verifyAndOutputMismatchingLayoutTree(*m_layoutState, renderView);
 #endif
 }
 
diff --git a/Source/WebCore/rendering/updating/RenderTreeUpdater.cpp b/Source/WebCore/rendering/updating/RenderTreeUpdater.cpp
index 231bb08..38c3be0 100644
--- a/Source/WebCore/rendering/updating/RenderTreeUpdater.cpp
+++ b/Source/WebCore/rendering/updating/RenderTreeUpdater.cpp
@@ -56,6 +56,7 @@
 #include "FrameView.h"
 #include "FrameViewLayoutContext.h"
 #include "LayoutState.h"
+#include "LayoutTreeBuilder.h"
 #endif
 
 #if PLATFORM(IOS_FAMILY)
