Bug 1622360 - Singularize the TransactionData across IPC. r=jrmuizel

Depends on D75386

Differential Revision: https://phabricator.services.mozilla.com/D75387
This commit is contained in:
Kartikaya Gupta
2020-05-15 00:10:36 +00:00
parent b8f9aa4d43
commit a745c4e3c8
8 changed files with 28 additions and 24 deletions

View File

@@ -25,7 +25,7 @@ using mozilla::wr::IdNamespace from "mozilla/webrender/WebRenderTypes.h";
using mozilla::wr::MaybeIdNamespace from "mozilla/webrender/WebRenderTypes.h";
using mozilla::wr::ExternalImageKeyPair from "mozilla/webrender/WebRenderTypes.h";
using moveonly mozilla::layers::DisplayListData from "mozilla/layers/RenderRootTypes.h";
using moveonly mozilla::layers::TransactionData from "mozilla/layers/RenderRootTypes.h";
using moveonly mozilla::layers::MaybeTransactionData from "mozilla/layers/RenderRootTypes.h";
using mozilla::layers::FocusTarget from "mozilla/layers/FocusTarget.h";
using mozilla::layers::LayersObserverEpoch from "mozilla/layers/LayersTypes.h";
using mozilla::layers::TransactionId from "mozilla/layers/LayersTypes.h";
@@ -53,7 +53,7 @@ parent:
TimeStamp refreshStartTime, TimeStamp txnStartTime, nsCString txnURL, TimeStamp fwdTime,
CompositionPayload[] payloads);
async EmptyTransaction(FocusTarget focusTarget,
TransactionData[] transationData,
MaybeTransactionData transationData,
OpDestroy[] toDestroy, uint64_t fwdTransactionId, TransactionId transactionId,
VsyncId vsyncId, TimeStamp vsyncStartTime,
TimeStamp refreshStartTime, TimeStamp txnStartTime,

View File

@@ -40,6 +40,8 @@ struct TransactionData {
uint32_t mPaintSequenceNumber;
};
typedef Maybe<TransactionData> MaybeTransactionData;
} // namespace layers
namespace ipc {

View File

@@ -139,7 +139,7 @@ bool WebRenderBridgeChild::EndTransaction(
}
void WebRenderBridgeChild::EndEmptyTransaction(
const FocusTarget& aFocusTarget, nsTArray<TransactionData>& transactionData,
const FocusTarget& aFocusTarget, Maybe<TransactionData>&& aTransactionData,
TransactionId aTransactionId, const mozilla::VsyncId& aVsyncId,
const mozilla::TimeStamp& aVsyncStartTime,
const mozilla::TimeStamp& aRefreshStartTime,
@@ -149,8 +149,8 @@ void WebRenderBridgeChild::EndEmptyTransaction(
TimeStamp fwdTime = TimeStamp::Now();
for (auto& datum : transactionData) {
datum.mCommands = std::move(mParentCommands);
if (aTransactionData) {
aTransactionData->mCommands = std::move(mParentCommands);
}
nsTArray<CompositionPayload> payloads;
@@ -159,7 +159,7 @@ void WebRenderBridgeChild::EndEmptyTransaction(
}
this->SendEmptyTransaction(
aFocusTarget, std::move(transactionData), mDestroyedActors,
aFocusTarget, std::move(aTransactionData), mDestroyedActors,
GetFwdTransactionId(), aTransactionId, aVsyncId, aVsyncStartTime,
aRefreshStartTime, aTxnStartTime, aTxnURL, fwdTime, payloads);

View File

@@ -77,7 +77,7 @@ class WebRenderBridgeChild final : public PWebRenderBridgeChild,
const mozilla::TimeStamp& aTxnStartTime,
const nsCString& aTxtURL);
void EndEmptyTransaction(const FocusTarget& aFocusTarget,
nsTArray<TransactionData>& aTransactionData,
Maybe<TransactionData>&& aTransactionData,
TransactionId aTransactionId,
const mozilla::VsyncId& aVsyncId,
const mozilla::TimeStamp& aVsyncStartTime,

View File

@@ -1192,8 +1192,7 @@ bool WebRenderBridgeParent::ProcessEmptyTransactionUpdates(
}
mozilla::ipc::IPCResult WebRenderBridgeParent::RecvEmptyTransaction(
const FocusTarget& aFocusTarget,
nsTArray<TransactionData>&& aTransactionData,
const FocusTarget& aFocusTarget, Maybe<TransactionData>&& aTransactionData,
nsTArray<OpDestroy>&& aToDestroy, const uint64_t& aFwdTransactionId,
const TransactionId& aTransactionId, const VsyncId& aVsyncId,
const TimeStamp& aVsyncStartTime, const TimeStamp& aRefreshStartTime,
@@ -1222,9 +1221,10 @@ mozilla::ipc::IPCResult WebRenderBridgeParent::RecvEmptyTransaction(
bool scheduleAnyComposite = false;
for (auto& datum : aTransactionData) {
if (aTransactionData) {
bool scheduleComposite = false;
if (!ProcessEmptyTransactionUpdates(datum, &scheduleComposite)) {
if (!ProcessEmptyTransactionUpdates(*aTransactionData,
&scheduleComposite)) {
return IPC_FAIL(this, "Failed to process empty transaction update.");
}
scheduleAnyComposite = scheduleAnyComposite || scheduleComposite;
@@ -1261,9 +1261,11 @@ mozilla::ipc::IPCResult WebRenderBridgeParent::RecvEmptyTransaction(
}
}
for (auto& datum : aTransactionData) {
wr::IpcResourceUpdateQueue::ReleaseShmems(this, datum.mSmallShmems);
wr::IpcResourceUpdateQueue::ReleaseShmems(this, datum.mLargeShmems);
if (aTransactionData) {
wr::IpcResourceUpdateQueue::ReleaseShmems(this,
aTransactionData->mSmallShmems);
wr::IpcResourceUpdateQueue::ReleaseShmems(this,
aTransactionData->mLargeShmems);
}
return IPC_OK();
}

View File

@@ -152,7 +152,7 @@ class WebRenderBridgeParent final
nsTArray<CompositionPayload>&& aPayloads) override;
mozilla::ipc::IPCResult RecvEmptyTransaction(
const FocusTarget& aFocusTarget,
nsTArray<TransactionData>&& aTransactionData,
Maybe<TransactionData>&& aTransactionData,
nsTArray<OpDestroy>&& aToDestroy, const uint64_t& aFwdTransactionId,
const TransactionId& aTransactionId, const VsyncId& aVsyncId,
const TimeStamp& aVsyncStartTime, const TimeStamp& aRefreshStartTime,

View File

@@ -244,23 +244,25 @@ bool WebRenderLayerManager::EndEmptyTransaction(EndTransactionFlags aFlags) {
GetCompositorBridgeChild()->EndCanvasTransaction();
AutoTArray<TransactionData, 1> transactionData;
Maybe<TransactionData> transactionData;
if (mStateManager.mAsyncResourceUpdates || !mPendingScrollUpdates.IsEmpty() ||
WrBridge()->HasWebRenderParentCommands()) {
auto datum = transactionData.AppendElement();
datum->mPaintSequenceNumber = mPaintSequenceNumber;
transactionData.emplace();
transactionData->mPaintSequenceNumber = mPaintSequenceNumber;
if (mStateManager.mAsyncResourceUpdates) {
mStateManager.mAsyncResourceUpdates->Flush(
datum->mResourceUpdates, datum->mSmallShmems, datum->mLargeShmems);
transactionData->mResourceUpdates, transactionData->mSmallShmems,
transactionData->mLargeShmems);
}
datum->mScrollUpdates = std::move(mPendingScrollUpdates);
for (auto it = datum->mScrollUpdates.Iter(); !it.Done(); it.Next()) {
transactionData->mScrollUpdates = std::move(mPendingScrollUpdates);
for (auto it = transactionData->mScrollUpdates.Iter(); !it.Done();
it.Next()) {
nsLayoutUtils::NotifyPaintSkipTransaction(/*scroll id=*/it.Key());
}
}
Maybe<wr::IpcResourceUpdateQueue> nothing;
WrBridge()->EndEmptyTransaction(mFocusTarget, transactionData,
WrBridge()->EndEmptyTransaction(mFocusTarget, std::move(transactionData),
mLatestTransactionId,
mTransactionIdAllocator->GetVsyncId(),
mTransactionIdAllocator->GetVsyncStart(),

View File

@@ -58,7 +58,6 @@ class Animation;
class FrameStats;
struct PropertyAnimationGroup;
struct TileClient;
struct TransactionData;
} // namespace layers
} // namespace mozilla
@@ -785,7 +784,6 @@ MOZ_DECLARE_RELOCATE_USING_MOVE_CONSTRUCTOR_FOR_TEMPLATE(mozilla::ipc::Endpoint)
MOZ_DECLARE_RELOCATE_USING_MOVE_CONSTRUCTOR(nsRegion)
MOZ_DECLARE_RELOCATE_USING_MOVE_CONSTRUCTOR(nsIntRegion)
MOZ_DECLARE_RELOCATE_USING_MOVE_CONSTRUCTOR(mozilla::layers::TileClient)
MOZ_DECLARE_RELOCATE_USING_MOVE_CONSTRUCTOR(mozilla::layers::TransactionData)
MOZ_DECLARE_RELOCATE_USING_MOVE_CONSTRUCTOR(
mozilla::SerializedStructuredCloneBuffer)
MOZ_DECLARE_RELOCATE_USING_MOVE_CONSTRUCTOR(