Changeset 251851 in webkit


Ignore:
Timestamp:
Oct 31, 2019 9:01:25 AM (4 years ago)
Author:
Alan Bujtas
Message:

[LFC][IFC] Line::Run should not hold a reference to InlineItem
https://bugs.webkit.org/show_bug.cgi?id=203660
<rdar://problem/56770286>

Reviewed by Antti Koivisto.

When Line::Runs are merged ([content][ ] -> [content ]) they end up with multiple InlineItems. Let's cache some values from
the InlineItems instead.

  • layout/inlineformatting/InlineLine.cpp:

(WebCore::Layout::Line::Run::Run):
(WebCore::Layout::Line::close):

  • layout/inlineformatting/InlineLine.h:

(WebCore::Layout::Line::Run::layoutBox const):
(WebCore::Layout::Line::Run::isText const):
(WebCore::Layout::Line::Run::isBox const):
(WebCore::Layout::Line::Run::isForcedLineBreak const):
(WebCore::Layout::Line::Run::isContainerStart const):
(WebCore::Layout::Line::Run::isContainerEnd const):
(WebCore::Layout::Line::Run::isCollapsible const):
(WebCore::Layout::Line::Run::isWhitespace const):
(WebCore::Layout::Line::Run::expand):

Location:
trunk/Source/WebCore
Files:
3 edited

Legend:

Unmodified
Added
Removed
  • trunk/Source/WebCore/ChangeLog

    r251850 r251851  
     12019-10-31  Zalan Bujtas  <zalan@apple.com>
     2
     3        [LFC][IFC] Line::Run should not hold a reference to InlineItem
     4        https://bugs.webkit.org/show_bug.cgi?id=203660
     5        <rdar://problem/56770286>
     6
     7        Reviewed by Antti Koivisto.
     8
     9        When Line::Runs are merged ([content][   ] -> [content ]) they end up with multiple InlineItems. Let's cache some values from
     10        the InlineItems instead.
     11
     12        * layout/inlineformatting/InlineLine.cpp:
     13        (WebCore::Layout::Line::Run::Run):
     14        (WebCore::Layout::Line::close):
     15        * layout/inlineformatting/InlineLine.h:
     16        (WebCore::Layout::Line::Run::layoutBox const):
     17        (WebCore::Layout::Line::Run::isText const):
     18        (WebCore::Layout::Line::Run::isBox const):
     19        (WebCore::Layout::Line::Run::isForcedLineBreak const):
     20        (WebCore::Layout::Line::Run::isContainerStart const):
     21        (WebCore::Layout::Line::Run::isContainerEnd const):
     22        (WebCore::Layout::Line::Run::isCollapsible const):
     23        (WebCore::Layout::Line::Run::isWhitespace const):
     24        (WebCore::Layout::Line::Run::expand):
     25
    1262019-10-31  Wenson Hsieh  <wenson_hsieh@apple.com>
    227
  • trunk/Source/WebCore/layout/inlineformatting/InlineLine.cpp

    r251848 r251851  
    3939
    4040Line::Run::Run(const InlineItem& inlineItem, const Display::Run& displayRun)
    41     : m_inlineItem(inlineItem)
     41    : m_layoutBox(inlineItem.layoutBox())
    4242    , m_displayRun(displayRun)
     43    , m_type(inlineItem.type())
     44    , m_isWhitespace(is<InlineTextItem>(inlineItem) && downcast<InlineTextItem>(inlineItem).isWhitespace())
     45    , m_isCollapsible(is<InlineTextItem>(inlineItem) && downcast<InlineTextItem>(inlineItem).isCollapsible())
    4346{
    4447}
  • trunk/Source/WebCore/layout/inlineformatting/InlineLine.h

    r251848 r251851  
    7171
    7272        const Display::Run& displayRun() const { return m_displayRun; }
    73         const Box& layoutBox() const { return m_inlineItem.layoutBox(); }
     73        const Box& layoutBox() const { return m_layoutBox; }
    7474
    7575        const Display::Rect& logicalRect() const { return m_displayRun.logicalRect(); }
     
    7777        bool isCollapsed() const { return m_isCollapsed; }
    7878
    79         bool isText() const { return m_inlineItem.isText() && !isForcedLineBreak(); }
    80         bool isBox() const { return m_inlineItem.isBox(); }
    81         bool isForcedLineBreak() const { return m_inlineItem.isForcedLineBreak(); }
    82         bool isContainerStart() const { return m_inlineItem.isContainerStart(); }
    83         bool isContainerEnd() const { return m_inlineItem.isContainerEnd(); }
     79        bool isText() const { return m_type == InlineItem::Type::Text; }
     80        bool isBox() const { return m_type == InlineItem::Type::Box; }
     81        bool isForcedLineBreak() const { return m_type == InlineItem::Type::ForcedLineBreak; }
     82        bool isContainerStart() const { return m_type == InlineItem::Type::ContainerStart; }
     83        bool isContainerEnd() const { return m_type == InlineItem::Type::ContainerEnd; }
    8484
    8585    private:
     
    9494        void setCollapsesToZeroAdvanceWidth();
    9595
    96         bool isCollapsible() const { return m_inlineItem.isText() && downcast<InlineTextItem>(m_inlineItem).isCollapsible(); }
     96        bool isCollapsible() const { return m_isCollapsible; }
    9797        bool hasTrailingCollapsedContent() const { return m_hasTrailingCollapsedContent; }
    98         bool isWhitespace() const;
     98        bool isWhitespace() const { return m_isWhitespace; }
    9999
    100         const InlineItem& m_inlineItem;
     100        const Box& m_layoutBox;
    101101        Display::Run m_displayRun;
     102        const InlineItem::Type m_type;
     103        bool m_isWhitespace { false };
     104        bool m_isCollapsible { false };
    102105        bool m_isCollapsed { false };
    103106        bool m_collapsedToZeroAdvanceWidth { false };
     
    158161    ASSERT(other.isText());
    159162    ASSERT(!isCollapsedToZeroAdvanceWidth());
    160     ASSERT(!m_hasTrailingCollapsedContent);
     163    ASSERT(!hasTrailingCollapsedContent());
    161164
    162165    auto& otherDisplayRun = other.displayRun();
     
    164167    m_displayRun.textContext()->expand(*otherDisplayRun.textContext());
    165168    m_hasTrailingCollapsedContent = other.isCollapsed();
    166 }
    167 
    168 inline bool Line::Run::isWhitespace() const
    169 {
    170     return isText() && downcast<InlineTextItem>(m_inlineItem).isWhitespace();
     169    m_isWhitespace &= other.isWhitespace();
     170    m_isCollapsible = false;
    171171}
    172172
Note: See TracChangeset for help on using the changeset viewer.