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

Side by Side Diff: third_party/WebKit/Source/core/layout/LayoutTable.cpp

Issue 2846563002: Optimize collapsed border calculation (step 1) (Closed)
Patch Set: - Created 3 years, 7 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
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, 2007, 2008, 2009, 2010, 2013 Apple Inc. 7 * Copyright (C) 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2013 Apple Inc.
8 * All rights reserved. 8 * All rights reserved.
9 * Copyright (C) 2006 Alexey Proskuryakov (ap@nypop.com) 9 * Copyright (C) 2006 Alexey Proskuryakov (ap@nypop.com)
10 * 10 *
(...skipping 39 matching lines...) Expand 10 before | Expand all | Expand 10 after
50 namespace blink { 50 namespace blink {
51 51
52 using namespace HTMLNames; 52 using namespace HTMLNames;
53 53
54 LayoutTable::LayoutTable(Element* element) 54 LayoutTable::LayoutTable(Element* element)
55 : LayoutBlock(element), 55 : LayoutBlock(element),
56 head_(nullptr), 56 head_(nullptr),
57 foot_(nullptr), 57 foot_(nullptr),
58 first_body_(nullptr), 58 first_body_(nullptr),
59 collapsed_borders_valid_(false), 59 collapsed_borders_valid_(false),
60 needs_invalidate_collapsed_borders_for_all_cells_(false),
60 has_col_elements_(false), 61 has_col_elements_(false),
61 needs_section_recalc_(false), 62 needs_section_recalc_(false),
62 column_logical_width_changed_(false), 63 column_logical_width_changed_(false),
63 column_layout_objects_valid_(false), 64 column_layout_objects_valid_(false),
64 no_cell_colspan_at_least_(0), 65 no_cell_colspan_at_least_(0),
65 h_spacing_(0), 66 h_spacing_(0),
66 v_spacing_(0), 67 v_spacing_(0),
67 border_start_(0), 68 border_start_(0),
68 border_end_(0) { 69 border_end_(0) {
69 DCHECK(!ChildrenInline()); 70 DCHECK(!ChildrenInline());
(...skipping 700 matching lines...) Expand 10 before | Expand all | Expand 10 after
770 // to update the value as its used by flexbox layout. crbug.com/367324 771 // to update the value as its used by flexbox layout. crbug.com/367324
771 SetIntrinsicContentLogicalHeight(ContentLogicalHeight()); 772 SetIntrinsicContentLogicalHeight(ContentLogicalHeight());
772 773
773 column_logical_width_changed_ = false; 774 column_logical_width_changed_ = false;
774 ClearNeedsLayout(); 775 ClearNeedsLayout();
775 } 776 }
776 777
777 void LayoutTable::InvalidateCollapsedBorders() { 778 void LayoutTable::InvalidateCollapsedBorders() {
778 collapsed_borders_.clear(); 779 collapsed_borders_.clear();
779 collapsed_borders_valid_ = false; 780 collapsed_borders_valid_ = false;
781 needs_invalidate_collapsed_borders_for_all_cells_ = true;
780 SetMayNeedPaintInvalidation(); 782 SetMayNeedPaintInvalidation();
781 } 783 }
782 784
785 void LayoutTable::InvalidateCollapsedBordersForAllCellsIfNeeded() {
786 DCHECK(CollapseBorders());
787
788 if (!needs_invalidate_collapsed_borders_for_all_cells_)
789 return;
790 needs_invalidate_collapsed_borders_for_all_cells_ = false;
791
792 for (LayoutObject* section = FirstChild(); section;
793 section = section->NextSibling()) {
794 if (!section->IsTableSection())
795 continue;
796 for (LayoutTableRow* row = ToLayoutTableSection(section)->FirstRow(); row;
797 row = row->NextRow()) {
798 for (LayoutTableCell* cell = row->FirstCell(); cell;
799 cell = cell->NextCell()) {
800 DCHECK_EQ(cell->Table(), this);
801 cell->InvalidateCollapsedBorderValues();
802 }
803 }
804 }
805 }
806
783 // Collect all the unique border values that we want to paint in a sorted list. 807 // Collect all the unique border values that we want to paint in a sorted list.
784 // During the collection, each cell saves its recalculated borders into the 808 // During the collection, each cell saves its recalculated borders into the
785 // cache of its containing section, and invalidates itself if any border 809 // cache of its containing section, and invalidates itself if any border
786 // changes. This method doesn't affect layout. 810 // changes. This method doesn't affect layout.
787 void LayoutTable::RecalcCollapsedBordersIfNeeded() { 811 void LayoutTable::RecalcCollapsedBordersIfNeeded() {
788 if (collapsed_borders_valid_ || !CollapseBorders()) 812 if (collapsed_borders_valid_ || !CollapseBorders())
789 return; 813 return;
790 collapsed_borders_valid_ = true; 814 collapsed_borders_valid_ = true;
791 collapsed_borders_.clear(); 815 collapsed_borders_.clear();
792 for (LayoutObject* section = FirstChild(); section; 816 for (LayoutObject* section = FirstChild(); section;
(...skipping 942 matching lines...) Expand 10 before | Expand all | Expand 10 after
1735 } 1759 }
1736 1760
1737 LayoutUnit LayoutTable::PaddingRight() const { 1761 LayoutUnit LayoutTable::PaddingRight() const {
1738 if (CollapseBorders()) 1762 if (CollapseBorders())
1739 return LayoutUnit(); 1763 return LayoutUnit();
1740 1764
1741 return LayoutBlock::PaddingRight(); 1765 return LayoutBlock::PaddingRight();
1742 } 1766 }
1743 1767
1744 } // namespace blink 1768 } // namespace blink
OLDNEW
« no previous file with comments | « third_party/WebKit/Source/core/layout/LayoutTable.h ('k') | third_party/WebKit/Source/core/layout/LayoutTableCell.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698