[Qt] GC should be parallel on Qt platform
authorcommit-queue@webkit.org <commit-queue@webkit.org@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Thu, 26 Jan 2012 10:22:25 +0000 (10:22 +0000)
committercommit-queue@webkit.org <commit-queue@webkit.org@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Thu, 26 Jan 2012 10:22:25 +0000 (10:22 +0000)
https://bugs.webkit.org/show_bug.cgi?id=73309

Patch by Roland Takacs <takacs.roland@stud.u-szeged.hu> on 2012-01-26
Reviewed by Zoltan Herczeg.

These changes made the parallel gc feature available for Qt port.
The implementation of "registerGCThread" and "isMainThreadOrGCThread"
is moved from MainThreadMac.mm to the common MainThread.cpp to make
them available for other platforms.

Measurement results:
V8           speed-up:  1.071x as fast  [From: 746.1ms  To: 696.4ms ]
WindScorpion speed-up:  1.082x as fast  [From: 3490.4ms To: 3226.7ms]
V8 Splay     speed-up:  1.158x as fast  [From: 145.8ms  To: 125.9ms ]

Tested on Intel(R) Core(TM) i5-2320 CPU @ 3.00GHz with 4-core.

* wtf/MainThread.cpp:
(WTF):
(WTF::registerGCThread):
(WTF::isMainThreadOrGCThread):
* wtf/Platform.h:
* wtf/mac/MainThreadMac.mm:

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

Source/JavaScriptCore/ChangeLog
Source/JavaScriptCore/wtf/MainThread.cpp
Source/JavaScriptCore/wtf/Platform.h
Source/JavaScriptCore/wtf/mac/MainThreadMac.mm

index f4d8a0e..7624e27 100644 (file)
@@ -1,3 +1,29 @@
+2012-01-26  Roland Takacs  <takacs.roland@stud.u-szeged.hu>
+
+        [Qt] GC should be parallel on Qt platform
+        https://bugs.webkit.org/show_bug.cgi?id=73309
+
+        Reviewed by Zoltan Herczeg.
+
+        These changes made the parallel gc feature available for Qt port.
+        The implementation of "registerGCThread" and "isMainThreadOrGCThread"
+        is moved from MainThreadMac.mm to the common MainThread.cpp to make
+        them available for other platforms.
+
+        Measurement results:
+        V8           speed-up:  1.071x as fast  [From: 746.1ms  To: 696.4ms ]
+        WindScorpion speed-up:  1.082x as fast  [From: 3490.4ms To: 3226.7ms]
+        V8 Splay     speed-up:  1.158x as fast  [From: 145.8ms  To: 125.9ms ]
+
+        Tested on Intel(R) Core(TM) i5-2320 CPU @ 3.00GHz with 4-core.
+
+        * wtf/MainThread.cpp:
+        (WTF):
+        (WTF::registerGCThread):
+        (WTF::isMainThreadOrGCThread):
+        * wtf/Platform.h:
+        * wtf/mac/MainThreadMac.mm:
+
 2012-01-26  Andy Estes  <aestes@apple.com>
 
         REGRESSION (r105555): Incorrect use of OS() macro breaks OwnPtr when used with Win32 data types
index 9151265..cc8c634 100644 (file)
@@ -34,6 +34,7 @@
 #include "Functional.h"
 #include "StdLibExtras.h"
 #include "Threading.h"
+#include <wtf/ThreadSpecific.h>
 
 #if PLATFORM(CHROMIUM)
 #error Chromium uses a different main thread implementation
@@ -249,4 +250,33 @@ bool isMainThread()
 }
 #endif
 
+#if ENABLE(PARALLEL_GC)
+static ThreadSpecific<bool>* isGCThread;
+
+void registerGCThread()
+{
+    if (!isGCThread) {
+        // This happens if we're running in a process that doesn't care about
+        // MainThread.
+        return;
+    }
+
+    **isGCThread = true;
+}
+
+bool isMainThreadOrGCThread()
+{
+    if (isGCThread->isSet() && **isGCThread)
+        return true;
+
+    return isMainThread();
+}
+#elif PLATFORM(MAC)
+// This is necessary because JavaScriptCore.exp doesn't support preprocessor macros.
+bool isMainThreadOrGCThread()
+{
+    return isMainThread();
+}
+#endif
+
 } // namespace WTF
index 90debd9..26e3b75 100644 (file)
 #define ENABLE_COMPARE_AND_SWAP 1
 #endif
 
-#if !defined(ENABLE_PARALLEL_GC) && (PLATFORM(MAC) || PLATFORM(IOS)) && ENABLE(COMPARE_AND_SWAP)
+#if !defined(ENABLE_PARALLEL_GC) && (PLATFORM(MAC) || PLATFORM(IOS) || PLATFORM(QT)) && ENABLE(COMPARE_AND_SWAP)
 #define ENABLE_PARALLEL_GC 1
 #endif
 
index fbc6250..ee57fed 100644 (file)
@@ -145,31 +145,4 @@ bool isMainThread()
     return pthread_equal(pthread_self(), mainThreadPthread);
 }
 
-#if ENABLE(PARALLEL_GC)
-void registerGCThread()
-{
-    if (!isGCThread) {
-        // This happens if we're running in a process that doesn't care about
-        // MainThread.
-        return;
-    }
-
-    **isGCThread = true;
-}
-
-bool isMainThreadOrGCThread()
-{
-    if (isGCThread->isSet() && **isGCThread)
-        return true;
-    
-    return isMainThread();
-}
-#else
-// This is necessary because JavaScriptCore.exp doesn't support preprocessor macros.
-bool isMainThreadOrGCThread()
-{
-    return isMainThread();
-}
-#endif
-
 } // namespace WTF