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

Issue 679970 link

Starred by 4 users

Issue metadata

Status: Archived
Owner:
Closed: Jan 2017
Cc:
Components:
EstimatedDays: ----
NextAction: ----
OS: Chrome
Pri: 1
Type: Bug-Regression



Sign in to add a comment

TileManager does not call NotifyReadyToDraw in ChromeOS overview mode

Project Member Reported by sunn...@chromium.org, Jan 11 2017

Issue description

If you open 6 - 8 windows on a minnie and toggle overview mode continuously the UI will hang.

At some point TileManager hits the task limit and has more tiles to schedule. Later when all scheduled tiles finish, the only tiles left are solid color tiles so CheckIfMoreTilesNeedToBePrepared returns after processing these. NotifyReadyToDraw isn't scheduled in the previous IsReadyToDraw because one of the solid color tiles is required for draw.

This can be fixed in a couple of ways:
1. Do not early out on task limit in AssignGpuMemoryToTiles so that all solid color tiles are processed.
2. If there are no tiles to process in CheckIfMoreTilesNeedToBePrepared but there were ready to activate/draw solid color tiles, schedule ready to activate/draw checks.

It's possible the same issue is responsible for missing ready to activate signal causing renderer hangs - issue 622080
 
Log from device:
TileManager::AssignGpuMemory over task limit
TileManager::AssignGpuMemory skipping tile { tile: { id: 244769, rfa: 0, rfd: 1 }, priority: { bin: 0, dtv: 0.000000 }, occluded: 0, img_only: 0 }
TileManager::AssignGpuMemory skipping tile { tile: { id: 244808, rfa: 0, rfd: 1 }, priority: { bin: 0, dtv: 0.000000 }, occluded: 0, img_only: 0 }
TileManager::AssignGpuMemory skipping tile { tile: { id: 244770, rfa: 0, rfd: 1 }, priority: { bin: 0, dtv: 0.000000 }, occluded: 0, img_only: 0 }
TileManager::AssignGpuMemory skipping tile { tile: { id: 244809, rfa: 0, rfd: 1 }, priority: { bin: 0, dtv: 0.000000 }, occluded: 0, img_only: 0 }
TileManager::AssignGpuMemory skipping tile { tile: { id: 244771, rfa: 0, rfd: 1 }, priority: { bin: 0, dtv: 0.000000 }, occluded: 0, img_only: 0 }
TileManager::AssignGpuMemory skipping tile { tile: { id: 244810, rfa: 0, rfd: 1 }, priority: { bin: 0, dtv: 0.000000 }, occluded: 0, img_only: 0 }
TileManager::AssignGpuMemory skipping tile { tile: { id: 244775, rfa: 0, rfd: 1 }, priority: { bin: 0, dtv: 0.000000 }, occluded: 0, img_only: 0 }
TileManager::AssignGpuMemory skipping tile { tile: { id: 244776, rfa: 0, rfd: 1 }, priority: { bin: 0, dtv: 0.000000 }, occluded: 0, img_only: 0 }
TileManager::AssignGpuMemory skipping tile { tile: { id: 244777, rfa: 0, rfd: 1 }, priority: { bin: 0, dtv: 0.000000 }, occluded: 0, img_only: 0 }
TileManager::AssignGpuMemory skipping tile { tile: { id: 244778, rfa: 0, rfd: 1 }, priority: { bin: 0, dtv: 0.000000 }, occluded: 0, img_only: 0 }
TileManager::AssignGpuMemory skipping tile { tile: { id: 244779, rfa: 0, rfd: 1 }, priority: { bin: 0, dtv: 0.000000 }, occluded: 0, img_only: 0 }
TileManager::AreRequiredTilesReadyToDraw all pass
TileManager::AreRequiredTilesReadyToDraw process tile { tile: { id: 244775, rfa: 0, rfd: 1 }, priority: { bin: 0, dtv: 0.000000 }, occluded: 0, img_only: 0 }
TileManager::AssignGpuMemory process tile { tile: { id: 244775, rfa: 0, rfd: 1 }, priority: { bin: 0, dtv: 0.000000 }, occluded: 0, img_only: 0 }
TileManager::AssignGpuMemory solid color
TileManager::AssignGpuMemory process tile { tile: { id: 244776, rfa: 0, rfd: 1 }, priority: { bin: 0, dtv: 0.000000 }, occluded: 0, img_only: 0 }
TileManager::AssignGpuMemory solid color
TileManager::AssignGpuMemory process tile { tile: { id: 244777, rfa: 0, rfd: 1 }, priority: { bin: 0, dtv: 0.000000 }, occluded: 0, img_only: 0 }
TileManager::AssignGpuMemory solid color
TileManager::AssignGpuMemory process tile { tile: { id: 244778, rfa: 0, rfd: 1 }, priority: { bin: 0, dtv: 0.000000 }, occluded: 0, img_only: 0 }
TileManager::AssignGpuMemory solid color
TileManager::AssignGpuMemory process tile { tile: { id: 244779, rfa: 0, rfd: 1 }, priority: { bin: 0, dtv: 0.000000 }, occluded: 0, img_only: 0 }
TileManager::AssignGpuMemory solid color
< Compositor hangs here - begin frames keep coming in but no ready to draw signal >


 
Project Member

