[ARMv7] Skip one particularly expensive fastFree() alignment check.
authorakling@apple.com <akling@apple.com@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Fri, 27 Jun 2014 18:06:41 +0000 (18:06 +0000)
committerakling@apple.com <akling@apple.com@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Fri, 27 Jun 2014 18:06:41 +0000 (18:06 +0000)
<https://webkit.org/b/134402>

The size class alignment check in fastFree() was crazy expensive on ARMv7
due to its use of modulo. Disabling it shaves 470ms off of PLT main thread
time in the web process.

Note that this was very hard to identify in profiles due to TCO.

Reviewed by Gavin Barraclough.

* wtf/FastMalloc.cpp:
(WTF::TCMalloc_ThreadCache::CreateCacheIfNecessary):

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

Source/WTF/ChangeLog
Source/WTF/wtf/FastMalloc.cpp

index 7df6a88..eb7ad01 100644 (file)
@@ -1,3 +1,19 @@
+2014-06-27  Andreas Kling  <akling@apple.com>
+
+        [ARMv7] Skip one particularly expensive fastFree() alignment check.
+        <https://webkit.org/b/134402>
+
+        The size class alignment check in fastFree() was crazy expensive on ARMv7
+        due to its use of modulo. Disabling it shaves 470ms off of PLT main thread
+        time in the web process.
+
+        Note that this was very hard to identify in profiles due to TCO.
+
+        Reviewed by Gavin Barraclough.
+
+        * wtf/FastMalloc.cpp:
+        (WTF::TCMalloc_ThreadCache::CreateCacheIfNecessary):
+
 2014-06-26  Andreas Kling  <akling@apple.com>
 
         Bump FastMalloc thread cache max size to 1MB on iOS.
index 2311247..b87cb07 100644 (file)
@@ -4168,7 +4168,9 @@ static ALWAYS_INLINE void do_free(void* ptr) {
 
   if (cl) {
     size_t byteSizeForClass = ByteSizeForClass(cl);
+#if !(CPU(ARM_THUMB2) && !CPU(APPLE_ARMV7S))
     RELEASE_ASSERT(!((reinterpret_cast<char*>(ptr) - reinterpret_cast<char*>(span->start << kPageShift)) % byteSizeForClass));
+#endif
     pageheap->CacheSizeClass(p, cl);
 
 #ifndef NO_TCMALLOC_SAMPLES