Bug 1441324 - Introduce an empty APZInputBridge protocol managed by PGPU. r?rhunt
This just adds the boilerplate that goes with the new protocol, without
adding any of the actual messages. The protocol is managed by PGPU, and
there will be one instance per compositor. The parent side lives on the
main thread of the GPU process, and the child side lives on the main
thread of the UI process. The protocol is only instantiated if the GPU
process is active.
MozReview-Commit-ID: J4VzwmEfYTa
--- a/gfx/ipc/GPUChild.cpp
+++ b/gfx/ipc/GPUChild.cpp
@@ -12,16 +12,17 @@
#include "mozilla/TelemetryIPC.h"
#include "mozilla/dom/CheckerboardReportService.h"
#include "mozilla/dom/MemoryReportRequest.h"
#include "mozilla/gfx/gfxVars.h"
#if defined(XP_WIN)
# include "mozilla/gfx/DeviceManagerDx.h"
#endif
#include "mozilla/ipc/CrashReporterHost.h"
+#include "mozilla/layers/APZInputBridgeChild.h"
#include "mozilla/layers/LayerTreeOwnerTracker.h"
#include "mozilla/Unused.h"
#include "mozilla/HangDetails.h"
#include "nsIObserverService.h"
#ifdef MOZ_GECKO_PROFILER
#include "ProfilerParent.h"
#endif
@@ -104,16 +105,32 @@ GPUChild::EnsureGPUReady()
}
gfxPlatform::GetPlatform()->ImportGPUDeviceData(data);
Telemetry::AccumulateTimeDelta(Telemetry::GPU_PROCESS_LAUNCH_TIME_MS_2, mHost->GetLaunchTime());
mGPUReady = true;
return true;
}
+PAPZInputBridgeChild*
+GPUChild::AllocPAPZInputBridgeChild(const uint64_t& aLayersId)
+{
+ APZInputBridgeChild* child = new APZInputBridgeChild();
+ child->AddRef();
+ return child;
+}
+
+bool
+GPUChild::DeallocPAPZInputBridgeChild(PAPZInputBridgeChild* aActor)
+{
+ APZInputBridgeChild* child = static_cast<APZInputBridgeChild*>(aActor);
+ child->Release();
+ return true;
+}
+
mozilla::ipc::IPCResult
GPUChild::RecvInitComplete(const GPUDeviceData& aData)
{
// We synchronously requested GPU parameters before this arrived.
if (mGPUReady) {
return IPC_OK();
}
--- a/gfx/ipc/GPUChild.h
+++ b/gfx/ipc/GPUChild.h
@@ -32,16 +32,19 @@ class GPUChild final
public:
explicit GPUChild(GPUProcessHost* aHost);
~GPUChild();
void Init();
bool EnsureGPUReady();
+ PAPZInputBridgeChild* AllocPAPZInputBridgeChild(const uint64_t& aLayersId) override;
+ bool DeallocPAPZInputBridgeChild(PAPZInputBridgeChild* aActor) override;
+
// gfxVarReceiver overrides.
void OnVarChanged(const GfxVarUpdate& aVar) override;
// PGPUChild overrides.
mozilla::ipc::IPCResult RecvInitComplete(const GPUDeviceData& aData) override;
mozilla::ipc::IPCResult RecvReportCheckerboard(const uint32_t& aSeverity, const nsCString& aLog) override;
mozilla::ipc::IPCResult RecvInitCrashReporter(Shmem&& shmem, const NativeThreadId& aThreadId) override;
--- a/gfx/ipc/GPUParent.cpp
+++ b/gfx/ipc/GPUParent.cpp
@@ -16,16 +16,17 @@
#include "mozilla/TimeStamp.h"
#include "mozilla/dom/MemoryReportRequest.h"
#include "mozilla/dom/VideoDecoderManagerChild.h"
#include "mozilla/dom/VideoDecoderManagerParent.h"
#include "mozilla/gfx/2D.h"
#include "mozilla/gfx/gfxVars.h"
#include "mozilla/ipc/CrashReporterClient.h"
#include "mozilla/ipc/ProcessChild.h"
+#include "mozilla/layers/APZInputBridgeParent.h"
#include "mozilla/layers/APZThreadUtils.h"
#include "mozilla/layers/APZUtils.h" // for apz::InitializeGlobalState
#include "mozilla/layers/CompositorBridgeParent.h"
#include "mozilla/layers/CompositorManagerParent.h"
#include "mozilla/layers/CompositorThread.h"
#include "mozilla/layers/ImageBridgeParent.h"
#include "mozilla/layers/LayerTreeOwnerTracker.h"
#include "mozilla/layers/UiCompositorControllerParent.h"
@@ -157,16 +158,32 @@ GPUParent::NotifyDeviceReset()
// Notify the main process that there's been a device reset
// and that they should reset their compositors and repaint
GPUDeviceData data;
RecvGetDeviceStatus(&data);
Unused << SendNotifyDeviceReset(data);
}
+PAPZInputBridgeParent*
+GPUParent::AllocPAPZInputBridgeParent(const uint64_t& aLayersId)
+{
+ APZInputBridgeParent* parent = new APZInputBridgeParent(aLayersId);
+ parent->AddRef();
+ return parent;
+}
+
+bool
+GPUParent::DeallocPAPZInputBridgeParent(PAPZInputBridgeParent* aActor)
+{
+ APZInputBridgeParent* parent = static_cast<APZInputBridgeParent*>(aActor);
+ parent->Release();
+ return true;
+}
+
mozilla::ipc::IPCResult
GPUParent::RecvInit(nsTArray<GfxPrefSetting>&& prefs,
nsTArray<GfxVarUpdate>&& vars,
const DevicePrefs& devicePrefs,
nsTArray<LayerTreeIdMapping>&& aMappings)
{
const nsTArray<gfxPrefs::Pref*>& globalPrefs = gfxPrefs::all();
for (auto& setting : prefs) {
--- a/gfx/ipc/GPUParent.h
+++ b/gfx/ipc/GPUParent.h
@@ -26,16 +26,19 @@ public:
static GPUParent* GetSingleton();
bool Init(base::ProcessId aParentPid,
MessageLoop* aIOLoop,
IPC::Channel* aChannel);
void NotifyDeviceReset();
+ PAPZInputBridgeParent* AllocPAPZInputBridgeParent(const uint64_t& aLayersId) override;
+ bool DeallocPAPZInputBridgeParent(PAPZInputBridgeParent* aActor) override;
+
mozilla::ipc::IPCResult RecvInit(nsTArray<GfxPrefSetting>&& prefs,
nsTArray<GfxVarUpdate>&& vars,
const DevicePrefs& devicePrefs,
nsTArray<LayerTreeIdMapping>&& mappings) override;
mozilla::ipc::IPCResult RecvInitCompositorManager(Endpoint<PCompositorManagerParent>&& aEndpoint) override;
mozilla::ipc::IPCResult RecvInitVsyncBridge(Endpoint<PVsyncBridgeParent>&& aVsyncEndpoint) override;
mozilla::ipc::IPCResult RecvInitImageBridge(Endpoint<PImageBridgeParent>&& aEndpoint) override;
mozilla::ipc::IPCResult RecvInitVRManager(Endpoint<PVRManagerParent>&& aEndpoint) override;
--- a/gfx/ipc/GPUProcessManager.cpp
+++ b/gfx/ipc/GPUProcessManager.cpp
@@ -822,16 +822,22 @@ GPUProcessManager::CreateRemoteSession(n
RefPtr<APZCTreeManagerChild> apz = nullptr;
if (aOptions.UseAPZ()) {
PAPZCTreeManagerChild* papz = child->SendPAPZCTreeManagerConstructor(0);
if (!papz) {
return nullptr;
}
apz = static_cast<APZCTreeManagerChild*>(papz);
+
+ PAPZInputBridgeChild* pinput = mGPUChild->SendPAPZInputBridgeConstructor(aRootLayerTreeId);
+ if (!pinput) {
+ return nullptr;
+ }
+ apz->SetInputBridge(static_cast<APZInputBridgeChild*>(pinput));
}
RefPtr<RemoteCompositorSession> session =
new RemoteCompositorSession(aWidget, child, widget, apz, aRootLayerTreeId);
return session.forget();
#else
gfxCriticalNote << "Platform does not support out-of-process compositing";
return nullptr;
--- a/gfx/ipc/PGPU.ipdl
+++ b/gfx/ipc/PGPU.ipdl
@@ -1,16 +1,17 @@
/* -*- Mode: C++; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
/* This Source Code Form is subject to the terms of the Mozilla Public
* 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 GraphicsMessages;
include MemoryReportTypes;
include HangTypes;
+include protocol PAPZInputBridge;
include protocol PCompositorManager;
include protocol PImageBridge;
include protocol PProfiler;
include protocol PVRManager;
include protocol PVsyncBridge;
include protocol PUiCompositorController;
include protocol PVideoDecoderManager;
@@ -41,19 +42,28 @@ struct GfxPrefSetting {
GfxPrefValue value;
};
struct LayerTreeIdMapping {
uint64_t layersId;
ProcessId ownerId;
};
+// This protocol allows the UI process to talk to the GPU process. There is one
+// instance of this protocol, with the GPUParent living on the main thread of
+// the GPU process and the GPUChild living on the main thread of the UI process.
sync protocol PGPU
{
+ manages PAPZInputBridge;
+
parent:
+ // Sent from the UI process to initialize a new APZ input bridge when a new
+ // top-level compositor is created.
+ async PAPZInputBridge(uint64_t aLayersId);
+
// Sent by the UI process to initiate core settings.
async Init(GfxPrefSetting[] prefs,
GfxVarUpdate[] vars,
DevicePrefs devicePrefs,
LayerTreeIdMapping[] mapping);
async InitCompositorManager(Endpoint<PCompositorManagerParent> endpoint);
async InitVsyncBridge(Endpoint<PVsyncBridgeParent> endpoint);
--- a/gfx/ipc/RemoteCompositorSession.cpp
+++ b/gfx/ipc/RemoteCompositorSession.cpp
@@ -86,16 +86,17 @@ RemoteCompositorSession::GetAPZCTreeMana
}
void
RemoteCompositorSession::Shutdown()
{
mContentController = nullptr;
if (mAPZ) {
mAPZ->SetCompositorSession(nullptr);
+ mAPZ->Destroy();
}
mCompositorBridgeChild->Destroy();
mCompositorBridgeChild = nullptr;
mCompositorWidgetDelegate = nullptr;
mWidget = nullptr;
#if defined(MOZ_WIDGET_ANDROID)
if (mUiCompositorControllerChild) {
mUiCompositorControllerChild->Destroy();
--- a/gfx/layers/ipc/APZCTreeManagerChild.cpp
+++ b/gfx/layers/ipc/APZCTreeManagerChild.cpp
@@ -4,35 +4,60 @@
* 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 "mozilla/layers/APZCTreeManagerChild.h"
#include "InputData.h" // for InputData
#include "mozilla/dom/TabParent.h" // for TabParent
#include "mozilla/layers/APZCCallbackHelper.h" // for APZCCallbackHelper
+#include "mozilla/layers/APZInputBridgeChild.h" // for APZInputBridgeChild
#include "mozilla/layers/RemoteCompositorSession.h" // for RemoteCompositorSession
namespace mozilla {
namespace layers {
APZCTreeManagerChild::APZCTreeManagerChild()
: mCompositorSession(nullptr)
{
}
+APZCTreeManagerChild::~APZCTreeManagerChild()
+{
+}
+
void
APZCTreeManagerChild::SetCompositorSession(RemoteCompositorSession* aSession)
{
// Exactly one of mCompositorSession and aSession must be null (i.e. either
// we're setting mCompositorSession or we're clearing it).
MOZ_ASSERT(!mCompositorSession ^ !aSession);
mCompositorSession = aSession;
}
+void
+APZCTreeManagerChild::SetInputBridge(APZInputBridgeChild* aInputBridge)
+{
+ // The input bridge only exists from the UI process to the GPU process.
+ MOZ_ASSERT(XRE_IsParentProcess());
+ MOZ_ASSERT(!mInputBridge);
+
+ mInputBridge = aInputBridge;
+}
+
+void
+APZCTreeManagerChild::Destroy()
+{
+ MOZ_ASSERT(NS_IsMainThread());
+ if (mInputBridge) {
+ mInputBridge->Destroy();
+ mInputBridge = nullptr;
+ }
+}
+
nsEventStatus
APZCTreeManagerChild::ReceiveInputEvent(
InputData& aEvent,
ScrollableLayerGuid* aOutTargetGuid,
uint64_t* aOutInputBlockId)
{
switch (aEvent.mInputType) {
case MULTITOUCH_INPUT: {
--- a/gfx/layers/ipc/APZCTreeManagerChild.h
+++ b/gfx/layers/ipc/APZCTreeManagerChild.h
@@ -9,27 +9,30 @@
#include "mozilla/layers/APZInputBridge.h"
#include "mozilla/layers/IAPZCTreeManager.h"
#include "mozilla/layers/PAPZCTreeManagerChild.h"
namespace mozilla {
namespace layers {
+class APZInputBridgeChild;
class RemoteCompositorSession;
class APZCTreeManagerChild
: public IAPZCTreeManager
, public APZInputBridge
, public PAPZCTreeManagerChild
{
public:
APZCTreeManagerChild();
void SetCompositorSession(RemoteCompositorSession* aSession);
+ void SetInputBridge(APZInputBridgeChild* aInputBridge);
+ void Destroy();
nsEventStatus
ReceiveInputEvent(
InputData& aEvent,
ScrollableLayerGuid* aOutTargetGuid,
uint64_t* aOutInputBlockId) override;
void
@@ -103,19 +106,19 @@ protected:
mozilla::ipc::IPCResult RecvNotifyPinchGesture(const PinchGestureType& aType,
const ScrollableLayerGuid& aGuid,
const LayoutDeviceCoord& aSpanChange,
const Modifiers& aModifiers) override;
mozilla::ipc::IPCResult RecvCancelAutoscroll(const FrameMetrics::ViewID& aScrollId) override;
- virtual
- ~APZCTreeManagerChild() { }
+ virtual ~APZCTreeManagerChild();
private:
MOZ_NON_OWNING_REF RemoteCompositorSession* mCompositorSession;
+ RefPtr<APZInputBridgeChild> mInputBridge;
};
} // namespace layers
} // namespace mozilla
#endif // mozilla_layers_APZCTreeManagerChild_h
new file mode 100644
--- /dev/null
+++ b/gfx/layers/ipc/APZInputBridgeChild.cpp
@@ -0,0 +1,44 @@
+/* -*- Mode: C++; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
+/* vim: set ts=8 sts=2 et sw=2 tw=80: */
+/* This Source Code Form is subject to the terms of the Mozilla Public
+ * 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 "mozilla/layers/APZInputBridgeChild.h"
+
+namespace mozilla {
+namespace layers {
+
+APZInputBridgeChild::APZInputBridgeChild()
+ : mDestroyed(false)
+{
+ MOZ_ASSERT(XRE_IsParentProcess());
+ MOZ_ASSERT(NS_IsMainThread());
+}
+
+APZInputBridgeChild::~APZInputBridgeChild()
+{
+}
+
+void
+APZInputBridgeChild::Destroy()
+{
+ MOZ_ASSERT(XRE_IsParentProcess());
+ MOZ_ASSERT(NS_IsMainThread());
+
+ if (mDestroyed) {
+ return;
+ }
+
+ Send__delete__(this);
+ mDestroyed = true;
+}
+
+void
+APZInputBridgeChild::ActorDestroy(ActorDestroyReason aWhy)
+{
+ mDestroyed = true;
+}
+
+} // namespace layers
+} // namespace mozilla
new file mode 100644
--- /dev/null
+++ b/gfx/layers/ipc/APZInputBridgeChild.h
@@ -0,0 +1,34 @@
+/* -*- Mode: C++; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
+/* vim: set ts=8 sts=2 et sw=2 tw=80: */
+/* This Source Code Form is subject to the terms of the Mozilla Public
+ * 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/. */
+
+#ifndef mozilla_layers_APZInputBridgeChild_h
+#define mozilla_layers_APZInputBridgeChild_h
+
+#include "mozilla/layers/PAPZInputBridgeChild.h"
+
+namespace mozilla {
+namespace layers {
+
+class APZInputBridgeChild : public PAPZInputBridgeChild
+{
+ NS_INLINE_DECL_REFCOUNTING(APZInputBridgeChild)
+
+public:
+ APZInputBridgeChild();
+ void Destroy();
+
+protected:
+ void ActorDestroy(ActorDestroyReason aWhy) override;
+ virtual ~APZInputBridgeChild();
+
+private:
+ bool mDestroyed;
+};
+
+} // namespace layers
+} // namespace mozilla
+
+#endif // mozilla_layers_APZInputBridgeChild_h
new file mode 100644
--- /dev/null
+++ b/gfx/layers/ipc/APZInputBridgeParent.cpp
@@ -0,0 +1,36 @@
+/* -*- Mode: C++; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
+/* vim: set ts=8 sts=2 et sw=2 tw=80: */
+/* This Source Code Form is subject to the terms of the Mozilla Public
+ * 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 "mozilla/layers/APZInputBridgeParent.h"
+
+#include "mozilla/layers/CompositorBridgeParent.h"
+#include "mozilla/layers/IAPZCTreeManager.h"
+
+namespace mozilla {
+namespace layers {
+
+APZInputBridgeParent::APZInputBridgeParent(const uint64_t& aLayersId)
+{
+ MOZ_ASSERT(XRE_IsGPUProcess());
+ MOZ_ASSERT(NS_IsMainThread());
+
+ mTreeManager = CompositorBridgeParent::GetAPZCTreeManager(aLayersId);
+ MOZ_ASSERT(mTreeManager);
+}
+
+APZInputBridgeParent::~APZInputBridgeParent()
+{
+}
+
+void
+APZInputBridgeParent::ActorDestroy(ActorDestroyReason aWhy)
+{
+ // We shouldn't need it after this
+ mTreeManager = nullptr;
+}
+
+} // namespace layers
+} // namespace mozilla
new file mode 100644
--- /dev/null
+++ b/gfx/layers/ipc/APZInputBridgeParent.h
@@ -0,0 +1,37 @@
+/* -*- Mode: C++; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
+/* vim: set ts=8 sts=2 et sw=2 tw=80: */
+/* This Source Code Form is subject to the terms of the Mozilla Public
+ * 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/. */
+
+#ifndef mozilla_layers_APZInputBridgeParent_h
+#define mozilla_layers_APZInputBridgeParent_h
+
+#include "mozilla/layers/PAPZInputBridgeParent.h"
+
+namespace mozilla {
+namespace layers {
+
+class IAPZCTreeManager;
+
+class APZInputBridgeParent : public PAPZInputBridgeParent
+{
+ NS_INLINE_DECL_REFCOUNTING(APZInputBridgeParent)
+
+public:
+ explicit APZInputBridgeParent(const uint64_t& aLayersId);
+
+ void
+ ActorDestroy(ActorDestroyReason aWhy) override;
+
+protected:
+ virtual ~APZInputBridgeParent();
+
+private:
+ RefPtr<IAPZCTreeManager> mTreeManager;
+};
+
+} // namespace layers
+} // namespace mozilla
+
+#endif // mozilla_layers_APZInputBridgeParent_h
--- a/gfx/layers/ipc/CompositorBridgeParent.h
+++ b/gfx/layers/ipc/CompositorBridgeParent.h
@@ -476,39 +476,39 @@ public:
TextureFactoryIdentifier* aTextureFactoryIdentifier,
wr::IdNamespace* aIdNamespace) override;
bool DeallocPWebRenderBridgeParent(PWebRenderBridgeParent* aActor) override;
RefPtr<WebRenderBridgeParent> GetWebRenderBridgeParent() const;
Maybe<TimeStamp> GetTestingTimeStamp() const;
static CompositorBridgeParent* GetCompositorBridgeParentFromLayersId(const uint64_t& aLayersId);
+ /**
+ * This returns a reference to the IAPZCTreeManager "controller subinterface"
+ * to which pan/zoom-related events can be sent. The controller subinterface
+ * doesn't expose any sampler-thread APZCTreeManager methods.
+ */
+ static already_AddRefed<IAPZCTreeManager> GetAPZCTreeManager(uint64_t aLayersId);
+
#if defined(MOZ_WIDGET_ANDROID)
gfx::IntSize GetEGLSurfaceSize() {
return mEGLSurfaceSize;
}
#endif // defined(MOZ_WIDGET_ANDROID)
private:
void Initialize();
/**
* Called during destruction in order to release resources as early as possible.
*/
void StopAndClearResources();
/**
- * This returns a reference to the IAPZCTreeManager "controller subinterface"
- * to which pan/zoom-related events can be sent. The controller subinterface
- * doesn't expose any sampler-thread APZCTreeManager methods.
- */
- static already_AddRefed<IAPZCTreeManager> GetAPZCTreeManager(uint64_t aLayersId);
-
- /**
* Release compositor-thread resources referred to by |aID|.
*
* Must run on the content main thread.
*/
static void DeallocateLayerTreeId(uint64_t aId);
protected:
// Protected destructor, to discourage deletion outside of Release():
new file mode 100644
--- /dev/null
+++ b/gfx/layers/ipc/PAPZInputBridge.ipdl
@@ -0,0 +1,28 @@
+/* -*- Mode: C++; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
+/* This Source Code Form is subject to the terms of the Mozilla Public
+ * 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 protocol PGPU;
+
+namespace mozilla {
+namespace layers {
+
+/**
+ * This protocol is used to send input events from the UI process to the
+ * GPU process for handling by APZ. There is one instance per top-level
+ * compositor, or in other words, one instance per concrete APZCTreeManager
+ * instance. The child side lives on the main thread in the UI process,
+ * and the parent side lives on the main thread in the GPU process. If there
+ * is no GPU process, then this protocol is not instantiated.
+ */
+sync protocol PAPZInputBridge
+{
+manager PGPU;
+
+parent:
+ async __delete__();
+};
+
+} // namespace gfx
+} // namespace mozilla
--- a/gfx/layers/moz.build
+++ b/gfx/layers/moz.build
@@ -162,16 +162,18 @@ EXPORTS.mozilla.layers += [
'D3D11YCbCrImage.h',
'D3D9SurfaceImage.h',
'DirectionUtils.h',
'Effects.h',
'ImageDataSerializer.h',
'ipc/APZChild.h',
'ipc/APZCTreeManagerChild.h',
'ipc/APZCTreeManagerParent.h',
+ 'ipc/APZInputBridgeChild.h',
+ 'ipc/APZInputBridgeParent.h',
'ipc/CompositableForwarder.h',
'ipc/CompositableTransactionParent.h',
'ipc/CompositorBridgeChild.h',
'ipc/CompositorBridgeParent.h',
'ipc/CompositorManagerChild.h',
'ipc/CompositorManagerParent.h',
'ipc/CompositorThread.h',
'ipc/CompositorVsyncScheduler.h',
@@ -391,16 +393,18 @@ UNIFIED_SOURCES += [
'Effects.cpp',
'FrameMetrics.cpp',
'GLImages.cpp',
'ImageDataSerializer.cpp',
'ImageLayers.cpp',
'ipc/APZChild.cpp',
'ipc/APZCTreeManagerChild.cpp',
'ipc/APZCTreeManagerParent.cpp',
+ 'ipc/APZInputBridgeChild.cpp',
+ 'ipc/APZInputBridgeParent.cpp',
'ipc/CompositableTransactionParent.cpp',
'ipc/CompositorBench.cpp',
'ipc/CompositorBridgeChild.cpp',
'ipc/CompositorBridgeParent.cpp',
'ipc/CompositorManagerChild.cpp',
'ipc/CompositorManagerParent.cpp',
'ipc/CompositorThread.cpp',
'ipc/CompositorVsyncScheduler.cpp',
@@ -498,16 +502,17 @@ if CONFIG['MOZ_WIDGET_TOOLKIT'] == 'coco
'opengl/MacIOSurfaceTextureHostOGL.cpp',
]
IPDL_SOURCES += [
'ipc/LayersMessages.ipdlh',
'ipc/LayersSurfaces.ipdlh',
'ipc/PAPZ.ipdl',
'ipc/PAPZCTreeManager.ipdl',
+ 'ipc/PAPZInputBridge.ipdl',
'ipc/PCompositorBridge.ipdl',
'ipc/PCompositorManager.ipdl',
'ipc/PImageBridge.ipdl',
'ipc/PLayerTransaction.ipdl',
'ipc/PTexture.ipdl',
'ipc/PUiCompositorController.ipdl',
'ipc/PVideoBridge.ipdl',
'ipc/PWebRenderBridge.ipdl',
--- a/gfx/layers/wr/WebRenderScrollData.cpp
+++ b/gfx/layers/wr/WebRenderScrollData.cpp
@@ -3,16 +3,17 @@
/* This Source Code Form is subject to the terms of the Mozilla Public
* 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 "mozilla/layers/WebRenderScrollData.h"
#include "Layers.h"
#include "LayersLogging.h"
+#include "mozilla/layers/WebRenderLayerManager.h"
#include "mozilla/layout/RenderFrameParent.h"
#include "mozilla/Unused.h"
#include "nsDisplayList.h"
#include "nsTArray.h"
#include "UnitTransforms.h"
namespace mozilla {
namespace layers {
--- a/gfx/layers/wr/WebRenderScrollData.h
+++ b/gfx/layers/wr/WebRenderScrollData.h
@@ -25,16 +25,17 @@ class nsDisplayItem;
namespace mozilla {
struct ActiveScrolledRoot;
namespace layers {
class Layer;
+class WebRenderLayerManager;
class WebRenderScrollData;
// Data needed by APZ, per layer. One instance of this class is created for
// each layer in the layer tree and sent over PWebRenderBridge to the APZ code.
// Each WebRenderLayerScrollData is conceptually associated with an "owning"
// WebRenderScrollData.
class WebRenderLayerScrollData
{
--- a/gfx/layers/wr/WebRenderUserData.cpp
+++ b/gfx/layers/wr/WebRenderUserData.cpp
@@ -1,16 +1,17 @@
/* -*- Mode: C++; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
/* vim: set ts=8 sts=2 et sw=2 tw=80: */
/* This Source Code Form is subject to the terms of the Mozilla Public
* 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 "WebRenderUserData.h"
+#include "mozilla/layers/CompositorBridgeChild.h"
#include "mozilla/layers/ImageClient.h"
#include "mozilla/layers/WebRenderBridgeChild.h"
#include "mozilla/layers/WebRenderLayerManager.h"
#include "mozilla/layers/WebRenderMessages.h"
#include "mozilla/layers/IpcResourceUpdateQueue.h"
#include "mozilla/layers/SharedSurfacesChild.h"
#include "nsDisplayListInvalidation.h"
#include "nsIFrame.h"