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:
@@ -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,
|
||||
|
||||
@@ -40,6 +40,8 @@ struct TransactionData {
|
||||
uint32_t mPaintSequenceNumber;
|
||||
};
|
||||
|
||||
typedef Maybe<TransactionData> MaybeTransactionData;
|
||||
|
||||
} // namespace layers
|
||||
|
||||
namespace ipc {
|
||||
|
||||
@@ -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);
|
||||
|
||||
|
||||
@@ -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,
|
||||
|
||||
@@ -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();
|
||||
}
|
||||
|
||||
@@ -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,
|
||||
|
||||
@@ -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(),
|
||||
|
||||
@@ -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(
|
||||
|
||||
Reference in New Issue
Block a user