Title: [214936] trunk/Source/_javascript_Core
Revision
214936
Author
[email protected]
Date
2017-04-05 00:58:02 -0700 (Wed, 05 Apr 2017)

Log Message

Implement PromiseDeferredTimer for non CF based ports
https://bugs.webkit.org/show_bug.cgi?id=170391

Reviewed by Yusuke Suzuki.

RunLoop handling is only implemented for CF causing several wasm tests to fail for other ports.

* jsc.cpp:
(runJSC): Remove CF ifdefs.
* runtime/PromiseDeferredTimer.cpp:
(JSC::PromiseDeferredTimer::doWork): Add non CF implementation using WTF RunLoop.
(JSC::PromiseDeferredTimer::runRunLoop): Ditto.
* runtime/PromiseDeferredTimer.h:

Modified Paths

Diff

Modified: trunk/Source/_javascript_Core/ChangeLog (214935 => 214936)


--- trunk/Source/_javascript_Core/ChangeLog	2017-04-05 07:53:43 UTC (rev 214935)
+++ trunk/Source/_javascript_Core/ChangeLog	2017-04-05 07:58:02 UTC (rev 214936)
@@ -1,5 +1,21 @@
 2017-04-05  Carlos Garcia Campos  <[email protected]>
 
+        Implement PromiseDeferredTimer for non CF based ports
+        https://bugs.webkit.org/show_bug.cgi?id=170391
+
+        Reviewed by Yusuke Suzuki.
+
+        RunLoop handling is only implemented for CF causing several wasm tests to fail for other ports.
+
+        * jsc.cpp:
+        (runJSC): Remove CF ifdefs.
+        * runtime/PromiseDeferredTimer.cpp:
+        (JSC::PromiseDeferredTimer::doWork): Add non CF implementation using WTF RunLoop.
+        (JSC::PromiseDeferredTimer::runRunLoop): Ditto.
+        * runtime/PromiseDeferredTimer.h:
+
+2017-04-05  Carlos Garcia Campos  <[email protected]>
+
         WebAssembly: several tests added in r214504 crash when building with GCC
         https://bugs.webkit.org/show_bug.cgi?id=170390
 

Modified: trunk/Source/_javascript_Core/jsc.cpp (214935 => 214936)


--- trunk/Source/_javascript_Core/jsc.cpp	2017-04-05 07:53:43 UTC (rev 214935)
+++ trunk/Source/_javascript_Core/jsc.cpp	2017-04-05 07:58:02 UTC (rev 214936)
@@ -3812,9 +3812,7 @@
 
         vm.drainMicrotasks();
     }
-#if USE(CF)
     vm.promiseDeferredTimer->runRunLoop();
-#endif
 
     result = success && (asyncTestExpectedPasses == asyncTestPasses) ? 0 : 3;
 

Modified: trunk/Source/_javascript_Core/runtime/PromiseDeferredTimer.cpp (214935 => 214936)


--- trunk/Source/_javascript_Core/runtime/PromiseDeferredTimer.cpp	2017-04-05 07:53:43 UTC (rev 214935)
+++ trunk/Source/_javascript_Core/runtime/PromiseDeferredTimer.cpp	2017-04-05 07:58:02 UTC (rev 214936)
@@ -29,8 +29,8 @@
 #include "JSPromiseDeferred.h"
 #include "StrongInlines.h"
 #include "VM.h"
-
 #include <wtf/Locker.h>
+#include <wtf/RunLoop.h>
 
 namespace JSC {
 
@@ -68,22 +68,28 @@
         }
     }
 
+    if (m_pendingPromises.isEmpty() && m_shouldStopRunLoopWhenAllPromisesFinish)
 #if USE(CF)
-    if (m_pendingPromises.isEmpty() && m_shouldStopRunLoopWhenAllPromisesFinish)
         CFRunLoopStop(m_runLoop.get());
+#else
+        RunLoop::current().stop();
 #endif
 }
 
-#if USE(CF)
 void PromiseDeferredTimer::runRunLoop()
 {
     ASSERT(!m_vm->currentThreadIsHoldingAPILock());
+#if USE(CF)
     ASSERT(CFRunLoopGetCurrent() == m_runLoop.get());
+#endif
     m_shouldStopRunLoopWhenAllPromisesFinish = true;
     if (m_pendingPromises.size())
+#if USE(CF)
         CFRunLoopRun();
+#else
+        RunLoop::run();
+#endif
 }
-#endif
 
 void PromiseDeferredTimer::addPendingPromise(JSPromiseDeferred* ticket, Vector<Strong<JSCell>>&& dependencies)
 {

Modified: trunk/Source/_javascript_Core/runtime/PromiseDeferredTimer.h (214935 => 214936)


--- trunk/Source/_javascript_Core/runtime/PromiseDeferredTimer.h	2017-04-05 07:53:43 UTC (rev 214935)
+++ trunk/Source/_javascript_Core/runtime/PromiseDeferredTimer.h	2017-04-05 07:58:02 UTC (rev 214936)
@@ -61,17 +61,14 @@
     void scheduleBlockedTask(JSPromiseDeferred*, Task&&);
 
     void stopRunningTasks() { m_runTasks = false; }
-#if USE(CF)
+
     JS_EXPORT_PRIVATE void runRunLoop();
-#endif
 
 private:
     HashMap<JSPromiseDeferred*, Vector<Strong<JSCell>>> m_pendingPromises;
     Lock m_taskLock;
     bool m_runTasks { true };
-#if USE(CF)
     bool m_shouldStopRunLoopWhenAllPromisesFinish { false };
-#endif
     Vector<std::tuple<JSPromiseDeferred*, Task>> m_tasks;
     HashMap<JSPromiseDeferred*, Vector<Task>> m_blockedTasks;
 };
_______________________________________________
webkit-changes mailing list
[email protected]
https://lists.webkit.org/mailman/listinfo/webkit-changes

Reply via email to