Bug 1441324 - Move the input event messages from PAPZCTreeManager to PAPZInputBridge. r=froydnj,rhunt

This remotes the APZInputBridge interface over the PAPZInputBridge
protocol in the case of the GPU process, and makes the GPU process'
main thread act as the APZ controller thread in that process. If
there is no GPU process we continue as before and the APZInputBridge
interface implementation is the concrete APZCTreeManager instance
in the UI process.

The main changes in this patch are moving all the code associated with
these messages out of APZCTreeManager{Parent,Child} and into
APZInputBridge{Parent,Child}. APZCTreeManagerChild now returns an
APZInputBridgeChild instance via InputBridge(), instead of returning
itself. The SetControllerThread call in the GPU process is also updated.

MozReview-Commit-ID: M4AaIW1Q0h

--HG--
extra : rebase_source : e5a8f14e23be34229fe80a47f6789d19b19e0a9f
This commit is contained in:
Kartikaya Gupta 2018-03-16 16:28:19 -04:00
parent 26139682b6
commit c864e00967
15 changed files with 471 additions and 468 deletions

View File

@ -4,6 +4,8 @@
* 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/dom/TabMessageUtils.h";
include protocol PBrowser;
include PBrowserOrId;

View File

@ -126,7 +126,7 @@ GPUParent::Init(base::ProcessId aParentPid,
CompositorThreadHolder::Start();
// TODO: Bug 1406327, Start VRListenerThreadHolder when loading VR content.
VRListenerThreadHolder::Start();
APZThreadUtils::SetControllerThread(CompositorThreadHolder::Loop());
APZThreadUtils::SetControllerThread(MessageLoop::current());
apz::InitializeGlobalState();
LayerTreeOwnerTracker::Initialize();
mozilla::ipc::SetThisProcessName("GPU Process");

View File

@ -16,6 +16,7 @@ class InputData;
namespace layers {
class APZInputBridgeParent;
struct ScrollableLayerGuid;
/**
@ -98,6 +99,7 @@ public:
static bool WillHandleWheelEvent(WidgetWheelEvent* aEvent);
protected:
friend class APZInputBridgeParent;
// Methods to help process WidgetInputEvents (or manage conversion to/from InputData)

View File

@ -53,118 +53,6 @@ APZCTreeManagerChild::Destroy()
}
}
nsEventStatus
APZCTreeManagerChild::ReceiveInputEvent(
InputData& aEvent,
ScrollableLayerGuid* aOutTargetGuid,
uint64_t* aOutInputBlockId)
{
switch (aEvent.mInputType) {
case MULTITOUCH_INPUT: {
MultiTouchInput& event = aEvent.AsMultiTouchInput();
MultiTouchInput processedEvent;
nsEventStatus res;
SendReceiveMultiTouchInputEvent(event,
&res,
&processedEvent,
aOutTargetGuid,
aOutInputBlockId);
event = processedEvent;
return res;
}
case MOUSE_INPUT: {
MouseInput& event = aEvent.AsMouseInput();
MouseInput processedEvent;
nsEventStatus res;
SendReceiveMouseInputEvent(event,
&res,
&processedEvent,
aOutTargetGuid,
aOutInputBlockId);
event = processedEvent;
return res;
}
case PANGESTURE_INPUT: {
PanGestureInput& event = aEvent.AsPanGestureInput();
PanGestureInput processedEvent;
nsEventStatus res;
SendReceivePanGestureInputEvent(event,
&res,
&processedEvent,
aOutTargetGuid,
aOutInputBlockId);
event = processedEvent;
return res;
}
case PINCHGESTURE_INPUT: {
PinchGestureInput& event = aEvent.AsPinchGestureInput();
PinchGestureInput processedEvent;
nsEventStatus res;
SendReceivePinchGestureInputEvent(event,
&res,
&processedEvent,
aOutTargetGuid,
aOutInputBlockId);
event = processedEvent;
return res;
}
case TAPGESTURE_INPUT: {
TapGestureInput& event = aEvent.AsTapGestureInput();
TapGestureInput processedEvent;
nsEventStatus res;
SendReceiveTapGestureInputEvent(event,
&res,
&processedEvent,
aOutTargetGuid,
aOutInputBlockId);
event = processedEvent;
return res;
}
case SCROLLWHEEL_INPUT: {
ScrollWheelInput& event = aEvent.AsScrollWheelInput();
ScrollWheelInput processedEvent;
nsEventStatus res;
SendReceiveScrollWheelInputEvent(event,
&res,
&processedEvent,
aOutTargetGuid,
aOutInputBlockId);
event = processedEvent;
return res;
}
case KEYBOARD_INPUT: {
KeyboardInput& event = aEvent.AsKeyboardInput();
KeyboardInput processedEvent;
nsEventStatus res;
SendReceiveKeyboardInputEvent(event,
&res,
&processedEvent,
aOutTargetGuid,
aOutInputBlockId);
event = processedEvent;
return res;
}
default: {
MOZ_ASSERT_UNREACHABLE("Invalid InputData type.");
return nsEventStatus_eConsumeNoDefault;
}
}
}
void
APZCTreeManagerChild::SetKeyboardMap(const KeyboardMap& aKeyboardMap)
{
@ -246,29 +134,13 @@ APZCTreeManagerChild::SetLongTapEnabled(bool aTapGestureEnabled)
SendSetLongTapEnabled(aTapGestureEnabled);
}
void
APZCTreeManagerChild::UpdateWheelTransaction(
LayoutDeviceIntPoint aRefPoint,
EventMessage aEventMessage)
{
SendUpdateWheelTransaction(aRefPoint, aEventMessage);
}
void APZCTreeManagerChild::ProcessUnhandledEvent(
LayoutDeviceIntPoint* aRefPoint,
ScrollableLayerGuid* aOutTargetGuid,
uint64_t* aOutFocusSequenceNumber)
{
SendProcessUnhandledEvent(*aRefPoint,
aRefPoint,
aOutTargetGuid,
aOutFocusSequenceNumber);
}
APZInputBridge*
APZCTreeManagerChild::InputBridge()
{
return this;
MOZ_ASSERT(XRE_IsParentProcess());
MOZ_ASSERT(mInputBridge);
return mInputBridge.get();
}
mozilla::ipc::IPCResult

View File

@ -19,7 +19,6 @@ class RemoteCompositorSession;
class APZCTreeManagerChild
: public IAPZCTreeManager
, public APZInputBridge
, public PAPZCTreeManagerChild
{
public:
@ -29,12 +28,6 @@ public:
void SetInputBridge(APZInputBridgeChild* aInputBridge);
void Destroy();
nsEventStatus
ReceiveInputEvent(
InputData& aEvent,
ScrollableLayerGuid* aOutTargetGuid,
uint64_t* aOutInputBlockId) override;
void
SetKeyboardMap(const KeyboardMap& aKeyboardMap) override;
@ -83,17 +76,6 @@ public:
void
SetLongTapEnabled(bool aTapGestureEnabled) override;
void
ProcessUnhandledEvent(
LayoutDeviceIntPoint* aRefPoint,
ScrollableLayerGuid* aOutTargetGuid,
uint64_t* aOutFocusSequenceNumber) override;
void
UpdateWheelTransaction(
LayoutDeviceIntPoint aRefPoint,
EventMessage aEventMessage) override;
APZInputBridge*
InputBridge() override;

View File

@ -30,139 +30,6 @@ APZCTreeManagerParent::ChildAdopted(RefPtr<APZCTreeManager> aAPZCTreeManager)
mTreeManager = aAPZCTreeManager;
}
mozilla::ipc::IPCResult
APZCTreeManagerParent::RecvReceiveMultiTouchInputEvent(
const MultiTouchInput& aEvent,
nsEventStatus* aOutStatus,
MultiTouchInput* aOutEvent,
ScrollableLayerGuid* aOutTargetGuid,
uint64_t* aOutInputBlockId)
{
MultiTouchInput event = aEvent;
*aOutStatus = mTreeManager->ReceiveInputEvent(
event,
aOutTargetGuid,
aOutInputBlockId);
*aOutEvent = event;
return IPC_OK();
}
mozilla::ipc::IPCResult
APZCTreeManagerParent::RecvReceiveMouseInputEvent(
const MouseInput& aEvent,
nsEventStatus* aOutStatus,
MouseInput* aOutEvent,
ScrollableLayerGuid* aOutTargetGuid,
uint64_t* aOutInputBlockId)
{
MouseInput event = aEvent;
*aOutStatus = mTreeManager->ReceiveInputEvent(
event,
aOutTargetGuid,
aOutInputBlockId);
*aOutEvent = event;
return IPC_OK();
}
mozilla::ipc::IPCResult
APZCTreeManagerParent::RecvReceivePanGestureInputEvent(
const PanGestureInput& aEvent,
nsEventStatus* aOutStatus,
PanGestureInput* aOutEvent,
ScrollableLayerGuid* aOutTargetGuid,
uint64_t* aOutInputBlockId)
{
PanGestureInput event = aEvent;
*aOutStatus = mTreeManager->ReceiveInputEvent(
event,
aOutTargetGuid,
aOutInputBlockId);
*aOutEvent = event;
return IPC_OK();
}
mozilla::ipc::IPCResult
APZCTreeManagerParent::RecvReceivePinchGestureInputEvent(
const PinchGestureInput& aEvent,
nsEventStatus* aOutStatus,
PinchGestureInput* aOutEvent,
ScrollableLayerGuid* aOutTargetGuid,
uint64_t* aOutInputBlockId)
{
PinchGestureInput event = aEvent;
*aOutStatus = mTreeManager->ReceiveInputEvent(
event,
aOutTargetGuid,
aOutInputBlockId);
*aOutEvent = event;
return IPC_OK();
}
mozilla::ipc::IPCResult
APZCTreeManagerParent::RecvReceiveTapGestureInputEvent(
const TapGestureInput& aEvent,
nsEventStatus* aOutStatus,
TapGestureInput* aOutEvent,
ScrollableLayerGuid* aOutTargetGuid,
uint64_t* aOutInputBlockId)
{
TapGestureInput event = aEvent;
*aOutStatus = mTreeManager->ReceiveInputEvent(
event,
aOutTargetGuid,
aOutInputBlockId);
*aOutEvent = event;
return IPC_OK();
}
mozilla::ipc::IPCResult
APZCTreeManagerParent::RecvReceiveScrollWheelInputEvent(
const ScrollWheelInput& aEvent,
nsEventStatus* aOutStatus,
ScrollWheelInput* aOutEvent,
ScrollableLayerGuid* aOutTargetGuid,
uint64_t* aOutInputBlockId)
{
ScrollWheelInput event = aEvent;
*aOutStatus = mTreeManager->ReceiveInputEvent(
event,
aOutTargetGuid,
aOutInputBlockId);
*aOutEvent = event;
return IPC_OK();
}
mozilla::ipc::IPCResult
APZCTreeManagerParent::RecvReceiveKeyboardInputEvent(
const KeyboardInput& aEvent,
nsEventStatus* aOutStatus,
KeyboardInput* aOutEvent,
ScrollableLayerGuid* aOutTargetGuid,
uint64_t* aOutInputBlockId)
{
KeyboardInput event = aEvent;
*aOutStatus = mTreeManager->ReceiveInputEvent(
event,
aOutTargetGuid,
aOutInputBlockId);
*aOutEvent = event;
return IPC_OK();
}
mozilla::ipc::IPCResult
APZCTreeManagerParent::RecvSetKeyboardMap(const KeyboardMap& aKeyboardMap)
{
@ -344,28 +211,5 @@ APZCTreeManagerParent::RecvSetLongTapEnabled(const bool& aTapGestureEnabled)
return IPC_OK();
}
mozilla::ipc::IPCResult
APZCTreeManagerParent::RecvUpdateWheelTransaction(
const LayoutDeviceIntPoint& aRefPoint,
const EventMessage& aEventMessage)
{
mTreeManager->UpdateWheelTransaction(aRefPoint, aEventMessage);
return IPC_OK();
}
mozilla::ipc::IPCResult
APZCTreeManagerParent::RecvProcessUnhandledEvent(
const LayoutDeviceIntPoint& aRefPoint,
LayoutDeviceIntPoint* aOutRefPoint,
ScrollableLayerGuid* aOutTargetGuid,
uint64_t* aOutFocusSequenceNumber)
{
LayoutDeviceIntPoint refPoint = aRefPoint;
mTreeManager->ProcessUnhandledEvent(&refPoint, aOutTargetGuid, aOutFocusSequenceNumber);
*aOutRefPoint = refPoint;
return IPC_OK();
}
} // namespace layers
} // namespace mozilla

View File

@ -30,62 +30,6 @@ public:
*/
void ChildAdopted(RefPtr<APZCTreeManager> aAPZCTreeManager);
mozilla::ipc::IPCResult
RecvReceiveMultiTouchInputEvent(
const MultiTouchInput& aEvent,
nsEventStatus* aOutStatus,
MultiTouchInput* aOutEvent,
ScrollableLayerGuid* aOutTargetGuid,
uint64_t* aOutInputBlockId) override;
mozilla::ipc::IPCResult
RecvReceiveMouseInputEvent(
const MouseInput& aEvent,
nsEventStatus* aOutStatus,
MouseInput* aOutEvent,
ScrollableLayerGuid* aOutTargetGuid,
uint64_t* aOutInputBlockId) override;
mozilla::ipc::IPCResult
RecvReceivePanGestureInputEvent(
const PanGestureInput& aEvent,
nsEventStatus* aOutStatus,
PanGestureInput* aOutEvent,
ScrollableLayerGuid* aOutTargetGuid,
uint64_t* aOutInputBlockId) override;
mozilla::ipc::IPCResult
RecvReceivePinchGestureInputEvent(
const PinchGestureInput& aEvent,
nsEventStatus* aOutStatus,
PinchGestureInput* aOutEvent,
ScrollableLayerGuid* aOutTargetGuid,
uint64_t* aOutInputBlockId) override;
mozilla::ipc::IPCResult
RecvReceiveTapGestureInputEvent(
const TapGestureInput& aEvent,
nsEventStatus* aOutStatus,
TapGestureInput* aOutEvent,
ScrollableLayerGuid* aOutTargetGuid,
uint64_t* aOutInputBlockId) override;
mozilla::ipc::IPCResult
RecvReceiveScrollWheelInputEvent(
const ScrollWheelInput& aEvent,
nsEventStatus* aOutStatus,
ScrollWheelInput* aOutEvent,
ScrollableLayerGuid* aOutTargetGuid,
uint64_t* aOutInputBlockId) override;
mozilla::ipc::IPCResult
RecvReceiveKeyboardInputEvent(
const KeyboardInput& aEvent,
nsEventStatus* aOutStatus,
KeyboardInput* aOutEvent,
ScrollableLayerGuid* aOutTargetGuid,
uint64_t* aOutInputBlockId) override;
mozilla::ipc::IPCResult
RecvSetKeyboardMap(const KeyboardMap& aKeyboardMap) override;
@ -134,18 +78,6 @@ public:
mozilla::ipc::IPCResult
RecvSetLongTapEnabled(const bool& aTapGestureEnabled) override;
mozilla::ipc::IPCResult
RecvUpdateWheelTransaction(
const LayoutDeviceIntPoint& aRefPoint,
const EventMessage& aEventMessage) override;
mozilla::ipc::IPCResult
RecvProcessUnhandledEvent(
const LayoutDeviceIntPoint& aRefPoint,
LayoutDeviceIntPoint* aOutRefPoint,
ScrollableLayerGuid* aOutTargetGuid,
uint64_t* aOutFocusSequenceNumber) override;
void
ActorDestroy(ActorDestroyReason aWhy) override { }

View File

@ -40,5 +40,136 @@ APZInputBridgeChild::ActorDestroy(ActorDestroyReason aWhy)
mDestroyed = true;
}
nsEventStatus
APZInputBridgeChild::ReceiveInputEvent(
InputData& aEvent,
ScrollableLayerGuid* aOutTargetGuid,
uint64_t* aOutInputBlockId)
{
switch (aEvent.mInputType) {
case MULTITOUCH_INPUT: {
MultiTouchInput& event = aEvent.AsMultiTouchInput();
MultiTouchInput processedEvent;
nsEventStatus res;
SendReceiveMultiTouchInputEvent(event,
&res,
&processedEvent,
aOutTargetGuid,
aOutInputBlockId);
event = processedEvent;
return res;
}
case MOUSE_INPUT: {
MouseInput& event = aEvent.AsMouseInput();
MouseInput processedEvent;
nsEventStatus res;
SendReceiveMouseInputEvent(event,
&res,
&processedEvent,
aOutTargetGuid,
aOutInputBlockId);
event = processedEvent;
return res;
}
case PANGESTURE_INPUT: {
PanGestureInput& event = aEvent.AsPanGestureInput();
PanGestureInput processedEvent;
nsEventStatus res;
SendReceivePanGestureInputEvent(event,
&res,
&processedEvent,
aOutTargetGuid,
aOutInputBlockId);
event = processedEvent;
return res;
}
case PINCHGESTURE_INPUT: {
PinchGestureInput& event = aEvent.AsPinchGestureInput();
PinchGestureInput processedEvent;
nsEventStatus res;
SendReceivePinchGestureInputEvent(event,
&res,
&processedEvent,
aOutTargetGuid,
aOutInputBlockId);
event = processedEvent;
return res;
}
case TAPGESTURE_INPUT: {
TapGestureInput& event = aEvent.AsTapGestureInput();
TapGestureInput processedEvent;
nsEventStatus res;
SendReceiveTapGestureInputEvent(event,
&res,
&processedEvent,
aOutTargetGuid,
aOutInputBlockId);
event = processedEvent;
return res;
}
case SCROLLWHEEL_INPUT: {
ScrollWheelInput& event = aEvent.AsScrollWheelInput();
ScrollWheelInput processedEvent;
nsEventStatus res;
SendReceiveScrollWheelInputEvent(event,
&res,
&processedEvent,
aOutTargetGuid,
aOutInputBlockId);
event = processedEvent;
return res;
}
case KEYBOARD_INPUT: {
KeyboardInput& event = aEvent.AsKeyboardInput();
KeyboardInput processedEvent;
nsEventStatus res;
SendReceiveKeyboardInputEvent(event,
&res,
&processedEvent,
aOutTargetGuid,
aOutInputBlockId);
event = processedEvent;
return res;
}
default: {
MOZ_ASSERT_UNREACHABLE("Invalid InputData type.");
return nsEventStatus_eConsumeNoDefault;
}
}
}
void APZInputBridgeChild::ProcessUnhandledEvent(
LayoutDeviceIntPoint* aRefPoint,
ScrollableLayerGuid* aOutTargetGuid,
uint64_t* aOutFocusSequenceNumber)
{
SendProcessUnhandledEvent(*aRefPoint,
aRefPoint,
aOutTargetGuid,
aOutFocusSequenceNumber);
}
void
APZInputBridgeChild::UpdateWheelTransaction(
LayoutDeviceIntPoint aRefPoint,
EventMessage aEventMessage)
{
SendUpdateWheelTransaction(aRefPoint, aEventMessage);
}
} // namespace layers
} // namespace mozilla

