Bug 1251612 - Support the GetFrameUniformity API in content processes. r=botond,froydnj

This moves the IPC mechanism from PCompositorBridge to PLayerTransaction/
PWebRenderBridge, so that it can be used by content processes like the other
test APIs. It still only produces actual data for the layers backend; for
WR it will just return empty datasets.

Differential Revision: https://phabricator.services.mozilla.com/D86016
This commit is contained in:
Kartikaya Gupta 2020-08-05 21:42:06 +00:00
Родитель b0647eab4e
Коммит 39167fa7cd
15 изменённых файлов: 57 добавлений и 32 удалений

Просмотреть файл

@ -573,16 +573,9 @@ void ClientLayerManager::StartNewRepaintRequest(
}
void ClientLayerManager::GetFrameUniformity(FrameUniformityData* aOutData) {
MOZ_ASSERT(XRE_IsParentProcess(),
"Frame Uniformity only supported in parent process");
if (HasShadowManager()) {
CompositorBridgeChild* child = GetRemoteRenderer();
child->SendGetFrameUniformity(aOutData);
return;
mForwarder->GetShadowManager()->SendGetFrameUniformity(aOutData);
}
return LayerManager::GetFrameUniformity(aOutData);
}
void ClientLayerManager::MakeSnapshotIfRequired() {

Просмотреть файл

@ -1404,12 +1404,6 @@ void CompositorBridgeParent::NotifyJankedAnimations(
}
}
mozilla::ipc::IPCResult CompositorBridgeParent::RecvGetFrameUniformity(
FrameUniformityData* aOutData) {
mCompositionManager->GetFrameUniformity(aOutData);
return IPC_OK();
}
void CompositorBridgeParent::SetTestAsyncScrollOffset(
const LayersId& aLayersId, const ScrollableLayerGuid::ViewID& aScrollId,
const CSSPoint& aPoint) {
@ -1445,6 +1439,13 @@ void CompositorBridgeParent::GetAPZTestData(const LayersId& aLayersId,
}
}
void CompositorBridgeParent::GetFrameUniformity(const LayersId& aLayersId,
FrameUniformityData* aOutData) {
if (mCompositionManager) {
mCompositionManager->GetFrameUniformity(aOutData);
}
}
void CompositorBridgeParent::SetConfirmedTargetAPZC(
const LayersId& aLayersId, const uint64_t& aInputBlockId,
const nsTArray<ScrollableLayerGuid>& aTargets) {

Просмотреть файл

@ -146,6 +146,8 @@ class CompositorBridgeParentBase : public PCompositorBridgeParent,
virtual void FlushApzRepaints(const LayersId& aLayersId) = 0;
virtual void GetAPZTestData(const LayersId& aLayersId,
APZTestData* aOutData) {}
virtual void GetFrameUniformity(const LayersId& aLayersId,
FrameUniformityData* data) = 0;
virtual void SetConfirmedTargetAPZC(
const LayersId& aLayersId, const uint64_t& aInputBlockId,
const nsTArray<ScrollableLayerGuid>& aTargets) = 0;
@ -266,8 +268,6 @@ class CompositorBridgeParentBase : public PCompositorBridgeParent,
EndRecordingToMemoryResolver&& aResolve) = 0;
virtual mozilla::ipc::IPCResult RecvInitialize(
const LayersId& rootLayerTreeId) = 0;
virtual mozilla::ipc::IPCResult RecvGetFrameUniformity(
FrameUniformityData* data) = 0;
virtual mozilla::ipc::IPCResult RecvWillClose() = 0;
virtual mozilla::ipc::IPCResult RecvPause() = 0;
virtual mozilla::ipc::IPCResult RecvRequestFxrOutput() = 0;
@ -345,8 +345,6 @@ class CompositorBridgeParent final : public CompositorBridgeParentBase,
mozilla::ipc::IPCResult RecvInitialize(
const LayersId& aRootLayerTreeId) override;
mozilla::ipc::IPCResult RecvGetFrameUniformity(
FrameUniformityData* aOutData) override;
mozilla::ipc::IPCResult RecvWillClose() override;
mozilla::ipc::IPCResult RecvPause() override;
mozilla::ipc::IPCResult RecvRequestFxrOutput() override;
@ -420,6 +418,8 @@ class CompositorBridgeParent final : public CompositorBridgeParentBase,
void FlushApzRepaints(const LayersId& aLayersId) override;
void GetAPZTestData(const LayersId& aLayersId,
APZTestData* aOutData) override;
void GetFrameUniformity(const LayersId& aLayersId,
FrameUniformityData* data) override;
void SetConfirmedTargetAPZC(
const LayersId& aLayersId, const uint64_t& aInputBlockId,
const nsTArray<ScrollableLayerGuid>& aTargets) override;

