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

Side by Side Diff: base/message_loop/message_loop.h

Issue 61643006: Adds the ability for MessageLoop to take a MessagePump (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: merge 2 trunk and BASE_EXPORT Created 7 years, 1 month 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 unified diff | Download patch | Annotate | Revision Log
« no previous file with comments | « no previous file | base/message_loop/message_loop.cc » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright 2013 The Chromium Authors. All rights reserved. 1 // Copyright 2013 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #ifndef BASE_MESSAGE_LOOP_MESSAGE_LOOP_H_ 5 #ifndef BASE_MESSAGE_LOOP_MESSAGE_LOOP_H_
6 #define BASE_MESSAGE_LOOP_MESSAGE_LOOP_H_ 6 #define BASE_MESSAGE_LOOP_MESSAGE_LOOP_H_
7 7
8 #include <queue> 8 #include <queue>
9 #include <string> 9 #include <string>
10 10
(...skipping 110 matching lines...) Expand 10 before | Expand all | Expand 10 after
121 // TYPE_IO 121 // TYPE_IO
122 // This type of ML also supports asynchronous IO. See also 122 // This type of ML also supports asynchronous IO. See also
123 // MessageLoopForIO. 123 // MessageLoopForIO.
124 // 124 //
125 // TYPE_JAVA 125 // TYPE_JAVA
126 // This type of ML is backed by a Java message handler which is responsible 126 // This type of ML is backed by a Java message handler which is responsible
127 // for running the tasks added to the ML. This is only for use on Android. 127 // for running the tasks added to the ML. This is only for use on Android.
128 // TYPE_JAVA behaves in essence like TYPE_UI, except during construction 128 // TYPE_JAVA behaves in essence like TYPE_UI, except during construction
129 // where it does not use the main thread specific pump factory. 129 // where it does not use the main thread specific pump factory.
130 // 130 //
131 // TYPE_CUSTOM
132 // MessagePump was supplied to constructor.
133 //
131 enum Type { 134 enum Type {
132 TYPE_DEFAULT, 135 TYPE_DEFAULT,
133 TYPE_UI, 136 TYPE_UI,
137 TYPE_CUSTOM,
134 #if defined(TOOLKIT_GTK) 138 #if defined(TOOLKIT_GTK)
135 TYPE_GPU, 139 TYPE_GPU,
136 #endif 140 #endif
137 TYPE_IO, 141 TYPE_IO,
138 #if defined(OS_ANDROID) 142 #if defined(OS_ANDROID)
139 TYPE_JAVA, 143 TYPE_JAVA,
140 #endif // defined(OS_ANDROID) 144 #endif // defined(OS_ANDROID)
141 }; 145 };
142 146
143 // Normally, it is not necessary to instantiate a MessageLoop. Instead, it 147 // Normally, it is not necessary to instantiate a MessageLoop. Instead, it
144 // is typical to make use of the current thread's MessageLoop instance. 148 // is typical to make use of the current thread's MessageLoop instance.
145 explicit MessageLoop(Type type = TYPE_DEFAULT); 149 explicit MessageLoop(Type type = TYPE_DEFAULT);
150 // Creates a TYPE_CUSTOM MessageLoop with the supplied MessagePump, which must
151 // be non-NULL.
152 explicit MessageLoop(scoped_ptr<base::MessagePump> pump);
146 virtual ~MessageLoop(); 153 virtual ~MessageLoop();
147 154
148 // Returns the MessageLoop object for the current thread, or null if none. 155 // Returns the MessageLoop object for the current thread, or null if none.
149 static MessageLoop* current(); 156 static MessageLoop* current();
150 157
151 static void EnableHistogrammer(bool enable_histogrammer); 158 static void EnableHistogrammer(bool enable_histogrammer);
152 159
153 typedef MessagePump* (MessagePumpFactory)(); 160 typedef MessagePump* (MessagePumpFactory)();
154 // Uses the given base::MessagePumpForUIFactory to override the default 161 // Uses the given base::MessagePumpForUIFactory to override the default
155 // MessagePump implementation for 'TYPE_UI'. Returns true if the factory 162 // MessagePump implementation for 'TYPE_UI'. Returns true if the factory
(...skipping 279 matching lines...) Expand 10 before | Expand all | Expand 10 after
435 } 442 }
436 #endif 443 #endif
437 #endif 444 #endif
438 445
439 scoped_ptr<MessagePump> pump_; 446 scoped_ptr<MessagePump> pump_;
440 447
441 private: 448 private:
442 friend class internal::IncomingTaskQueue; 449 friend class internal::IncomingTaskQueue;
443 friend class RunLoop; 450 friend class RunLoop;
444 451
452 // Configures various members for the two constructors.
453 void Init();
454
445 // A function to encapsulate all the exception handling capability in the 455 // A function to encapsulate all the exception handling capability in the
446 // stacks around the running of a main message loop. It will run the message 456 // stacks around the running of a main message loop. It will run the message
447 // loop in a SEH try block or not depending on the set_SEH_restoration() 457 // loop in a SEH try block or not depending on the set_SEH_restoration()
448 // flag invoking respectively RunInternalInSEHFrame() or RunInternal(). 458 // flag invoking respectively RunInternalInSEHFrame() or RunInternal().
449 void RunHandler(); 459 void RunHandler();
450 460
451 #if defined(OS_WIN) 461 #if defined(OS_WIN)
452 __declspec(noinline) void RunInternalInSEHFrame(); 462 __declspec(noinline) void RunInternalInSEHFrame();
453 #endif 463 #endif
454 464
(...skipping 42 matching lines...) Expand 10 before | Expand all | Expand 10 after
497 // If message_histogram_ is NULL, this is a no-op. 507 // If message_histogram_ is NULL, this is a no-op.
498 void HistogramEvent(int event); 508 void HistogramEvent(int event);
499 509
500 // MessagePump::Delegate methods: 510 // MessagePump::Delegate methods:
501 virtual bool DoWork() OVERRIDE; 511 virtual bool DoWork() OVERRIDE;
502 virtual bool DoDelayedWork(TimeTicks* next_delayed_work_time) OVERRIDE; 512 virtual bool DoDelayedWork(TimeTicks* next_delayed_work_time) OVERRIDE;
503 virtual bool DoIdleWork() OVERRIDE; 513 virtual bool DoIdleWork() OVERRIDE;
504 virtual void GetQueueingInformation(size_t* queue_size, 514 virtual void GetQueueingInformation(size_t* queue_size,
505 TimeDelta* queueing_delay) OVERRIDE; 515 TimeDelta* queueing_delay) OVERRIDE;
506 516
507 Type type_; 517 const Type type_;
508 518
509 // A list of tasks that need to be processed by this instance. Note that 519 // A list of tasks that need to be processed by this instance. Note that
510 // this queue is only accessed (push/pop) by our current thread. 520 // this queue is only accessed (push/pop) by our current thread.
511 TaskQueue work_queue_; 521 TaskQueue work_queue_;
512 522
513 // Contains delayed tasks, sorted by their 'delayed_run_time' property. 523 // Contains delayed tasks, sorted by their 'delayed_run_time' property.
514 DelayedTaskQueue delayed_work_queue_; 524 DelayedTaskQueue delayed_work_queue_;
515 525
516 // A recent snapshot of Time::Now(), used to check delayed_work_queue_. 526 // A recent snapshot of Time::Now(), used to check delayed_work_queue_.
517 TimeTicks recent_time_; 527 TimeTicks recent_time_;
(...skipping 213 matching lines...) Expand 10 before | Expand all | Expand 10 after
731 741
732 // Do not add any member variables to MessageLoopForIO! This is important b/c 742 // Do not add any member variables to MessageLoopForIO! This is important b/c
733 // MessageLoopForIO is often allocated via MessageLoop(TYPE_IO). Any extra 743 // MessageLoopForIO is often allocated via MessageLoop(TYPE_IO). Any extra
734 // data that you need should be stored on the MessageLoop's pump_ instance. 744 // data that you need should be stored on the MessageLoop's pump_ instance.
735 COMPILE_ASSERT(sizeof(MessageLoop) == sizeof(MessageLoopForIO), 745 COMPILE_ASSERT(sizeof(MessageLoop) == sizeof(MessageLoopForIO),
736 MessageLoopForIO_should_not_have_extra_member_variables); 746 MessageLoopForIO_should_not_have_extra_member_variables);
737 747
738 } // namespace base 748 } // namespace base
739 749
740 #endif // BASE_MESSAGE_LOOP_MESSAGE_LOOP_H_ 750 #endif // BASE_MESSAGE_LOOP_MESSAGE_LOOP_H_
OLDNEW
« no previous file with comments | « no previous file | base/message_loop/message_loop.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698