View File

@ -7,12 +7,14 @@
#ifndef mozilla_layers_APZInputBridgeChild_h
#define mozilla_layers_APZInputBridgeChild_h
#include "mozilla/layers/APZInputBridge.h"
#include "mozilla/layers/PAPZInputBridgeChild.h"
namespace mozilla {
namespace layers {
class APZInputBridgeChild : public PAPZInputBridgeChild
, public APZInputBridge
{
NS_INLINE_DECL_REFCOUNTING(APZInputBridgeChild)
@ -20,7 +22,21 @@ public:
APZInputBridgeChild();
void Destroy();
nsEventStatus ReceiveInputEvent(
InputData& aEvent,
ScrollableLayerGuid* aOutTargetGuid,
uint64_t* aOutInputBlockId) override;
protected:
void ProcessUnhandledEvent(
LayoutDeviceIntPoint* aRefPoint,
ScrollableLayerGuid* aOutTargetGuid,
uint64_t* aOutFocusSequenceNumber) override;
void UpdateWheelTransaction(
LayoutDeviceIntPoint aRefPoint,
EventMessage aEventMessage) override;
void ActorDestroy(ActorDestroyReason aWhy) override;
virtual ~APZInputBridgeChild();

View File

@ -6,6 +6,7 @@
#include "mozilla/layers/APZInputBridgeParent.h"
#include "mozilla/layers/APZInputBridge.h"
#include "mozilla/layers/CompositorBridgeParent.h"
#include "mozilla/layers/IAPZCTreeManager.h"
@ -25,6 +26,164 @@ APZInputBridgeParent::~APZInputBridgeParent()
{
}
mozilla::ipc::IPCResult
APZInputBridgeParent::RecvReceiveMultiTouchInputEvent(
const MultiTouchInput& aEvent,
nsEventStatus* aOutStatus,
MultiTouchInput* aOutEvent,
ScrollableLayerGuid* aOutTargetGuid,
uint64_t* aOutInputBlockId)
{
MultiTouchInput event = aEvent;
*aOutStatus = mTreeManager->InputBridge()->ReceiveInputEvent(
event,
aOutTargetGuid,
aOutInputBlockId);
*aOutEvent = event;
return IPC_OK();
}
mozilla::ipc::IPCResult
APZInputBridgeParent::RecvReceiveMouseInputEvent(
const MouseInput& aEvent,
nsEventStatus* aOutStatus,
MouseInput* aOutEvent,
ScrollableLayerGuid* aOutTargetGuid,
uint64_t* aOutInputBlockId)
{
MouseInput event = aEvent;
*aOutStatus = mTreeManager->InputBridge()->ReceiveInputEvent(
event,
aOutTargetGuid,
aOutInputBlockId);
*aOutEvent = event;
return IPC_OK();
}
mozilla::ipc::IPCResult
APZInputBridgeParent::RecvReceivePanGestureInputEvent(
const PanGestureInput& aEvent,
nsEventStatus* aOutStatus,
PanGestureInput* aOutEvent,
ScrollableLayerGuid* aOutTargetGuid,
uint64_t* aOutInputBlockId)
{
PanGestureInput event = aEvent;
*aOutStatus = mTreeManager->InputBridge()->ReceiveInputEvent(
event,
aOutTargetGuid,
aOutInputBlockId);
*aOutEvent = event;
return IPC_OK();
}
mozilla::ipc::IPCResult
APZInputBridgeParent::RecvReceivePinchGestureInputEvent(
const PinchGestureInput& aEvent,
nsEventStatus* aOutStatus,
PinchGestureInput* aOutEvent,
ScrollableLayerGuid* aOutTargetGuid,
uint64_t* aOutInputBlockId)
{
PinchGestureInput event = aEvent;
*aOutStatus = mTreeManager->InputBridge()->ReceiveInputEvent(
event,
aOutTargetGuid,
aOutInputBlockId);
*aOutEvent = event;
return IPC_OK();
}
mozilla::ipc::IPCResult
APZInputBridgeParent::RecvReceiveTapGestureInputEvent(
const TapGestureInput& aEvent,
nsEventStatus* aOutStatus,
TapGestureInput* aOutEvent,
ScrollableLayerGuid* aOutTargetGuid,
uint64_t* aOutInputBlockId)
{
TapGestureInput event = aEvent;
*aOutStatus = mTreeManager->InputBridge()->ReceiveInputEvent(
event,
aOutTargetGuid,
aOutInputBlockId);
*aOutEvent = event;
return IPC_OK();
}
mozilla::ipc::IPCResult
APZInputBridgeParent::RecvReceiveScrollWheelInputEvent(
const ScrollWheelInput& aEvent,
nsEventStatus* aOutStatus,
ScrollWheelInput* aOutEvent,
ScrollableLayerGuid* aOutTargetGuid,
uint64_t* aOutInputBlockId)
{
ScrollWheelInput event = aEvent;
*aOutStatus = mTreeManager->InputBridge()->ReceiveInputEvent(
event,
aOutTargetGuid,
aOutInputBlockId);
*aOutEvent = event;
return IPC_OK();
}
mozilla::ipc::IPCResult
APZInputBridgeParent::RecvReceiveKeyboardInputEvent(
const KeyboardInput& aEvent,
nsEventStatus* aOutStatus,
KeyboardInput* aOutEvent,
ScrollableLayerGuid* aOutTargetGuid,
uint64_t* aOutInputBlockId)
{
KeyboardInput event = aEvent;
*aOutStatus = mTreeManager->InputBridge()->ReceiveInputEvent(
event,
aOutTargetGuid,
aOutInputBlockId);
*aOutEvent = event;
return IPC_OK();
}
mozilla::ipc::IPCResult
APZInputBridgeParent::RecvUpdateWheelTransaction(
const LayoutDeviceIntPoint& aRefPoint,
const EventMessage& aEventMessage)
{
mTreeManager->InputBridge()->UpdateWheelTransaction(
aRefPoint, aEventMessage);
return IPC_OK();
}
mozilla::ipc::IPCResult
APZInputBridgeParent::RecvProcessUnhandledEvent(
const LayoutDeviceIntPoint& aRefPoint,
LayoutDeviceIntPoint* aOutRefPoint,
ScrollableLayerGuid* aOutTargetGuid,
uint64_t* aOutFocusSequenceNumber)
{
LayoutDeviceIntPoint refPoint = aRefPoint;
mTreeManager->InputBridge()->ProcessUnhandledEvent(
&refPoint, aOutTargetGuid, aOutFocusSequenceNumber);
*aOutRefPoint = refPoint;
return IPC_OK();
}
void
APZInputBridgeParent::ActorDestroy(ActorDestroyReason aWhy)
{

View File

@ -21,6 +21,74 @@ class APZInputBridgeParent : public PAPZInputBridgeParent
public:
explicit APZInputBridgeParent(const uint64_t& aLayersId);
mozilla::ipc::IPCResult
RecvReceiveMultiTouchInputEvent(
const MultiTouchInput& aEvent,
nsEventStatus* aOutStatus,
MultiTouchInput* aOutEvent,
ScrollableLayerGuid* aOutTargetGuid,
uint64_t* aOutInputBlockId) override;
mozilla::ipc::IPCResult
RecvReceiveMouseInputEvent(
const MouseInput& aEvent,
nsEventStatus* aOutStatus,
MouseInput* aOutEvent,
ScrollableLayerGuid* aOutTargetGuid,
uint64_t* aOutInputBlockId) override;
mozilla::ipc::IPCResult
RecvReceivePanGestureInputEvent(
const PanGestureInput& aEvent,
nsEventStatus* aOutStatus,
PanGestureInput* aOutEvent,
ScrollableLayerGuid* aOutTargetGuid,
uint64_t* aOutInputBlockId) override;
mozilla::ipc::IPCResult
RecvReceivePinchGestureInputEvent(
const PinchGestureInput& aEvent,
nsEventStatus* aOutStatus,
PinchGestureInput* aOutEvent,
ScrollableLayerGuid* aOutTargetGuid,
uint64_t* aOutInputBlockId) override;
mozilla::ipc::IPCResult
RecvReceiveTapGestureInputEvent(
const TapGestureInput& aEvent,
nsEventStatus* aOutStatus,
TapGestureInput* aOutEvent,
ScrollableLayerGuid* aOutTargetGuid,
uint64_t* aOutInputBlockId) override;
mozilla::ipc::IPCResult
RecvReceiveScrollWheelInputEvent(
const ScrollWheelInput& aEvent,
nsEventStatus* aOutStatus,
ScrollWheelInput* aOutEvent,
ScrollableLayerGuid* aOutTargetGuid,
uint64_t* aOutInputBlockId) override;
mozilla::ipc::IPCResult
RecvReceiveKeyboardInputEvent(
const KeyboardInput& aEvent,
nsEventStatus* aOutStatus,
KeyboardInput* aOutEvent,
ScrollableLayerGuid* aOutTargetGuid,
uint64_t* aOutInputBlockId) override;
mozilla::ipc::IPCResult
RecvUpdateWheelTransaction(
const LayoutDeviceIntPoint& aRefPoint,
const EventMessage& aEventMessage) override;
mozilla::ipc::IPCResult
RecvProcessUnhandledEvent(
const LayoutDeviceIntPoint& aRefPoint,
LayoutDeviceIntPoint* aOutRefPoint,
ScrollableLayerGuid* aOutTargetGuid,
uint64_t* aOutFocusSequenceNumber) override;
void
ActorDestroy(ActorDestroyReason aWhy) override;

View File

@ -6,14 +6,11 @@
include "mozilla/GfxMessageUtils.h";
include "mozilla/layers/LayersMessageUtils.h";
include "ipc/nsGUIEventIPC.h";
include "mozilla/dom/TabMessageUtils.h"; // Needed for IPC::ParamTraits<nsEventStatus>.
include protocol PCompositorBridge;
using CSSPoint from "Units.h";
using CSSRect from "Units.h";
using LayoutDeviceCoord from "Units.h";
using LayoutDeviceIntPoint from "Units.h";
using mozilla::LayoutDevicePoint from "Units.h";
using ScreenPoint from "Units.h";
using struct mozilla::layers::ScrollableLayerGuid from "FrameMetrics.h";
@ -24,23 +21,8 @@ using mozilla::layers::AsyncDragMetrics from "mozilla/layers/AsyncDragMetrics.h"
using mozilla::layers::GeckoContentController::TapType from "mozilla/layers/GeckoContentController.h";
using class mozilla::layers::KeyboardMap from "mozilla/layers/KeyboardMap.h";
using nsEventStatus from "mozilla/EventForwards.h";
using EventMessage from "mozilla/EventForwards.h";
using mozilla::Modifiers from "mozilla/EventForwards.h";
using class mozilla::WidgetInputEvent from "mozilla/BasicEvents.h";
using class mozilla::WidgetMouseEventBase from "mozilla/MouseEvents.h";
using mozilla::WidgetMouseEvent::Reason from "mozilla/MouseEvents.h";
using class mozilla::WidgetTouchEvent from "mozilla/TouchEvents.h";
using class mozilla::WidgetWheelEvent from "mozilla/MouseEvents.h";
using class mozilla::InputData from "InputData.h";
using class mozilla::MultiTouchInput from "InputData.h";
using class mozilla::MouseInput from "InputData.h";
using class mozilla::PanGestureInput from "InputData.h";
using class mozilla::PinchGestureInput from "InputData.h";
using mozilla::PinchGestureInput::PinchGestureType from "InputData.h";
using class mozilla::TapGestureInput from "InputData.h";
using class mozilla::ScrollWheelInput from "InputData.h";
using class mozilla::KeyboardInput from "InputData.h";
namespace mozilla {
namespace layers {
@ -54,7 +36,7 @@ namespace layers {
* lives in the main thread of the main or the content process. APZCTreeManagerParent
* and APZCTreeManagerChild implement this protocol.
*/
sync protocol PAPZCTreeManager
protocol PAPZCTreeManager
{
manager PCompositorBridge;
@ -85,58 +67,6 @@ parent:
async SetLongTapEnabled(bool aTapGestureEnabled);
// The following messages are used to
// implement the ReceiveInputEvent methods
sync ReceiveMultiTouchInputEvent(MultiTouchInput aEvent)
returns (nsEventStatus aOutStatus,
MultiTouchInput aOutEvent,
ScrollableLayerGuid aOutTargetGuid,
uint64_t aOutInputBlockId);
sync ReceiveMouseInputEvent(MouseInput aEvent)
returns (nsEventStatus aOutStatus,
MouseInput aOutEvent,
ScrollableLayerGuid aOutTargetGuid,
uint64_t aOutInputBlockId);
sync ReceivePanGestureInputEvent(PanGestureInput aEvent)
returns (nsEventStatus aOutStatus,
PanGestureInput aOutEvent,
ScrollableLayerGuid aOutTargetGuid,
uint64_t aOutInputBlockId);
sync ReceivePinchGestureInputEvent(PinchGestureInput aEvent)
returns (nsEventStatus aOutStatus,
PinchGestureInput aOutEvent,
ScrollableLayerGuid aOutTargetGuid,
uint64_t aOutInputBlockId);
sync ReceiveTapGestureInputEvent(TapGestureInput aEvent)
returns (nsEventStatus aOutStatus,
TapGestureInput aOutEvent,
ScrollableLayerGuid aOutTargetGuid,
uint64_t aOutInputBlockId);
sync ReceiveScrollWheelInputEvent(ScrollWheelInput aEvent)
returns (nsEventStatus aOutStatus,
ScrollWheelInput aOutEvent,
ScrollableLayerGuid aOutTargetGuid,
uint64_t aOutInputBlockId);
sync ReceiveKeyboardInputEvent(KeyboardInput aEvent)
returns (nsEventStatus aOutStatus,
KeyboardInput aOutEvent,
ScrollableLayerGuid aOutTargetGuid,
uint64_t aOutInputBlockId);
async UpdateWheelTransaction(LayoutDeviceIntPoint aRefPoint, EventMessage aEventMessage);
sync ProcessUnhandledEvent(LayoutDeviceIntPoint aRefPoint)
returns (LayoutDeviceIntPoint aOutRefPoint,
ScrollableLayerGuid aOutTargetGuid,
uint64_t aOutFocusSequenceNumber);
async __delete__();
child:

View File

@ -3,6 +3,19 @@
* 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/. */
using LayoutDeviceIntPoint from "Units.h";
using struct mozilla::layers::ScrollableLayerGuid from "FrameMetrics.h";
using nsEventStatus from "mozilla/EventForwards.h";
using EventMessage from "mozilla/EventForwards.h";
using class mozilla::MultiTouchInput from "InputData.h";
using class mozilla::MouseInput from "InputData.h";
using class mozilla::PanGestureInput from "InputData.h";
using class mozilla::PinchGestureInput from "InputData.h";
using class mozilla::TapGestureInput from "InputData.h";
using class mozilla::ScrollWheelInput from "InputData.h";
using class mozilla::KeyboardInput from "InputData.h";
include protocol PGPU;
namespace mozilla {
@ -21,6 +34,58 @@ sync protocol PAPZInputBridge
manager PGPU;
parent:
// The following messages are used to
// implement the ReceiveInputEvent methods
sync ReceiveMultiTouchInputEvent(MultiTouchInput aEvent)
returns (nsEventStatus aOutStatus,
MultiTouchInput aOutEvent,
ScrollableLayerGuid aOutTargetGuid,
uint64_t aOutInputBlockId);
sync ReceiveMouseInputEvent(MouseInput aEvent)
returns (nsEventStatus aOutStatus,
MouseInput aOutEvent,
ScrollableLayerGuid aOutTargetGuid,
uint64_t aOutInputBlockId);
sync ReceivePanGestureInputEvent(PanGestureInput aEvent)
returns (nsEventStatus aOutStatus,
PanGestureInput aOutEvent,
ScrollableLayerGuid aOutTargetGuid,
uint64_t aOutInputBlockId);
sync ReceivePinchGestureInputEvent(PinchGestureInput aEvent)
returns (nsEventStatus aOutStatus,
PinchGestureInput aOutEvent,
ScrollableLayerGuid aOutTargetGuid,
uint64_t aOutInputBlockId);
sync ReceiveTapGestureInputEvent(TapGestureInput aEvent)
returns (nsEventStatus aOutStatus,
TapGestureInput aOutEvent,
ScrollableLayerGuid aOutTargetGuid,
uint64_t aOutInputBlockId);
sync ReceiveScrollWheelInputEvent(ScrollWheelInput aEvent)
returns (nsEventStatus aOutStatus,
ScrollWheelInput aOutEvent,
ScrollableLayerGuid aOutTargetGuid,
uint64_t aOutInputBlockId);
sync ReceiveKeyboardInputEvent(KeyboardInput aEvent)
returns (nsEventStatus aOutStatus,
KeyboardInput aOutEvent,
ScrollableLayerGuid aOutTargetGuid,
uint64_t aOutInputBlockId);
async UpdateWheelTransaction(LayoutDeviceIntPoint aRefPoint, EventMessage aEventMessage);
sync ProcessUnhandledEvent(LayoutDeviceIntPoint aRefPoint)
returns (LayoutDeviceIntPoint aOutRefPoint,
ScrollableLayerGuid aOutTargetGuid,
uint64_t aOutFocusSequenceNumber);
async __delete__();
};

View File

@ -928,21 +928,21 @@ description =
description =
[PGPU::SimulateDeviceReset]
description =
[PAPZCTreeManager::ReceiveMultiTouchInputEvent]
[PAPZInputBridge::ReceiveMultiTouchInputEvent]
description =
[PAPZCTreeManager::ReceiveMouseInputEvent]
[PAPZInputBridge::ReceiveMouseInputEvent]
description =
[PAPZCTreeManager::ReceivePanGestureInputEvent]
[PAPZInputBridge::ReceivePanGestureInputEvent]
description =
[PAPZCTreeManager::ReceivePinchGestureInputEvent]
[PAPZInputBridge::ReceivePinchGestureInputEvent]
description =
[PAPZCTreeManager::ReceiveTapGestureInputEvent]
[PAPZInputBridge::ReceiveTapGestureInputEvent]
description =
[PAPZCTreeManager::ReceiveScrollWheelInputEvent]
[PAPZInputBridge::ReceiveScrollWheelInputEvent]
description =
[PAPZCTreeManager::ProcessUnhandledEvent]
[PAPZInputBridge::ProcessUnhandledEvent]
description =
[PAPZCTreeManager::ReceiveKeyboardInputEvent]
[PAPZInputBridge::ReceiveKeyboardInputEvent]
description =
[PCompositorBridge::Initialize]
description =

View File

@ -24,8 +24,8 @@ class nsIWidget;
namespace mozilla {
namespace layers {
class PAPZCTreeManagerParent;
class APZCTreeManagerChild;
class APZInputBridgeChild;
class PAPZInputBridgeParent;
}
namespace dom {
@ -228,8 +228,8 @@ public:
class MouseInput : public InputData
{
protected:
friend mozilla::layers::PAPZCTreeManagerParent;
friend mozilla::layers::APZCTreeManagerChild;
friend mozilla::layers::APZInputBridgeChild;
friend mozilla::layers::PAPZInputBridgeParent;
MouseInput();
@ -284,8 +284,8 @@ public:
class PanGestureInput : public InputData
{
protected:
friend mozilla::layers::PAPZCTreeManagerParent;
friend mozilla::layers::APZCTreeManagerChild;
friend mozilla::layers::APZInputBridgeChild;
friend mozilla::layers::PAPZInputBridgeParent;
PanGestureInput();
@ -404,8 +404,8 @@ public:
class PinchGestureInput : public InputData
{
protected:
friend mozilla::layers::PAPZCTreeManagerParent;
friend mozilla::layers::APZCTreeManagerChild;
friend mozilla::layers::APZInputBridgeChild;
friend mozilla::layers::PAPZInputBridgeParent;
PinchGestureInput();
@ -461,8 +461,8 @@ public:
class TapGestureInput : public InputData
{
protected:
friend mozilla::layers::PAPZCTreeManagerParent;
friend mozilla::layers::APZCTreeManagerChild;
friend mozilla::layers::APZInputBridgeChild;
friend mozilla::layers::PAPZInputBridgeParent;
TapGestureInput();
@ -508,8 +508,8 @@ public:
class ScrollWheelInput : public InputData
{
protected:
friend mozilla::layers::PAPZCTreeManagerParent;
friend mozilla::layers::APZCTreeManagerChild;
friend mozilla::layers::APZInputBridgeChild;
friend mozilla::layers::PAPZInputBridgeParent;
ScrollWheelInput();
@ -619,8 +619,8 @@ public:
KeyboardScrollAction mAction;
protected:
friend mozilla::layers::PAPZCTreeManagerParent;
friend mozilla::layers::APZCTreeManagerChild;
friend mozilla::layers::APZInputBridgeChild;
friend mozilla::layers::PAPZInputBridgeParent;
KeyboardInput();
};