Changeset 252415 in webkit


Ignore:
Timestamp:
Nov 13, 2019 10:39:44 AM (4 years ago)
Author:
Alan Bujtas
Message:

[LFC][Invalidation] Introduce InvalidationState and Context
https://bugs.webkit.org/show_bug.cgi?id=204140
<rdar://problem/57142106>

Reviewed by Antti Koivisto.

InvalidationContext take style/content changes and turn them into "dirty layout boxes" (stored in InvalidationState).
InvalidationState is the input to the (partial)subsequent layout.

  • Sources.txt:
  • WebCore.xcodeproj/project.pbxproj:
  • layout/Invalidation.h: Removed.
  • layout/LayoutContext.cpp:

(WebCore::Layout::LayoutContext::layout):
(WebCore::Layout::LayoutContext::layoutFormattingContextSubtree):
(WebCore::Layout::LayoutContext::runLayout):
(WebCore::Layout::LayoutContext::styleChanged): Deleted.
(WebCore::Layout::LayoutContext::markNeedsUpdate): Deleted.

  • layout/LayoutContext.h:

(WebCore::Layout::LayoutContext::updateAll): Deleted.

  • layout/blockformatting/BlockInvalidation.cpp: Removed.
  • layout/blockformatting/BlockInvalidation.h: Removed.
  • layout/invalidation/InvalidationContext.cpp: Renamed from Source/WebCore/layout/inlineformatting/InlineInvalidation.cpp.

(WebCore::Layout::InvalidationContext::InvalidationContext):
(WebCore::Layout::InvalidationContext::styleChanged):
(WebCore::Layout::InvalidationContext::contentChanged):
(WebCore::Layout::InvalidationContext::subtreeChanged):

  • layout/invalidation/InvalidationContext.h: Renamed from Source/WebCore/layout/inlineformatting/InlineInvalidation.h.
  • layout/invalidation/InvalidationState.cpp: Renamed from Source/WebCore/layout/tableformatting/TableInvalidation.cpp.

(WebCore::Layout::InvalidationState::InvalidationState):
(WebCore::Layout::InvalidationState::markNeedsUpdate):

  • layout/invalidation/InvalidationState.h: Renamed from Source/WebCore/layout/tableformatting/TableInvalidation.h.

(WebCore::Layout::InvalidationState::formattingContextRoots const):

  • layout/layouttree/LayoutTreeBuilder.cpp:

(WebCore::Layout::printLayoutTreeForLiveDocuments):

Location:
trunk/Source/WebCore
Files:
1 added
3 deleted
6 edited
4 moved

Legend:

