Backed out changeset 2450366cf7ca (bug 1891629) for causing win msix mochitest failures
[gecko.git] / widget / windows / RemoteBackbuffer.h
blob5899e809841d28a0293d948bddafac5ef9970184
1 /* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
2 /* This Source Code Form is subject to the terms of the Mozilla Public
3 * License, v. 2.0. If a copy of the MPL was not distributed with this
4 * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
6 #ifndef widget_windows_RemoteBackbuffer_h
7 #define widget_windows_RemoteBackbuffer_h
9 #include "nsIWidget.h"
10 #include "mozilla/widget/PCompositorWidgetParent.h"
11 #include "mozilla/Maybe.h"
12 #include "mozilla/gfx/2D.h"
13 #include "prthread.h"
14 #include <windows.h>
16 namespace mozilla {
17 namespace widget {
18 namespace remote_backbuffer {
20 struct IpcRect;
21 struct SharedData;
22 struct BorrowResponseData;
23 struct PresentRequestData;
24 struct PresentResponseData;
25 class SharedImage;
26 class PresentableSharedImage;
28 class Provider {
29 public:
30 Provider();
31 ~Provider();
33 bool Initialize(HWND aWindowHandle, DWORD aTargetProcessId,
34 TransparencyMode aTransparencyMode);
36 Maybe<RemoteBackbufferHandles> CreateRemoteHandles();
38 void UpdateTransparencyMode(TransparencyMode aTransparencyMode);
40 Provider(const Provider&) = delete;
41 Provider(Provider&&) = delete;
42 Provider& operator=(const Provider&) = delete;
43 Provider& operator=(Provider&&) = delete;
45 private:
46 void ThreadMain();
48 void HandleBorrowRequest(BorrowResponseData* aResponseData,
49 bool aAllowSameBuffer);
50 void HandlePresentRequest(const PresentRequestData& aRequestData,
51 PresentResponseData* aResponseData);
53 HWND mWindowHandle;
54 HANDLE mTargetProcess;
55 HANDLE mFileMapping;
56 HANDLE mRequestReadyEvent;
57 HANDLE mResponseReadyEvent;
58 SharedData* mSharedDataPtr;
59 bool mStopServiceThread;
60 PRThread* mServiceThread;
61 std::unique_ptr<PresentableSharedImage> mBackbuffer;
62 mozilla::Atomic<uint32_t, MemoryOrdering::Relaxed> mTransparencyMode;
63 TransparencyMode GetTransparencyMode() const {
64 return TransparencyMode(uint32_t(mTransparencyMode));
68 class Client {
69 public:
70 Client();
71 ~Client();
73 bool Initialize(const RemoteBackbufferHandles& aRemoteHandles);
75 already_AddRefed<gfx::DrawTarget> BorrowDrawTarget();
76 bool PresentDrawTarget(gfx::IntRegion aDirtyRegion);
78 Client(const Client&) = delete;
79 Client(Client&&) = delete;
80 Client& operator=(const Client&) = delete;
81 Client& operator=(Client&&) = delete;
83 private:
84 HANDLE mFileMapping;
85 HANDLE mRequestReadyEvent;
86 HANDLE mResponseReadyEvent;
87 SharedData* mSharedDataPtr;
88 std::unique_ptr<SharedImage> mBackbuffer;
91 } // namespace remote_backbuffer
92 } // namespace widget
93 } // namespace mozilla
95 #endif // widget_windows_RemoteBackbuffer_h