Chromium Code Reviews| Index: third_party/WebKit/Source/build/scripts/templates/ComputedStyleBase.h.tmpl |
| diff --git a/third_party/WebKit/Source/build/scripts/templates/ComputedStyleBase.h.tmpl b/third_party/WebKit/Source/build/scripts/templates/ComputedStyleBase.h.tmpl |
| index 2757340d87409c4ea039604422c543432e46ed6c..522994251263f05a79b19b55d2e6fbbd160c8d09 100644 |
| --- a/third_party/WebKit/Source/build/scripts/templates/ComputedStyleBase.h.tmpl |
| +++ b/third_party/WebKit/Source/build/scripts/templates/ComputedStyleBase.h.tmpl |
| @@ -1,5 +1,5 @@ |
| {% from 'macros.tmpl' import license, print_if %} |
| -{% from 'fields/field.tmpl' import encode, getter_expression, declare_storage, fieldwise_compare %} |
| +{% from 'fields/field.tmpl' import encode, getter_expression, setter_expression, declare_storage, fieldwise_compare, fieldwise_copy, fieldwise_diff %} |
| {% from 'fields/group.tmpl' import define_field_group_class %} |
| {{license()}} |
| @@ -10,6 +10,7 @@ |
| #include "core/CoreExport.h" |
| #include "core/style/DataRef.h" |
| #include "core/style/StyleDifference.h" |
| +#include "platform/wtf/SizeAssertions.h" |
| {% for path in include_paths %} |
| #include "{{path}}" |
| {% endfor %} |
| @@ -33,6 +34,16 @@ |
| namespace blink { |
| +struct SameSizeAsComputedStyleBase { |
| + {% if computed_style.subgroups is defined %} |
| + void* dataRefs[{{computed_style.subgroups|length}}]; |
| + {% endif %} |
| + {% for field in computed_style.fields|rejectattr("is_bit_field") %} |
| + {{field.type_name}} {{field.name}}; |
| + {% endfor %} |
| + unsigned m_bit_fields[{{computed_style.num_32_bit_words_for_bit_fields}}]; |
| +}; |
| + |
| // The generated portion of ComputedStyle. For more info, see the header comment |
| // in ComputedStyle.h. |
| class CORE_EXPORT ComputedStyleBase { |
| @@ -81,19 +92,53 @@ class CORE_EXPORT ComputedStyleBase { |
| kAtShadowBoundary, |
| kNotAtShadowBoundary, |
| }; |
| - void InheritFrom(const ComputedStyleBase& inheritParent, |
| - IsAtShadowBoundary isAtShadowBoundary = kNotAtShadowBoundary); |
| - void CopyNonInheritedFromCached(const ComputedStyleBase& other); |
| - bool DiffNeedsFullLayoutAndPaintInvalidation( |
| - const ComputedStyleBase& other) const; |
| - bool ScrollAnchorDisablingPropertyChanged(const ComputedStyleBase& other, |
| - const StyleDifference&) const; |
| + void InheritFrom(const ComputedStyleBase& other, |
| + IsAtShadowBoundary isAtShadowBoundary) { |
| + {{fieldwise_copy(computed_style, computed_style.all_fields |
| + |selectattr("is_property") |
| + |selectattr("is_inherited") |
| + |list |
| + )|indent(2)}} |
|
shend
2017/05/12 01:13:27
indent(4)
nainar
2017/05/12 03:23:47
Done
|
| + } |
| + |
| + void CopyNonInheritedFromCached( |
| + const ComputedStyleBase& other) { |
| + {{fieldwise_copy(computed_style, computed_style.all_fields |
| + |rejectattr("has_custom_compare_and_copy") |
| + |rejectattr("is_inherited") |
| + |list |
| + )|indent(2)}} |
|
shend
2017/05/12 01:13:27
indent(4)
nainar
2017/05/12 03:23:47
Done.
|
| + } |
| // Copies the values of any independent inherited properties from the parent |
| // style that are marked as inherited by this style. |
| void PropagateIndependentInheritedProperties( |
| - const ComputedStyleBase& parentStyle); |
| + const ComputedStyleBase& parentStyle) { |
| + {% for field in computed_style.all_fields if field.is_property and field.is_independent %} |
| + if ({{field.is_inherited_method_name}}()) |
| + {{setter_expression(field)}} = parentStyle.{{getter_expression(field)}}; |
| + {% endfor %} |
| + } |
| + |
| + bool ScrollAnchorDisablingPropertyChanged( |
| + const ComputedStyleBase& other, |
| + const StyleDifference& diff) const { |
| + {{fieldwise_diff(computed_style, computed_style.all_fields |
| + |selectattr("property_name", "in", ["margin-top", "margin-left", "margin-right", "margin-bottom", "left", "right", "top", "bottom", "padding-top", "padding-left", "padding-right", "padding-bottom"]) |
| + |list |
| + )|indent(2)}} |
|
shend
2017/05/12 01:13:27
indent(4)
nainar
2017/05/12 03:23:47
Done.
|
| + return false; |
| + } |
| + |
| + bool DiffNeedsFullLayoutAndPaintInvalidation( |
| + const ComputedStyleBase& other) const { |
| + {{fieldwise_diff(computed_style, computed_style.all_fields |
| + |selectattr("property_name", "in", ["padding-top", "padding-left", "padding-right", "padding-bottom"]) |
| + |list |
| + )|indent(2)}} |
|
shend
2017/05/12 01:13:27
indent(4)
nainar
2017/05/12 03:23:47
Done.
|
| + return false; |
| + } |
| // Fields. |
| // TODO(sashab): Remove initialFoo() static methods and update callers to |
| @@ -150,6 +195,11 @@ class CORE_EXPORT ComputedStyleBase { |
| {% endfor %} |
| }; |
| +// If this fails, the packing algorithm in make_computed_style_base.py has |
| +// failed to produce the optimal packed size. To fix, update the algorithm to |
| +// ensure that the buckets are placed so that each takes up at most 1 word. |
| +ASSERT_SIZE(ComputedStyleBase, SameSizeAsComputedStyleBase); |
| + |
| } // namespace blink |
| #endif // ComputedStyleBase_h |