| Index: base/message_loop/message_loop.h
|
| diff --git a/base/message_loop/message_loop.h b/base/message_loop/message_loop.h
|
| index fd7596a79204ed89291f32b2f9135108a73b2882..f2f89d0574dc05f70102cc592fa0250860e13031 100644
|
| --- a/base/message_loop/message_loop.h
|
| +++ b/base/message_loop/message_loop.h
|
| @@ -114,7 +114,8 @@ class BASE_EXPORT MessageLoop : public MessagePump::Delegate {
|
| explicit MessageLoop(Type type = TYPE_DEFAULT);
|
| // Creates a TYPE_CUSTOM MessageLoop with the supplied MessagePump, which must
|
| // be non-NULL.
|
| - explicit MessageLoop(scoped_ptr<base::MessagePump> pump);
|
| + explicit MessageLoop(scoped_ptr<MessagePump> pump);
|
| +
|
| ~MessageLoop() override;
|
|
|
| // Returns the MessageLoop object for the current thread, or null if none.
|
| @@ -394,10 +395,6 @@ class BASE_EXPORT MessageLoop : public MessagePump::Delegate {
|
| // Returns true if the message loop is "idle". Provided for testing.
|
| bool IsIdleForTesting();
|
|
|
| - // Wakes up the message pump. Can be called on any thread. The caller is
|
| - // responsible for synchronizing ScheduleWork() calls.
|
| - void ScheduleWork();
|
| -
|
| // Returns the TaskAnnotator which is used to add debug information to posted
|
| // tasks.
|
| debug::TaskAnnotator* task_annotator() { return &task_annotator_; }
|
| @@ -411,9 +408,33 @@ class BASE_EXPORT MessageLoop : public MessagePump::Delegate {
|
|
|
| private:
|
| friend class RunLoop;
|
| + friend class internal::IncomingTaskQueue;
|
| + friend class ScheduleWorkTest;
|
| + friend class Thread;
|
| +
|
| + using MessagePumpFactoryCallback = Callback<scoped_ptr<MessagePump>()>;
|
|
|
| - // Configures various members for the two constructors.
|
| - void Init();
|
| + // Creates a MessageLoop without binding to a thread.
|
| + // If |type| is TYPE_CUSTOM non-null |pump_factory| must be also given
|
| + // to create a message pump for this message loop. Otherwise a default
|
| + // message pump for the |type| is created.
|
| + //
|
| + // It is valid to call this to create a new message loop on one thread,
|
| + // and then pass it to the thread where the message loop actually runs.
|
| + // The message loop's BindToCurrentThread() method must be called on the
|
| + // thread the message loop runs on, before calling Run().
|
| + // Before BindToCurrentThread() is called only Post*Task() functions can
|
| + // be called on the message loop.
|
| + scoped_ptr<MessageLoop> CreateUnbound(
|
| + Type type,
|
| + MessagePumpFactoryCallback pump_factory);
|
| +
|
| + // Common private constructor. Other constructors delegate the initialization
|
| + // to this constructor.
|
| + MessageLoop(Type type, MessagePumpFactoryCallback pump_factory);
|
| +
|
| + // Configure various members and bind this message loop to the current thread.
|
| + void BindToCurrentThread();
|
|
|
| // Invokes the actual run loop using the message pump.
|
| void RunHandler();
|
| @@ -437,6 +458,10 @@ class BASE_EXPORT MessageLoop : public MessagePump::Delegate {
|
| // empty.
|
| void ReloadWorkQueue();
|
|
|
| + // Wakes up the message pump. Can be called on any thread. The caller is
|
| + // responsible for synchronizing ScheduleWork() calls.
|
| + void ScheduleWork();
|
| +
|
| // Start recording histogram info about events and action IF it was enabled
|
| // and IF the statistics recorder can accept a registration of our histogram.
|
| void StartHistogrammer();
|
| @@ -490,6 +515,10 @@ class BASE_EXPORT MessageLoop : public MessagePump::Delegate {
|
| bool os_modal_loop_;
|
| #endif
|
|
|
| + // pump_factory_.Run() is called to create a message pump for this loop
|
| + // if type_ is TYPE_CUSTOM and pump_ is null.
|
| + MessagePumpFactoryCallback pump_factory_;
|
| +
|
| std::string thread_name_;
|
| // A profiling histogram showing the counts of various messages and events.
|
| HistogramBase* message_histogram_;
|
|
|