Bug 121925 - Layout assertion failure in WebCore::RenderView::paint
Summary: Layout assertion failure in WebCore::RenderView::paint
Status: RESOLVED FIXED
Alias: None
Product: WebKit
Classification: Unclassified
Component: Layout and Rendering (show other bugs)
Version: 528+ (Nightly build)
Hardware: Unspecified Unspecified
: P2 Normal
Assignee: Simon Fraser (smfr)
URL:
Keywords: InRadar, LayoutTestFailure
Depends on:
Blocks:
 
Reported: 2013-09-25 14:04 PDT by Ryosuke Niwa
Modified: 2013-10-10 10:20 PDT (History)
9 users (show)

See Also:


Attachments
Patch (1.91 KB, patch)
2013-10-09 17:40 PDT, Simon Fraser (smfr)
thorton: review+
Details | Formatted Diff | Diff

Note You need to log in before you can comment on or make changes to this bug.
Description Ryosuke Niwa 2013-09-25 14:04:44 PDT
e.g. http://build.webkit.org/results/Apple%20MountainLion%20Debug%20WK2%20(Tests)/r156418%20(12895)/results.html

Thread 0 Crashed:: Dispatch queue: com.apple.main-thread
0   com.apple.JavaScriptCore      	0x000000010db1aeca WTFCrash + 42 (Assertions.cpp:342)
1   com.apple.WebCore             	0x000000010fe6bd7b WebCore::RenderView::paint(WebCore::PaintInfo&, WebCore::LayoutPoint const&) + 91 (RenderView.cpp:432)
2   com.apple.WebCore             	0x000000010fcea9e5 WebCore::RenderLayer::paintBackgroundForFragments(WTF::Vector<WebCore::LayerFragment, 1ul, WTF::CrashOnOverflow> const&, WebCore::GraphicsContext*, WebCore::GraphicsContext*, WebCore::LayoutRect const&, bool, WebCore::RenderLayer::LayerPaintingInfo const&, unsigned int, WebCore::RenderObject*) + 693 (RenderLayer.cpp:4219)
3   com.apple.WebCore             	0x000000010fce887a WebCore::RenderLayer::paintLayerContents(WebCore::GraphicsContext*, WebCore::RenderLayer::LayerPaintingInfo const&, unsigned int) + 1866 (RenderLayer.cpp:3971)
4   com.apple.WebCore             	0x000000010fd0fb84 WebCore::RenderLayerBacking::paintIntoLayer(WebCore::GraphicsLayer const*, WebCore::GraphicsContext*, WebCore::IntRect const&, unsigned int, unsigned int) + 532 (RenderLayerBacking.cpp:1997)
5   com.apple.WebCore             	0x000000010fd0fe45 WebCore::RenderLayerBacking::paintContents(WebCore::GraphicsLayer const*, WebCore::GraphicsContext&, unsigned int, WebCore::IntRect const&) + 517 (RenderLayerBacking.cpp:2042)
6   com.apple.WebCore             	0x000000010f16ea27 WebCore::GraphicsLayer::paintGraphicsLayerContents(WebCore::GraphicsContext&, WebCore::IntRect const&) + 199 (GraphicsLayer.cpp:337)
7   com.apple.WebCore             	0x000000010f17c7d0 WebCore::GraphicsLayerCA::platformCALayerPaintContents(WebCore::GraphicsContext&, WebCore::IntRect const&) + 48 (GraphicsLayerCA.cpp:1182)
8   com.apple.WebCore             	0x000000010f17c817 non-virtual thunk to WebCore::GraphicsLayerCA::platformCALayerPaintContents(WebCore::GraphicsContext&, WebCore::IntRect const&) + 55 (GraphicsLayerCA.cpp:1182)
9   com.apple.WebCore             	0x00000001102bb8f6 drawLayerContents(CGContext*, CALayer*, WebCore::PlatformCALayer*) + 1798 (WebLayer.mm:118)
10  com.apple.WebCore             	0x00000001101f998b WebCore::TileController::drawLayer(WebTileLayer*, CGContext*) + 283 (TileController.mm:221)
11  com.apple.WebCore             	0x00000001102d6529 -[WebTileLayer drawInContext:] + 73 (WebTileLayer.mm:53)
12  com.apple.QuartzCore          	0x00007fff9014adf0 CABackingStoreUpdate_ + 3474
13  com.apple.QuartzCore          	0x00007fff90149aa6 CA::Layer::display_() + 1188
14  com.apple.QuartzCore          	0x00007fff90149425 CA::Layer::display_if_needed(CA::Transaction*) + 593
15  com.apple.QuartzCore          	0x00007fff90148c3f CA::Layer::layout_and_display_if_needed(CA::Transaction*) + 35
16  com.apple.QuartzCore          	0x00007fff9013e417 CA::Context::commit_transaction(CA::Transaction*) + 261
17  com.apple.QuartzCore          	0x00007fff9013e1e7 CA::Transaction::commit() + 369
18  com.apple.QuartzCore          	0x00007fff9013e003 CA::Transaction::observer_callback(__CFRunLoopObserver*, unsigned long, void*) + 63
19  com.apple.CoreFoundation      	0x00007fff8ff31417 __CFRUNLOOP_IS_CALLING_OUT_TO_AN_OBSERVER_CALLBACK_FUNCTION__ + 23
20  com.apple.CoreFoundation      	0x00007fff8ff31381 __CFRunLoopDoObservers + 369
21  com.apple.CoreFoundation      	0x00007fff8ff0c104 CFRunLoopRunSpecific + 324
22  com.apple.HIToolbox           	0x00007fff93cb0eb4 RunCurrentEventLoopInMode + 209
23  com.apple.HIToolbox           	0x00007fff93cb0c52 ReceiveNextEventCommon + 356
24  com.apple.HIToolbox           	0x00007fff93cb0ae3 BlockUntilNextEventMatchingListInMode + 62
25  com.apple.AppKit              	0x00007fff8e598533 _DPSNextEvent + 685
26  com.apple.AppKit              	0x00007fff8e597df2 -[NSApplication nextEventMatchingMask:untilDate:inMode:dequeue:] + 128
27  com.apple.AppKit              	0x00007fff8e58f1a3 -[NSApplication run] + 517
28  com.apple.WebCore             	0x000000010fec7f92 WebCore::RunLoop::run() + 114 (RunLoopMac.mm:44)
29  com.apple.WebKit2             	0x000000010c00523c int WebKit::ChildProcessMain<WebKit::WebProcess, WebKit::WebContentProcessMainDelegate>(int, char**) + 604 (ChildProcessEntryPoint.h:92)
30  com.apple.WebKit2             	0x000000010c004fcb WebContentProcessMain + 27 (WebContentProcessMain.mm:179)
31  com.apple.WebProcess          	0x000000010bc9bd1d WebKit::BootstrapMain(int, char**) + 381
32  com.apple.WebProcess          	0x000000010bc9bb92 main + 34
33  libdyld.dylib                 	0x00007fff91d587e1 start + 1
Comment 1 Alexey Proskuryakov 2013-09-25 14:08:51 PDT
This seems to have recently started to happen on platform/mac-wk2/tiled-drawing tests a lot.
Comment 2 Ryosuke Niwa 2013-09-25 14:10:31 PDT
The following functions don't seem to update the layout.

