Title: [175171] trunk/Source/WebCore
Revision
175171
Author
[email protected]
Date
2014-10-24 12:13:15 -0700 (Fri, 24 Oct 2014)

Log Message

Avoid unnecessary NSURLRequest copies in ResourceRequest::doUpdatePlatformRequest() / doUpdatePlatformHTTPBody()
https://bugs.webkit.org/show_bug.cgi?id=138049

Reviewed by Alexey Proskuryakov.

Avoid unnecessary NSURLRequest copies in ResourceRequest::doUpdatePlatformRequest()
/ doUpdatePlatformHTTPBody(). It turns out that about half the time, the
m_nsRequest member is already mutable so it is unnecessary to call
[NSURLRequest mutableCopy], we can just cast it to an NSMutableURLRequest* and
avoid copying.

This patch also moves the code to a new ensureMutableNSURLRequest() method to
avoid duplicating the logic.

I see that we spend ~21% less time in these 2 functions when loading
http://flickr.com/explore/ (39.6ms -> 31.2ms).

No new tests, no behavior change.

* platform/network/cf/ResourceRequest.h:
* platform/network/cocoa/ResourceRequestCocoa.mm:
(WebCore::ResourceRequest::ensureMutableNSURLRequest):
(WebCore::ResourceRequest::doUpdatePlatformRequest):
(WebCore::ResourceRequest::doUpdatePlatformHTTPBody):

Modified Paths

Diff

Modified: trunk/Source/WebCore/ChangeLog (175170 => 175171)


--- trunk/Source/WebCore/ChangeLog	2014-10-24 19:11:17 UTC (rev 175170)
+++ trunk/Source/WebCore/ChangeLog	2014-10-24 19:13:15 UTC (rev 175171)
@@ -1,5 +1,32 @@
 2014-10-24  Chris Dumez  <[email protected]>
 
+        Avoid unnecessary NSURLRequest copies in ResourceRequest::doUpdatePlatformRequest() / doUpdatePlatformHTTPBody()
+        https://bugs.webkit.org/show_bug.cgi?id=138049
+
+        Reviewed by Alexey Proskuryakov.
+
+        Avoid unnecessary NSURLRequest copies in ResourceRequest::doUpdatePlatformRequest()
+        / doUpdatePlatformHTTPBody(). It turns out that about half the time, the
+        m_nsRequest member is already mutable so it is unnecessary to call
+        [NSURLRequest mutableCopy], we can just cast it to an NSMutableURLRequest* and
+        avoid copying.
+
+        This patch also moves the code to a new ensureMutableNSURLRequest() method to
+        avoid duplicating the logic.
+
+        I see that we spend ~21% less time in these 2 functions when loading
+        http://flickr.com/explore/ (39.6ms -> 31.2ms).
+
+        No new tests, no behavior change.
+
+        * platform/network/cf/ResourceRequest.h:
+        * platform/network/cocoa/ResourceRequestCocoa.mm:
+        (WebCore::ResourceRequest::ensureMutableNSURLRequest):
+        (WebCore::ResourceRequest::doUpdatePlatformRequest):
+        (WebCore::ResourceRequest::doUpdatePlatformHTTPBody):
+
+2014-10-24  Chris Dumez  <[email protected]>
+
         Move ComputeLength CSS properties to the new StyleBuilder
         https://bugs.webkit.org/show_bug.cgi?id=138036
 

Modified: trunk/Source/WebCore/platform/network/cf/ResourceRequest.h (175170 => 175171)


--- trunk/Source/WebCore/platform/network/cf/ResourceRequest.h	2014-10-24 19:11:17 UTC (rev 175170)
+++ trunk/Source/WebCore/platform/network/cf/ResourceRequest.h	2014-10-24 19:13:15 UTC (rev 175171)
@@ -30,6 +30,7 @@
 #include "ResourceRequestBase.h"
 #include <wtf/RetainPtr.h>
 