Просмотреть файл

@ -559,6 +559,18 @@ void ContentCompositorBridgeParent::GetAPZTestData(const LayersId& aLayersId,
state->mParent->GetAPZTestData(aLayersId, aOutData);
}
void ContentCompositorBridgeParent::GetFrameUniformity(
const LayersId& aLayersId, FrameUniformityData* aOutData) {
MOZ_ASSERT(aLayersId.IsValid());
const CompositorBridgeParent::LayerTreeState* state =
CompositorBridgeParent::GetIndirectShadowTree(aLayersId);
if (!state || !state->mParent) {
return;
}
state->mParent->GetFrameUniformity(aLayersId, aOutData);
}
void ContentCompositorBridgeParent::SetConfirmedTargetAPZC(
const LayersId& aLayersId, const uint64_t& aInputBlockId,
const nsTArray<ScrollableLayerGuid>& aTargets) {

Просмотреть файл

@ -112,14 +112,6 @@ class ContentCompositorBridgeParent final : public CompositorBridgeParentBase {
return IPC_OK();
}
mozilla::ipc::IPCResult RecvGetFrameUniformity(
FrameUniformityData* aOutData) override {
// Don't support calculating frame uniformity on the child process and
// this is just a stub for now.
MOZ_ASSERT(false);
return IPC_OK();
}
/**
* Tells this CompositorBridgeParent to send a message when the compositor has
* received the transaction.
@ -151,6 +143,8 @@ class ContentCompositorBridgeParent final : public CompositorBridgeParentBase {
void FlushApzRepaints(const LayersId& aLayersId) override;
void GetAPZTestData(const LayersId& aLayersId,
APZTestData* aOutData) override;
void GetFrameUniformity(const LayersId& aLayersId,
FrameUniformityData* aOutData) override;
void SetConfirmedTargetAPZC(
const LayersId& aLayersId, const uint64_t& aInputBlockId,
const nsTArray<ScrollableLayerGuid>& aTargets) override;

Просмотреть файл

@ -772,6 +772,12 @@ mozilla::ipc::IPCResult LayerTransactionParent::RecvGetAPZTestData(
return IPC_OK();
}
mozilla::ipc::IPCResult LayerTransactionParent::RecvGetFrameUniformity(
FrameUniformityData* aOutData) {
mCompositorBridge->GetFrameUniformity(GetId(), aOutData);
return IPC_OK();
}
mozilla::ipc::IPCResult LayerTransactionParent::RecvRequestProperty(
const nsString& aProperty, float* aValue) {
*aValue = -1;

Просмотреть файл

@ -127,6 +127,7 @@ class LayerTransactionParent final : public PLayerTransactionParent,
const ScrollableLayerGuid::ViewID& aId, const float& aValue);
mozilla::ipc::IPCResult RecvFlushApzRepaints();
mozilla::ipc::IPCResult RecvGetAPZTestData(APZTestData* aOutData);
mozilla::ipc::IPCResult RecvGetFrameUniformity(FrameUniformityData* aOutData);
mozilla::ipc::IPCResult RecvRequestProperty(const nsString& aProperty,
float* aValue);
mozilla::ipc::IPCResult RecvSetConfirmedTargetAPZC(

Просмотреть файл

@ -38,7 +38,6 @@ using mozilla::LayoutDeviceIntPoint from "Units.h";
using mozilla::LayoutDeviceIntRegion from "Units.h";
using mozilla::LayoutDeviceIntSize from "Units.h";
using class mozilla::TimeStamp from "mozilla/TimeStamp.h";
using class mozilla::layers::FrameUniformityData from "mozilla/layers/FrameUniformityData.h";
using mozilla::layers::TextureFlags from "mozilla/layers/CompositorTypes.h";
using mozilla::layers::CompositorOptions from "mozilla/layers/CompositorOptions.h";
using mozilla::wr::PipelineId from "mozilla/webrender/WebRenderTypes.h";
@ -185,9 +184,6 @@ parent:
*/
async RemotePluginsReady();
// Child requests frame uniformity measurements
sync GetFrameUniformity() returns (FrameUniformityData data);
// The child is about to be destroyed, so perform any necessary cleanup.
sync WillClose();

Просмотреть файл

@ -17,6 +17,7 @@ using struct mozilla::layers::TextureInfo from "mozilla/layers/CompositorTypes.h
using struct mozilla::void_t from "ipc/IPCMessageUtils.h";
using struct mozilla::null_t from "ipc/IPCMessageUtils.h";
using class mozilla::layers::APZTestData from "mozilla/layers/APZTestData.h";
using mozilla::layers::FrameUniformityData from "mozilla/layers/FrameUniformityData.h";
using mozilla::layers::ScrollableLayerGuid from "mozilla/layers/ScrollableLayerGuid.h";
using mozilla::layers::ScrollableLayerGuid::ViewID from "mozilla/layers/ScrollableLayerGuid.h";
using struct mozilla::layers::TextureFactoryIdentifier from "mozilla/layers/CompositorTypes.h";
@ -107,6 +108,9 @@ parent:
// layers id.
sync GetAPZTestData() returns (APZTestData data);
// Child requests frame uniformity measurements
sync GetFrameUniformity() returns (FrameUniformityData data);
// Query a named property from the last frame
sync RequestProperty(nsString property) returns (float value);

Просмотреть файл

@ -15,6 +15,7 @@ include protocol PCompositorBridge;
include protocol PTexture;
using mozilla::layers::APZTestData from "mozilla/layers/APZTestData.h";
using mozilla::layers::FrameUniformityData from "mozilla/layers/FrameUniformityData.h";
using mozilla::layers::ScrollableLayerGuid from "mozilla/layers/ScrollableLayerGuid.h";
using struct mozilla::layers::TextureFactoryIdentifier from "mozilla/layers/CompositorTypes.h";
using struct mozilla::layers::TextureInfo from "mozilla/layers/CompositorTypes.h";
@ -91,6 +92,7 @@ parent:
sync SetAsyncZoom(ViewID scrollId, float zoom);
async FlushApzRepaints();
sync GetAPZTestData() returns (APZTestData data);
sync GetFrameUniformity() returns (FrameUniformityData data);
async Shutdown();
sync ShutdownSync();

Просмотреть файл

@ -1916,6 +1916,12 @@ mozilla::ipc::IPCResult WebRenderBridgeParent::RecvGetAPZTestData(
return IPC_OK();
}
mozilla::ipc::IPCResult WebRenderBridgeParent::RecvGetFrameUniformity(
FrameUniformityData* aOutData) {
mCompositorBridge->GetFrameUniformity(GetLayersId(), aOutData);
return IPC_OK();
}
void WebRenderBridgeParent::ActorDestroy(ActorDestroyReason aWhy) { Destroy(); }
void WebRenderBridgeParent::ResetPreviousSampleTime() {

Просмотреть файл

@ -199,6 +199,8 @@ class WebRenderBridgeParent final : public PWebRenderBridgeParent,
const float& aZoom) override;
mozilla::ipc::IPCResult RecvFlushApzRepaints() override;
mozilla::ipc::IPCResult RecvGetAPZTestData(APZTestData* data) override;
mozilla::ipc::IPCResult RecvGetFrameUniformity(
FrameUniformityData* aOutData) override;
void ActorDestroy(ActorDestroyReason aWhy) override;

Просмотреть файл

@ -721,5 +721,9 @@ void WebRenderLayerManager::WrReleasedImages(
mStateManager.WrReleasedImages(aPairs);
}
void WebRenderLayerManager::GetFrameUniformity(FrameUniformityData* aOutData) {
WrBridge()->SendGetFrameUniformity(aOutData);
}
} // namespace layers
} // namespace mozilla

