mirror of
https://github.com/mozilla/gecko-dev.git
synced 2025-02-04 13:07:52 +00:00
Bug 1330037 - Propagate the CompositorOptions to all CompositorWidget instances. r=dvander
MozReview-Commit-ID: DFeeo2WNmhZ --HG-- extra : rebase_source : d40bea7f726df007e3f079bb9576e1cbe17e3460
This commit is contained in:
parent
619cad37b5
commit
ac6cc8ce06
@ -34,7 +34,7 @@ InProcessCompositorSession::Create(nsIWidget* aWidget,
|
||||
CompositorWidgetInitData initData;
|
||||
aWidget->GetCompositorWidgetInitData(&initData);
|
||||
|
||||
RefPtr<CompositorWidget> widget = CompositorWidget::CreateLocal(initData, aWidget);
|
||||
RefPtr<CompositorWidget> widget = CompositorWidget::CreateLocal(initData, aOptions, aWidget);
|
||||
RefPtr<CompositorBridgeChild> child = new CompositorBridgeChild(aLayerManager);
|
||||
RefPtr<CompositorBridgeParent> parent =
|
||||
child->InitSameProcess(widget, aRootLayerTreeId, aScale, aOptions, aUseExternalSurfaceSize, aSurfaceSize);
|
||||
|
@ -1656,7 +1656,7 @@ CompositorBridgeParent::AllocPCompositorWidgetParent(const CompositorWidgetInitD
|
||||
}
|
||||
|
||||
widget::CompositorWidgetParent* widget =
|
||||
new widget::CompositorWidgetParent(aInitData);
|
||||
new widget::CompositorWidgetParent(aInitData, mOptions);
|
||||
widget->AddRef();
|
||||
|
||||
// Sending the constructor acts as initialization as well.
|
||||
|
@ -153,7 +153,8 @@ static std::vector<LayerManagerData> GetLayerManagers(std::vector<LayersBackend>
|
||||
auto backend = aBackends[i];
|
||||
|
||||
RefPtr<MockWidget> widget = new MockWidget();
|
||||
RefPtr<widget::CompositorWidget> proxy = new widget::InProcessCompositorWidget(widget);
|
||||
CompositorOptions options;
|
||||
RefPtr<widget::CompositorWidget> proxy = new widget::InProcessCompositorWidget(options, widget);
|
||||
RefPtr<Compositor> compositor = CreateTestCompositor(backend, proxy);
|
||||
|
||||
RefPtr<LayerManagerComposite> layerManager = new LayerManagerComposite(compositor);
|
||||
|
@ -10,6 +10,11 @@
|
||||
namespace mozilla {
|
||||
namespace widget {
|
||||
|
||||
CompositorWidget::CompositorWidget(const layers::CompositorOptions& aOptions)
|
||||
: mOptions(aOptions)
|
||||
{
|
||||
}
|
||||
|
||||
CompositorWidget::~CompositorWidget()
|
||||
{
|
||||
}
|
||||
|
@ -9,6 +9,7 @@
|
||||
#include "mozilla/RefPtr.h"
|
||||
#include "Units.h"
|
||||
#include "mozilla/gfx/2D.h"
|
||||
#include "mozilla/layers/CompositorOptions.h"
|
||||
#include "mozilla/layers/LayersTypes.h"
|
||||
|
||||
class nsIWidget;
|
||||
@ -77,7 +78,9 @@ public:
|
||||
* Create an in-process compositor widget. aWidget may be ignored if the
|
||||
* platform does not require it.
|
||||
*/
|
||||
static RefPtr<CompositorWidget> CreateLocal(const CompositorWidgetInitData& aInitData, nsIWidget* aWidget);
|
||||
static RefPtr<CompositorWidget> CreateLocal(const CompositorWidgetInitData& aInitData,
|
||||
const layers::CompositorOptions& aOptions,
|
||||
nsIWidget* aWidget);
|
||||
|
||||
/**
|
||||
* Called before rendering using OMTC. Returns false when the widget is
|
||||
@ -251,6 +254,14 @@ public:
|
||||
*/
|
||||
virtual void ObserveVsync(VsyncObserver* aObserver) = 0;
|
||||
|
||||
/**
|
||||
* Get the compositor options for the compositor associated with this
|
||||
* CompositorWidget.
|
||||
*/
|
||||
const layers::CompositorOptions& GetCompositorOptions() {
|
||||
return mOptions;
|
||||
}
|
||||
|
||||
/**
|
||||
* This is only used by out-of-process compositors.
|
||||
*/
|
||||
@ -274,10 +285,13 @@ public:
|
||||
}
|
||||
|
||||
protected:
|
||||
explicit CompositorWidget(const layers::CompositorOptions& aOptions);
|
||||
virtual ~CompositorWidget();
|
||||
|
||||
// Back buffer of BasicCompositor
|
||||
RefPtr<gfx::DrawTarget> mLastBackBuffer;
|
||||
|
||||
layers::CompositorOptions mOptions;
|
||||
};
|
||||
|
||||
} // namespace widget
|
||||
|
@ -16,19 +16,23 @@ namespace widget {
|
||||
// InProcessCompositorWidget by default.
|
||||
#if !defined(MOZ_WIDGET_SUPPORTS_OOP_COMPOSITING)
|
||||
/* static */ RefPtr<CompositorWidget>
|
||||
CompositorWidget::CreateLocal(const CompositorWidgetInitData& aInitData, nsIWidget* aWidget)
|
||||
CompositorWidget::CreateLocal(const CompositorWidgetInitData& aInitData,
|
||||
const layers::CompositorOptions& aOptions,
|
||||
nsIWidget* aWidget)
|
||||
{
|
||||
MOZ_ASSERT(aWidget);
|
||||
#ifdef MOZ_WIDGET_ANDROID
|
||||
return new AndroidCompositorWidget(static_cast<nsBaseWidget*>(aWidget));
|
||||
return new AndroidCompositorWidget(aOptions, static_cast<nsBaseWidget*>(aWidget));
|
||||
#else
|
||||
return new InProcessCompositorWidget(static_cast<nsBaseWidget*>(aWidget));
|
||||
return new InProcessCompositorWidget(aOptions, static_cast<nsBaseWidget*>(aWidget));
|
||||
#endif
|
||||
}
|
||||
#endif
|
||||
|
||||
InProcessCompositorWidget::InProcessCompositorWidget(nsBaseWidget* aWidget)
|
||||
: mWidget(aWidget)
|
||||
InProcessCompositorWidget::InProcessCompositorWidget(const layers::CompositorOptions& aOptions,
|
||||
nsBaseWidget* aWidget)
|
||||
: CompositorWidget(aOptions)
|
||||
, mWidget(aWidget)
|
||||
{
|
||||
}
|
||||
|
||||
|
@ -15,7 +15,8 @@ namespace widget {
|
||||
class InProcessCompositorWidget : public CompositorWidget
|
||||
{
|
||||
public:
|
||||
explicit InProcessCompositorWidget(nsBaseWidget* aWidget);
|
||||
explicit InProcessCompositorWidget(const layers::CompositorOptions& aOptions,
|
||||
nsBaseWidget* aWidget);
|
||||
|
||||
virtual bool PreRender(WidgetRenderingContext* aManager) override;
|
||||
virtual void PostRender(WidgetRenderingContext* aManager) override;
|
||||
|
@ -9,8 +9,9 @@
|
||||
namespace mozilla {
|
||||
namespace widget {
|
||||
|
||||
CompositorWidgetParent::CompositorWidgetParent(const CompositorWidgetInitData& aInitData)
|
||||
: X11CompositorWidget(aInitData)
|
||||
CompositorWidgetParent::CompositorWidgetParent(const CompositorWidgetInitData& aInitData,
|
||||
const layers::CompositorOptions& aOptions)
|
||||
: X11CompositorWidget(aInitData, aOptions)
|
||||
{
|
||||
MOZ_ASSERT(XRE_GetProcessType() == GeckoProcessType_GPU);
|
||||
}
|
||||
|
@ -17,7 +17,8 @@ class CompositorWidgetParent final
|
||||
public X11CompositorWidget
|
||||
{
|
||||
public:
|
||||
explicit CompositorWidgetParent(const CompositorWidgetInitData& aInitData);
|
||||
explicit CompositorWidgetParent(const CompositorWidgetInitData& aInitData,
|
||||
const layers::CompositorOptions& aOptions);
|
||||
~CompositorWidgetParent() override;
|
||||
|
||||
void ActorDestroy(ActorDestroyReason aWhy) override { }
|
||||
|
@ -11,14 +11,17 @@ namespace mozilla {
|
||||
namespace widget {
|
||||
|
||||
/* static */ RefPtr<CompositorWidget>
|
||||
CompositorWidget::CreateLocal(const CompositorWidgetInitData& aInitData, nsIWidget* aWidget)
|
||||
CompositorWidget::CreateLocal(const CompositorWidgetInitData& aInitData,
|
||||
const layers::CompositorOptions& aOptions,
|
||||
nsIWidget* aWidget)
|
||||
{
|
||||
return new InProcessX11CompositorWidget(aInitData, static_cast<nsWindow*>(aWidget));
|
||||
return new InProcessX11CompositorWidget(aInitData, aOptions, static_cast<nsWindow*>(aWidget));
|
||||
}
|
||||
|
||||
InProcessX11CompositorWidget::InProcessX11CompositorWidget(const CompositorWidgetInitData& aInitData,
|
||||
const layers::CompositorOptions& aOptions,
|
||||
nsWindow* aWindow)
|
||||
: X11CompositorWidget(aInitData, aWindow)
|
||||
: X11CompositorWidget(aInitData, aOptions, aWindow)
|
||||
{
|
||||
}
|
||||
|
||||
|
@ -17,6 +17,7 @@ class InProcessX11CompositorWidget final : public X11CompositorWidget
|
||||
{
|
||||
public:
|
||||
InProcessX11CompositorWidget(const CompositorWidgetInitData& aInitData,
|
||||
const layers::CompositorOptions& aOptions,
|
||||
nsWindow* aWindow);
|
||||
|
||||
// CompositorWidgetDelegate
|
||||
|
@ -15,8 +15,10 @@ namespace mozilla {
|
||||
namespace widget {
|
||||
|
||||
X11CompositorWidget::X11CompositorWidget(const CompositorWidgetInitData& aInitData,
|
||||
const CompositorOptions& aOptions,
|
||||
nsWindow* aWindow)
|
||||
: mWidget(aWindow)
|
||||
: CompositorWidget(aOptions)
|
||||
, mWidget(aWindow)
|
||||
{
|
||||
// If we have a nsWindow, then grab the already existing display connection
|
||||
// If we don't, then use the init data to connect to the display
|
||||
|
@ -27,6 +27,7 @@ class X11CompositorWidget
|
||||
{
|
||||
public:
|
||||
X11CompositorWidget(const CompositorWidgetInitData& aInitData,
|
||||
const layers::CompositorOptions& aOptions,
|
||||
nsWindow* aWindow = nullptr);
|
||||
~X11CompositorWidget();
|
||||
|
||||
|
@ -10,8 +10,9 @@
|
||||
namespace mozilla {
|
||||
namespace widget {
|
||||
|
||||
CompositorWidgetParent::CompositorWidgetParent(const CompositorWidgetInitData& aInitData)
|
||||
: WinCompositorWidget(aInitData)
|
||||
CompositorWidgetParent::CompositorWidgetParent(const CompositorWidgetInitData& aInitData,
|
||||
const layers::CompositorOptions& aOptions)
|
||||
: WinCompositorWidget(aInitData, aOptions)
|
||||
{
|
||||
MOZ_ASSERT(XRE_GetProcessType() == GeckoProcessType_GPU);
|
||||
}
|
||||
|
@ -17,7 +17,8 @@ class CompositorWidgetParent final
|
||||
public WinCompositorWidget
|
||||
{
|
||||
public:
|
||||
explicit CompositorWidgetParent(const CompositorWidgetInitData& aInitData);
|
||||
explicit CompositorWidgetParent(const CompositorWidgetInitData& aInitData,
|
||||
const layers::CompositorOptions& aOptions);
|
||||
~CompositorWidgetParent() override;
|
||||
|
||||
mozilla::ipc::IPCResult RecvEnterPresentLock() override;
|
||||
|
@ -10,14 +10,17 @@ namespace mozilla {
|
||||
namespace widget {
|
||||
|
||||
/* static */ RefPtr<CompositorWidget>
|
||||
CompositorWidget::CreateLocal(const CompositorWidgetInitData& aInitData, nsIWidget* aWidget)
|
||||
CompositorWidget::CreateLocal(const CompositorWidgetInitData& aInitData,
|
||||
const layers::CompositorOptions& aOptions,
|
||||
nsIWidget* aWidget)
|
||||
{
|
||||
return new InProcessWinCompositorWidget(aInitData, static_cast<nsWindow*>(aWidget));
|
||||
return new InProcessWinCompositorWidget(aInitData, aOptions, static_cast<nsWindow*>(aWidget));
|
||||
}
|
||||
|
||||
InProcessWinCompositorWidget::InProcessWinCompositorWidget(const CompositorWidgetInitData& aInitData,
|
||||
const layers::CompositorOptions& aOptions,
|
||||
nsWindow* aWindow)
|
||||
: WinCompositorWidget(aInitData),
|
||||
: WinCompositorWidget(aInitData, aOptions),
|
||||
mWindow(aWindow)
|
||||
{
|
||||
MOZ_ASSERT(mWindow);
|
||||
|
@ -20,7 +20,9 @@ namespace widget {
|
||||
class InProcessWinCompositorWidget final : public WinCompositorWidget
|
||||
{
|
||||
public:
|
||||
InProcessWinCompositorWidget(const CompositorWidgetInitData& aInitData, nsWindow* aWindow);
|
||||
InProcessWinCompositorWidget(const CompositorWidgetInitData& aInitData,
|
||||
const layers::CompositorOptions& aOptions,
|
||||
nsWindow* aWindow);
|
||||
|
||||
void ObserveVsync(VsyncObserver* aObserver) override;
|
||||
nsIWidget* RealWidget() override;
|
||||
|
@ -19,8 +19,10 @@ namespace widget {
|
||||
|
||||
using namespace mozilla::gfx;
|
||||
|
||||
WinCompositorWidget::WinCompositorWidget(const CompositorWidgetInitData& aInitData)
|
||||
: mWidgetKey(aInitData.widgetKey()),
|
||||
WinCompositorWidget::WinCompositorWidget(const CompositorWidgetInitData& aInitData,
|
||||
const layers::CompositorOptions& aOptions)
|
||||
: CompositorWidget(aOptions)
|
||||
, mWidgetKey(aInitData.widgetKey()),
|
||||
mWnd(reinterpret_cast<HWND>(aInitData.hWnd())),
|
||||
mTransparencyMode(static_cast<nsTransparencyMode>(aInitData.transparencyMode())),
|
||||
mMemoryDC(nullptr),
|
||||
|
@ -43,7 +43,8 @@ class WinCompositorWidget
|
||||
public CompositorWidgetDelegate
|
||||
{
|
||||
public:
|
||||
WinCompositorWidget(const CompositorWidgetInitData& aInitData);
|
||||
WinCompositorWidget(const CompositorWidgetInitData& aInitData,
|
||||
const layers::CompositorOptions& aOptions);
|
||||
|
||||
bool PreRender(WidgetRenderingContext*) override;
|
||||
void PostRender(WidgetRenderingContext*) override;
|
||||
|
@ -3901,7 +3901,9 @@ nsWindow::GetLayerManager(PLayerTransactionChild* aShadowManager,
|
||||
reinterpret_cast<uintptr_t>(mWnd),
|
||||
reinterpret_cast<uintptr_t>(static_cast<nsIWidget*>(this)),
|
||||
mTransparencyMode);
|
||||
mBasicLayersSurface = new InProcessWinCompositorWidget(initData, this);
|
||||
// If we're not using the compositor, the options don't actually matter.
|
||||
CompositorOptions options(false);
|
||||
mBasicLayersSurface = new InProcessWinCompositorWidget(initData, options, this);
|
||||
mCompositorWidgetDelegate = mBasicLayersSurface;
|
||||
mLayerManager = CreateBasicLayerManager();
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user