From 521898a03e294ae1e2f4d3f575a11300925cf5c2 Mon Sep 17 00:00:00 2001 From: sotaro Date: Tue, 23 Apr 2019 12:21:56 +0000 Subject: [PATCH] Bug 1546298 - Set CompositorManagerParent::sInstance in GPU process r=nical CompositorManagerParent::sInstance is not set in GPU process. It is necessary to send NotifyWebRenderError message. Differential Revision: https://phabricator.services.mozilla.com/D28452 --HG-- extra : moz-landing-system : lando --- gfx/ipc/GPUParent.cpp | 4 ++-- gfx/ipc/GPUProcessManager.cpp | 3 ++- gfx/layers/ipc/CompositorManagerChild.cpp | 2 +- gfx/layers/ipc/CompositorManagerParent.cpp | 14 +++++++------- gfx/layers/ipc/CompositorManagerParent.h | 7 ++++--- 5 files changed, 16 insertions(+), 14 deletions(-) diff --git a/gfx/ipc/GPUParent.cpp b/gfx/ipc/GPUParent.cpp index fe0140563759..5805a83184aa 100644 --- a/gfx/ipc/GPUParent.cpp +++ b/gfx/ipc/GPUParent.cpp @@ -266,7 +266,7 @@ mozilla::ipc::IPCResult GPUParent::RecvInit( mozilla::ipc::IPCResult GPUParent::RecvInitCompositorManager( Endpoint&& aEndpoint) { - CompositorManagerParent::Create(std::move(aEndpoint)); + CompositorManagerParent::Create(std::move(aEndpoint), /* aIsRoot */ true); return IPC_OK(); } @@ -377,7 +377,7 @@ mozilla::ipc::IPCResult GPUParent::RecvSimulateDeviceReset( mozilla::ipc::IPCResult GPUParent::RecvNewContentCompositorManager( Endpoint&& aEndpoint) { - CompositorManagerParent::Create(std::move(aEndpoint)); + CompositorManagerParent::Create(std::move(aEndpoint), /* aIsRoot */ false); return IPC_OK(); } diff --git a/gfx/ipc/GPUProcessManager.cpp b/gfx/ipc/GPUProcessManager.cpp index 2c81abb46215..c05f9363f0bf 100644 --- a/gfx/ipc/GPUProcessManager.cpp +++ b/gfx/ipc/GPUProcessManager.cpp @@ -804,7 +804,8 @@ bool GPUProcessManager::CreateContentCompositorManager( if (mGPUChild) { mGPUChild->SendNewContentCompositorManager(std::move(parentPipe)); - } else if (!CompositorManagerParent::Create(std::move(parentPipe))) { + } else if (!CompositorManagerParent::Create(std::move(parentPipe), + /* aIsRoot */ false)) { return false; } diff --git a/gfx/layers/ipc/CompositorManagerChild.cpp b/gfx/layers/ipc/CompositorManagerChild.cpp index 84a9598a757d..4d8aadc2d56f 100644 --- a/gfx/layers/ipc/CompositorManagerChild.cpp +++ b/gfx/layers/ipc/CompositorManagerChild.cpp @@ -49,7 +49,7 @@ void CompositorManagerChild::InitSameProcess(uint32_t aNamespace, return; } - parent->BindComplete(); + parent->BindComplete(/* aIsRoot */ true); sInstance = child.forget(); } diff --git a/gfx/layers/ipc/CompositorManagerParent.cpp b/gfx/layers/ipc/CompositorManagerParent.cpp index 9fdf0733fd05..6bdff52a5065 100644 --- a/gfx/layers/ipc/CompositorManagerParent.cpp +++ b/gfx/layers/ipc/CompositorManagerParent.cpp @@ -51,7 +51,7 @@ CompositorManagerParent::CreateSameProcess() { /* static */ bool CompositorManagerParent::Create( - Endpoint&& aEndpoint) { + Endpoint&& aEndpoint, bool aIsRoot) { MOZ_ASSERT(NS_IsMainThread()); // We are creating a manager for the another process, inside the GPU process @@ -65,9 +65,9 @@ bool CompositorManagerParent::Create( RefPtr bridge = new CompositorManagerParent(); RefPtr runnable = - NewRunnableMethod&&>( + NewRunnableMethod&&, bool>( "CompositorManagerParent::Bind", bridge, - &CompositorManagerParent::Bind, std::move(aEndpoint)); + &CompositorManagerParent::Bind, std::move(aEndpoint), aIsRoot); CompositorThreadHolder::Loop()->PostTask(runnable.forget()); return true; } @@ -119,16 +119,16 @@ CompositorManagerParent::CompositorManagerParent() CompositorManagerParent::~CompositorManagerParent() {} void CompositorManagerParent::Bind( - Endpoint&& aEndpoint) { + Endpoint&& aEndpoint, bool aIsRoot) { MOZ_ASSERT(CompositorThreadHolder::IsInCompositorThread()); if (NS_WARN_IF(!aEndpoint.Bind(this))) { return; } - BindComplete(); + BindComplete(aIsRoot); } -void CompositorManagerParent::BindComplete() { +void CompositorManagerParent::BindComplete(bool aIsRoot) { MOZ_ASSERT(CompositorThreadHolder::IsInCompositorThread() || NS_IsMainThread()); @@ -137,7 +137,7 @@ void CompositorManagerParent::BindComplete() { AddRef(); StaticMutexAutoLock lock(sMutex); - if (OtherPid() == base::GetCurrentProcId()) { + if (aIsRoot) { sInstance = this; } diff --git a/gfx/layers/ipc/CompositorManagerParent.h b/gfx/layers/ipc/CompositorManagerParent.h index e2983c5437f7..f56593a74e91 100644 --- a/gfx/layers/ipc/CompositorManagerParent.h +++ b/gfx/layers/ipc/CompositorManagerParent.h @@ -30,7 +30,8 @@ class CompositorManagerParent final : public PCompositorManagerParent { public: static already_AddRefed CreateSameProcess(); - static bool Create(Endpoint&& aEndpoint); + static bool Create(Endpoint&& aEndpoint, + bool aIsRoot); static void Shutdown(); static already_AddRefed @@ -50,7 +51,7 @@ class CompositorManagerParent final : public PCompositorManagerParent { mozilla::ipc::IPCResult RecvReportMemory(ReportMemoryResolver&&); - void BindComplete(); + void BindComplete(bool aIsRoot); void ActorDestroy(ActorDestroyReason aReason) override; bool DeallocPCompositorBridgeParent(PCompositorBridgeParent* aActor); @@ -71,7 +72,7 @@ class CompositorManagerParent final : public PCompositorManagerParent { CompositorManagerParent(); virtual ~CompositorManagerParent(); - void Bind(Endpoint&& aEndpoint); + void Bind(Endpoint&& aEndpoint, bool aIsRoot); void DeallocPCompositorManagerParent() override;