mirror of
https://github.com/mozilla/gecko-dev.git
synced 2024-10-14 22:05:44 +00:00
Bug 1416073 - Avoid calling the expensive ComputeScrollMetadata function if we already computed that metadata before. r=jrmuizel
MozReview-Commit-ID: 5SwAEA4Wpqw --HG-- extra : rebase_source : 1c717c3f0cfb1c5a94970d5d7cc267ee9570c0ad
This commit is contained in:
parent
f9b153f761
commit
0b55cc54f3
@ -81,7 +81,7 @@ WebRenderCommandBuilder::BuildWebRenderCommands(wr::DisplayListBuilder& aBuilder
|
||||
mLayerScrollData.emplace_back();
|
||||
mLayerScrollData.back().InitializeRoot(mLayerScrollData.size() - 1);
|
||||
auto callback = [&aScrollData](FrameMetrics::ViewID aScrollId) -> bool {
|
||||
return aScrollData.HasMetadataFor(aScrollId);
|
||||
return aScrollData.HasMetadataFor(aScrollId).isSome();
|
||||
};
|
||||
if (Maybe<ScrollMetadata> rootMetadata = nsLayoutUtils::GetRootMetadata(
|
||||
aDisplayListBuilder, mManager, ContainerLayerParameters(), callback)) {
|
||||
|
@ -54,11 +54,17 @@ WebRenderLayerScrollData::Initialize(WebRenderScrollData& aOwner,
|
||||
asr && asr != aStopAtAsr;
|
||||
asr = asr->mParent) {
|
||||
MOZ_ASSERT(aOwner.GetManager());
|
||||
Maybe<ScrollMetadata> metadata = asr->mScrollableFrame->ComputeScrollMetadata(
|
||||
nullptr, aOwner.GetManager(), aItem->ReferenceFrame(),
|
||||
ContainerLayerParameters(), nullptr);
|
||||
MOZ_ASSERT(metadata);
|
||||
mScrollIds.AppendElement(aOwner.AddMetadata(metadata.ref()));
|
||||
FrameMetrics::ViewID scrollId = nsLayoutUtils::ViewIDForASR(asr);
|
||||
if (Maybe<size_t> index = aOwner.HasMetadataFor(scrollId)) {
|
||||
mScrollIds.AppendElement(index.ref());
|
||||
} else {
|
||||
Maybe<ScrollMetadata> metadata = asr->mScrollableFrame->ComputeScrollMetadata(
|
||||
nullptr, aOwner.GetManager(), aItem->ReferenceFrame(),
|
||||
ContainerLayerParameters(), nullptr);
|
||||
MOZ_ASSERT(metadata);
|
||||
MOZ_ASSERT(metadata->GetMetrics().GetScrollId() == scrollId);
|
||||
mScrollIds.AppendElement(aOwner.AddMetadata(metadata.ref()));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@ -200,10 +206,11 @@ WebRenderScrollData::GetScrollMetadata(size_t aIndex) const
|
||||
return mScrollMetadatas[aIndex];
|
||||
}
|
||||
|
||||
bool
|
||||
Maybe<size_t>
|
||||
WebRenderScrollData::HasMetadataFor(const FrameMetrics::ViewID& aScrollId) const
|
||||
{
|
||||
return mScrollIdMap.find(aScrollId) != mScrollIdMap.end();
|
||||
auto it = mScrollIdMap.find(aScrollId);
|
||||
return (it == mScrollIdMap.end() ? Nothing() : Some(it->second));
|
||||
}
|
||||
|
||||
void
|
||||
|
@ -151,7 +151,7 @@ public:
|
||||
const WebRenderLayerScrollData* GetLayerData(size_t aIndex) const;
|
||||
|
||||
const ScrollMetadata& GetScrollMetadata(size_t aIndex) const;
|
||||
bool HasMetadataFor(const FrameMetrics::ViewID& aScrollId) const;
|
||||
Maybe<size_t> HasMetadataFor(const FrameMetrics::ViewID& aScrollId) const;
|
||||
|
||||
const FocusTarget& GetFocusTarget() const { return mFocusTarget; }
|
||||
void SetFocusTarget(const FocusTarget& aFocusTarget);
|
||||
|
Loading…
Reference in New Issue
Block a user