WebKit Bugzilla
New
Browse
Search+
Log In
×
Sign in with GitHub
or
Remember my login
Create Account
·
Forgot Password
Forgotten password account recovery
[patch]
WIP
bug-136311-20150114144327.patch (text/plain), 13.96 KB, created by
Brian Burg
on 2015-01-14 14:43:55 PST
(
hide
)
Description:
WIP
Filename:
MIME Type:
Creator:
Brian Burg
Created:
2015-01-14 14:43:55 PST
Size:
13.96 KB
patch
obsolete
>Subversion Revision: 178424 >diff --git a/Source/JavaScriptCore/ChangeLog b/Source/JavaScriptCore/ChangeLog >index 5149ab0742c9fde186b65ddde1647f61f971c175..8d7fa7d631069babf8f99c83d7981423bafd829e 100644 >--- a/Source/JavaScriptCore/ChangeLog >+++ b/Source/JavaScriptCore/ChangeLog >@@ -1,3 +1,22 @@ >+2014-08-27 Brian J. Burg <burg@cs.washington.edu> >+ >+ Web Replay: only generate EncodingTraits for enums defined in the target framework >+ https://bugs.webkit.org/show_bug.cgi?id=136311 >+ >+ Reviewed by NOBODY (OOPS!). >+ >+ Don't generate EncodingTraits for enums unless they belong to the target framework. >+ Otherwise, enums used in multiple frameworks' inputs cannot be unambiguously encoded/decoded. >+ >+ Also use Type.encoding_type_argument in more places. >+ >+ * replay/JSInputs.json: Move the InputQueue enum to here. >+ * replay/scripts/CodeGeneratorReplayInputs.py: Include WebReplayInputs.h for WebKit. >+ (Generator.generate_header): Selectively generate traits unless we are running tests. >+ (Generator.generate_implementation): >+ (Generator.generate_enum_trait_implementation): add WEBCORE_EXPORT macro to enum encoding traits. >+ * replay/scripts/CodeGeneratorReplayInputsTemplates.py: >+ > 2015-01-09 Brian J. Burg <burg@cs.washington.edu> > > Web Replay: add support for dispatching inputs with Page or WebPage context >diff --git a/Source/WebCore/ChangeLog b/Source/WebCore/ChangeLog >index b7edda934e512b0105575050f00a3ca5e5f268dc..6985373f7fcbd8b53f08d7c2f25ba53e3f8b4ad4 100644 >--- a/Source/WebCore/ChangeLog >+++ b/Source/WebCore/ChangeLog >@@ -1,3 +1,18 @@ >+2014-08-27 Brian J. Burg <burg@cs.washington.edu> >+ >+ Web Replay: only generate EncodingTraits for enums defined in the target framework >+ https://bugs.webkit.org/show_bug.cgi?id=136311 >+ >+ Reviewed by NOBODY (OOPS!). >+ >+ Duplicate the definitions for some enumerations used in WebKit but not in WebCore. >+ Add enum encoding traits symbols to the export file. >+ >+ Covered by existing generator tests. >+ >+ * WebCore.exp.in: >+ * replay/WebInputs.json: >+ > 2015-01-11 Brian J. Burg <burg@cs.washington.edu> > > Web Replay: capture and dispatch navigation inputs from WebPage >diff --git a/Source/JavaScriptCore/replay/JSInputs.json b/Source/JavaScriptCore/replay/JSInputs.json >index 7394d9470a84b29fdd3d4b41cf3b918df35f4380..841917060d70c49612dfd49c3d7bcc4b5ec3442e 100644 >--- a/Source/JavaScriptCore/replay/JSInputs.json >+++ b/Source/JavaScriptCore/replay/JSInputs.json >@@ -3,6 +3,15 @@ > "Global": [ > { "name": "double", "mode": "SCALAR" }, > { "name": "uint64_t", "mode": "SCALAR" } >+ ], >+ >+ "JavaScriptCore": [ >+ { >+ "name": "InputQueue", "mode": "SCALAR", "storage": "uint8_t", >+ "flags": ["ENUM_CLASS"], >+ "values": ["EventLoopInput", "LoaderMemoizedData", "ScriptMemoizedData", "Count"], >+ "header": "replay/NondeterministicInput.h" >+ } > ] > }, > >diff --git a/Source/JavaScriptCore/replay/scripts/CodeGeneratorReplayInputs.py b/Source/JavaScriptCore/replay/scripts/CodeGeneratorReplayInputs.py >index 3bdc07079ebca009c7a67b1122e1d846a047370e..6bfe7e1f1ba8416af2cf7cdcde353671aa08b1d5 100644 >--- a/Source/JavaScriptCore/replay/scripts/CodeGeneratorReplayInputs.py >+++ b/Source/JavaScriptCore/replay/scripts/CodeGeneratorReplayInputs.py >@@ -51,6 +51,9 @@ GLOBAL_CONFIG = { > (["WebKit"], > ("WebKit", "WebProcess/Replay/WebEventLoopInput.h") > ), >+ (["WebKit"], >+ ("WebCore", "WebReplayInputs.h") >+ ), > (["WebCore"], > ("WebCore", "replay/EventLoopInput.h") > ), >@@ -112,6 +115,7 @@ FRAMEWORK_CONFIG_MAP = { > "WebCore": { > "prefix": "Web", > "namespace": "WebCore", >+ "exportMacro": "WEBCORE_EXPORT" > }, > "WebKit": { > "prefix": "WK", >@@ -595,6 +599,10 @@ class Generator: > implementation_file.close() > > def generate_header(self): >+ enums_to_generate = self._model.enum_types() >+ if self.target_framework is not Frameworks.Test: # Force generation of enum traits for testing. >+ enums_to_generate = filter(lambda enum: enum.framework is self.target_framework, enums_to_generate) >+ > template_arguments = { > 'licenseBlock': self.generate_license(), > 'headerGuard': re.sub('[-./]', '_', self.output_filename() + ".h"), >@@ -607,13 +615,17 @@ class Generator: > 'inputForwardDeclarations': "\n".join([wrap_with_guard("class %s;", _input.guard) % _input.name for _input in self._model.inputs]), > 'inputClassDeclarations': "\n\n".join([self.generate_class_declaration(_input) for _input in self._model.inputs]), > 'inputTraitDeclarations': "\n\n".join([self.generate_input_trait_declaration(_input) for _input in self._model.inputs]), >- 'enumTraitDeclarations': "\n\n".join([wrap_with_guard(self.generate_enum_trait_declaration(_type), _type.guard) for _type in self._model.enum_types()]), >+ 'enumTraitDeclarations': "\n\n".join([wrap_with_guard(self.generate_enum_trait_declaration(_type), _type.guard) for _type in enums_to_generate]), > 'forEachMacro': self.generate_for_each_macro(), > } > > return Template(Templates.HeaderSkeleton).substitute(template_arguments) > > def generate_implementation(self): >+ enums_to_generate = self._model.enum_types() >+ if self.target_framework is not Frameworks.Test: # Force generation of enum traits for testing. >+ enums_to_generate = filter(lambda enum: enum.framework is self.target_framework, enums_to_generate) >+ > template_arguments = { > 'licenseBlock': self.generate_license(), > 'filename': self.output_filename(), >@@ -623,7 +635,7 @@ class Generator: > 'includes': self.generate_includes(defaults=self.setting('implIncludes'), includes_for_types=True), > 'inputClassImplementations': "\n\n".join([self.generate_class_implementation(_input) for _input in self._model.inputs]), > 'inputTraitImplementations': "\n\n".join([self.generate_input_trait_implementation(_input) for _input in self._model.inputs]), >- 'enumTraitImplementations': "\n\n".join([wrap_with_guard(self.generate_enum_trait_implementation(_type), _type.guard) for _type in self._model.enum_types()]), >+ 'enumTraitImplementations': "\n\n".join([wrap_with_guard(self.generate_enum_trait_implementation(_type), _type.guard) for _type in enums_to_generate]), > } > > return Template(Templates.ImplementationSkeleton).substitute(template_arguments) >@@ -811,10 +823,16 @@ class Generator: > return wrap_with_guard(Template(Templates.InputTraitsDeclaration).substitute(template_arguments), _input.guard) > > def generate_enum_trait_declaration(self, _type): >+ decl_type = ['struct'] >+ if len(self.setting('exportMacro')) > 0: >+ decl_type.append(self.setting('exportMacro')) >+ > should_qualify_type = _type.framework != self.traits_framework > template = Templates.EnumTraitDeclaration if _type.is_enum() else Templates.EnumClassTraitDeclaration > template_arguments = { >- 'enumName': _type.type_name(qualified=should_qualify_type), >+ 'encodingTypeArgument': _type.encoding_type_argument(qualified=should_qualify_type), >+ 'enumType': _type.type_name(qualified=should_qualify_type), >+ 'structOrClass': " ".join(decl_type) > } > return Template(template).substitute(template_arguments) > >@@ -902,7 +920,8 @@ class Generator: > decodeLines.append(wrap_with_guard("\n".join(guardedLines), guard)) > > template_arguments = { >- 'enumName': _type.type_name(qualified=should_qualify_type), >+ 'encodingTypeArgument': _type.encoding_type_argument(qualified=should_qualify_type), >+ 'enumType': _type.type_name(qualified=should_qualify_type), > 'encodeCases': "\n".join(encodeLines), > 'decodeCases': "\n".join(decodeLines) > } >diff --git a/Source/JavaScriptCore/replay/scripts/CodeGeneratorReplayInputsTemplates.py b/Source/JavaScriptCore/replay/scripts/CodeGeneratorReplayInputsTemplates.py >index 8de7bf6b07456c7ab92593215c31517a6d3c65bb..be00981e84b58afa5e976fe1e4fa196f9a88631f 100644 >--- a/Source/JavaScriptCore/replay/scripts/CodeGeneratorReplayInputsTemplates.py >+++ b/Source/JavaScriptCore/replay/scripts/CodeGeneratorReplayInputsTemplates.py >@@ -105,19 +105,19 @@ ${forEachMacro} > };""") > > EnumTraitDeclaration = ( >- """template<> struct EncodingTraits<${enumName}> { >- typedef ${enumName} DecodedType; >+ """template<> ${structOrClass} EncodingTraits<${encodingTypeArgument}> { >+ typedef ${enumType} DecodedType; > >- static EncodedValue encodeValue(const ${enumName}& value); >- static bool decodeValue(EncodedValue&, ${enumName}& value); >+ static EncodedValue encodeValue(const ${enumType}& value); >+ static bool decodeValue(EncodedValue&, ${enumType}& value); > };""") > > EnumClassTraitDeclaration = ( >- """template<> struct EncodingTraits<${enumName}> { >- typedef ${enumName} DecodedType; >+ """template<> ${structOrClass} EncodingTraits<${encodingTypeArgument}> { >+ typedef ${enumType} DecodedType; > >- static EncodedValue encodeValue(const ${enumName}& value); >- static bool decodeValue(EncodedValue&, ${enumName}& value); >+ static EncodedValue encodeValue(const ${enumType}& value); >+ static bool decodeValue(EncodedValue&, ${enumType}& value); > };""") > > InputClassDeclaration = ( >@@ -171,7 +171,7 @@ ${decodeSteps} > }""") > > EnumClassTraitImplementation = ( >- """EncodedValue EncodingTraits<${enumName}>::encodeValue(const ${enumName}& enumValue) >+ """EncodedValue EncodingTraits<${encodingTypeArgument}>::encodeValue(const ${enumType}& enumValue) > { > switch (enumValue) { > ${encodeCases} >@@ -179,7 +179,7 @@ ${encodeCases} > } > } > >-bool EncodingTraits<${enumName}>::decodeValue(EncodedValue& encodedValue, ${enumName}& enumValue) >+bool EncodingTraits<${encodingTypeArgument}>::decodeValue(EncodedValue& encodedValue, ${enumType}& enumValue) > { > String enumString = encodedValue.convertTo<String>(); > ${decodeCases} >@@ -196,14 +196,14 @@ ${decodeCases} > }""") > > EnumTraitImplementation = ( >- """EncodedValue EncodingTraits<${enumName}>::encodeValue(const ${enumName}& enumValue) >+ """EncodedValue EncodingTraits<${encodingTypeArgument}>::encodeValue(const ${enumType}& enumValue) > { > EncodedValue encodedValue = EncodedValue::createArray(); > ${encodeCases} > return encodedValue; > } > >-bool EncodingTraits<${enumName}>::decodeValue(EncodedValue& encodedValue, ${enumName}& enumValue) >+bool EncodingTraits<${encodingTypeArgument}>::decodeValue(EncodedValue& encodedValue, ${enumType}& enumValue) > { > Vector<String> enumStrings; > if (!EncodingTraits<Vector<String>>::decodeValue(encodedValue, enumStrings)) >diff --git a/Source/WebCore/WebCore.exp.in b/Source/WebCore/WebCore.exp.in >index 665f9457bc3605bfa88b2da55a4890aaed723da7..a63ddf7697ba7678747f7fd7eededdb46fe513f5 100644 >--- a/Source/WebCore/WebCore.exp.in >+++ b/Source/WebCore/WebCore.exp.in >@@ -3566,8 +3566,12 @@ __ZN3JSC11InputTraitsIN7WebCore32ResourceLoaderDidReceiveResponseEE6decodeERNS_1 > __ZN3JSC11InputTraitsIN7WebCore32ResourceLoaderDidReceiveResponseEE6encodeERNS_12EncodedValueERKS2_ > __ZN3JSC14EncodingTraitsIN7WebCore15KeypressCommandEE11decodeValueERNS_12EncodedValueERS2_ > __ZN3JSC14EncodingTraitsIN7WebCore15KeypressCommandEE11encodeValueERKS2_ >+__ZN3JSC14EncodingTraitsIN7WebCore15ScrollDirectionEE11decodeValueERNS_12EncodedValueERS2_ >+__ZN3JSC14EncodingTraitsIN7WebCore15ScrollDirectionEE11encodeValueERKS2_ > __ZN3JSC14EncodingTraitsIN7WebCore16FrameLoadRequestEE11decodeValueERNS_12EncodedValueERNSt3__110unique_ptrIS2_NS6_14default_deleteIS2_EEEE > __ZN3JSC14EncodingTraitsIN7WebCore16FrameLoadRequestEE11encodeValueERKS2_ >+__ZN3JSC14EncodingTraitsIN7WebCore17ScrollGranularityEE11decodeValueERNS_12EncodedValueERS2_ >+__ZN3JSC14EncodingTraitsIN7WebCore17ScrollGranularityEE11encodeValueERKS2_ > __ZN3JSC14EncodingTraitsIN7WebCore8IntPointEE11decodeValueERNS_12EncodedValueERS2_ > __ZN3JSC14EncodingTraitsIN7WebCore8IntPointEE11encodeValueERKS2_ > __ZN3JSC14EncodingTraitsIN7WebCore9FloatSizeEE11decodeValueERNS_12EncodedValueERS2_ >diff --git a/Source/WebCore/replay/WebInputs.json b/Source/WebCore/replay/WebInputs.json >index d4f3b3494fd4799347a7a4b596c45ca8d3f9c2a6..19bcbde045be329eac6231b2e863b58515d21601 100644 >--- a/Source/WebCore/replay/WebInputs.json >+++ b/Source/WebCore/replay/WebInputs.json >@@ -86,6 +86,35 @@ > "header": "platform/network/ResourceResponse.h" > }, > { >+ "name": "ScrollDirection", "mode": "SCALAR", "storage": "uint8_t", >+ "flags": ["ENUM"], >+ "values": ["ScrollUp", "ScrollDown", "ScrollLeft", "ScrollRight"], >+ "header": "platform/ScrollTypes.h" >+ }, >+ { >+ "name": "ScrollGranularity", "mode": "SCALAR", "storage": "uint8_t", >+ "flags": ["ENUM"], >+ "values": [ >+ "ScrollByLine", >+ "ScrollByPage", >+ "ScrollByDocument", >+ "ScrollByPixel", >+ "ScrollByPrecisePixel" >+ ], >+ "header": "platform/ScrollTypes.h" >+ }, >+ { >+ "name": "ScrollLogicalDirection", "mode": "SCALAR", "storage": "uint8_t", >+ "flags": ["ENUM"], >+ "values": [ >+ "ScrollBlockDirectionBackward", >+ "ScrollBlockDirectionForward", >+ "ScrollInlineDirectionBackward", >+ "ScrollInlineDirectionForward" >+ ], >+ "header": "platform/ScrollTypes.h" >+ }, >+ { > "name": "SecurityOrigin", "mode": "SHARED", > "header": "page/SecurityOrigin.h" > },
You cannot view the attachment while viewing its details because your browser does not support IFRAMEs.
View the attachment on a separate page
.
View Attachment As Diff
View Attachment As Raw
Actions:
View
|
Formatted Diff
|
Diff
Attachments on
bug 136311
:
244639
|
244668