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
This commit is contained in:
sotaro 2019-04-23 12:21:56 +00:00
parent e14a26647f
commit 521898a03e
5 changed files with 16 additions and 14 deletions

View File

@ -266,7 +266,7 @@ mozilla::ipc::IPCResult GPUParent::RecvInit(
mozilla::ipc::IPCResult GPUParent::RecvInitCompositorManager(
Endpoint<PCompositorManagerParent>&& 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<PCompositorManagerParent>&& aEndpoint) {
CompositorManagerParent::Create(std::move(aEndpoint));
CompositorManagerParent::Create(std::move(aEndpoint), /* aIsRoot */ false);
return IPC_OK();
}

View File

@ -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;
}

View File

@ -49,7 +49,7 @@ void CompositorManagerChild::InitSameProcess(uint32_t aNamespace,
return;
}
parent->BindComplete();
parent->BindComplete(/* aIsRoot */ true);
sInstance = child.forget();
}

View File

@ -51,7 +51,7 @@ CompositorManagerParent::CreateSameProcess() {
/* static */
bool CompositorManagerParent::Create(
Endpoint<PCompositorManagerParent>&& aEndpoint) {
Endpoint<PCompositorManagerParent>&& 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<CompositorManagerParent> bridge = new CompositorManagerParent();
RefPtr<Runnable> runnable =
NewRunnableMethod<Endpoint<PCompositorManagerParent>&&>(
NewRunnableMethod<Endpoint<PCompositorManagerParent>&&, 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<PCompositorManagerParent>&& aEndpoint) {
Endpoint<PCompositorManagerParent>&& 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;
}

View File

@ -30,7 +30,8 @@ class CompositorManagerParent final : public PCompositorManagerParent {
public:
static already_AddRefed<CompositorManagerParent> CreateSameProcess();
static bool Create(Endpoint<PCompositorManagerParent>&& aEndpoint);
static bool Create(Endpoint<PCompositorManagerParent>&& aEndpoint,
bool aIsRoot);
static void Shutdown();
static already_AddRefed<CompositorBridgeParent>
@ -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<PCompositorManagerParent>&& aEndpoint);
void Bind(Endpoint<PCompositorManagerParent>&& aEndpoint, bool aIsRoot);
void DeallocPCompositorManagerParent() override;