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