Summary: | REGRESSION (r245208): compositing/shared-backing/sharing-bounds-non-clipping-shared-layer.html asserts | ||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|
Product: | WebKit | Reporter: | Simon Fraser (smfr) <simon.fraser> | ||||||||
Component: | Compositing | Assignee: | Antti Koivisto <koivisto> | ||||||||
Status: | RESOLVED FIXED | ||||||||||
Severity: | Normal | CC: | ap, commit-queue, koivisto, simon.fraser, webkit-bot-watchers-bugzilla, webkit-bug-importer, zalan | ||||||||
Priority: | P2 | Keywords: | InRadar | ||||||||
Version: | WebKit Nightly Build | ||||||||||
Hardware: | Unspecified | ||||||||||
OS: | Unspecified | ||||||||||
See Also: |
https://bugs.webkit.org/show_bug.cgi?id=117928 https://bugs.webkit.org/show_bug.cgi?id=197836 |
||||||||||
Attachments: |
|
Description
Simon Fraser (smfr)
2019-05-11 12:52:25 PDT
Looks like this is a super recent regression, first crashes on the bots are yesterday. Which of your patches caused this? I guess that must be the one that added the test, <http://trac.webkit.org/r245208>? Some more logging to help diagnose: diff --git a/Source/WebCore/platform/Logging.cpp b/Source/WebCore/platform/Logging.cpp index 899141ce0d39d4151450cf4e1632cdb4ca85af97..ab768bbbb88944bbf79be27a0fe4090f50f9f9b1 100644 --- a/Source/WebCore/platform/Logging.cpp +++ b/Source/WebCore/platform/Logging.cpp @@ -78,6 +78,8 @@ void initializeLogChannelsIfNecessary(Optional<String> logChannelString) String enabledChannelsString = logChannelString ? logChannelString.value() : logLevelString(); WTFInitializeLogChannelStatesFromString(logChannels, logChannelCount, enabledChannelsString.utf8().data()); + LogCompositing.state = WTFLogChannelState::On; + LogClipRects.state = WTFLogChannelState::On; } WTFLogChannel* getLogChannel(const String& name) diff --git a/Source/WebCore/rendering/RenderLayer.cpp b/Source/WebCore/rendering/RenderLayer.cpp index 7a1dc38fcf2de78a320e5fc58704156770114d93..d9f1390ae4107b6dc40be3b1c44953342560c209 100644 --- a/Source/WebCore/rendering/RenderLayer.cpp +++ b/Source/WebCore/rendering/RenderLayer.cpp @@ -5496,7 +5496,10 @@ Ref<ClipRects> RenderLayer::updateClipRects(const ClipRectsContext& clipRectsCon ASSERT(clipRectsType < NumCachedClipRectsTypes); if (m_clipRectsCache) { if (auto* clipRects = m_clipRectsCache->getClipRects(clipRectsType, clipRectsContext.respectOverflowClip)) { - ASSERT(clipRectsContext.rootLayer == m_clipRectsCache->m_clipRectsRoot[clipRectsType]); +// ASSERT(clipRectsContext.rootLayer == m_clipRectsCache->m_clipRectsRoot[clipRectsType]); + if (clipRectsContext.rootLayer != m_clipRectsCache->m_clipRectsRoot[clipRectsType]) + LOG_WITH_STREAM(ClipRects, stream << "RenderLayer " << this << " updateClipRects " << clipRectsContext << " - mismatched roots, cached is " << m_clipRectsCache->m_clipRectsRoot[clipRectsType]); + ASSERT(m_clipRectsCache->m_scrollbarRelevancy[clipRectsType] == clipRectsContext.overlayScrollbarSizeRelevancy); #ifdef CHECK_CACHED_CLIP_RECTS @@ -5514,6 +5517,7 @@ Ref<ClipRects> RenderLayer::updateClipRects(const ClipRectsContext& clipRectsCon if (!m_clipRectsCache) m_clipRectsCache = std::make_unique<ClipRectsCache>(); #ifndef NDEBUG + LOG_WITH_STREAM(ClipRects, stream << "RenderLayer " << this << " updateClipRects " << clipRectsContext << " - caching root " << clipRectsContext.rootLayer); m_clipRectsCache->m_clipRectsRoot[clipRectsType] = clipRectsContext.rootLayer; m_clipRectsCache->m_scrollbarRelevancy[clipRectsType] = clipRectsContext.overlayScrollbarSizeRelevancy; #endif Here's the fix: diff --git a/Source/WebCore/rendering/RenderLayerBacking.cpp b/Source/WebCore/rendering/RenderLayerBacking.cpp index f839e46e3ebd04e23439b5a940ac13d3a9bf52a1..6e7398659d9065b99dd72d1e95043a5b5b4a391c 100644 --- a/Source/WebCore/rendering/RenderLayerBacking.cpp +++ b/Source/WebCore/rendering/RenderLayerBacking.cpp @@ -1486,7 +1486,7 @@ void RenderLayerBacking::updateEventRegion() m_owningLayer.paintLayerContents(nullContext, paintingInfo, paintFlags); for (auto& layerWeakPtr : m_backingSharingLayers) - layerWeakPtr->paintLayerContents(nullContext, paintingInfo, paintFlags); + layerWeakPtr->paintLayerWithEffects(nullContext, paintingInfo, paintFlags); auto contentOffset = roundedIntSize(contentOffsetInCompositingLayer()); eventRegion.translate(contentOffset); Antti, can you make a layout test for event regions with transforms and verify the fix? Created attachment 369692 [details]
Logging and speculative fix
Asserting skipped in r245221, please re-enable when landing. Created attachment 369728 [details]
patch
Created attachment 369735 [details]
patch
Comment on attachment 369735 [details] patch Clearing flags on attachment: 369735 Committed r245242: <https://trac.webkit.org/changeset/245242> All reviewed patches have been landed. Closing bug. |