Просмотреть файл

@ -183,6 +183,8 @@ class WebRenderLayerManager final : public LayerManager {
void TakeCompositionPayloads(nsTArray<CompositionPayload>& aPayloads);
void GetFrameUniformity(FrameUniformityData* aOutData) override;
private:
/**
* Take a snapshot of the parent context, and copy

Просмотреть файл

@ -906,8 +906,6 @@ description = legacy sync IPC - please add detailed description
description = legacy sync IPC - please add detailed description
[PCompositorBridge::Initialize]
description = legacy sync IPC - please add detailed description
[PCompositorBridge::GetFrameUniformity]
description = legacy sync IPC - please add detailed description
[PCompositorBridge::WillClose]
description = legacy sync IPC - please add detailed description
[PCompositorBridge::Pause]
@ -972,6 +970,8 @@ description = legacy sync IPC - please add detailed description
description = legacy sync IPC - please add detailed description
[PLayerTransaction::GetAPZTestData]
description = legacy sync IPC - please add detailed description
[PLayerTransaction::GetFrameUniformity]
description = test only
[PLayerTransaction::RequestProperty]
description = legacy sync IPC - please add detailed description
[PLayerTransaction::GetTextureFactoryIdentifier]
@ -998,6 +998,8 @@ description = test only
description = test only
[PWebRenderBridge::GetAPZTestData]
description = test only
[PWebRenderBridge::GetFrameUniformity]
description = test only
[PWebRenderBridge::ShutdownSync]
description = bug 1377024
[PWebRenderBridge::SyncWithCompositor]