New issue
Advanced search Search tips
Note: Color blocks (like or ) mean that a user may not be available. Tooltip shows the reason.

Issue 912282 link

Starred by 4 users

Issue metadata

Status: Fixed
Owner:
Closed: Jan 7
Cc:
Components:
EstimatedDays: ----
NextAction: ----
OS: Linux , Android , Windows , Chrome , Mac
Pri: 1
Type: Bug-Regression

Blocking:
issue 910772



Sign in to add a comment

Text disappears when tab looses and regains focus

Project Member Reported by malteubl@google.com, Dec 5

Issue description

Chrome Version: 73.0.3631.0 
OS: MacOS 10.14.1

What steps will reproduce the problem?
(1) Navigate to https://2019.jsconf.eu/call-for-speakers/
(2) Switch to different tab
(3) Switch back to tab

What is the expected result?

Website renders the same

What happens instead?

All text disappears (re-renders on hover state)

See before/after screenshots.
 
Screen Shot 2018-12-05 at 11.24.07 AM.png
283 KB View Download
Screen Shot 2018-12-05 at 11.24.14 AM.png
144 KB View Download
Labels: allpublic
Labels: Needs-Feedback
I can't reproduce this on 10.14.1 with 73.0.3633.0.

a) Can you try 73.0.3633.0?
b) If you can get this to happen, can you check the page with devtools to see if the page structure is mssed up? I notice that the top bar is missing as well.
Labels: -Needs-Feedback
Updated to  73.0.3633.0 and it still happens.

This is clearly a rendering problem, not a DOM problem. When opening DevTools the page shows perfectly again.

See attached video for repro.
text-render.mov
5.9 MB View Download
Cc: kbr@chromium.org vmi...@chromium.org ccameron@chromium.org
Components: Internals>GPU Blink>Paint
Okay, thanks. Into GPU triage queue.
Cc: -kbr@chromium.org chrishtr@chromium.org weiliangc@chromium.org
Components: -Internals>GPU Internals>Compositing Internals>GPU>Internals
Labels: OS-Chrome
Not Mac-specific. Happens on ChromeOS too:

