Title: [202042] trunk/Source/WebCore
- Revision
- 202042
- Author
- [email protected]
- Date
- 2016-06-14 07:31:26 -0700 (Tue, 14 Jun 2016)
Log Message
[Cocoa] Avoid extra copy of headers dictionary in ResourceResponse::platformLazyInit()
https://bugs.webkit.org/show_bug.cgi?id=158717
Reviewed by Alex Christensen.
Avoid extra copy of headers dictionary in ResourceResponse::platformLazyInit() by
calling CFHTTPMessageCopyAllHeaderFields() instead of [NSURLResponse allHeaderFields].
CFHTTPMessageCopyAllHeaderFields() creates only 1 copy while
[NSURLResponse allHeaderFields] creates 2 (see <rdar://problem/26778863>).
* platform/network/cocoa/ResourceResponseCocoa.mm:
(WebCore::addToHTTPHeaderMap):
(WebCore::ResourceResponse::platformLazyInit):
Modified Paths
Diff
Modified: trunk/Source/WebCore/ChangeLog (202041 => 202042)
--- trunk/Source/WebCore/ChangeLog 2016-06-14 13:10:57 UTC (rev 202041)
+++ trunk/Source/WebCore/ChangeLog 2016-06-14 14:31:26 UTC (rev 202042)
@@ -1,3 +1,20 @@
+2016-06-14 Chris Dumez <[email protected]>
+
+ [Cocoa] Avoid extra copy of headers dictionary in ResourceResponse::platformLazyInit()
+ https://bugs.webkit.org/show_bug.cgi?id=158717
+
+ Reviewed by Alex Christensen.
+
+ Avoid extra copy of headers dictionary in ResourceResponse::platformLazyInit() by
+ calling CFHTTPMessageCopyAllHeaderFields() instead of [NSURLResponse allHeaderFields].
+
+ CFHTTPMessageCopyAllHeaderFields() creates only 1 copy while
+ [NSURLResponse allHeaderFields] creates 2 (see <rdar://problem/26778863>).
+
+ * platform/network/cocoa/ResourceResponseCocoa.mm:
+ (WebCore::addToHTTPHeaderMap):
+ (WebCore::ResourceResponse::platformLazyInit):
+
2016-06-14 David Kilzer <[email protected]>
REGRESSION (r151608): Leak of QTMovieLayer or AVPlayerLayer in -[WebVideoFullscreenController setVideoElement:]
Modified: trunk/Source/WebCore/platform/network/cocoa/ResourceResponseCocoa.mm (202041 => 202042)
--- trunk/Source/WebCore/platform/network/cocoa/ResourceResponseCocoa.mm 2016-06-14 13:10:57 UTC (rev 202041)
+++ trunk/Source/WebCore/platform/network/cocoa/ResourceResponseCocoa.mm 2016-06-14 14:31:26 UTC (rev 202042)
@@ -159,6 +159,12 @@
return (NSString *)CFHTTPMessageCopyResponseStatusLine(cfHTTPMessage);
}
+static void addToHTTPHeaderMap(const void* key, const void* value, void* context)
+{
+ HTTPHeaderMap* httpHeaderMap = (HTTPHeaderMap*)context;
+ httpHeaderMap->set((CFStringRef)key, (CFStringRef)value);
+}
+
void ResourceResponse::platformLazyInit(InitLevel initLevel)
{
if (m_initLevel >= initLevel)
@@ -187,10 +193,14 @@
m_httpStatusCode = [httpResponse statusCode];
if (initLevel < AllFields) {
- NSDictionary *headers = [httpResponse allHeaderFields];
- for (NSString *name : commonHeaderFields) {
- if (NSString* headerValue = [headers objectForKey:name])
- m_httpHeaderFields.set(name, headerValue);
+ CFHTTPMessageRef messageRef = CFURLResponseGetHTTPResponse([httpResponse _CFURLResponse]);
+
+ // Avoid calling [NSURLResponse allHeaderFields] to minimize copying (<rdar://problem/26778863>).
+ RetainPtr<CFDictionaryRef> headers = adoptCF(CFHTTPMessageCopyAllHeaderFields(messageRef));
+ for (auto& commonHeader : commonHeaderFields) {
+ CFStringRef value;
+ if (CFDictionaryGetValueIfPresent(headers.get(), commonHeader, (const void **)&value))
+ m_httpHeaderFields.set(commonHeader, value);
}
}
} else
@@ -212,9 +222,9 @@
CFHTTPMessageRef messageRef = CFURLResponseGetHTTPResponse([httpResponse _CFURLResponse]);
m_httpVersion = String(adoptCF(CFHTTPMessageCopyVersion(messageRef)).get()).convertToASCIIUppercase();
- NSDictionary *headers = [httpResponse allHeaderFields];
- for (NSString *name in headers)
- m_httpHeaderFields.set(name, [headers objectForKey:name]);
+ // Avoid calling [NSURLResponse allHeaderFields] to minimize copying (<rdar://problem/26778863>).
+ RetainPtr<CFDictionaryRef> headers = adoptCF(CFHTTPMessageCopyAllHeaderFields(messageRef));
+ CFDictionaryApplyFunction(headers.get(), addToHTTPHeaderMap, &m_httpHeaderFields);
[pool drain];
}
_______________________________________________
webkit-changes mailing list
[email protected]
https://lists.webkit.org/mailman/listinfo/webkit-changes