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

Issue 595063 link

Starred by 2 users

Issue metadata

Status: Fixed
Owner:
Closed: Mar 2016
Cc:
Components:
EstimatedDays: ----
NextAction: ----
OS: Mac
Pri: 1
Type: Bug

Blocking:
issue 579664



Sign in to add a comment

canvas 2d width and rendering bugs, combined with webgl

Project Member Reported by deanm@chromium.org, Mar 15 2016

Issue description

Version: Version 51.0.2679.0 canary (64-bit)
OS: OS X 10.9.5

This is a bit of a complicated one, but a repro html is attached (along with a video).  Originally I thought this had to do with WebGL2 but it seems to happen the same with a normal non-webgl2 canary (no es3 apis flag).  This just started showing in 51.0.2679.0 and was not happening before the recent canary push.

The issue is somehow complicated with the fact that, when you have a retina canvas you set the width and height to X, but the style width and height to X/2.  This is normally fine but then when you create a webgl canvas on the same page as a 2d canvas it seems to change the behaviour and the scaling for the 2d canvas no longer works.  (It seems the scaling for a webgl canvas still works fine).  In the case of the demo the black circle just disappears.  However if you right click and "Save Image As..." the result is still the black circle as it should be in the canvas.  So it seems like the canvas is right, but perhaps the compositing is wrong.
 
retinacanvasbug.mov
83.7 KB Download
retinacanvasbug.html
712 bytes View Download

Comment 1 by kbr@chromium.org, Mar 15 2016

Components: Blink>Canvas Blink>WebGL
Labels: M-51
Owner: kbr@chromium.org
Status: Assigned (was: Available)
This must be a recent regression. I also just tried it in Canary and it worked fine, but then took the update to 51.0.2678.0 (Official Build) canary (64-bit) and it started failing.

Bisecting.

Comment 2 by deanm@chromium.org, Mar 15 2016

Interestingly you can see that when the webgl elements becomes visible the 2d canvas disappears.  Here is a video just scrolling and changing the window size which is making the webgl canvas visible / not visible.
retinacanvasbug2.mov
626 KB Download

Comment 3 by drott@chromium.org, Mar 15 2016

Cc: -drott@chromium.org

Comment 4 by kbr@chromium.org, Mar 15 2016

You are probably looking for a change made after 380668 (known good), but no later than 380677 (first known bad).
CHANGELOG URL:
  https://chromium.googlesource.com/chromium/src/+log/34f22b83b76ac457f93d35aece3ed56657689d7d..7bea53f048244f5d6d117c5484733130d3248009

Comment 5 by kbr@chromium.org, Mar 15 2016

Blocking: 579664
Owner: erikc...@chromium.org
It's https://chromium.googlesource.com/chromium/src/+/f3d656148aa51e025094c93290d1fbf889064ca8 .

Erik, can you take this and let's figure out whether to revert, disable, etc.?

Comment 6 by kbr@chromium.org, Mar 15 2016

Cc: ccameron@chromium.org
BTW, the fact that this happens might indicate strange behavior of IOSurfaces in conjunction with dual-GPU setups.

Investigating.

Comment 8 by kbr@chromium.org, Mar 15 2016

BTW, let's add a pixel test covering this case, similar to https://codereview.chromium.org/1804143002/ . Thanks.

Project Member

Comment 9 by bugdroid1@chromium.org, Mar 15 2016

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

commit a3a0a383e8f185c4dd44fc4c2f4126b783a7f259
Author: erikchen <erikchen@chromium.org>
Date: Tue Mar 15 21:12:11 2016

Temporarily disable IOSurface Canvas2D.

There are compositing issues when both a Canvas2D and WebGL canvas are present
on a page.

BUG= 595063 

Review URL: https://codereview.chromium.org/1804143003

