tor-browser

The Tor Browser
git clone https://git.dasho.dev/tor-browser.git
Log | Files | Refs | README | LICENSE

commit efd1b5b9f2cf6eca7ca80e3680c0f0e8c03b30da
parent 9aa23feec43b4c12497432a3f8edd31e9e70a727
Author: Andrew Osmond <aosmond@mozilla.com>
Date:   Fri, 19 Dec 2025 19:44:09 +0000

Bug 2006934 - Revert bug 2001152 due to instability when failing start the GPU process. r=ipc-reviewers,gfx-reviewers,mccr8,jnicol

This was causing infinite loops during fallback, eventually resulting
in an OOM crash.

Differential Revision: https://phabricator.services.mozilla.com/D277221

Diffstat:
Mgfx/ipc/CompositorSession.cpp | 15+++++----------
Mgfx/ipc/CompositorSession.h | 21++++++++++++++++-----
Mgfx/ipc/GPUParent.cpp | 16++++++++++++++++
Mgfx/ipc/GPUParent.h | 6++++++
Mgfx/ipc/GPUProcessManager.cpp | 75++++++++++++++++++++++++++++++++++++++++++++++++---------------------------
Mgfx/ipc/GPUProcessManager.h | 5+++++
Mgfx/ipc/InProcessCompositorSession.cpp | 19+++----------------
Mgfx/ipc/InProcessCompositorSession.h | 3+--
Mgfx/ipc/PGPU.ipdl | 5+++++
Mgfx/ipc/RemoteCompositorSession.cpp | 4+---
Mgfx/ipc/RemoteCompositorSession.h | 1-
Mgfx/layers/ipc/CompositorBridgeParent.cpp | 15---------------
Mgfx/layers/ipc/CompositorBridgeParent.h | 8--------
Mgfx/layers/ipc/ContentCompositorBridgeParent.h | 8--------
Mgfx/layers/ipc/PCompositorBridge.ipdl | 12+-----------
Mgfx/layers/ipc/UiCompositorControllerParent.cpp | 9+++++++--
Mipc/ipdl/sync-messages.ini | 2++
17 files changed, 116 insertions(+), 108 deletions(-)

