Bug 1843848. Add some diagnostic asserts related to ASRs. r=mstange

Depends on D183742

Differential Revision: https://phabricator.services.mozilla.com/D183743
This commit is contained in:
Timothy Nikkel 2023-07-21 01:29:47 +00:00
parent 5267cbd117
commit a8658cf650
4 changed files with 11 additions and 5 deletions

View file

@ -400,6 +400,9 @@ Maybe<wr::WrClipChainId> ClipManager::DefineClipChain(
// in WR, and put their IDs into |clipIds|. // in WR, and put their IDs into |clipIds|.
for (const DisplayItemClipChain* chain = aChain; chain; for (const DisplayItemClipChain* chain = aChain; chain;
chain = chain->mParent) { chain = chain->mParent) {
MOZ_DIAGNOSTIC_ASSERT(chain->mOnStack || !chain->mASR ||
chain->mASR->mScrollableFrame);
if (!chain->mClip.HasClip()) { if (!chain->mClip.HasClip()) {
// This item in the chain is a no-op, skip over it // This item in the chain is a no-op, skip over it
continue; continue;

View file

@ -69,7 +69,7 @@ struct DisplayItemClipChain {
mASR(aASR), mASR(aASR),
mParent(aParent), mParent(aParent),
mNextClipChainToDestroy(aNextClipChainToDestroy) mNextClipChainToDestroy(aNextClipChainToDestroy)
#ifdef DEBUG #if defined(DEBUG) || defined(MOZ_DIAGNOSTIC_ASSERT_ENABLED)
, ,
mOnStack(true) mOnStack(true)
#endif #endif
@ -79,7 +79,7 @@ struct DisplayItemClipChain {
DisplayItemClipChain() DisplayItemClipChain()
: mASR(nullptr), : mASR(nullptr),
mNextClipChainToDestroy(nullptr) mNextClipChainToDestroy(nullptr)
#ifdef DEBUG #if defined(DEBUG) || defined(MOZ_DIAGNOSTIC_ASSERT_ENABLED)
, ,
mOnStack(true) mOnStack(true)
#endif #endif
@ -91,7 +91,7 @@ struct DisplayItemClipChain {
RefPtr<const DisplayItemClipChain> mParent; RefPtr<const DisplayItemClipChain> mParent;
uint32_t mRefCount = 0; uint32_t mRefCount = 0;
DisplayItemClipChain* mNextClipChainToDestroy; DisplayItemClipChain* mNextClipChainToDestroy;
#ifdef DEBUG #if defined(DEBUG) || defined(MOZ_DIAGNOSTIC_ASSERT_ENABLED)
bool mOnStack; bool mOnStack;
#endif #endif
}; };

View file

@ -362,6 +362,9 @@ static Maybe<const ActiveScrolledRoot*> SelectContainerASR(
const ActiveScrolledRoot* itemClipASR = const ActiveScrolledRoot* itemClipASR =
aClipChain ? aClipChain->mASR : nullptr; aClipChain ? aClipChain->mASR : nullptr;
MOZ_DIAGNOSTIC_ASSERT(!aClipChain || aClipChain->mOnStack || !itemClipASR ||
itemClipASR->mScrollableFrame);
const ActiveScrolledRoot* finiteBoundsASR = const ActiveScrolledRoot* finiteBoundsASR =
ActiveScrolledRoot::PickDescendant(itemClipASR, aItemASR); ActiveScrolledRoot::PickDescendant(itemClipASR, aItemASR);

View file

@ -1428,12 +1428,12 @@ ActiveScrolledRoot* nsDisplayListBuilder::AllocateActiveScrolledRoot(
const DisplayItemClipChain* nsDisplayListBuilder::AllocateDisplayItemClipChain( const DisplayItemClipChain* nsDisplayListBuilder::AllocateDisplayItemClipChain(
const DisplayItemClip& aClip, const ActiveScrolledRoot* aASR, const DisplayItemClip& aClip, const ActiveScrolledRoot* aASR,
const DisplayItemClipChain* aParent) { const DisplayItemClipChain* aParent) {
MOZ_ASSERT(!(aParent && aParent->mOnStack)); MOZ_DIAGNOSTIC_ASSERT(!(aParent && aParent->mOnStack));
void* p = Allocate(sizeof(DisplayItemClipChain), void* p = Allocate(sizeof(DisplayItemClipChain),
DisplayListArenaObjectId::CLIPCHAIN); DisplayListArenaObjectId::CLIPCHAIN);
DisplayItemClipChain* c = new (KnownNotNull, p) DisplayItemClipChain* c = new (KnownNotNull, p)
DisplayItemClipChain(aClip, aASR, aParent, mFirstClipChainToDestroy); DisplayItemClipChain(aClip, aASR, aParent, mFirstClipChainToDestroy);
#ifdef DEBUG #if defined(DEBUG) || defined(MOZ_DIAGNOSTIC_ASSERT_ENABLED)
c->mOnStack = false; c->mOnStack = false;
#endif #endif
auto result = mClipDeduplicator.insert(c); auto result = mClipDeduplicator.insert(c);