Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(358)

Unified Diff: base/message_loop/message_pump_mac.mm

Issue 333473002: Add a CFRunLoop mode for message loop tasks (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Incorporate review feedback Created 6 years, 6 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « base/message_loop/message_pump_mac.h ('k') | no next file » | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: base/message_loop/message_pump_mac.mm
diff --git a/base/message_loop/message_pump_mac.mm b/base/message_loop/message_pump_mac.mm
index 25aac17f2672c78b503f6bd9aa35b8be95a6bcc3..97b7aa2d6d9dd9b02f87ae3e2fe17b3a2b1142b7 100644
--- a/base/message_loop/message_pump_mac.mm
+++ b/base/message_loop/message_pump_mac.mm
@@ -68,6 +68,10 @@ void SetTimerTolerance(CFRunLoopTimerRef timer, CFTimeInterval tolerance) {
namespace base {
+// static
+const CFStringRef kMessageLoopExclusiveRunLoopMode =
+ CFSTR("kMessageLoopExclusiveRunLoopMode");
+
// A scoper for autorelease pools created from message pump run loops.
// Avoids dirtying up the ScopedNSAutoreleasePool interface for the rare
// case where an autorelease pool needs to be passed in.
@@ -124,9 +128,9 @@ class MessagePumpInstrumentation {
0, // order
&MessagePumpInstrumentation::TimerFired,
&timer_context));
- CFRunLoopAddTimer(CFRunLoopGetCurrent(),
- timer_,
- kCFRunLoopCommonModes);
+ CFRunLoopAddTimer(CFRunLoopGetCurrent(), timer_, kCFRunLoopCommonModes);
+ CFRunLoopAddTimer(CFRunLoopGetCurrent(), timer_,
+ kMessageLoopExclusiveRunLoopMode);
}
// Used to track kCFRunLoopEntry.
@@ -333,6 +337,8 @@ MessagePumpCFRunLoopBase::MessagePumpCFRunLoopBase()
RunDelayedWorkTimer,
&timer_context);
CFRunLoopAddTimer(run_loop_, delayed_work_timer_, kCFRunLoopCommonModes);
+ CFRunLoopAddTimer(run_loop_, delayed_work_timer_,
Mark Mentovai 2014/06/12 16:17:13 There’s enough duplication now that I think we sho
ccameron 2014/06/12 17:10:40 Yeah, I was on the bubble about which way to go --
+ kMessageLoopExclusiveRunLoopMode);
CFRunLoopSourceContext source_context = CFRunLoopSourceContext();
source_context.info = this;
@@ -341,12 +347,16 @@ MessagePumpCFRunLoopBase::MessagePumpCFRunLoopBase()
1, // priority
&source_context);
CFRunLoopAddSource(run_loop_, work_source_, kCFRunLoopCommonModes);
+ CFRunLoopAddSource(run_loop_, work_source_,
+ kMessageLoopExclusiveRunLoopMode);
source_context.perform = RunIdleWorkSource;
idle_work_source_ = CFRunLoopSourceCreate(NULL, // allocator
2, // priority
&source_context);
CFRunLoopAddSource(run_loop_, idle_work_source_, kCFRunLoopCommonModes);
+ CFRunLoopAddSource(
+ run_loop_, idle_work_source_, kCFRunLoopCommonModes);
source_context.perform = RunNestingDeferredWorkSource;
nesting_deferred_work_source_ = CFRunLoopSourceCreate(NULL, // allocator
@@ -354,6 +364,8 @@ MessagePumpCFRunLoopBase::MessagePumpCFRunLoopBase()
&source_context);
CFRunLoopAddSource(run_loop_, nesting_deferred_work_source_,
kCFRunLoopCommonModes);
+ CFRunLoopAddSource(run_loop_, nesting_deferred_work_source_,
+ kMessageLoopExclusiveRunLoopMode);
CFRunLoopObserverContext observer_context = CFRunLoopObserverContext();
observer_context.info = this;
@@ -365,6 +377,8 @@ MessagePumpCFRunLoopBase::MessagePumpCFRunLoopBase()
StartOrEndWaitObserver,
&observer_context);
CFRunLoopAddObserver(run_loop_, pre_wait_observer_, kCFRunLoopCommonModes);
+ CFRunLoopAddObserver(run_loop_, pre_wait_observer_,
+ kMessageLoopExclusiveRunLoopMode);
pre_source_observer_ = CFRunLoopObserverCreate(NULL, // allocator
kCFRunLoopBeforeSources,
@@ -373,6 +387,8 @@ MessagePumpCFRunLoopBase::MessagePumpCFRunLoopBase()
PreSourceObserver,
&observer_context);
CFRunLoopAddObserver(run_loop_, pre_source_observer_, kCFRunLoopCommonModes);
+ CFRunLoopAddObserver(run_loop_, pre_source_observer_,
+ kMessageLoopExclusiveRunLoopMode);
enter_exit_observer_ = CFRunLoopObserverCreate(NULL, // allocator
kCFRunLoopEntry |
@@ -382,6 +398,8 @@ MessagePumpCFRunLoopBase::MessagePumpCFRunLoopBase()
EnterExitObserver,
&observer_context);
CFRunLoopAddObserver(run_loop_, enter_exit_observer_, kCFRunLoopCommonModes);
+ CFRunLoopAddObserver(run_loop_, enter_exit_observer_,
+ kMessageLoopExclusiveRunLoopMode);
}
// Ideally called on the run loop thread. If other run loops were running
@@ -390,27 +408,41 @@ MessagePumpCFRunLoopBase::MessagePumpCFRunLoopBase()
MessagePumpCFRunLoopBase::~MessagePumpCFRunLoopBase() {
CFRunLoopRemoveObserver(run_loop_, enter_exit_observer_,
kCFRunLoopCommonModes);
+ CFRunLoopRemoveObserver(run_loop_, enter_exit_observer_,
+ kMessageLoopExclusiveRunLoopMode);
CFRelease(enter_exit_observer_);
CFRunLoopRemoveObserver(run_loop_, pre_source_observer_,
kCFRunLoopCommonModes);
+ CFRunLoopRemoveObserver(run_loop_, pre_source_observer_,
+ kMessageLoopExclusiveRunLoopMode);
CFRelease(pre_source_observer_);
CFRunLoopRemoveObserver(run_loop_, pre_wait_observer_,
kCFRunLoopCommonModes);
+ CFRunLoopRemoveObserver(run_loop_, pre_wait_observer_,
+ kMessageLoopExclusiveRunLoopMode);
CFRelease(pre_wait_observer_);
CFRunLoopRemoveSource(run_loop_, nesting_deferred_work_source_,
kCFRunLoopCommonModes);
+ CFRunLoopRemoveSource(run_loop_, nesting_deferred_work_source_,
+ kMessageLoopExclusiveRunLoopMode);
CFRelease(nesting_deferred_work_source_);
CFRunLoopRemoveSource(run_loop_, idle_work_source_, kCFRunLoopCommonModes);
+ CFRunLoopRemoveSource(run_loop_, idle_work_source_,
+ kMessageLoopExclusiveRunLoopMode);
CFRelease(idle_work_source_);
CFRunLoopRemoveSource(run_loop_, work_source_, kCFRunLoopCommonModes);
+ CFRunLoopRemoveSource(run_loop_, work_source_,
+ kMessageLoopExclusiveRunLoopMode);
CFRelease(work_source_);
CFRunLoopRemoveTimer(run_loop_, delayed_work_timer_, kCFRunLoopCommonModes);
+ CFRunLoopRemoveTimer(run_loop_, delayed_work_timer_,
+ kMessageLoopExclusiveRunLoopMode);
CFRelease(delayed_work_timer_);
CFRelease(run_loop_);
@@ -800,10 +832,14 @@ MessagePumpNSRunLoop::MessagePumpNSRunLoop()
0, // priority
&source_context);
CFRunLoopAddSource(run_loop(), quit_source_, kCFRunLoopCommonModes);
+ CFRunLoopAddSource(run_loop(), quit_source_,
+ kMessageLoopExclusiveRunLoopMode);
}
MessagePumpNSRunLoop::~MessagePumpNSRunLoop() {
CFRunLoopRemoveSource(run_loop(), quit_source_, kCFRunLoopCommonModes);
+ CFRunLoopRemoveSource(run_loop(), quit_source_,
+ kMessageLoopExclusiveRunLoopMode);
CFRelease(quit_source_);
}
« no previous file with comments | « base/message_loop/message_pump_mac.h ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698