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 6f4b699cefdfce5a3fac2249d6ebbcc2bf4c5bed..ac9f68a78f501e897ffc07b973d87efd495dde64 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" |
@@ -22,7 +23,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; |
@@ -39,16 +40,23 @@ class BASE_EXPORT MessagePumpWin : public MessagePump { |
int run_depth; |
}; |
+ // 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_; |
@@ -104,9 +112,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; |
@@ -137,6 +142,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 ProcessMessages(); |
+ |
+ const DWORD thread_id_; |
+}; |
+ |
+//----------------------------------------------------------------------------- |
// 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 |