diff --git a/gfx/ipc/CompositorSession.cpp b/gfx/ipc/CompositorSession.cpp @@ -4,8 +4,12 @@ * License, v. 2.0. If a copy of the MPL was not distributed with this * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ #include "CompositorSession.h" +#include "base/process_util.h" +#include "GPUChild.h" +#include "mozilla/gfx/Logging.h" +#include "mozilla/gfx/GPUProcessHost.h" #include "mozilla/layers/CompositorBridgeChild.h" -#include "mozilla/layers/UiCompositorControllerChild.h" +#include "mozilla/layers/CompositorBridgeParent.h" namespace mozilla { namespace layers { @@ -15,12 +19,10 @@ using namespace gfx; CompositorSession::CompositorSession(nsIWidget* aWidget, CompositorWidgetDelegate* aDelegate, CompositorBridgeChild* aChild, - UiCompositorControllerChild* aUiController, const LayersId& aRootLayerTreeId) : mWidget(aWidget), mCompositorWidgetDelegate(aDelegate), mCompositorBridgeChild(aChild), - mUiCompositorControllerChild(aUiController), mRootLayerTreeId(aRootLayerTreeId) {} CompositorSession::~CompositorSession() = default; @@ -29,12 +31,5 @@ CompositorBridgeChild* CompositorSession::GetCompositorBridgeChild() { return mCompositorBridgeChild; } -#if defined(MOZ_WIDGET_ANDROID) -RefPtr<UiCompositorControllerChild> -CompositorSession::GetUiCompositorControllerChild() const { - return mUiCompositorControllerChild; -} -#endif - } // namespace layers } // namespace mozilla diff --git a/gfx/ipc/CompositorSession.h b/gfx/ipc/CompositorSession.h @@ -10,6 +10,9 @@ #include "mozilla/layers/LayersTypes.h" #include "mozilla/layers/CompositorTypes.h" #include "nsISupportsImpl.h" +#if defined(MOZ_WIDGET_ANDROID) +# include "mozilla/layers/UiCompositorControllerChild.h" +#endif // defined(MOZ_WIDGET_ANDROID) class nsIWidget; @@ -29,7 +32,6 @@ class IAPZCTreeManager; class CompositorBridgeParent; class CompositorBridgeChild; class ClientLayerManager; -class UiCompositorControllerChild; // A CompositorSession provides access to a compositor without exposing whether // or not it's in-process or out-of-process. @@ -68,12 +70,20 @@ class CompositorSession { LayersId RootLayerTreeId() const { return mRootLayerTreeId; } #if defined(MOZ_WIDGET_ANDROID) - RefPtr<UiCompositorControllerChild> GetUiCompositorControllerChild() const; + // Set the UiCompositorControllerChild after Session creation so the Session + // constructor doesn't get mucked up for other platforms. + void SetUiCompositorControllerChild( + RefPtr<UiCompositorControllerChild>&& aUiController) { + mUiCompositorControllerChild = std::move(aUiController); + } + + RefPtr<UiCompositorControllerChild> GetUiCompositorControllerChild() { + return mUiCompositorControllerChild; + } #endif // defined(MOZ_WIDGET_ANDROID) protected: CompositorSession(nsIWidget* aWidget, CompositorWidgetDelegate* aDelegate, CompositorBridgeChild* aChild, - UiCompositorControllerChild* aUiController, const LayersId& aRootLayerTreeId); virtual ~CompositorSession(); @@ -81,9 +91,10 @@ class CompositorSession { nsIWidget* mWidget; CompositorWidgetDelegate* mCompositorWidgetDelegate; RefPtr<CompositorBridgeChild> mCompositorBridgeChild; - RefPtr<UiCompositorControllerChild> mUiCompositorControllerChild; LayersId mRootLayerTreeId; - +#if defined(MOZ_WIDGET_ANDROID) + RefPtr<UiCompositorControllerChild> mUiCompositorControllerChild; +#endif // defined(MOZ_WIDGET_ANDROID) private: DISALLOW_COPY_AND_ASSIGN(CompositorSession); }; diff --git a/gfx/ipc/GPUParent.cpp b/gfx/ipc/GPUParent.cpp @@ -46,6 +46,7 @@ #include "mozilla/ipc/CrashReporterClient.h" #include "mozilla/ipc/ProcessChild.h" #include "mozilla/ipc/ProcessUtils.h" +#include "mozilla/layers/APZInputBridgeParent.h" #include "mozilla/layers/APZPublicUtils.h" // for apz::InitializeGlobalState #include "mozilla/layers/APZThreadUtils.h" #include "mozilla/layers/CompositorBridgeParent.h" @@ -54,6 +55,7 @@ #include "mozilla/layers/ImageBridgeParent.h" #include "mozilla/layers/LayerTreeOwnerTracker.h" #include "mozilla/layers/RemoteTextureMap.h" +#include "mozilla/layers/UiCompositorControllerParent.h" #include "mozilla/layers/VideoBridgeParent.h" #include "mozilla/webrender/RenderThread.h" #include "mozilla/webrender/WebRenderAPI.h" @@ -470,6 +472,20 @@ mozilla::ipc::IPCResult GPUParent::RecvInitVR( return IPC_OK(); } +mozilla::ipc::IPCResult GPUParent::RecvInitUiCompositorController( + const LayersId& aRootLayerTreeId, + Endpoint<PUiCompositorControllerParent>&& aEndpoint) { + UiCompositorControllerParent::Start(aRootLayerTreeId, std::move(aEndpoint)); + return IPC_OK(); +} + +mozilla::ipc::IPCResult GPUParent::RecvInitAPZInputBridge( + const LayersId& aRootLayerTreeId, + Endpoint<PAPZInputBridgeParent>&& aEndpoint) { + APZInputBridgeParent::Create(aRootLayerTreeId, std::move(aEndpoint)); + return IPC_OK(); +} + mozilla::ipc::IPCResult GPUParent::RecvInitProfiler( Endpoint<PProfilerChild>&& aEndpoint) { mProfilerController = ChildProfilerController::Create(std::move(aEndpoint)); diff --git a/gfx/ipc/GPUParent.h b/gfx/ipc/GPUParent.h @@ -66,6 +66,12 @@ class GPUParent final : public PGPUParent { mozilla::ipc::IPCResult RecvInitVRManager( Endpoint<PVRManagerParent>&& aEndpoint); mozilla::ipc::IPCResult RecvInitVR(Endpoint<PVRGPUChild>&& aVRGPUChild); + mozilla::ipc::IPCResult RecvInitUiCompositorController( + const LayersId& aRootLayerTreeId, + Endpoint<PUiCompositorControllerParent>&& aEndpoint); + mozilla::ipc::IPCResult RecvInitAPZInputBridge( + const LayersId& aRootLayerTreeId, + Endpoint<PAPZInputBridgeParent>&& aEndpoint); mozilla::ipc::IPCResult RecvInitProfiler( Endpoint<PProfilerChild>&& aEndpoint); mozilla::ipc::IPCResult RecvUpdateVar(const nsTArray<GfxVarUpdate>& var); diff --git a/gfx/ipc/GPUProcessManager.cpp b/gfx/ipc/GPUProcessManager.cpp @@ -41,7 +41,6 @@ #include "mozilla/layers/InProcessCompositorSession.h" #include "mozilla/layers/LayerTreeOwnerTracker.h" #include "mozilla/layers/RemoteCompositorSession.h" -#include "mozilla/layers/UiCompositorControllerChild.h" #include "mozilla/layers/VideoBridgeParent.h" #include "mozilla/webrender/RenderThread.h" #include "mozilla/widget/PlatformWidgetTypes.h" @@ -66,6 +65,8 @@ #if defined(MOZ_WIDGET_ANDROID) # include "mozilla/java/SurfaceControlManagerWrappers.h" +# include "mozilla/widget/AndroidUiThread.h" +# include "mozilla/layers/UiCompositorControllerChild.h" #endif // defined(MOZ_WIDGET_ANDROID) #if defined(XP_WIN) @@ -549,6 +550,39 @@ bool GPUProcessManager::EnsureVRManager() { return true; } +#if defined(MOZ_WIDGET_ANDROID) +RefPtr<UiCompositorControllerChild> +GPUProcessManager::CreateUiCompositorController(nsIWidget* aWidget, + const LayersId aId) { + MOZ_DIAGNOSTIC_ASSERT(IsGPUReady()); + + if (!mGPUChild) { + return UiCompositorControllerChild::CreateForSameProcess(aId, aWidget); + } + + ipc::Endpoint<PUiCompositorControllerParent> parentPipe; + ipc::Endpoint<PUiCompositorControllerChild> childPipe; + nsresult rv = PUiCompositorController::CreateEndpoints( + mGPUChild->OtherEndpointProcInfo(), ipc::EndpointProcInfo::Current(), + &parentPipe, &childPipe); + if (NS_FAILED(rv)) { + DisableGPUProcess("Failed to create PUiCompositorController endpoints"); + return nullptr; + } + + mGPUChild->SendInitUiCompositorController(aId, std::move(parentPipe)); + RefPtr<UiCompositorControllerChild> result = + UiCompositorControllerChild::CreateForGPUProcess( + mProcessToken, std::move(childPipe), aWidget); + + if (result) { + result->SetCompositorSurfaceManager( + mProcess->GetCompositorSurfaceManager()); + } + return result; +} +#endif // defined(MOZ_WIDGET_ANDROID) + void GPUProcessManager::OnProcessLaunchComplete(GPUProcessHost* aHost) { MOZ_ASSERT(mProcess && mProcess == aHost); @@ -1251,6 +1285,16 @@ already_AddRefed<CompositorSession> GPUProcessManager::CreateTopLevelCompositor( aInnerWindowId); } +#if defined(MOZ_WIDGET_ANDROID) + if (session) { + // Nothing to do if controller gets a nullptr + auto controller = + CreateUiCompositorController(aWidget, session->RootLayerTreeId()); + MOZ_ASSERT(controller); + session->SetUiCompositorControllerChild(std::move(controller)); + } +#endif // defined(MOZ_WIDGET_ANDROID) + *aRetryOut = false; return session.forget(); } @@ -1302,12 +1346,12 @@ RefPtr<CompositorSession> GPUProcessManager::CreateRemoteSession( ipc::Endpoint<PAPZInputBridgeParent> parentPipe; ipc::Endpoint<PAPZInputBridgeChild> childPipe; nsresult rv = PAPZInputBridge::CreateEndpoints( - child->OtherEndpointProcInfo(), ipc::EndpointProcInfo::Current(), + mGPUChild->OtherEndpointProcInfo(), ipc::EndpointProcInfo::Current(), &parentPipe, &childPipe); if (NS_FAILED(rv)) { return nullptr; } - child->SendInitAPZInputBridge(std::move(parentPipe)); + mGPUChild->SendInitAPZInputBridge(aRootLayerTreeId, std::move(parentPipe)); RefPtr<APZInputBridgeChild> inputBridge = APZInputBridgeChild::Create(mProcessToken, std::move(childPipe)); @@ -1318,30 +1362,7 @@ RefPtr<CompositorSession> GPUProcessManager::CreateRemoteSession( apz->SetInputBridge(inputBridge); } - RefPtr<UiCompositorControllerChild> uiController = nullptr; -# if defined(MOZ_WIDGET_ANDROID) - { - ipc::Endpoint<PUiCompositorControllerParent> parentPipe; - ipc::Endpoint<PUiCompositorControllerChild> childPipe; - nsresult rv = PUiCompositorController::CreateEndpoints( - child->OtherEndpointProcInfo(), ipc::EndpointProcInfo::Current(), - &parentPipe, &childPipe); - if (NS_FAILED(rv)) { - return nullptr; - } - child->SendInitUiCompositorController(std::move(parentPipe)); - uiController = UiCompositorControllerChild::CreateForGPUProcess( - mProcessToken, std::move(childPipe), aWidget); - MOZ_ASSERT(uiController); - if (!uiController) { - return nullptr; - } - uiController->SetCompositorSurfaceManager( - mProcess->GetCompositorSurfaceManager()); - } -# endif - - return new RemoteCompositorSession(aWidget, child, widget, apz, uiController, + return new RemoteCompositorSession(aWidget, child, widget, apz, aRootLayerTreeId); #else gfxCriticalNote << "Platform does not support out-of-process compositing"; diff --git a/gfx/ipc/GPUProcessManager.h b/gfx/ipc/GPUProcessManager.h @@ -338,6 +338,11 @@ class GPUProcessManager final : public GPUProcessHost::Listener { void SetProcessIsForeground(); #endif +#if defined(MOZ_WIDGET_ANDROID) + RefPtr<UiCompositorControllerChild> CreateUiCompositorController( + nsIWidget* aWidget, const LayersId aId); +#endif // defined(MOZ_WIDGET_ANDROID) + RefPtr<CompositorSession> CreateRemoteSession( nsIWidget* aWidget, WebRenderLayerManager* aLayerManager, const LayersId& aRootLayerTreeId, CSSToLayoutDeviceScale aScale, diff --git a/gfx/ipc/InProcessCompositorSession.cpp b/gfx/ipc/InProcessCompositorSession.cpp @@ -12,7 +12,6 @@ #include "mozilla/layers/CompositorManagerChild.h" #include "mozilla/layers/CompositorManagerParent.h" #include "mozilla/layers/IAPZCTreeManager.h" -#include "mozilla/layers/UiCompositorControllerChild.h" #include "mozilla/widget/CompositorWidget.h" #include "mozilla/widget/PlatformWidgetTypes.h" #include "nsIWidget.h" @@ -22,10 +21,9 @@ namespace layers { InProcessCompositorSession::InProcessCompositorSession( nsIWidget* aWidget, widget::CompositorWidget* aCompositorWidget, - CompositorBridgeChild* aChild, CompositorBridgeParent* aParent, - UiCompositorControllerChild* aUiController) + CompositorBridgeChild* aChild, CompositorBridgeParent* aParent) : CompositorSession(aWidget, aCompositorWidget->AsDelegate(), aChild, - aUiController, aParent->RootLayerTreeId()), + aParent->RootLayerTreeId()), mCompositorBridgeParent(aParent), mCompositorWidget(aCompositorWidget) { gfx::GPUProcessManager::Get()->RegisterInProcessSession(this); @@ -59,18 +57,7 @@ RefPtr<InProcessCompositorSession> InProcessCompositorSession::Create( return nullptr; } - RefPtr<UiCompositorControllerChild> uiController = nullptr; -#if defined(MOZ_WIDGET_ANDROID) - uiController = UiCompositorControllerChild::CreateForSameProcess( - aRootLayerTreeId, aWidget); - MOZ_ASSERT(uiController); - if (!uiController) { - return nullptr; - } -#endif - - return new InProcessCompositorSession(aWidget, widget, child, parent, - uiController); + return new InProcessCompositorSession(aWidget, widget, child, parent); } void InProcessCompositorSession::NotifySessionLost() { diff --git a/gfx/ipc/InProcessCompositorSession.h b/gfx/ipc/InProcessCompositorSession.h @@ -41,8 +41,7 @@ class InProcessCompositorSession final : public CompositorSession { InProcessCompositorSession(nsIWidget* aWidget, widget::CompositorWidget* aCompositorWidget, CompositorBridgeChild* aChild, - CompositorBridgeParent* aParent, - UiCompositorControllerChild* aUiController); + CompositorBridgeParent* aParent); private: RefPtr<CompositorBridgeParent> mCompositorBridgeParent; diff --git a/gfx/ipc/PGPU.ipdl b/gfx/ipc/PGPU.ipdl @@ -8,6 +8,7 @@ include GraphicsMessages; include MemoryReportTypes; include HangTypes; include PrefsTypes; +include protocol PAPZInputBridge; include protocol PCompositorManager; include protocol PImageBridge; include protocol PProfiler; @@ -15,6 +16,7 @@ include protocol PVRGPU; include protocol PVRManager; include protocol PVideoBridge; include protocol PVsyncBridge; +include protocol PUiCompositorController; include protocol PRemoteMediaManager; #if defined(MOZ_SANDBOX) && defined(MOZ_DEBUG) && defined(ENABLE_TESTS) @@ -71,6 +73,9 @@ parent: async InitImageBridge(Endpoint<PImageBridgeParent> endpoint); async InitVideoBridge(Endpoint<PVideoBridgeParent> endpoint, VideoBridgeSource aSource); async InitVRManager(Endpoint<PVRManagerParent> endpoint); + async InitUiCompositorController(LayersId rootLayerTreeId, Endpoint<PUiCompositorControllerParent> endpoint); + async InitAPZInputBridge(LayersId layersId, + Endpoint<PAPZInputBridgeParent> endpoint); async InitProfiler(Endpoint<PProfilerChild> endpoint); // Forward GPU process its endpoints to the VR process. async InitVR(Endpoint<PVRGPUChild> endpoint); diff --git a/gfx/ipc/RemoteCompositorSession.cpp b/gfx/ipc/RemoteCompositorSession.cpp @@ -26,10 +26,8 @@ using namespace widget; RemoteCompositorSession::RemoteCompositorSession( nsIWidget* aWidget, CompositorBridgeChild* aChild, CompositorWidgetDelegate* aWidgetDelegate, APZCTreeManagerChild* aAPZ, - UiCompositorControllerChild* aUiController, const LayersId& aRootLayerTreeId) - : CompositorSession(aWidget, aWidgetDelegate, aChild, aUiController, - aRootLayerTreeId), + : CompositorSession(aWidget, aWidgetDelegate, aChild, aRootLayerTreeId), mAPZ(aAPZ) { MOZ_ASSERT(!gfxPlatform::IsHeadless()); GPUProcessManager::Get()->RegisterRemoteProcessSession(this); diff --git a/gfx/ipc/RemoteCompositorSession.h b/gfx/ipc/RemoteCompositorSession.h @@ -22,7 +22,6 @@ class RemoteCompositorSession final : public CompositorSession { RemoteCompositorSession(nsIWidget* aWidget, CompositorBridgeChild* aChild, CompositorWidgetDelegate* aWidgetDelegate, APZCTreeManagerChild* aAPZ, - UiCompositorControllerChild* aUiController, const LayersId& aRootLayerTreeId); virtual ~RemoteCompositorSession(); diff --git a/gfx/layers/ipc/CompositorBridgeParent.cpp b/gfx/layers/ipc/CompositorBridgeParent.cpp @@ -32,7 +32,6 @@ #include "mozilla/gfx/GPUParent.h" #include "mozilla/gfx/GPUProcessManager.h" #include "mozilla/layers/APZCTreeManagerParent.h" // for APZCTreeManagerParent -#include "mozilla/layers/APZInputBridgeParent.h" // for APZInputBridgeParent #include "mozilla/layers/APZSampler.h" // for APZSampler #include "mozilla/layers/APZThreadUtils.h" // for APZThreadUtils #include "mozilla/layers/APZUpdater.h" // for APZUpdater @@ -384,20 +383,6 @@ void CompositorBridgeParent::StopAndClearResources() { mAnimationStorage = nullptr; } -mozilla::ipc::IPCResult CompositorBridgeParent::RecvInitAPZInputBridge( - Endpoint<PAPZInputBridgeParent>&& aEndpoint) { - NS_DispatchToMainThread(NewRunnableFunction( - "APZInputBridgeParent::Create", &APZInputBridgeParent::Create, - mRootLayerTreeID, std::move(aEndpoint))); - return IPC_OK(); -} - -mozilla::ipc::IPCResult CompositorBridgeParent::RecvInitUiCompositorController( - Endpoint<PUiCompositorControllerParent>&& aEndpoint) { - UiCompositorControllerParent::Start(mRootLayerTreeID, std::move(aEndpoint)); - return IPC_OK(); -} - mozilla::ipc::IPCResult CompositorBridgeParent::RecvWillClose() { StopAndClearResources(); // Once we get the WillClose message, the client side is going to go away diff --git a/gfx/layers/ipc/CompositorBridgeParent.h b/gfx/layers/ipc/CompositorBridgeParent.h @@ -188,10 +188,6 @@ class CompositorBridgeParentBase : public PCompositorBridgeParent, EndRecordingResolver&& aResolve) = 0; virtual mozilla::ipc::IPCResult RecvInitialize( const LayersId& rootLayerTreeId) = 0; - virtual mozilla::ipc::IPCResult RecvInitAPZInputBridge( - Endpoint<PAPZInputBridgeParent>&& aEndpoint) = 0; - virtual mozilla::ipc::IPCResult RecvInitUiCompositorController( - Endpoint<PUiCompositorControllerParent>&& aEndpoint) = 0; virtual mozilla::ipc::IPCResult RecvWillClose() = 0; virtual mozilla::ipc::IPCResult RecvPause() = 0; virtual mozilla::ipc::IPCResult RecvRequestFxrOutput() = 0; @@ -263,10 +259,6 @@ class CompositorBridgeParent final : public CompositorBridgeParentBase, #endif mozilla::ipc::IPCResult RecvInitialize( const LayersId& aRootLayerTreeId) override; - mozilla::ipc::IPCResult RecvInitAPZInputBridge( - Endpoint<PAPZInputBridgeParent>&& aEndpoint) override; - mozilla::ipc::IPCResult RecvInitUiCompositorController( - Endpoint<PUiCompositorControllerParent>&& aEndpoint) override; mozilla::ipc::IPCResult RecvWillClose() override; mozilla::ipc::IPCResult RecvPause() override; mozilla::ipc::IPCResult RecvRequestFxrOutput() override; diff --git a/gfx/layers/ipc/ContentCompositorBridgeParent.h b/gfx/layers/ipc/ContentCompositorBridgeParent.h @@ -36,14 +36,6 @@ class ContentCompositorBridgeParent final : public CompositorBridgeParentBase { const LayersId& aRootLayerTreeId) override { return IPC_FAIL_NO_REASON(this); } - mozilla::ipc::IPCResult RecvInitAPZInputBridge( - Endpoint<PAPZInputBridgeParent>&& aEndpoint) override { - return IPC_FAIL(this, "Must only be called for top-level compositors"); - } - mozilla::ipc::IPCResult RecvInitUiCompositorController( - Endpoint<PUiCompositorControllerParent>&& aEndpoint) override { - return IPC_FAIL(this, "Must only be called for top-level compositors"); - } mozilla::ipc::IPCResult RecvWillClose() override { return IPC_OK(); } mozilla::ipc::IPCResult RecvPause() override { return IPC_OK(); } mozilla::ipc::IPCResult RecvRequestFxrOutput() override { diff --git a/gfx/layers/ipc/PCompositorBridge.ipdl b/gfx/layers/ipc/PCompositorBridge.ipdl @@ -11,12 +11,10 @@ include PlatformWidgetTypes; include PCompositorBridgeTypes; include protocol PAPZ; include protocol PAPZCTreeManager; -include protocol PAPZInputBridge; include protocol PBrowser; include protocol PCompositorManager; include protocol PCompositorWidget; include protocol PTexture; -include protocol PUiCompositorController; include protocol PWebRenderBridge; include "mozilla/GfxMessageUtils.h"; include "mozilla/layers/LayersMessageUtils.h"; @@ -127,16 +125,8 @@ parent: async PCompositorWidget(CompositorWidgetInitData aInitData); // When out-of-process, this must be called to finish initialization. - async Initialize(LayersId rootLayerTreeId); + sync Initialize(LayersId rootLayerTreeId); - // Must be called after Initialize(), and only for top-level compositors and - // when using a GPU process. - async InitAPZInputBridge(Endpoint<PAPZInputBridgeParent> endpoint); - - // Must be called after Initialize(), and only for top-level compositors. - async InitUiCompositorController( - Endpoint<PUiCompositorControllerParent> endpoint); - // Must be called after Initialize(), and only succeeds if AsyncPanZoomEnabled() is true. async PAPZ(LayersId layersId); async PAPZCTreeManager(LayersId layersId); diff --git a/gfx/layers/ipc/UiCompositorControllerParent.cpp b/gfx/layers/ipc/UiCompositorControllerParent.cpp @@ -42,10 +42,15 @@ UiCompositorControllerParent::GetFromRootLayerTreeId( RefPtr<UiCompositorControllerParent> UiCompositorControllerParent::Start( const LayersId& aRootLayerTreeId, Endpoint<PUiCompositorControllerParent>&& aEndpoint) { - MOZ_ASSERT(CompositorThreadHolder::IsInCompositorThread()); RefPtr<UiCompositorControllerParent> parent = new UiCompositorControllerParent(aRootLayerTreeId); - parent->Open(std::move(aEndpoint)); + + RefPtr<Runnable> task = + NewRunnableMethod<Endpoint<PUiCompositorControllerParent>&&>( + "layers::UiCompositorControllerParent::Open", parent, + &UiCompositorControllerParent::Open, std::move(aEndpoint)); + CompositorThread()->Dispatch(task.forget()); + return parent; } diff --git a/ipc/ipdl/sync-messages.ini b/ipc/ipdl/sync-messages.ini @@ -206,6 +206,8 @@ description = legacy sync IPC - please add detailed description description = legacy sync IPC - please add detailed description [PCanvasManager::GetSnapshot] description = Retrieving canvas contents is synchronous (see also, PWebGL::GetFrontBufferSnapshot). +[PCompositorBridge::Initialize] +description = legacy sync IPC - please add detailed description [PCompositorBridge::WillClose] description = legacy sync IPC - please add detailed description [PCompositorBridge::Pause]