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

Unified Diff: mojo/public/tools/bindings/pylib/mojom/generate/mojom_translator.py

Issue 1824263002: Mojom backend: Stop re-computing version info and field packing data. (Closed) Base URL: https://github.com/domokit/mojo.git@master
Patch Set: Created 4 years, 9 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: mojo/public/tools/bindings/pylib/mojom/generate/mojom_translator.py
diff --git a/mojo/public/tools/bindings/pylib/mojom/generate/mojom_translator.py b/mojo/public/tools/bindings/pylib/mojom/generate/mojom_translator.py
index caca0529d4795134e384e6f361757a605d7a3299..061adefaf19c44e1883a3bf84a1a034e05a58073 100755
--- a/mojo/public/tools/bindings/pylib/mojom/generate/mojom_translator.py
+++ b/mojo/public/tools/bindings/pylib/mojom/generate/mojom_translator.py
@@ -29,6 +29,7 @@ from generated import mojom_files_mojom
from generated import mojom_types_mojom
import module
import operator
+import pack
class FileTranslator(object):
@@ -192,12 +193,26 @@ class FileTranslator(object):
"""
assert mojom_type.tag == mojom_types_mojom.UserDefinedType.Tags.struct_type
mojom_struct = mojom_type.struct_type
+ self.StructFromMojomStruct(struct, mojom_struct)
+
+ def StructFromMojomStruct(self, struct, mojom_struct):
+ """Populates a module.Struct based on a MojomStruct.
+
+ Args:
+ struct: {module.Struct} to be populated.
+ mojom_struct: {mojom_types.MojomStruct} to be translated.
+ """
self.PopulateUserDefinedType(struct, mojom_struct)
- # mojom_struct.fields is indexed by the field ordinals. We want
- # to capture these ordinals but sort struct.fields by declaration_order.
- struct.fields = [self.StructFieldFromMojom(ordinal, f) for (ordinal, f) in
- enumerate(mojom_struct.fields)]
+ # mojom_struct.fields is indexed by the field ordinals.
+ struct.fields_in_ordinal_order = [self.StructFieldFromMojom(ordinal, f)
+ for (ordinal, f) in enumerate(mojom_struct.fields)]
+ # We also want a list of fields sorted in declaration_order.
+ struct.fields = [f for f in struct.fields_in_ordinal_order]
struct.fields.sort(key=lambda field: field.declaration_order)
+
+ assert mojom_struct.version_info
+ struct.versions = [self.VersionInfoFromMojom(version) for version in
+ mojom_struct.version_info]
self.PopulateContainedDeclarationsFromMojom(
struct, mojom_struct.decl_data.contained_declarations)
@@ -239,6 +254,9 @@ class FileTranslator(object):
"""
struct_field = module.StructField()
self.PopulateCommonFieldValues(struct_field, mojom_field)
+ struct_field.computed_offset = mojom_field.offset
+ struct_field.computed_bit = mojom_field.bit
+ struct_field.computed_min_version = mojom_field.min_version
# Note that the |ordinal| attribute of |struct_field| records only the
# *declared* ordinal and as such is not defined for every field whereas
# the |computed_ordinal| attribute is defined for every field. If
@@ -256,6 +274,18 @@ class FileTranslator(object):
return struct_field
+ def VersionInfoFromMojom(self, mojom_version):
+ """Translates a mojom_types_mojom.StructVersion to a pack.VersionInfo
+ Args:
+ mojom_version: {mojom_types_mojom.StructVersion} to be translated.
+
+ Returns:
+ {pack.VersionInfo} translated from |mojom_version|.
+ """
+ return pack.VersionInfo(mojom_version.version_number,
+ mojom_version.num_fields, mojom_version.num_bytes)
+
+
def ParamFromMojom(self, mojom):
"""Translates a mojom_types_mojom.StructField to a module.Parameter.
@@ -454,11 +484,35 @@ class FileTranslator(object):
"""
method = module.Method(interface, mojom_method.decl_data.short_name)
method.ordinal = mojom_method.ordinal
+ method.param_struct = module.Struct()
+ self.StructFromMojomStruct(method.param_struct, mojom_method.parameters)
+ # The name of a synthetic request parameter struct is not guaranteed by
+ # the frontend to be anything in particular so we set the name of the
+ # translated struct to a value that the code generators are expecting.
+ method.param_struct.name = "%s_%s_Params" % (
+ method.interface.name, method.name)
method.parameters = [self.ParamFromMojom(param)
for param in mojom_method.parameters.fields]
if mojom_method.response_params is not None:
+ method.response_param_struct = module.Struct()
+ self.StructFromMojomStruct(method.response_param_struct,
+ mojom_method.response_params)
+ # The name of a synthetic response parameter struct is not guaranteed by
+ # the frontend to be anything in particular so we set the name of the
+ # translated struct to a value that the code generators are expecting.
+ method.response_param_struct.name = "%s_%s_ResponseParams" % (
+ method.interface.name, method.name)
method.response_parameters = [self.ParamFromMojom(param)
for param in mojom_method.response_params.fields]
+
+ # Set the min_version attribute on the method.
+ method.min_version=None
+ # TODO(rudominer) For now we parse the "MinVersion" attribute here but
+ # after we add a min_version field to mojom_types_mojom.MojomMethod then
+ # we should take the value from there instead.
+ if method.attributes:
+ method.min_version=method.get('MinVersion')
+
return method
def ConstantFromValueKey(self, value_key):

Powered by Google App Engine
This is Rietveld 408576698