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

Issue 736969 link

Starred by 2 users

Issue metadata

Status: Available
Owner: ----
Cc:
Components:
EstimatedDays: ----
NextAction: ----
OS: Linux , Windows , Mac
Pri: 2
Type: Bug

Blocked on:
issue 755766



Sign in to add a comment

WebGL drawingBuffer is not preserved when user changes tabs, then reactivates relevant tab

Reported by relic...@gmail.com, Jun 27 2017

Issue description

UserAgent: Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/59.0.3071.115 Safari/537.36

Steps to reproduce the problem:
1. Navigate to https://jsfiddle.net/JoeBlow/m14evgzj/
2. Click 'Copy Image' or click anything so that window.focus fires)
3. Open a new tab or switch to an existing tab
4. Switch back to the jsFiddle tab
5. Click 'Clear Copy' 
6. Click 'Copy Image'

What is the expected behavior?
Since webGL Context was obtained with the option: preserveDrawingBuffer: true, and the webGL Context lost event did not fire, I expect the drawing buffer to be preserved and a copy operation from 3d canvas to 2d canvas should work (ex. 
2dContextDestination.drawImage(window.canvas3dSource,0,0)

What went wrong?
After switching tabs then switching back to the relevant tab, the drawingBuffer of a webGL context appears to be unusable from Javascript despite the canvas still showing the intended image and preserveDrawingBuffer option set when obtaining the context.

Did this work before? N/A 

Does this work in other browsers? Yes

Chrome version: 59.0.3071.115  Channel: stable
OS Version: 6.1 (Windows 7, Windows Server 2008 R2)
Flash Version: 

Tested in Firefox and multiple versions of IE and this does not affect those browsers.
 
Note that this occurs only when we first draw the webgl canvas on an other context : 
If the canvas has never been drawn before we blur the tab, the buffer is preserved.

https://jsfiddle.net/q3e0a0gz/

webgl_pDB_bug.html
1.2 KB View Download

Comment 2 by gman@chromium.org, Jun 27 2017

Cc: kbr@chromium.org zmo@chromium.org
Components: -Blink>Canvas
Status: Available (was: Unconfirmed)
Was able to repo with the sample provided on OSX 10.12.5 in Chrome 61.0.3141.0 (Official Build) canary (64-bit)
Components: Blink>WebGL
Labels: OS-Linux OS-Mac
Tested this issue using reproted version 59.0.3071.115 on Mac 10.12.4 , Win 10 and Linux Ubuntu 1.04 and was able to reproduce the issue.

This issue seems to be a Non-Regression issue as same behavior is observing since M46.

Please find the below screen cast.

Note: 
1. The above test case is not working as expected in M45 and < M45 Chrome versions.
2. Issue is seen in M61 as well.

Thanks!!
Jun 27 2017 12-35 AM.webm
4.7 MB View Download

Comment 4 by kbr@chromium.org, Jun 27 2017

Cc: junov@chromium.org
Components: Blink>Canvas
This is probably a bookkeeping bug when sending the WebGL canvas's texture over to the 2D canvas's context via mailbox. Just a bug, no need to change the spec.

Project Member

Comment 5 by bugdroid1@chromium.org, Aug 13 2017

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

commit e3775832e557909d8c24243acb0a5296444a0ce0
Author: Xu Xing <xing.xu@intel.com>
Date: Sun Aug 13 04:02:52 2017

When being copied into another canvas, avoid to check if canvas is dirty

BUG=736969

Cq-Include-Trybots: master.tryserver.chromium.android:android_optional_gpu_tests_rel;master.tryserver.chromium.linux:linux_optional_gpu_tests_rel;master.tryserver.chromium.mac:mac_optional_gpu_tests_rel;master.tryserver.chromium.win:win_optional_gpu_tests_rel
Change-Id: I726df2b141d8fc8263fd8200048ae1a59f8f402e
Reviewed-on: https://chromium-review.googlesource.com/573435
Commit-Queue: Xing Xu <xing.xu@intel.com>
Reviewed-by: Kenneth Russell <kbr@chromium.org>
Cr-Commit-Position: refs/heads/master@{#493987}
[add] https://crrev.com/e3775832e557909d8c24243acb0a5296444a0ce0/content/test/data/gpu/pixel_webgl_preserved_after_tab_switch.html
[modify] https://crrev.com/e3775832e557909d8c24243acb0a5296444a0ce0/content/test/gpu/gpu_tests/pixel_expectations.py
[modify] https://crrev.com/e3775832e557909d8c24243acb0a5296444a0ce0/content/test/gpu/gpu_tests/pixel_integration_test.py
[modify] https://crrev.com/e3775832e557909d8c24243acb0a5296444a0ce0/content/test/gpu/gpu_tests/pixel_test_pages.py
[modify] https://crrev.com/e3775832e557909d8c24243acb0a5296444a0ce0/third_party/WebKit/Source/modules/webgl/WebGLRenderingContextBase.cpp

Comment 6 by kbr@chromium.org, Aug 16 2017

Blockedon: 755766
Project Member

Comment 7 by bugdroid1@chromium.org, Aug 16 2017

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

commit 71312357b7c8b967032a11d2c02ca74c2a2a295d
Author: Kenneth Russell <kbr@chromium.org>
Date: Wed Aug 16 23:49:54 2017

Revert "When being copied into another canvas, avoid to check if canvas is dirty"

This reverts commit e3775832e557909d8c24243acb0a5296444a0ce0.

Reason for revert: caused performance regression  http://crbug.com/755766  and test failures in other CLs for Android.

Original change's description:
> When being copied into another canvas, avoid to check if canvas is dirty
> 
> BUG=736969
> 
> Cq-Include-Trybots: master.tryserver.chromium.android:android_optional_gpu_tests_rel;master.tryserver.chromium.linux:linux_optional_gpu_tests_rel;master.tryserver.chromium.mac:mac_optional_gpu_tests_rel;master.tryserver.chromium.win:win_optional_gpu_tests_rel
> Change-Id: I726df2b141d8fc8263fd8200048ae1a59f8f402e
> Reviewed-on: https://chromium-review.googlesource.com/573435
> Commit-Queue: Xing Xu <xing.xu@intel.com>
> Reviewed-by: Kenneth Russell <kbr@chromium.org>
> Cr-Commit-Position: refs/heads/master@{#493987}

TBR=kbr@chromium.org,junov@chromium.org,xing.xu@intel.com

# Not skipping CQ checks because original CL landed > 1 day ago.

Bug: 736969
Change-Id: I114427a8b5033f7e2b95ffcd5f5088b5d55a6e56
Cq-Include-Trybots: master.tryserver.chromium.android:android_optional_gpu_tests_rel;master.tryserver.chromium.linux:linux_optional_gpu_tests_rel;master.tryserver.chromium.mac:mac_optional_gpu_tests_rel;master.tryserver.chromium.win:win_optional_gpu_tests_rel
Reviewed-on: https://chromium-review.googlesource.com/617656
Reviewed-by: Kenneth Russell <kbr@chromium.org>
Commit-Queue: Kenneth Russell <kbr@chromium.org>
Cr-Commit-Position: refs/heads/master@{#495001}
[delete] https://crrev.com/eae916df6d33b644b42ef9f34b4990ceb5a13bdd/content/test/data/gpu/pixel_webgl_preserved_after_tab_switch.html
[modify] https://crrev.com/71312357b7c8b967032a11d2c02ca74c2a2a295d/content/test/gpu/gpu_tests/pixel_expectations.py
[modify] https://crrev.com/71312357b7c8b967032a11d2c02ca74c2a2a295d/content/test/gpu/gpu_tests/pixel_integration_test.py
[modify] https://crrev.com/71312357b7c8b967032a11d2c02ca74c2a2a295d/content/test/gpu/gpu_tests/pixel_test_pages.py
[modify] https://crrev.com/71312357b7c8b967032a11d2c02ca74c2a2a295d/third_party/WebKit/Source/modules/webgl/WebGLRenderingContextBase.cpp

Cc: -junov@chromium.org

Sign in to add a comment