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

Issue 702980 link

Starred by 3 users

Issue metadata

Status: Fixed
Owner:
OOO until 2019-01-24
Closed: Nov 2017
Cc:
Components:
EstimatedDays: ----
NextAction: ----
OS: Android
Pri: 2
Type: Compat

Blocking:
issue 768074



Sign in to add a comment

Web GL Extension disjoint_timer_query returns 1285 (Memory Overflow) on Android

Reported by helmut.e...@gmail.com, Mar 19 2017

Issue description

Example URL:
http://www.taccgl.org/blog/css-transition-visibility.html?exttimer=t&dbg=t&looperrcheck=t

Steps to reproduce the problem:
1. call the URL http://www.taccgl.org/blog/css-transition-visibility.html?exttimer=t&dbg=t&looperrcheck=t

What is the expected behavior?
Should display a green 3D sign on the page top and show
simple WebGL animations.

What went wrong?
Displays a yellow-2D sign on the page top
and  Error 1285 on beginQueryEXT on the javascript console
and instead of WebGL animations canvas-2d animations are shown.

Does it occur on multiple sites: N/A

Is it a problem with a plugin? No 

Did this work before? N/A 

Does this work in other browsers? Yes

Chrome version: 56.0.2924.87  Channel: stable
OS Version: 6.0.1
Flash Version: 

The page works on desktop windows chrome stable and canary. The error also occurs in canary on android.

The error does not show up if the exttimer=t URL parameter is not used to disable the disjoint_timer_query extension.

I tested some other pages on my site that also use my taccgl.js library and the error occured as well. The library normally uses the extension to enable/disable rendering features depending on GPU performance. In the current version of the library the extension is no longer used on android (unless the exttimer parameter is given).

URL parameter dbg=t uses non-minified .js libs and looperrcheck=t enables WebGL error checking after most of the WebGL calls.

The problem occurs on a German Samsung S7 Phone SM-G930F
 
Components: Blink>WebGL

Comment 2 by danakj@chromium.org, Oct 27 2017

Cc: kbr@chromium.org kainino@chromium.org
Labels: Needs-Feedback
Are you on Chrome 56? That's very old now, can you update and report back?

Comment 3 by kbr@chromium.org, Oct 27 2017

It looks like this bug was filed back in March when 56 was Stable.

Submitter, please provide about:gpu information from your phone. We can blacklist the disjoint_timer_query extension on that phone if it's broken.

I just verified that the problem still occurs with Chrome 61.0.3168.98 on
my German Samsung S7 Phone SM-G930F. However the problem seemes 
to occur on various other popular Samsung smart phones SM-920F, SM-930F
and SM-925F, tested in March with chrome 56. After I found out, I
disabled the use of the extension in my lib on all android devices.

I am afraid that black listing this extension will hit very many devices, so I still
hope, that there is a work around or fix. My taccgl library uses the timer extension to 
automatically degrade graphic quality on slow GPUs. Because of the problems with the timer
extension on Android it currently has to rely on frame rate measurements, which are much more
inprecise.

Currently there is another problem with the http://www.taccgl.org/blog/css-transition-visibility.html
page (see below), so for reproducing the problem another page is needed: 
    http://www.taccgl.org/tutorial/firstExample.html?exttimer=t&dbg=t&looperrcheck=t
and then pressing the red button labelled  "RUN". Calling the page without the exttimer option
disables the extension and makes the page run on my phone. On desktops the extension
is automatically enabled without option and runs well.

The page http://www.taccgl.org/blog/css-transition-visibility.html given in the bug report
from march now with chrome 61 stopped working completely and delivers an error message 

18:49:27.474 taccgl.js:1501 [GroupMarkerNotSet( crbug.com/242999 )!:54F398C0]GL ERROR :GL_INVALID_OPERATION : BackFramebuffer::Create: <- error from previous GL command
on the German Samsung S7 Phone SM-G930F. It works on my desktop. To me this seems 
to be similar to http://crbug.com/740971 . Pls let me know if I should file another
bug report on this.
Project Member

Comment 5 by sheriffbot@chromium.org, Nov 1 2017

Cc: danakj@chromium.org
Labels: -Needs-Feedback
Thank you for providing more feedback. Adding requester "danakj@chromium.org" to the cc list and removing "Needs-Feedback" label.

