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

Unified Diff: third_party/WebKit/Source/build/scripts/make_computed_style_base.py

Issue 2697953004: Add support for generating external types in ComputedStyleBase. (Closed)
Patch Set: Rebase Created 3 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 side-by-side diff with in-line comments
Download patch
« no previous file with comments | « no previous file | third_party/WebKit/Source/build/scripts/templates/ComputedStyleBase.cpp.tmpl » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: third_party/WebKit/Source/build/scripts/make_computed_style_base.py
diff --git a/third_party/WebKit/Source/build/scripts/make_computed_style_base.py b/third_party/WebKit/Source/build/scripts/make_computed_style_base.py
index f9011169215a146ce4ea09ee5908ec8183d57339..339da70244abcf9d13a084bcd8a8d58f62c668b5 100755
--- a/third_party/WebKit/Source/build/scripts/make_computed_style_base.py
+++ b/third_party/WebKit/Source/build/scripts/make_computed_style_base.py
@@ -62,6 +62,11 @@ class Field(object):
])
def __init__(self, field_role, **kwargs):
+ # TODO(shend): get rid of this kwargs thing by creating separate classes
+ # for each field template and taking in normal arguments, then remove the
+ # line below
+ # pylint: disable=no-member
meade_UTC10 2017/02/17 06:56:05 Is this a new lint that got enabled? o.O
shend 2017/02/19 23:10:17 Urgh, the comment doesn't explain anything, I upda
+
# Values common to all fields
# Set attributes from the keyword arguments
for attrib in Field.REQUIRED_ATTRIBUTES:
@@ -84,6 +89,9 @@ class Field(object):
# Inherited flag-only fields
pass
+ # Only pack the field if the field size is not None
meade_UTC10 2017/02/17 06:56:05 nit: Does this mean when the field is used as inpu
shend 2017/02/19 23:10:17 Yeah "packed" is ambiguous. I changed it to 'is_bi
+ self.is_packed = self.size is not None
+
assert len(kwargs) == 0, 'Unexpected arguments provided to Field: ' + str(kwargs)
@@ -131,9 +139,8 @@ def _create_property_field(property_):
# From the Blink style guide: Other data members should be prefixed by "m_". [names-data-members]
field_name = 'm_' + property_name_lower
- bits_needed = math.log(len(property_['keywords']), 2) # TODO: implement for non-enums
- # Separate the type path from the type name, if specified.
+ # Override the type_name if field_type_path is specified
if property_['field_type_path']:
type_name = property_['field_type_path'].split('/')[-1]
else:
@@ -146,10 +153,15 @@ def _create_property_field(property_):
if type_name == property_name:
getter_method_name = 'get' + property_name
- assert property_['initial_keyword'] is not None, \
- ('MakeComputedStyleBase requires an initial keyword for keyword fields, none specified '
- 'for property ' + property_['name'])
- default_value = type_name + '::k' + camel_case(property_['initial_keyword'])
+ if property_['field_template'] == 'keyword':
+ assert property_['default_value'] is not None, \
+ ('MakeComputedStyleBase requires an initial keyword for keyword fields, none specified '
+ 'for property ' + property_['name'])
+ bits_needed = int(math.ceil(math.log(len(property_['keywords']), 2)))
+ default_value = type_name + '::k' + camel_case(property_['default_value'])
+ else:
+ bits_needed = None
+ default_value = property_['default_value']
return Field(
'property',
@@ -159,7 +171,7 @@ def _create_property_field(property_):
independent=property_['independent'],
type_name=type_name,
field_template=property_['field_template'],
- size=int(math.ceil(bits_needed)),
+ size=bits_needed,
default_value=default_value,
getter_method_name=getter_method_name,
setter_method_name='set' + property_name,
@@ -286,12 +298,16 @@ class ComputedStyleBaseWriter(make_style_builder.StyleBuilderWriter):
# Create all the fields
all_fields = _create_fields(self._properties.values())
- # Group fields into buckets
- field_buckets = _pack_fields(all_fields)
+ # Separate the normal data members from the bit fields
+ packed_fields = [field for field in all_fields if field.is_packed]
+ unpacked_fields = [field for field in all_fields if not field.is_packed]
+
+ # Pack fields into buckets
+ field_buckets = _pack_fields(packed_fields)
# The expected size of ComputedStyleBase is equivalent to as many words
# as the total number of buckets.
- self._expected_total_field_bytes = len(field_buckets)
+ self._expected_bitfield_bytes = len(field_buckets)
# The most optimal size of ComputedStyleBase is the total sum of all the
# field sizes, rounded up to the nearest word. If this produces the
@@ -303,14 +319,16 @@ class ComputedStyleBaseWriter(make_style_builder.StyleBuilderWriter):
# We should be able to bring extra_padding_bytes back to 0 from time to
# time.
extra_padding_bytes = 0
- optimal_total_field_bytes = int(math.ceil(sum(f.size for f in all_fields) / 32.0))
- real_total_field_bytes = optimal_total_field_bytes + extra_padding_bytes
- assert self._expected_total_field_bytes == real_total_field_bytes, \
+ optimal_bitfield_bytes = int(math.ceil(sum(f.size for f in packed_fields) / 32.0))
+ real_bitfield_bytes = optimal_bitfield_bytes + extra_padding_bytes
+ assert self._expected_bitfield_bytes == real_bitfield_bytes, \
('The field packing algorithm produced %s bytes, optimal is %s bytes' %
- (self._expected_total_field_bytes, real_total_field_bytes))
+ (self._expected_bitfield_bytes, real_bitfield_bytes))
+
+ # Unpacked fields go first, then the packed fields.
+ self._fields = list(unpacked_fields)
# Order the fields so fields in each bucket are adjacent.
- self._fields = []
for bucket in field_buckets:
for field in bucket:
self._fields.append(field)
@@ -323,7 +341,6 @@ class ComputedStyleBaseWriter(make_style_builder.StyleBuilderWriter):
'enums': self._generated_enums,
'include_paths': _get_include_paths(self._properties.values()),
'fields': self._fields,
- 'expected_total_field_bytes': self._expected_total_field_bytes,
}
@template_expander.use_jinja('ComputedStyleBase.cpp.tmpl')
@@ -332,7 +349,7 @@ class ComputedStyleBaseWriter(make_style_builder.StyleBuilderWriter):
'properties': self._properties,
'enums': self._generated_enums,
'fields': self._fields,
- 'expected_total_field_bytes': self._expected_total_field_bytes,
+ 'expected_bitfield_bytes': self._expected_bitfield_bytes,
}
@template_expander.use_jinja('ComputedStyleBaseConstants.h.tmpl')
@@ -341,7 +358,6 @@ class ComputedStyleBaseWriter(make_style_builder.StyleBuilderWriter):
'properties': self._properties,
'enums': self._generated_enums,
'fields': self._fields,
- 'expected_total_field_bytes': self._expected_total_field_bytes,
}
if __name__ == '__main__':
« no previous file with comments | « no previous file | third_party/WebKit/Source/build/scripts/templates/ComputedStyleBase.cpp.tmpl » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698