Index: base/message_loop/message_pump_win.h |
diff --git a/base/message_loop/message_pump_win.h b/base/message_loop/message_pump_win.h |
index 8fb4d6953507ff5c1409c57fdab613ae67e080d9..ad6c119ca9e0962ae2317dddc13ae651d411e945 100644 |
--- a/base/message_loop/message_pump_win.h |
+++ b/base/message_loop/message_pump_win.h |
@@ -8,6 +8,7 @@ |
#include <windows.h> |
#include <list> |
+#include <memory> |
#include "base/base_export.h" |
#include "base/message_loop/message_pump.h" |
@@ -21,7 +22,7 @@ namespace base { |
// controlling the lifetime of the message pump. |
class BASE_EXPORT MessagePumpWin : public MessagePump { |
public: |
- MessagePumpWin() : have_work_(0), state_(NULL) {} |
+ MessagePumpWin() : work_state_(READY), state_(NULL) {} |
// MessagePump methods: |
void Run(Delegate* delegate) override; |
@@ -43,16 +44,23 @@ class BASE_EXPORT MessagePumpWin : public MessagePump { |
Time last_schedule_work_error_time; |
}; |
+ // State used with |work_state_| variable. |
+ enum WorkState { |
+ READY = 0, // Ready to accept new work. |
+ HAVE_WORK = 1, // New work has been signalled. |
+ WORKING = 2 // Handling the work. |
+ }; |
+ |
virtual void DoRunLoop() = 0; |
int GetCurrentDelay() const; |
// The time at which delayed work should run. |
TimeTicks delayed_work_time_; |
- // A boolean value used to indicate if there is a kMsgDoWork message pending |
+ // A value used to indicate if there is a kMsgDoWork message pending |
// in the Windows Message queue. There is at most one such message, and it |
// can drive execution of tasks when a native message pump is running. |
- LONG have_work_; |
+ LONG work_state_; |
// State for the current invocation of Run. |
RunState* state_; |
@@ -108,9 +116,6 @@ class BASE_EXPORT MessagePumpWin : public MessagePump { |
// |
class BASE_EXPORT MessagePumpForUI : public MessagePumpWin { |
public: |
- // The application-defined code passed to the hook procedure. |
- static const int kMessageFilterCode = 0x5001; |
- |
MessagePumpForUI(); |
~MessagePumpForUI() override; |
@@ -141,6 +146,35 @@ class BASE_EXPORT MessagePumpForUI : public MessagePumpWin { |
}; |
//----------------------------------------------------------------------------- |
+// MessagePumpForGpu is a simplified version of UI message pump that is |
+// optimized for the GPU process. Unlike MessagePumpForUI it doesn't have a |
+// hidden window and doesn't handle a situation where a native message pump |
+// might take over message processing. |
+// |
+class BASE_EXPORT MessagePumpForGpu : public MessagePumpWin { |
+ public: |
+ MessagePumpForGpu(); |
+ ~MessagePumpForGpu() override; |
+ |
+ // Factory methods. |
+ static void InitFactory(); |
+ static std::unique_ptr<MessagePump> CreateMessagePumpForGpu(); |
+ |
+ // MessagePump methods: |
+ void ScheduleWork() override; |
+ void ScheduleDelayedWork(const TimeTicks& delayed_work_time) override; |
+ |
+ private: |
+ // MessagePumpWin methods: |
+ void DoRunLoop() override; |
+ |
+ void WaitForWork(); |
+ bool ProcessNextMessage(); |
+ |
+ const HANDLE event_; |
+}; |
+ |
+//----------------------------------------------------------------------------- |
// MessagePumpForIO extends MessagePumpWin with methods that are particular to a |
// MessageLoop instantiated with TYPE_IO. This version of MessagePump does not |
// deal with Windows mesagges, and instead has a Run loop based on Completion |