Backed out 8 changesets (bug 1918596, bug 1917575, bug 1874689, bug 1925181, bug...
[gecko.git] / widget / windows / RemoteBackbuffer.h
blobb2a2e612317ab5af684b552caf04c15a787a2074
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);
35 Maybe<RemoteBackbufferHandles> CreateRemoteHandles();
37 Provider(const Provider&) = delete;
38 Provider(Provider&&) = delete;
39 Provider& operator=(const Provider&) = delete;
40 Provider& operator=(Provider&&) = delete;
42 private:
43 void ThreadMain();
45 void HandleBorrowRequest(BorrowResponseData* aResponseData,
46 bool aAllowSameBuffer);
47 void HandlePresentRequest(const PresentRequestData& aRequestData,
48 PresentResponseData* aResponseData);
50 HWND mWindowHandle;
51 HANDLE mTargetProcess;
52 HANDLE mFileMapping;
53 HANDLE mRequestReadyEvent;
54 HANDLE mResponseReadyEvent;
55 SharedData* mSharedDataPtr;
56 bool mStopServiceThread;
57 PRThread* mServiceThread;
58 std::unique_ptr<PresentableSharedImage> mBackbuffer;
61 class Client {
62 public:
63 Client();
64 ~Client();
66 bool Initialize(const RemoteBackbufferHandles& aRemoteHandles);
68 already_AddRefed<gfx::DrawTarget> BorrowDrawTarget();
69 bool PresentDrawTarget(gfx::IntRegion aDirtyRegion);
71 Client(const Client&) = delete;
72 Client(Client&&) = delete;
73 Client& operator=(const Client&) = delete;
74 Client& operator=(Client&&) = delete;
76 private:
77 HANDLE mFileMapping;
78 HANDLE mRequestReadyEvent;
79 HANDLE mResponseReadyEvent;
80 SharedData* mSharedDataPtr;
81 std::unique_ptr<SharedImage> mBackbuffer;
84 } // namespace remote_backbuffer
85 } // namespace widget
86 } // namespace mozilla
88 #endif // widget_windows_RemoteBackbuffer_h