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

Unified Diff: base/message_loop/message_pump_mac.h

Issue 2889293002: Filter run loop modes in message_pump_mac.mm (Closed)
Patch Set: respond to comments, sort methods Created 3 years, 7 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 | « no previous file | base/message_loop/message_pump_mac.mm » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: base/message_loop/message_pump_mac.h
diff --git a/base/message_loop/message_pump_mac.h b/base/message_loop/message_pump_mac.h
index f0766eb860e592d5cab96c93db7ae57d36ce00bc..763c6b4868d43e19e8d3ee4198bb19586a3a67c2 100644
--- a/base/message_loop/message_pump_mac.h
+++ b/base/message_loop/message_pump_mac.h
@@ -79,26 +79,29 @@ typedef NSAutoreleasePool AutoreleasePoolType;
#endif // !defined(__OBJC__) || __has_feature(objc_arc)
class BASE_EXPORT MessagePumpCFRunLoopBase : public MessagePump {
+ public:
+ // MessagePump:
+ void Run(Delegate* delegate) override;
+ void ScheduleWork() override;
+ void ScheduleDelayedWork(const TimeTicks& delayed_work_time) override;
+ void SetTimerSlack(TimerSlack timer_slack) override;
+
+ protected:
// Needs access to CreateAutoreleasePool.
friend class MessagePumpScopedAutoreleasePool;
friend class TestMessagePumpCFRunLoopBase;
- public:
- MessagePumpCFRunLoopBase();
+ // Tasks will be pumped in the run loop modes described by |mode_mask|, which
+ // maps bits to the index of an internal array of run loop mode identifiers.
+ explicit MessagePumpCFRunLoopBase(int mode_mask);
~MessagePumpCFRunLoopBase() override;
// Subclasses should implement the work they need to do in MessagePump::Run
// in the DoRun method. MessagePumpCFRunLoopBase::Run calls DoRun directly.
// This arrangement is used because MessagePumpCFRunLoopBase needs to set
// up and tear down things before and after the "meat" of DoRun.
- void Run(Delegate* delegate) override;
virtual void DoRun(Delegate* delegate) = 0;
- void ScheduleWork() override;
- void ScheduleDelayedWork(const TimeTicks& delayed_work_time) override;
- void SetTimerSlack(TimerSlack timer_slack) override;
-
- protected:
// Accessors for private data members to be used by subclasses.
CFRunLoopRef run_loop() const { return run_loop_; }
int nesting_level() const { return nesting_level_; }
@@ -114,6 +117,11 @@ class BASE_EXPORT MessagePumpCFRunLoopBase : public MessagePump {
// objects autoreleased by work to fall into the current autorelease pool.
virtual AutoreleasePoolType* CreateAutoreleasePool();
+ // Invokes function(run_loop_, arg, mode) for all the modes in |mode_mask_|.
+ template <typename Argument>
+ void InvokeForEnabledModes(void function(CFRunLoopRef, Argument, CFStringRef),
+ Argument argument);
+
private:
// Marking timers as invalid at the right time helps significantly reduce
// power use (see the comment in RunDelayedWorkTimer()), however there is no
@@ -190,6 +198,9 @@ class BASE_EXPORT MessagePumpCFRunLoopBase : public MessagePump {
// The thread's run loop.
CFRunLoopRef run_loop_;
+ // Bitmask controlling the run loop modes in which posted tasks may run.
+ const int mode_mask_;
+
// The timer, sources, and observers are described above alongside their
// callbacks.
CFRunLoopTimerRef delayed_work_timer_;
« no previous file with comments | « no previous file | base/message_loop/message_pump_mac.mm » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698