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

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

Issue 2879563002: Refactor code generation to allow us to diff generic expressions and not just fields (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 side-by-side diff with in-line comments
Download patch
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 a181350f4317cdd9e5071746d0333e3497525437..dadeebba4d0cafe19eabe55fde0b7bf9805a671f 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
@@ -51,7 +51,6 @@ def _num_32_bit_words_for_bit_fields(bit_fields):
cur_bucket += field.size
return num_buckets + (cur_bucket > 0)
-
nainar 2017/05/11 04:04:08 oops. Added this in.
nainar 2017/05/11 06:00:08 Removed.
class Group(object):
"""Represents a group of fields stored together in a class.
@@ -74,6 +73,19 @@ class Group(object):
self.all_fields = _flatten_list(subgroup.all_fields for subgroup in subgroups) + fields
+class DiffGroup(object):
+ """Represents a group of expressions and subgroups that need to be diffed
+ for a function in ComputedStyle.
+
+ Attributes:
+ subgroups: List of DiffGroup instances that are stored as subgroups under this group.
+ expressions: List of functions that are on this group that need to be diffed.
shend 2017/05/11 05:00:59 "List of expressions"
nainar 2017/05/11 06:00:08 Done.
+ """
+ def __init__(self, group_name, subgroups, expressions):
+ self.group_name = group_name
+ self.subgroups = subgroups
+ self.expressions = expressions
+
class Field(object):
"""
The generated ComputedStyle object is made up of a series of Fields.
@@ -163,11 +175,49 @@ def _group_fields(fields):
for field in fields:
groups[field.group_name].append(field)
- no_group = groups.pop(None)
+ no_group = {}
+ if groups.get(None):
+ no_group = groups.pop(None)
subgroups = [Group(group_name, [], _reorder_fields(fields)) for group_name, fields in groups.items()]
return Group('', subgroups=subgroups, fields=_reorder_fields(no_group))
+def _create_field(field_name, all_properties):
shend 2017/05/11 05:00:59 Hmm, I'm not quite sure why this is needed. I thin
nainar 2017/05/11 06:00:08 Didn't realize root_group was a thing
+ for property_ in all_properties:
+ if field_name == property_['name']:
+ return _create_property_field(property_)
+
+
+def _create_expression(field):
shend 2017/05/11 05:00:59 maybe _getter_expression? Or even put this as a me
nainar 2017/05/11 06:00:08 Added it as a member on field
+ if field.group_name:
+ return field.group_name + '_data_->' + class_member_name(field.name)
+ else:
+ return class_member_name(field.name)
+
+
+def _match_groups_to_diff_groups(groups):
+ diff_groups_list = []
+ if not groups:
+ return
+ for group in groups:
+ list_of_expressions = []
+ for field in group.fields:
+ list_of_expressions.append(_create_expression(field))
+ diff_group = DiffGroup(group.name + '_data_', _match_groups_to_diff_groups(group.subgroups), list_of_expressions)
+ diff_groups_list.append(diff_group)
+ return diff_groups_list
+
+
+def _create_diff_groups(diff_function_inputs, all_properties):
shend 2017/05/11 05:00:59 As mentioned below, I believe this code would be e
nainar 2017/05/11 06:00:08 Done.
+ diff_named_groups_map = {}
+ for entry in diff_function_inputs:
+ list_of_fields = []
+ for field in entry['fields']:
+ list_of_fields.append(_create_field(field, all_properties))
+ diff_named_groups_map[entry['name']] = _match_groups_to_diff_groups(_group_fields(list_of_fields).subgroups)
+ return diff_named_groups_map
+
+
def _create_enums(properties):
"""
Returns an OrderedDict of enums to be generated, enum name -> [list of enum values]
@@ -370,6 +420,10 @@ class ComputedStyleBaseWriter(make_style_builder.StyleBuilderWriter):
all_fields = _create_fields(all_properties)
+ self._diff_functions_map = _create_diff_groups(json5_generator.Json5File.load_from_files(
+ [json5_file_paths[2]]
+ ).name_dictionaries, all_properties)
+
# Organise fields into a tree structure where the root group
# is ComputedStyleBase.
self._root_group = _group_fields(all_fields)
@@ -396,6 +450,7 @@ class ComputedStyleBaseWriter(make_style_builder.StyleBuilderWriter):
'properties': self._properties,
'enums': self._generated_enums,
'computed_style': self._root_group,
+ 'diff_functions_map': self._diff_functions_map,
}
@template_expander.use_jinja('ComputedStyleBaseConstants.h.tmpl')

Powered by Google App Engine
This is Rietveld 408576698