Unmodified
Added
Removed
  • trunk/Source/WebCore/ChangeLog

    r252409 r252415  
     12019-11-13  Zalan Bujtas  <zalan@apple.com>
     2
     3        [LFC][Invalidation] Introduce InvalidationState and Context
     4        https://bugs.webkit.org/show_bug.cgi?id=204140
     5        <rdar://problem/57142106>
     6
     7        Reviewed by Antti Koivisto.
     8
     9        InvalidationContext take style/content changes and turn them into "dirty layout boxes" (stored in InvalidationState).
     10        InvalidationState is the input to the (partial)subsequent layout.
     11
     12        * Sources.txt:
     13        * WebCore.xcodeproj/project.pbxproj:
     14        * layout/Invalidation.h: Removed.
     15        * layout/LayoutContext.cpp:
     16        (WebCore::Layout::LayoutContext::layout):
     17        (WebCore::Layout::LayoutContext::layoutFormattingContextSubtree):
     18        (WebCore::Layout::LayoutContext::runLayout):
     19        (WebCore::Layout::LayoutContext::styleChanged): Deleted.
     20        (WebCore::Layout::LayoutContext::markNeedsUpdate): Deleted.
     21        * layout/LayoutContext.h:
     22        (WebCore::Layout::LayoutContext::updateAll): Deleted.
     23        * layout/blockformatting/BlockInvalidation.cpp: Removed.
     24        * layout/blockformatting/BlockInvalidation.h: Removed.
     25        * layout/invalidation/InvalidationContext.cpp: Renamed from Source/WebCore/layout/inlineformatting/InlineInvalidation.cpp.
     26        (WebCore::Layout::InvalidationContext::InvalidationContext):
     27        (WebCore::Layout::InvalidationContext::styleChanged):
     28        (WebCore::Layout::InvalidationContext::contentChanged):
     29        (WebCore::Layout::InvalidationContext::subtreeChanged):
     30        * layout/invalidation/InvalidationContext.h: Renamed from Source/WebCore/layout/inlineformatting/InlineInvalidation.h.
     31        * layout/invalidation/InvalidationState.cpp: Renamed from Source/WebCore/layout/tableformatting/TableInvalidation.cpp.
     32        (WebCore::Layout::InvalidationState::InvalidationState):
     33        (WebCore::Layout::InvalidationState::markNeedsUpdate):
     34        * layout/invalidation/InvalidationState.h: Renamed from Source/WebCore/layout/tableformatting/TableInvalidation.h.
     35        (WebCore::Layout::InvalidationState::formattingContextRoots const):
     36        * layout/layouttree/LayoutTreeBuilder.cpp:
     37        (WebCore::Layout::printLayoutTreeForLiveDocuments):
     38
    1392019-11-13  Commit Queue  <commit-queue@webkit.org>
    240
  • trunk/Source/WebCore/Sources.txt

    r252393 r252415  
    14361436layout/blockformatting/BlockFormattingState.cpp
    14371437layout/blockformatting/BlockMarginCollapse.cpp
    1438 layout/blockformatting/BlockInvalidation.cpp
    14391438layout/displaytree/DisplayBox.cpp
    14401439layout/displaytree/DisplayPainter.cpp
     
    14471446layout/inlineformatting/InlineFormattingContextQuirks.cpp
    14481447layout/inlineformatting/InlineFormattingState.cpp
    1449 layout/inlineformatting/InlineInvalidation.cpp
    14501448layout/inlineformatting/InlineItem.cpp
    14511449layout/inlineformatting/InlineLine.cpp
     
    14541452layout/inlineformatting/InlineTextItem.cpp
    14551453layout/inlineformatting/text/TextUtil.cpp
     1454layout/invalidation/InvalidationContext.cpp
     1455layout/invalidation/InvalidationState.cpp
    14561456layout/layouttree/LayoutBox.cpp
    14571457layout/layouttree/LayoutContainer.cpp
     
    14621462layout/tableformatting/TableFormattingState.cpp
    14631463layout/tableformatting/TableGrid.cpp
    1464 layout/tableformatting/TableInvalidation.cpp
    14651464
    14661465loader/AdClickAttribution.cpp
  • trunk/Source/WebCore/WebCore.xcodeproj/project.pbxproj

    r252393 r252415  
    371371                10FB084B14E15C7E00A3DB98 /* PublicURLManager.h in Headers */ = {isa = PBXBuildFile; fileRef = 10FB084A14E15C7E00A3DB98 /* PublicURLManager.h */; };
    372372                112B34D51E60B98300BB310A /* SimpleLineLayoutPagination.h in Headers */ = {isa = PBXBuildFile; fileRef = 112B34D41E60B98300BB310A /* SimpleLineLayoutPagination.h */; };
    373                 11310CF120BA4A1B0065A8D0 /* Invalidation.h in Headers */ = {isa = PBXBuildFile; fileRef = 115F7805209CBCBD00739C13 /* Invalidation.h */; settings = {ATTRIBUTES = (Private, ); }; };
    374373                11310CF220BA4A320065A8D0 /* LayoutTreeBuilder.h in Headers */ = {isa = PBXBuildFile; fileRef = 11100FD7209514DF0081AA6C /* LayoutTreeBuilder.h */; settings = {ATTRIBUTES = (Private, ); }; };
    375374                11310CF320BA4A370065A8D0 /* LayoutReplaced.h in Headers */ = {isa = PBXBuildFile; fileRef = 111C615620AD1AE1005B82FA /* LayoutReplaced.h */; settings = {ATTRIBUTES = (Private, ); }; };
     
    378377                11310CF620BA4A560065A8D0 /* LayoutChildIterator.h in Headers */ = {isa = PBXBuildFile; fileRef = 11100FC920927CBC0081AA6C /* LayoutChildIterator.h */; settings = {ATTRIBUTES = (Private, ); }; };
    379378                11310CF720BA4A620065A8D0 /* LayoutAncestorIterator.h in Headers */ = {isa = PBXBuildFile; fileRef = 11100FCA2092868D0081AA6C /* LayoutAncestorIterator.h */; settings = {ATTRIBUTES = (Private, ); }; };
    380                 11310CF820BA4A6A0065A8D0 /* InlineInvalidation.h in Headers */ = {isa = PBXBuildFile; fileRef = 1123AFDC209ABBBA00736ACC /* InlineInvalidation.h */; settings = {ATTRIBUTES = (Private, ); }; };
    381                 11310CF920BA4A7D0065A8D0 /* BlockInvalidation.h in Headers */ = {isa = PBXBuildFile; fileRef = 1123AFD9209ABB2000736ACC /* BlockInvalidation.h */; settings = {ATTRIBUTES = (Private, ); }; };
    382379                113409DA203E038000C66915 /* RenderTreeBuilderContinuation.h in Headers */ = {isa = PBXBuildFile; fileRef = 113409D8203E038000C66915 /* RenderTreeBuilderContinuation.h */; };
    383380                113D0B521F9FDD2B00F611BB /* FrameViewLayoutContext.h in Headers */ = {isa = PBXBuildFile; fileRef = 113D0B501F9FDD2B00F611BB /* FrameViewLayoutContext.h */; settings = {ATTRIBUTES = (Private, ); }; };
     
    20312028                6F7CA3C6208C2957002F29AB /* LayoutState.h in Headers */ = {isa = PBXBuildFile; fileRef = 6F7CA3C4208C2956002F29AB /* LayoutState.h */; settings = {ATTRIBUTES = (Private, ); }; };
    20322029                6F7CA3CA208C2B2E002F29AB /* InlineFormattingContext.h in Headers */ = {isa = PBXBuildFile; fileRef = 6F7CA3C8208C2B2E002F29AB /* InlineFormattingContext.h */; settings = {ATTRIBUTES = (Private, ); }; };
     2030                6F95DE4D237B889C00E517E1 /* InvalidationContext.h in Headers */ = {isa = PBXBuildFile; fileRef = 6F95DE4B237B889B00E517E1 /* InvalidationContext.h */; settings = {ATTRIBUTES = (Private, ); }; };
     2031                6F95DE4E237B889C00E517E1 /* InvalidationState.h in Headers */ = {isa = PBXBuildFile; fileRef = 6F95DE4C237B889C00E517E1 /* InvalidationState.h */; settings = {ATTRIBUTES = (Private, ); }; };
    20332032                6F995A161A70756200A735F4 /* WebGLSync.h in Headers */ = {isa = PBXBuildFile; fileRef = 6F995A141A70756200A735F4 /* WebGLSync.h */; };
    20342033                6F995A201A7078B100A735F4 /* WebGLQuery.h in Headers */ = {isa = PBXBuildFile; fileRef = 6F995A181A7078B100A735F4 /* WebGLQuery.h */; };
     
    58615860                111C615620AD1AE1005B82FA /* LayoutReplaced.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = LayoutReplaced.h; sourceTree = "<group>"; };
    58625861                111C615720AD1AE1005B82FA /* LayoutReplaced.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = LayoutReplaced.cpp; sourceTree = "<group>"; };
    5863                 1123AFD9209ABB2000736ACC /* BlockInvalidation.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = BlockInvalidation.h; sourceTree = "<group>"; };
    5864                 1123AFDA209ABB2000736ACC /* BlockInvalidation.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = BlockInvalidation.cpp; sourceTree = "<group>"; };
    5865                 1123AFDC209ABBBA00736ACC /* InlineInvalidation.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = InlineInvalidation.h; sourceTree = "<group>"; };
    5866                 1123AFDD209ABBBA00736ACC /* InlineInvalidation.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = InlineInvalidation.cpp; sourceTree = "<group>"; };
    58675862                112B34D01E60B8A700BB310A /* SimpleLineLayoutPagination.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = SimpleLineLayoutPagination.cpp; sourceTree = "<group>"; };
    58685863                112B34D41E60B98300BB310A /* SimpleLineLayoutPagination.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SimpleLineLayoutPagination.h; sourceTree = "<group>"; };
     
    58895884                115CFA95208B952B001E6991 /* LayoutBox.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = LayoutBox.h; sourceTree = "<group>"; };
    58905885                115CFA96208B952B001E6991 /* LayoutBox.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = LayoutBox.cpp; sourceTree = "<group>"; };
    5891                 115F7805209CBCBD00739C13 /* Invalidation.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = Invalidation.h; sourceTree = "<group>"; };
    58925886                119340761FE8B92300935F1E /* RenderTreeBuilderTable.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = RenderTreeBuilderTable.cpp; sourceTree = "<group>"; };
    58935887                119340771FE8B92300935F1E /* RenderTreeBuilderTable.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = RenderTreeBuilderTable.h; sourceTree = "<group>"; };
     
    92749268                6F8F460121B03BB40041AC3A /* FormattingContextQuirks.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = FormattingContextQuirks.cpp; sourceTree = "<group>"; };
    92759269                6F8F460321B03BC60041AC3A /* BlockFormattingContextQuirks.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = BlockFormattingContextQuirks.cpp; sourceTree = "<group>"; };
     9270                6F95DE4B237B889B00E517E1 /* InvalidationContext.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = InvalidationContext.h; sourceTree = "<group>"; };
     9271                6F95DE4C237B889C00E517E1 /* InvalidationState.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = InvalidationState.h; sourceTree = "<group>"; };
    92769272                6F995A091A7070E600A735F4 /* WebGLQuery.idl */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = WebGLQuery.idl; sourceTree = "<group>"; };
    92779273                6F995A0A1A7070E600A735F4 /* WebGLSampler.idl */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = WebGLSampler.idl; sourceTree = "<group>"; };
     
    93069302                6FBB860520B464B600DAD938 /* FormattingContextGeometry.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = FormattingContextGeometry.cpp; sourceTree = "<group>"; };
    93079303                6FC5CA9222E3599300B13E11 /* TableFormattingState.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = TableFormattingState.cpp; sourceTree = "<group>"; };
    9308                 6FC5CA9322E3599300B13E11 /* TableInvalidation.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = TableInvalidation.h; sourceTree = "<group>"; };
    93099304                6FC5CA9422E3599400B13E11 /* TableFormattingContext.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = TableFormattingContext.cpp; sourceTree = "<group>"; };
    93109305                6FC5CA9522E3599400B13E11 /* TableFormattingContext.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = TableFormattingContext.h; sourceTree = "<group>"; };
    93119306                6FC5CA9622E3599500B13E11 /* TableFormattingState.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = TableFormattingState.h; sourceTree = "<group>"; };
    9312                 6FC5CA9722E3599500B13E11 /* TableInvalidation.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = TableInvalidation.cpp; sourceTree = "<group>"; };
    93139307                6FCE1A1822618AB3004F0343 /* DisplayRun.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = DisplayRun.h; sourceTree = "<group>"; };
    93149308                6FD9CD52227E21C800E53957 /* DisplayRect.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = DisplayRect.h; sourceTree = "<group>"; };
     
    93179311                6FE7AA2621C37B6300296DCD /* MarginTypes.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = MarginTypes.h; sourceTree = "<group>"; };
    93189312                6FE7CFA02177EEF1005B1573 /* InlineItem.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = InlineItem.h; sourceTree = "<group>"; };
     9313                6FE8E6F7237BA5E800758D26 /* InvalidationContext.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = InvalidationContext.cpp; sourceTree = "<group>"; };
     9314                6FE8E6F8237BA6B200758D26 /* InvalidationState.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = InvalidationState.cpp; sourceTree = "<group>"; };
    93199315                6FE9F09222211035004C5082 /* ContentChangeObserver.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = ContentChangeObserver.cpp; sourceTree = "<group>"; };
    93209316                6FEFE81D22F9D22A00114927 /* LayoutPhase.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = LayoutPhase.h; sourceTree = "<group>"; };
     
    1661516611                                6FCFC055212DACC2007695D2 /* floats */,
    1661616612                                115CFA9A208BC140001E6991 /* inlineformatting */,
     16613                                6F95DE4A237B883000E517E1 /* invalidation */,
    1661716614                                115CFA90208B9441001E6991 /* layouttree */,
    1661816615                                6FC5CA9122E3593300B13E11 /* tableformatting */,
     
    1662316620                                115CFA75208AFE30001E6991 /* FormattingState.cpp */,
    1662416621                                115CFA74208AFE30001E6991 /* FormattingState.h */,
    16625                                 115F7805209CBCBD00739C13 /* Invalidation.h */,
    1662616622                                6F26BB6923343E5A002F2BEA /* LayoutContext.cpp */,
    1662716623                                6F26BB6B23343E5B002F2BEA /* LayoutContext.h */,
     
    1666616662                                115CFA79208B8D9D001E6991 /* BlockFormattingState.cpp */,
    1666716663                                115CFA78208B8D9D001E6991 /* BlockFormattingState.h */,
    16668                                 1123AFDA209ABB2000736ACC /* BlockInvalidation.cpp */,
    16669                                 1123AFD9209ABB2000736ACC /* BlockInvalidation.h */,
    1667016664                                115CFA89208B921A001E6991 /* BlockMarginCollapse.cpp */,
    1667116665                        );
     
    1668316677                                115CFA7D208B8E10001E6991 /* InlineFormattingState.cpp */,
    1668416678                                115CFA7C208B8E10001E6991 /* InlineFormattingState.h */,
    16685                                 1123AFDD209ABBBA00736ACC /* InlineInvalidation.cpp */,
    16686                                 1123AFDC209ABBBA00736ACC /* InlineInvalidation.h */,
    1668716679                                6F7B8CEC23626E6600C9FF15 /* InlineItem.cpp */,
    1668816680                                6FE7CFA02177EEF1005B1573 /* InlineItem.h */,
     
    2079720789                        sourceTree = "<group>";
    2079820790                };
     20791                6F95DE4A237B883000E517E1 /* invalidation */ = {
     20792                        isa = PBXGroup;
     20793                        children = (
     20794                                6FE8E6F7237BA5E800758D26 /* InvalidationContext.cpp */,
     20795                                6F95DE4B237B889B00E517E1 /* InvalidationContext.h */,
     20796                                6FE8E6F8237BA6B200758D26 /* InvalidationState.cpp */,
     20797                                6F95DE4C237B889C00E517E1 /* InvalidationState.h */,
     20798                        );
     20799                        path = invalidation;
     20800                        sourceTree = "<group>";
     20801                };
    2079920802                6FC5CA9122E3593300B13E11 /* tableformatting */ = {
    2080020803                        isa = PBXGroup;
     
    2080720810                                6F5B7EAA2300A79E0067D9C3 /* TableGrid.cpp */,
    2080820811                                6FB22E30230097E300C20866 /* TableGrid.h */,
    20809                                 6FC5CA9722E3599500B13E11 /* TableInvalidation.cpp */,
    20810                                 6FC5CA9322E3599300B13E11 /* TableInvalidation.h */,
    2081120812                        );
    2081220813                        path = tableformatting;
     
    2901829019                                115CFA6E208AFAB7001E6991 /* BlockFormattingContext.h in Headers */,
    2901929020                                115CFA7A208B8D9D001E6991 /* BlockFormattingState.h in Headers */,
    29020                                 11310CF920BA4A7D0065A8D0 /* BlockInvalidation.h in Headers */,
    2902129021                                BC5EB5E10E81BE8700B25965 /* BorderData.h in Headers */,
    2902229022                                589556ED18D4A44000764B03 /* BorderEdge.h in Headers */,
     
    3016630166                                6F7CA3CA208C2B2E002F29AB /* InlineFormattingContext.h in Headers */,
    3016730167                                115CFA7E208B8E10001E6991 /* InlineFormattingState.h in Headers */,
    30168                                 11310CF820BA4A6A0065A8D0 /* InlineInvalidation.h in Headers */,
    3016930168                                6FE7CFA22177EEF2005B1573 /* InlineItem.h in Headers */,
    3017030169                                BCE789161120D6080060ECE5 /* InlineIterator.h in Headers */,
     
    3023730236                                B27535750B053814002CE64F /* IntSize.h in Headers */,
    3023830237                                B27535760B053814002CE64F /* IntSizeHash.h in Headers */,
    30239                                 11310CF120BA4A1B0065A8D0 /* Invalidation.h in Headers */,
     30238                                6F95DE4D237B889C00E517E1 /* InvalidationContext.h in Headers */,
     30239                                6F95DE4E237B889C00E517E1 /* InvalidationState.h in Headers */,
    3024030240                                2D0B4AAB18DA1CCD00434DE1 /* IOSurface.h in Headers */,
    3024130241                                1C21E57D183ED1FF001C289D /* IOSurfacePool.h in Headers */,
  • trunk/Source/WebCore/layout/LayoutContext.cpp

    r251640 r252415  
    3131#include "BlockFormattingContext.h"
    3232#include "BlockFormattingState.h"
    33 #include "BlockInvalidation.h"
    3433#include "DisplayBox.h"
    3534#include "DisplayPainter.h"
    3635#include "InlineFormattingContext.h"
    3736#include "InlineFormattingState.h"
    38 #include "InlineInvalidation.h"
    39 #include "Invalidation.h"
     37#include "InvalidationContext.h"
     38#include "InvalidationState.h"
    4039#include "LayoutBox.h"
    4140#include "LayoutContainer.h"
    4241#include "LayoutPhase.h"
    4342#include "LayoutTreeBuilder.h"
     43#include "RenderStyleConstants.h"
    4444#include "RenderView.h"
    4545#include "TableFormattingContext.h"
     
    5757}
    5858
    59 void LayoutContext::layout()
     59void LayoutContext::layout(const InvalidationState& invalidationState)
    6060{
    6161    PhaseScope scope(Phase::Type::Layout);
    6262
    63     ASSERT(!m_formattingContextRootListForLayout.computesEmpty());
    64     for (auto& layoutRoot : m_formattingContextRootListForLayout)
    65         layoutFormattingContextSubtree(layoutRoot);
    66     m_formattingContextRootListForLayout.clear();
     63    auto& formattingContextRootsForLayout = invalidationState.formattingContextRoots();
     64    ASSERT(!formattingContextRootsForLayout.computesEmpty());
     65    for (auto& formattingContextRoot : formattingContextRootsForLayout)
     66        layoutFormattingContextSubtree(formattingContextRoot);
    6767}
    6868
    69 void LayoutContext::layoutFormattingContextSubtree(const Container& layoutRoot)
     69void LayoutContext::layoutFormattingContextSubtree(const Container& formattingContextRoot)
    7070{
    71     RELEASE_ASSERT(layoutRoot.establishesFormattingContext());
    72     auto formattingContext = createFormattingContext(layoutRoot, layoutState());
     71    RELEASE_ASSERT(formattingContextRoot.establishesFormattingContext());
     72    auto formattingContext = createFormattingContext(formattingContextRoot, layoutState());
    7373    formattingContext->layoutInFlowContent();
    7474    formattingContext->layoutOutOfFlowContent();
    75 }
    76 
    77 void LayoutContext::styleChanged(const Box& layoutBox, StyleDiff styleDiff)
    78 {
    79     PhaseScope scope(Phase::Type::Invalidation);
    80 
    81     auto& formattingState = layoutState().formattingStateForBox(layoutBox);
    82     const Container* invalidationRoot = nullptr;
    83     if (is<BlockFormattingState>(formattingState))
    84         invalidationRoot = BlockInvalidation::invalidate(layoutBox, styleDiff, *this, downcast<BlockFormattingState>(formattingState)).root;
    85     else if (is<InlineFormattingState>(formattingState))
    86         invalidationRoot = InlineInvalidation::invalidate(layoutBox, styleDiff, *this, downcast<InlineFormattingState>(formattingState)).root;
    87     else
    88         ASSERT_NOT_IMPLEMENTED_YET();
    89     ASSERT(invalidationRoot);
    90     m_formattingContextRootListForLayout.add(invalidationRoot);
    91 }
    92 
    93 void LayoutContext::markNeedsUpdate(const Box& layoutBox, OptionSet<UpdateType>)
    94 {
    95     // FIXME: This should trigger proper invalidation instead of just adding the formatting context root to the dirty list.
    96     m_formattingContextRootListForLayout.add(&(layoutBox.isInitialContainingBlock() ? downcast<Container>(layoutBox) : layoutBox.formattingContextRoot()));
    9775}
    9876
     
    157135    displayBox.setContentBoxWidth(LayoutUnit(layoutRoot.style().logicalWidth().value()));
    158136
    159     auto layoutContext = LayoutContext(layoutState);
    160     layoutContext.markNeedsUpdate(layoutRoot);
    161     layoutContext.layout();
     137    auto invalidationState = InvalidationState { };
     138    auto invalidationContext = InvalidationContext { invalidationState };
     139    invalidationContext.styleChanged(*layoutRoot.firstChild(), StyleDifference::Layout);
     140
     141    LayoutContext(layoutState).layout(invalidationState);
    162142}
    163143
  • trunk/Source/WebCore/layout/LayoutContext.h

    r251640 r252415  
    3030#include <wtf/IsoMalloc.h>
    3131#include <wtf/OptionSet.h>
    32 #include <wtf/WeakHashSet.h>
    3332
    3433namespace WebCore {
     
    4039namespace Layout {
    4140
    42 enum class StyleDiff;
    43 class Box;
    4441class Container;
     42class InvalidationState;
    4543class LayoutState;
    4644class FormattingContext;
     
    6058
    6159    LayoutContext(LayoutState&);
    62     void layout();
    63 
    64     enum class UpdateType {
    65         Overflow = 1 << 0,
    66         Position = 1 << 1,
    67         Size     = 1 << 2
    68     };
    69     static constexpr OptionSet<UpdateType> updateAll() { return { UpdateType::Overflow, UpdateType::Position, UpdateType::Size }; }
    70     void markNeedsUpdate(const Box&, OptionSet<UpdateType> = updateAll());
    71     bool needsUpdate(const Box&) const;
    72 
    73     void styleChanged(const Box&, StyleDiff);
     60    void layout(const InvalidationState&);
    7461
    7562    static std::unique_ptr<FormattingContext> createFormattingContext(const Container& formattingContextRoot, LayoutState&);
     
    8471
    8572    LayoutState& m_layoutState;
    86     WeakHashSet<const Container> m_formattingContextRootListForLayout;
    8773};
    8874
  • trunk/Source/WebCore/layout/invalidation/InvalidationContext.cpp

    r252412 r252415  
    11/*
    2  * Copyright (C) 2018 Apple Inc. All rights reserved.
     2 * Copyright (C) 2019 Apple Inc. All rights reserved.
    33 *
    44 * Redistribution and use in source and binary forms, with or without
     
    2525
    2626#include "config.h"
    27 #include "InlineInvalidation.h"
     27#include "InvalidationContext.h"
    2828
    2929#if ENABLE(LAYOUT_FORMATTING_CONTEXT)
    3030
    31 #include "InlineFormattingState.h"
    32 #include "Invalidation.h"
    33 #include "LayoutBox.h"
    34 #include "LayoutContext.h"
     31#include "InvalidationState.h"
    3532#include <wtf/IsoMallocInlines.h>
    3633
     
    3835namespace Layout {
    3936
    40 WTF_MAKE_ISO_ALLOCATED_IMPL(InlineInvalidation);
     37WTF_MAKE_ISO_ALLOCATED_IMPL(InvalidationContext);
    4138
    42 InvalidationResult InlineInvalidation::invalidate(const Box& layoutBox, StyleDiff, LayoutContext& layoutContext, InlineFormattingState&)
     39InvalidationContext::InvalidationContext(InvalidationState& invalidationState)
     40    : m_invalidationState(invalidationState)
    4341{
    44     layoutContext.markNeedsUpdate(layoutBox);
    45     return { nullptr };
     42}
     43
     44void InvalidationContext::styleChanged(const Box& layoutBox, StyleDifference)
     45{
     46    m_invalidationState.markNeedsUpdate(layoutBox);
     47}
     48
     49void InvalidationContext::contentChanged(const Box&)
     50{
     51}
     52
     53void InvalidationContext::subtreeChanged(const Box&)
     54{
    4655}
    4756
  • trunk/Source/WebCore/layout/invalidation/InvalidationContext.h

    r252412 r252415  
    3131
    3232namespace WebCore {
     33enum class StyleDifference;
     34
    3335namespace Layout {
     36class Box;
     37class InvalidationState;
    3438
    35 class Box;
    36 class TableFormattingState;
    37 class LayoutContext;
    38 struct InvalidationResult;
    39 enum class StyleDiff;
     39class InvalidationContext {
     40    WTF_MAKE_ISO_ALLOCATED(InvalidationContext);
     41public:
     42    InvalidationContext(InvalidationState&);
    4043
    41 // This class implements box invalidation for table formatting context.
    42 class TableInvalidation {
    43     WTF_MAKE_ISO_ALLOCATED(TableInvalidation);
    44 public:
    45     static InvalidationResult invalidate(const Box&, StyleDiff, LayoutContext&, TableFormattingState&);
     44    void styleChanged(const Box&, StyleDifference);
     45    // FIXME: We might just merge this with subtreeChanged.
     46    void contentChanged(const Box&);
     47    // FIXME: This is just a placeholder for tree changes like gaining and losing descendants.
     48    void subtreeChanged(const Box&);
     49
     50private:
     51    InvalidationState& m_invalidationState;
    4652};
    4753
  • trunk/Source/WebCore/layout/invalidation/InvalidationState.cpp

    r252412 r252415  
    2525
    2626#include "config.h"
    27 #include "TableInvalidation.h"
     27#include "InvalidationState.h"
    2828
    2929#if ENABLE(LAYOUT_FORMATTING_CONTEXT)
    3030
    31 #include "Invalidation.h"
    32 #include "LayoutBox.h"
    33 #include "LayoutContext.h"
    34 #include "TableFormattingState.h"
    3531#include <wtf/IsoMallocInlines.h>
    3632
     
    3834namespace Layout {
    3935
    40 WTF_MAKE_ISO_ALLOCATED_IMPL(TableInvalidation);
     36WTF_MAKE_ISO_ALLOCATED_IMPL(InvalidationState);
    4137
    42 InvalidationResult TableInvalidation::invalidate(const Box& layoutBox, StyleDiff, LayoutContext& layoutContext, TableFormattingState&)
     38InvalidationState::InvalidationState()
    4339{
    44     layoutContext.markNeedsUpdate(layoutBox);
    45     return { nullptr };
     40}
     41
     42void InvalidationState::markNeedsUpdate(const Box& layoutBox)
     43{
     44    // We never lay out the initial containing block. It always has pre-determined geometry.
     45    ASSERT(!layoutBox.isInitialContainingBlock());
     46    // FIXME: This is just a placeholder implementation.
     47    m_formattingContextRoots.add(&layoutBox.formattingContextRoot());
    4648}
    4749
  • trunk/Source/WebCore/layout/invalidation/InvalidationState.h

    r252412 r252415  
    11/*
    2  * Copyright (C) 2018 Apple Inc. All rights reserved.
     2 * Copyright (C) 2019 Apple Inc. All rights reserved.
    33 *
    44 * Redistribution and use in source and binary forms, with or without
     
    2828#if ENABLE(LAYOUT_FORMATTING_CONTEXT)
    2929
     30#include "LayoutBox.h"
     31#include "LayoutContainer.h"
    3032#include <wtf/IsoMalloc.h>
     33#include <wtf/WeakHashSet.h>
    3134
    3235namespace WebCore {
    3336namespace Layout {
    3437
    35 class Box;
    36 class Container;
    37 class InlineFormattingState;
    38 class LayoutContext;
    39 struct InvalidationResult;
    40 enum class StyleDiff;
     38class InvalidationState {
     39    WTF_MAKE_ISO_ALLOCATED(InvalidationState);
     40public:
     41    InvalidationState();
    4142
    42 // This class implements box invalidation for inline formatting context.
    43 class InlineInvalidation {
    44     WTF_MAKE_ISO_ALLOCATED(InlineInvalidation);
    45 public:
    46     static InvalidationResult invalidate(const Box&, StyleDiff, LayoutContext&, InlineFormattingState&);
     43    void markNeedsUpdate(const Box&);
     44
     45    using FormattingContextRoots = WeakHashSet<const Container>;
     46    // FIXME: We currently do full formatting context layouts (no partial layout within a formatting context).
     47    const FormattingContextRoots& formattingContextRoots() const { return m_formattingContextRoots; }
     48
     49private:
     50    FormattingContextRoots m_formattingContextRoots;
    4751};
    4852
  • trunk/Source/WebCore/layout/layouttree/LayoutTreeBuilder.cpp

    r251638 r252415  
    3535#include "HTMLTableColElement.h"
    3636#include "InlineFormattingState.h"
     37#include "InvalidationContext.h"
     38#include "InvalidationState.h"
    3739#include "LayoutBox.h"
    3840#include "LayoutChildIterator.h"
     
    404406        auto layoutState = LayoutState { TreeBuilder::createLayoutTree(renderView) };
    405407        layoutState.setQuirksMode(renderView.document().inLimitedQuirksMode() ? LayoutState::QuirksMode::Limited : (renderView.document().inQuirksMode() ? LayoutState::QuirksMode::Yes : LayoutState::QuirksMode::No));
    406         LayoutContext(layoutState).layout();
    407         showLayoutTree(layoutState.root(), &layoutState);
     408
     409        auto& layoutRoot = layoutState.root();
     410        auto invalidationState = InvalidationState { };
     411        auto invalidationContext = InvalidationContext { invalidationState };
     412        invalidationContext.styleChanged(*layoutRoot.firstChild(), StyleDifference::Layout);
     413
     414        LayoutContext(layoutState).layout(invalidationState);
     415        showLayoutTree(layoutRoot, &layoutState);
    408416    }
    409417}
Note: See TracChangeset for help on using the changeset viewer.