[Mac] Optimize URL::createCFURL() for the common case
authorcdumez@apple.com <cdumez@apple.com@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Fri, 24 Oct 2014 01:29:46 +0000 (01:29 +0000)
committercdumez@apple.com <cdumez@apple.com@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Fri, 24 Oct 2014 01:29:46 +0000 (01:29 +0000)
https://bugs.webkit.org/show_bug.cgi?id=138030

Reviewed by Alexey Proskuryakov.

Optimize URL::createCFURL() for the common case by adding a fast path
for when the URL String is already 8-bit (common case).
When the string is 8-bit, we don't need to copy the bytes into a
temporary buffer and we can construct the CFURLRef directly from it.

This makes URL::createCFURL() ~34% faster on my machine.

No new tests, no behavior change.

* platform/mac/URLMac.mm:
(WebCore::URL::createCFURL):

git-svn-id: https://svn.webkit.org/repository/webkit/trunk@175154 268f45cc-cd09-0410-ab3c-d52691b4dbfc

Source/WebCore/ChangeLog
Source/WebCore/platform/mac/URLMac.mm

index 0bcdf4a9c9b082d6aa7a8a585e36dc6a7df6e16e..a7fc36b44e46132e2bff710ee7dedf39361bc65a 100644 (file)
@@ -1,3 +1,22 @@
+2014-10-23  Chris Dumez  <cdumez@apple.com>
+
+        [Mac] Optimize URL::createCFURL() for the common case
+        https://bugs.webkit.org/show_bug.cgi?id=138030
+
+        Reviewed by Alexey Proskuryakov.
+
+        Optimize URL::createCFURL() for the common case by adding a fast path
+        for when the URL String is already 8-bit (common case).
+        When the string is 8-bit, we don't need to copy the bytes into a
+        temporary buffer and we can construct the CFURLRef directly from it.
+
+        This makes URL::createCFURL() ~34% faster on my machine.
+
+        No new tests, no behavior change.
+
+        * platform/mac/URLMac.mm:
+        (WebCore::URL::createCFURL):
+
 2014-10-23  Myles C. Maxfield  <mmaxfield@apple.com>
 
         Carets in GMail and iCloud compositions are the foreground text color
 2014-10-23  Myles C. Maxfield  <mmaxfield@apple.com>
 
         Carets in GMail and iCloud compositions are the foreground text color
index 06a6a0835f460678ac3e9f3db3e26cf481e2613b..e5a7d61e369b0c1b67947aee05d5c1bb5a4aa57f 100644 (file)
@@ -62,6 +62,11 @@ RetainPtr<CFURLRef> URL::createCFURL() const
         return reinterpret_cast<CFURLRef>(adoptNS([[NSURL alloc] initWithString:@""]).get());
     }
 
         return reinterpret_cast<CFURLRef>(adoptNS([[NSURL alloc] initWithString:@""]).get());
     }
 
+    // Fast path if the input data is 8-bit to avoid copying into a temporary buffer.
+    if (LIKELY(m_string.is8Bit()))
+        return createCFURLFromBuffer(reinterpret_cast<const char*>(m_string.characters8()), m_string.length());
+
+    // Slower path.
     URLCharBuffer buffer;
     copyToBuffer(buffer);
     return createCFURLFromBuffer(buffer.data(), buffer.size());
     URLCharBuffer buffer;
     copyToBuffer(buffer);
     return createCFURLFromBuffer(buffer.data(), buffer.size());