Bug 75568

Summary: Lazily allocate overflow: hidden layers if we have overflowing content
Product: WebKit Reporter: Julien Chaffraix <jchaffraix>
Component: Layout and RenderingAssignee: Julien Chaffraix <jchaffraix>
Status: RESOLVED FIXED    
Severity: Normal CC: ap, dglazkov, enne, hyatt, jamesr, jeremyfleischman, mitz, pnormand, simon.fraser, tkent, tonikitoo, webkit.review.bot
Priority: P2    
Version: 528+ (Nightly build)   
Hardware: Unspecified   
OS: Unspecified   
Bug Depends on: 76971, 76972, 80090    
Bug Blocks: 73714, 92258    
Attachments:
Description Flags
Proof of concept: the whole logic is good, the repainting needs to be handled properly.
none
Fully working patch, missing all the text rebaselines, could be be split for easier review.
jchaffraix: review-, webkit.review.bot: commit-queue-
Updated change, some tiny issues with it before being ready but the gist is fine - no text rebaseline
none
Rebaselined change including Chromium's test_expectations.txt updates
none
Patch for review with all platforms properly updated.
none
Fixed Win build (bad OVERRIDE).
jchaffraix: review-
Corrected + rebaselined change. Diff: converted more RenderBoxes to call updateScrollInfoAfterLayout / updateCachedSizeForOverflowClip + disabled one ASSERT. hyatt: review+, webkit.review.bot: commit-queue-

Description Julien Chaffraix 2012-01-04 13:32:14 PST
Related to bug 75001 and 73715.

We currently allocate our RenderLayer's whenever the style change in RenderBoxModel::styleDidChange. However for some values of 'overflow', we actually don't need to allocate the layer until we have some layout overflow (to hold the scroll position, paint the scrollbars, ...). This bug makes the lazy allocation work for overflow: hidden layers (the easiest case). It could be extended for 'overflow: auto' in a follow up bug.

The upside of the change is better performance for elements that can work without a layer (the RenderLayer code path can be a lot slower that the normal RenderObject one) and less memory use. We need to add some NULL-checks in the code but it is a fairly low number. Unfortunately this change also lead to a massive change of our text baselines.
Comment 1 Julien Chaffraix 2012-01-04 13:59:10 PST
Created attachment 121144 [details]
Proof of concept: the whole logic is good, the repainting needs to be handled properly.
Comment 2 Julien Chaffraix 2012-01-05 10:05:17 PST
Created attachment 121292 [details]
Fully working patch, missing all the text rebaselines, could be be split for easier review.
Comment 3 WebKit Review Bot 2012-01-05 17:59:39 PST
Comment on attachment 121292 [details]
Fully working patch, missing all the text rebaselines, could be be split for easier review.

Attachment 121292 [details] did not pass chromium-ews (chromium-xvfb):
Output: http://queues.webkit.org/results/11144168

New failing tests:
editing/selection/expanding-selections.html
editing/pasteboard/drop-text-without-selection.html
http/tests/inspector-enabled/dedicated-workers-list.html
editing/selection/4975120.html
editing/selection/select-across-readonly-input-3.html
editing/selection/select-across-readonly-input-1.html
compositing/overflow/ancestor-overflow.html
editing/selection/3690703.html
editing/selection/select-across-readonly-input-2.html
editing/pasteboard/4806874.html
editing/selection/select-across-readonly-input-5.html
editing/selection/4895428-3.html
editing/selection/3690703-2.html
editing/selection/select-across-readonly-input-4.html
editing/selection/leave-requested-block.html
editing/selection/drag-select-1.html
editing/inserting/before-after-input-element.html
editing/pasteboard/input-field-1.html
http/tests/navigation/javascriptlink-frames.html
editing/selection/3690719.html
Comment 4 Julien Chaffraix 2012-01-10 12:29:46 PST
Simon pointed out that I forgot to give the context of this change. This bug is about the benchmark http://dglazkov.github.com/performance-tests/biggrid.html.

Currently it is a lot slower when overflow: hidden is set as we don't use the optimized painting code inside RenderTable that determines which exact cells needs to be painted. Going through RenderLayer makes us try every cells.

