diff options
| author | Ben Murdoch <benm@google.com> | 2011-05-05 14:36:32 +0100 |
|---|---|---|
| committer | Ben Murdoch <benm@google.com> | 2011-05-10 15:38:30 +0100 |
| commit | f05b935882198ccf7d81675736e3aeb089c5113a (patch) | |
| tree | 4ea0ca838d9ef1b15cf17ddb3928efb427c7e5a1 /JavaScriptCore/runtime/GCActivityCallbackCF.cpp | |
| parent | 60fbdcc62bced8db2cb1fd233cc4d1e4ea17db1b (diff) | |
| download | external_webkit-f05b935882198ccf7d81675736e3aeb089c5113a.zip external_webkit-f05b935882198ccf7d81675736e3aeb089c5113a.tar.gz external_webkit-f05b935882198ccf7d81675736e3aeb089c5113a.tar.bz2 | |
Merge WebKit at r74534: Initial merge by git.
Change-Id: I6ccd1154fa1b19c2ec2a66878eb675738735f1eb
Diffstat (limited to 'JavaScriptCore/runtime/GCActivityCallbackCF.cpp')
| -rw-r--r-- | JavaScriptCore/runtime/GCActivityCallbackCF.cpp | 19 |
1 files changed, 16 insertions, 3 deletions
diff --git a/JavaScriptCore/runtime/GCActivityCallbackCF.cpp b/JavaScriptCore/runtime/GCActivityCallbackCF.cpp index 45329ca..7168a05 100644 --- a/JavaScriptCore/runtime/GCActivityCallbackCF.cpp +++ b/JavaScriptCore/runtime/GCActivityCallbackCF.cpp @@ -47,10 +47,12 @@ struct DefaultGCActivityCallbackPlatformData { static void trigger(CFRunLoopTimerRef, void *info); RetainPtr<CFRunLoopTimerRef> timer; + RetainPtr<CFRunLoopRef> runLoop; CFRunLoopTimerContext context; }; const CFTimeInterval decade = 60 * 60 * 24 * 365 * 10; +const CFTimeInterval triggerInterval = 2; // seconds void DefaultGCActivityCallbackPlatformData::trigger(CFRunLoopTimerRef, void *info) { @@ -65,21 +67,32 @@ DefaultGCActivityCallback::DefaultGCActivityCallback(Heap* heap) memset(&d->context, '\0', sizeof(CFRunLoopTimerContext)); d->context.info = heap; + d->runLoop = CFRunLoopGetCurrent(); d->timer.adoptCF(CFRunLoopTimerCreate(0, decade, decade, 0, 0, DefaultGCActivityCallbackPlatformData::trigger, &d->context)); - CFRunLoopAddTimer(CFRunLoopGetCurrent(), d->timer.get(), kCFRunLoopCommonModes); + CFRunLoopAddTimer(d->runLoop.get(), d->timer.get(), kCFRunLoopCommonModes); } DefaultGCActivityCallback::~DefaultGCActivityCallback() { - CFRunLoopRemoveTimer(CFRunLoopGetCurrent(), d->timer.get(), kCFRunLoopCommonModes); + CFRunLoopRemoveTimer(d->runLoop.get(), d->timer.get(), kCFRunLoopCommonModes); CFRunLoopTimerInvalidate(d->timer.get()); d->context.info = 0; + d->runLoop = 0; d->timer = 0; } void DefaultGCActivityCallback::operator()() { - CFRunLoopTimerSetNextFireDate(d->timer.get(), CFAbsoluteTimeGetCurrent() + 2); + CFRunLoopTimerSetNextFireDate(d->timer.get(), CFAbsoluteTimeGetCurrent() + triggerInterval); +} + +void DefaultGCActivityCallback::synchronize() +{ + if (CFRunLoopGetCurrent() == d->runLoop.get()) + return; + CFRunLoopRemoveTimer(d->runLoop.get(), d->timer.get(), kCFRunLoopCommonModes); + d->runLoop = CFRunLoopGetCurrent(); + CFRunLoopAddTimer(d->runLoop.get(), d->timer.get(), kCFRunLoopCommonModes); } } |
