summaryrefslogtreecommitdiff
path: root/Source/JavaScriptCore/heap/HeapTimer.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'Source/JavaScriptCore/heap/HeapTimer.cpp')
-rw-r--r--Source/JavaScriptCore/heap/HeapTimer.cpp74
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)