diff --git a/gfx/layers/ipc/CompositorBridgeParent.cpp b/gfx/layers/ipc/CompositorBridgeParent.cpp index a175e6c51846..aa41317baa7f 100644 --- a/gfx/layers/ipc/CompositorBridgeParent.cpp +++ b/gfx/layers/ipc/CompositorBridgeParent.cpp @@ -259,6 +259,9 @@ void CompositorBridgeParent::InitSameProcess(widget::CompositorWidget* aWidget, mWidget = aWidget; mRootLayerTreeID = aLayerTreeId; +#if defined(XP_WIN) + mWidget->AsWindows()->SetRootLayerTreeID(mRootLayerTreeID); +#endif Initialize(); } diff --git a/widget/windows/InProcessWinCompositorWidget.cpp b/widget/windows/InProcessWinCompositorWidget.cpp index 21cec6237885..89729f7f0a59 100644 --- a/widget/windows/InProcessWinCompositorWidget.cpp +++ b/widget/windows/InProcessWinCompositorWidget.cpp @@ -360,4 +360,15 @@ void InProcessWinCompositorWidget::ObserveVsync(VsyncObserver* aObserver) { } } +void InProcessWinCompositorWidget::UpdateCompositorWnd( + const HWND aCompositorWnd, const HWND aParentWnd) { + MOZ_ASSERT(layers::CompositorThreadHolder::IsInCompositorThread()); + MOZ_ASSERT(aCompositorWnd && aParentWnd); + MOZ_ASSERT(aParentWnd == mWnd); + + // Since we're in the parent process anyway, we can just call SetParent + // directly. + ::SetParent(aCompositorWnd, aParentWnd); + mSetParentCompleted = true; +} } // namespace mozilla::widget diff --git a/widget/windows/InProcessWinCompositorWidget.h b/widget/windows/InProcessWinCompositorWidget.h index 783678eb94ff..5c0d34e13f6f 100644 --- a/widget/windows/InProcessWinCompositorWidget.h +++ b/widget/windows/InProcessWinCompositorWidget.h @@ -71,7 +71,7 @@ class InProcessWinCompositorWidget final nsIWidget* RealWidget() override; void UpdateCompositorWnd(const HWND aCompositorWnd, - const HWND aParentWnd) override {} + const HWND aParentWnd) override; void SetRootLayerTreeID(const layers::LayersId& aRootLayerTreeId) override {} private: diff --git a/widget/windows/WinCompositorWidget.cpp b/widget/windows/WinCompositorWidget.cpp index 3f0dc92a5b5f..15957a1c3f59 100644 --- a/widget/windows/WinCompositorWidget.cpp +++ b/widget/windows/WinCompositorWidget.cpp @@ -70,10 +70,10 @@ void WinCompositorWidget::UpdateCompositorWndSizeIfNecessary() { return; } - // This code is racing with the compositor, which needs to reparent - // the compositor surface to the actual window (mWnd). To avoid racing - // mutations, we refuse to proceed until ::SetParent() is called in parent - // process. After the ::SetParent() call, composition is scheduled in + // This code is racing with the compositor, which needs to reparent the + // compositor surface to the actual window (mWnd). To avoid racing mutations, + // we refuse to proceed until ::SetParent() is called in the parent process. + // After the ::SetParent() call, composition is scheduled in // CompositorWidgetParent::UpdateCompositorWnd(). if (!mSetParentCompleted) { // ::SetParent() is not completed yet.