Branch: refs/heads/main
Home: https://github.com/WebKit/WebKit
Commit: 33c8b3c4ff3918d16adda3d5800f2c926152bc9b
https://github.com/WebKit/WebKit/commit/33c8b3c4ff3918d16adda3d5800f2c926152bc9b
Author: Alan Baradlay <[email protected]>
Date: 2024-03-11 (Mon, 11 Mar 2024)
Changed paths:
M Source/WebCore/Sources.txt
M Source/WebCore/WebCore.xcodeproj/project.pbxproj
M Source/WebCore/layout/LayoutState.cpp
M Source/WebCore/layout/LayoutState.h
M
Source/WebCore/layout/formattingContexts/inline/InlineFormattingContext.cpp
M Source/WebCore/layout/formattingContexts/inline/InlineItemsBuilder.cpp
M Source/WebCore/layout/formattingContexts/inline/InlineItemsBuilder.h
A
Source/WebCore/layout/formattingContexts/inline/text/TextBreakingPositionCache.cpp
A
Source/WebCore/layout/formattingContexts/inline/text/TextBreakingPositionCache.h
A
Source/WebCore/layout/formattingContexts/inline/text/TextBreakingPositionContext.h
M Source/WebCore/layout/integration/inline/LayoutIntegrationLineLayout.cpp
M Source/WebCore/page/MemoryRelease.cpp
Log Message:
-----------
[IFC] Let's try to reuse previously computed breaking positions in text
content
https://bugs.webkit.org/show_bug.cgi?id=270492
Reviewed by Antti Koivisto.
This patch adds support for a compact, breaking position cache across content
mutation.
1. Cache gets populated when the content goes away
2. Cache content stays around across document loads (within the same security
origin)
3. Cache gets utilized when an already "seen" content re-appears on the page.
Many high ranking pages have dynamic behavior where content gets removed (from
DOM)
and reinserted right away in the very same form during initial page load.
* Source/WebCore/Sources.txt:
* Source/WebCore/WebCore.xcodeproj/project.pbxproj:
* Source/WebCore/layout/LayoutState.cpp:
(WebCore::Layout::LayoutState::LayoutState):
* Source/WebCore/layout/LayoutState.h:
(WebCore::Layout::LayoutState::securityOrigin const):
* Source/WebCore/layout/formattingContexts/inline/InlineFormattingContext.cpp:
(WebCore::Layout::InlineFormattingContext::layoutFloatContentOnly):
(WebCore::Layout::InlineFormattingContext::rebuildInlineItemListIfNeeded):
* Source/WebCore/layout/formattingContexts/inline/InlineItemsBuilder.cpp:
(WebCore::Layout::InlineItemsBuilder::InlineItemsBuilder):
(WebCore::Layout::InlineItemsBuilder::handleTextContentFromBreakingPositionsCache):
(WebCore::Layout::InlineItemsBuilder::handleTextContent):
(WebCore::Layout::InlineItemsBuilder::populateBreakingPositionCache):
* Source/WebCore/layout/formattingContexts/inline/InlineItemsBuilder.h:
*
Source/WebCore/layout/formattingContexts/inline/text/TextBreakingPositionCache.cpp:
Added.
(WebCore::Layout::TextBreakingPositionCache::singleton):
(WebCore::Layout::TextBreakingPositionCache::TextBreakingPositionCache):
(WebCore::Layout::TextBreakingPositionCache::evict):
(WebCore::Layout::TextBreakingPositionCache::set):
(WebCore::Layout::TextBreakingPositionCache::get const):
(WebCore::Layout::TextBreakingPositionCache::clear):
(WebCore::Layout::TextBreakingPositionContext::TextBreakingPositionContext):
(WebCore::Layout::add):
*
Source/WebCore/layout/formattingContexts/inline/text/TextBreakingPositionCache.h:
Added.
(WebCore::Layout::TextBreakingPositionContextHash::hash):
(WebCore::Layout::TextBreakingPositionContextHash::equal):
(WTF::HashTraits<WebCore::Layout::TextBreakingPositionContext>::constructDeletedValue):
(WTF::HashTraits<WebCore::Layout::TextBreakingPositionContext>::isDeletedValue):
(WTF::HashTraits<WebCore::Layout::TextBreakingPositionContext>::emptyValue):
* Source/WebCore/layout/integration/inline/LayoutIntegrationLineLayout.cpp:
(WebCore::LayoutIntegration::LineLayout::~LineLayout):
In cases when content is mutated in a way that it is eligible for partial
layout but then mutated again in a not-yet-supported way, we can't populate the
cache anymore as the inline item list may not match with the "associated"
InlineTextBox content anymore.
(WebCore::LayoutIntegration::LineLayout::releaseCaches):
* Source/WebCore/layout/integration/inline/LayoutIntegrationLineLayout.h:
Canonical link: https://commits.webkit.org/275949@main
To unsubscribe from these emails, change your notification settings at
https://github.com/WebKit/WebKit/settings/notifications
_______________________________________________
webkit-changes mailing list
[email protected]
https://lists.webkit.org/mailman/listinfo/webkit-changes