For more details visit https://www.chromium.org/issue-tracking/autotriage - Your friendly Sheriffbot
Note: To properly save this page, select the "Webpage, Complete" option in the Save File dialog.
Graphics Feature Status
Canvas: Hardware accelerated
CheckerImaging: Disabled
Flash: Hardware accelerated
Flash Stage3D: Hardware accelerated
Flash Stage3D Baseline profile: Hardware accelerated
Compositing: Hardware accelerated
Multiple Raster Threads: Disabled
Native GpuMemoryBuffers: Software only. Hardware acceleration disabled
Rasterization: Hardware accelerated
Video Decode: Hardware accelerated
Video Encode: Hardware accelerated
WebGL: Hardware accelerated
WebGL2: Hardware accelerated
Driver Bug Workarounds
clear_uniforms_before_first_program_use
disable_framebuffer_cmaa
max_texture_size_limit_4096
scalarize_vec_and_mat_constructor_args
use_client_side_arrays_for_stream_buffers
use_virtualized_gl_contexts
Problems Detected
ARM driver doesn't like uploading lots of buffer data constantly
Applied Workarounds: use_client_side_arrays_for_stream_buffers
The Mali-Txxx driver does not guarantee flush ordering: 154715, 10068, 269829, 294779, 285292
Applied Workarounds: use_virtualized_gl_contexts
Clear uniforms before first program use on all platforms: 124764, 349137
Applied Workarounds: clear_uniforms_before_first_program_use
Always rewrite vec/mat constructors to be consistent: 398694
Applied Workarounds: scalarize_vec_and_mat_constructor_args
Limit max texure size to 4096 on all of Android
Applied Workarounds: max_texture_size_limit_4096
Limited enabling of Chromium GL_INTEL_framebuffer_CMAA: 535198
Applied Workarounds: disable_framebuffer_cmaa
Disable KHR_blend_equation_advanced until cc shaders are updated: 661715
Raster is using a single thread.
Disabled Features: multiple_raster_threads
Native GpuMemoryBuffers have been disabled, either via about:flags or command line.
Disabled Features: native_gpu_memory_buffers
Checker-imaging has been disabled via finch trial or the command line.
Disabled Features: checker_imaging
Version Information
Data exported	1.11.2017, 11:42:59
Chrome version	Chrome/61.0.3163.98
Operating system	Android 7.0
Software rendering list version	13.10
Driver bug list version	10.29
ANGLE commit id	0d2ecb4ea992
2D graphics backend	Skia/61 0eefc0552cfb5ac077560b7c2630c5bd475ea585-
Command Line	--use-mobile-user-agent --top-controls-show-threshold=0.5 --top-controls-hide-threshold=0.5 --use-mobile-user-agent --enable-pinch --enable-viewport --validate-input-event-stream --enable-longpress-drag-selection --touch-selection-strategy=direction --disable-gpu-process-crash-limit --main-frame-resizes-are-orientation-changes --disable-composited-antialiasing --ui-prioritize-in-gpu-process --profiler-timing=0 --prerender-from-omnibox=enabled --enable-dom-distiller --flag-switches-begin --enable-features=MediaDocumentDownloadButton --flag-switches-end --top-controls-show-threshold=0.5 --top-controls-hide-threshold=0.5
Driver Information
Initialization time	241
In-process GPU	false
Passthrough Command Decoder	false
Supports overlays	false
Sandboxed	false
GPU0	VENDOR = 0x0000 [ARM], DEVICE= 0x0000 [Mali-T880]
Optimus	false
Optimus	false
AMD switchable	false
Driver vendor	
Driver version	1.
Driver date	
Pixel shader version	3.20
Vertex shader version	3.20
Max. MSAA samples	16
Machine model name	SM-G930F
Machine model version	
GL_VENDOR	ARM
GL_RENDERER	Mali-T880
GL_VERSION	OpenGL ES 3.2 v1.r12p1-03dev0.228ab63cced004f840e7dd47b762a1d0
GL_EXTENSIONS	GL_EXT_debug_marker GL_ARM_rgba8 GL_ARM_mali_shader_binary GL_OES_depth24 GL_OES_depth_texture GL_OES_depth_texture_cube_map GL_OES_packed_depth_stencil GL_OES_rgb8_rgba8 GL_EXT_read_format_bgra GL_OES_compressed_paletted_texture GL_OES_compressed_ETC1_RGB8_texture GL_OES_standard_derivatives GL_OES_EGL_image GL_OES_EGL_image_external GL_OES_EGL_image_external_essl3 GL_OES_EGL_sync GL_OES_texture_npot GL_OES_vertex_half_float GL_OES_required_internalformat GL_OES_vertex_array_object GL_OES_mapbuffer GL_EXT_texture_format_BGRA8888 GL_EXT_texture_rg GL_EXT_texture_type_2_10_10_10_REV GL_OES_fbo_render_mipmap GL_OES_element_index_uint GL_EXT_shadow_samplers GL_OES_texture_compression_astc GL_KHR_texture_compression_astc_ldr GL_KHR_texture_compression_astc_hdr GL_KHR_texture_compression_astc_sliced_3d GL_KHR_debug GL_EXT_occlusion_query_boolean GL_EXT_disjoint_timer_query GL_EXT_blend_minmax GL_EXT_discard_framebuffer GL_OES_get_program_binary GL_OES_texture_3D GL_EXT_texture_storage GL_EXT_multisampled_render_to_texture GL_OES_surfaceless_context GL_OES_texture_stencil8 GL_EXT_shader_pixel_local_storage GL_ARM_shader_framebuffer_fetch GL_ARM_shader_framebuffer_fetch_depth_stencil GL_ARM_mali_program_binary GL_EXT_sRGB GL_EXT_sRGB_write_control GL_EXT_texture_sRGB_decode GL_KHR_blend_equation_advanced GL_KHR_blend_equation_advanced_coherent GL_OES_texture_storage_multisample_2d_array GL_OES_shader_image_atomic GL_EXT_robustness GL_EXT_draw_buffers_indexed GL_OES_draw_buffers_indexed GL_EXT_texture_border_clamp GL_OES_texture_border_clamp GL_EXT_texture_cube_map_array GL_OES_texture_cube_map_array GL_OES_sample_variables GL_OES_sample_shading GL_OES_shader_multisample_interpolation GL_EXT_shader_io_blocks GL_OES_shader_io_blocks GL_EXT_tessellation_shader GL_OES_tessellation_shader GL_EXT_primitive_bounding_box GL_OES_primitive_bounding_box GL_EXT_geometry_shader GL_OES_geometry_shader GL_ANDROID_extension_pack_es31a GL_EXT_gpu_shader5 GL_OES_gpu_shader5 GL_EXT_texture_buffer GL_OES_texture_buffer GL_EXT_copy_image GL_OES_copy_image GL_EXT_color_buffer_half_float GL_EXT_color_buffer_float GL_EXT_YUV_target GL_OVR_multiview GL_OVR_multiview2 GL_OVR_multiview_multisampled_render_to_texture GL_KHR_robustness GL_KHR_robust_buffer_access_behavior GL_EXT_draw_elements_base_vertex GL_OES_draw_elements_base_vertex GL_EXT_protected_textures
Disabled Extensions	GL_KHR_blend_equation_advanced GL_KHR_blend_equation_advanced_coherent
Window system binding vendor	
Window system binding version	
Window system binding extensions	
Direct rendering	Yes
Reset notification strategy	0x8252
GPU process crash count	0
Compositor Information
Tile Update Mode	One-copy
Partial Raster	Enabled
GpuMemoryBuffers Status
ATC	Software only
ATCIA	Software only
DXT1	Software only
DXT5	Software only
ETC1	Software only
R_8	Software only
R_16	Software only
RG_88	Software only
BGR_565	Software only
RGBA_4444	Software only
RGBX_8888	Software only
RGBA_8888	Software only
BGRX_8888	Software only
BGRA_8888	Software only
RGBA_F16	Software only
YVU_420	Software only
YUV_420_BIPLANAR	Software only
UYVY_422	Software only

