| OLD | NEW |
| 1 // Copyright (c) 2011 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2011 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_H_ | 5 #ifndef BASE_MESSAGE_LOOP_H_ |
| 6 #define BASE_MESSAGE_LOOP_H_ | 6 #define BASE_MESSAGE_LOOP_H_ |
| 7 #pragma once | 7 #pragma once |
| 8 | 8 |
| 9 #include <queue> | 9 #include <queue> |
| 10 #include <string> | 10 #include <string> |
| (...skipping 89 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 100 // MessageLoopForIO. | 100 // MessageLoopForIO. |
| 101 // | 101 // |
| 102 enum Type { | 102 enum Type { |
| 103 TYPE_DEFAULT, | 103 TYPE_DEFAULT, |
| 104 TYPE_UI, | 104 TYPE_UI, |
| 105 TYPE_IO | 105 TYPE_IO |
| 106 }; | 106 }; |
| 107 | 107 |
| 108 // Normally, it is not necessary to instantiate a MessageLoop. Instead, it | 108 // Normally, it is not necessary to instantiate a MessageLoop. Instead, it |
| 109 // is typical to make use of the current thread's MessageLoop instance. | 109 // is typical to make use of the current thread's MessageLoop instance. |
| 110 explicit MessageLoop(Type type = TYPE_DEFAULT); | 110 explicit MessageLoop(Type type = TYPE_DEFAULT, |
| 111 const char* thread_name = NULL); |
| 111 virtual ~MessageLoop(); | 112 virtual ~MessageLoop(); |
| 112 | 113 |
| 113 // Returns the MessageLoop object for the current thread, or null if none. | 114 // Returns the MessageLoop object for the current thread, or null if none. |
| 114 static MessageLoop* current(); | 115 static MessageLoop* current(); |
| 115 | 116 |
| 116 static void EnableHistogrammer(bool enable_histogrammer); | 117 static void EnableHistogrammer(bool enable_histogrammer); |
| 117 | 118 |
| 118 // A DestructionObserver is notified when the current MessageLoop is being | 119 // A DestructionObserver is notified when the current MessageLoop is being |
| 119 // destroyed. These obsevers are notified prior to MessageLoop::current() | 120 // destroyed. These obsevers are notified prior to MessageLoop::current() |
| 120 // being changed to return NULL. This gives interested parties the chance to | 121 // being changed to return NULL. This gives interested parties the chance to |
| (...skipping 127 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 248 class QuitTask : public Task { | 249 class QuitTask : public Task { |
| 249 public: | 250 public: |
| 250 virtual void Run() { | 251 virtual void Run() { |
| 251 MessageLoop::current()->Quit(); | 252 MessageLoop::current()->Quit(); |
| 252 } | 253 } |
| 253 }; | 254 }; |
| 254 | 255 |
| 255 // Returns the type passed to the constructor. | 256 // Returns the type passed to the constructor. |
| 256 Type type() const { return type_; } | 257 Type type() const { return type_; } |
| 257 | 258 |
| 258 // Optional call to connect the thread name with this loop. | 259 // Returns the name associated with this message loop's thread. |
| 259 void set_thread_name(const std::string& thread_name) { | |
| 260 DCHECK(thread_name_.empty()) << "Should not rename this thread!"; | |
| 261 thread_name_ = thread_name; | |
| 262 } | |
| 263 const std::string& thread_name() const { return thread_name_; } | 260 const std::string& thread_name() const { return thread_name_; } |
| 264 | 261 |
| 265 // Enables or disables the recursive task processing. This happens in the case | 262 // Enables or disables the recursive task processing. This happens in the case |
| 266 // of recursive message loops. Some unwanted message loop may occurs when | 263 // of recursive message loops. Some unwanted message loop may occurs when |
| 267 // using common controls or printer functions. By default, recursive task | 264 // using common controls or printer functions. By default, recursive task |
| 268 // processing is disabled. | 265 // processing is disabled. |
| 269 // | 266 // |
| 270 // The specific case where tasks get queued is: | 267 // The specific case where tasks get queued is: |
| 271 // - The thread is running a message loop. | 268 // - The thread is running a message loop. |
| 272 // - It receives a task #1 and execute it. | 269 // - It receives a task #1 and execute it. |
| (...skipping 289 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 562 | 559 |
| 563 //----------------------------------------------------------------------------- | 560 //----------------------------------------------------------------------------- |
| 564 // MessageLoopForUI extends MessageLoop with methods that are particular to a | 561 // MessageLoopForUI extends MessageLoop with methods that are particular to a |
| 565 // MessageLoop instantiated with TYPE_UI. | 562 // MessageLoop instantiated with TYPE_UI. |
| 566 // | 563 // |
| 567 // This class is typically used like so: | 564 // This class is typically used like so: |
| 568 // MessageLoopForUI::current()->...call some method... | 565 // MessageLoopForUI::current()->...call some method... |
| 569 // | 566 // |
| 570 class BASE_API MessageLoopForUI : public MessageLoop { | 567 class BASE_API MessageLoopForUI : public MessageLoop { |
| 571 public: | 568 public: |
| 572 MessageLoopForUI() : MessageLoop(TYPE_UI) { | 569 MessageLoopForUI(const char* thread_name) |
| 570 : MessageLoop(thread_name, TYPE_UI) { |
| 573 } | 571 } |
| 574 | 572 |
| 575 // Returns the MessageLoopForUI of the current thread. | 573 // Returns the MessageLoopForUI of the current thread. |
| 576 static MessageLoopForUI* current() { | 574 static MessageLoopForUI* current() { |
| 577 MessageLoop* loop = MessageLoop::current(); | 575 MessageLoop* loop = MessageLoop::current(); |
| 578 DCHECK_EQ(MessageLoop::TYPE_UI, loop->type()); | 576 DCHECK_EQ(MessageLoop::TYPE_UI, loop->type()); |
| 579 return static_cast<MessageLoopForUI*>(loop); | 577 return static_cast<MessageLoopForUI*>(loop); |
| 580 } | 578 } |
| 581 | 579 |
| 582 #if defined(OS_WIN) | 580 #if defined(OS_WIN) |
| (...skipping 41 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 624 typedef base::MessagePumpLibevent::IOObserver IOObserver; | 622 typedef base::MessagePumpLibevent::IOObserver IOObserver; |
| 625 | 623 |
| 626 enum Mode { | 624 enum Mode { |
| 627 WATCH_READ = base::MessagePumpLibevent::WATCH_READ, | 625 WATCH_READ = base::MessagePumpLibevent::WATCH_READ, |
| 628 WATCH_WRITE = base::MessagePumpLibevent::WATCH_WRITE, | 626 WATCH_WRITE = base::MessagePumpLibevent::WATCH_WRITE, |
| 629 WATCH_READ_WRITE = base::MessagePumpLibevent::WATCH_READ_WRITE | 627 WATCH_READ_WRITE = base::MessagePumpLibevent::WATCH_READ_WRITE |
| 630 }; | 628 }; |
| 631 | 629 |
| 632 #endif | 630 #endif |
| 633 | 631 |
| 634 MessageLoopForIO() : MessageLoop(TYPE_IO) { | 632 MessageLoopForIO(const char* thread_name) |
| 633 : MessageLoop(thread_name, TYPE_IO) { |
| 635 } | 634 } |
| 636 | 635 |
| 637 // Returns the MessageLoopForIO of the current thread. | 636 // Returns the MessageLoopForIO of the current thread. |
| 638 static MessageLoopForIO* current() { | 637 static MessageLoopForIO* current() { |
| 639 MessageLoop* loop = MessageLoop::current(); | 638 MessageLoop* loop = MessageLoop::current(); |
| 640 DCHECK_EQ(MessageLoop::TYPE_IO, loop->type()); | 639 DCHECK_EQ(MessageLoop::TYPE_IO, loop->type()); |
| 641 return static_cast<MessageLoopForIO*>(loop); | 640 return static_cast<MessageLoopForIO*>(loop); |
| 642 } | 641 } |
| 643 | 642 |
| 644 void AddIOObserver(IOObserver* io_observer) { | 643 void AddIOObserver(IOObserver* io_observer) { |
| (...skipping 30 matching lines...) Expand all Loading... |
| 675 #endif // defined(OS_POSIX) | 674 #endif // defined(OS_POSIX) |
| 676 }; | 675 }; |
| 677 | 676 |
| 678 // Do not add any member variables to MessageLoopForIO! This is important b/c | 677 // Do not add any member variables to MessageLoopForIO! This is important b/c |
| 679 // MessageLoopForIO is often allocated via MessageLoop(TYPE_IO). Any extra | 678 // MessageLoopForIO is often allocated via MessageLoop(TYPE_IO). Any extra |
| 680 // data that you need should be stored on the MessageLoop's pump_ instance. | 679 // data that you need should be stored on the MessageLoop's pump_ instance. |
| 681 COMPILE_ASSERT(sizeof(MessageLoop) == sizeof(MessageLoopForIO), | 680 COMPILE_ASSERT(sizeof(MessageLoop) == sizeof(MessageLoopForIO), |
| 682 MessageLoopForIO_should_not_have_extra_member_variables); | 681 MessageLoopForIO_should_not_have_extra_member_variables); |
| 683 | 682 |
| 684 #endif // BASE_MESSAGE_LOOP_H_ | 683 #endif // BASE_MESSAGE_LOOP_H_ |
| OLD | NEW |