diff options
author | Steve Block <steveblock@google.com> | 2010-04-27 16:31:00 +0100 |
---|---|---|
committer | Steve Block <steveblock@google.com> | 2010-05-11 14:42:12 +0100 |
commit | dcc8cf2e65d1aa555cce12431a16547e66b469ee (patch) | |
tree | 92a8d65cd5383bca9749f5327fb5e440563926e6 /JavaScriptCore/wtf/mac | |
parent | ccac38a6b48843126402088a309597e682f40fe6 (diff) | |
download | external_webkit-dcc8cf2e65d1aa555cce12431a16547e66b469ee.zip external_webkit-dcc8cf2e65d1aa555cce12431a16547e66b469ee.tar.gz external_webkit-dcc8cf2e65d1aa555cce12431a16547e66b469ee.tar.bz2 |
Merge webkit.org at r58033 : Initial merge by git
Change-Id: If006c38561af287c50cd578d251629b51e4d8cd1
Diffstat (limited to 'JavaScriptCore/wtf/mac')
-rw-r--r-- | JavaScriptCore/wtf/mac/MainThreadMac.mm | 29 |
1 files changed, 29 insertions, 0 deletions
diff --git a/JavaScriptCore/wtf/mac/MainThreadMac.mm b/JavaScriptCore/wtf/mac/MainThreadMac.mm index 0ddd5f6..586ef4d 100644 --- a/JavaScriptCore/wtf/mac/MainThreadMac.mm +++ b/JavaScriptCore/wtf/mac/MainThreadMac.mm @@ -29,8 +29,10 @@ #import "config.h" #import "MainThread.h" +#import <CoreFoundation/CoreFoundation.h> #import <Foundation/NSThread.h> #import <wtf/Assertions.h> +#import <wtf/Threading.h> @interface WTFMainThreadCaller : NSObject { } @@ -63,9 +65,36 @@ void initializeMainThreadPlatform() #endif } +static bool isTimerPosted; // This is only accessed on the 'main' thread. + +static void timerFired(CFRunLoopTimerRef timer, void*) +{ + CFRelease(timer); + isTimerPosted = false; + WTF::dispatchFunctionsFromMainThread(); +} + +static void postTimer() +{ + ASSERT(isMainThread()); + + if (isTimerPosted) + return; + + isTimerPosted = true; + CFRunLoopAddTimer(CFRunLoopGetCurrent(), CFRunLoopTimerCreate(0, 0, 0, 0, 0, timerFired, 0), kCFRunLoopCommonModes); +} + + void scheduleDispatchFunctionsOnMainThread() { ASSERT(staticMainThreadCaller); + + if (isMainThread()) { + postTimer(); + return; + } + #if USE(WEB_THREAD) [staticMainThreadCaller performSelector:@selector(call) onThread:webThread withObject:nil waitUntilDone:NO]; #else |