Owner: kbr@chromium.org
Status: Assigned (was: Unconfirmed)
Thanks for confirming this is still a problem in 61. kbr@ can you triage?

Comment 8 by kbr@chromium.org, Nov 2 2017

Labels: Needs-Feedback
Submitter: per #4 above I tried:
http://www.taccgl.org/tutorial/firstExample.html?exttimer=t&dbg=t&looperrcheck=t

on a Retina MacBook Pro with NVIDIA GPU (pretty reasonable) and the animation chugs along very slowly, hanging up the machine for a good fraction of a second at the beginning. This machine has a capable GPU so I have a feeling your library is doing something really stressful on the GPU.

I'm hesitant to blacklist EXT_disjoint_timer_query on the Mali-T880 in response to this bug report because I have a feeling it's reporting a legitimate issue.

How is your library performing its animations? Does it use requestAnimationFrame to schedule them? If it's using setTimeout, please don't use that. There is the possibility it will swamp the GPU with rendering commands.

Can you please provide a smaller test case demonstrating the problem with EXT_disjoint_timer_query, something separated from the entirety of the rest of your library?

> Can you please provide a smaller test case demonstrating the problem with EXT_disjoint_timer_query, 
> something separated from the entirety of the rest of your library?
I just ran the Khronos test suite 1.0.4 
https://www.khronos.org/registry/webgl/sdk/tests/webgl-conformance-tests.html
conformance/extensions/ext-disjoint-timer-query.html 
fails on the device and runs on the desktop.

