Use CompositorWidgetProxy in place of nsIWidget in the compositor. (
bug 1264545 part 4, r=jimm)
--- a/gfx/layers/Compositor.h
+++ b/gfx/layers/Compositor.h
@@ -184,17 +184,18 @@ enum SurfaceInitMode
class Compositor
{
protected:
virtual ~Compositor() {}
public:
NS_INLINE_DECL_REFCOUNTING(Compositor)
- explicit Compositor(nsIWidget* aWidget, CompositorBridgeParent* aParent = nullptr)
+ explicit Compositor(widget::CompositorWidgetProxy* aWidget,
+ CompositorBridgeParent* aParent = nullptr)
: mCompositorID(0)
, mDiagnosticTypes(DiagnosticTypes::NO_DIAGNOSTIC)
, mParent(aParent)
, mScreenRotation(ROTATION_0)
, mWidget(aWidget)
{
}
@@ -579,17 +580,17 @@ protected:
size_t mPixelsPerFrame;
size_t mPixelsFilled;
ScreenRotation mScreenRotation;
RefPtr<gfx::DrawTarget> mTarget;
gfx::IntRect mTargetBounds;
- nsIWidget* mWidget;
+ widget::CompositorWidgetProxy* mWidget;
#if defined(MOZ_WIDGET_GONK) && ANDROID_VERSION >= 17
FenceHandle mReleaseFenceHandle;
#endif
private:
static LayersBackend sBackend;
--- a/gfx/layers/basic/BasicCompositor.cpp
+++ b/gfx/layers/basic/BasicCompositor.cpp
@@ -73,17 +73,17 @@ public:
SetUpdateSerial(0);
}
public:
RefPtr<gfx::DataSourceSurface> mSurface;
bool mWrappingExistingData;
};
-BasicCompositor::BasicCompositor(CompositorBridgeParent* aParent, nsIWidget *aWidget)
+BasicCompositor::BasicCompositor(CompositorBridgeParent* aParent, widget::CompositorWidgetProxy* aWidget)
: Compositor(aWidget, aParent)
, mDidExternalComposition(false)
{
MOZ_COUNT_CTOR(BasicCompositor);
mMaxTextureSize =
Factory::GetMaxSurfaceSize(gfxPlatform::GetPlatform()->GetContentBackendFor(LayersBackend::LAYERS_BASIC));
}
--- a/gfx/layers/basic/BasicCompositor.h
+++ b/gfx/layers/basic/BasicCompositor.h
@@ -37,17 +37,17 @@ public:
RefPtr<gfx::DrawTarget> mDrawTarget;
gfx::IntSize mSize;
};
class BasicCompositor : public Compositor
{
public:
- explicit BasicCompositor(CompositorBridgeParent* aParent, nsIWidget *aWidget);
+ explicit BasicCompositor(CompositorBridgeParent* aParent, widget::CompositorWidgetProxy *aWidget);
protected:
virtual ~BasicCompositor();
public:
virtual BasicCompositor* AsBasicCompositor() override { return this; }
--- a/gfx/layers/basic/X11BasicCompositor.h
+++ b/gfx/layers/basic/X11BasicCompositor.h
@@ -41,17 +41,17 @@ public:
private:
// We are going to buffer layer content on this xlib draw target
RefPtr<mozilla::gfx::DrawTarget> mBufferDrawTarget;
};
class X11BasicCompositor : public BasicCompositor
{
public:
- explicit X11BasicCompositor(CompositorBridgeParent* aParent, nsIWidget *aWidget)
+ explicit X11BasicCompositor(CompositorBridgeParent* aParent, widget::CompositorWidgetProxy* aWidget)
: BasicCompositor(aParent, aWidget)
{}
virtual already_AddRefed<DataTextureSource>
CreateDataTextureSource(TextureFlags aFlags = TextureFlags::NO_FLAGS) override;
virtual already_AddRefed<DataTextureSource>
CreateDataTextureSourceAround(gfx::DataSourceSurface* aSurface) override { return nullptr; }
--- a/gfx/layers/d3d11/CompositorD3D11.cpp
+++ b/gfx/layers/d3d11/CompositorD3D11.cpp
@@ -154,17 +154,17 @@ private:
return true;
}
// Only used during initialization.
RefPtr<ID3D11Device> mDevice;
bool mInitOkay;
};
-CompositorD3D11::CompositorD3D11(CompositorBridgeParent* aParent, nsIWidget* aWidget)
+CompositorD3D11::CompositorD3D11(CompositorBridgeParent* aParent, widget::CompositorWidgetProxy* aWidget)
: Compositor(aWidget, aParent)
, mAttachments(nullptr)
, mHwnd(nullptr)
, mDisableSequenceForNextFrame(false)
, mVerifyBuffersFailed(false)
{
}
@@ -210,17 +210,17 @@ CompositorD3D11::Initialize()
if (!mContext) {
gfxCriticalNote << "[D3D11] failed to get immediate context";
return false;
}
mFeatureLevel = mDevice->GetFeatureLevel();
- mHwnd = (HWND)mWidget->GetNativeData(NS_NATIVE_WINDOW);
+ mHwnd = (HWND)mWidget->RealWidget()->GetNativeData(NS_NATIVE_WINDOW);
memset(&mVSConstants, 0, sizeof(VertexShaderConstants));
int referenceCount = 0;
UINT size = sizeof(referenceCount);
// If this isn't there yet it'll fail, count will remain 0, which is correct.
mDevice->GetPrivateData(sLayerManagerCount, &size, &referenceCount);
referenceCount++;
@@ -1283,23 +1283,22 @@ CompositorD3D11::PrepareViewport(const g
projection._33 = 0.0f;
PrepareViewport(aSize, projection, 0.0f, 1.0f);
}
void
CompositorD3D11::ForcePresent()
{
- LayoutDeviceIntRect rect;
- mWidget->GetClientBounds(rect);
+ LayoutDeviceIntSize size = mWidget->GetClientSize();
DXGI_SWAP_CHAIN_DESC desc;
mSwapChain->GetDesc(&desc);
- if (desc.BufferDesc.Width == rect.width && desc.BufferDesc.Height == rect.height) {
+ if (desc.BufferDesc.Width == size.width && desc.BufferDesc.Height == size.height) {
mSwapChain->Present(0, 0);
}
}
void
CompositorD3D11::PrepareViewport(const gfx::IntSize& aSize,
const gfx::Matrix4x4& aProjection,
float aZNear, float aZFar)
@@ -1315,20 +1314,17 @@ CompositorD3D11::PrepareViewport(const g
mContext->RSSetViewports(1, &viewport);
memcpy(&mVSConstants.projection, &aProjection._11, sizeof(mVSConstants.projection));
}
void
CompositorD3D11::EnsureSize()
{
- LayoutDeviceIntRect rect;
- mWidget->GetClientBounds(rect);
-
- mSize = rect.Size();
+ mSize = mWidget->GetClientSize();
}
bool
CompositorD3D11::VerifyBufferSize()
{
DXGI_SWAP_CHAIN_DESC swapDesc;
HRESULT hr;
--- a/gfx/layers/d3d11/CompositorD3D11.h
+++ b/gfx/layers/d3d11/CompositorD3D11.h
@@ -37,17 +37,17 @@ struct PixelShaderConstants
int blendConfig[4];
};
struct DeviceAttachmentsD3D11;
class CompositorD3D11 : public Compositor
{
public:
- CompositorD3D11(CompositorBridgeParent* aParent, nsIWidget* aWidget);
+ CompositorD3D11(CompositorBridgeParent* aParent, widget::CompositorWidgetProxy* aWidget);
~CompositorD3D11();
virtual CompositorD3D11* AsCompositorD3D11() override { return this; }
virtual bool Initialize() override;
virtual void Destroy() override {}
virtual TextureFactoryIdentifier
--- a/gfx/layers/d3d9/CompositorD3D9.cpp
+++ b/gfx/layers/d3d9/CompositorD3D9.cpp
@@ -18,17 +18,17 @@
#include "gfxCrashReporterUtils.h"
#include "mozilla/layers/CompositorBridgeParent.h"
namespace mozilla {
namespace layers {
using namespace mozilla::gfx;
-CompositorD3D9::CompositorD3D9(CompositorBridgeParent* aParent, nsIWidget *aWidget)
+CompositorD3D9::CompositorD3D9(CompositorBridgeParent* aParent, widget::CompositorWidgetProxy* aWidget)
: Compositor(aWidget, aParent)
, mDeviceResetCount(0)
, mFailedResetAttempts(0)
{
}
CompositorD3D9::~CompositorD3D9()
{
@@ -44,17 +44,17 @@ CompositorD3D9::Initialize()
MOZ_ASSERT(gfxPlatform::CanUseDirect3D9());
mDeviceManager = gfxWindowsPlatform::GetPlatform()->GetD3D9DeviceManager();
if (!mDeviceManager) {
return false;
}
mSwapChain = mDeviceManager->
- CreateSwapChain((HWND)mWidget->GetNativeData(NS_NATIVE_WINDOW));
+ CreateSwapChain((HWND)mWidget->RealWidget()->GetNativeData(NS_NATIVE_WINDOW));
if (!mSwapChain) {
return false;
}
if (!mWidget->InitCompositor(this)) {
return false;
}
@@ -589,17 +589,17 @@ CompositorD3D9::SetMask(const EffectChai
bool
CompositorD3D9::EnsureSwapChain()
{
MOZ_ASSERT(mDeviceManager, "Don't call EnsureSwapChain without a device manager");
if (!mSwapChain) {
mSwapChain = mDeviceManager->
- CreateSwapChain((HWND)mWidget->GetNativeData(NS_NATIVE_WINDOW));
+ CreateSwapChain((HWND)mWidget->RealWidget()->GetNativeData(NS_NATIVE_WINDOW));
// We could not create a swap chain, return false
if (!mSwapChain) {
// Check the state of the device too
DeviceManagerState state = mDeviceManager->VerifyReadyForRendering();
if (state == DeviceMustRecreate) {
mDeviceManager = nullptr;
}
mParent->InvalidateRemoteLayers();
@@ -757,20 +757,17 @@ CompositorD3D9::PrepareViewport(const gf
if (FAILED(hr)) {
NS_WARNING("Failed to set projection matrix");
}
}
void
CompositorD3D9::EnsureSize()
{
- LayoutDeviceIntRect rect;
- mWidget->GetClientBounds(rect);
-
- mSize = rect.Size();
+ mSize = mWidget->GetClientSize();
}
void
CompositorD3D9::SetSamplerForFilter(Filter aFilter)
{
switch (aFilter) {
case Filter::LINEAR:
device()->SetSamplerState(0, D3DSAMP_MAGFILTER, D3DTEXF_LINEAR);
--- a/gfx/layers/d3d9/CompositorD3D9.h
+++ b/gfx/layers/d3d9/CompositorD3D9.h
@@ -16,17 +16,17 @@
class nsWidget;
namespace mozilla {
namespace layers {
class CompositorD3D9 : public Compositor
{
public:
- CompositorD3D9(CompositorBridgeParent* aParent, nsIWidget *aWidget);
+ CompositorD3D9(CompositorBridgeParent* aParent, widget::CompositorWidgetProxy* aWidget);
~CompositorD3D9();
virtual CompositorD3D9* AsCompositorD3D9() override { return this; }
virtual bool Initialize() override;
virtual void Destroy() override {}
virtual TextureFactoryIdentifier
--- a/gfx/layers/opengl/CompositorOGL.cpp
+++ b/gfx/layers/opengl/CompositorOGL.cpp
@@ -79,18 +79,19 @@ CompositorOGL::BindBackdrop(ShaderProgra
mGLContext->fActiveTexture(aTexUnit);
mGLContext->fBindTexture(LOCAL_GL_TEXTURE_2D, aBackdrop);
mGLContext->fTexParameteri(LOCAL_GL_TEXTURE_2D, LOCAL_GL_TEXTURE_MIN_FILTER, LOCAL_GL_LINEAR);
mGLContext->fTexParameteri(LOCAL_GL_TEXTURE_2D, LOCAL_GL_TEXTURE_MAG_FILTER, LOCAL_GL_LINEAR);
aProgram->SetBackdropTextureUnit(aTexUnit - LOCAL_GL_TEXTURE0);
}
CompositorOGL::CompositorOGL(CompositorBridgeParent* aParent,
- nsIWidget *aWidget, int aSurfaceWidth,
- int aSurfaceHeight, bool aUseExternalSurfaceSize)
+ widget::CompositorWidgetProxy* aWidget,
+ int aSurfaceWidth, int aSurfaceHeight,
+ bool aUseExternalSurfaceSize)
: Compositor(aWidget, aParent)
, mWidgetSize(-1, -1)
, mSurfaceSize(aSurfaceWidth, aSurfaceHeight)
, mHasBGRA(0)
, mUseExternalSurfaceSize(aUseExternalSurfaceSize)
, mFrameInProgress(false)
, mDestroyed(false)
, mViewportSize(0, 0)
@@ -106,41 +107,41 @@ CompositorOGL::~CompositorOGL()
}
already_AddRefed<mozilla::gl::GLContext>
CompositorOGL::CreateContext()
{
RefPtr<GLContext> context;
// Used by mock widget to create an offscreen context
- void* widgetOpenGLContext = mWidget->GetNativeData(NS_NATIVE_OPENGL_CONTEXT);
+ void* widgetOpenGLContext = mWidget->RealWidget()->GetNativeData(NS_NATIVE_OPENGL_CONTEXT);
if (widgetOpenGLContext) {
GLContext* alreadyRefed = reinterpret_cast<GLContext*>(widgetOpenGLContext);
return already_AddRefed<GLContext>(alreadyRefed);
}
#ifdef XP_WIN
if (gfxEnv::LayersPreferEGL()) {
printf_stderr("Trying GL layers...\n");
- context = gl::GLContextProviderEGL::CreateForWindow(mWidget, false);
+ context = gl::GLContextProviderEGL::CreateForWindow(mWidget->RealWidget(), false);
}
#endif
// Allow to create offscreen GL context for main Layer Manager
if (!context && gfxEnv::LayersPreferOffscreen()) {
SurfaceCaps caps = SurfaceCaps::ForRGB();
caps.preserve = false;
caps.bpp16 = gfxPlatform::GetPlatform()->GetOffscreenFormat() == SurfaceFormat::R5G6B5_UINT16;
context = GLContextProvider::CreateOffscreen(mSurfaceSize,
caps, CreateContextFlags::REQUIRE_COMPAT_PROFILE);
}
if (!context) {
- context = gl::GLContextProvider::CreateForWindow(mWidget,
+ context = gl::GLContextProvider::CreateForWindow(mWidget->RealWidget(),
gfxPlatform::GetPlatform()->RequiresAcceleratedGLContextForCompositorOGL());
}
if (!context) {
NS_WARNING("Failed to create CompositorOGL context");
}
#ifdef MOZ_WIDGET_GONK
@@ -599,17 +600,17 @@ CompositingRenderTarget*
CompositorOGL::GetCurrentRenderTarget() const
{
return mCurrentRenderTarget;
}
static GLenum
GetFrameBufferInternalFormat(GLContext* gl,
GLuint aFrameBuffer,
- nsIWidget* aWidget)
+ mozilla::widget::CompositorWidgetProxy* aWidget)
{
if (aFrameBuffer == 0) { // default framebuffer
return aWidget->GetGLFrameBufferFormat();
}
return LOCAL_GL_RGBA;
}
void
@@ -1456,23 +1457,23 @@ CompositorOGL::EndFrame()
{
PROFILER_LABEL("CompositorOGL", "EndFrame",
js::ProfileEntry::Category::GRAPHICS);
MOZ_ASSERT(mCurrentRenderTarget == mWindowRenderTarget, "Rendering target not properly restored");
#ifdef MOZ_DUMP_PAINTING
if (gfxEnv::DumpCompositorTextures()) {
- LayoutDeviceIntRect rect;
+ LayoutDeviceIntSize size;
if (mUseExternalSurfaceSize) {
- rect = LayoutDeviceIntRect(0, 0, mSurfaceSize.width, mSurfaceSize.height);
+ size = LayoutDeviceIntSize(mSurfaceSize.width, mSurfaceSize.height);
} else {
- mWidget->GetBounds(rect);
+ size = mWidget->GetClientSize();
}
- RefPtr<DrawTarget> target = gfxPlatform::GetPlatform()->CreateOffscreenContentDrawTarget(IntSize(rect.width, rect.height), SurfaceFormat::B8G8R8A8);
+ RefPtr<DrawTarget> target = gfxPlatform::GetPlatform()->CreateOffscreenContentDrawTarget(IntSize(size.width, size.height), SurfaceFormat::B8G8R8A8);
if (target) {
CopyToTarget(target, nsIntPoint(), Matrix());
WriteSnapshotToDumpFile(this, target);
}
}
#endif
mContextStateTracker.PopOGLSection(gl(), "Frame");
--- a/gfx/layers/opengl/CompositorOGL.h
+++ b/gfx/layers/opengl/CompositorOGL.h
@@ -189,17 +189,18 @@ class CompositorOGL final : public Compo
typedef mozilla::gl::GLContext GLContext;
friend class GLManagerCompositor;
friend class CompositingRenderTargetOGL;
std::map<ShaderConfigOGL, ShaderProgramOGL*> mPrograms;
public:
explicit CompositorOGL(CompositorBridgeParent* aParent,
- nsIWidget *aWidget, int aSurfaceWidth = -1, int aSurfaceHeight = -1,
+ widget::CompositorWidgetProxy* aWidget,
+ int aSurfaceWidth = -1, int aSurfaceHeight = -1,
bool aUseExternalSurfaceSize = false);
protected:
virtual ~CompositorOGL();
public:
virtual CompositorOGL* AsCompositorOGL() override { return this; }
--- a/widget/CompositorWidgetProxy.h
+++ b/widget/CompositorWidgetProxy.h
@@ -6,16 +6,17 @@
#define mozilla_widget_CompositorWidgetProxy_h__
#include "nsISupports.h"
#include "mozilla/RefPtr.h"
#include "Units.h"
namespace mozilla {
namespace layers {
+class Compositor;
class LayerManagerComposite;
class Compositor;
class Composer2D;
} // namespace layers
namespace gfx {
class DrawTarget;
} // namespace gfx
namespace widget {