Index: third_party/WebKit/Source/core/style/GridTrackSize.h |
diff --git a/third_party/WebKit/Source/core/style/GridTrackSize.h b/third_party/WebKit/Source/core/style/GridTrackSize.h |
index 5005aed0e7a8d64b1898cb762a054263930537af..6c8589267b5f2196bb2e36a7e3b779ecc5cfa8ef 100644 |
--- a/third_party/WebKit/Source/core/style/GridTrackSize.h |
+++ b/third_party/WebKit/Source/core/style/GridTrackSize.h |
@@ -44,19 +44,26 @@ enum GridTrackSizeType { |
// This class represents a <track-size> from the spec. Althought there are 3 different types of |
// <track-size> there is always an equivalent minmax() representation that could represent any of |
-// them. The only special case is fit-content(argument) which is similar to minmax(auto, max-content) |
-// except that the track size is clamped at argument if it is greater than the auto minimum. At the |
-// GridTrackSize level we don't need to worry about clamping so we treat that case exactly as |
-// minmax(auto, max-content) althought we store the argument for later use in m_maxTrackBreadth. |
+// them. The only special case is fit-content(argument) which is similar to minmax(auto, |
+// max-content) except that the track size is clamped at argument if it is greater than the auto |
+// minimum. At the GridTrackSize level we don't need to worry about clamping so we treat that case |
+// exactly as auto. |
+// |
+// We're using a separate attribute to store fit-content argument even though we could directly use |
+// m_maxTrackBreadth. The reason why we don't do it is because the maxTrackBreadh() call is a hot |
+// spot, so adding a conditional statement there (to distinguish between fit-content and any other |
+// case) was causing a severe performance drop. |
class GridTrackSize { |
DISALLOW_NEW_EXCEPT_PLACEMENT_NEW(); |
public: |
GridTrackSize(const GridLength& length, GridTrackSizeType trackSizeType = LengthTrackSizing) |
: m_type(trackSizeType) |
, m_minTrackBreadth(trackSizeType == FitContentTrackSizing ? Length(Auto) : length) |
- , m_maxTrackBreadth(length) |
+ , m_maxTrackBreadth(trackSizeType == FitContentTrackSizing ? Length(Auto) : length) |
+ , m_fitContentTrackBreadth(trackSizeType == FitContentTrackSizing ? length : GridLength(Length(Fixed))) |
{ |
DCHECK(trackSizeType == LengthTrackSizing || trackSizeType == FitContentTrackSizing); |
+ DCHECK(trackSizeType != FitContentTrackSizing || length.isLength()); |
cacheMinMaxTrackBreadthTypes(); |
} |
@@ -64,19 +71,19 @@ public: |
: m_type(MinMaxTrackSizing) |
, m_minTrackBreadth(minTrackBreadth) |
, m_maxTrackBreadth(maxTrackBreadth) |
+ , m_fitContentTrackBreadth(GridLength(Length(Fixed))) |
{ |
cacheMinMaxTrackBreadthTypes(); |
} |
- GridLength length() const |
+ const GridLength& fitContentTrackBreadth() const |
{ |
- DCHECK(m_type == LengthTrackSizing || m_type == FitContentTrackSizing); |
- DCHECK(m_minTrackBreadth == m_maxTrackBreadth || m_type == FitContentTrackSizing); |
- return m_maxTrackBreadth; |
+ DCHECK(m_type == FitContentTrackSizing); |
+ return m_fitContentTrackBreadth; |
} |
- GridLength minTrackBreadth() const { return m_minTrackBreadth; } |
- GridLength maxTrackBreadth() const { return isFitContent() ? GridLength(Length(MaxContent)) : m_maxTrackBreadth; } |
+ const GridLength& minTrackBreadth() const { return m_minTrackBreadth; } |
+ const GridLength& maxTrackBreadth() const { return m_maxTrackBreadth; } |
GridTrackSizeType type() const { return m_type; } |
@@ -115,12 +122,14 @@ private: |
GridTrackSizeType m_type; |
GridLength m_minTrackBreadth; |
GridLength m_maxTrackBreadth; |
- bool m_minTrackBreadthIsAuto; |
- bool m_minTrackBreadthIsMaxContent; |
- bool m_minTrackBreadthIsMinContent; |
- bool m_maxTrackBreadthIsAuto; |
- bool m_maxTrackBreadthIsMaxContent; |
- bool m_maxTrackBreadthIsMinContent; |
+ GridLength m_fitContentTrackBreadth; |
+ |
+ bool m_minTrackBreadthIsAuto : 1; |
+ bool m_maxTrackBreadthIsAuto : 1; |
+ bool m_minTrackBreadthIsMaxContent : 1; |
+ bool m_minTrackBreadthIsMinContent : 1; |
+ bool m_maxTrackBreadthIsMaxContent : 1; |
+ bool m_maxTrackBreadthIsMinContent : 1; |
}; |
} // namespace blink |