[SCM] WebKit Debian packaging branch, webkit-1.2, updated. upstream/1.1.90-6072-g9a69373

eric at webkit.org eric at webkit.org
Wed Apr 7 23:02:32 UTC 2010


The following commit has been merged in the webkit-1.2 branch:
commit 2f500040deffbfc066373d960b1840656db0689b
Author: eric at webkit.org <eric at webkit.org@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Date:   Fri Oct 23 20:43:17 2009 +0000

    2009-10-23  Jens Alfke  <snej at chromium.org>
    
            Reviewed by Dimitri Glazkov.
    
            Slight optimizations to object returning and exception handling in generated V8 bindings.
            https://bugs.webkit.org/show_bug.cgi?id=30599
    
            * bindings/scripts/CodeGeneratorV8.pm: Generate better code
            * bindings/v8/V8DOMWrapper.h:
            (WebCore::V8DOMWrapper::convertToV8Object): Added overload that takes a Ref<>
            * bindings/v8/custom/V8InspectorBackendCustom.cpp:
            (WebCore::CALLBACK_FUNC_DECL): Remove unnecessary template param to prevent compile error
    
    git-svn-id: http://svn.webkit.org/repository/webkit/trunk@49996 268f45cc-cd09-0410-ab3c-d52691b4dbfc

diff --git a/WebCore/ChangeLog b/WebCore/ChangeLog
index a1efbdc..632bfe0 100644
--- a/WebCore/ChangeLog
+++ b/WebCore/ChangeLog
@@ -1,3 +1,16 @@
+2009-10-23  Jens Alfke  <snej at chromium.org>
+
+        Reviewed by Dimitri Glazkov.
+
+        Slight optimizations to object returning and exception handling in generated V8 bindings.
+        https://bugs.webkit.org/show_bug.cgi?id=30599
+
+        * bindings/scripts/CodeGeneratorV8.pm: Generate better code
+        * bindings/v8/V8DOMWrapper.h:
+        (WebCore::V8DOMWrapper::convertToV8Object): Added overload that takes a Ref<>
+        * bindings/v8/custom/V8InspectorBackendCustom.cpp:
+        (WebCore::CALLBACK_FUNC_DECL): Remove unnecessary template param to prevent compile error
+
 2009-10-23  Alpha Lam  <hclam at chromium.org>
 
         Reviewed by Eric Carlson.
diff --git a/WebCore/bindings/scripts/CodeGeneratorV8.pm b/WebCore/bindings/scripts/CodeGeneratorV8.pm
index 9ba9959..fbcebb0 100644
--- a/WebCore/bindings/scripts/CodeGeneratorV8.pm
+++ b/WebCore/bindings/scripts/CodeGeneratorV8.pm
@@ -307,7 +307,7 @@ sub GenerateSetDOMException
     my $indent = shift;
     my $result = "";
 
-    $result .= $indent . "if (ec) {\n";
+    $result .= $indent . "if (UNLIKELY(ec)) {\n";
     $result .= $indent . "    V8Proxy::setDOMException(ec);\n";
     $result .= $indent . "    return v8::Handle<v8::Value>();\n";
     $result .= $indent . "}\n";
@@ -622,15 +622,17 @@ END
             push(@implContentDecls, "    if (!imp->document())\n");
             push(@implContentDecls, "      return v8::Undefined();\n");
         }
-        push(@implContentDecls, "    $nativeType v = ");
-
-        push(@implContentDecls, "$getterString;\n");
 
         if ($useExceptions) {
+            push(@implContentDecls, "    $nativeType v = ");
+            push(@implContentDecls, "$getterString;\n");
             push(@implContentDecls, GenerateSetDOMException("    "));
+            $result = "v";
+            $result .= ".release()" if (IsRefPtrType($returnType));
+        } else {
+            # Can inline the function call into the return statement to avoid overhead of using a Ref<> temporary
+            $result = $getterString;
         }