+OBJC_CLASS NSMutableURLRequest;
 OBJC_CLASS NSURLRequest;
 
 #if PLATFORM(COCOA) || USE(CFNETWORK)
@@ -136,6 +137,10 @@
         void doUpdatePlatformHTTPBody();
         void doUpdateResourceHTTPBody();
 
+#if PLATFORM(COCOA)
+        NSMutableURLRequest *ensureMutableNSURLRequest();
+#endif
+
         PassOwnPtr<CrossThreadResourceRequestData> doPlatformCopyData(PassOwnPtr<CrossThreadResourceRequestData>) const;
         void doPlatformAdopt(PassOwnPtr<CrossThreadResourceRequestData>);
 

Modified: trunk/Source/WebCore/platform/network/cocoa/ResourceRequestCocoa.mm (175170 => 175171)


--- trunk/Source/WebCore/platform/network/cocoa/ResourceRequestCocoa.mm	2014-10-24 19:11:17 UTC (rev 175170)
+++ trunk/Source/WebCore/platform/network/cocoa/ResourceRequestCocoa.mm	2014-10-24 19:13:15 UTC (rev 175171)
@@ -123,6 +123,17 @@
     }
 }
 
+inline NSMutableURLRequest *ResourceRequest::ensureMutableNSURLRequest()
+{
+    if (m_nsRequest) {
+        if (![m_nsRequest.get() isKindOfClass:[NSMutableURLRequest class]])
+            m_nsRequest = adoptNS([m_nsRequest.get() mutableCopy]);
+        [(NSMutableURLRequest *)m_nsRequest.get() setURL:url()];
+    } else
+        m_nsRequest = adoptNS([[NSMutableURLRequest alloc] initWithURL:url()]);
+    return (NSMutableURLRequest *)m_nsRequest.get();
+}
+
 void ResourceRequest::doUpdatePlatformRequest()
 {
     if (isNull()) {
@@ -130,13 +141,8 @@
         return;
     }
 
-    NSMutableURLRequest *nsRequest = [m_nsRequest.get() mutableCopy];
+    NSMutableURLRequest *nsRequest = ensureMutableNSURLRequest();
 
-    if (nsRequest)
-        [nsRequest setURL:url()];
-    else
-        nsRequest = [[NSMutableURLRequest alloc] initWithURL:url()];
-
     if (ResourceRequest::httpPipeliningEnabled())
         wkHTTPRequestEnablePipelining([nsRequest _CFURLRequest]);
 
@@ -181,8 +187,6 @@
         [NSURLProtocol setProperty:partitionValue forKey:(NSString *)wkCachePartitionKey() inRequest:nsRequest];
     }
 #endif
-
-    m_nsRequest = adoptNS(nsRequest);
 }
 
 void ResourceRequest::doUpdatePlatformHTTPBody()
@@ -192,13 +196,8 @@
         return;
     }
 
-    NSMutableURLRequest *nsRequest = [m_nsRequest.get() mutableCopy];
+    NSMutableURLRequest *nsRequest = ensureMutableNSURLRequest();
 
-    if (nsRequest)
-        [nsRequest setURL:url()];
-    else
-        nsRequest = [[NSMutableURLRequest alloc] initWithURL:url()];
-
     RefPtr<FormData> formData = httpBody();
     if (formData && !formData->isEmpty())
         WebCore::setHTTPBody(nsRequest, formData);
@@ -213,8 +212,6 @@
             m_httpHeaderFields.set(HTTPHeaderName::ContentLength, lengthString);
         }
     }
-
-    m_nsRequest = adoptNS(nsRequest);
 }
 
 void ResourceRequest::updateFromDelegatePreservingOldProperties(const ResourceRequest& delegateProvidedRequest)
_______________________________________________
webkit-changes mailing list
[email protected]
https://lists.webkit.org/mailman/listinfo/webkit-changes

Reply via email to