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..e7228a7b31ec94b3a25c65a6aa676a0ed514b304 100644 |
--- a/base/message_loop/message_loop.h |
+++ b/base/message_loop/message_loop.h |
@@ -11,7 +11,6 @@ |
#include "base/base_export.h" |
#include "base/basictypes.h" |
#include "base/callback_forward.h" |
-#include "base/debug/task_annotator.h" |
#include "base/location.h" |
#include "base/memory/ref_counted.h" |
#include "base/memory/scoped_ptr.h" |
@@ -109,12 +108,36 @@ class BASE_EXPORT MessageLoop : public MessagePump::Delegate { |
#endif // defined(OS_ANDROID) |
}; |
+ struct BASE_EXPORT Options { |
+ using MessagePumpFactory = Callback<scoped_ptr<MessagePump>()>; |
+ Options(); |
+ ~Options(); |
+ |
+ // Specify the type of message loop. |
+ // This is ignored if message_pump_factory.is_null() is false. |
+ MessageLoop::Type message_loop_type; |
+ |
+ // Used to create the MessagePump for the MessageLoop. |
+ // If message_pump_factory.is_null() is true, then a MessagePump appropriate |
+ // for |message_loop_type| is created. Setting this forces the |
+ // MessageLoop::Type to TYPE_CUSTOM. |
+ MessagePumpFactory message_pump_factory; |
+ |
+ // If non-null incoming_task_queue is specified this message loop will |
+ // use it as its incoming task queue. |
+ scoped_refptr<internal::IncomingTaskQueue> incoming_task_queue; |
+ }; |
+ |
// Normally, it is not necessary to instantiate a MessageLoop. Instead, it |
// is typical to make use of the current thread's MessageLoop instance. |
+ explicit MessageLoop(const Options& options); |
+ |
+ // Creates a MessageLoop for the supplied type. This constructor is used |
+ // only for testing. |
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); |
+ // be non-NULL. This constructor is used only for testing. |
+ explicit MessageLoop(scoped_ptr<MessagePump> pump); |
~MessageLoop() override; |
// Returns the MessageLoop object for the current thread, or null if none. |
@@ -400,7 +423,9 @@ class BASE_EXPORT MessageLoop : public MessagePump::Delegate { |
// Returns the TaskAnnotator which is used to add debug information to posted |
// tasks. |
- debug::TaskAnnotator* task_annotator() { return &task_annotator_; } |
+ debug::TaskAnnotator* task_annotator() { |
+ return incoming_task_queue_->task_annotator(); |
+ } |
// Runs the specified PendingTask. |
void RunTask(const PendingTask& pending_task); |
@@ -412,7 +437,7 @@ class BASE_EXPORT MessageLoop : public MessagePump::Delegate { |
private: |
friend class RunLoop; |
- // Configures various members for the two constructors. |
+ // Configures various members for the constructors. |
void Init(); |
// Invokes the actual run loop using the message pump. |
@@ -498,8 +523,6 @@ class BASE_EXPORT MessageLoop : public MessagePump::Delegate { |
ObserverList<TaskObserver> task_observers_; |
- debug::TaskAnnotator task_annotator_; |
- |
scoped_refptr<internal::IncomingTaskQueue> incoming_task_queue_; |
// The message loop proxy associated with this message loop. |