Bug 66735
Summary: | Composited layers are sometimes created during painting after layout | ||
---|---|---|---|
Product: | WebKit | Reporter: | Adrienne Walker <enne> |
Component: | WebCore Misc. | Assignee: | Nobody <webkit-unassigned> |
Status: | RESOLVED WONTFIX | ||
Severity: | Normal | CC: | enne, jamesr, simon.fraser |
Priority: | P2 | ||
Version: | 528+ (Nightly build) | ||
Hardware: | Unspecified | ||
OS: | Unspecified |
Adrienne Walker
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 | ||
---|---|---|
Add attachment proposed patch, testcase, etc. |
Simon Fraser (smfr)
Do we have a stack trace for the assertion firing?
James Robinson
Not that I know of, I'll see if I can grab one this evening.
James Robinson
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
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)
Looks like :FrameView::paintContents() is the culprit. Does the test have an iframe?
James Robinson
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.