Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(172)

Side by Side Diff: Source/core/layout/LayoutTableSection.h

Issue 869323003: Oilpan: move RenderObjects off heap. (Closed) Base URL: svn://svn.chromium.org/blink/trunk
Patch Set: minor fixes Created 5 years, 10 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
OLDNEW
1 /* 1 /*
2 * Copyright (C) 1997 Martin Jones (mjones@kde.org) 2 * Copyright (C) 1997 Martin Jones (mjones@kde.org)
3 * (C) 1997 Torben Weis (weis@kde.org) 3 * (C) 1997 Torben Weis (weis@kde.org)
4 * (C) 1998 Waldo Bastian (bastian@kde.org) 4 * (C) 1998 Waldo Bastian (bastian@kde.org)
5 * (C) 1999 Lars Knoll (knoll@kde.org) 5 * (C) 1999 Lars Knoll (knoll@kde.org)
6 * (C) 1999 Antti Koivisto (koivisto@kde.org) 6 * (C) 1999 Antti Koivisto (koivisto@kde.org)
7 * Copyright (C) 2003, 2004, 2005, 2006, 2009, 2013 Apple Inc. All rights reserv ed. 7 * Copyright (C) 2003, 2004, 2005, 2006, 2009, 2013 Apple Inc. All rights reserv ed.
8 * 8 *
9 * This library is free software; you can redistribute it and/or 9 * This library is free software; you can redistribute it and/or
10 * modify it under the terms of the GNU Library General Public 10 * modify it under the terms of the GNU Library General Public
(...skipping 49 matching lines...) Expand 10 before | Expand all | Expand 10 after
60 unsigned m_end; 60 unsigned m_end;
61 }; 61 };
62 62
63 class LayoutTableCell; 63 class LayoutTableCell;
64 class LayoutTableRow; 64 class LayoutTableRow;
65 65
66 class LayoutTableSection final : public RenderBox { 66 class LayoutTableSection final : public RenderBox {
67 public: 67 public:
68 LayoutTableSection(Element*); 68 LayoutTableSection(Element*);
69 virtual ~LayoutTableSection(); 69 virtual ~LayoutTableSection();
70 virtual void trace(Visitor*) override;
71 70
72 LayoutTableRow* firstRow() const; 71 LayoutTableRow* firstRow() const;
73 LayoutTableRow* lastRow() const; 72 LayoutTableRow* lastRow() const;
74 73
75 const RenderObjectChildList* children() const { return &m_children; } 74 const RenderObjectChildList* children() const { return &m_children; }
76 RenderObjectChildList* children() { return &m_children; } 75 RenderObjectChildList* children() { return &m_children; }
77 76
78 virtual void addChild(RenderObject* child, RenderObject* beforeChild = 0) ov erride; 77 virtual void addChild(RenderObject* child, RenderObject* beforeChild = 0) ov erride;
79 78
80 virtual int firstLineBoxBaseline() const override; 79 virtual int firstLineBoxBaseline() const override;
81 80
82 void addCell(LayoutTableCell*, LayoutTableRow*); 81 void addCell(LayoutTableCell*, LayoutTableRow*);
83 82
84 int calcRowLogicalHeight(); 83 int calcRowLogicalHeight();
85 void layoutRows(); 84 void layoutRows();
86 void computeOverflowFromCells(); 85 void computeOverflowFromCells();
87 86
88 LayoutTable* table() const { return toLayoutTable(parent()); } 87 LayoutTable* table() const { return toLayoutTable(parent()); }
89 88
90 typedef WillBeHeapVector<RawPtrWillBeMember<LayoutTableCell>, 2> SpanningLay outTableCells; 89 typedef Vector<LayoutTableCell*, 2> SpanningLayoutTableCells;
91 90
92 struct CellStruct { 91 struct CellStruct {
93 ALLOW_ONLY_INLINE_ALLOCATION(); 92 ALLOW_ONLY_INLINE_ALLOCATION();
haraken 2015/02/04 05:48:56 You can drop ALLOW_ONLY_INLINE_ALLOCATION().
sof 2015/02/04 08:44:31 Done, but does it add value to do so?
94 public: 93 public:
95 WillBeHeapVector<RawPtrWillBeMember<LayoutTableCell>, 1> cells; 94 Vector<LayoutTableCell*, 1> cells;
96 bool inColSpan; // true for columns after the first in a colspan 95 bool inColSpan; // true for columns after the first in a colspan
97 96
98 CellStruct() 97 CellStruct()
99 : inColSpan(false) 98 : inColSpan(false)
100 { 99 {
101 } 100 }
102 void trace(Visitor*);
103 101
104 LayoutTableCell* primaryCell() 102 LayoutTableCell* primaryCell()
105 { 103 {
106 return hasCells() ? cells[cells.size() - 1].get() : 0; 104 return hasCells() ? cells[cells.size() - 1] : 0;
107 } 105 }
108 106
109 const LayoutTableCell* primaryCell() const 107 const LayoutTableCell* primaryCell() const
110 { 108 {
111 return hasCells() ? cells[cells.size() - 1].get() : 0; 109 return hasCells() ? cells[cells.size() - 1] : 0;
112 } 110 }
113 111
114 bool hasCells() const { return cells.size() > 0; } 112 bool hasCells() const { return cells.size() > 0; }
115 }; 113 };
116 114
117 typedef WillBeHeapVector<CellStruct> Row; 115 typedef Vector<CellStruct> Row;
118 116
119 struct RowStruct { 117 struct RowStruct {
120 ALLOW_ONLY_INLINE_ALLOCATION(); 118 ALLOW_ONLY_INLINE_ALLOCATION();
haraken 2015/02/04 05:48:56 You can drop ALLOW_ONLY_INLINE_ALLOCATION().
sof 2015/02/04 08:44:31 Done.
121 public: 119 public:
122 RowStruct() 120 RowStruct()
123 : rowRenderer(nullptr) 121 : rowRenderer(nullptr)
124 , baseline() 122 , baseline()
125 { 123 {
126 } 124 }
127 void trace(Visitor*);
128 125
129 Row row; 126 Row row;
130 RawPtrWillBeMember<LayoutTableRow> rowRenderer; 127 LayoutTableRow* rowRenderer;
131 LayoutUnit baseline; 128 LayoutUnit baseline;
132 Length logicalHeight; 129 Length logicalHeight;
133 }; 130 };
134 131
135 struct SpanningRowsHeight { 132 struct SpanningRowsHeight {
136 WTF_MAKE_NONCOPYABLE(SpanningRowsHeight); 133 WTF_MAKE_NONCOPYABLE(SpanningRowsHeight);
137 134
138 public: 135 public:
139 SpanningRowsHeight() 136 SpanningRowsHeight()
140 : totalRowsHeight(0) 137 : totalRowsHeight(0)
(...skipping 84 matching lines...) Expand 10 before | Expand all | Expand 10 after
225 return createAnonymousWithParentRenderer(parent); 222 return createAnonymousWithParentRenderer(parent);
226 } 223 }
227 224
228 virtual void paint(const PaintInfo&, const LayoutPoint&) override; 225 virtual void paint(const PaintInfo&, const LayoutPoint&) override;
229 226
230 // Flip the rect so it aligns with the coordinates used by the rowPos and co lumnPos vectors. 227 // Flip the rect so it aligns with the coordinates used by the rowPos and co lumnPos vectors.
231 LayoutRect logicalRectForWritingModeAndDirection(const LayoutRect&) const; 228 LayoutRect logicalRectForWritingModeAndDirection(const LayoutRect&) const;
232 229
233 CellSpan dirtiedRows(const LayoutRect& paintInvalidationRect) const; 230 CellSpan dirtiedRows(const LayoutRect& paintInvalidationRect) const;
234 CellSpan dirtiedColumns(const LayoutRect& paintInvalidationRect) const; 231 CellSpan dirtiedColumns(const LayoutRect& paintInvalidationRect) const;
235 WillBeHeapHashSet<RawPtrWillBeMember<LayoutTableCell> >& overflowingCells() { return m_overflowingCells; } 232 HashSet<LayoutTableCell*>& overflowingCells() { return m_overflowingCells; }
236 bool hasMultipleCellLevels() { return m_hasMultipleCellLevels; } 233 bool hasMultipleCellLevels() { return m_hasMultipleCellLevels; }
237 234
238 protected: 235 protected:
239 virtual void styleDidChange(StyleDifference, const RenderStyle* oldStyle) ov erride; 236 virtual void styleDidChange(StyleDifference, const RenderStyle* oldStyle) ov erride;
240 virtual bool nodeAtPoint(const HitTestRequest&, HitTestResult&, const HitTes tLocation& locationInContainer, const LayoutPoint& accumulatedOffset, HitTestAct ion) override; 237 virtual bool nodeAtPoint(const HitTestRequest&, HitTestResult&, const HitTes tLocation& locationInContainer, const LayoutPoint& accumulatedOffset, HitTestAct ion) override;
241 238
242 private: 239 private:
243 virtual RenderObjectChildList* virtualChildren() override { return children( ); } 240 virtual RenderObjectChildList* virtualChildren() override { return children( ); }
244 virtual const RenderObjectChildList* virtualChildren() const override { retu rn children(); } 241 virtual const RenderObjectChildList* virtualChildren() const override { retu rn children(); }
245 242
(...skipping 39 matching lines...) Expand 10 before | Expand all | Expand 10 after
285 282
286 // These two functions take a rectangle as input that has been flipped by lo gicalRectForWritingModeAndDirection. 283 // These two functions take a rectangle as input that has been flipped by lo gicalRectForWritingModeAndDirection.
287 // The returned span of rows or columns is end-exclusive, and empty if start ==end. 284 // The returned span of rows or columns is end-exclusive, and empty if start ==end.
288 CellSpan spannedRows(const LayoutRect& flippedRect) const; 285 CellSpan spannedRows(const LayoutRect& flippedRect) const;
289 CellSpan spannedColumns(const LayoutRect& flippedRect) const; 286 CellSpan spannedColumns(const LayoutRect& flippedRect) const;
290 287
291 void setLogicalPositionForCell(LayoutTableCell*, unsigned effectiveColumn) c onst; 288 void setLogicalPositionForCell(LayoutTableCell*, unsigned effectiveColumn) c onst;
292 289
293 RenderObjectChildList m_children; 290 RenderObjectChildList m_children;
294 291
295 WillBeHeapVector<RowStruct> m_grid; 292 Vector<RowStruct> m_grid;
296 Vector<int> m_rowPos; 293 Vector<int> m_rowPos;
297 294
298 // the current insertion position 295 // the current insertion position
299 unsigned m_cCol; 296 unsigned m_cCol;
300 unsigned m_cRow; 297 unsigned m_cRow;
301 298
302 int m_outerBorderStart; 299 int m_outerBorderStart;
303 int m_outerBorderEnd; 300 int m_outerBorderEnd;
304 int m_outerBorderBefore; 301 int m_outerBorderBefore;
305 int m_outerBorderAfter; 302 int m_outerBorderAfter;
306 303
307 bool m_needsCellRecalc; 304 bool m_needsCellRecalc;
308 305
309 // This HashSet holds the overflowing cells for faster painting. 306 // This HashSet holds the overflowing cells for faster painting.
310 // If we have more than gMaxAllowedOverflowingCellRatio * total cells, it wi ll be empty 307 // If we have more than gMaxAllowedOverflowingCellRatio * total cells, it wi ll be empty
311 // and m_forceSlowPaintPathWithOverflowingCell will be set to save memory. 308 // and m_forceSlowPaintPathWithOverflowingCell will be set to save memory.
312 WillBeHeapHashSet<RawPtrWillBeMember<LayoutTableCell> > m_overflowingCells; 309 HashSet<LayoutTableCell*> m_overflowingCells;
313 bool m_forceSlowPaintPathWithOverflowingCell; 310 bool m_forceSlowPaintPathWithOverflowingCell;
314 311
315 bool m_hasMultipleCellLevels; 312 bool m_hasMultipleCellLevels;
316 313
317 // This map holds the collapsed border values for cells with collapsed borde rs. 314 // This map holds the collapsed border values for cells with collapsed borde rs.
318 // It is held at LayoutTableSection level to spare memory consumption by tab le cells. 315 // It is held at LayoutTableSection level to spare memory consumption by tab le cells.
319 WillBeHeapHashMap<pair<RawPtrWillBeMember<const LayoutTableCell>, int>, Coll apsedBorderValue > m_cellsCollapsedBorders; 316 HashMap<pair<const LayoutTableCell*, int>, CollapsedBorderValue> m_cellsColl apsedBorders;
320 }; 317 };
321 318
322 DEFINE_RENDER_OBJECT_TYPE_CASTS(LayoutTableSection, isTableSection()); 319 DEFINE_RENDER_OBJECT_TYPE_CASTS(LayoutTableSection, isTableSection());
323 320
324 } // namespace blink 321 } // namespace blink
325 322
326 #if ENABLE(OILPAN) 323 #if ENABLE(OILPAN)
tkent 2015/02/04 00:50:44 We can remove this block.
sof 2015/02/04 08:44:31 Thanks, removed.
327 namespace WTF { 324 namespace WTF {
328 325
329 template<> struct VectorTraits<blink::LayoutTableSection::CellStruct> : VectorTr aitsBase<blink::LayoutTableSection::CellStruct> { 326 template<> struct VectorTraits<blink::LayoutTableSection::CellStruct> : VectorTr aitsBase<blink::LayoutTableSection::CellStruct> {
330 static const bool needsDestruction = false; 327 static const bool needsDestruction = false;
331 }; 328 };
332 329
333 template<> struct VectorTraits<blink::LayoutTableSection::RowStruct> : VectorTra itsBase<blink::LayoutTableSection::RowStruct> { 330 template<> struct VectorTraits<blink::LayoutTableSection::RowStruct> : VectorTra itsBase<blink::LayoutTableSection::RowStruct> {
334 static const bool needsDestruction = false; 331 static const bool needsDestruction = false;
335 }; 332 };
336 333
337 } // namespace WTF 334 } // namespace WTF
338 #endif 335 #endif
339 336
340 #endif // LayoutTableSection_h 337 #endif // LayoutTableSection_h
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698