Google Chrome	72.0.3623.3 (Official Build) dev (64-bit)
Revision	62566d37ac342c0932ceb403043dc1ab699fc21d-refs/branch-heads/3623@{#7}
Platform	11307.0.0 (Official Build) dev-channel eve

+couple other paint and compositing folks.


Components: -Blink>Paint
Labels: Needs-Bisect
This would seem to be a failure to re-draw or commit after DeferCommits has kicked in on tab hide. Reasonable theory?
Labels: -Needs-Bisect RegressedIn-72 Target-72 Target-73 M-72 FoundIn-73 FoundIn-72 OS-Android OS-Linux OS-Windows
Owner: khushals...@chromium.org
Status: Assigned (was: Untriaged)
Bisects to https://chromium.googlesource.com/chromium/src/+log/4768f623aa44c968f24ec0666b12ddf706f83d7d..7a3974157d66427d15e731954c74c7c0038e81f6

The most plausible candidate, by far, is ...
cc/gpu: Add client driven paint caching for OOP raster.
commit	33205a780d892f1ae0af639fd57a339f44093f9a
author	Khushal <khushalsagar@chromium.org>	Thu Nov 08 10:12:29 2018

This is a serious bug. Revert the patch?
Cc: enne@chromium.org
Khushal is out for the next couple weeks.

From a quick check, this appears to be OOP-Raster specific (and that would align with Khushal's patch).

I suspect that the patch you point out has a bug which is causing us to try to use font entries which have been evicted.

We're hitting the error here: https://cs.chromium.org/chromium/src/gpu/command_buffer/service/raster_decoder.cc?rcl=667e92ed486d1326e4af0c9f1f68d9cb1c3b38d3&l=2297

Unfortunately, this patch doesn't really revert cleanly at this point.

OOP-Raster is not launched on Mac or CrOS, but is in a finch trial. If we want to address this bug in Canary or Dev, our best bet is probably to disable the experiment on Mac / CrOS for now and investigate the issue when Khushal returns.

WDYT?

Also worth noting, OOP-R is attempting to launch on Android in M71, so an M72 regression is problematic. That said, I couldn't trigger the bug on Android. I imagine it exists there as well though.

We should try to rapidly fix this issue and merge to M72 once Khushal gets back. I'll investigate more if I have time, but don't have a lot of bandwidth at the moment.
Labels: ReleaseBlock-Stable
I'll take a look tomorrow.

Reminder M72 Stable is coming soon. Please review this bug and assess if this is indeed a RBS. If not, please remove the RBS label. If so, please make sure to land the fix and request a merge into the release branch ASAP. Thank you.
Reminder M72 Stable is coming VERY soon. Please review this bug and assess if this is indeed a RBS. If not, please remove the RBS label. If so, please make sure to land the fix and request a merge into the release branch ASAP. Thank you.
Issue 912167 has been merged into this issue.
Cc: khushals...@chromium.org danakj@chromium.org marc...@chromium.org osh...@chromium.org
 Issue 906979  has been merged into this issue.
Blocking: 910772
Project Member

Comment 17 by bugdroid1@chromium.org, Jan 3

The following revision refers to this bug:
  https://chromium.googlesource.com/chromium/src.git/+/9192c6f341d55098b34a3254ed9938307b00fabe

commit 9192c6f341d55098b34a3254ed9938307b00fabe
Author: Khushal Sagar <khushalsagar@chromium.org>
Date: Thu Jan 03 11:41:10 2019

cc/gpu: Ensure consistent PaintCache state on op serialization failure.

The ClientPaintCache assumes that once an entry has been added to its
state tracking, it is guarenteed to be transferred to the service side
cache and is removed only when explicitly purged.

This assumption is not true in the case where serializing an op fails
due to insufficient memory. In this scenario, the memory is remapped
and the op is re-serialized but any changes made to the
ClientPaintCache state, supposed to be a mirror of the service side
state, are not actually made to the service side state. This cause the
Client and Service PaintCaches to get in an inconsistent state and we
fail to raster the tile due to deserialization failures.

Avoid this by tracking the serialized cache entries in a pending list
that is committed only when the data is guarenteed to be transferred to
the service, and discarded otherwise.

R=enne@chromium.org, ericrk@chromium.org

Bug:  912282 
Change-Id: I96d4108acb4903ce0ff48b54718c65b61805e103
Reviewed-on: https://chromium-review.googlesource.com/c/1393138
Commit-Queue: Khushal <khushalsagar@chromium.org>
Reviewed-by: enne <enne@chromium.org>
Reviewed-by: Eric Karl <ericrk@chromium.org>
Cr-Commit-Position: refs/heads/master@{#619622}
[modify] https://crrev.com/9192c6f341d55098b34a3254ed9938307b00fabe/cc/paint/paint_cache.cc
[modify] https://crrev.com/9192c6f341d55098b34a3254ed9938307b00fabe/cc/paint/paint_cache.h
[modify] https://crrev.com/9192c6f341d55098b34a3254ed9938307b00fabe/cc/paint/paint_cache_unittest.cc
[modify] https://crrev.com/9192c6f341d55098b34a3254ed9938307b00fabe/cc/test/test_options_provider.cc
[modify] https://crrev.com/9192c6f341d55098b34a3254ed9938307b00fabe/gpu/command_buffer/client/raster_implementation.cc

Cc: gov...@chromium.org
Labels: Merge-Request-72
Checked with mac canary version 73.0.3663.0 and OOP Raster enabled, the bug is fixed with the change in #17. Making a merge request for 72.
Labels: -Merge-Request-72 Merge-Approved-72
Approving merge to M72 branch 3626 based on comment #18 and per offline chat with khushalsagar@.
Project Member

Comment 20 by bugdroid1@chromium.org, Jan 7

Labels: -merge-approved-72 merge-merged-3626
The following revision refers to this bug:
  https://chromium.googlesource.com/chromium/src.git/+/a05298e0fe94d85ff865192fb4b907470ec447d2

commit a05298e0fe94d85ff865192fb4b907470ec447d2
Author: Khushal Sagar <khushalsagar@chromium.org>
Date: Mon Jan 07 06:19:55 2019

cc/gpu: Ensure consistent PaintCache state on op serialization failure.

The ClientPaintCache assumes that once an entry has been added to its
state tracking, it is guarenteed to be transferred to the service side
cache and is removed only when explicitly purged.

This assumption is not true in the case where serializing an op fails
due to insufficient memory. In this scenario, the memory is remapped
and the op is re-serialized but any changes made to the
ClientPaintCache state, supposed to be a mirror of the service side
state, are not actually made to the service side state. This cause the
Client and Service PaintCaches to get in an inconsistent state and we
fail to raster the tile due to deserialization failures.

Avoid this by tracking the serialized cache entries in a pending list
that is committed only when the data is guarenteed to be transferred to
the service, and discarded otherwise.

R=​enne@chromium.org, ericrk@chromium.org

Bug:  912282 
Change-Id: I96d4108acb4903ce0ff48b54718c65b61805e103
Reviewed-on: https://chromium-review.googlesource.com/c/1393138
Commit-Queue: Khushal <khushalsagar@chromium.org>
Reviewed-by: enne <enne@chromium.org>
Reviewed-by: Eric Karl <ericrk@chromium.org>
Cr-Original-Commit-Position: refs/heads/master@{#619622}(cherry picked from commit 9192c6f341d55098b34a3254ed9938307b00fabe)
Reviewed-on: https://chromium-review.googlesource.com/c/1395871
Reviewed-by: Khushal <khushalsagar@chromium.org>
Cr-Commit-Position: refs/branch-heads/3626@{#578}
Cr-Branched-From: d897fb137fbaaa9355c0c93124cc048824eb1e65-refs/heads/master@{#612437}
[modify] https://crrev.com/a05298e0fe94d85ff865192fb4b907470ec447d2/cc/paint/paint_cache.cc
[modify] https://crrev.com/a05298e0fe94d85ff865192fb4b907470ec447d2/cc/paint/paint_cache.h
[modify] https://crrev.com/a05298e0fe94d85ff865192fb4b907470ec447d2/cc/paint/paint_cache_unittest.cc
[modify] https://crrev.com/a05298e0fe94d85ff865192fb4b907470ec447d2/cc/test/test_options_provider.cc
[modify] https://crrev.com/a05298e0fe94d85ff865192fb4b907470ec447d2/gpu/command_buffer/client/raster_implementation.cc

Labels: Merge-Merged-72-3626
The following revision refers to this bug: 
https://chromium.googlesource.com/chromium/src.git/+/a05298e0fe94d85ff865192fb4b907470ec447d2

Commit: a05298e0fe94d85ff865192fb4b907470ec447d2
Author: khushalsagar@chromium.org
Commiter: khushalsagar@chromium.org
Date: 2019-01-07 06:19:55 +0000 UTC

cc/gpu: Ensure consistent PaintCache state on op serialization failure.

The ClientPaintCache assumes that once an entry has been added to its
state tracking, it is guarenteed to be transferred to the service side
cache and is removed only when explicitly purged.

This assumption is not true in the case where serializing an op fails
due to insufficient memory. In this scenario, the memory is remapped
and the op is re-serialized but any changes made to the
ClientPaintCache state, supposed to be a mirror of the service side
state, are not actually made to the service side state. This cause the
Client and Service PaintCaches to get in an inconsistent state and we
fail to raster the tile due to deserialization failures.

Avoid this by tracking the serialized cache entries in a pending list
that is committed only when the data is guarenteed to be transferred to
the service, and discarded otherwise.

R=​enne@chromium.org, ericrk@chromium.org

Bug:  912282 
Change-Id: I96d4108acb4903ce0ff48b54718c65b61805e103
Reviewed-on: https://chromium-review.googlesource.com/c/1393138
Commit-Queue: Khushal <khushalsagar@chromium.org>
Reviewed-by: enne <enne@chromium.org>
Reviewed-by: Eric Karl <ericrk@chromium.org>
Cr-Original-Commit-Position: refs/heads/master@{#619622}(cherry picked from commit 9192c6f341d55098b34a3254ed9938307b00fabe)
Reviewed-on: https://chromium-review.googlesource.com/c/1395871
Reviewed-by: Khushal <khushalsagar@chromium.org>
Cr-Commit-Position: refs/branch-heads/3626@{#578}
Cr-Branched-From: d897fb137fbaaa9355c0c93124cc048824eb1e65-refs/heads/master@{#612437}
Status: Fixed (was: Assigned)
A note to the test team. Please make sure you go to chrome://flags and enable the feature "Out of process rasterization" when verifying the fix. Thanks!

Sign in to add a comment