WebCore::RenderLayer::paintLayerContents
RenderLayerBacking::paintContents
WebCore::GraphicsLayer::paintGraphicsLayerContents
WebCore::GraphicsLayerCA::platformCALayerPaintContents
drawLayerContents
TileController::drawLayer
-[WebTileLayer drawInContext:]

Who is responsible for updating the layout here?
Comment 3 Tim Horton 2013-09-26 10:37:02 PDT
(In reply to comment #2)
> The following functions don't seem to update the layout.
> 
> WebCore::RenderLayer::paintLayerContents
> RenderLayerBacking::paintContents
> WebCore::GraphicsLayer::paintGraphicsLayerContents
> WebCore::GraphicsLayerCA::platformCALayerPaintContents
> drawLayerContents
> TileController::drawLayer
> -[WebTileLayer drawInContext:]
> 
> Who is responsible for updating the layout here?

LayerFlushScheduler’s run loop observer is always responsible for updating layout before CA painting callbacks occur.
Comment 4 Tim Horton 2013-09-26 12:37:32 PDT
https://bugs.webkit.org/show_bug.cgi?id=121859 could potentially mean that this happens a lot more often, so I may end up blocked on this/having to look at this soon.
Comment 5 Alexey Proskuryakov 2013-10-04 10:56:27 PDT
<rdar://problem/15153588>

Still happening a lot.
Comment 6 Simon Fraser (smfr) 2013-10-09 17:40:35 PDT
Created attachment 213836 [details]
Patch
Comment 7 Simon Fraser (smfr) 2013-10-09 17:52:56 PDT
https://trac.webkit.org/r157198

This may not fix the non-TestWebKitAPI assertions. We'll see.
Comment 8 Alexey Proskuryakov 2013-10-10 10:11:55 PDT
With a night worth of testing, it seems that maybe it did fix assertions on platform/mac-wk2/tiled-drawing tests!
Comment 9 Simon Fraser (smfr) 2013-10-10 10:20:39 PDT
Amazing!