Here are some information I gathered from Callgrind while scrolling on the benchmark with overflow:hidden with the default size: 1.6 million calls to RenderLayer::paintLayer() led to 48,608 RenderTableCell:paint(). Each time paintLayer is called, it needs to compute our rectangles with RenderLayer::calculateRects even if we don't end up painting.
Comment 5 Julien Chaffraix 2012-01-24 18:22:17 PST
Comment on attachment 121292 [details]
Fully working patch, missing all the text rebaselines, could be be split for easier review.

Sorry about the massive patch, I have split it into parts that can be more easily reviewed.

The 2 blocking bugs contain only 2 simple refactorings that should weed out some mechanical change and underline what needs to be changed to add lazy allocation of our layers.
Comment 6 Julien Chaffraix 2012-01-24 18:40:31 PST
Created attachment 123870 [details]
Updated change, some tiny issues with it before being ready but the gist is fine - no text rebaseline
Comment 7 Dave Hyatt 2012-02-17 10:33:31 PST
Comment on attachment 123870 [details]
Updated change, some tiny issues with it before being ready but the gist is fine - no text rebaseline

View in context: https://bugs.webkit.org/attachment.cgi?id=123870&action=review

The high-level idea of avoiding layer creation for overflow objects seems pretty good, especially for overflow:hidden.

I think you need to clean it up, though, so that it won't be error-prone for people working in the code. For starters I would make a helper method for hasOverflowClip() && layer(), e.g., hasOverflowClipWithLayer(). That would help a bit.

I don't completely understand the need to cache the size. I don't see anybody using that anywhere.

> Source/WebCore/rendering/RenderBox.cpp:3617
> +    if (hasOverflowClip() && !layer())
> +        ensureLayer();

Seems like you could just make ensureLayer() null-check layer, and then this could just be if (hasOverflowClip()) ensureLayer();
Comment 8 Dave Hyatt 2012-02-17 10:35:40 PST
Oh, also the requiresLayerForOverflowClip stuff is misplaced. It should be in RenderBox instead. If that means you have to subclass requiresLayer() for RenderBox, that's fine.
Comment 9 Julien Chaffraix 2012-02-22 18:38:30 PST
Created attachment 128364 [details]
Rebaselined change including Chromium's test_expectations.txt updates
Comment 10 Julien Chaffraix 2012-02-28 18:38:38 PST
Created attachment 129373 [details]
Patch for review with all platforms properly updated.
Comment 11 WebKit Review Bot 2012-02-28 18:42:38 PST
Attachment 129373 [details] did not pass style-queue:

Failed to run "['Tools/Scripts/check-webkit-style', '--diff-files', u'LayoutTests/ChangeLog', u'LayoutTests/plat..." exit_code: 1
Traceback (most recent call last):
  File "Tools/Scripts/check-webkit-style", line 48, in <module>
    sys.exit(CheckWebKitStyle().main())
  File "/mnt/git/webkit-style-queue/Tools/Scripts/webkitpy/style/main.py", line 154, in main
    patch_checker.check(patch)
  File "/mnt/git/webkit-style-queue/Tools/Scripts/webkitpy/style/patchreader.py", line 66, in check
    self._text_file_reader.process_file(file_path=path, line_numbers=line_numbers)
  File "/mnt/git/webkit-style-queue/Tools/Scripts/webkitpy/style/filereader.py", line 130, in process_file
    self._processor.process(lines, file_path, **kwargs)
  File "/mnt/git/webkit-style-queue/Tools/Scripts/webkitpy/style/checker.py", line 838, in process
    checker.check(lines)
  File "/mnt/git/webkit-style-queue/Tools/Scripts/webkitpy/style/checkers/test_expectations.py", line 103, in check
    overrides = self._port_obj.test_expectations_overrides()
AttributeError: 'NoneType' object has no attribute 'test_expectations_overrides'


If any of these errors are false positives, please file a bug against check-webkit-style.
Comment 12 Julien Chaffraix 2012-02-29 10:58:14 PST
Created attachment 129475 [details]
Fixed Win build (bad OVERRIDE).
Comment 13 Dave Hyatt 2012-02-29 11:08:25 PST
Comment on attachment 129475 [details]
Fixed Win build (bad OVERRIDE).

r=me
Comment 14 WebKit Review Bot 2012-02-29 11:45:43 PST
Attachment 129475 [details] did not pass style-queue:

