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

Unified Diff: Source/bindings/scripts/code_generator_v8.pm

Issue 127723002: Add use counters for using Attrs as Nodes. (Closed) Base URL: svn://svn.chromium.org/blink/trunk
Patch Set: Bring patch to head. Created 6 years, 11 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 | Source/bindings/tests/results/V8SupportTestInterface.cpp » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: Source/bindings/scripts/code_generator_v8.pm
diff --git a/Source/bindings/scripts/code_generator_v8.pm b/Source/bindings/scripts/code_generator_v8.pm
index 949a2262119f32bb250e87c8a1dc740f64289c6e..d0e432ec7f81e3f741c9e4cbb065247bbfd9e98a 100644
--- a/Source/bindings/scripts/code_generator_v8.pm
+++ b/Source/bindings/scripts/code_generator_v8.pm
@@ -1426,6 +1426,7 @@ sub GenerateNormalAttributeGetterCallback
$code .= " TRACE_EVENT_SET_SAMPLING_STATE(\"Blink\", \"DOMGetter\");\n";
$code .= GenerateFeatureObservation($attrExt->{"MeasureAs"});
$code .= GenerateDeprecationNotification($attrExt->{"DeprecateAs"});
+ $code .= GenerateAttrUsedAsNodeReceiverCheck($interface);
if (HasActivityLogging($forMainWorldSuffix, $attrExt, "Getter")) {
$code .= GenerateActivityLogging("Getter", $interface, "${attrName}");
}
@@ -1888,6 +1889,8 @@ sub GenerateNormalAttributeSetterCallback
$code .= " TRACE_EVENT_SET_SAMPLING_STATE(\"Blink\", \"DOMSetter\");\n";
$code .= GenerateFeatureObservation($attrExt->{"MeasureAs"});
$code .= GenerateDeprecationNotification($attrExt->{"DeprecateAs"});
+ $code .= GenerateAttrUsedAsNodeReceiverCheck($interface);
+ $code .= GenerateAttrUsedAsNodeParameterCheckForSetter($attribute->type);
if (HasActivityLogging($forMainWorldSuffix, $attrExt, "Setter")) {
$code .= GenerateActivityLogging("Setter", $interface, "${attrName}");
}
@@ -2257,6 +2260,62 @@ sub GenerateFunctionParametersCheck
return ($numMandatoryParams, join(" || ", @orExpression));
}
+sub GenerateAttrUsedAsNodeReceiverCheck
+{
+ my $interface = shift;
+
+ if ($interface->name eq "Node") {
+ AddToImplIncludes("core/frame/UseCounter.h");
+ AddToImplIncludes("V8Attr.h");
+ return <<END;
+ if (V8DOMWrapper::isWrapperOfType(info.Holder(), &V8Attr::wrapperTypeInfo))
+ UseCounter::count(activeExecutionContext(), UseCounter::AttrUsedAsNodeReceiver);
+END
+ }
+
+ return "";
+}
+
+sub GenerateAttrUsedAsNodeParameterCheck
+{
+ my $function = shift;
+
+ my $code = "";
+ my $paramIndex = 0;
+
+ foreach my $parameter (@{$function->parameters}) {
+ if ($parameter->type eq "Node") {
+ $code .= " if (V8DOMWrapper::isWrapperOfType(info[$paramIndex], &V8Attr::wrapperTypeInfo))\n";
+ $code .= " UseCounter::count(activeExecutionContext(), UseCounter::AttrUsedAsNodeParameter);\n";
+ }
+
+ $paramIndex += 1;
+ }
+
+ if ($code) {
+ AddToImplIncludes("core/frame/UseCounter.h");
+ AddToImplIncludes("V8Attr.h");
+ }
+
+ return $code;
+}
+
+sub GenerateAttrUsedAsNodeParameterCheckForSetter
+{
+ my $type = shift;
+
+ if ($type eq "Node") {
+ AddToImplIncludes("core/frame/UseCounter.h");
+ AddToImplIncludes("V8Attr.h");
+ return <<END;
+ if (V8DOMWrapper::isWrapperOfType(jsValue, &V8Attr::wrapperTypeInfo))
+ UseCounter::count(activeExecutionContext(), UseCounter::AttrUsedAsNodeParameter);
+END
+ }
+
+ return "";
+}
+
sub GenerateOverloadedFunction
{
my $function = shift;
@@ -2284,8 +2343,10 @@ static void ${name}Method${forMainWorldSuffix}(const v8::FunctionCallbackInfo<v8
END
$code .= GenerateFeatureObservation($function->extendedAttributes->{"MeasureAs"});
$code .= GenerateDeprecationNotification($function->extendedAttributes->{"DeprecateAs"});
+ $code .= GenerateAttrUsedAsNodeReceiverCheck($interface);
foreach my $overload (@{$function->{overloads}}) {
+ $code .= GenerateAttrUsedAsNodeParameterCheck($overload);
my ($numMandatoryParams, $parametersCheck) = GenerateFunctionParametersCheck($overload);
$leastNumMandatoryParams = $numMandatoryParams if ($numMandatoryParams < $leastNumMandatoryParams);
$code .= " if ($parametersCheck) {\n";
@@ -2339,6 +2400,8 @@ END
$code .= " TRACE_EVENT_SET_SAMPLING_STATE(\"Blink\", \"DOMMethod\");\n";
$code .= GenerateFeatureObservation($function->extendedAttributes->{"MeasureAs"});
$code .= GenerateDeprecationNotification($function->extendedAttributes->{"DeprecateAs"});
+ $code .= GenerateAttrUsedAsNodeReceiverCheck($interface);
+ $code .= GenerateAttrUsedAsNodeParameterCheck($function);
if (HasActivityLogging($forMainWorldSuffix, $function->extendedAttributes, "Access")) {
$code .= GenerateActivityLogging("Method", $interface, "${name}");
}
@@ -3735,6 +3798,7 @@ sub GenerateImplementationIndexedPropertySetter
my $code = "static void indexedPropertySetter(uint32_t index, v8::Local<v8::Value> jsValue, const v8::PropertyCallbackInfo<v8::Value>& info)\n";
$code .= "{\n";
+ $code .= GenerateAttrUsedAsNodeParameterCheckForSetter($type);
my $extraArguments = "";
if ($raisesExceptions || IsIntegerType($type)) {
@@ -4045,6 +4109,7 @@ sub GenerateImplementationNamedPropertySetter
my $code = "static void namedPropertySetter(v8::Local<v8::String> name, v8::Local<v8::Value> jsValue, const v8::PropertyCallbackInfo<v8::Value>& info)\n";
$code .= "{\n";
+ $code .= GenerateAttrUsedAsNodeParameterCheckForSetter($type);
if (!$namedSetterFunction->extendedAttributes->{"OverrideBuiltins"}) {
$code .= " if (!info.Holder()->GetRealNamedPropertyInPrototypeChain(name).IsEmpty())\n";
$code .= " return;\n";
« no previous file with comments | « no previous file | Source/bindings/tests/results/V8SupportTestInterface.cpp » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698