gecko-dev/widget/windows/CompositorWidgetChild.h
Chris Martin c7f4247786 Bug 1604412 - Enable remote backbuffer GDI compositing r=jmathies,jld
This change adds new "remote backbuffer" logic when compositing without
HW acceleration on Windows (IE compositing through Cairo using the Win32
GDI)

A new piece of shared memory is created between the GPU process and the UI
process, and the GPU process sends requests to the UI process to first "borrow"
a properly-sized buffer to draw into, and then sends a "present" request to
tell the UI process to actually blit the buffer to the Win32 window.

This is needed for the GPU sandbox to work, since Windows rightly doesn't
allow the untrusted GPU process to directly draw the contents of a window
owned by the trusted UI process.

Differential Revision: https://phabricator.services.mozilla.com/D61370

--HG--
extra : moz-landing-system : lando
2020-02-13 14:32:37 +00:00

61 lines
2.0 KiB
C++

/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
/* This Source Code Form is subject to the terms of the Mozilla Public
* License, v. 2.0. If a copy of the MPL was not distributed with this
* file, You can obtain one at http://mozilla.org/MPL/2.0/. */
#ifndef widget_windows_CompositorWidgetChild_h
#define widget_windows_CompositorWidgetChild_h
#include "WinCompositorWidget.h"
#include "mozilla/widget/PCompositorWidgetChild.h"
#include "mozilla/widget/CompositorWidgetVsyncObserver.h"
namespace mozilla {
class CompositorVsyncDispatcher;
namespace widget {
namespace remote_backbuffer {
class Provider;
}
class CompositorWidgetChild final : public PCompositorWidgetChild,
public PlatformCompositorWidgetDelegate {
public:
CompositorWidgetChild(RefPtr<CompositorVsyncDispatcher> aVsyncDispatcher,
RefPtr<CompositorWidgetVsyncObserver> aVsyncObserver,
const CompositorWidgetInitData& aInitData);
~CompositorWidgetChild() override;
bool Initialize();
void EnterPresentLock() override;
void LeavePresentLock() override;
void OnDestroyWindow() override;
bool OnWindowResize(const LayoutDeviceIntSize& aSize) override;
void OnWindowModeChange(nsSizeMode aSizeMode) override;
void UpdateTransparency(nsTransparencyMode aMode) override;
void ClearTransparentWindow() override;
mozilla::ipc::IPCResult RecvObserveVsync() override;
mozilla::ipc::IPCResult RecvUnobserveVsync() override;
mozilla::ipc::IPCResult RecvUpdateCompositorWnd(
const WindowsHandle& aCompositorWnd, const WindowsHandle& aParentWnd,
UpdateCompositorWndResolver&& aResolve) override;
private:
RefPtr<CompositorVsyncDispatcher> mVsyncDispatcher;
RefPtr<CompositorWidgetVsyncObserver> mVsyncObserver;
HWND mCompositorWnd;
HWND mWnd;
nsTransparencyMode mTransparencyMode;
std::unique_ptr<remote_backbuffer::Provider> mRemoteBackbufferProvider;
};
} // namespace widget
} // namespace mozilla
#endif // widget_windows_CompositorWidgetChild_h