SL-16094 Move LLWindowWin32::mainWindowProc and Windows message handling to a background thread to prevent frame stalls in LLWindowWin32::gatherInput
parent
675514bdb3
commit
2148e4c731
File diff suppressed because it is too large
Load Diff
|
|
@ -33,11 +33,46 @@
|
|||
#include "llwindow.h"
|
||||
#include "llwindowcallbacks.h"
|
||||
#include "lldragdropwin32.h"
|
||||
#include "llthread.h"
|
||||
#include "llthreadsafequeue.h"
|
||||
|
||||
// Hack for async host by name
|
||||
#define LL_WM_HOST_RESOLVED (WM_APP + 1)
|
||||
typedef void (*LLW32MsgCallback)(const MSG &msg);
|
||||
|
||||
class LLWindowWin32;
|
||||
|
||||
// Thread that owns the Window Handle
|
||||
class LLWindowWin32Thread : public LLThread
|
||||
{
|
||||
public:
|
||||
class Message
|
||||
{
|
||||
public:
|
||||
LRESULT mMsg;
|
||||
};
|
||||
|
||||
static const int MAX_QUEUE_SIZE = 2048;
|
||||
|
||||
LLThreadSafeQueue<MSG> mMessageQueue;
|
||||
LLThreadSafeQueue<std::function<void()>> mFunctionQueue;
|
||||
|
||||
bool mFinished = false;
|
||||
|
||||
LLWindowWin32Thread(LLWindowWin32* window);
|
||||
|
||||
void run() override;
|
||||
|
||||
void post(const std::function<void()>& func);
|
||||
|
||||
private:
|
||||
|
||||
// call PeekMessage and pull enqueue messages for later processing
|
||||
void gatherInput();
|
||||
LLWindowWin32* mWindow = nullptr;
|
||||
|
||||
};
|
||||
|
||||
class LLWindowWin32 : public LLWindow
|
||||
{
|
||||
public:
|
||||
|
|
@ -172,9 +207,9 @@ protected:
|
|||
WCHAR *mWindowTitle;
|
||||
WCHAR *mWindowClassName;
|
||||
|
||||
HWND mWindowHandle; // window handle
|
||||
HGLRC mhRC; // OpenGL rendering context
|
||||
HDC mhDC; // Windows Device context handle
|
||||
HWND mWindowHandle = 0; // window handle
|
||||
HGLRC mhRC = 0; // OpenGL rendering context
|
||||
HDC mhDC = 0; // Windows Device context handle
|
||||
HINSTANCE mhInstance; // handle to application instance
|
||||
WNDPROC mWndProc; // user-installable window proc
|
||||
RECT mOldMouseClip; // Screen rect to which the mouse cursor was globally constrained before we changed it in clipMouse()
|
||||
|
|
@ -221,7 +256,12 @@ protected:
|
|||
|
||||
BOOL mMouseVanish;
|
||||
|
||||
LLWindowWin32Thread* mWindowThread = nullptr;
|
||||
LLThreadSafeQueue<std::function<void()>> mFunctionQueue;
|
||||
void post(const std::function<void()>& func);
|
||||
|
||||
friend class LLWindowManager;
|
||||
friend class LLWindowWin32Thread;
|
||||
};
|
||||
|
||||
class LLSplashScreenWin32 : public LLSplashScreen
|
||||
|
|
|
|||
Loading…
Reference in New Issue