Bug 1315974 - Have the CompositorBridgeChild take a LayerManager instead of a ClientLayerManager. r?dvander
MozReview-Commit-ID: CPTCQgIl5ad
--- a/gfx/ipc/GPUProcessManager.cpp
+++ b/gfx/ipc/GPUProcessManager.cpp
@@ -410,17 +410,17 @@ GPUProcessManager::DestroyProcess()
if (mVsyncBridge) {
mVsyncBridge->Close();
mVsyncBridge = nullptr;
}
}
RefPtr<CompositorSession>
GPUProcessManager::CreateTopLevelCompositor(nsBaseWidget* aWidget,
- ClientLayerManager* aLayerManager,
+ LayerManager* aLayerManager,
CSSToLayoutDeviceScale aScale,
bool aUseAPZ,
bool aUseExternalSurfaceSize,
const gfx::IntSize& aSurfaceSize)
{
uint64_t layerTreeId = AllocateLayerTreeId();
EnsureGPUReady();
@@ -451,17 +451,17 @@ GPUProcessManager::CreateTopLevelComposi
aScale,
aUseAPZ,
aUseExternalSurfaceSize,
aSurfaceSize);
}
RefPtr<CompositorSession>
GPUProcessManager::CreateRemoteSession(nsBaseWidget* aWidget,
- ClientLayerManager* aLayerManager,
+ LayerManager* aLayerManager,
const uint64_t& aRootLayerTreeId,
CSSToLayoutDeviceScale aScale,
bool aUseAPZ,
bool aUseExternalSurfaceSize,
const gfx::IntSize& aSurfaceSize)
{
#ifdef MOZ_WIDGET_SUPPORTS_OOP_COMPOSITING
ipc::Endpoint<PCompositorBridgeParent> parentPipe;
--- a/gfx/ipc/GPUProcessManager.h
+++ b/gfx/ipc/GPUProcessManager.h
@@ -20,17 +20,16 @@
#include "nsThreadUtils.h"
class nsBaseWidget;
namespace mozilla {
namespace layers {
class IAPZCTreeManager;
class CompositorSession;
-class ClientLayerManager;
class CompositorUpdateObserver;
class PCompositorBridgeChild;
class PImageBridgeChild;
class RemoteCompositorSession;
} // namespace layers
namespace widget {
class CompositorWidget;
} // namespace widget
@@ -52,20 +51,20 @@ class VsyncIOThreadHolder;
// The GPUProcessManager is a singleton responsible for creating GPU-bound
// objects that may live in another process. Currently, it provides access
// to the compositor via CompositorBridgeParent.
class GPUProcessManager final : public GPUProcessHost::Listener
{
friend class layers::RemoteCompositorSession;
- typedef layers::ClientLayerManager ClientLayerManager;
typedef layers::CompositorSession CompositorSession;
+ typedef layers::CompositorUpdateObserver CompositorUpdateObserver;
typedef layers::IAPZCTreeManager IAPZCTreeManager;
- typedef layers::CompositorUpdateObserver CompositorUpdateObserver;
+ typedef layers::LayerManager LayerManager;
typedef layers::PCompositorBridgeChild PCompositorBridgeChild;
typedef layers::PImageBridgeChild PImageBridgeChild;
typedef layers::RemoteCompositorSession RemoteCompositorSession;
public:
static void Initialize();
static void Shutdown();
static GPUProcessManager* Get();
@@ -77,17 +76,17 @@ public:
// Ensure that GPU-bound methods can be used. If no GPU process is being
// used, or one is launched and ready, this function returns immediately.
// Otherwise it blocks until the GPU process has finished launching.
void EnsureGPUReady();
RefPtr<CompositorSession> CreateTopLevelCompositor(
nsBaseWidget* aWidget,
- ClientLayerManager* aLayerManager,
+ LayerManager* aLayerManager,
CSSToLayoutDeviceScale aScale,
bool aUseAPZ,
bool aUseExternalSurfaceSize,
const gfx::IntSize& aSurfaceSize);
bool CreateContentBridges(
base::ProcessId aOtherProcess,
ipc::Endpoint<PCompositorBridgeChild>* aOutCompositor,
@@ -178,17 +177,17 @@ private:
void EnsureVsyncIOThread();
void ShutdownVsyncIOThread();
void EnsureImageBridgeChild();
void EnsureVRManager();
RefPtr<CompositorSession> CreateRemoteSession(
nsBaseWidget* aWidget,
- ClientLayerManager* aLayerManager,
+ LayerManager* aLayerManager,
const uint64_t& aRootLayerTreeId,
CSSToLayoutDeviceScale aScale,
bool aUseAPZ,
bool aUseExternalSurfaceSize,
const gfx::IntSize& aSurfaceSize);
DISALLOW_COPY_AND_ASSIGN(GPUProcessManager);
--- a/gfx/ipc/InProcessCompositorSession.cpp
+++ b/gfx/ipc/InProcessCompositorSession.cpp
@@ -19,17 +19,17 @@ InProcessCompositorSession::InProcessCom
: CompositorSession(aWidget->AsDelegate(), aChild, aParent->RootLayerTreeId()),
mCompositorBridgeParent(aParent),
mCompositorWidget(aWidget)
{
}
/* static */ RefPtr<InProcessCompositorSession>
InProcessCompositorSession::Create(nsIWidget* aWidget,
- ClientLayerManager* aLayerManager,
+ LayerManager* aLayerManager,
const uint64_t& aRootLayerTreeId,
CSSToLayoutDeviceScale aScale,
bool aUseAPZ,
bool aUseExternalSurfaceSize,
const gfx::IntSize& aSurfaceSize)
{
CompositorWidgetInitData initData;
aWidget->GetCompositorWidgetInitData(&initData);
--- a/gfx/ipc/InProcessCompositorSession.h
+++ b/gfx/ipc/InProcessCompositorSession.h
@@ -15,17 +15,17 @@ namespace layers {
// A CompositorSession where both the child and parent CompositorBridge reside
// in the same process.
class InProcessCompositorSession final : public CompositorSession
{
public:
static RefPtr<InProcessCompositorSession> Create(
nsIWidget* aWidget,
- ClientLayerManager* aLayerManager,
+ LayerManager* aLayerManager,
const uint64_t& aRootLayerTreeId,
CSSToLayoutDeviceScale aScale,
bool aUseAPZ,
bool aUseExternalSurfaceSize,
const gfx::IntSize& aSurfaceSize);
CompositorBridgeParent* GetInProcessBridge() const override;
void SetContentController(GeckoContentController* aController) override;
--- a/gfx/layers/ipc/CompositorBridgeChild.cpp
+++ b/gfx/layers/ipc/CompositorBridgeChild.cpp
@@ -69,17 +69,17 @@ static void ShmemAllocated(CompositorBri
MOZ_PERFORMANCE_WARNING("gfx", "The number of shmem allocations is too damn high!");
}
}
static StaticRefPtr<CompositorBridgeChild> sCompositorBridge;
Atomic<int32_t> KnowsCompositor::sSerialCounter(0);
-CompositorBridgeChild::CompositorBridgeChild(ClientLayerManager *aLayerManager)
+CompositorBridgeChild::CompositorBridgeChild(LayerManager *aLayerManager)
: mLayerManager(aLayerManager)
, mCanSend(false)
, mFwdTransactionId(0)
, mMessageLoop(MessageLoop::current())
, mSectionAllocator(nullptr)
{
MOZ_ASSERT(NS_IsMainThread());
}
@@ -251,17 +251,17 @@ CompositorBridgeChild::InitSameProcess(w
MOZ_RELEASE_ASSERT(mCanSend);
mCompositorBridgeParent->InitSameProcess(aWidget, aLayerTreeId, aUseAPZ);
return mCompositorBridgeParent;
}
/* static */ RefPtr<CompositorBridgeChild>
CompositorBridgeChild::CreateRemote(const uint64_t& aProcessToken,
- ClientLayerManager* aLayerManager,
+ LayerManager* aLayerManager,
Endpoint<PCompositorBridgeChild>&& aEndpoint)
{
RefPtr<CompositorBridgeChild> child = new CompositorBridgeChild(aLayerManager);
if (!aEndpoint.Bind(child)) {
return nullptr;
}
child->mCanSend = true;
@@ -521,17 +521,18 @@ CompositorBridgeChild::RecvHideAllPlugin
bool
CompositorBridgeChild::RecvDidComposite(const uint64_t& aId, const uint64_t& aTransactionId,
const TimeStamp& aCompositeStart,
const TimeStamp& aCompositeEnd)
{
if (mLayerManager) {
MOZ_ASSERT(aId == 0);
- RefPtr<ClientLayerManager> m = mLayerManager;
+ RefPtr<ClientLayerManager> m = mLayerManager->AsClientLayerManager();
+ MOZ_ASSERT(m);
m->DidComposite(aTransactionId, aCompositeStart, aCompositeEnd);
} else if (aId != 0) {
RefPtr<dom::TabChild> child = dom::TabChild::GetFrom(aId);
if (child) {
child->DidComposite(aTransactionId, aCompositeStart, aCompositeEnd);
}
}
--- a/gfx/layers/ipc/CompositorBridgeChild.h
+++ b/gfx/layers/ipc/CompositorBridgeChild.h
@@ -45,17 +45,17 @@ struct FrameMetrics;
class CompositorBridgeChild final : public PCompositorBridgeChild,
public TextureForwarder
{
typedef InfallibleTArray<AsyncParentMessageData> AsyncParentMessageArray;
public:
NS_INLINE_DECL_THREADSAFE_REFCOUNTING(CompositorBridgeChild, override);
- explicit CompositorBridgeChild(ClientLayerManager *aLayerManager);
+ explicit CompositorBridgeChild(LayerManager *aLayerManager);
void Destroy();
/**
* Lookup the FrameMetrics shared by the compositor process with the
* associated FrameMetrics::ViewID. The returned FrameMetrics is used
* in progressive paint calculations.
*/
@@ -64,17 +64,17 @@ public:
/**
* Initialize the singleton compositor bridge for a content process.
*/
static bool InitForContent(Endpoint<PCompositorBridgeChild>&& aEndpoint);
static bool ReinitForContent(Endpoint<PCompositorBridgeChild>&& aEndpoint);
static RefPtr<CompositorBridgeChild> CreateRemote(
const uint64_t& aProcessToken,
- ClientLayerManager* aLayerManager,
+ LayerManager* aLayerManager,
Endpoint<PCompositorBridgeChild>&& aEndpoint);
/**
* Initialize the CompositorBridgeChild, create CompositorBridgeParent, and
* open a same-process connection.
*/
CompositorBridgeParent* InitSameProcess(
widget::CompositorWidget* aWidget,
@@ -277,17 +277,17 @@ private:
// the shared FrameMetrics
RefPtr<mozilla::ipc::SharedMemoryBasic> mBuffer;
CrossProcessMutex* mMutex;
uint64_t mLayersId;
// Unique ID of the APZC that is sharing the FrameMetrics
uint32_t mAPZCId;
};
- RefPtr<ClientLayerManager> mLayerManager;
+ RefPtr<LayerManager> mLayerManager;
// When not multi-process, hold a reference to the CompositorBridgeParent to keep it
// alive. This reference should be null in multi-process.
RefPtr<CompositorBridgeParent> mCompositorBridgeParent;
// The ViewID of the FrameMetrics is used as the key for this hash table.
// While this should be safe to use since the ViewID is unique
nsClassHashtable<nsUint64HashKey, SharedFrameMetricsData> mFrameMetricsTable;