Failed to run "['Tools/Scripts/check-webkit-style', '--diff-files', u'LayoutTests/ChangeLog', u'LayoutTests/plat..." exit_code: 1
Traceback (most recent call last):
  File "Tools/Scripts/check-webkit-style", line 48, in <module>
    sys.exit(CheckWebKitStyle().main())
  File "/mnt/git/webkit-style-queue/Tools/Scripts/webkitpy/style/main.py", line 154, in main
    patch_checker.check(patch)
  File "/mnt/git/webkit-style-queue/Tools/Scripts/webkitpy/style/patchreader.py", line 66, in check
    self._text_file_reader.process_file(file_path=path, line_numbers=line_numbers)
  File "/mnt/git/webkit-style-queue/Tools/Scripts/webkitpy/style/filereader.py", line 130, in process_file
    self._processor.process(lines, file_path, **kwargs)
  File "/mnt/git/webkit-style-queue/Tools/Scripts/webkitpy/style/checker.py", line 838, in process
    checker.check(lines)
  File "/mnt/git/webkit-style-queue/Tools/Scripts/webkitpy/style/checkers/test_expectations.py", line 103, in check
    overrides = self._port_obj.test_expectations_overrides()
AttributeError: 'NoneType' object has no attribute 'test_expectations_overrides'


If any of these errors are false positives, please file a bug against check-webkit-style.
Comment 15 Julien Chaffraix 2012-03-01 10:47:10 PST
Committed r109367: <http://trac.webkit.org/changeset/109367>
Comment 16 Julien Chaffraix 2012-03-01 12:14:46 PST
Rolled out the change in http://trac.webkit.org/changeset/109383 as there was several differences I did not like:
- fast/events/overflow-events.html started failing consistently on several platforms (it was a bit flaky before though)
- the assertion (cachedSizeForOverflowClipMap().contains(this)) was hit on several platforms.
- fast/box-shadow/fast/shadow-buffer-partial needed a new baseline on SL, not sure if it's because we need to account for that in our requiresLayerForOverflowClip.
- lots of tests had a difference in background color (repaint tests) or just native controls on SL. I wonder if this is just a red herring. I think rebaselining some of those tests may help me catch any regressions better.
Comment 17 Julien Chaffraix 2012-03-01 14:25:17 PST
Comment on attachment 129475 [details]
Fixed Win build (bad OVERRIDE).