Comment 1 by bugdroid1@chromium.org, Jan 18 2017

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

commit a8ad82c005ae878c448ae500b3f7b5e3a880ad56
Author: sunnyps <sunnyps@chromium.org>
Date: Wed Jan 18 00:34:18 2017

cc: Fix missing ready to activate/draw callbacks.

Missing NotifyReadyToActivate/Draw can cause the renderer/browser
compositor to hang. This shows as a ChromeOS hang when overview mode is
toggled continuously and as a renderer hang crash report.

It's possible for TileManager to get into a state where it hits the
raster task limit and the only tiles left after running a set of tasks
are solid color tiles which are required for activate/draw. These solid
color tiles are marked as ready to draw in AssignGpuMemoryToTiles and
therefore ready to activate/draw callbacks aren't scheduled.

It is not known how TileManager gets into this state except that certain
tiling sets are marked as done thereby removing non-solid color tiles
between PrepareTiles and the ready to activate/draw checks.

R=vmpstr@chromium.org
BUG= 679970 ,622080
TEST=TileManagerTest.AllWorkFinished
CQ_INCLUDE_TRYBOTS=master.tryserver.blink:linux_trusty_blink_rel

Review-Url: https://codereview.chromium.org/2636323002
Cr-Commit-Position: refs/heads/master@{#444204}

[modify] https://crrev.com/a8ad82c005ae878c448ae500b3f7b5e3a880ad56/cc/tiles/tile_manager.cc
[modify] https://crrev.com/a8ad82c005ae878c448ae500b3f7b5e3a880ad56/cc/tiles/tile_manager.h
[modify] https://crrev.com/a8ad82c005ae878c448ae500b3f7b5e3a880ad56/cc/tiles/tile_manager_unittest.cc

Labels: Merge-Request-56
Requesting a merge to M56. This also fixes internal bug https://code.google.com/p/chrome-os-partner/issues/detail?id=60938
Project Member

Comment 3 by sheriffbot@chromium.org, Jan 19 2017

Labels: -Merge-Request-56 Merge-Review-56 Hotlist-Merge-Review
This bug requires manual review: We are only 11 days from stable.
Please contact the milestone owner if you have questions.
Owners: amineer@(clank), cmasso@(bling), gkihumba@(cros), bustamante@(desktop)

For more details visit https://www.chromium.org/issue-tracking/autotriage - Your friendly Sheriffbot
Cc: gkihumba@chromium.org
gkihumba@ this bug affects minnie and some other devices (see https://code.google.com/p/chrome-os-partner/issues/detail?id=60938)

It reproduces on chrome os overview mode easily but probably affects all platforms in some way.

Comment 5 by gkihumba@google.com, Jan 24 2017

Labels: Merge-Approved-56

Comment 6 by gkihumba@google.com, Jan 24 2017

Labels: -Merge-Approved-56
Cc: briannorris@chromium.org
Labels: Merge-Request-56
briannorris@ has verified the fix for the internal bug.
Project Member

Comment 8 by sheriffbot@chromium.org, Jan 24 2017

Labels: -Merge-Request-56
This bug requires manual review: We are only 6 days from stable.
Please contact the milestone owner if you have questions.
Owners: amineer@(clank), cmasso@(bling), gkihumba@(cros), bustamante@(desktop)

For more details visit https://www.chromium.org/issue-tracking/autotriage - Your friendly Sheriffbot

Comment 9 by gkihumba@google.com, Jan 24 2017

Labels: Merge-Approved-56
Status: Fixed (was: Started)
Merged https://codereview.chromium.org/2654643004
Project Member

Comment 11 by bugdroid1@chromium.org, Jan 24 2017

Labels: -merge-approved-56 merge-merged-2924
The following revision refers to this bug:
  https://chromium.googlesource.com/chromium/src.git/+/94b48a573af698ed61f2da01c6038557ce3c7f26

commit 94b48a573af698ed61f2da01c6038557ce3c7f26
Author: Sunny Sachanandani <sunnyps@chromium.org>
Date: Tue Jan 24 23:38:14 2017

cc: Fix missing ready to activate/draw callbacks.

Missing NotifyReadyToActivate/Draw can cause the renderer/browser
compositor to hang. This shows as a ChromeOS hang when overview mode is
toggled continuously and as a renderer hang crash report.

It's possible for TileManager to get into a state where it hits the
raster task limit and the only tiles left after running a set of tasks
are solid color tiles which are required for activate/draw. These solid
color tiles are marked as ready to draw in AssignGpuMemoryToTiles and
therefore ready to activate/draw callbacks aren't scheduled.

It is not known how TileManager gets into this state except that certain
tiling sets are marked as done thereby removing non-solid color tiles
between PrepareTiles and the ready to activate/draw checks.

R=vmpstr@chromium.org
BUG= 679970 ,622080
TEST=TileManagerTest.AllWorkFinished
CQ_INCLUDE_TRYBOTS=master.tryserver.blink:linux_trusty_blink_rel

Review-Url: https://codereview.chromium.org/2636323002
Cr-Commit-Position: refs/heads/master@{#444204}
(cherry picked from commit a8ad82c005ae878c448ae500b3f7b5e3a880ad56)

Review-Url: https://codereview.chromium.org/2654643004 .
Cr-Commit-Position: refs/branch-heads/2924@{#858}
Cr-Branched-From: 3a87aecc31cd1ffe751dd72c04e5a96a1fc8108a-refs/heads/master@{#433059}

[modify] https://crrev.com/94b48a573af698ed61f2da01c6038557ce3c7f26/cc/tiles/tile_manager.cc
[modify] https://crrev.com/94b48a573af698ed61f2da01c6038557ce3c7f26/cc/tiles/tile_manager.h
[modify] https://crrev.com/94b48a573af698ed61f2da01c6038557ce3c7f26/cc/tiles/tile_manager_unittest.cc

Issue 684812 has been merged into this issue.
Cc: sammiequon@chromium.org zork@chromium.org tbuck...@chromium.org
 Issue 685231  has been merged into this issue.
Labels: -Hotlist-Merge-Review -Merge-Review-56
Merge request was reviewed.  Removing labels to clear from chromedash.

Comment 15 by dchan@google.com, Apr 17 2017

Labels: VerifyIn-59

Comment 16 by dchan@google.com, May 30 2017

Labels: VerifyIn-60
Labels: VerifyIn-61

Comment 18 by dchan@chromium.org, Oct 14 2017

Status: Archived (was: Fixed)

Sign in to add a comment