Bug 1671598 [wpt PR 26128] - [AspectRatio] Fix divide by zero with a small float...
[gecko.git] / widget / windows / RemoteBackbuffer.h
blobc9857c73d8fdb121f97c50a302cb5b89f0b083cc
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 <thread>
13 #include <windows.h>
15 namespace mozilla {
16 namespace widget {
17 namespace remote_backbuffer {
19 struct IpcRect;
20 struct SharedData;
21 struct BorrowResponseData;
22 struct PresentRequestData;
23 struct PresentResponseData;
24 class SharedImage;
25 class PresentableSharedImage;
27 class Provider {
28 public:
29 Provider();
30 ~Provider();
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;
44 private:
45 void ThreadMain();
47 void HandleBorrowRequest(BorrowResponseData* aResponseData,
48 bool aAllowSameBuffer);
49 void HandlePresentRequest(const PresentRequestData& aRequestData,
50 PresentResponseData* aResponseData);
52 HWND mWindowHandle;
53 DWORD mTargetProcessId;
54 HANDLE mFileMapping;
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>
62 mTransparencyMode;
65 class Client {
66 public:
67 Client();
68 ~Client();
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;
80 private:
81 HANDLE mFileMapping;
82 HANDLE mRequestReadyEvent;
83 HANDLE mResponseReadyEvent;
84 SharedData* mSharedDataPtr;
85 std::unique_ptr<SharedImage> mBackbuffer;
88 } // namespace remote_backbuffer
89 } // namespace widget
90 } // namespace mozilla
92 #endif // widget_windows_RemoteBackbuffer_h