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
+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
#include "Functional.h"
#include "StdLibExtras.h"
#include "Threading.h"
+#include <wtf/ThreadSpecific.h>
#if PLATFORM(CHROMIUM)
#error Chromium uses a different main thread implementation
}
#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
#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
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