The change as-is breaks overflow events (covered by fast/events/overflow-events.html) as they are dispatched by the RenderLayer. I missed this locally as someone marked the test as flaky in debug on Chromium.
Comment 18 Julien Chaffraix 2012-03-02 19:09:22 PST
(In reply to comment #16)
> Rolled out the change in http://trac.webkit.org/changeset/109383 as there was several differences I did not like:
> - fast/events/overflow-events.html started failing consistently on several platforms (it was a bit flaky before though)

This is solved.

> - the assertion (cachedSizeForOverflowClipMap().contains(this)) was hit on several platforms.

I have found one cause for the ASSERT triggering but I am still missing one. The existing logic makes it super easy not to update your scroll info due to spreading the information over RenderBoxModelObject / RenderBox and RenderBlock. To really solve this performance assert, we would need to rethink how this is handled. As the ASSERT is triggering once over all our test cases, I think it's fine to just disable it for now.

> - fast/box-shadow/fast/shadow-buffer-partial needed a new baseline on SL, not sure if it's because we need to account for that in our requiresLayerForOverflowClip.
> - lots of tests had a difference in background color (repaint tests) or just native controls on SL. I wonder if this is just a red herring. I think rebaselining some of those tests may help me catch any regressions better.

Those were red herrings and caused by Chromium not having rebaselined a lot of tests on SL.
Comment 19 Julien Chaffraix 2012-03-02 19:19:58 PST
Created attachment 129987 [details]
Corrected + rebaselined change. Diff: converted more RenderBoxes to call updateScrollInfoAfterLayout / updateCachedSizeForOverflowClip + disabled one ASSERT.
Comment 20 WebKit Review Bot 2012-03-02 19:22:23 PST
Attachment 129987 [details] did not pass style-queue:

Failed to run "['Tools/Scripts/check-webkit-style', '--diff-files', u'LayoutTests/ChangeLog', u'LayoutTests/plat..." exit_code: 1
LayoutTests/platform/chromium/test_expectations.txt:4341:  More specific entry on line 4341 overrides line 4129 fast/repaint/search-field-cancel.html  [test/expectations] [5]
LayoutTests/platform/chromium/test_expectations.txt:4507:  More specific entry on line 4129 overrides line 4507 fast/repaint/search-field-cancel.html  [test/expectations] [5]
Traceback (most recent call last):
  File "Tools/Scripts/check-webkit-style", line 48, in <module>
    sys.exit(CheckWebKitStyle().main())
  File "/mnt/git/webkit-style-queue/Tools/Scripts/webkitpy/style/main.py", line 154, in main
    patch_checker.check(patch)
  File "/mnt/git/webkit-style-queue/Tools/Scripts/webkitpy/style/patchreader.py", line 66, in check
    self._text_file_reader.process_file(file_path=path, line_numbers=line_numbers)
  File "/mnt/git/webkit-style-queue/Tools/Scripts/webkitpy/style/filereader.py", line 130, in process_file
    self._processor.process(lines, file_path, **kwargs)
  File "/mnt/git/webkit-style-queue/Tools/Scripts/webkitpy/style/checker.py", line 838, in process
    checker.check(lines)
  File "/mnt/git/webkit-style-queue/Tools/Scripts/webkitpy/style/checkers/test_expectations.py", line 103, in check
    overrides = self._port_obj.test_expectations_overrides()
AttributeError: 'NoneType' object has no attribute 'test_expectations_overrides'


If any of these errors are false positives, please file a bug against check-webkit-style.
Comment 21 WebKit Review Bot 2012-03-02 19:59:43 PST
Comment on attachment 129987 [details]
Corrected + rebaselined change. Diff: converted more RenderBoxes to call updateScrollInfoAfterLayout / updateCachedSizeForOverflowClip + disabled one ASSERT.

Attachment 129987 [details] did not pass chromium-ews (chromium-xvfb):
Output: http://queues.webkit.org/results/11803250

New failing tests:
http/tests/navigation/javascriptlink-frames.html
fast/forms/textfield-overflow.html
tables/mozilla_expected_failures/bugs/bug2479-5.html
Comment 22 Dave Hyatt 2012-03-05 13:48:09 PST
Comment on attachment 129987 [details]
Corrected + rebaselined change. Diff: converted more RenderBoxes to call updateScrollInfoAfterLayout / updateCachedSizeForOverflowClip + disabled one ASSERT.

r=me

Fix style complaints.
Comment 23 Julien Chaffraix 2012-03-07 11:06:20 PST
Committed r110072: <http://trac.webkit.org/changeset/110072>
Comment 24 Philippe Normand 2012-03-07 12:37:18 PST
(In reply to comment #23)
> Committed r110072: <http://trac.webkit.org/changeset/110072>

Triggers ASSERTs on GTK Debug, example: http://webkit-bots.igalia.com/amd64debug/svn_110077.core-when_1331150417-_-who_DumpRenderTree-_-why_11.trace.html

#0  0x00007f0d3d2b07f7 in WebCore::RenderBox::updateCachedSizeForOverflowClip (this=0x1e90658) at ../../Source/WebCore/rendering/RenderBox.cpp:793
793	    ASSERT(!requiresLayerForOverflowClip());

#0  0x00007f0d3d2b07f7 in WebCore::RenderBox::updateCachedSizeForOverflowClip (this=0x1e90658) at ../../Source/WebCore/rendering/RenderBox.cpp:793
#1  0x00007f0d3d2c579d in WebCore::RenderBoxModelObject::styleDidChange (this=0x1e90658, diff=WebCore::StyleDifferenceEqual, oldStyle=0x0) at ../../Source/WebCore/rendering/RenderBoxModelObject.cpp:401
#2  0x00007f0d3d2ae552 in WebCore::RenderBox::styleDidChange (this=0x1e90658, diff=WebCore::StyleDifferenceEqual, oldStyle=0x0) at ../../Source/WebCore/rendering/RenderBox.cpp:349
#3  0x00007f0d3d2558cc in WebCore::RenderBlock::styleDidChange (this=0x1e90658, diff=WebCore::StyleDifferenceEqual, oldStyle=0x0) at ../../Source/WebCore/rendering/RenderBlock.cpp:302
#4  0x00007f0d3d351e82 in WebCore::RenderObject::setStyle (this=0x1e90658, style=...) at ../../Source/WebCore/rendering/RenderObject.cpp:1768
#5  0x00007f0d3d3519ff in WebCore::RenderObject::setAnimatableStyle (this=0x1e90658, style=...) at ../../Source/WebCore/rendering/RenderObject.cpp:1681
#6  0x00007f0d3cc80813 in WebCore::NodeRendererFactory::createRenderer (this=0x7fff2e0e0940) at ../../Source/WebCore/dom/NodeRenderingContext.cpp:353
#7  0x00007f0d3cc80aca in WebCore::NodeRendererFactory::createRendererIfNeeded (this=0x7fff2e0e0940) at ../../Source/WebCore/dom/NodeRenderingContext.cpp:389
#8  0x00007f0d3cc61fb1 in WebCore::Node::createRendererIfNeeded (this=0x1e90310) at ../../Source/WebCore/dom/Node.cpp:1430
#9  0x00007f0d3cc31a35 in WebCore::Element::attach (this=0x1e90310) at ../../Source/WebCore/dom/Element.cpp:944
#10 0x00007f0d3ce49cbc in WebCore::executeTask (task=...) at ../../Source/WebCore/html/parser/HTMLConstructionSite.cpp:101
#11 0x00007f0d3ce49ef5 in WebCore::HTMLConstructionSite::executeQueuedTasks (this=0x1e827b8) at ../../Source/WebCore/html/parser/HTMLConstructionSite.cpp:140
#12 0x00007f0d3ce6ec1d in WebCore::HTMLTreeBuilder::constructTreeFromAtomicToken (this=0x1e82790, token=...) at ../../Source/WebCore/html/parser/HTMLTreeBuilder.cpp:482
#13 0x00007f0d3ce6ea4f in WebCore::HTMLTreeBuilder::constructTreeFromToken (this=0x1e82790, rawToken=...) at ../../Source/WebCore/html/parser/HTMLTreeBuilder.cpp:459
#14 0x00007f0d3ce4fbe8 in WebCore::HTMLDocumentParser::pumpTokenizer (this=0x1e81420, mode=WebCore::HTMLDocumentParser::AllowYield) at ../../Source/WebCore/html/parser/HTMLDocumentParser.cpp:278
#15 0x00007f0d3ce4f5a9 in WebCore::HTMLDocumentParser::pumpTokenizerIfPossible (this=0x1e81420, mode=WebCore::HTMLDocumentParser::AllowYield) at ../../Source/WebCore/html/parser/HTMLDocumentParser.cpp:177
#16 0x00007f0d3ce501fa in WebCore::HTMLDocumentParser::append (this=0x1e81420, source=...) at ../../Source/WebCore/html/parser/HTMLDocumentParser.cpp:370
#17 0x00007f0d3cbd00d0 in WebCore::DecodedDataDocumentParser::appendBytes (this=0x1e81420, writer=0x1e672c0, data=0x1ddd3a0 "<!DOCTYPE html PUBLIC \"-//W3C//DTD HTML 4.01//EN\" \"http://www.w3.org/TR/html4/strict.dtd\">\n<html>\n    <head>\n        <title>CSS Test: Height determination for block-level non-replaced elements in norm"..., length=2057) at ../../Source/WebCore/dom/DecodedDataDocumentParser.cpp:50
#18 0x00007f0d3cfdbec2 in WebCore::DocumentWriter::addData (this=0x1e672c0, bytes=0x1ddd3a0 "<!DOCTYPE html PUBLIC \"-//W3C//DTD HTML 4.01//EN\" \"http://www.w3.org/TR/html4/strict.dtd\">\n<html>\n    <head>\n        <title>CSS Test: Height determination for block-level non-replaced elements in norm"..., length=2057) at ../../Source/WebCore/loader/DocumentWriter.cpp:218
#19 0x00007f0d3cfcfaf2 in WebCore::DocumentLoader::commitData (this=0x1e671a0, bytes=0x1ddd3a0 "<!DOCTYPE html PUBLIC \"-//W3C//DTD HTML 4.01//EN\" \"http://www.w3.org/TR/html4/strict.dtd\">\n<html>\n    <head>\n        <title>CSS Test: Height determination for block-level non-replaced elements in norm"..., length=2057) at ../../Source/WebCore/loader/DocumentLoader.cpp:327
#20 0x00007f0d3c7a4e7a in WebKit::FrameLoaderClient::committedLoad (this=0x17bdcb0, loader=0x1e671a0, data=0x1ddd3a0 "<!DOCTYPE html PUBLIC \"-//W3C//DTD HTML 4.01//EN\" \"http://www.w3.org/TR/html4/strict.dtd\">\n<html>\n    <head>\n        <title>CSS Test: Height determination for block-level non-replaced elements in norm"..., length=2057) at ../../Source/WebKit/gtk/WebCoreSupport/FrameLoaderClientGtk.cpp:168
#21 0x00007f0d3cfcf9c5 in WebCore::DocumentLoader::commitLoad (this=0x1e671a0, data=0x1ddd3a0 "<!DOCTYPE html PUBLIC \"-//W3C//DTD HTML 4.01//EN\" \"http://www.w3.org/TR/html4/strict.dtd\">\n<html>\n    <head>\n        <title>CSS Test: Height determination for block-level non-replaced elements in norm"..., length=2057) at ../../Source/WebCore/loader/DocumentLoader.cpp:313
#22 0x00007f0d3cfcfbac in WebCore::DocumentLoader::receivedData (this=0x1e671a0, data=0x1ddd3a0 "<!DOCTYPE html PUBLIC \"-//W3C//DTD HTML 4.01//EN\" \"http://www.w3.org/TR/html4/strict.dtd\">\n<html>\n    <head>\n        <title>CSS Test: Height determination for block-level non-replaced elements in norm"..., length=2057) at ../../Source/WebCore/loader/DocumentLoader.cpp:339
#23 0x00007f0d3d01ca7f in WebCore::MainResourceLoader::addData (this=0x1e5ee80, data=0x1ddd3a0 "<!DOCTYPE html PUBLIC \"-//W3C//DTD HTML 4.01//EN\" \"http://www.w3.org/TR/html4/strict.dtd\">\n<html>\n    <head>\n        <title>CSS Test: Height determination for block-level non-replaced elements in norm"..., length=2057, allAtOnce=false) at ../../Source/WebCore/loader/MainResourceLoader.cpp:170
#24 0x00007f0d3d02a2eb in WebCore::ResourceLoader::didReceiveData (this=0x1e5ee80, data=0x1ddd3a0 "<!DOCTYPE html PUBLIC \"-//W3C//DTD HTML 4.01//EN\" \"http://www.w3.org/TR/html4/strict.dtd\">\n<html>\n    <head>\n        <title>CSS Test: Height determination for block-level non-replaced elements in norm"..., length=2057, encodedDataLength=2057, allAtOnce=false) at ../../Source/WebCore/loader/ResourceLoader.cpp:287
#25 0x00007f0d3d01df48 in WebCore::MainResourceLoader::didReceiveData (this=0x1e5ee80, data=0x1ddd3a0 "<!DOCTYPE html PUBLIC \"-//W3C//DTD HTML 4.01//EN\" \"http://www.w3.org/TR/html4/strict.dtd\">\n<html>\n    <head>\n        <title>CSS Test: Height determination for block-level non-replaced elements in norm"..., length=2057, encodedDataLength=2057, allAtOnce=false) at ../../Source/WebCore/loader/MainResourceLoader.cpp:464
#26 0x00007f0d3d02abfe in WebCore::ResourceLoader::didReceiveData (this=0x1e5ee80, data=0x1ddd3a0 "<!DOCTYPE html PUBLIC \"-//W3C//DTD HTML 4.01//EN\" \"http://www.w3.org/TR/html4/strict.dtd\">\n<html>\n    <head>\n        <title>CSS Test: Height determination for block-level non-replaced elements in norm"..., length=2057, encodedDataLength=2057) at ../../Source/WebCore/loader/ResourceLoader.cpp:441
#27 0x00007f0d3d1c92ec in WebCore::readCallback (source=0x1de3860, asyncResult=0x1732f60, data=0x17f2cf0) at ../../Source/WebCore/platform/network/soup/ResourceHandleSoup.cpp:678
#28 0x00007f0d3a8b2103 in async_ready_callback_wrapper () from /home/slave/webkitgtk/gtk-linux-64-debug/build/WebKitBuild/Dependencies/Root/lib64/libgio-2.0.so.0
#29 0x00007f0d3a8c8fbb in g_simple_async_result_complete () from /home/slave/webkitgtk/gtk-linux-64-debug/build/WebKitBuild/Dependencies/Root/lib64/libgio-2.0.so.0
#30 0x00007f0d3a8c9187 in complete_in_idle_cb_for_thread () from /home/slave/webkitgtk/gtk-linux-64-debug/build/WebKitBuild/Dependencies/Root/lib64/libgio-2.0.so.0
#31 0x00007f0d3a54f55c in g_idle_dispatch () from /home/slave/webkitgtk/gtk-linux-64-debug/build/WebKitBuild/Dependencies/Root/lib64/libglib-2.0.so.0
#32 0x00007f0d3a54cdf3 in g_main_dispatch () from /home/slave/webkitgtk/gtk-linux-64-debug/build/WebKitBuild/Dependencies/Root/lib64/libglib-2.0.so.0
#33 0x00007f0d3a54dab9 in g_main_context_dispatch () from /home/slave/webkitgtk/gtk-linux-64-debug/build/WebKitBuild/Dependencies/Root/lib64/libglib-2.0.so.0
#34 0x00007f0d3a54dca3 in g_main_context_iterate () from /home/slave/webkitgtk/gtk-linux-64-debug/build/WebKitBuild/Dependencies/Root/lib64/libglib-2.0.so.0
#35 0x00007f0d3a54e0d9 in g_main_loop_run () from /home/slave/webkitgtk/gtk-linux-64-debug/build/WebKitBuild/Dependencies/Root/lib64/libglib-2.0.so.0
#36 0x00007f0d3b411e99 in gtk_main () from /home/slave/webkitgtk/gtk-linux-64-debug/build/WebKitBuild/Dependencies/Root/lib64/libgtk-3.so.0
#37 0x00000000004582e8 in runTest (testPathOrURL=...) at ../../Tools/DumpRenderTree/gtk/DumpRenderTree.cpp:703
#38 0x0000000000457960 in runTestingServerLoop () at ../../Tools/DumpRenderTree/gtk/DumpRenderTree.cpp:490
#39 0x000000000045a8da in main (argc=2, argv=0x7fff2e0e1d18) at ../../Tools/DumpRenderTree/gtk/DumpRenderTree.cpp:1377
Comment 25 Julien Chaffraix 2012-03-07 12:44:05 PST
(In reply to comment #24)
> (In reply to comment #23)
> > Committed r110072: <http://trac.webkit.org/changeset/110072>
> 
> Triggers ASSERTs on GTK Debug, example: http://webkit-bots.igalia.com/amd64debug/svn_110077.core-when_1331150417-_-who_DumpRenderTree-_-why_11.trace.html

This should be solved by http://trac.webkit.org/changeset/110078. It is the result of a bad merge when landing. Sorry for the mess.
Comment 26 Adrienne Walker 2012-03-14 14:43:39 PDT
Committed r110759: <http://trac.webkit.org/changeset/110759>
Comment 27 mitz 2012-03-21 10:51:17 PDT
(In reply to comment #25)
> (In reply to comment #24)
> > (In reply to comment #23)
> > > Committed r110072: <http://trac.webkit.org/changeset/110072>

This seems to have caused bug 81802.
Comment 28 mitz 2012-03-24 11:07:21 PDT
(In reply to comment #25)
> (In reply to comment #24)
> > (In reply to comment #23)
> > > Committed r110072: <http://trac.webkit.org/changeset/110072>

This seems to have also caused bug 82129.
Comment 29 Jeremy Fleischman 2012-04-19 13:19:31 PDT
This seems to have caused bug 84374

(In reply to comment #23)
> Committed r110072: <http://trac.webkit.org/changeset/110072>
Comment 30 Julien Chaffraix 2012-04-27 13:06:23 PDT
For the record, this change introduced several regressions. Some were real regressions (see bug 82129 and bug 83954 and several on Chromium bug tracker that I have to reduce to catch further bugs) and some were in the underlying code and the layer was hiding the bugs (see bug 81802 and bug 80531).

The big issue is hardware acceleration that doesn't force layout and relies on RenderLayer for proper clipping (see bug 83954). As we don't want to force layout in those cases (specifically since we don't know when during an animation / transition we may overflow), this means this approach doesn't work.

I will roll out the change to solve bug 83954 and will not resurrect this idea.
Comment 31 Alexey Proskuryakov 2012-04-30 16:44:48 PDT
Julien, do you still plan to roll this out?
Comment 32 Julien Chaffraix 2012-04-30 17:15:14 PDT
(In reply to comment #31)
> Julien, do you still plan to roll this out?

Yes, as there is no other way. For the record, I have posted some patches on bug 83954 and that's where the roll-out will occur (trying to get a green EWS before asking for review as it will need some rebaselining again...).