Changeset 251851 in webkit
- Timestamp:
- Oct 31, 2019 9:01:25 AM (4 years ago)
- Location:
- trunk/Source/WebCore
- Files:
-
- 3 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/Source/WebCore/ChangeLog
r251850 r251851 1 2019-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 1 26 2019-10-31 Wenson Hsieh <wenson_hsieh@apple.com> 2 27 -
trunk/Source/WebCore/layout/inlineformatting/InlineLine.cpp
r251848 r251851 39 39 40 40 Line::Run::Run(const InlineItem& inlineItem, const Display::Run& displayRun) 41 : m_ inlineItem(inlineItem)41 : m_layoutBox(inlineItem.layoutBox()) 42 42 , 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()) 43 46 { 44 47 } -
trunk/Source/WebCore/layout/inlineformatting/InlineLine.h
r251848 r251851 71 71 72 72 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; } 74 74 75 75 const Display::Rect& logicalRect() const { return m_displayRun.logicalRect(); } … … 77 77 bool isCollapsed() const { return m_isCollapsed; } 78 78 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; } 84 84 85 85 private: … … 94 94 void setCollapsesToZeroAdvanceWidth(); 95 95 96 bool isCollapsible() const { return m_i nlineItem.isText() && downcast<InlineTextItem>(m_inlineItem).isCollapsible(); }96 bool isCollapsible() const { return m_isCollapsible; } 97 97 bool hasTrailingCollapsedContent() const { return m_hasTrailingCollapsedContent; } 98 bool isWhitespace() const ;98 bool isWhitespace() const { return m_isWhitespace; } 99 99 100 const InlineItem& m_inlineItem;100 const Box& m_layoutBox; 101 101 Display::Run m_displayRun; 102 const InlineItem::Type m_type; 103 bool m_isWhitespace { false }; 104 bool m_isCollapsible { false }; 102 105 bool m_isCollapsed { false }; 103 106 bool m_collapsedToZeroAdvanceWidth { false }; … … 158 161 ASSERT(other.isText()); 159 162 ASSERT(!isCollapsedToZeroAdvanceWidth()); 160 ASSERT(! m_hasTrailingCollapsedContent);163 ASSERT(!hasTrailingCollapsedContent()); 161 164 162 165 auto& otherDisplayRun = other.displayRun(); … … 164 167 m_displayRun.textContext()->expand(*otherDisplayRun.textContext()); 165 168 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; 171 171 } 172 172
Note: See TracChangeset
for help on using the changeset viewer.