RESOLVED WONTFIX 66735
Composited layers are sometimes created during painting after layout
https://bugs.webkit.org/show_bug.cgi?id=66735
Summary Composited layers are sometimes created during painting after layout
Adrienne Walker
Reported 2011-08-22 17:38:25 PDT
In the Chromium GPU tests, it looks like compositing/geometry/limit-layer-bounds-transformed-overflow has started triggering the assertions that no layers are created after painting starts. Unfortunately, this happens intermittently and only when other tests are running, so it's unclear what the actual source of the problem is. I'm filing this bug as a reminder to take a look at this when I or somebody else gets a chance. See: http://test-results.appspot.com/dashboards/flakiness_dashboard.html#tests=compositing%2Fgeometry%2Flimit-layer-bounds-transformed-overflow.html&showExpectations=true&group=%40ToT%20GPU%20Mesa%20-%20chromium.org This can be seen locally in Chromium by reverting the patch in https://bugs.webkit.org/show_bug.cgi?id=66731 to reintroduce these asserts.
Attachments
Simon Fraser (smfr)
Comment 1 2011-08-22 17:43:40 PDT
Do we have a stack trace for the assertion firing?
James Robinson
Comment 2 2011-08-22 17:46:09 PDT
Not that I know of, I'll see if I can grab one this evening.
James Robinson
Comment 3 2011-08-22 20:20:38 PDT
Example stack (from a mac, frames 8 through 21 are the cross-platform ones): ASSERTION FAILED: !LayerRendererChromium::s_inPaintLayerContents /usr/local/home/jamesr/chrome/src/third_party/WebKit/Source/WebCore/WebCore.gyp/../platform/graphics/chromium/LayerChromium.cpp(83) : WebCore::LayerChromium::LayerChromium(WebCore::GraphicsLayerChromium*) [12110:2307:3458010342140506:ERROR:process_util_posix.cc(134)] Received signal 11 0 DumpRenderTree 0x0a60f6ee base::debug::StackTrace::StackTrace() + 60 1 DumpRenderTree 0x0adfafd9 base::(anonymous namespace)::StackDumpSignalHandler(int, __siginfo*, __darwin_ucontext*) + 267 2 libSystem.B.dylib 0x9927f05b _sigtramp + 43 3 ??? 0xffffffff 0x0 + 4294967295 4 DumpRenderTree 0x0c102cec WebCore::TiledLayerChromium::TiledLayerChromium(WebCore::GraphicsLayerChromium*) + 58 5 DumpRenderTree 0x0c0c7f4e WebCore::ContentLayerChromium::ContentLayerChromium(WebCore::GraphicsLayerChromium*) + 58 6 DumpRenderTree 0x0c0c8042 WebCore::ContentLayerChromium::create(WebCore::GraphicsLayerChromium*) + 74 7 DumpRenderTree 0x0c0d29b7 WebCore::GraphicsLayerChromium::GraphicsLayerChromium(WebCore::GraphicsLayerClient*) + 195 8 DumpRenderTree 0x0c0d2a49 WebCore::GraphicsLayer::create(WebCore::GraphicsLayerClient*) + 71 9 DumpRenderTree 0x0cb0036f WebCore::RenderLayerBacking::createGraphicsLayer(WTF::String const&) + 63 10 DumpRenderTree 0x0cb01448 WebCore::RenderLayerBacking::createPrimaryGraphicsLayer() + 120 11 DumpRenderTree 0x0cb01666 WebCore::RenderLayerBacking::RenderLayerBacking(WebCore::RenderLayer*) + 218 12 DumpRenderTree 0x0cade3f2 WebCore::RenderLayer::ensureBacking() + 84 13 DumpRenderTree 0x0cb09048 WebCore::RenderLayerCompositor::updateBacking(WebCore::RenderLayer*, WebCore::RenderLayerCompositor::CompositingChangeRepaint) + 204 14 DumpRenderTree 0x0cb09d6f WebCore::RenderLayerCompositor::computeCompositingRequirements(WebCore::RenderLayer*, WTF::HashMap<WebCore::RenderLayer*, WebCore::IntRect, WTF::PtrHash<WebCore::RenderLayer*>, WTF::HashTraits<WebCore::RenderLayer*>, WTF::HashTraits<WebCore::IntRect> >*, WebCore::CompositingState&, bool&) + 2615 15 DumpRenderTree 0x0cb0992b WebCore::RenderLayerCompositor::computeCompositingRequirements(WebCore::RenderLayer*, WTF::HashMap<WebCore::RenderLayer*, WebCore::IntRect, WTF::PtrHash<WebCore::RenderLayer*>, WTF::HashTraits<WebCore::RenderLayer*>, WTF::HashTraits<WebCore::IntRect> >*, WebCore::CompositingState&, bool&) + 1523 16 DumpRenderTree 0x0cb0992b WebCore::RenderLayerCompositor::computeCompositingRequirements(WebCore::RenderLayer*, WTF::HashMap<WebCore::RenderLayer*, WebCore::IntRect, WTF::PtrHash<WebCore::RenderLayer*>, WTF::HashTraits<WebCore::RenderLayer*>, WTF::HashTraits<WebCore::IntRect> >*, WebCore::CompositingState&, bool&) + 1523 17 DumpRenderTree 0x0cb09f8a WebCore::RenderLayerCompositor::updateCompositingLayers(WebCore::CompositingUpdateType, WebCore::RenderLayer*) + 398 18 DumpRenderTree 0x0cae8fd6 WebCore::RenderLayer::updateCompositingAndLayerListsIfNeeded() + 166 19 DumpRenderTree 0x0cae97c4 WebCore::RenderLayer::paintLayer(WebCore::RenderLayer*, WebCore::GraphicsContext*, WebCore::IntRect const&, unsigned int, WebCore::RenderObject*, WTF::HashMap<WebCore::OverlapTestRequestClient*, WebCore::IntRect, WTF::PtrHash<WebCore::OverlapTestRequestClient*>, WTF::HashTraits<WebCore::OverlapTestRequestClient*>, WTF::HashTraits<WebCore::IntRect> >*, unsigned int) + 1990 20 DumpRenderTree 0x0caeae25 WebCore::RenderLayer::paint(WebCore::GraphicsContext*, WebCore::IntRect const&, unsigned int, WebCore::RenderObject*) + 151 21 DumpRenderTree 0x0c77f489 WebCore::FrameView::paintContents(WebCore::GraphicsContext*, WebCore::IntRect const&) + 1109 22 DumpRenderTree 0x0a7afba8 WebKit::WebViewImplContentPainter::paint(WebCore::GraphicsContext&, WebCore::IntRect const&) + 138 23 DumpRenderTree 0x0c0f4274 WebCore::NonCompositedContentHost::paintContents(WebCore::GraphicsLayer const*, WebCore::GraphicsContext&, WebCore::GraphicsLayerPaintingPhase, WebCore::IntRect const&) + 100 24 DumpRenderTree 0x0c08e6e9 WebCore::GraphicsLayer::paintGraphicsLayerContents(WebCore::GraphicsContext&, WebCore::IntRect const&) + 115 25 DumpRenderTree 0x0c0c875f WebCore::ContentLayerPainter::paint(WebCore::GraphicsContext&, WebCore::IntRect const&) + 139 26 DumpRenderTree 0x0c0f3c55 WebCore::LayerTextureUpdaterCanvas::paintContents(WebCore::GraphicsContext&, WebCore::IntRect const&) + 191 27 DumpRenderTree 0x0c0f3d62 WebCore::LayerTextureUpdaterBitmap::prepareToUpdate(WebCore::IntRect const&, WebCore::IntSize const&, int) + 202 28 DumpRenderTree 0x0c1016ec WebCore::TiledLayerChromium::prepareToUpdate(WebCore::IntRect const&) + 982 29 DumpRenderTree 0x0c0c7cf0 WebCore::ContentLayerChromium::paintContentsIfDirty() + 416 30 DumpRenderTree 0x0c0db38c WebCore::paintContentsIfDirty(WebCore::LayerChromium*, WebCore::IntRect const&) + 98 31 DumpRenderTree 0x0c0e3d2d WebCore::LayerRendererChromium::paintLayerContents(WTF::Vector<WTF::RefPtr<WebCore::LayerChromium>, 0ul> const&) + 1099 32 DumpRenderTree 0x0c0e40b6 WebCore::LayerRendererChromium::updateLayers(WebCore::LayerChromium*) + 590 33 DumpRenderTree 0x0c0e4221 WebCore::LayerRendererChromium::updateLayers() + 181 34 DumpRenderTree 0x0c11d539 WebCore::CCLayerTreeHost::doComposite() + 151 35 DumpRenderTree 0x0c11df21 WebCore::CCLayerTreeHost::compositeAndReadback(void*, WebCore::IntRect const&) + 57 36 DumpRenderTree 0x0a7a2340 WebKit::WebViewImpl::doPixelReadbackToCanvas(CGContext*, WebCore::IntRect const&) + 504 37 DumpRenderTree 0x0a7a25d6 WebKit::WebViewImpl::paint(CGContext*, WebKit::WebRect const&) + 222 38 DumpRenderTree 0x0a6a2be9 WebViewHost::paintRect(WebKit::WebRect const&) + 273 39 DumpRenderTree 0x0a6a2ee6 WebViewHost::paintInvalidatedRegion() + 708 40 DumpRenderTree 0x0a66e81c LayoutTestController::display(WTF::Vector<CppVariant, 0ul> const&, CppVariant*) + 184 41 DumpRenderTree 0x0a67cbf6 CppBoundClass::MemberCallback<LayoutTestController>::run(WTF::Vector<CppVariant, 0ul> const&, CppVariant*) + 136 42 DumpRenderTree 0x0a64f7cf CppBoundClass::invoke(void*, _NPVariant const*, unsigned long, _NPVariant*) + 473 43 DumpRenderTree 0x0a64f8a6 CppNPObject::invoke(NPObject*, void*, _NPVariant const*, unsigned int, _NPVariant*) + 106 44 DumpRenderTree 0x0c2a12aa WebCore::npObjectInvokeImpl(v8::Arguments const&, WebCore::InvokeFunctionType) + 1216 45 DumpRenderTree 0x0c2a14a4 WebCore::npObjectMethodHandler(v8::Arguments const&) + 53 46 DumpRenderTree 0x0b22f2cf v8::internal::MaybeObject* v8::internal::HandleApiCallHelper<false>(v8::internal::(anonymous namespace)::BuiltinArguments<(v8::internal::BuiltinExtraArguments)1>, v8::internal::Isolate*) + 890 47 DumpRenderTree 0x0b22f3eb v8::internal::Builtin_Impl_HandleApiCall(v8::internal::(anonymous namespace)::BuiltinArguments<(v8::internal::BuiltinExtraArguments)1>, v8::internal::Isolate*) + 71 48 DumpRenderTree 0x0b22f47e v8::internal::Builtin_HandleApiCall(v8::internal::(anonymous namespace)::BuiltinArguments<(v8::internal::BuiltinExtraArguments)1>, v8::internal::Isolate*) + 121 49 ??? 0x007220b6 0x0 + 7479478 ax: bbadbeef, bx: c0d94de, cx: 1, dx: 0 di: bfffaef8, si: 1e803c00, bp: bfffadf8, sp: bfffadb0, ss: 1f, flags: 10282 ip: c0d97c2, cs: 17, ds: 1f, es: 1f, fs: 0, gs: 37
James Robinson
Comment 4 2011-08-22 20:22:02 PDT
That was from compositing/geometry/limit-layer-bounds-transformed-overflow.html, incidentally. The failure is unreliable - running the test by itself does not trigger the ASSERT(). I think this is more due to system load and timing issues rather than stale state.
Simon Fraser (smfr)
Comment 5 2011-08-22 21:31:48 PDT
Looks like :FrameView::paintContents() is the culprit. Does the test have an iframe?
James Robinson
Comment 6 2011-08-23 14:03:19 PDT
No, it's http://trac.webkit.org/browser/trunk/LayoutTests/compositing/geometry/limit-layer-bounds-transformed-overflow.html. It does have a <video>, though. I wonder if loading the video changes the compositing requirements of the page, or something like that? I'm not sure how media loading interacts with the normal style recalc/layout/paint cycle. http://trac.webkit.org/changeset/69265 seems relevant.
Note You need to log in before you can comment on or make changes to this bug.