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"
17 namespace remote_backbuffer
{
21 struct BorrowResponseData
;
22 struct PresentRequestData
;
23 struct PresentResponseData
;
25 class PresentableSharedImage
;
32 bool Initialize(HWND aWindowHandle
, DWORD aTargetProcessId
,
33 nsTransparencyMode aTransparencyMode
);
35 Maybe
<RemoteBackbufferHandles
> CreateRemoteHandles();
37 void UpdateTransparencyMode(nsTransparencyMode aTransparencyMode
);
39 Provider(const Provider
&) = delete;
40 Provider(Provider
&&) = delete;
41 Provider
& operator=(const Provider
&) = delete;
42 Provider
& operator=(Provider
&&) = delete;
47 void HandleBorrowRequest(BorrowResponseData
* aResponseData
,
48 bool aAllowSameBuffer
);
49 void HandlePresentRequest(const PresentRequestData
& aRequestData
,
50 PresentResponseData
* aResponseData
);
53 DWORD mTargetProcessId
;
55 HANDLE mRequestReadyEvent
;
56 HANDLE mResponseReadyEvent
;
57 SharedData
* mSharedDataPtr
;
58 bool mStopServiceThread
;
59 std::thread mServiceThread
;
60 std::unique_ptr
<PresentableSharedImage
> mBackbuffer
;
61 mozilla::Atomic
<nsTransparencyMode
, MemoryOrdering::Relaxed
>
70 bool Initialize(const RemoteBackbufferHandles
& aRemoteHandles
);
72 already_AddRefed
<gfx::DrawTarget
> BorrowDrawTarget();
73 bool PresentDrawTarget(gfx::IntRegion aDirtyRegion
);
75 Client(const Client
&) = delete;
76 Client(Client
&&) = delete;
77 Client
& operator=(const Client
&) = delete;
78 Client
& operator=(Client
&&) = delete;
82 HANDLE mRequestReadyEvent
;
83 HANDLE mResponseReadyEvent
;
84 SharedData
* mSharedDataPtr
;
85 std::unique_ptr
<SharedImage
> mBackbuffer
;
88 } // namespace remote_backbuffer
90 } // namespace mozilla
92 #endif // widget_windows_RemoteBackbuffer_h