Elements not rendered on screen
Reported by
asaf.ma...@emaze.com,
Apr 19 2017
|
||||||||
Issue descriptionUserAgent: Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/57.0.2987.133 Safari/537.36 Steps to reproduce the problem: 1. hover over blue area on screen 2. notice that the youtube iframe and blue background disappear What is the expected behavior? Elements will be visible on screen What went wrong? In production site, a thumbnail view of an html 'slide' is not rendered on screen (see screenshot) In the reduced test case, it became evident that a combination of iframes, transform:scale, and overflow:hidden are necessary to reproduce the bug Did this work before? N/A Does this work in other browsers? Yes Chrome version: 57.0.2987.133 Channel: stable OS Version: 10.0 Flash Version:
,
Apr 19 2017
Thank you for the reduced testcase!
,
Apr 19 2017
Minimized testcases are the best. Went ahead and bisected: https://chromium.googlesource.com/chromium/src/+log/9945567ba9e578b6cfe5d9041104c7cfcfb22034..c96f366aac33e4f963a64e120d47c103bc02d194 Change the display list interest rect size to 4000px instead of 8000px. https://chromium.googlesource.com/chromium/src/+/0f7133512f98bc2e2dc10dff33466652ad44025e This is not caused by this change but is made worse by it. This is an interest rect bug.
,
Apr 19 2017
,
Apr 19 2017
Not accounting for scale somewhere in the code? Does paint really own this issue?
,
Apr 21 2017
Further reduced testcase attached, with no iframes.
,
Apr 21 2017
Even simpler testcase attached.
,
Apr 21 2017
The interest rect appears to be correct. It seems something must be wrong with the composited layer tree (or in cc itself).
,
Apr 23 2017
Note that simpler test cases use 'will-change:transform.' without this property, Iframes were needed to reproduce the issue. Changing size, position, or src attribute of the iframes (in source code before page load) caused the bug to not reproduce.
,
Aug 11 2017
Fixed by https://chromium.googlesource.com/chromium/src/+/e17b1bcf1010c97436fadf6e58e9235b977c74ea Vlad, expected? If so, please close.
,
Aug 11 2017
Original testcase still reproduces.
,
Aug 15 2017
To sum up our investigation on Friday, What happens here (case in #6) is that there is a large blue div with a tiny scale that is clipped. As far as Blink knows, without accessing its parent transform, the div is far away from the visible rect. The visible rect here is the clipping div. So the bottom portion of the div is not painted, since it falls outside of the interest rect before the scale. The compositor, however, uses the post scale div to determine that it's only around 400px so it decides to use a single tile to cover this content. When creating the tile, we see that the raster source doesn't completely cover the tile, since a portion of the raster source in the tile region is unpainted. So we don't create a tile. This ends up with a checkerboard content. The patch to reduce the interest rect simply exposes this problem, but any size static interest rect would have a similar problem if the scale is sufficiently small. I think the correct solution here is to consider the post scale div for painting. Alternatively, we can use the actual viewport as the visible rect. Either one of those solutions should address the issue. The problem with trying to fix this in the compositor is that it's hard to differentiate this case from a case where the user simply scrolled into unpainted region. We can attempt to raster right up to the interest rect painted content, but this comes with its own set of challenges. For example, there is no mechanism that will invalidated this content right now, and we can't have tiles of dynamic sizes since they need to belong to a specific tiling.
,
Aug 16 2017
Thank you for the detailed explanation. Any insights on why excluding will-change: transform from div.target (case in #6) prevents the bug from reproducing?
,
Aug 24 2017
The following revision refers to this bug: https://chromium.googlesource.com/chromium/src.git/+/3171659ead3e26b743effcdd6cc22d43e48a16e1 commit 3171659ead3e26b743effcdd6cc22d43e48a16e1 Author: Chris Harrelson <chrishtr@chromium.org> Date: Thu Aug 24 05:11:06 2017 Expand interest rect with padding in root space, not local layer space. Root space is almost the same thing as pixel space, the padding is intended to be in terms of screen pixels, and the heuristic is optimized for content which does not have large scales. This change also fixes an bug in which content with a very small scale transform failed to draw, because its interest rect did not cover a single screen- space tile. Bug: 713150 Cq-Include-Trybots: master.tryserver.chromium.linux:linux_layout_tests_slimming_paint_v2 Change-Id: I4bf07b05b68d53751ab388ad905a5e333336262d Reviewed-on: https://chromium-review.googlesource.com/628641 Commit-Queue: Chris Harrelson <chrishtr@chromium.org> Reviewed-by: Vladimir Levin <vmpstr@chromium.org> Cr-Commit-Position: refs/heads/master@{#496956} [add] https://crrev.com/3171659ead3e26b743effcdd6cc22d43e48a16e1/third_party/WebKit/LayoutTests/compositing/massive-scale-interest-rect-expected.png [add] https://crrev.com/3171659ead3e26b743effcdd6cc22d43e48a16e1/third_party/WebKit/LayoutTests/compositing/massive-scale-interest-rect-expected.txt [add] https://crrev.com/3171659ead3e26b743effcdd6cc22d43e48a16e1/third_party/WebKit/LayoutTests/compositing/massive-scale-interest-rect.html [modify] https://crrev.com/3171659ead3e26b743effcdd6cc22d43e48a16e1/third_party/WebKit/Source/core/paint/compositing/CompositedLayerMapping.cpp [modify] https://crrev.com/3171659ead3e26b743effcdd6cc22d43e48a16e1/third_party/WebKit/Source/core/paint/compositing/CompositedLayerMappingTest.cpp
,
Aug 24 2017
|
||||||||
►
Sign in to add a comment |
||||||||
Comment 1 by asaf.ma...@emaze.com
, Apr 19 2017