-
-        $result = "v";
     }
 
     if (IsSVGTypeNeedingContextParameter($attrType) && !$skipContext) {
@@ -646,7 +648,6 @@ END
         my $classIndex = uc($attrType);
         push(@implContentDecls, "    return V8DOMWrapper::convertToV8Object(V8ClassIndex::$classIndex, wrapper.release());\n");
     } else {
-        $result .= ".release()" if (IsRefPtrType($attrType));
         push(@implContentDecls, "    " . ReturnNativeToJSValue($attribute->signature, $result, "    ").";\n");
     }
 
@@ -784,7 +785,8 @@ END
     }
 
     if ($useExceptions) {
-        push(@implContentDecls, "    V8Proxy::setDOMException(ec);\n");
+        push(@implContentDecls, "    if (UNLIKELY(ec))\n");
+        push(@implContentDecls, "        V8Proxy::setDOMException(ec);\n");
     }
 
     if ($isPodType) {
@@ -917,7 +919,7 @@ END
         if (TypeCanFailConversion($parameter)) {
             $implIncludes{"ExceptionCode.h"} = 1;
             push(@implContentDecls,
-"    if (!$parameterName" . (BasicTypeCanFailConversion($parameter) ? "Ok" : "") . ") {\n" .
+"    if (UNLIKELY(!$parameterName" . (BasicTypeCanFailConversion($parameter) ? "Ok" : "") . ")) {\n" .
 "      V8Proxy::setDOMException(TYPE_MISMATCH_ERR);\n" .
 "      return v8::Handle<v8::Value>();\n" .
 "    }\n");
@@ -926,7 +928,7 @@ END
         if ($parameter->extendedAttributes->{"IsIndex"}) {
             $implIncludes{"ExceptionCode.h"} = 1;
             push(@implContentDecls,
-"    if ($parameterName < 0) {\n" .
+"    if (UNLIKELY($parameterName < 0)) {\n" .
 "      V8Proxy::setDOMException(INDEX_SIZE_ERR);\n" .
 "      return v8::Handle<v8::Value>();\n" .
 "    }\n");
@@ -1537,6 +1539,9 @@ sub GenerateFunctionCallString()
     }
     $functionString .= ")";
 
+    my $return = "result";
+    my $returnIsRef = IsRefPtrType($returnType);
+
     if ($nodeToReturn) {
         # Special case for insertBefore, replaceChild, removeChild and
         # appendChild functions from Node.
@@ -1557,16 +1562,18 @@ sub GenerateFunctionCallString()
             $indent . "$functionString;\n";
     } elsif ($returnsListItemPodType) {
         $result .= $indent . "RefPtr<SVGPODListItem<$nativeReturnType> > result = $functionString;\n";
-    } else {
+    } elsif (@{$function->raisesExceptions} or $returnsPodType or $isPodType or IsSVGTypeNeedingContextParameter($returnType)) {
         $result .= $indent . $nativeReturnType . " result = $functionString;\n";
+    } else {
+        # Can inline the function call into the return statement to avoid overhead of using a Ref<> temporary
+        $return = $functionString;
+        $returnIsRef = 0;
     }
 
     if (@{$function->raisesExceptions}) {
         $result .= GenerateSetDOMException($indent);
     }
 
-    my $return = "result";
-
     # If the return type is a POD type, separate out the wrapper generation
     if ($returnsListItemPodType) {
         $result .= $indent . "RefPtr<V8SVGPODTypeWrapper<" . $nativeReturnType . "> > wrapper = ";
@@ -1609,7 +1616,7 @@ sub GenerateFunctionCallString()
         my $classIndex = uc($returnType);
         $result .= $indent . "return V8DOMWrapper::convertToV8Object(V8ClassIndex::$classIndex, wrapper.release());\n";
     } else {
-        $return .= ".release()" if (IsRefPtrType($returnType));
+        $return .= ".release()" if ($returnIsRef);
         $result .= $indent . ReturnNativeToJSValue($function->signature, $return, $indent) . ";\n";
     }
 

-- 
WebKit Debian packaging



More information about the Pkg-webkit-commits mailing list