Cr-Commit-Position: refs/heads/master@{#381315}

[modify] https://crrev.com/a3a0a383e8f185c4dd44fc4c2f4126b783a7f259/third_party/WebKit/Source/platform/graphics/Canvas2DLayerBridge.h

Project Member

Comment 10 by bugdroid1@chromium.org, Mar 16 2016

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

commit 4e7ecf36fb2af3e3677c085de5b1ea6e7e75f3be
Author: erikchen <erikchen@chromium.org>
Date: Wed Mar 16 22:32:26 2016

Re-enable IOSurface Canvas2D.

Previously, WebExternalTextureLayerImpl inferred the size of the texture from
the bounds of the WebLayer, but the two are not necessarily the same. This CL
passes the texture size through WebExternalTextureMailbox.

This CL also adds a pixel test.

BUG= 595063 
CQ_INCLUDE_TRYBOTS=tryserver.blink:linux_blink_rel

Review URL: https://codereview.chromium.org/1804243002

Cr-Commit-Position: refs/heads/master@{#381570}

[modify] https://crrev.com/4e7ecf36fb2af3e3677c085de5b1ea6e7e75f3be/cc/blink/web_external_texture_layer_impl.cc
[add] https://crrev.com/4e7ecf36fb2af3e3677c085de5b1ea6e7e75f3be/content/test/data/gpu/pixel_canvas2d_webgl.html
[modify] https://crrev.com/4e7ecf36fb2af3e3677c085de5b1ea6e7e75f3be/content/test/data/gpu/pixel_webgl.html
[add] https://crrev.com/4e7ecf36fb2af3e3677c085de5b1ea6e7e75f3be/content/test/data/gpu/pixel_webgl_util.js
[modify] https://crrev.com/4e7ecf36fb2af3e3677c085de5b1ea6e7e75f3be/content/test/gpu/gpu_tests/pixel_expectations.py
[modify] https://crrev.com/4e7ecf36fb2af3e3677c085de5b1ea6e7e75f3be/content/test/gpu/page_sets/pixel_tests.py
[modify] https://crrev.com/4e7ecf36fb2af3e3677c085de5b1ea6e7e75f3be/third_party/WebKit/Source/platform/graphics/Canvas2DLayerBridge.cpp
[modify] https://crrev.com/4e7ecf36fb2af3e3677c085de5b1ea6e7e75f3be/third_party/WebKit/Source/platform/graphics/Canvas2DLayerBridge.h
[modify] https://crrev.com/4e7ecf36fb2af3e3677c085de5b1ea6e7e75f3be/third_party/WebKit/Source/platform/graphics/ImageBuffer.cpp
[modify] https://crrev.com/4e7ecf36fb2af3e3677c085de5b1ea6e7e75f3be/third_party/WebKit/Source/platform/graphics/gpu/DrawingBuffer.cpp
[modify] https://crrev.com/4e7ecf36fb2af3e3677c085de5b1ea6e7e75f3be/third_party/WebKit/public/platform/WebExternalTextureMailbox.h

Comment 11 by n...@geo.me, Mar 17 2016

I'm seeing a very similar issue, but it appears to be unrelated to WebGL.

Seems to be if I background the tab and open a new page my canvases will disappear upon returning, but Save As Image still works correctly.

Apologies for not being able to narrow it down further.
I'm seeing some flakes on the waterfall on trace_test.IOSurface2DCanvas, e.g:

[62914:16899:0317/063813:ERROR:gpu_watchdog_thread.cc(362)] The GPU process hung. Terminating after 10000 ms.

https://build.chromium.org/p/chromium.gpu/builders/Mac%2010.10%20Retina%20Release%20%28AMD%29?numbuilds=200

I'll be in MTV this afternoon if you want a second pair of eyes for debugging.
11: That sounds like a bug with hibernation, which *should* be orthogonal to my changes. Can you file a new bug, and include:

1) the web page
2) your system specs and chrome version.
ccameron: I filed a different bug:

https://bugs.chromium.org/p/chromium/issues/detail?id=595754

Marking this one as fixed, since the original problem has been fixed.
Status: Fixed (was: Assigned)
neil: This looks like the problem you were seeing:
https://bugs.chromium.org/p/chromium/issues/detail?id=588434

Comment 17 by n...@geo.me, Mar 17 2016

Yeah, that seems related - though it's happening to me when I open a new tab in the same window, and unrelated to textareas.

Noticed that I can go:

page (working canvases) -> new tab -> any new website in new tab -> page (broken canvases) -> back to website I opened -> page the canvases will be working again.

I'm not able to share a link to the page, nor have I been able to replicate on any publicly available site / cut down example of my site.

I'll comment on that issue as well.

Comment 18 by n...@geo.me, Mar 17 2016

additionally, it has just started happening with the latest version of chrome - it's affecting a big part of the first page of my web app so I'd have noticed it before.
You should update to the latest version of Chrome Canary and see if you still see the bug. Hibernation was disabled for Canvas2D on Mac 3 days ago. https://bugs.chromium.org/p/chromium/issues/detail?id=588434#c35

This is also why it's helpful if you post your version of Chrome.

Comment 20 by n...@geo.me, Mar 17 2016

Appears to be fixed in Canary, running them side by side chrome 49.0.2623.87 has the issue and 51.0.2680.0 canary doesn't.
Thanks
Project Member

Comment 21 by bugdroid1@chromium.org, Apr 7 2016

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

commit cfc49cf736c1b7d5879669b17a7dc68893f573d2
Author: erikchen <erikchen@chromium.org>
Date: Thu Apr 07 22:08:55 2016

Enable IOSurface2DCanvasWebGL and 2DCanvasWebGL pixel tests.

The reference images have been made by the bots.

BUG= 595063 
CQ_INCLUDE_TRYBOTS=tryserver.chromium.win:win_optional_gpu_tests_rel;tryserver.chromium.mac:mac_optional_gpu_tests_rel

Review URL: https://codereview.chromium.org/1866893002

Cr-Commit-Position: refs/heads/master@{#385895}

[modify] https://crrev.com/cfc49cf736c1b7d5879669b17a7dc68893f573d2/content/test/gpu/gpu_tests/pixel_expectations.py

Sign in to add a comment