diff options
Diffstat (limited to 'Source/JavaScriptCore/heap/HeapTimer.cpp')
-rw-r--r-- | Source/JavaScriptCore/heap/HeapTimer.cpp | 74 |
1 files changed, 7 insertions, 67 deletions
diff --git a/Source/JavaScriptCore/heap/HeapTimer.cpp b/Source/JavaScriptCore/heap/HeapTimer.cpp index 4cda04992..1331b0ac0 100644 --- a/Source/JavaScriptCore/heap/HeapTimer.cpp +++ b/Source/JavaScriptCore/heap/HeapTimer.cpp @@ -26,18 +26,15 @@ #include "config.h" #include "HeapTimer.h" -#include "GCActivityCallback.h" -#include "IncrementalSweeper.h" +#include "APIShims.h" #include "JSObject.h" #include "JSString.h" -#include "JSCInlines.h" + #include <wtf/MainThread.h> #include <wtf/Threading.h> #if PLATFORM(EFL) #include <Ecore.h> -#elif USE(GLIB) -#include <glib.h> #endif namespace JSC { @@ -65,7 +62,7 @@ HeapTimer::HeapTimer(VM* vm, CFRunLoopRef runLoop) m_context.info = &vm->apiLock(); m_context.retain = retainAPILock; m_context.release = releaseAPILock; - m_timer = adoptCF(CFRunLoopTimerCreate(kCFAllocatorDefault, s_decade, s_decade, 0, 0, HeapTimer::timerDidFire, &m_context)); + m_timer = adoptCF(CFRunLoopTimerCreate(0, s_decade, s_decade, 0, 0, HeapTimer::timerDidFire, &m_context)); CFRunLoopAddTimer(m_runLoop.get(), m_timer.get(), kCFRunLoopCommonModes); } @@ -88,17 +85,15 @@ void HeapTimer::timerDidFire(CFRunLoopTimerRef timer, void* context) } HeapTimer* heapTimer = 0; - if (vm->heap.fullActivityCallback() && vm->heap.fullActivityCallback()->m_timer.get() == timer) - heapTimer = vm->heap.fullActivityCallback(); - else if (vm->heap.edenActivityCallback() && vm->heap.edenActivityCallback()->m_timer.get() == timer) - heapTimer = vm->heap.edenActivityCallback(); + if (vm->heap.activityCallback() && vm->heap.activityCallback()->m_timer.get() == timer) + heapTimer = vm->heap.activityCallback(); else if (vm->heap.sweeper()->m_timer.get() == timer) heapTimer = vm->heap.sweeper(); else RELEASE_ASSERT_NOT_REACHED(); { - JSLockHolder locker(vm); + APIEntryShim shim(vm); heapTimer->doWork(); } @@ -136,67 +131,12 @@ bool HeapTimer::timerEvent(void* info) { HeapTimer* agent = static_cast<HeapTimer*>(info); - JSLockHolder locker(agent->m_vm); + APIEntryShim shim(agent->m_vm); agent->doWork(); agent->m_timer = 0; return ECORE_CALLBACK_CANCEL; } - -#elif USE(GLIB) - -static GSourceFuncs heapTimerSourceFunctions = { - nullptr, // prepare - nullptr, // check - // dispatch - [](GSource* source, GSourceFunc callback, gpointer userData) -> gboolean - { - if (g_source_get_ready_time(source) == -1) - return G_SOURCE_CONTINUE; - g_source_set_ready_time(source, -1); - return callback(userData); - }, - nullptr, // finalize - nullptr, // closure_callback - nullptr, // closure_marshall -}; - -HeapTimer::HeapTimer(VM* vm) - : m_vm(vm) - , m_apiLock(&vm->apiLock()) - , m_timer(adoptGRef(g_source_new(&heapTimerSourceFunctions, sizeof(GSource)))) -{ - g_source_set_name(m_timer.get(), "[JavaScriptCore] HeapTimer"); - g_source_set_callback(m_timer.get(), [](gpointer userData) -> gboolean { - static_cast<HeapTimer*>(userData)->timerDidFire(); - return G_SOURCE_CONTINUE; - }, this, nullptr); - g_source_attach(m_timer.get(), g_main_context_get_thread_default()); -} - -HeapTimer::~HeapTimer() -{ - g_source_destroy(m_timer.get()); -} - -void HeapTimer::timerDidFire() -{ - m_apiLock->lock(); - - if (!m_apiLock->vm()) { - // The VM has been destroyed, so we should just give up. - m_apiLock->unlock(); - return; - } - - { - JSLockHolder locker(m_vm); - doWork(); - } - - m_apiLock->unlock(); -} - #else HeapTimer::HeapTimer(VM* vm) : m_vm(vm) |