> Submitter: per #4 above I tried:
> http://www.taccgl.org/tutorial/firstExample.html?exttimer=t&dbg=t&looperrcheck=t
> on a Retina MacBook Pro with NVIDIA GPU (pretty reasonable) and the animation chugs along very slowly,
> hanging up the machine for a good fraction of a second at the beginning. This machine has a capable GPU 
> so I have a feeling your library is doing something really stressful on the GPU.
I just fixed an incompatibility in the lib w.r.t. the new viewport api, which caused
a very much oversized webgl canvas and so high load on the GPU. 
Now it runs smoothly on the phone again without the exttimer=t option. When the use of the timer 
extension is enabled with the exttimer=t option it crashes with the 1285 error.
Crashes:
http://www.taccgl.org/tutorial/firstExample.html?exttimer=t&dbg=t&looperrcheck=t
Works:
http://www.taccgl.org/tutorial/firstExample.html?dbg=t

The looperrcheck=t option is for debugging only and calls glError after each webgl call in 
the requestAnimationFrame callback and slows down animations by breaking the GPU pipeline.
So for timing measurements use 
    http://www.taccgl.org/tutorial/firstExample.html?exttimer=t&dbg=t
or 
    http://www.taccgl.org/tutorial/firstExample.html?exttimer=t&dbg=t&debug=t
the second one to produce test output and timing information on the js console.


The library does some moderate stressful things to the GPU it tries to perform a full window / 
full screen animation possibly on full resolution. On a retina display it multiplies
the canvas size by the device pixel ratio sometimes resulting in a huge 3D canvas.
It also can do a kind shadows. However, if the requestAnimationFrame call
back is not called at 60 FPS and the gpu time measured by the timer extension is 
bigger than 10ms it switches back to simpler shaders, a smaller canvas (not covering
the full window, and lower resolution of the canvas). 

On the beginning of the animation it performs load tests on the gpu for about a second
to find out whether to enable the shadow shaders. At the beginning it also compiles shaders 
and uploads 2 textures (which are also full screen at retina resolution). 

> How is your library performing its animations? Does it use requestAnimationFrame to schedule them? 
> If it's using setTimeout, please don't use that. There is the possibility it will swamp the GPU 
> with rendering commands.
It uses requestAnimationFrame. 

I just noticed that the Needs-Feedback Label is still active and hope that is not a problem.
Labels: -Needs-Feedback

Comment 12 by kbr@chromium.org, Nov 14 2017

Blocking: 768074

Comment 13 by kbr@chromium.org, Nov 18 2017

Status: Started (was: Assigned)
Project Member

Comment 14 by bugdroid1@chromium.org, Nov 18 2017

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

commit 7b33c549911215282621c311701672fa3fd672cf
Author: Kenneth Russell <kbr@chromium.org>
Date: Sat Nov 18 03:38:39 2017

Blacklist EXT_disjoint_timer_query extension on Samsung Galaxy S6.

The driver is generating GL_OUT_OF_MEMORY errors when it's used. Stop
exposing it to the application level.

BUG= 702980 
NOTRY=true

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: I5d3ec20941ce0d032f37293db71926347a1652aa
Reviewed-on: https://chromium-review.googlesource.com/777982
Commit-Queue: Kenneth Russell <kbr@chromium.org>
Reviewed-by: Zhenyao Mo <zmo@chromium.org>
Cr-Commit-Position: refs/heads/master@{#517693}
[modify] https://crrev.com/7b33c549911215282621c311701672fa3fd672cf/gpu/config/gpu_driver_bug_list.json

Comment 15 by kbr@chromium.org, Nov 18 2017

Status: Fixed (was: Started)
I believe this will be fixed (by virtue of no longer exposing the EXT_disjoint_timer_query extension to WebGL) by the CL above. Closing this as Fixed. Please reopen or comment if you test the above CL (in Chrome Canary, for example) and it somehow doesn't prevent the problem from happening.

Comment 16 by kbr@chromium.org, Nov 18 2017

Cc: ddorwin@chromium.org zmo@chromium.org bajones@chromium.org
 Issue 768074  has been merged into this issue.
I tested with Canary on my phone and the out of memory error no longer occurs.

My phone, however, is an S7 not a S6. S6 is mentioned in the check-in message. I guess the checkin itself refers to the S7 and not the S6 since it uses a model name SM-G930F. 

In March (with chrome 56) I have seen this bug occurring on S6 (SM-920F) and S6 Edge (SM-925F) as well. I do not have access to these phones to test the fix now. 

Since I want to use ext_timer in my lib for use on ordinary web sites, this needs to work (at least not crash) on almost all devices. In the production version of my lib for android I use frame rate measurements, which work quite well. Still ext_timer would probably be better.


Comment 18 by kbr@chromium.org, Nov 29 2017

If you can confirm it's broken on other phones then please provide about:gpu from them and we'll blacklist the extension on them. The bug here is in the graphics driver, not in Chrome, and there is nothing we can do to make this extension work. The only thing we can do is avoid exposing it to WebGL to avoid the broken behavior.

Sign in to add a comment