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
10 #include "mozilla/widget/PCompositorWidgetParent.h"
11 #include "mozilla/Maybe.h"
12 #include "mozilla/gfx/2D.h"
18 namespace remote_backbuffer
{
22 struct BorrowResponseData
;
23 struct PresentRequestData
;
24 struct PresentResponseData
;
26 class PresentableSharedImage
;
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;
48 void HandleBorrowRequest(BorrowResponseData
* aResponseData
,
49 bool aAllowSameBuffer
);
50 void HandlePresentRequest(const PresentRequestData
& aRequestData
,
51 PresentResponseData
* aResponseData
);
54 HANDLE mTargetProcess
;
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
));
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;
85 HANDLE mRequestReadyEvent
;
86 HANDLE mResponseReadyEvent
;
87 SharedData
* mSharedDataPtr
;
88 std::unique_ptr
<SharedImage
> mBackbuffer
;
91 } // namespace remote_backbuffer
93 } // namespace mozilla
95 #endif // widget_windows_RemoteBackbuffer_h